Ansible

使用 ansible sudo/become 創建組時出錯

  • June 28, 2021

我正在嘗試使用 Ansible 創建一個 gropu,但如果我將其作為 SSH 命令執行,它會失敗但可以工作。

表演

- name: Test error creating groups
 hosts: all
 become: yes
 become_method: sudo
 become_user: xdradmin
 tasks:
 - name: Ensure test group exists
   group:
     name: test
     state: present
     gid: 1001

嘗試創建組失敗並出現錯誤。

$ ansible-playbook -i web, -u xdradmin test.yml 

PLAY [Test error creating groups] ********************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************
ok: [web]

TASK [Ensure test group exists] **********************************************************************************************
fatal: [web]: FAILED! => {"changed": false, "msg": "groupadd: Permission denied.\ngroupadd: cannot lock /etc/group; try again later.\n", "name": "test"}

PLAY RECAP *******************************************************************************************************************
web                        : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

但是,如果我手動執行基本相同的操作,它可以正常工作。

ssh xdradmin@web 'sudo groupadd -g 1001 test && tail -n1 /etc/group'
test:x:1001:

您已經告訴 ansible 成為(在這種情況下為 sudo)使用者xdradmin,顯然沒有創建組的權限。大多數情況下,您應該成為root管理使用者,將執行所有需要 root 權限的任務。確實,這就是您使用 ssh 命令所做的事情:您成為root,而不是xdradmin。因此該命令起作用了。

修復你的become_user,例如:

become_user=root

成為使用者與 ansible 連接到遠端系統的使用者不同。那就是remote_user

remote_user=xdradmin

通過這兩個更改,ansible 將以 user 身份 ssh 到系統xdradmin,然後 sudo 到root最後執行您的任務。

引用自:https://serverfault.com/questions/1068090