ipaddr或ipv4过滤器在ansible中将非四进制字符串更改为四进制

时间:2019-07-23 01:13:22

标签: ansible

我正在编写一本有趣的剧本,以测试ip地址是否为有效的ipv4地址。

我写了一本剧本来检查IP地址是否是有效的IP。但是对于测试,当我提供的IP地址为10.10.10时,仍将其匹配为有效的ipv4地址。

- name: IP validation example
  hosts: 127.0.0.1
  gather_facts: False
  vars:
    single_ipv4: 10.10.10
  tasks:
  - name: check ip
    set_fact:
      single_ipv4_val: "{{ single_ipv4 | ipv4 }}"
  

预期结果:确定:[127.0.0.1] => {“ ansible_facts”:   {“ single_ipv4_val”:假},“更改”:假}

     

实际结果:确定:[127.0.0.1] => {“ ansible_facts”:   {“ single_ipv4_val”:“ 10.10.10.0”},“更改”:false}

1 个答案:

答案 0 :(得分:1)

据我所知,您遇到ipaddr的“帮助”,因为您提供的内容几乎是一个IP地址,但是ipaddr却处理它不仅可以探测IP地址,还可以探测子网和各种事物

因此,您需要进行更严格的测试,说输入的内容必须是"address" subcomponent等于自己的IP:

- debug:
    msg: '{{ maybe_ip == (maybe_ip | ipv4("address")) }}'
  vars:
    maybe_ip: '10.10.10'

- debug:
    msg: '{{ maybe_ip == (maybe_ip | ipv4("address")) }}'
  vars:
    maybe_ip: '10.10.10.1'