0

我有这个 vars 文件:

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

我有这个 JSON,它使用了上述 vars 的 vars:

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

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

你知道这是否可能或有什么方法吗?

4

2 回答 2

1

看看ipaddr过滤器

gateway: "{{ network_address | ipaddr('1') | ipaddr('address') }}"
于 2017-02-03T07:57:40.253 回答
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 }}",
  ...
于 2017-02-03T08:01:13.737 回答