2017-07-11 61 views
0

我使用Vagrant运行playbook-local.yml文件来创建本地开发环境,该环境运行与主要playbook.yml相同的角色的95%,最终将成为创建我们的舞台/产品服务器。在创建本地环境时,我有4个目录和2个文件,需要在主机上更改权限(在本例中为我的MacBook)。更改客机上的目录权限似乎不起作用。当我进入guest虚拟机并尝试chmod模式时,它只是不会改变,但是当我从主机上进行更改时它会改变。使用Ansible更改主机文件夹权限

我的问题是,我怎样才能让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} 

回答

1

如果你的主机上的文件/目录由运行剧本同一用户拥有你不需要become: Truesudocommand模块中。

- 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-剧本命令提供一个成为密码或设置无密码须藤你的主机上。既然你在使用流浪者,你可能会想要后者。

+0

这是最有用的答案,谢谢。它最终为我工作。 –