Tworzę skrypty procesu wdrażania, który przyjmuje nazwę użytkownika uruchamiającego skrypt ansible (np. Tlau) i tworzy katalog wdrożenia w systemie zdalnym na podstawie tej nazwy użytkownika i bieżącej daty / godziny (np. Tlau-deploy-2014-10 -15-16: 52).
Można by pomyśleć, że jest to dostępne w ansiblowych faktach (np. LOGNAME lub SUDO_USER), ale wszystkie są ustawione na „root” lub identyfikator wdrożenia używany do ssh w zdalnym systemie. Żaden z nich nie zawiera użytkownika lokalnego, który aktualnie uruchamia proces ansibla.
Jak mogę w skrypcie pobrać nazwę użytkownika uruchamiającego proces ansibla i użyć go w swoim playbooku?
źródło
sudo: no
aby upewnić się, że nie spróbuje sudo przed uruchomieniemlocal_action
become: no
lubbecome: false
. Ale poza tym dobra wskazówka, dzięki!changed=1
? Czy można również użyć delegowania faktów?change_when: False
( docs.ansible.com/ansible/ ... )changed_when
niechange_when
. Właśnie zostałem przez to ugryziony.Jeśli ty
gather_facts
, która jest domyślnie włączona dla elementów playbook, istnieje wbudowana zmienna o nazwieansible_user_id
o nazwie, która zawiera nazwę użytkownika, z którym wykonywane są zadania. Możesz następnie użyć tej zmiennej w innych zadaniach lub szablonach z{{ ansible_user_id }}
. Oszczędziłoby to kroku uruchamiania zadania rejestracji tej zmiennej.Zobacz: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variables-discovered-from-systems-facts
źródło
remote_user
, a nie nazwę użytkownika na komputerze hosta. Aby uzyskać nazwę użytkownika na maszynie hosta, nie widzę alternatywy dla a,local_action
jak wyjaśniono przez @Ramon.{{ansible_user_id}}
kończy się byciem "rootem", jeślibecome:yes
ansible_user_id
czy nie wydaje się skończyć się nawet z korzeniabecome: yes
.We wszystkich szablonach umieściłem coś takiego:
Po umieszczeniu na szablonie pojawia się jako:
Jeśli używam
{{ ansible_user_id }}
i zostanę rootem, wtedy ta zmienna wskazuje "root", a nie to, czego chcę przez większość czasu.źródło
vars
sekcji. W ten sposób: `` - hosts: xxx collect_facts: no vars: user: "{{lookup ('env', 'USER')}}" ``Powoduje to odczytanie nazwy użytkownika z systemu zdalnego, ponieważ nie gwarantuje się, że nazwy użytkowników w systemie lokalnym i zdalnym są takie same. Istnieje możliwość zmiany nazwy w konfiguracji SSH.
źródło
jeśli chcesz pozyskać użytkownika, który uruchamia szablon w wieży ansible, możesz użyć tej zmiennej {{tower_user_name}} w swoim playbooku, ale jest ona zdefiniowana tylko przy ręcznych wykonaniach
tower_user_name: nazwa użytkownika wieży, który rozpoczął to zadanie. Nie jest to dostępne w przypadku oddzwonienia ani zaplanowanych zadań.
sprawdź tę dokumentację https://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html
źródło