gpt4 book ai didi

ansible - 如何在 Ansible `find` 模块中使用通配符路径?

转载 作者:行者123 更新时间:2023-12-04 17:41:34 24 4
gpt4 key购买 nike

我正在尝试使用 Ansible playbook 从远程主机的多个目录中删除剩余文件。

/some_dir
├── dir_1
│   └── file_A
├── dir_2
│   └── file_B
└── dir_3
└── file_C

例如,如果我使用 shell 脚本,我会使用像 rm -rf/some_dir/dir_*/file_* 这样的简单 glob,它足够具体。不过,我想坚持使用 best Ansible practices™,所以我决定结合使用 findfile模块。

tasks:
- name: Find files to remove by patterns
find:
paths: "/some_dir/dir_*/"
patterns: "file_*"

但是,通配符似乎在findpaths 中不起作用,它们被视为文字。

有什么方法可以解决这些限制?

注意事项:

  1. 我知道我可以在 some_dir 中递归搜索 file_[A-Z],但它可能会捕获 /some_dir/very_important_stuff/file_Q (如果一切都失败了,我将采用该解决方案)
  2. 我可以使用 shell 命令或脚本在远程主机上使用 shell 扩展,然后解析其标准输出以获取文件列表,但这听起来像是一个容易出错的 hack
  3. 在这种特殊情况下,我可以运行两个 find 任务:在 some_dir 中找到所有 dir_*,然后将它们用作列表paths 来查找 file_*,但是由于这个任务是一个更大的真实剧本的一部分,所以它太复杂了,无法在任意位置使用通配符的路径位置(/some_dir/dir_*/other/cruft/subdirs/*.cache)。

最佳答案

直接使用 ansible 是不可能的。您必须使用 shell 命令:

---
- name: TEST
hosts: host1
gather_facts: False

tasks:
- name: shell
shell: "ls -1 /some_dir/dir_*/*"
register: result

- name: debug
debug:
var: result.stdout

关于ansible - 如何在 Ansible `find` 模块中使用通配符路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54278283/

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