Ansible 获取 CIDR 中的网络掩码

Seb*_*eco 2 jinja2 ansible

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

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

- set_fact:
    mask_cidr: "{{ ip | ipaddr('prefix') }}"
Run Code Online (Sandbox Code Playgroud)

其中ansible_default_ipv4.address=172.16.1.67ansible_default_ipv4.netmask255.255.255.0按照gather_factssetup模块。

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

关于如何将这两个事实转换为一个更聪明的事实的想法?

小智 8

我正在使用这个:

mynetwork = {{ (ansible_default_ipv4.network + '/' + ansible_default_ipv4.netmask) | ipaddr('network/prefix') }}
Run Code Online (Sandbox Code Playgroud)


tec*_*raf 6

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

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

如果你坚持写一个模板:

- sef_fact:
    ip: "{{ (ansible_default_ipv4.address + '/' + ansible_default_ipv4.netmask) | ipaddr('prefix') }}"
Run Code Online (Sandbox Code Playgroud)