为了获得与 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.67和ansible_default_ipv4.netmask是255.255.255.0按照gather_facts或setup模块。
我尝试了不同的方法来使这段代码“更智能”,所以我只需要设置 1 个事实而不是 2 个,但是我的过滤能力并不强。
关于如何将这两个事实转换为一个更聪明的事实的想法?
小智 8
我正在使用这个:
mynetwork = {{ (ansible_default_ipv4.network + '/' + ansible_default_ipv4.netmask) | ipaddr('network/prefix') }}
Run Code Online (Sandbox Code Playgroud)
最简单和最干净的方法是通过辅助变量:
- 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)