d8ba8c03f3
This functionality was not considered when the module was written, but there's no reason why it shouldn't be supported. We had to rework the query string construction and object filtering. This new functionality allows to filter on arbitrary keys and supports None values. This PR fixes various issues with the existing framework, including querying specific objects using construct_url_4 (i.e. aci_epg_to_contract and aci_static_binding_to_epg)
296 lines
12 KiB
YAML
296 lines
12 KiB
YAML
# Test code for the ACI modules
|
|
# Copyright: (c) 2018, Dag Wieers (dagwieers) <dag@wieers.com>
|
|
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
# CLEAN ENVIRONMENT
|
|
- name: Remove dynamic vlan pool
|
|
aci_vlan_pool: &dynamic_vlan_pool_absent
|
|
host: '{{ aci_hostname }}'
|
|
username: '{{ aci_username }}'
|
|
password: '{{ aci_password }}'
|
|
validate_certs: '{{ aci_validate_certs | default(false) }}'
|
|
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
|
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
|
output_level: '{{ aci_output_level | default("info") }}'
|
|
pool: anstest
|
|
pool_allocation_mode: dynamic
|
|
state: absent
|
|
|
|
|
|
# ADD VLAN POOL
|
|
- name: Add dynamic vlan pool (check_mode)
|
|
aci_vlan_pool: &dynamic_vlan_pool_present
|
|
host: '{{ aci_hostname }}'
|
|
username: '{{ aci_username }}'
|
|
password: '{{ aci_password }}'
|
|
validate_certs: '{{ aci_validate_certs | default(false) }}'
|
|
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
|
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
|
output_level: '{{ aci_output_level | default("info") }}'
|
|
pool: anstest
|
|
pool_allocation_mode: dynamic
|
|
state: present
|
|
check_mode: yes
|
|
register: cm_add_dynamic_vlan_pool
|
|
|
|
- name: Add dynamic vlan pool (normal mode)
|
|
aci_vlan_pool: *dynamic_vlan_pool_present
|
|
register: nm_add_dynamic_vlan_pool
|
|
|
|
- name: Verify add_dynamic_vlan_pool
|
|
assert:
|
|
that:
|
|
- cm_add_dynamic_vlan_pool is changed
|
|
- nm_add_dynamic_vlan_pool is changed
|
|
- 'cm_add_dynamic_vlan_pool.sent == nm_add_dynamic_vlan_pool.sent == {"fvnsVlanInstP": {"attributes": {"allocMode": "dynamic", "name": "anstest"}}}'
|
|
- 'cm_add_dynamic_vlan_pool.proposed == nm_add_dynamic_vlan_pool.proposed == {"fvnsVlanInstP": {"attributes": {"allocMode": "dynamic", "name": "anstest"}}}'
|
|
- cm_add_dynamic_vlan_pool.previous == nm_add_dynamic_vlan_pool.previous == []
|
|
# NOTE: We cannot fix this easily
|
|
- cm_add_dynamic_vlan_pool.current == []
|
|
- nm_add_dynamic_vlan_pool.current.0.fvnsVlanInstP.attributes.allocMode == 'dynamic'
|
|
- nm_add_dynamic_vlan_pool.current.0.fvnsVlanInstP.attributes.descr == ''
|
|
- nm_add_dynamic_vlan_pool.current.0.fvnsVlanInstP.attributes.dn == 'uni/infra/vlanns-[anstest]-dynamic'
|
|
- nm_add_dynamic_vlan_pool.current.0.fvnsVlanInstP.attributes.name == 'anstest'
|
|
|
|
- name: Add dynamic_vlan_pool again (check_mode)
|
|
aci_vlan_pool: *dynamic_vlan_pool_present
|
|
check_mode: yes
|
|
register: cm_add_dynamic_vlan_pool_again
|
|
|
|
- name: Add dynamic vlan pool again (normal mode)
|
|
aci_vlan_pool: *dynamic_vlan_pool_present
|
|
register: nm_add_dynamic_vlan_pool_again
|
|
|
|
- name: Verify add_dynamic_vlan_pool_again
|
|
assert:
|
|
that:
|
|
- cm_add_dynamic_vlan_pool_again is not changed
|
|
- nm_add_dynamic_vlan_pool_again is not changed
|
|
- cm_add_dynamic_vlan_pool_again.current == nm_add_dynamic_vlan_pool_again.current == nm_add_dynamic_vlan_pool.current
|
|
|
|
|
|
# CHANGE VLAN POOL
|
|
- name: Change description of dynamic vlan pool (check_mode)
|
|
aci_vlan_pool:
|
|
<<: *dynamic_vlan_pool_present
|
|
description: Ansible test dynamic vlan pool
|
|
check_mode: yes
|
|
register: cm_add_dynamic_vlan_pool_descr
|
|
|
|
- name: Change description of dynamic vlan pool (normal mode)
|
|
aci_vlan_pool:
|
|
<<: *dynamic_vlan_pool_present
|
|
description: Ansible test dynamic vlan pool
|
|
register: nm_add_dynamic_vlan_pool_descr
|
|
|
|
- name: Verify add_dynamic_vlan_pool_descr
|
|
assert:
|
|
that:
|
|
- cm_add_dynamic_vlan_pool_descr is changed
|
|
- nm_add_dynamic_vlan_pool_descr is changed
|
|
- 'cm_add_dynamic_vlan_pool_descr.sent == nm_add_dynamic_vlan_pool_descr.sent == {"fvnsVlanInstP": {"attributes": {"descr": "Ansible test dynamic vlan pool"}}}'
|
|
- 'cm_add_dynamic_vlan_pool_descr.proposed == nm_add_dynamic_vlan_pool_descr.proposed == {"fvnsVlanInstP": {"attributes": {"allocMode": "dynamic", "descr": "Ansible test dynamic vlan pool", "name": "anstest"}}}'
|
|
- cm_add_dynamic_vlan_pool_descr.previous == nm_add_dynamic_vlan_pool_descr.previous == cm_add_dynamic_vlan_pool_descr.current == nm_add_dynamic_vlan_pool.current
|
|
- nm_add_dynamic_vlan_pool_descr.current.0.fvnsVlanInstP.attributes.allocMode == 'dynamic'
|
|
- nm_add_dynamic_vlan_pool_descr.current.0.fvnsVlanInstP.attributes.descr == 'Ansible test dynamic vlan pool'
|
|
- nm_add_dynamic_vlan_pool_descr.current.0.fvnsVlanInstP.attributes.dn == 'uni/infra/vlanns-[anstest]-dynamic'
|
|
- nm_add_dynamic_vlan_pool_descr.current.0.fvnsVlanInstP.attributes.name == 'anstest'
|
|
|
|
- name: Change description of dynamic vlan pool again (check_mode)
|
|
aci_vlan_pool:
|
|
<<: *dynamic_vlan_pool_present
|
|
description: Ansible test dynamic vlan pool
|
|
check_mode: yes
|
|
register: cm_add_dynamic_vlan_pool_descr_again
|
|
|
|
- name: Change description of dynamic vlan pool again (normal mode)
|
|
aci_vlan_pool:
|
|
<<: *dynamic_vlan_pool_present
|
|
description: Ansible test dynamic vlan pool
|
|
register: nm_add_dynamic_vlan_pool_descr_again
|
|
|
|
- name: Verify add_dynamic_vlan_pool_descr_again
|
|
assert:
|
|
that:
|
|
- cm_add_dynamic_vlan_pool_descr_again is not changed
|
|
- nm_add_dynamic_vlan_pool_descr_again is not changed
|
|
- cm_add_dynamic_vlan_pool_descr_again.current == nm_add_dynamic_vlan_pool_descr_again.current == nm_add_dynamic_vlan_pool_descr.current
|
|
|
|
|
|
# ADD VLAN POOL AGAIN
|
|
- name: Add dynamic vlan pool again with no description (check_mode)
|
|
aci_vlan_pool: *dynamic_vlan_pool_present
|
|
check_mode: yes
|
|
register: cm_add_dynamic_vlan_pool_again_no_descr
|
|
|
|
- name: Add dynamic vlan pool again with no description (normal mode)
|
|
aci_vlan_pool: *dynamic_vlan_pool_present
|
|
register: nm_add_dynamic_vlan_pool_again_no_descr
|
|
|
|
- name: Verify add_dynamic_vlan_pool_again_no_descr
|
|
assert:
|
|
that:
|
|
- cm_add_dynamic_vlan_pool_again_no_descr is not changed
|
|
- nm_add_dynamic_vlan_pool_again_no_descr is not changed
|
|
- cm_add_dynamic_vlan_pool_again_no_descr.current == nm_add_dynamic_vlan_pool_again_no_descr.current == nm_add_dynamic_vlan_pool_descr.current
|
|
|
|
|
|
# QUERY ALL VLAN POOLS
|
|
- name: Query all dynamic vlan pools (check_mode)
|
|
aci_vlan_pool: &dynamic_vlan_pool_query
|
|
host: '{{ aci_hostname }}'
|
|
username: '{{ aci_username }}'
|
|
password: '{{ aci_password }}'
|
|
validate_certs: '{{ aci_validate_certs | default(false) }}'
|
|
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
|
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
|
output_level: '{{ aci_output_level | default("info") }}'
|
|
state: query
|
|
check_mode: yes
|
|
register: cm_query_all_dynamic_vlan_pools
|
|
|
|
- name: Query all dynamic vlan pools (normal mode)
|
|
aci_vlan_pool: *dynamic_vlan_pool_query
|
|
register: nm_query_all_dynamic_vlan_pools
|
|
|
|
- name: Verify query_all_dynamic_vlan_pools
|
|
assert:
|
|
that:
|
|
- cm_query_all_dynamic_vlan_pools is not changed
|
|
- nm_query_all_dynamic_vlan_pools is not changed
|
|
- cm_query_all_dynamic_vlan_pools == nm_query_all_dynamic_vlan_pools
|
|
- cm_query_all_dynamic_vlan_pools.current|length >= 1
|
|
|
|
|
|
# QUERY A VLAN POOL
|
|
- name: Query our dynamic vlan pool
|
|
aci_vlan_pool:
|
|
<<: *dynamic_vlan_pool_query
|
|
pool: anstest
|
|
pool_allocation_mode: dynamic
|
|
check_mode: yes
|
|
register: cm_query_dynamic_vlan_pool
|
|
|
|
- name: Query our dynamic vlan pool
|
|
aci_vlan_pool:
|
|
<<: *dynamic_vlan_pool_query
|
|
pool: anstest
|
|
pool_allocation_mode: dynamic
|
|
register: nm_query_dynamic_vlan_pool
|
|
|
|
- name: Verify query_dynamic_vlan_pool
|
|
assert:
|
|
that:
|
|
- cm_query_dynamic_vlan_pool is not changed
|
|
- nm_query_dynamic_vlan_pool is not changed
|
|
- cm_query_dynamic_vlan_pool == nm_query_dynamic_vlan_pool
|
|
- nm_query_dynamic_vlan_pool.current.0.fvnsVlanInstP.attributes.allocMode == 'dynamic'
|
|
- nm_query_dynamic_vlan_pool.current.0.fvnsVlanInstP.attributes.descr == 'Ansible test dynamic vlan pool'
|
|
- nm_query_dynamic_vlan_pool.current.0.fvnsVlanInstP.attributes.dn == 'uni/infra/vlanns-[anstest]-dynamic'
|
|
- nm_query_dynamic_vlan_pool.current.0.fvnsVlanInstP.attributes.name == 'anstest'
|
|
|
|
|
|
# REMOVE VLAN POOL
|
|
- name: Remove dynamic vlan pool (check_mode)
|
|
aci_vlan_pool: *dynamic_vlan_pool_absent
|
|
check_mode: yes
|
|
register: cm_remove_dynamic_vlan_pool
|
|
|
|
- name: Remove dynamic vlan pool (normal mode)
|
|
aci_vlan_pool: *dynamic_vlan_pool_absent
|
|
register: nm_remove_dynamic_vlan_pool
|
|
|
|
- name: Verify remove_dynamic_vlan_pool
|
|
assert:
|
|
that:
|
|
- cm_remove_dynamic_vlan_pool is changed
|
|
- nm_remove_dynamic_vlan_pool is changed
|
|
- 'cm_remove_dynamic_vlan_pool.current == cm_remove_dynamic_vlan_pool.previous == nm_remove_dynamic_vlan_pool.previous == [{"fvnsVlanInstP": {"attributes": {"allocMode": "dynamic", "descr": "Ansible test dynamic vlan pool", "dn": "uni/infra/vlanns-[anstest]-dynamic", "name": "anstest", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
|
- nm_remove_dynamic_vlan_pool.current == []
|
|
|
|
- name: Remove dynamic vlan pool again (check_mode)
|
|
aci_vlan_pool: *dynamic_vlan_pool_absent
|
|
check_mode: yes
|
|
register: cm_remove_dynamic_vlan_pool_again
|
|
|
|
- name: Remove dynamic vlan pool again (normal mode)
|
|
aci_vlan_pool: *dynamic_vlan_pool_absent
|
|
register: nm_remove_dynamic_vlan_pool_again
|
|
|
|
- name: Verify remove_dynamic_vlan_pool_again
|
|
assert:
|
|
that:
|
|
- cm_remove_dynamic_vlan_pool_again is not changed
|
|
- nm_remove_dynamic_vlan_pool_again is not changed
|
|
- cm_remove_dynamic_vlan_pool_again.proposed == nm_remove_dynamic_vlan_pool_again.proposed == {}
|
|
- cm_remove_dynamic_vlan_pool_again.sent == nm_remove_dynamic_vlan_pool_again.sent == {}
|
|
- cm_remove_dynamic_vlan_pool_again.previous == nm_remove_dynamic_vlan_pool_again.previous == []
|
|
- cm_remove_dynamic_vlan_pool_again.current == nm_remove_dynamic_vlan_pool_again.current == []
|
|
|
|
|
|
# QUERY NON-EXISTING VLAN POOL
|
|
- name: Query non-existing dynamic vlan pool (check_mode)
|
|
aci_vlan_pool:
|
|
<<: *dynamic_vlan_pool_query
|
|
pool: anstest
|
|
pool_allocation_mode: dynamic
|
|
check_mode: yes
|
|
register: cm_query_non_dynamic_vlan_pool
|
|
|
|
- name: Query non-existing dynamic vlan pool (normal mode)
|
|
aci_vlan_pool:
|
|
<<: *dynamic_vlan_pool_query
|
|
pool: anstest
|
|
pool_allocation_mode: dynamic
|
|
register: nm_query_non_dynamic_vlan_pool
|
|
|
|
# TODO: Implement more tests
|
|
- name: Verify query_non_dynamic_vlan_pool
|
|
assert:
|
|
that:
|
|
- cm_query_non_dynamic_vlan_pool is not changed
|
|
- nm_query_non_dynamic_vlan_pool is not changed
|
|
- cm_remove_dynamic_vlan_pool_again.previous == nm_remove_dynamic_vlan_pool_again.previous == []
|
|
- cm_remove_dynamic_vlan_pool_again.current == nm_remove_dynamic_vlan_pool_again.current == []
|
|
|
|
|
|
# PROVOKE ERRORS
|
|
- name: Error when required parameter is missing
|
|
aci_vlan_pool:
|
|
host: '{{ aci_hostname }}'
|
|
username: '{{ aci_username }}'
|
|
password: '{{ aci_password }}'
|
|
validate_certs: '{{ aci_validate_certs | default(false) }}'
|
|
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
|
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
|
output_level: '{{ aci_output_level | default("info") }}'
|
|
state: present
|
|
ignore_errors: yes
|
|
register: error_on_missing_required_param
|
|
|
|
- name: Verify error_on_missing_required_param
|
|
assert:
|
|
that:
|
|
- error_on_missing_required_param is failed
|
|
- 'error_on_missing_required_param.msg == "state is present but all of the following are missing: pool"'
|
|
|
|
- name: Error when together parameter is missing
|
|
aci_vlan_pool:
|
|
host: '{{ aci_hostname }}'
|
|
username: '{{ aci_username }}'
|
|
password: '{{ aci_password }}'
|
|
validate_certs: '{{ aci_validate_certs | default(false) }}'
|
|
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
|
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
|
output_level: '{{ aci_output_level | default("info") }}'
|
|
pool: anstest
|
|
state: present
|
|
ignore_errors: yes
|
|
register: error_on_missing_together_param
|
|
|
|
- name: Verify error_on_missing_together_param
|
|
assert:
|
|
that:
|
|
- error_on_missing_together_param is failed
|
|
- error_on_missing_together_param.msg == "ACI requires the 'pool_allocation_mode' when 'pool' is provided"
|