gpt4 book ai didi

ansible - 如何使 Ansible with_fileglob 对所有子目录或替代目录递归工作?

转载 作者:行者123 更新时间:2023-12-03 08:04:06 27 4
gpt4 key购买 nike

我正在使用 Ansible,并且目录结构如下例所示:

configs
something
files
1.conf
2.conf
// and so on

这些文件是模板,我正在使用 Ansible 解析这些模板并在目标服务器中自动创建它们。

我的问题是 with_fileglob 仅适用于第一级目录,并且似乎无法启用某些递归模式。

我有

- name: "Apply templates"
template:
src: "{{ item }}"
dest: "{{ item | replace('.j2', '') }}"
with_fileglob:
- "{{ user_configs_path }}/*"

顺便说一句,user_configs_path=configs 存在并且一切都很好。

上面没有任何作用。

如果我在配置下添加一些内容,例如 configs/blabla.j2 并重新运行剧本,它就会被解析和复制得很好。

似乎不知何故,目录不是递归搜索的。

我不限于仅使用 fileglob 解决方案,因此请随时提出我可以学习以实现目标的任何建议。

基本上我想递归地迭代仅文件的所有目录,并在循环中将模板模块应用于它们并在远程服务器中创建它们

最佳答案

Ansible has a filetree这是递归的。

与 glob 不同,item 不仅仅是一个字符串,而是一个对象。您需要使用 item.src (绝对)和 item.path (相对)从中获取文件名。

因为 filetree 还会列出目录,因此您需要添加 when 过滤器,以便它只返回文件。

- name: "Apply templates"
template:
src: "{{ item.src }}"
dest: "{{ item.path | replace('.j2', '') }}"
with_filetree: "{{ user_configs_path }}/"
when: item.state == 'file'

关于ansible - 如何使 Ansible with_fileglob 对所有子目录或替代目录递归工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72996209/

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