Я пишу сценарий процесса развертывания, который берет имя пользователя, запускающего сценарий ansible (например, tlau), и создает каталог развертывания в удаленной системе на основе этого имени пользователя и текущей даты / времени (например, tlau-deploy-2014-10 -15-16: 52).
Вы можете подумать, что это доступно в доступных фактах (например, LOGNAME или SUDO_USER), но все они имеют значение «root» или идентификатор развертывания, используемый для ssh в удаленной системе. Ни один из них не содержит локального пользователя, который в настоящее время запускает доступный процесс.
Как я могу получить сценарий для получения имени пользователя, запускающего доступный процесс, и использовать его в своей книге?
источник
sudo: no
чтобы убедиться, что он не пытается выполнить sudo перед запускомlocal_action
become: no
илиbecome: false
. Но в остальном хороший совет, спасибо!changed=1
? Кроме того, можно ли использовать делегирование фактов?change_when: False
( docs.ansible.com/ansible/… )changed_when
нетchange_when
. Просто меня это укусило.Если вы
gather_facts
, которая по умолчанию включена для плейбуков, есть встроенная переменная, которая установлена с именем,ansible_user_id
которая предоставляет имя пользователя, от имени которого выполняются задачи. Затем вы можете использовать эту переменную в других задачах или шаблонах с{{ ansible_user_id }}
. Это избавит вас от необходимости запускать задачу для регистрации этой переменной.См. Https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variables-discovered-from-systems-facts
источник
remote_user
имя пользователя на хост-машине. Чтобы получить имя пользователя на хост-машине, я не вижу альтернативы a,local_action
как объяснил @Ramon.{{ansible_user_id}}
конечном итоге становится "root", если выbecome:yes
ansible_user_id
вовсе не кажется, в конечном итоге корень дажеbecome: yes
.Я помещаю во все шаблоны примерно следующее:
При создании шаблона он отображается как:
Если я использую
{{ ansible_user_id }}
и становлюсь root, тогда эта переменная указывает «root», а не то, что я хочу большую часть времени.источник
vars
разделе. Как это: `` `- hosts: xxx gather_facts: no vars: user:" {{lookup ('env', 'USER')}} "` `Это считывает имя пользователя из удаленной системы, поскольку не гарантируется, что имена пользователей в локальной и удаленной системе совпадают. Имя можно изменить в конфигурации SSH.
источник
если вы хотите получить пользователя, который запускает шаблон в ansible tower, вы можете использовать эту переменную {{tower_user_name}} в своей playbook, но она определяется только при выполнении вручную
tower_user_name: имя пользователя Tower, запустившего это задание. Это недоступно для обратного вызова или запланированных заданий.
проверьте эти документы https://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html
источник