如果给定目录不为空,如何执行Ansible任务?

时间:2016-05-19 10:38:07

标签: ansible ansible-playbook

我正在使用Ansible将日志移动到备份目录(使用shell模块,mv命令)。

如果没有要移动的文件,

mv命令将失败。 默认情况下,它会导致整个Ansible播放失败。 即使任务失败(ignore_errors: yes

,我也可以继续游戏

我对此解决方案不满意,因为它会产生错误消息

  

任务[将文件移动到备份目录]   ******************************************致命:[xx.xx.xx .xx]:失败了! = ...?没有这样的文件或目录“,”stdout“:”“,”stdout_lines“:   [],“警告”:[]} ...忽略

如何在Ansible中检查目录是否为空,如果空jus跳过任务?

2 个答案:

答案 0 :(得分:12)

您可以在ansible 2.0中使用find模块查找目录中扩展名为wget -q -O - https://raw.githubusercontent.com/opendaylight/odlparent/master/settings.xml > ~/.m2/settings.xml的文件,然后在找到文件时执行move

.log

答案 1 :(得分:1)

已接受使用find模块的答案。

另一个选项(可读性较低且更详细)是使用本机Linux命令 - test ls命令的结果

- name: "backup logs"
  shell: test "$(ls /var/logs/)"
  register: logsPresent
  changed_when: false

- name: "move files to backup directory"
  when: "logsPresent.rc != 0"
  shell: "mv /var/logs/ /backup/logs"