使用Ansible更改主机文件夹权限

时间:2017-07-11 13:33:07

标签: vagrant ansible

我正在使用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}

1 个答案:

答案 0 :(得分:1)

如果主机上的文件/目录由运行该剧本的同一用户所有,则您become: True模块中不需要sudocommand

- 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。既然你正在使用流浪汉,你可能会想要后者。