diff --git a/test/integration/targets/aci_vlan_pool/tasks/dynamic.yml b/test/integration/targets/aci_vlan_pool/tasks/dynamic.yml new file mode 100644 index 00000000000..d75bf1f9a33 --- /dev/null +++ b/test/integration/targets/aci_vlan_pool/tasks/dynamic.yml @@ -0,0 +1,285 @@ +# Test code for the ACI modules +# Copyright: (c) 2018, Dag Wieers (dagwieers) + +# 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: 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: 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.changed == nm_add_dynamic_vlan_pool.changed == true + - '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.changed == nm_add_dynamic_vlan_pool_again.changed == false + - 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.changed == nm_add_dynamic_vlan_pool_descr.changed == true + - '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.changed == nm_add_dynamic_vlan_pool_descr_again.changed == false + - 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.changed == nm_add_dynamic_vlan_pool_again_no_descr.changed == false + - 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) }}' + 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.changed == nm_query_all_dynamic_vlan_pools.changed == false + - 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 ourdynamic 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.changed == nm_query_dynamic_vlan_pool.changed == false + - 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.changed == nm_remove_dynamic_vlan_pool.changed == true + - '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.changed == nm_remove_dynamic_vlan_pool_again.changed == false + - 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.changed == nm_query_non_dynamic_vlan_pool.changed == false + - 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: info + state: present + ignore_errors: yes + register: error_on_missing_required_param + +- name: Assertion test - present + assert: + that: + - error_on_missing_required_param.failed == true + - '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: 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.failed == true + - error_on_missing_together_param.msg == "ACI requires the 'pool_allocation_mode' when 'pool' is provided" diff --git a/test/integration/targets/aci_vlan_pool/tasks/main.yml b/test/integration/targets/aci_vlan_pool/tasks/main.yml index 1c086b2dc35..7838dc8c455 100644 --- a/test/integration/targets/aci_vlan_pool/tasks/main.yml +++ b/test/integration/targets/aci_vlan_pool/tasks/main.yml @@ -1,246 +1,15 @@ # Test code for the ACI modules - -# Copyright: (c) 2017, Jacob McGill (jmcgill298) # Copyright: (c) 2018, Dag Wieers (dagwieers) + # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -- name: Test that we have an aci apic host, aci username and aci password +- name: Test that we have an ACI APIC host, ACI username and ACI password fail: msg: 'Please define the following variables: aci_hostname, aci_username and aci_password.' when: aci_hostname is not defined or aci_username is not defined or aci_password is not defined -- name: Ensure vlan pool does not exist for tests to kick off - aci_vlan_pool: &aci_pool_absent_static - 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: debug - state: absent - pool: anstest - allocation_mode: static +- include_tasks: static.yml + when: static is not defined or static -- name: Ensure vlan pool does not exist for tests to kick off - aci_vlan_pool: &aci_pool_absent_dynamic - <<: *aci_pool_absent_static - allocation_mode: dynamic - -- name: Create static vlan pool - check mode works - aci_vlan_pool: &aci_pool_present_static - <<: *aci_pool_absent_static - state: present - descr: Ansible Test - check_mode: yes - register: create_check_mode - -- name: Assertion test - present - assert: - that: - - create_check_mode.changed == true - - 'create_check_mode.sent == {"fvnsVlanInstP": {"attributes": {"allocMode": "static", "descr": "Ansible Test", "name": "anstest"}}}' - -- name: Create static vlan pool - creation works - aci_vlan_pool: - <<: *aci_pool_present_static - register: create_static - -- name: Assertion test - present - assert: - that: - - create_static.changed == true - - create_static.previous == [] - - create_static.sent == create_check_mode.sent - -- name: Create dynamic vlan pool - creation works - aci_vlan_pool: &aci_pool_present_dynamic - <<: *aci_pool_absent_dynamic - state: present - descr: Ansible Test - register: create_dynamic - -- name: Assertion test - present - assert: - that: - - create_dynamic.changed == true - - create_dynamic.previous == [] - - 'create_dynamic.sent == {"fvnsVlanInstP": {"attributes": {"allocMode": "dynamic", "descr": "Ansible Test", "name": "anstest"}}}' - -- name: Create static vlan pool again - idempotency works - aci_vlan_pool: - <<: *aci_pool_present_static - register: idempotent_static - -- name: Assertion test - present - assert: - that: - - idempotent_static.changed == false - - 'idempotent_static.previous == [{"fvnsVlanInstP": {"attributes": {"allocMode": "static", "descr": "Ansible Test", "dn": "uni/infra/vlanns-[anstest]-static", "name": "anstest", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]' - - idempotent_static.sent == {} - -- name: Create dynamic vlan pool again - idempotency works - aci_vlan_pool: - <<: *aci_pool_present_dynamic - register: idempotent_dynamic - -- name: Assertion test - present - assert: - that: - - idempotent_dynamic.changed == false - - 'idempotent_dynamic.previous == [{"fvnsVlanInstP": {"attributes": {"allocMode": "dynamic", "descr": "Ansible Test", "dn": "uni/infra/vlanns-[anstest]-dynamic", "name": "anstest", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]' - - idempotent_dynamic.sent == {} - -- name: Update static vlan pool - update works - aci_vlan_pool: - <<: *aci_pool_present_static - descr: Ansible Test Change - register: update_static - -- name: Assertion test - present - assert: - that: - - update_static.changed == true - - 'update_static.sent == {"fvnsVlanInstP": {"attributes": {"descr": "Ansible Test Change"}}}' - -- name: Update dynamic vlan pool - update works - aci_vlan_pool: - <<: *aci_pool_present_dynamic - descr: Ansible Test Change - register: update_dynamic - -- name: Assertion test - present - assert: - that: - - update_dynamic.changed == true - - 'update_dynamic.sent == {"fvnsVlanInstP": {"attributes": {"descr": "Ansible Test Change"}}}' - -- name: Missing param - failure message works - aci_vlan_pool: - <<: *aci_pool_present_dynamic - allocation_mode: "{{ fake_var | default(omit) }}" - ignore_errors: yes - register: vlan_alloc_fail - -- name: Assertion test - present - assert: - that: - - vlan_alloc_fail.failed == true - - vlan_alloc_fail.msg == "ACI requires the 'allocation_mode' when 'pool' is provided" - -- name: Missing param - failure message works - aci_vlan_pool: - <<: *aci_pool_present_dynamic - pool: "{{ fake_var | default(omit) }}" - ignore_errors: yes - register: vlan_pool_fail - -- name: Assertion test - present - assert: - that: - - vlan_pool_fail.failed == true - - 'vlan_pool_fail.msg == "state is present but all of the following are missing: pool"' - -- name: Get all vlan pools - get class works - aci_vlan_pool: - <<: *aci_pool_absent_static - state: query - pool: "{{ fake_var | default(omit) }}" - allocation_mode: "{{ fake_var | default(omit) }}" - register: get_all_pools - -- name: Assertion test - query - assert: - that: - - get_all_pools.changed == false - - get_all_pools.method == "GET" - - get_all_pools.previous | length > 1 - -- name: Get created static vlan pool - get mo works - aci_vlan_pool: - <<: *aci_pool_absent_static - state: query - register: get_static_pool - -- name: Assertion test - query - assert: - that: - - get_static_pool.changed == false - - get_static_pool.method == "GET" - - get_static_pool.previous | length == 1 - - get_static_pool.previous.0.fvnsVlanInstP.attributes.allocMode == "static" - - get_static_pool.previous.0.fvnsVlanInstP.attributes.name == "anstest" - -- name: Get created dynamic vlan pool - get mo works - aci_vlan_pool: - <<: *aci_pool_absent_dynamic - state: query - register: get_dynamic_pool - -- name: Assertion test - query - assert: - that: - - get_dynamic_pool.changed == false - - get_dynamic_pool.method == "GET" - - get_dynamic_pool.previous | length == 1 - - get_dynamic_pool.previous.0.fvnsVlanInstP.attributes.allocMode == "dynamic" - - get_dynamic_pool.previous.0.fvnsVlanInstP.attributes.name == "anstest" - -- name: Delete static vlan pool - deletion works - aci_vlan_pool: - <<: *aci_pool_absent_static - register: delete_static - -- name: Assertion test - absent - assert: - that: - - delete_static.changed == true - - delete_static.method == "DELETE" - - delete_static.previous.0.fvnsVlanInstP.attributes.allocMode == "static" - - delete_static.previous.0.fvnsVlanInstP.attributes.name == "anstest" - -- name: Delete dynamic vlan pool - check mode works - aci_vlan_pool: - <<: *aci_pool_absent_dynamic - check_mode: yes - register: delete_check_mode - -- name: Assertion test - absent - assert: - that: - - delete_check_mode.changed == true - -- name: Delete dynamic vlan pool - deletion works - aci_vlan_pool: - <<: *aci_pool_absent_dynamic - register: delete_dynamic - -- name: Assertion test - absent - assert: - that: - - delete_dynamic.changed == true - - delete_dynamic.method == "DELETE" - - delete_dynamic.previous.0.fvnsVlanInstP.attributes.allocMode == "dynamic" - - delete_dynamic.previous.0.fvnsVlanInstP.attributes.name == "anstest" - -- name: Delete static vlan pool again - idempotency works - aci_vlan_pool: - <<: *aci_pool_absent_static - register: idempotent_delete_static - -- name: Assertion test - absent - assert: - that: - - idempotent_delete_static.changed == false - - idempotent_delete_static.previous == [] - -- name: Delete dynamic vlan pool again - idempotency works - aci_vlan_pool: - <<: *aci_pool_absent_dynamic - register: idempotent_delete_dynamic - -- name: Assertion test - absent - assert: - that: - - idempotent_delete_dynamic.changed == false - - idempotent_delete_dynamic.previous == [] +- include_tasks: dynamic.yml + when: dynamic is not defined or dynamic diff --git a/test/integration/targets/aci_vlan_pool/tasks/static.yml b/test/integration/targets/aci_vlan_pool/tasks/static.yml new file mode 100644 index 00000000000..a8e5785f06e --- /dev/null +++ b/test/integration/targets/aci_vlan_pool/tasks/static.yml @@ -0,0 +1,285 @@ +# Test code for the ACI modules +# Copyright: (c) 2018, Dag Wieers (dagwieers) + +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +# CLEAN ENVIRONMENT +- name: Remove static vlan pool + aci_vlan_pool: &static_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: info + pool: anstest + pool_allocation_mode: static + state: absent + + +# ADD VLAN POOL +- name: Add static vlan pool (check_mode) + aci_vlan_pool: &static_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: info + pool: anstest + pool_allocation_mode: static + state: present + check_mode: yes + register: cm_add_static_vlan_pool + +- name: Add static vlan pool (normal mode) + aci_vlan_pool: *static_vlan_pool_present + register: nm_add_static_vlan_pool + +- name: Verify add_static_vlan_pool + assert: + that: + - cm_add_static_vlan_pool.changed == nm_add_static_vlan_pool.changed == true + - 'cm_add_static_vlan_pool.sent == nm_add_static_vlan_pool.sent == {"fvnsVlanInstP": {"attributes": {"allocMode": "static", "name": "anstest"}}}' + - 'cm_add_static_vlan_pool.proposed == nm_add_static_vlan_pool.proposed == {"fvnsVlanInstP": {"attributes": {"allocMode": "static", "name": "anstest"}}}' + - cm_add_static_vlan_pool.previous == nm_add_static_vlan_pool.previous == [] + # NOTE: We cannot fix this easily + - cm_add_static_vlan_pool.current == [] + - nm_add_static_vlan_pool.current.0.fvnsVlanInstP.attributes.allocMode == 'static' + - nm_add_static_vlan_pool.current.0.fvnsVlanInstP.attributes.descr == '' + - nm_add_static_vlan_pool.current.0.fvnsVlanInstP.attributes.dn == 'uni/infra/vlanns-[anstest]-static' + - nm_add_static_vlan_pool.current.0.fvnsVlanInstP.attributes.name == 'anstest' + +- name: Add static_vlan_pool again (check_mode) + aci_vlan_pool: *static_vlan_pool_present + check_mode: yes + register: cm_add_static_vlan_pool_again + +- name: Add static vlan pool again (normal mode) + aci_vlan_pool: *static_vlan_pool_present + register: nm_add_static_vlan_pool_again + +- name: Verify add_static_vlan_pool_again + assert: + that: + - cm_add_static_vlan_pool_again.changed == nm_add_static_vlan_pool_again.changed == false + - cm_add_static_vlan_pool_again.current == nm_add_static_vlan_pool_again.current == nm_add_static_vlan_pool.current + + +# CHANGE VLAN POOL +- name: Change description of static vlan pool (check_mode) + aci_vlan_pool: + <<: *static_vlan_pool_present + description: Ansible test static vlan pool + check_mode: yes + register: cm_add_static_vlan_pool_descr + +- name: Change description of static vlan pool (normal mode) + aci_vlan_pool: + <<: *static_vlan_pool_present + description: Ansible test static vlan pool + register: nm_add_static_vlan_pool_descr + +- name: Verify add_static_vlan_pool_descr + assert: + that: + - cm_add_static_vlan_pool_descr.changed == nm_add_static_vlan_pool_descr.changed == true + - 'cm_add_static_vlan_pool_descr.sent == nm_add_static_vlan_pool_descr.sent == {"fvnsVlanInstP": {"attributes": {"descr": "Ansible test static vlan pool"}}}' + - 'cm_add_static_vlan_pool_descr.proposed == nm_add_static_vlan_pool_descr.proposed == {"fvnsVlanInstP": {"attributes": {"allocMode": "static", "descr": "Ansible test static vlan pool", "name": "anstest"}}}' + - cm_add_static_vlan_pool_descr.previous == nm_add_static_vlan_pool_descr.previous == cm_add_static_vlan_pool_descr.current == nm_add_static_vlan_pool.current + - nm_add_static_vlan_pool_descr.current.0.fvnsVlanInstP.attributes.allocMode == 'static' + - nm_add_static_vlan_pool_descr.current.0.fvnsVlanInstP.attributes.descr == 'Ansible test static vlan pool' + - nm_add_static_vlan_pool_descr.current.0.fvnsVlanInstP.attributes.dn == 'uni/infra/vlanns-[anstest]-static' + - nm_add_static_vlan_pool_descr.current.0.fvnsVlanInstP.attributes.name == 'anstest' + +- name: Change description of static vlan pool again (check_mode) + aci_vlan_pool: + <<: *static_vlan_pool_present + description: Ansible test static vlan pool + check_mode: yes + register: cm_add_static_vlan_pool_descr_again + +- name: Change description of static vlan pool again (normal mode) + aci_vlan_pool: + <<: *static_vlan_pool_present + description: Ansible test static vlan pool + register: nm_add_static_vlan_pool_descr_again + +- name: Verify add_static_vlan_pool_descr_again + assert: + that: + - cm_add_static_vlan_pool_descr_again.changed == nm_add_static_vlan_pool_descr_again.changed == false + - cm_add_static_vlan_pool_descr_again.current == nm_add_static_vlan_pool_descr_again.current == nm_add_static_vlan_pool_descr.current + + +# ADD VLAN POOL AGAIN +- name: Add static vlan pool again with no description (check_mode) + aci_vlan_pool: *static_vlan_pool_present + check_mode: yes + register: cm_add_static_vlan_pool_again_no_descr + +- name: Add static vlan pool again with no description (normal mode) + aci_vlan_pool: *static_vlan_pool_present + register: nm_add_static_vlan_pool_again_no_descr + +- name: Verify add_static_vlan_pool_again_no_descr + assert: + that: + - cm_add_static_vlan_pool_again_no_descr.changed == nm_add_static_vlan_pool_again_no_descr.changed == false + - cm_add_static_vlan_pool_again_no_descr.current == nm_add_static_vlan_pool_again_no_descr.current == nm_add_static_vlan_pool_descr.current + + +# QUERY ALL VLAN POOLS +- name: Query all static vlan pools (check_mode) + aci_vlan_pool: &static_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) }}' + state: query + check_mode: yes + register: cm_query_all_static_vlan_pools + +- name: Query all static vlan pools (normal mode) + aci_vlan_pool: *static_vlan_pool_query + register: nm_query_all_static_vlan_pools + +- name: Verify query_all_static_vlan_pools + assert: + that: + - cm_query_all_static_vlan_pools.changed == nm_query_all_static_vlan_pools.changed == false + - cm_query_all_static_vlan_pools == nm_query_all_static_vlan_pools + - cm_query_all_static_vlan_pools.current|length >= 1 + + +# QUERY A VLAN POOL +- name: Query our static vlan pool + aci_vlan_pool: + <<: *static_vlan_pool_query + pool: anstest + pool_allocation_mode: static + check_mode: yes + register: cm_query_static_vlan_pool + +- name: Query ourstatic vlan pool + aci_vlan_pool: + <<: *static_vlan_pool_query + pool: anstest + pool_allocation_mode: static + register: nm_query_static_vlan_pool + +- name: Verify query_static_vlan_pool + assert: + that: + - cm_query_static_vlan_pool.changed == nm_query_static_vlan_pool.changed == false + - cm_query_static_vlan_pool == nm_query_static_vlan_pool + - nm_query_static_vlan_pool.current.0.fvnsVlanInstP.attributes.allocMode == 'static' + - nm_query_static_vlan_pool.current.0.fvnsVlanInstP.attributes.descr == 'Ansible test static vlan pool' + - nm_query_static_vlan_pool.current.0.fvnsVlanInstP.attributes.dn == 'uni/infra/vlanns-[anstest]-static' + - nm_query_static_vlan_pool.current.0.fvnsVlanInstP.attributes.name == 'anstest' + + +# REMOVE VLAN POOL +- name: Remove static vlan pool (check_mode) + aci_vlan_pool: *static_vlan_pool_absent + check_mode: yes + register: cm_remove_static_vlan_pool + +- name: Remove static vlan pool (normal mode) + aci_vlan_pool: *static_vlan_pool_absent + register: nm_remove_static_vlan_pool + +- name: Verify remove_static_vlan_pool + assert: + that: + - cm_remove_static_vlan_pool.changed == nm_remove_static_vlan_pool.changed == true + - 'cm_remove_static_vlan_pool.current == cm_remove_static_vlan_pool.previous == nm_remove_static_vlan_pool.previous == [{"fvnsVlanInstP": {"attributes": {"allocMode": "static", "descr": "Ansible test static vlan pool", "dn": "uni/infra/vlanns-[anstest]-static", "name": "anstest", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]' + - nm_remove_static_vlan_pool.current == [] + +- name: Remove static vlan pool again (check_mode) + aci_vlan_pool: *static_vlan_pool_absent + check_mode: yes + register: cm_remove_static_vlan_pool_again + +- name: Remove static vlan pool again (normal mode) + aci_vlan_pool: *static_vlan_pool_absent + register: nm_remove_static_vlan_pool_again + +- name: Verify remove_static_vlan_pool_again + assert: + that: + - cm_remove_static_vlan_pool_again.changed == nm_remove_static_vlan_pool_again.changed == false + - cm_remove_static_vlan_pool_again.proposed == nm_remove_static_vlan_pool_again.proposed == {} + - cm_remove_static_vlan_pool_again.sent == nm_remove_static_vlan_pool_again.sent == {} + - cm_remove_static_vlan_pool_again.previous == nm_remove_static_vlan_pool_again.previous == [] + - cm_remove_static_vlan_pool_again.current == nm_remove_static_vlan_pool_again.current == [] + + +# QUERY NON-EXISTING VLAN POOL +- name: Query non-existing static vlan pool (check_mode) + aci_vlan_pool: + <<: *static_vlan_pool_query + pool: anstest + pool_allocation_mode: static + check_mode: yes + register: cm_query_non_static_vlan_pool + +- name: Query non-existing static vlan pool (normal mode) + aci_vlan_pool: + <<: *static_vlan_pool_query + pool: anstest + pool_allocation_mode: static + register: nm_query_non_static_vlan_pool + +# TODO: Implement more tests +- name: Verify query_non_static_vlan_pool + assert: + that: + - cm_query_non_static_vlan_pool.changed == nm_query_non_static_vlan_pool.changed == false + - cm_remove_static_vlan_pool_again.previous == nm_remove_static_vlan_pool_again.previous == [] + - cm_remove_static_vlan_pool_again.current == nm_remove_static_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: info + state: present + ignore_errors: yes + register: error_on_missing_required_param + +- name: Assertion test - present + assert: + that: + - error_on_missing_required_param.failed == true + - '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: 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.failed == true + - error_on_missing_together_param.msg == "ACI requires the 'pool_allocation_mode' when 'pool' is provided"