我正在Ansible中配置模板文件,但是我想不出一种将值多次附加到列表var的方法。
我的设置有多个组和角色,每个组和角色都可以具有附加值,以附加到模板文件中使用的全局路由列表中。
例如,route-eth0
模板为:
{% for r in routes_var %}
"{{ r }}"
{% endfor %}
routes_var
是在roles/common/defaults/main.yml
的最高级别定义的,因为每个主机都将应用此角色,所以这是基础:
routes_var:
- "1.2.3.4 via {{ gateway }}"
- "2.3.4.5 via {{ gateway }}"
然后,每个其他角色,组或主机都应该可以附加到此变量,以便最终用来自所有角色,组或主机的贡献编写完整的路由文件。目标是任何需要添加路由的组或角色都可以这样做,而不必担心其余路由。
例如:
roles/logforwarding/defaults/main.yml
-转发日志的主机的额外路由roles/monitored/defaults/main.yml
-受监控主机的额外路由group_vars/some_hosts.yml
-特定主机组的额外路由group_vars/siteA.yml
-某些地理位置的主机的额外路由我在这些文件中尝试了以下模式:
routes_var_this:
- "123.4.5.6 via {{ gateway }}"
- "234.5.6.7 via {{ gateway }}"
routes_var: "{{ routes_var.extend(routes_var_this) }}"
(具有相同结果):
routes_var: "{{ routes_var + routes_var_this }}"
但是,在应用模板时,这两个解决方案均失败,并出现递归错误:
(...)
original message: An unhandled exception occurred while templating '{{ routes_var.extend(routes_var_this) }}'. Error was a <class 'ansible.errors.AnsibleError'>, original message: recursive loop detected in template string: {{ routes_var.extend(routes_var_this) }}"}
有没有办法用Ansible实现这一目标?