我正在使用Vagrant来运行playbook-local.yml文件,以创建一个本地开发环境,该环境运行与主playbook.yml相同的95%的角色,最终将成为创建我们的舞台/生产服务器的原因。创建本地环境时,我需要更改主机上的权限(在本例中为我的 MacBook(,我需要更改 4 个目录和 2 个文件。更改来宾计算机上的目录权限似乎不起作用。当我通过 SSH 连接到来宾并尝试 chmod 某些内容时,它只是没有改变,但是当我从主机执行此操作时它会发生变化。
我的问题是,如何让 Ansible 更改主机上的文件夹和文件权限,以便在设置项目时无需手动执行此操作?以下是我尝试过的一些方法:
- name: Set folder permissions to 0775
shell: scripts/set-perms.sh // This runs the chmod commands
connection: local
而这个:
- name: Set folder permissions to 0775
become: true
connection: local
command: sudo find "{{ item }}" -type d -exec chmod 0775 {} ;
file: path={{ item }} mode=0775 state=directory recurse=yes
with_items:
- ../../../../www/system/cache
- ../../../../www/_images
- ../../../../www/app/templates
- ../../../../www/html-assets
我已经用谷歌搜索了这个废话,但我发现的任何建议都没有奏效。我得到的最常见的错误是它要求输入sudo密码(如下(。如果我需要在 Ansible 运行时提供密码,那很好,但我该怎么做?
FAILED! => {"changed": false, "failed": true, "module_stderr": "sudo: a password is requiredn", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1}
如果主机上的文件/目录由运行 playbook 的同一用户拥有,则不需要command
模块中的become: True
或sudo
。
- name: Set folder permissions to 0775
become: False
connection: local
file: path={{ item }} mode=0775 state=directory recurse=yes
with_items:
- ../../../../www/system/cache
- ../../../../www/_images
- ../../../../www/app/templates
- ../../../../www/html-assets
或者,如果文件/目录归其他用户所有,则需要恢复到become: True
,并向 ansible-playbook 命令提供成为密码或在主机上设置无密码 sudo。 由于您使用的是流浪者,因此您可能需要后者。