我正在尝试编写一个Ansible角色来移动远程系统上的许多文件 . 我发现Stack Overflow post关于如何做到这一点,基本上是"just use the command module with 'mv'" . 我有一个使用 with_items
语句定义的单个任务,其中 dirs
中的每个项目都是一个包含 src
和 dest
键的字典:
- name: Move directories
command: mv {{ item.src }} {{ item.dest }}
with_items: dirs
这很好,它可以工作,但如果目标目录已经存在,我会遇到问题 . 我不想覆盖它,所以我想先尝试统计每个 dest
目录 . 我想用stat信息更新 dirs
变量,但据我所知,还没有定义't a good way to set or update variables once they' . 所以我使用 stat
来获取每个目录的信息,然后使用 register
保存数据:
- name: Check if directories already exist
stat: path={{ item.dest }}
with_items: dirs
register: dirs_stat
有没有办法将注册的统计信息与 mv
命令联系起来?如果它是一个目录,这将很容易 . 循环是使这个棘手的原因 . 有没有办法在不将每个目录的循环展开到两个任务的情况下执行此操作?
1 回答
这不是最简单的解决方案,但是如果你想使用Ansible而不是“展开”:
只需调整调试任务即可运行相应的
command
任务,并将when:
调整为when: not ...
.