gpt4 book ai didi

ansible - 使用 Ansible 在远程系统上移动文件,仅当目标不存在时

转载 作者:行者123 更新时间:2023-12-02 01:41:16 24 4
gpt4 key购买 nike

我正在尝试编写一个 Ansible 角色来移动远程系统上的多个文件。我找到了一个 Stack Overflow post关于如何做到这一点,它基本上说“只需将命令模块与'mv'一起使用”。我有一个使用 with_items 语句定义的单个任务,其中 dirs 中的每个项目都是一个包含 srcdest 键:

- 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

有没有办法将注册的统计信息绑定(bind)到 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: 改为 when: not ...

关于ansible - 使用 Ansible 在远程系统上移动文件,仅当目标不存在时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28483031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com