Можно получить маску сети в CIDR - PullRequest
0 голосов
/ 12 сентября 2018

Чтобы получить значение «24», соответствующее IP-адресу / сетевой маске, у меня есть этот рабочий код:

- set_fact:
    ip: "{{ ansible_default_ipv4.address }}/{{ansible_default_ipv4.netmask }}"

- set_fact:
    mask_cidr: "{{ ip | ipaddr('prefix') }}"

Где ansible_default_ipv4.address = 172.16.1.67 и ansible_default_ipv4.netmask равно 255.255.255.0 согласно gather_facts или setup модулю.

Я пробовал разные вещи, чтобы сделать этот код "умнее", поэтому мне нужно установить только 1 факт вместо 2, но мои способности к фильтрации невелики.

Есть идеи, как преобразовать эти два факта в более умный факт, который делает обе вещи?

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Я использую это:

mynetwork = {{ (ansible_default_ipv4.network + '/' + ansible_default_ipv4.netmask) | ipaddr('network/prefix') }}
0 голосов
/ 12 сентября 2018

Самый простой и понятный способ - через вспомогательную переменную:

- set_fact:
    mask_cidr: "{{ ip | ipaddr('prefix') }}"
  vars:
    ip: "{{ ansible_default_ipv4.address }}/{{ansible_default_ipv4.netmask }}"

Если вы настаиваете на написании одного шаблона:

- sef_fact:
    ip: "{{ (ansible_default_ipv4.address + '/' + ansible_default_ipv4.netmask) | ipaddr('prefix') }}"
...