Ansible:可自定义的模板文件名



我正在编写一个Ansible角色,其中有一些模板必须在一个目标目录中以不同的名称多次出现。为了不必单独处理这些文件中的每一个,我需要能够对它们的名称应用模板或其他形式的占位符替换。举一个具体的例子,我可能有一个名为的文件

{{ Client }}DataSourceContext.xml

我需要换成

AcmeDataSourceContext.xml

我有很多这样的文件,它们必须安装在不同的目录中,但单个文件的所有副本都指向同一个目录。如果我不需要更改它们的名称或复制它们,我可以用之类的东西处理一大堆这样的文件

- name: Process a whole subtree of templates
template:
src: "{{ item.src }}"
dest: "/path/to/{{ item.path }}"
with_filetree: ../templates/my-templates/
when: item.state == 'file'

我想我想要的是一个打开文件名预处理的神奇的consider_filenames_as_templates开关。有什么方法可以近似这种行为吗?

几乎在任何可以在Ansible中放置文字值的地方,都可以替换变量的值。例如,你可以这样做:

- template:
src: sometemplate.xml
dest: "/path/to/{{ item }}DataSourceContext.xml"
loop:
- client1
- client2

这最终会创建模板CCD_ 2和/path/to/client2DataSourceContext.xml

更新1

对于您在更新中提出的问题:

我想我想要的是一个神奇的consider_filenames_as_templates切换,打开文件名预处理。有什么方法可以近似这种行为吗?

看起来你可以做一些类似的事情:

- name: Process a whole subtree of templates
template:
src: "{{ item.src }}"
dest: "/path/to/{{ item.path.replace('__client__', client_name) }}"
with_filetree: ../templates/my-templates/
when: item.state == 'file'

也就是说,将文件名中的字符串__client__替换为CCD_ 5变量的值。

相关内容

  • 没有找到相关文章

最新更新