2014-10-15 5 views
30

Ich schreibe einen Deployment-Prozess, der den Namen des Benutzers verwendet, der das ansible-Skript ausführt (z. B. tlau) und erstellt auf der Basis dieses Benutzernamens und des aktuellen Datums/Zeitpunkts ein Deployment-Verzeichnis (z. B. tlau-deploy-2014) -15-16: 52).Wie bekomme ich eine Variable mit dem Namen des Benutzers ansible?

Sie würden denken, dass dies in ansible Fakten verfügbar ist (z. B. LOGNAME oder SUDO_USER), aber alle sind entweder auf "root" gesetzt oder die Deployment-ID wird verwendet, um ssh in das Remote-System. Keiner von denen enthält den lokalen Benutzer, der derzeit 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?

Antwort

36

Wenn Sie den Benutzernamen auf dem Host-System bedeuten, ich denke, Sie könnten nur eine lokale Aktion ausführen:

- name: get the username running the deploy 
    local_action: command whoami 
    register: username_on_the_host 

- debug: var=username_on_the_host 

In diesem Beispiel ist der Ausgang des whoami Befehl wird in einer Variablen registriert namens „username_on_the_host“ und der Benutzername wird in username_on_the_host.stdout enthalten sein.

(die Debug-Aufgabe erforderlich ist hier nicht, es zeigt nur den Inhalt der Variablen)

+1

Danke! Dies funktionierte für mich: https://gist.github.com/tlau/6f14fe089f2782fe7afa –

+1

set 'sudo: no', um sicherzustellen, dass es nicht versucht, Sudo vor dem Ausführen der' local_action' – drs

+1

in ansible 2.0, das wäre ' werden: nein 'oder' werden: falsch'. Aber sonst ein guter Tipp, danke! –

39

Wenn Sie gather_facts, die für Playbooks standardmäßig aktiviert ist, gibt es eine ist integrierte Variable, die ansible_user_id genannt gesetzt ist Das stellt den Benutzer bereit, mit dem die Tasks ausgeführt werden. Sie können diese Variable dann in anderen Aufgaben oder Vorlagen mit {{ ansible_user_id }} verwenden. Dies würde Ihnen den Schritt ersparen, eine Aufgabe auszuführen, um diese Variable zu registrieren.

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

+11

Für zukünftige Verweise gibt dies den Namen des Benutzers auf dem verwalteten Computer zurück, der dem 'remote_user' entspricht, nicht dem Benutzer auf dem Hostcomputer. Um den Benutzernamen auf dem Hostcomputer zu erhalten, sehe ich keine Alternative zu einer 'local_action', wie von @Ramon erklärt. – astorije

+22

Eine Alternative zum Suchen des Benutzers auf Localhost, der ansible ausführt, ist die Suche: {{lookup ('env', 'USER')}} http://docs.ansible.com/ansible/playbooks_lookups.html – Budric

+7

@Budric In meinem Meinung sollte dies als Antwort geschrieben werden – 030

13

ich so etwas wie das in allen Vorlagen folgende setzen:

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

Wenn darüber Templat zeigt sich als:

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

Wenn ich {{ ansible_user_id }} und ich Werde Wurzel, dann zeigt diese Variable "root" an, nicht was ich die meiste Zeit will.

+0

Sie können diese Suche auch in einer Var am Anfang des Playbooks in einem 'vars hinzufügen 'Abschnitt.Wie folgt aus: '' ' - Gastgeber: xxx gather_facts: keine Vars: Benutzer: "{{Lookup ('env', 'USER')}}" ' '' – Bludwarf

+0

können Sie den jinja2 Kommentar verwenden filter und die Variable ansible_managed, die in der Dokumentation beschrieben ist http://docs.ansible.com/ansible/latest/playbooks_filters.html#comment-filter (suche nach ansible_managed) – dtrv

Verwandte Themen