是否可以使用几个.yml文件,然后将它们作为单独的项目读取?
示例:
- name: write templates
template: src=template.j2 dest=/some/path
with_items: ./configs/*.yml
答案 0 :(得分:2)
我找到了非常优雅的解决方案:
---
- hosts: localhost
vars:
my_items: "{{ lookup('fileglob', './configs/*.yml', wantlist=True) }}"
tasks:
- name: write templates
template: src=template.j2 dest=/some/path/{{ (item | from_yaml).name }}
with_file: "{{ my_items }}"
然后在模板中,您必须在开头添加{% set item = (item | from_yaml) %}
。
答案 1 :(得分:1)
嗯,是的,不是。您可以循环文件甚至将其内容用作变量。但template
模块不接受参数。使用include
语句有一个丑陋的解决方法。包括do参数,如果template
任务在包含的文件中,它将有权访问它们。
这样的事情应该有效:
- include: other_file.yml parameters={{ lookup('file', item) | from_yaml }}
with_fileglob: ./configs/*.yml
在other_file.yml
然后是模板任务:
- name: write template
template: src=template.j2 dest=/some/path
除了附加的include之外,这里的丑陋部分是include语句只采用key = value格式的参数。这就是你在上面的任务中看到的parameters=...
。 parameters
这里没有特殊含义,它只是变量的名称,该文件的内容可以在include中使用。
因此,如果您的vars文件定义了变量foo
,您就可以在模板中以{{ parameters.foo }}
的形式访问它。