能够在CIDR中获得网络掩码

时间:2018-09-12 08:51:11

标签: ansible jinja2

为了获得与IP地址/网络掩码相对应的值“ 24”,我有以下这段代码:

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

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

根据ansible_default_ipv4.address172.16.1.67模块,ansible_default_ipv4.netmask = 255.255.255.0gather_factssetup的地方。

我尝试了多种方法使此代码“更智能”,所以我只需要设置1个事实而不是2个事实,但是我的过滤能力并不强。

有什么想法可以将这两个事实转换为可以同时做这两个事情的更聪明的事实?

2 个答案:

答案 0 :(得分:3)

最简单最干净的方法是通过一个辅助变量:

- 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') }}"

答案 1 :(得分:0)

我正在使用这个

mynetwork = {{ (ansible_default_ipv4.network + '/' + ansible_default_ipv4.netmask) | ipaddr('network/prefix') }}