2014-10-15 6 views
30

Я создаю сценарий процесса развертывания, в котором используется имя пользователя, выполняющего сценарий ansible (например, tlau), и создается каталог развертывания в удаленной системе на основе этого имени пользователя и текущей даты/времени (например, tlau-deploy-2014 -10-15-16: 52).В незаменимом, как мне получить переменную с именем пользователя, запускаемого пользователем?

Вы считаете, что это доступно в доступных фактах (например, LOGNAME или SUDO_USER), но все они настроены как «корень», или идентификатор развертывания, используемый для ssh в удаленной системе. Ни один из них не содержит локального пользователя, тот, кто в настоящее время работает над процессом.

Как я могу создать скрипт, чтобы получить имя пользователя, выполняющего незатронутый процесс, и использовать его в моей книге?

ответ

36

Если вы имеете в виду имя пользователя на хост-системе, я полагаю, вы могли бы просто запустить локальное действие:

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

- debug: var=username_on_the_host 

В этом примере вывод команды whoami регистрируется в переменной, которая называется «username_on_the_host» , а имя пользователя будет содержаться в username_on_the_host.stdout.

(задача отладки здесь не требуется, он просто показывает содержимое переменной)

+1

Спасибо! Это сработало для меня: https://gist.github.com/tlau/6f14fe089f2782fe7afa –

+1

set 'sudo: no', чтобы убедиться, что он не пытается sudo перед запуском' local_action' – drs

+1

в незаменимом 2.0, что будет ' стать: no' или 'становиться: false'. Но в противном случае хороший отзыв, спасибо! –

39

Если вас gather_facts, который включен по умолчанию для playbooks, есть встроенная переменная, которая устанавливается под названием ansible_user_id который предоставляет пользователю, чтобы задачи выполнялись как. Затем вы можете использовать эту переменную в других задачах или шаблонах с помощью {{ ansible_user_id }}. Это избавит вас от необходимости запуска задачи для регистрации этой переменной.

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

+11

Для будущих ссылок это возвращает имя пользователя на управляемой машине, также как и «remote_user», а не пользователь на главной машине. Чтобы получить имя пользователя на главной машине, я не вижу альтернативы «local_action», как объясняется @Ramon. – astorije

+22

Альтернативой для поиска пользователя на localhost running ansible является использование поиска: {{lookup ('env', 'USER')}} http://docs.ansible.com/ansible/playbooks_lookups.html – Budric

+7

@Budric В моем мнение должно быть опубликовано как ответ – 030

13

я ставлю что-то вроде следующего во всех шаблонах:

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

Когда шаблонный над ней отображается как:

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

Если я использую {{ ansible_user_id }} и я вы становитесь root, тогда эта переменная указывает «root», а не то, что я хочу большую часть времени.

+0

. Вы также можете добавить этот поиск в var в начале playbook в 'vars '.Как это: '' ' - хозяева: ххх gather_facts: нет Vars: пользователь: "{{поиск ('Env', 'USER')}}" ' '' – Bludwarf

+0

вы можете использовать jinja2 комментарий фильтр и переменную ansible_managed, описанную в документации http://docs.ansible.com/ansible/latest/playbooks_filters.html#comment-filter (поиск для ansible_managed) – dtrv

 Смежные вопросы

  • Нет связанных вопросов^_^