2017-02-03 42 views
0

我有这个瓦尔文件:添加了Ansible变量的Jinja2模板

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

您是否知道它是可行的还是以任何方式执行它?

回答

1

看一看的ipaddr filter

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

我得到了错误:“地址未定义”我忘了说,我的瓦尔被定义成一个列表..难道这是错误? –

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 }}", 
    ... 
+0

我得到了:'网关'是未定义的“。我忘了说我的变量被定义为一个列表..这可能是错误吗? –

+0

用适当的变量名替换'gateway'为你设置 –

+0

是的,我做到了,我用了“listname.gateway”但是我得到了这个错误:'在模板字符串中检测到递归循环:{{addvlan.gateway.split('。 ')[:3] |加入('。')+'。' +(addvlan.gateway.split('。')[3] | int + 1)| string}}'' –