在Jinja2模板中添加Ansible变量

时间:2017-02-03 07:44:25

标签: ansible jinja2 ansible-template

我有这个vars文件:

addvlan:
 - vlan: pruebavlan
   address: 192.168.10.0
   mask: 25
   gateway: ????
   tag: 1917

我有这个JSON使用上述变种的变种:

  "address": "{{address}}",
  "mask": {{mask}},
  "gateway": "{{gateway}}",
  "tag": "{{tag}}",

我需要网关永远是地址的下一个IP。例如,在上述情况下,可能是192.168.10.1

你知道它是否可行或有任何办法吗?

2 个答案:

答案 0 :(得分:1)

查看ipaddr filter

gateway: "{{ network_address | ipaddr('1') | ipaddr('address') }}"

答案 1 :(得分:1)

没有ipaddr过滤器的解决方案:

{{ gateway.split('.')[:3] | join('.') + '.' + (gateway.split('.')[3] | int + 1) | string }}

但你不能这样做:

addvlan:
 - vlan: pruebavlan
   address: 192.168.10.0
   mask: 25
   gateway: "{{ << address manipulations here >> }}"
   tag: 1917

这会给你递归错误,因为你试图定义addvlan.vlan引用来自同一个字典的其他键的键。
请改为在JSON模板中进行操作:

  ...
  "address": "{{ address }}",
  "mask": "{{ mask }}",
  "gateway": "{{ address.split('.')[:3] | join('.') + '.' + (address.split('.')[3] | int + 1) | string }}",
  "tag": "{{ tag }}",
  ...