|
|
|
# Test code for the ACI modules
|
|
|
|
# Copyright: (c) 2017, Jacob McGill (@jmcgill298)
|
|
|
|
|
|
|
|
# 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: info
|
|
|
|
state: present
|
|
|
|
tenant: anstest
|
|
|
|
register: tenant_present
|
|
|
|
|
|
|
|
- name: ensure filter exists for tests to kick off
|
|
|
|
aci_filter: &aci_filter_present
|
|
|
|
<<: *aci_tenant_present
|
|
|
|
filter: anstest
|
|
|
|
register: filter_present
|
|
|
|
|
|
|
|
- name: ensure filter exists for tests to kick off
|
|
|
|
aci_filter: &aci_filter_present_2
|
|
|
|
<<: *aci_tenant_present
|
|
|
|
filter: anstest2
|
|
|
|
register: filter_present_2
|
|
|
|
|
|
|
|
- name: ensure contract exists for tests to kick off
|
|
|
|
aci_contract: &aci_contract_present
|
|
|
|
<<: *aci_tenant_present
|
|
|
|
contract: anstest
|
|
|
|
register: contract_present
|
|
|
|
|
|
|
|
- name: ensure subject exists for tests to kick off
|
|
|
|
aci_contract_subject: &aci_subject_present
|
|
|
|
<<: *aci_contract_present
|
|
|
|
subject: anstest
|
|
|
|
register: subject_present
|
|
|
|
|
|
|
|
- name: create subject filter binding - check mode works
|
|
|
|
aci_contract_subject_to_filter: &aci_subject_filter_present
|
|
|
|
<<: *aci_subject_present
|
|
|
|
filter: anstest
|
|
|
|
log: log
|
|
|
|
check_mode: yes
|
|
|
|
register: subject_filter_present_check_mode
|
|
|
|
|
|
|
|
- name: create subject filter binding - creation works
|
|
|
|
aci_contract_subject_to_filter:
|
|
|
|
<<: *aci_subject_filter_present
|
|
|
|
register: subject_filter_present
|
|
|
|
|
|
|
|
- name: create subject filter binding - additional testing
|
|
|
|
aci_contract_subject_to_filter: &aci_subject_filter_present_2
|
|
|
|
<<: *aci_subject_filter_present
|
|
|
|
filter: anstest2
|
|
|
|
register: subject_filter_present_2
|
|
|
|
|
|
|
|
- name: create subject filter binding - idempotency works
|
|
|
|
aci_contract_subject_to_filter:
|
|
|
|
<<: *aci_subject_filter_present
|
|
|
|
register: subject_filter_present_idempotent
|
|
|
|
|
|
|
|
- name: update subject filter binding - update works
|
|
|
|
aci_contract_subject_to_filter:
|
|
|
|
<<: *aci_subject_filter_present
|
|
|
|
log: none
|
|
|
|
register: subject_filter_update
|
|
|
|
|
|
|
|
- name: missing param - failure message works
|
|
|
|
aci_contract_subject_to_filter:
|
|
|
|
<<: *aci_tenant_present
|
|
|
|
ignore_errors: yes
|
|
|
|
register: present_missing_param
|
|
|
|
|
|
|
|
- name: present assertions
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- subject_filter_present_check_mode.changed == true
|
|
|
|
- subject_filter_present_check_mode.previous == []
|
|
|
|
- 'subject_filter_present_check_mode.sent == {"vzRsSubjFiltAtt": {"attributes": {"directives": "log", "tnVzFilterName": "anstest"}}}'
|
|
|
|
- subject_filter_present.changed == true
|
|
|
|
- subject_filter_present.previous == []
|
|
|
|
- subject_filter_present.sent == subject_filter_present_check_mode.sent
|
|
|
|
- subject_filter_present_2.changed == true
|
|
|
|
- subject_filter_present_idempotent.changed == false
|
|
|
|
- subject_filter_present_idempotent.previous != []
|
|
|
|
- subject_filter_update.changed == true
|
|
|
|
- 'subject_filter_update.sent.vzRsSubjFiltAtt.attributes == {"directives": ""}'
|
|
|
|
- present_missing_param.failed == true
|
|
|
|
- 'present_missing_param.msg == "state is present but all of the following are missing: contract, filter, subject"'
|
|
|
|
|
|
|
|
- name: query all
|
|
|
|
aci_contract_subject_to_filter:
|
|
|
|
<<: *aci_tenant_present
|
|
|
|
state: query
|
|
|
|
tenant: "{{ fakevar | default(omit) }}"
|
|
|
|
register: query_all
|
|
|
|
|
|
|
|
- name: query binding
|
|
|
|
aci_contract_subject_to_filter:
|
|
|
|
<<: *aci_subject_filter_present
|
|
|
|
state: query
|
|
|
|
register: query_binding
|
|
|
|
|
|
|
|
- name: query assertions
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- query_all.changed == false
|
|
|
|
- query_all.current | length > 1
|
|
|
|
- query_all.current.0.vzRsSubjFiltAtt is defined
|
|
|
|
- query_binding.changed == false
|
|
|
|
- query_binding.current != []
|
|
|
|
|
|
|
|
- name: delete subject filter binding - check mode works
|
|
|
|
aci_contract_subject_to_filter: &aci_subject_filter_absent
|
|
|
|
<<: *aci_subject_filter_present
|
|
|
|
state: absent
|
|
|
|
check_mode: yes
|
|
|
|
register: subject_filter_absent_check_mode
|
|
|
|
|
|
|
|
- name: delete subject filter binding - deletion works
|
|
|
|
aci_contract_subject_to_filter:
|
|
|
|
<<: *aci_subject_filter_absent
|
|
|
|
register: subject_filter_absent
|
|
|
|
|
|
|
|
- name: delete subject filter binding - idempotency works
|
|
|
|
aci_contract_subject_to_filter:
|
|
|
|
<<: *aci_subject_filter_absent
|
|
|
|
register: subject_filter_absent_idempotent
|
|
|
|
|
|
|
|
- name: missing param - failure message works
|
|
|
|
aci_contract_subject_to_filter:
|
|
|
|
<<: *aci_subject_filter_absent
|
|
|
|
filter: "{{ fakevar | default(omit) }}"
|
|
|
|
ignore_errors: yes
|
|
|
|
register: absent_missing_param
|
|
|
|
|
|
|
|
- name: cleanup subject filter binding
|
|
|
|
aci_contract_subject_to_filter:
|
|
|
|
<<: *aci_subject_filter_present_2
|
|
|
|
state: absent
|
|
|
|
|
|
|
|
- name: absent assertions
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- subject_filter_absent_check_mode.changed == true
|
|
|
|
- subject_filter_absent_check_mode.proposed == {}
|
|
|
|
- subject_filter_absent_check_mode.previous != []
|
|
|
|
- subject_filter_absent.changed == true
|
|
|
|
- subject_filter_absent.previous != []
|
|
|
|
- subject_filter_absent_idempotent.changed == false
|
|
|
|
- subject_filter_absent_idempotent.previous == []
|
|
|
|
- absent_missing_param.failed == true
|
|
|
|
- 'absent_missing_param.msg == "state is absent but all of the following are missing: filter"'
|
|
|
|
|
|
|
|
- name: cleanup subject
|
|
|
|
aci_contract_subject:
|
|
|
|
<<: *aci_subject_present
|
|
|
|
state: absent
|
|
|
|
when: subject_present.changed == true
|
|
|
|
|
|
|
|
- name: cleanup contract
|
|
|
|
aci_contract:
|
|
|
|
<<: *aci_contract_present
|
|
|
|
state: absent
|
|
|
|
when: contract_present.changed == true
|
|
|
|
|
|
|
|
- name: cleanup filter
|
|
|
|
aci_filter:
|
|
|
|
<<: *aci_filter_present
|
|
|
|
state: absent
|
|
|
|
when: filter_present.changed == true
|
|
|
|
|
|
|
|
- name: cleanup filter
|
|
|
|
aci_filter:
|
|
|
|
<<: *aci_filter_present_2
|
|
|
|
state: absent
|
|
|
|
when: filter_present_2.changed == true
|
|
|
|
|
|
|
|
- name: cleanup tenant
|
|
|
|
aci_tenant:
|
|
|
|
<<: *aci_tenant_present
|
|
|
|
state: absent
|
|
|
|
when: tenant_present.changed == true
|