Added 'in_any_network', 'in_network', 'in_one_network' test plugins (#66)
Added 'in_any_network', 'in_network', 'in_one_network' test plugins Reviewed-by: https://github.com/apps/ansible-zuulpull/68/head
parent
c32e3960ff
commit
c09bbacdbc
|
@ -47,6 +47,9 @@ Name | Description
|
||||||
### Test plugins
|
### Test plugins
|
||||||
Name | Description
|
Name | Description
|
||||||
--- | ---
|
--- | ---
|
||||||
|
[ansible.utils.in_any_network](https://github.com/ansible-collections/ansible.utils/blob/main/docs/ansible.utils.in_any_network_test.rst)|Test if Test if an IP or network falls in any network
|
||||||
|
[ansible.utils.in_network](https://github.com/ansible-collections/ansible.utils/blob/main/docs/ansible.utils.in_network_test.rst)|Test if IP address falls in the network
|
||||||
|
[ansible.utils.in_one_network](https://github.com/ansible-collections/ansible.utils/blob/main/docs/ansible.utils.in_one_network_test.rst)|Test if IP address belongs in any one of the networks in the list
|
||||||
[ansible.utils.validate](https://github.com/ansible-collections/ansible.utils/blob/main/docs/ansible.utils.validate_test.rst)|Validate data with provided criteria
|
[ansible.utils.validate](https://github.com/ansible-collections/ansible.utils/blob/main/docs/ansible.utils.validate_test.rst)|Validate data with provided criteria
|
||||||
|
|
||||||
<!--end collection content-->
|
<!--end collection content-->
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
minor_changes:
|
||||||
|
- Add in_any_network, in_network, in_one_network test plugins
|
|
@ -0,0 +1,170 @@
|
||||||
|
.. _ansible.utils.in_any_network_test:
|
||||||
|
|
||||||
|
|
||||||
|
****************************
|
||||||
|
ansible.utils.in_any_network
|
||||||
|
****************************
|
||||||
|
|
||||||
|
**Test if Test if an IP or network falls in any network**
|
||||||
|
|
||||||
|
|
||||||
|
Version added: 2.2.0
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:local:
|
||||||
|
:depth: 1
|
||||||
|
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
- This plugin checks if the provided IP or network address belongs to the provided list network addresses
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<table border=0 cellpadding=0 class="documentation-table">
|
||||||
|
<tr>
|
||||||
|
<th colspan="1">Parameter</th>
|
||||||
|
<th>Choices/<font color="blue">Defaults</font></th>
|
||||||
|
<th>Configuration</th>
|
||||||
|
<th width="100%">Comments</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="1">
|
||||||
|
<div class="ansibleOptionAnchor" id="parameter-"></div>
|
||||||
|
<b>ip</b>
|
||||||
|
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
|
||||||
|
<div style="font-size: small">
|
||||||
|
<span style="color: purple">string</span>
|
||||||
|
/ <span style="color: red">required</span>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div>A string that represents an IP address of a host or network</div>
|
||||||
|
<div>{'For example': '10.1.1.1'}</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="1">
|
||||||
|
<div class="ansibleOptionAnchor" id="parameter-"></div>
|
||||||
|
<b>networks</b>
|
||||||
|
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
|
||||||
|
<div style="font-size: small">
|
||||||
|
<span style="color: purple">list</span>
|
||||||
|
/ <span style="color: red">required</span>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div>A list of string and each string represents a network address in CIDR form</div>
|
||||||
|
<div>{'For example': ['10.0.0.0/8', '192.168.1.0/24']}</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
#### Simple examples
|
||||||
|
|
||||||
|
- name: Set network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
networks:
|
||||||
|
- "10.0.0.0/8"
|
||||||
|
- "192.168.1.0/24"
|
||||||
|
|
||||||
|
- name: Check if 10.1.1.1 is in the provided network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '10.1.1.1' is ansible.utils.in_any_network networks }}"
|
||||||
|
|
||||||
|
# TASK [Check if 10.1.1.1 is in the provided network list] **************************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- name: Set network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
networks:
|
||||||
|
- "10.0.0.0/8"
|
||||||
|
- "192.168.1.0/24"
|
||||||
|
- "172.16.0.0/16"
|
||||||
|
|
||||||
|
- name: Check if 8.8.8.8 is not in the provided network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '8.8.8.8' is not ansible.utils.in_any_network networks }}"
|
||||||
|
|
||||||
|
# TASK [Check if 8.8.8.8 is not in the provided network list] ************************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Return Values
|
||||||
|
-------------
|
||||||
|
Common return values are documented `here <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this test:
|
||||||
|
|
||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<table border=0 cellpadding=0 class="documentation-table">
|
||||||
|
<tr>
|
||||||
|
<th colspan="1">Key</th>
|
||||||
|
<th>Returned</th>
|
||||||
|
<th width="100%">Description</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="1">
|
||||||
|
<div class="ansibleOptionAnchor" id="return-"></div>
|
||||||
|
<b>data</b>
|
||||||
|
<a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
|
||||||
|
<div style="font-size: small">
|
||||||
|
<span style="color: purple">-</span>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div>If jinja test satisfies plugin expression <code>true</code></div>
|
||||||
|
<div>If jinja test does not satisfy plugin expression <code>false</code></div>
|
||||||
|
<br/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br/><br/>
|
||||||
|
|
||||||
|
|
||||||
|
Status
|
||||||
|
------
|
||||||
|
|
||||||
|
|
||||||
|
Authors
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
- Priyam Sahoo (@priyamsahoo)
|
||||||
|
|
||||||
|
|
||||||
|
.. hint::
|
||||||
|
Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.
|
|
@ -0,0 +1,183 @@
|
||||||
|
.. _ansible.utils.in_network_test:
|
||||||
|
|
||||||
|
|
||||||
|
************************
|
||||||
|
ansible.utils.in_network
|
||||||
|
************************
|
||||||
|
|
||||||
|
**Test if IP address falls in the network**
|
||||||
|
|
||||||
|
|
||||||
|
Version added: 2.2.0
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:local:
|
||||||
|
:depth: 1
|
||||||
|
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
- This plugin checks if the provided IP address belongs to the provided network
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<table border=0 cellpadding=0 class="documentation-table">
|
||||||
|
<tr>
|
||||||
|
<th colspan="1">Parameter</th>
|
||||||
|
<th>Choices/<font color="blue">Defaults</font></th>
|
||||||
|
<th>Configuration</th>
|
||||||
|
<th width="100%">Comments</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="1">
|
||||||
|
<div class="ansibleOptionAnchor" id="parameter-"></div>
|
||||||
|
<b>ip</b>
|
||||||
|
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
|
||||||
|
<div style="font-size: small">
|
||||||
|
<span style="color: purple">string</span>
|
||||||
|
/ <span style="color: red">required</span>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div>A string that represents an IP address</div>
|
||||||
|
<div>{'For example': '10.1.1.1'}</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="1">
|
||||||
|
<div class="ansibleOptionAnchor" id="parameter-"></div>
|
||||||
|
<b>network</b>
|
||||||
|
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
|
||||||
|
<div style="font-size: small">
|
||||||
|
<span style="color: purple">string</span>
|
||||||
|
/ <span style="color: red">required</span>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div>A string that represents the network address in CIDR form</div>
|
||||||
|
<div>{'For example': '10.0.0.0/8'}</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
#### Simple examples
|
||||||
|
|
||||||
|
- name: Check if 10.1.1.1 is in 10.0.0.0/8
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '10.1.1.1' is ansible.utils.in_network '10.0.0.0/8' }}"
|
||||||
|
|
||||||
|
# TASK [Check if 10.1.1.1 is in 10.0.0.0/8] ***********************************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- name: Check if 10.1.1.1 is not in 192.168.1.0/24
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '10.1.1.1' is not ansible.utils.in_network '192.168.1.0/24' }}"
|
||||||
|
|
||||||
|
# TASK [Check if 10.1.1.1 is not in 192.168.1.0/24] ****************************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- name: Check if 2001:db8:a::123 is in 2001:db8:a::/64
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '2001:db8:a::123' is ansible.utils.in_network '2001:db8:a::/64' }}"
|
||||||
|
|
||||||
|
# TASK [Check if 2001:db8:a::123 is in 2001:db8:a::/64] ****************************
|
||||||
|
# task path: /home/prsahoo/playbooks/collections/localhost_test/utils_in_network.yml:16
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- name: Check if 2001:db8:a::123 is not in 10.0.0.0/8
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '2001:db8:a::123' is not ansible.utils.in_network '10.0.0.0/8' }}"
|
||||||
|
|
||||||
|
# TASK [Check if 2001:db8:a::123 is not in 10.0.0.0/8] *********************************
|
||||||
|
# task path: /home/prsahoo/playbooks/collections/localhost_test/utils_in_network.yml:20
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Return Values
|
||||||
|
-------------
|
||||||
|
Common return values are documented `here <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this test:
|
||||||
|
|
||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<table border=0 cellpadding=0 class="documentation-table">
|
||||||
|
<tr>
|
||||||
|
<th colspan="1">Key</th>
|
||||||
|
<th>Returned</th>
|
||||||
|
<th width="100%">Description</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="1">
|
||||||
|
<div class="ansibleOptionAnchor" id="return-"></div>
|
||||||
|
<b>data</b>
|
||||||
|
<a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
|
||||||
|
<div style="font-size: small">
|
||||||
|
<span style="color: purple">-</span>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div>If jinja test satisfies plugin expression <code>true</code></div>
|
||||||
|
<div>If jinja test does not satisfy plugin expression <code>false</code></div>
|
||||||
|
<br/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br/><br/>
|
||||||
|
|
||||||
|
|
||||||
|
Status
|
||||||
|
------
|
||||||
|
|
||||||
|
|
||||||
|
Authors
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
- Priyam Sahoo (@priyamsahoo)
|
||||||
|
|
||||||
|
|
||||||
|
.. hint::
|
||||||
|
Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.
|
|
@ -0,0 +1,168 @@
|
||||||
|
.. _ansible.utils.in_one_network_test:
|
||||||
|
|
||||||
|
|
||||||
|
****************************
|
||||||
|
ansible.utils.in_one_network
|
||||||
|
****************************
|
||||||
|
|
||||||
|
**Test if IP address belongs in any one of the networks in the list**
|
||||||
|
|
||||||
|
|
||||||
|
Version added: 2.2.0
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:local:
|
||||||
|
:depth: 1
|
||||||
|
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
- This plugin checks if the provided IP address belongs to the provided list network addresses
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<table border=0 cellpadding=0 class="documentation-table">
|
||||||
|
<tr>
|
||||||
|
<th colspan="1">Parameter</th>
|
||||||
|
<th>Choices/<font color="blue">Defaults</font></th>
|
||||||
|
<th>Configuration</th>
|
||||||
|
<th width="100%">Comments</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="1">
|
||||||
|
<div class="ansibleOptionAnchor" id="parameter-"></div>
|
||||||
|
<b>ip</b>
|
||||||
|
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
|
||||||
|
<div style="font-size: small">
|
||||||
|
<span style="color: purple">string</span>
|
||||||
|
/ <span style="color: red">required</span>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div>A string that represents an IP address</div>
|
||||||
|
<div>{'For example': '10.1.1.1'}</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="1">
|
||||||
|
<div class="ansibleOptionAnchor" id="parameter-"></div>
|
||||||
|
<b>networks</b>
|
||||||
|
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
|
||||||
|
<div style="font-size: small">
|
||||||
|
<span style="color: purple">list</span>
|
||||||
|
/ <span style="color: red">required</span>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div>A list of string and each string represents a network address in CIDR form</div>
|
||||||
|
<div>{'For example': ['10.0.0.0/8', '192.168.1.0/24']}</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
#### Simple examples
|
||||||
|
|
||||||
|
- name: Set network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
networks:
|
||||||
|
- "10.0.0.0/8"
|
||||||
|
- "192.168.1.0/24"
|
||||||
|
|
||||||
|
- name: Check if 10.1.1.1 is in the provided network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '10.1.1.1' is ansible.utils.in_one_network networks }}"
|
||||||
|
|
||||||
|
# TASK [Check if 10.1.1.1 is in the provided network list] **********************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
|
||||||
|
- name: Set network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
networks:
|
||||||
|
- "10.0.0.0/8"
|
||||||
|
- "10.1.1.0/24"
|
||||||
|
|
||||||
|
- name: Check if 10.1.1.1 is not in the provided network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '10.1.1.1' is not ansible.utils.in_one_network networks }}"
|
||||||
|
|
||||||
|
# TASK [Check if 10.1.1.1 is in not the provided network list] ************************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Return Values
|
||||||
|
-------------
|
||||||
|
Common return values are documented `here <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this test:
|
||||||
|
|
||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<table border=0 cellpadding=0 class="documentation-table">
|
||||||
|
<tr>
|
||||||
|
<th colspan="1">Key</th>
|
||||||
|
<th>Returned</th>
|
||||||
|
<th width="100%">Description</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="1">
|
||||||
|
<div class="ansibleOptionAnchor" id="return-"></div>
|
||||||
|
<b>data</b>
|
||||||
|
<a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
|
||||||
|
<div style="font-size: small">
|
||||||
|
<span style="color: purple">-</span>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div>If jinja test satisfies plugin expression <code>true</code></div>
|
||||||
|
<div>If jinja test does not satisfy plugin expression <code>false</code></div>
|
||||||
|
<br/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br/><br/>
|
||||||
|
|
||||||
|
|
||||||
|
Status
|
||||||
|
------
|
||||||
|
|
||||||
|
|
||||||
|
Authors
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
- Priyam Sahoo (@priyamsahoo)
|
||||||
|
|
||||||
|
|
||||||
|
.. hint::
|
||||||
|
Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.
|
|
@ -0,0 +1,86 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2021 Red Hat
|
||||||
|
# GNU General Public License v3.0+
|
||||||
|
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
"""
|
||||||
|
The utils file for all netaddr tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
from ansible.errors import AnsibleError
|
||||||
|
from ansible.module_utils.basic import missing_required_lib
|
||||||
|
from ansible.module_utils.six import ensure_text
|
||||||
|
from functools import wraps
|
||||||
|
from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import (
|
||||||
|
check_argspec,
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
import ipaddress
|
||||||
|
|
||||||
|
HAS_IPADDRESS = True
|
||||||
|
except ImportError:
|
||||||
|
HAS_IPADDRESS = False
|
||||||
|
|
||||||
|
|
||||||
|
def ip_network(ip):
|
||||||
|
""" PY2 compat shim, PY2 requires unicode
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not HAS_IPADDRESS:
|
||||||
|
raise AnsibleError(missing_required_lib("ipaddress"))
|
||||||
|
|
||||||
|
return ipaddress.ip_network(ensure_text(ip))
|
||||||
|
|
||||||
|
|
||||||
|
def ip_address(ip):
|
||||||
|
""" PY2 compat shim, PY2 requires unicode
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not HAS_IPADDRESS:
|
||||||
|
raise AnsibleError(missing_required_lib("ipaddress"))
|
||||||
|
|
||||||
|
return ipaddress.ip_address(ensure_text(ip))
|
||||||
|
|
||||||
|
|
||||||
|
def _need_ipaddress(func):
|
||||||
|
@wraps(func)
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
if not HAS_IPADDRESS:
|
||||||
|
raise AnsibleError(missing_required_lib("ipaddress"))
|
||||||
|
return func(*args, **kwargs)
|
||||||
|
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
|
def _is_subnet_of(network_a, network_b):
|
||||||
|
try:
|
||||||
|
if network_a._version != network_b._version:
|
||||||
|
return False
|
||||||
|
return (
|
||||||
|
network_b.network_address <= network_a.network_address
|
||||||
|
and network_b.broadcast_address >= network_a.broadcast_address
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _validate_args(plugin, doc, params):
|
||||||
|
""" argspec validator utility function
|
||||||
|
"""
|
||||||
|
|
||||||
|
valid, argspec_result, updated_params = check_argspec(
|
||||||
|
doc, plugin + " test", **params
|
||||||
|
)
|
||||||
|
|
||||||
|
if not valid:
|
||||||
|
raise AnsibleError(
|
||||||
|
"{argspec_result} with errors: {argspec_errors}".format(
|
||||||
|
argspec_result=argspec_result.get("msg"),
|
||||||
|
argspec_errors=argspec_result.get("errors"),
|
||||||
|
)
|
||||||
|
)
|
|
@ -0,0 +1,112 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2021 Red Hat
|
||||||
|
# GNU General Public License v3.0+
|
||||||
|
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Test plugin file for netaddr tests: in_any_network
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
from ansible_collections.ansible.utils.plugins.test.in_network import (
|
||||||
|
_in_network,
|
||||||
|
)
|
||||||
|
from ansible_collections.ansible.utils.plugins.plugin_utils.base.ipaddress_utils import (
|
||||||
|
_validate_args,
|
||||||
|
)
|
||||||
|
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
DOCUMENTATION = """
|
||||||
|
name: in_any_network
|
||||||
|
author: Priyam Sahoo (@priyamsahoo)
|
||||||
|
version_added: "2.2.0"
|
||||||
|
short_description: Test if Test if an IP or network falls in any network
|
||||||
|
description:
|
||||||
|
- This plugin checks if the provided IP or network address belongs to the provided list network addresses
|
||||||
|
options:
|
||||||
|
ip:
|
||||||
|
description:
|
||||||
|
- A string that represents an IP address of a host or network
|
||||||
|
- For example: "10.1.1.1"
|
||||||
|
type: str
|
||||||
|
required: True
|
||||||
|
networks:
|
||||||
|
description:
|
||||||
|
- A list of string and each string represents a network address in CIDR form
|
||||||
|
- For example: ['10.0.0.0/8', '192.168.1.0/24']
|
||||||
|
type: list
|
||||||
|
required: True
|
||||||
|
notes:
|
||||||
|
"""
|
||||||
|
|
||||||
|
EXAMPLES = r"""
|
||||||
|
|
||||||
|
#### Simple examples
|
||||||
|
|
||||||
|
- name: Set network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
networks:
|
||||||
|
- "10.0.0.0/8"
|
||||||
|
- "192.168.1.0/24"
|
||||||
|
|
||||||
|
- name: Check if 10.1.1.1 is in the provided network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '10.1.1.1' is ansible.utils.in_any_network networks }}"
|
||||||
|
|
||||||
|
# TASK [Check if 10.1.1.1 is in the provided network list] **************************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- name: Set network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
networks:
|
||||||
|
- "10.0.0.0/8"
|
||||||
|
- "192.168.1.0/24"
|
||||||
|
- "172.16.0.0/16"
|
||||||
|
|
||||||
|
- name: Check if 8.8.8.8 is not in the provided network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '8.8.8.8' is not ansible.utils.in_any_network networks }}"
|
||||||
|
|
||||||
|
# TASK [Check if 8.8.8.8 is not in the provided network list] ************************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
RETURN = """
|
||||||
|
data:
|
||||||
|
description:
|
||||||
|
- If jinja test satisfies plugin expression C(true)
|
||||||
|
- If jinja test does not satisfy plugin expression C(false)
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def _in_any_network(ip, networks):
|
||||||
|
"""Test if an IP or network is in any network"""
|
||||||
|
|
||||||
|
params = {"ip": ip, "networks": networks}
|
||||||
|
_validate_args("in_any_network", DOCUMENTATION, params)
|
||||||
|
|
||||||
|
bools = [_in_network(ip, network) for network in networks]
|
||||||
|
if True in bools:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
class TestModule(object):
|
||||||
|
""" network jinja test"""
|
||||||
|
|
||||||
|
test_map = {"in_any_network": _in_any_network}
|
||||||
|
|
||||||
|
def tests(self):
|
||||||
|
return self.test_map
|
|
@ -0,0 +1,128 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2021 Red Hat
|
||||||
|
# GNU General Public License v3.0+
|
||||||
|
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Test plugin file for netaddr tests: in_network
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
from ansible_collections.ansible.utils.plugins.plugin_utils.base.ipaddress_utils import (
|
||||||
|
ip_network,
|
||||||
|
_is_subnet_of,
|
||||||
|
_need_ipaddress,
|
||||||
|
)
|
||||||
|
from ansible_collections.ansible.utils.plugins.plugin_utils.base.ipaddress_utils import (
|
||||||
|
_validate_args,
|
||||||
|
)
|
||||||
|
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
DOCUMENTATION = """
|
||||||
|
name: in_network
|
||||||
|
author: Priyam Sahoo (@priyamsahoo)
|
||||||
|
version_added: "2.2.0"
|
||||||
|
short_description: Test if IP address falls in the network
|
||||||
|
description:
|
||||||
|
- This plugin checks if the provided IP address belongs to the provided network
|
||||||
|
options:
|
||||||
|
ip:
|
||||||
|
description:
|
||||||
|
- A string that represents an IP address
|
||||||
|
- For example: "10.1.1.1"
|
||||||
|
type: str
|
||||||
|
required: True
|
||||||
|
network:
|
||||||
|
description:
|
||||||
|
- A string that represents the network address in CIDR form
|
||||||
|
- For example: "10.0.0.0/8"
|
||||||
|
type: str
|
||||||
|
required: True
|
||||||
|
notes:
|
||||||
|
"""
|
||||||
|
|
||||||
|
EXAMPLES = r"""
|
||||||
|
|
||||||
|
#### Simple examples
|
||||||
|
|
||||||
|
- name: Check if 10.1.1.1 is in 10.0.0.0/8
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '10.1.1.1' is ansible.utils.in_network '10.0.0.0/8' }}"
|
||||||
|
|
||||||
|
# TASK [Check if 10.1.1.1 is in 10.0.0.0/8] ***********************************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- name: Check if 10.1.1.1 is not in 192.168.1.0/24
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '10.1.1.1' is not ansible.utils.in_network '192.168.1.0/24' }}"
|
||||||
|
|
||||||
|
# TASK [Check if 10.1.1.1 is not in 192.168.1.0/24] ****************************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- name: Check if 2001:db8:a::123 is in 2001:db8:a::/64
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '2001:db8:a::123' is ansible.utils.in_network '2001:db8:a::/64' }}"
|
||||||
|
|
||||||
|
# TASK [Check if 2001:db8:a::123 is in 2001:db8:a::/64] ****************************
|
||||||
|
# task path: /home/prsahoo/playbooks/collections/localhost_test/utils_in_network.yml:16
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- name: Check if 2001:db8:a::123 is not in 10.0.0.0/8
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '2001:db8:a::123' is not ansible.utils.in_network '10.0.0.0/8' }}"
|
||||||
|
|
||||||
|
# TASK [Check if 2001:db8:a::123 is not in 10.0.0.0/8] *********************************
|
||||||
|
# task path: /home/prsahoo/playbooks/collections/localhost_test/utils_in_network.yml:20
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
RETURN = """
|
||||||
|
data:
|
||||||
|
description:
|
||||||
|
- If jinja test satisfies plugin expression C(true)
|
||||||
|
- If jinja test does not satisfy plugin expression C(false)
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
@_need_ipaddress
|
||||||
|
def _in_network(ip, network):
|
||||||
|
"""Test if an address or network is in a network"""
|
||||||
|
|
||||||
|
params = {"ip": ip, "network": network}
|
||||||
|
_validate_args("in_network", DOCUMENTATION, params)
|
||||||
|
|
||||||
|
try:
|
||||||
|
return _is_subnet_of(ip_network(ip), ip_network(network))
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
class TestModule(object):
|
||||||
|
""" network jinja test"""
|
||||||
|
|
||||||
|
test_map = {"in_network": _in_network}
|
||||||
|
|
||||||
|
def tests(self):
|
||||||
|
return self.test_map
|
|
@ -0,0 +1,111 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2021 Red Hat
|
||||||
|
# GNU General Public License v3.0+
|
||||||
|
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Test plugin file for netaddr tests: in_one_network
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
from ansible_collections.ansible.utils.plugins.test.in_network import (
|
||||||
|
_in_network,
|
||||||
|
)
|
||||||
|
from ansible_collections.ansible.utils.plugins.plugin_utils.base.ipaddress_utils import (
|
||||||
|
_validate_args,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
DOCUMENTATION = """
|
||||||
|
name: in_one_network
|
||||||
|
author: Priyam Sahoo (@priyamsahoo)
|
||||||
|
version_added: "2.2.0"
|
||||||
|
short_description: Test if IP address belongs in any one of the networks in the list
|
||||||
|
description:
|
||||||
|
- This plugin checks if the provided IP address belongs to the provided list network addresses
|
||||||
|
options:
|
||||||
|
ip:
|
||||||
|
description:
|
||||||
|
- A string that represents an IP address
|
||||||
|
- For example: "10.1.1.1"
|
||||||
|
type: str
|
||||||
|
required: True
|
||||||
|
networks:
|
||||||
|
description:
|
||||||
|
- A list of string and each string represents a network address in CIDR form
|
||||||
|
- For example: ['10.0.0.0/8', '192.168.1.0/24']
|
||||||
|
type: list
|
||||||
|
required: True
|
||||||
|
notes:
|
||||||
|
"""
|
||||||
|
|
||||||
|
EXAMPLES = r"""
|
||||||
|
|
||||||
|
#### Simple examples
|
||||||
|
|
||||||
|
- name: Set network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
networks:
|
||||||
|
- "10.0.0.0/8"
|
||||||
|
- "192.168.1.0/24"
|
||||||
|
|
||||||
|
- name: Check if 10.1.1.1 is in the provided network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '10.1.1.1' is ansible.utils.in_one_network networks }}"
|
||||||
|
|
||||||
|
# TASK [Check if 10.1.1.1 is in the provided network list] **********************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
|
||||||
|
- name: Set network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
networks:
|
||||||
|
- "10.0.0.0/8"
|
||||||
|
- "10.1.1.0/24"
|
||||||
|
|
||||||
|
- name: Check if 10.1.1.1 is not in the provided network list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
data: "{{ '10.1.1.1' is not ansible.utils.in_one_network networks }}"
|
||||||
|
|
||||||
|
# TASK [Check if 10.1.1.1 is in not the provided network list] ************************
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "data": true
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
RETURN = """
|
||||||
|
data:
|
||||||
|
description:
|
||||||
|
- If jinja test satisfies plugin expression C(true)
|
||||||
|
- If jinja test does not satisfy plugin expression C(false)
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def _in_one_network(ip, networks):
|
||||||
|
"""Test if an IP or network is in one network"""
|
||||||
|
|
||||||
|
params = {"ip": ip, "networks": networks}
|
||||||
|
_validate_args("in_one_network", DOCUMENTATION, params)
|
||||||
|
|
||||||
|
bools = [_in_network(ip, network) for network in networks]
|
||||||
|
if bools.count(True) == 1:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
class TestModule(object):
|
||||||
|
""" network jinja test"""
|
||||||
|
|
||||||
|
test_map = {"in_one_network": _in_one_network}
|
||||||
|
|
||||||
|
def tests(self):
|
||||||
|
return self.test_map
|
|
@ -1,6 +1,7 @@
|
||||||
black==19.3b0 ; python_version > '3.5'
|
black==19.3b0 ; python_version > '3.5'
|
||||||
coverage==4.5.4
|
coverage==4.5.4
|
||||||
flake8
|
flake8
|
||||||
|
ipaddress ; python_version < '3.0'
|
||||||
mock ; python_version < '3.5'
|
mock ; python_version < '3.5'
|
||||||
pytest-xdist
|
pytest-xdist
|
||||||
yamllint
|
yamllint
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
- name: "in_any_network: :Check if 10.1.1.1 is in the provided network list"
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- "{{ '10.1.1.1' is ansible.utils.in_any_network networks }}"
|
||||||
|
|
||||||
|
- name: "in_any_network: Check if 8.8.8.8 is not in the provided network list"
|
||||||
|
assert:
|
||||||
|
that: "{{ '8.8.8.8' is not ansible.utils.in_any_network networks }}"
|
||||||
|
|
||||||
|
- name: "in_any_network: Test invalidness"
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
criteria_check: "{{ '192.168.4.56' is ansible.utils.in_any_network networks }}"
|
||||||
|
|
||||||
|
- name: "in_any_network: Assert invalidness"
|
||||||
|
assert:
|
||||||
|
that: "{{ criteria_check == false }}"
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
- name: "in_network: Check if 10.1.1.1 is in 10.0.0.0/8"
|
||||||
|
assert:
|
||||||
|
that: "{{ '10.1.1.1' is ansible.utils.in_network '10.0.0.0/8' }}"
|
||||||
|
|
||||||
|
- name: "in_network: Check if 10.1.1.1 is not in 192.168.1.0/24"
|
||||||
|
assert:
|
||||||
|
that: "{{ '10.1.1.1' is not ansible.utils.in_network '192.168.1.0/24' }}"
|
||||||
|
|
||||||
|
- name: "in_network: Test invalidness"
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
criteria_check1: "{{ '8.8.8.8' is ansible.utils.in_network '10.0.0.0/8' }}"
|
||||||
|
|
||||||
|
- name: "in_network: Assert invalidness"
|
||||||
|
assert:
|
||||||
|
that: "{{ criteria_check1 == false }}"
|
||||||
|
|
||||||
|
- name: "in_network: Check if 2001:db8:a::123 is in 2001:db8:a::/64"
|
||||||
|
assert:
|
||||||
|
that: "{{ '2001:db8:a::123' is ansible.utils.in_network '2001:db8:a::/64' }}"
|
||||||
|
|
||||||
|
- name: "in_network: Check if 2001:db8:a::123 is not in 10.0.0.0/8"
|
||||||
|
assert:
|
||||||
|
that: "{{ '2001:db8:a::123' is not ansible.utils.in_network '10.0.0.0/8' }}"
|
||||||
|
|
||||||
|
- name: "in_network: Test invalidness"
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
criteria_check2: "{{ '2001:db8:a::123' is not ansible.utils.in_network '2001:db8:a::/64' }}"
|
||||||
|
register: result2
|
||||||
|
|
||||||
|
- name: "in_network: Assert invalidness"
|
||||||
|
assert:
|
||||||
|
that: "{{ criteria_check2 == false }}"
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
- name: "in_one_network: Check if 10.1.1.1 is in the provided network list"
|
||||||
|
assert:
|
||||||
|
that: "{{ '10.1.1.1' is ansible.utils.in_one_network networks }}"
|
||||||
|
|
||||||
|
- name: "in_one_network: Check if 192.168.3.5 is not in the provided network list"
|
||||||
|
assert:
|
||||||
|
that: "{{ '192.168.3.5' is not ansible.utils.in_one_network networks }}"
|
||||||
|
|
||||||
|
- name: "in_one_network: Test invalidness"
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
criteria_check: "{{ '172.168.2.16' is ansible.utils.in_one_network networks }}"
|
||||||
|
|
||||||
|
- name: "in_one_network: Assert invalidness"
|
||||||
|
assert:
|
||||||
|
that: "{{ criteria_check == false }}"
|
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
- name: Recursively find all test files
|
||||||
|
find:
|
||||||
|
file_type: file
|
||||||
|
paths: "{{ role_path }}/tasks/include"
|
||||||
|
recurse: true
|
||||||
|
use_regex: true
|
||||||
|
patterns:
|
||||||
|
- '^(?!_).+$'
|
||||||
|
register: found
|
||||||
|
|
||||||
|
- include: "{{ item.path }}"
|
||||||
|
loop: "{{ found.files }}"
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
networks:
|
||||||
|
- "10.0.0.0/8"
|
||||||
|
- "192.168.1.0/24"
|
||||||
|
- "172.16.0.0/16"
|
|
@ -0,0 +1,50 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2020 Red Hat
|
||||||
|
# GNU General Public License v3.0+
|
||||||
|
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Unit test file for netaddr test plugin: in_any_network
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
from ansible.errors import AnsibleError
|
||||||
|
from ansible_collections.ansible.utils.plugins.test.in_any_network import (
|
||||||
|
_in_any_network,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestInAnyNetwork(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_invalid_data(self):
|
||||||
|
"""Check passing invalid argspec"""
|
||||||
|
|
||||||
|
# invalid argument
|
||||||
|
with self.assertRaises(AnsibleError) as error:
|
||||||
|
_in_any_network(
|
||||||
|
ip="10.1.1.1",
|
||||||
|
networks={
|
||||||
|
"name": "networks",
|
||||||
|
"value": ["10.0.0.0/8", "192.168.1.0/24"],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.assertIn("unable to convert to list", str(error.exception))
|
||||||
|
|
||||||
|
def test_valid_data(self):
|
||||||
|
"""Check passing valid data as per criteria"""
|
||||||
|
|
||||||
|
result = _in_any_network(
|
||||||
|
ip="10.1.1.1", networks=["10.0.0.0/8", "192.168.1.0/24"]
|
||||||
|
)
|
||||||
|
self.assertEqual(result, True)
|
||||||
|
|
||||||
|
result = _in_any_network(
|
||||||
|
ip="8.8.8.8", networks=["10.0.0.0/8", "192.168.1.0/24"]
|
||||||
|
)
|
||||||
|
self.assertEqual(result, False)
|
|
@ -0,0 +1,45 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2020 Red Hat
|
||||||
|
# GNU General Public License v3.0+
|
||||||
|
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Unit test file for netaddr test plugin: in_network
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
from ansible_collections.ansible.utils.plugins.test.in_network import (
|
||||||
|
_in_network,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestInNetwork(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_invalid_data(self):
|
||||||
|
"""Check passing invalid argspec"""
|
||||||
|
|
||||||
|
# invalid argument
|
||||||
|
with self.assertRaises(TypeError) as error:
|
||||||
|
_in_network(ip="10.1.1.1")
|
||||||
|
self.assertIn("argument", str(error.exception))
|
||||||
|
|
||||||
|
def test_valid_data(self):
|
||||||
|
"""Check passing valid data as per criteria"""
|
||||||
|
|
||||||
|
result = _in_network(ip="10.1.1.1", network="10.0.0.0/8")
|
||||||
|
self.assertEqual(result, True)
|
||||||
|
|
||||||
|
result = _in_network(ip="8.8.8.8", network="192.168.1.0/24")
|
||||||
|
self.assertEqual(result, False)
|
||||||
|
|
||||||
|
result = _in_network(ip="2001:db8:a::123", network="2001:db8:a::/64")
|
||||||
|
self.assertEqual(result, True)
|
||||||
|
|
||||||
|
result = _in_network(ip="2001:db8:a::123", network="10.0.0.0/8")
|
||||||
|
self.assertEqual(result, False)
|
|
@ -0,0 +1,50 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2020 Red Hat
|
||||||
|
# GNU General Public License v3.0+
|
||||||
|
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Unit test file for netaddr test plugin: in_one_network
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
from ansible.errors import AnsibleError
|
||||||
|
from ansible_collections.ansible.utils.plugins.test.in_one_network import (
|
||||||
|
_in_one_network,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestInOneNetwork(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_invalid_data(self):
|
||||||
|
"""Check passing invalid argspec"""
|
||||||
|
|
||||||
|
# invalid argument
|
||||||
|
with self.assertRaises(AnsibleError) as error:
|
||||||
|
_in_one_network(
|
||||||
|
ip="10.1.1.1",
|
||||||
|
networks={
|
||||||
|
"name": "networks",
|
||||||
|
"value": ["10.0.0.0/8", "192.168.1.0/24"],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.assertIn("unable to convert to list", str(error.exception))
|
||||||
|
|
||||||
|
def test_valid_data(self):
|
||||||
|
"""Check passing valid data as per criteria"""
|
||||||
|
|
||||||
|
result = _in_one_network(
|
||||||
|
ip="10.1.1.1", networks=["10.0.0.0/8", "192.168.1.0/24"]
|
||||||
|
)
|
||||||
|
self.assertEqual(result, True)
|
||||||
|
|
||||||
|
result = _in_one_network(
|
||||||
|
ip="8.8.8.8", networks=["10.0.0.0/8", "10.1.1.0/24"]
|
||||||
|
)
|
||||||
|
self.assertEqual(result, False)
|
Loading…
Reference in New Issue