2017-02-03 116 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}}'' –