2016-08-25 4 views
1

Я использую возможность настройки нескольких компьютеров после установки.пользователь текущего пользователя в конфигурации

Для этого я запускаю локально на машинах. У «основного» пользователя на установке часто другое имя. Я хочу использовать этого пользователя для переменных, таких как become_user. «Основной» пользователь также является пользователем, который называет ansible-playbook.

Могу ли я как-то установить «стать» пользователем, который вызвал ansible-playbook?

+0

Используйте 'remote_user' вместо' become_user' подключить удаленную сторону. 'ste_user' предназначен для повышения привилегий. –

ответ

3

Не знаю, почему вы должны установить become_user для пользователя, уже работает ваш сборник пьес с, но вы можете использовать env поиск, чтобы получить переменную USER среды:

- hosts: localhost 
    tasks: 
    - debug: msg="{{ lookup('env','USER') }}" 
+0

@AK почему? OP нуждается в имени пользователя env в своем учебнике (хотя я не понимаю, для чего) - я даю ему возможность. И подчеркнул, что он не должен становиться пользователем. –

1

ansible-playbook содержит флаг CLI --become-user, а также --ask-become-pass (при необходимости).

В большинстве случаев это плохая настройка. Вы должны стандартизировать user на всех ваших компьютерах, и вам придется поддерживать сертификаты/пароли для каждого пользователя отдельно.

+0

Спасибо! Имена пользователей разные, потому что я использую возможность для личной настройки компьютеров. Это не то, для чего он предназначен, но все же работает очень хорошо. – Nathan

+0

Я понял, что :-) – activatedgeek

1

Там нет необходимости устанавливать become_user, когда playbook должен запускаться с пользователем, который начал ansible-playbook

become предназначен для эскалации привилегий. Если я получил этот вопрос, правая привилегия не нужна.

Имя пользователя, который запускает сборник пьес доступен как ansible fact{{ ansible_env.username }}

+0

Вы правы в эскалации привилегий. Факты собраны на удаленной стороне, поэтому ваше решение подходит только для случая, когда хост управления такой же, как и хост-клиент (см. Подробности в моем ответе). –

1

Вы можете войти локально на управление хостом как «Натан», но хочет подключиться к другим серверам, как «анзибль» (лучше пользователя в ansible.cfg)

remote_user = ansible 

Если вы хотите на удаленном хосте подключить как «анзибль» и выполнить одну задачу, как корень или апач - то Судо к корню (Apache или другому пользователю), вы должны использовать become_user для этой конкретной задачи ,

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

В вашем конкретном случае, если вход в систему локально, как «Натан» и хотят подключиться к удаленному «» серверу как «Натан» следует опустить как remote_user и become_user: только вход в систему с текущими учетными данными!

Например, существует два sysadminst в организации: nathan и peter - так, есть две рабочие станции (heidelberg-nathan и berlin-peter) в качестве контролируемого хоста и тысячи клиентов. Оба натана и петер подключаются к удаленной стороне, как натан или петер, и выполняют задачи. Каждый из них может не использовать пароли для выполнения задач администратора.

PS Хорошо, давайте протестируем оба решения (сначала - из ответа Константина Суворова, второе - из ответа на ноу-хау).

My control host berlin-ansible-01, я вошел в систему как 'nathan'. Удаленным клиентом является клиент berlin-client-01. Я запишусь на клиентский хост как пользователь 'ansible'.

Мое отношение.CFG является:

[defaults] 
sudo_flags=-HE 
hash_behaviour = merge 
retry_files_enabled = false 
log_path = ./main.log 
ask_vault_pass=true 
remote_user = ansible 

Playbook прост:

- name: test 
    hosts: '{{ target }}' 
    tasks: 
    - debug: msg="step 1 = {{ lookup('env','USER') }}" 
    - setup: 
    - debug: msg="step 2 = {{ hostvars[target].ansible_env.USER }}" 
#more than one client in taget needs iterate items: 
# - debug: msg="step 2 = {{ hostvars[item].ansible_env.USER }}" 
#  with_items: "{{ hostvars }}" 

Давайте запустим его:

[[email protected] stackoverflow]$ ansible-playbook -i hosts_staging test.yml --extra-vars "target=berlin-client-01" 
Vault password: 

PLAY [test] ******************************************************************** 

TASK [setup] ******************************************************************* 
ok: [berlin-client-01] 

TASK [debug] ******************************************************************* 
ok: [berlin-client-01] => { 
    "msg": "step 1 = nathan" 
} 

TASK [setup] ******************************************************************* 
ok: [berlin-client-01] 

TASK [debug] ******************************************************************* 
ok: [berlin-client-01] => { 
    "msg": "step 2 = ansible" 
} 

PLAY RECAP ********************************************************************* 
berlin-client-01    : ok=4 changed=0 unreachable=0 failed=0 
+0

OP _ запускается на локальном компьютере на машинах. –

+0

@ КонстантинСуворов. Конечно, но это неправильное _in common way_ , Я добавил замечание к вопросу. –

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