我正在使用Vagrant运行一个playbook-local.yml文件来创建一个本地开发环境,该环境运行95%与主playbook.yml相同的角色,最终将成为创建我们的stage / prod服务器的角色。在创建本地环境时,我有4个目录和2个文件,我需要更改主机上的权限(在本例中是我的MacBook)。更改来宾计算机上的目录权限似乎不起作用。当我通过SSH连接到guest虚拟机并尝试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
我已经用Google搜索了这个废话,但我找不到任何建议。我得到的最常见的错误是它要求sudo密码(下面)。如果我需要在Ansible运行时提供密码,那该怎么办?
FAILED! => {"changed": false, "failed": true, "module_stderr": "sudo: a password is required\n", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1}
答案 0 :(得分:1)
如果主机上的文件/目录由运行该剧本的同一用户所有,则您become: True
模块中不需要sudo
或command
。
- 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。既然你正在使用流浪汉,你可能会想要后者。