使用 ansible sudo/become 创建组时出错

使用 ansible sudo/become 创建组时出错

我正在尝试使用 Ansible 创建一个组,但失败了,但如果我将其作为 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:

答案1

您已告诉 ansible 将用户 变为 (在本例中为 sudo) xdradmin,但该用户显然没有创建组的权限。大多数情况下,您应该变为,root因为这是管理用户,将执行所有需要 root 权限的任务。事实上,这就是您使用 ssh 命令所做的:您变为root,而不是xdradmin。因此该命令有效。

修复你的become_user,例如:

become_user=root

成为用户与 ansible 连接到远程系统时使用的用户不同。即remote_user

remote_user=xdradmin

通过这两个更改,ansible 将以用户身份 ssh 到系统xdradmin,然后使用 sudo 到root并最终运行您的任务。

相关内容