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