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

dea*_*ven 8 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/*
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*Aac 16

文档

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

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}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下使用 shell 不是更好的方法,因为您正在失去幂等性。您应该改用文件模块和 with_items (3认同)
  • 每次运行 chown 时,都会更改文件的时间戳。特别是ctime。例如,这可能是某些备份软件的问题。 (2认同)

小智 5

Ansible 1.1 将 recurse 参数添加到文件模块中,因此您需要为更改所有权任务执行以下操作:

- name: change ownership 
  action: file state=directory recurse=yes path=/to/ owner=newuser group=newgroup
Run Code Online (Sandbox Code Playgroud)

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