Ansible项目在单独的文件中

时间:2016-03-10 14:36:23

标签: ansible

是否可以使用几个.yml文件,然后将它们作为单独的项目读取?

示例:

 - name: write templates
   template: src=template.j2 dest=/some/path
   with_items: ./configs/*.yml

2 个答案:

答案 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 }}的形式访问它。