ansible:为什么文件模块被跳过了?

ansible:为什么文件模块被跳过了?

我有一个 ansible 1.1 剧本,在其中我做了如下事情:

- name: copy files
  sudo: True                                                                                                             
  shell: cp /from/* /to/

- name: change owner
  sudo: True
  file: path=$item owner=newuser group=newgroup
  with_fileglob: /to/*

第二项任务“更改所有者”总是被跳过。有人能帮我找出原因吗?文件模块跳过是因为文件存在吗?我被困住了 :)

答案1

文档

请记住查找插件在“控制”机器上运行:

with_fileglob是一个查找插件,因此它会在本地服务器上查找文件,即您正在运行 ansible-playbook 的服务器。

您可以执行以下操作:

- name: list files 
  action: command ls -1 /to/* 
  register: dumpfiles 

- name: change ownership 
  action: file path=$item owner=newuser group=newgroup
  with_items: ${dumpfiles.stdout_lines}

答案2

Ansible 1.1 在文件模块中添加了 recurse 参数,因此您更改所有权任务需要做的就是:

- name: change ownership 
  action: file state=directory recurse=yes path=/to/ owner=newuser group=newgroup

当实际事情发生变化时这将变得更加明显;使用 shell 或命令模块将始终返回改变的状态,即使实际上没有任何改变。

相关内容