ansible/test/integration/targets/aci_epg_to_domain/tasks/main.yml
Dag Wieers d8ba8c03f3
ACI: Make querying links and nodes possible (#43441)
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)
2018-08-07 23:54:54 +02:00

217 lines
6.7 KiB
YAML

# Test code for the ACI modules
# Copyright: (c) 2017, Dag Wieers (@dagwieers) <dag@wieers.com>
# 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
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 tenant exists for tests to kick off
aci_tenant: &aci_tenant_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: debug
tenant: anstest
state: present
register: tenant_present
- name: ensure ap exists for tests to kick off
aci_ap: &aci_ap_present
<<: *aci_tenant_present
ap: anstest
register: ap_present
- name: ensure epg exists for tests to kick off
aci_epg: &aci_epg_present
<<: *aci_ap_present
epg: anstest
register: epg_present
- name: ensure phys domain exists for tests to kick off
aci_rest: &aci_rest_phys_domain
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") }}'
method: post
path: api/mo/uni/phys-anstest.json
content: {"physDomP": {"attributes": {}}}
register: phys_domain_post
- name: ensure vmm domain exists for tests to kick off
aci_rest: &aci_rest_vmm_domain
<<: *aci_rest_phys_domain
path: api/mo/uni/vmmp-VMware/dom-anstest.json
content: {"vmmDomP": {"attributes": {}}}
register: vmm_domain_post
- name: bind phys domain to epg - check mode works
aci_epg_to_domain: &aci_epg_to_domain_present
<<: *aci_epg_present
domain: anstest
domain_type: phys
check_mode: yes
register: phys_check_mode_present
- name: bind phys domain to epg - creation works
aci_epg_to_domain:
<<: *aci_epg_to_domain_present
register: phys_present
- name: bind phys domain to epg - idempotency works
aci_epg_to_domain:
<<: *aci_epg_to_domain_present
register: phys_idempotent
- name: bind phys domain to epg - update works
aci_epg_to_domain:
<<: *aci_epg_to_domain_present
deploy_immediacy: immediate
register: phys_update
- name: bind vmm domain to epg - creation works
aci_epg_to_domain: &aci_epg_to_domain_vmm_present
<<: *aci_epg_to_domain_present
domain_type: vmm
vm_provider: vmware
resolution_immediacy: pre-provision
register: vmm_present
- name: bind vmm domain to epg - missing params
aci_epg_to_domain:
<<: *aci_epg_to_domain_vmm_present
vm_provider: "{{ fake_var | default(omit) }}"
ignore_errors: yes
register: present_missing_params
- name: bind vmm domain to epg - invalid vlan
aci_epg_to_domain:
<<: *aci_epg_to_domain_present
encap: 4097
ignore_errors: yes
register: invalid_vlan
- name: bind vmm domain to epg - incompatible params
aci_epg_to_domain:
<<: *aci_epg_to_domain_present
vm_provider: vmware
ignore_errors: yes
register: incompatible_params
- name: present assertions
assert:
that:
- phys_check_mode_present is changed
- phys_present is changed
- phys_present.previous == []
- 'phys_present.sent == {"fvRsDomAtt": {"attributes": {}}}'
- '"[uni/phys-anstest].json" in phys_present.url'
- phys_idempotent is not changed
- phys_idempotent.sent == {}
- phys_update is changed
- 'phys_update.sent == {"fvRsDomAtt": {"attributes": {"instrImedcy": "immediate"}}}'
- vmm_present is changed
- 'vmm_present.sent == {"fvRsDomAtt": {"attributes": {"resImedcy": "pre-provision"}}}'
- '"[uni/vmmp-VMware/dom-anstest].json" in vmm_present.url'
- present_missing_params is failed
- 'present_missing_params.msg == "domain_type is vmm but all of the following are missing: vm_provider"'
- invalid_vlan is failed
- invalid_vlan.msg == "Valid VLAN assigments are from 1 to 4096"
- incompatible_params is failed
- incompatible_params.msg == "Domain type 'phys' cannot have a 'vm_provider'"
- name: get domain epg binding
aci_epg_to_domain: &aci_epg_domain_query
<<: *aci_tenant_present
state: query
tenant: "{{ fake_var | default(omit) }}"
register: binding_query
- name: query assertions
assert:
that:
- binding_query is not changed
- binding_query.current | length > 1
- '"class/fvRsDomAtt.json" in binding_query.url'
- name: delete domain epg binding - check mode
aci_epg_to_domain: &aci_epg_to_domain_absent
<<: *aci_epg_to_domain_present
state: absent
check_mode: yes
register: epg_domain_check_mode_absent
- name: delete phys domain epg binding - delete works
aci_epg_to_domain:
<<: *aci_epg_to_domain_absent
register: epg_domain_absent
- name: delete vmm domain epg binding - delete works
aci_epg_to_domain:
<<: *aci_epg_to_domain_vmm_present
state: absent
register: epg_vmm_domain_absent
- name: delete domain epg binding - idempotency works
aci_epg_to_domain:
<<: *aci_epg_to_domain_absent
register: idempotency_absent
- name: delete domain epg binding - missing param
aci_epg_to_domain:
<<: *aci_tenant_present
state: absent
ignore_errors: true
register: absent_missing_param
- name: absent assertions
assert:
that:
- epg_domain_check_mode_absent is changed
- epg_domain_check_mode_absent.previous != []
- epg_domain_absent is changed
- epg_domain_absent.previous == epg_domain_check_mode_absent.previous
- epg_vmm_domain_absent is changed
- idempotency_absent is not changed
- idempotency_absent.previous == []
- absent_missing_param is failed
- 'absent_missing_param.msg == "state is absent but all of the following are missing: ap, domain, domain_type, epg"'
- name: remove vmm domain - cleanup
aci_rest:
<<: *aci_rest_vmm_domain
method: delete
when: vmm_domain_post is changed
- name: remove phys domain - cleanup
aci_rest:
<<: *aci_rest_phys_domain
method: delete
when: phys_domain_post is changed
- name: remove epg - cleanup
aci_epg:
<<: *aci_epg_present
state: absent
when: epg_present is changed
- name: remove ap - cleanup
aci_ap:
<<: *aci_ap_present
state: absent
when: ap_present is changed
- name: remove tenant - cleanup
aci_tenant:
<<: *aci_tenant_present
state: absent
when: tenant_present is changed