我正在尝试使用 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
并最终运行您的任务。