Ansible:增量追加到列表变量

时间:2019-05-15 17:42:28

标签: ansible append ansible-template

我正在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实现这一目标?

0 个答案:

没有答案