我正在尝试编写一个 Ansible 角色来移动远程系统上的多个文件。我找到了一个堆栈溢出帖子 https://stackoverflow.com/a/24165405/1174185关于如何做到这一点,本质上是说“只需使用带有‘mv’的命令模块”。我有一个任务定义为with_items
像这样的语句,其中的每个项目dirs
是一本字典src
and dest
keys:
- name: Move directories
command: mv {{ item.src }} {{ item.dest }}
with_items: dirs
这很好并且有效,但是如果目标目录已经存在,我就会遇到问题。我不想覆盖它,所以我想尝试统计每个dest
首先目录。我想更新dirs
变量与统计信息,但据我所知,没有一个好的方法来设置或更新变量一旦定义。所以我用了stat
获取每个目录的信息,然后保存数据register
:
- name: Check if directories already exist
stat: path={{ item.dest }}
with_items: dirs
register: dirs_stat
有没有办法将注册的统计信息与mv
命令?如果它是单个目录,这会很容易。循环是让这件事变得棘手的原因。有没有办法做到这一点,而不需要将此循环展开为每个目录的两个任务?
无论如何,这都不是最简单的解决方案,但如果您想使用 Ansible 而不是“展开”:
---
- hosts: all
vars:
dirs:
- src: /home/ubuntu/src/test/src1
dest: /home/ubuntu/src/test/dest1
- src: /home/ubuntu/src/test/src2
dest: /home/ubuntu/src/test/dest2
tasks:
- stat:
path: "{{item.dest}}"
with_items: dirs
register: dirs_stat
- debug:
msg: "should not copy {{ item.0.src }}"
with_together:
- dirs
- dirs_stat.results
when: item.1.stat.exists
只需调整调试任务即可运行适当的command
任务而不是when:
to when: not ...
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)