Ich schreibe ein Skript für einen Bereitstellungsprozess, der den Namen des Benutzers verwendet, der das ansible-Skript ausführt (z. B. tlau) und ein Bereitstellungsverzeichnis auf dem Remote-System basierend auf diesem Benutzernamen und dem aktuellen Datum / der aktuellen Uhrzeit erstellt (z. B. tlau-deploy-2014-10) -15-16: 52).
Sie würden denken, dass dies in ansible Fakten verfügbar ist (z. B. LOGNAME oder SUDO_USER), aber diese sind alle entweder auf "root" oder auf die Bereitstellungs-ID eingestellt, die zum SSH in das Remote-System verwendet wird. Keiner von diesen enthält den lokalen Benutzer, der gerade den ansible-Prozess ausführt.
Wie kann ich den Namen des Benutzers, der den Ansible-Prozess ausführt, per Skript abrufen und in meinem Playbook verwenden?
quelle
sudo: no
um sicherzustellen , dass es nicht vor dem Ausführen von sudo nicht versuchen , dielocal_action
become: no
oderbecome: false
. Aber sonst ein guter Tipp, danke!changed=1
? Kann auch eine Faktendelegation verwendet werden?change_when: False
( docs.ansible.com/ansible/… )changed_when
nichtchange_when
. Ich bin gerade dabei geworden.Wenn Sie
gather_facts
, die standardmäßig für Playbooks aktiviert ist, eine integrierte Variable namens set verwendenansible_user_id
, die den Benutzernamen angibt, unter dem die Aufgaben ausgeführt werden. Sie können diese Variable dann in anderen Aufgaben oder Vorlagen mit verwenden{{ ansible_user_id }}
. Dies würde Ihnen den Schritt ersparen, eine Aufgabe zum Registrieren dieser Variablen auszuführen.Siehe: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variables-discovered-from-systems-facts
quelle
remote_user
, nicht den Benutzer auf dem Hostcomputer. Um den Benutzernamen auf dem Host-Computerlocal_action
abzurufen , sehe ich keine Alternative zu a, wie von @Ramon erläutert.{{ansible_user_id}}
wird "Wurzel", wenn Siebecome:yes
ansible_user_id
scheint es nicht einmal mit root zu seinbecome: yes
.Ich habe in allen Vorlagen Folgendes eingefügt:
Wenn die Vorlage angezeigt wird, wird Folgendes angezeigt:
Wenn ich
{{ ansible_user_id }}
root verwende und root geworden bin, gibt diese Variable "root" an, nicht das, was ich die meiste Zeit möchte.quelle
vars
Abschnitt hinzufügen . So: `` `- hosts: xxx collect_facts: no vars: user:" {{lookup ('env', 'USER')}} "` ``Dadurch wird der Benutzername vom Remote-System gelesen, da nicht garantiert werden kann, dass die Benutzernamen auf dem lokalen und dem Remote-System identisch sind. Es ist möglich, den Namen in der SSH-Konfiguration zu ändern.
quelle