wake-up-neo.net

Wie erhalte ich in Ansible eine Variable mit dem Namen des Benutzers, der Ansible ausführt?

Ich erstelle ein Skript für einen Bereitstellungsprozess, bei dem der Name des Benutzers verwendet wird, der das ansible-Skript ausführt (z. B. tlau), und auf der Grundlage dieses Benutzernamens und des aktuellen Datums/der aktuellen Uhrzeit ein Bereitstellungsverzeichnis auf dem Remotesystem erstellt wird (z. B. tlau-deploy-2014-10) -15-16: 52).

Sie würden denken, dass dies in ansiblen Fakten verfügbar ist (z. B. LOGNAME oder Sudo_USER), aber diese sind alle entweder auf "root" oder die Bereitstellungs-ID eingestellt, die zum ssh in das ferne System verwendet wird. Keiner von diesen enthält den lokalen Benutzer, der gerade den ansiblen Prozess ausführt.

Wie kann ich ein Skript erstellen, um den Namen des Benutzers zu ermitteln, der den Ansible-Prozess ausführt, und ihn in meinem Playbook verwenden?

57
Tessa Lau

Wenn Sie den Benutzernamen auf dem Host-System meinen, können Sie einfach eine lokale Aktion ausführen:

- name: get the username running the deploy
  become: false
  local_action: command whoami
  register: username_on_the_Host

- debug: var=username_on_the_Host

In diesem Beispiel wird die Ausgabe des Befehls whoami in einer Variablen namens "username_on_the_Host" registriert, und der Benutzername wird in username_on_the_Host.stdout Enthalten sein.

(Die Debug-Aufgabe ist hier nicht erforderlich, sie demonstriert nur den Inhalt der Variablen.)

56

Wenn Sie gather_facts Wählen, das standardmäßig für Playbooks aktiviert ist, gibt es eine eingebaute Variable mit dem Namen ansible_user_id, Die den Benutzernamen angibt, unter dem die Aufgaben ausgeführt werden. Sie können diese Variable dann in anderen Tasks oder Vorlagen mit {{ ansible_user_id }} Verwenden. Dies würde Ihnen den Schritt ersparen, eine Aufgabe auszuführen, um diese Variable zu registrieren.

Siehe: http://docs.ansible.com/playbooks_variables.html#information-discovered-from-systems-facts

81
Tony Cesaro

Ich habe in allen Vorlagen so etwas wie das Folgende eingefügt:

# Placed here by {{ lookup('env','USER') }} using Ansible, {{ ansible_date_time.date }}.

Wenn es als Vorlage verwendet wird, sieht es so aus:

# Placed here by staylorx using Ansible, 2017-01-11.

Wenn ich {{ ansible_user_id }} Verwende und root geworden bin, gibt diese Variable "root" an, nicht das, was ich die meiste Zeit möchte.

32
staylorx