2016-08-25 20 views
1

我使用ansible在安裝後配置多臺計算機。ansible user當前用戶在配置

爲此我在機器上本地運行。安裝中的「主」用戶通常具有不同的名稱。我想使用該用戶的變量,如become_user。 「主要」用戶也是用戶,他們調用ansible-playbook

那麼我可以設置「become_user」給調用ansible-playbook的用戶嗎?

+0

使用'remote_user'取代'become_user'連接遠程側。 'become_user'用於特權升級。 –

回答

3

不知道爲什麼你需要設置become_user給您已經在運行你的劇本用戶,但您可以使用env查找獲取USER環境變量:

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

@AK爲什麼? OP在他的劇本中需要用戶名env(儘管我不明白爲什麼) - 我給他一個選項。並強調他不應該以這種方式成爲用戶。 –

1

ansible-playbook提供了--become-user CLI標誌以及--ask-become-pass(如果需要)。

在大多數情況下,這是一個糟糕的設置。您應該在所有機器上標準化user,否則您必須分別爲每個用戶維護證書/密碼。

+0

謝謝!用戶名是不同的,因爲我使用安全計算機的私人設置。這不是它的目的,但仍然非常好。 – Nathan

+0

我意識到:-) – activatedgeek

1

沒有必要設置become_user當playbook應該與啓動的用戶一起運行ansible-playbook

become用於權限升級。如果我得到這個問題,權限不需要升級。

它運行在PlayBook用戶的名稱可作爲ansible fact{{ ansible_env.username }}

+0

你對權限升級是正確的。事實彙總在遠端,所以你的解決方案只適用於控制主機與客戶端主機相同的情況(請參閱我的答案中的詳細信息) –

1

您可以控制主機上本地登錄爲「彌敦道」,而是要連接到其他服務器,在用戶ansible'(好ansible.cfg)

remote_user = ansible 

如果你想遠程主機上連接爲「ansible」,並執行一個任務,根或Apache - 再sudo來根(Apache或其他用戶),你應該使用become_user對於這個特殊的任務。

請注意,遠程服務器可能沒有控制主機上的用戶! (常見的方式)

在您的特殊情況下,如果您在本地登錄爲'nathan'並且希望以'nathan'連接到'remote'服務器,則應該省略remote_userbecome_user:只需使用您當前的憑據登錄即可!

例如,組織中有兩個系統管理員:nathan和peter--所以,有兩個工作站(heidelberg-nathan和berlin-peter)作爲控制主機和數千個客戶。 nathan和peter都以nathan或peter的身份連接到遠程端並執行任務。他們每個人都可以使用非密碼sudoers來執行管理任務。好吧,我們來測試兩種解決方案(第一 - 來自Konstantin Suvorov的答案,第二 - 來自knowhy的答案)。

我的控制主機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 

劇本很簡單:

- 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

@KonstantinSuvorov當然,但這種不正確_ 。我添加了一條評論來提問。 –