我在Ansible剧本中拥有以下内容:
- name: Create certificates directory
file:
dest: "{{ '~/wireguard/certs' | expanduser }}"
state: directory
owner: "{{ ansible_user_id }}"
group: "{{ ansible_user_id }}"
mode: 0700
run_once: true
delegate_to: localhost
但是,当它在剧本中运行时,出现以下错误:
fatal: [1.2.3.4 -> localhost]: FAILED! => {
"changed": false,
"gid": 1000,
"group": "alex",
"mode": "0755",
"msg": "chown failed: [Errno 1] Operation not permitted: b'/home/alex/wireguard'",
"owner": "alex",
"path": "/home/alex/wireguard",
"size": 4096,
"state": "directory",
"uid": 1000
}
我需要以root用户身份运行它还是其他东西?如果我确实需要以root用户身份运行它,become
是否可以正常工作?
答案 0 :(得分:0)
Do I need to run this as root or is it something else?
根是必需的。例如参见Changing Ownership
“超级用户root具有更改任何文件所有权的不受限制的功能,但是普通用户只能更改其拥有的那些文件的所有权。”
这实际上意味着普通用户只能将其拥有的文件组更改为他们所属的组。
If I do need to run it as root, does become work?
是的。 become有效。经常使用的become plugin是sudo。 become_user 的默认值为root。
- file:
become: yes
become_method: sudo
...
通常,使远程/登录用户成为root用户。但是在您的特定情况下,由于delegate_to: localhost
,请启用正在运行播放的用户。例如在 localhost
$ grep alex /etc/sudoers
alex ALL=(ALL) NOPASSWD: ALL
有关其他选项,请参见plugin list。
答案 1 :(得分:0)
我意识到ansible_user_id
没有我所期望的用户名,因此我试图将所有权更改为不存在的用户。我通过为本地用户设置新变量来修复它。