Ansible - 使用Jinja 2获取动态角色

时间:2016-08-04 19:09:19

标签: ansible jinja2

我正在尝试制作一个动态调用的Ansible剧本。现在,Ansible不支持本机,所以我认为我可以用一些Jinja2模板来规避这个...但我甚至不确定如何实际做到这一点。所以,假设我有一个变量

中的角色列表
role_vars:
    - role1
    - role2
    - role3

我的模板:

- hosts: localhost
  roles: >
    {%- for name in role_vars %}
    {{- '- ' + name + '\n    ' -}}
    {%- endfor %}

我认为它应该产生这样的东西:

- hosts: localhost
  roles:
    - role1
    - role2
    - role3

但我无法让它发挥作用。那我该怎么办?它甚至可能吗?

2 个答案:

答案 0 :(得分:0)

你放置了太多的修剪修饰符。试试这个:
模板:

- hosts: localhost
  roles:
    {% for name in role_vars -%}
    - {{ name }}
    {% endfor %}

答案 1 :(得分:0)

---
- hosts: localhost
  gather_facts: no
  tasks:
  - name: test
    set_fact: var=[{% for i in groups['server'] %}{% if hostvars[i].clusterName is defined %}"{{ hostvars[i].clusterName }}"{% if not loop.last %},{% endif %}{% endif %}{% endfor %}]
  - name: debug
    debug: msg={{ var }},{{ var | length }}