Ansible - 使用 Jinja 2 实现动态角色

Ansible - Using Jinja 2 for Dynamic Roles

我正在尝试制作一个动态调用 rolls 的 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

但我无法让它工作。那我怎么办甚至可以吗?

您放置了过多的修饰符。试试这个:
模板:

- hosts: localhost
  roles:
    {% for name in role_vars -%}
    - {{ name }}
    {% endfor %}
---
- 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 }}