1# Test code for the MSO modules
2# Copyright: (c) 2018, Dag Wieers (@dagwieers) <dag@wieers.com>
3
4# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
6- name: Test that we have an ACI MultiSite host, username and password
7  fail:
8    msg: 'Please define the following variables: mso_hostname, mso_username and mso_password.'
9  when: mso_hostname is not defined or mso_username is not defined or mso_password is not defined
10
11
12# CLEAN ENVIRONMENT
13- name: Remove site 2
14  mso_site: &site_absent
15    host: '{{ mso_hostname }}'
16    username: '{{ mso_username }}'
17    password: '{{ mso_password }}'
18    validate_certs: '{{ mso_validate_certs | default(false) }}'
19    use_ssl: '{{ mso_use_ssl | default(true) }}'
20    use_proxy: '{{ mso_use_proxy | default(true) }}'
21    output_level: '{{ mso_output_level | default("info") }}'
22    site: '{{ mso_site | default("ansible_test") }}_2'
23    state: absent
24
25- name: Remove site
26  mso_site:
27    <<: *site_absent
28    site: '{{ mso_site | default("ansible_test") }}'
29  register: cm_remove_site
30
31
32# ADD SITE
33- name: Add site (check_mode)
34  mso_site: &site_present
35    host: '{{ mso_hostname }}'
36    username: '{{ mso_username }}'
37    password: '{{ mso_password }}'
38    validate_certs: '{{ mso_validate_certs | default(false) }}'
39    use_ssl: '{{ mso_use_ssl | default(true) }}'
40    use_proxy: '{{ mso_use_proxy | default(true) }}'
41    output_level: '{{ mso_output_level | default("info") }}'
42    site: '{{ mso_site | default("ansible_test") }}'
43    apic_username: admin
44    apic_password: '{{ apic_password }}'
45    apic_site_id: 101
46    urls:
47    - https://{{ apic_hostname }}
48    location:
49      latitude: 50.887318
50      longitude: 4.447084
51    labels:
52    - Diegem
53    - EMEA
54    - POD51
55    state: present
56  check_mode: yes
57  register: cm_add_site
58
59- name: Verify cm_add_site
60  assert:
61    that:
62    - cm_add_site is changed
63    - cm_add_site.previous == {}
64    - cm_add_site.current.id is not defined
65    - cm_add_site.current.name == mso_site|default("ansible_test")
66
67- name: Add site (normal mode)
68  mso_site: *site_present
69  register: nm_add_site
70
71- name: nm_Verify add_site
72  assert:
73    that:
74    - nm_add_site is changed
75    - nm_add_site.previous == {}
76    - nm_add_site.current.id is defined
77    - nm_add_site.current.name == mso_site|default("ansible_test")
78
79- name: Add site again (check_mode)
80  mso_site: *site_present
81  check_mode: yes
82  register: cm_add_site_again
83
84- name: Verify cm_add_site_again
85  assert:
86    that:
87    - cm_add_site_again is not changed
88    - cm_add_site_again.previous.name == mso_site|default("ansible_test")
89    - cm_add_site_again.current.id == nm_add_site.current.id
90    - cm_add_site_again.current.name == mso_site|default("ansible_test")
91
92- name: Add site again (normal mode)
93  mso_site: *site_present
94  register: nm_add_site_again
95
96- name: Verify nm_add_site_again
97  assert:
98    that:
99    - nm_add_site_again is not changed
100    - nm_add_site_again.previous.name == mso_site|default("ansible_test")
101    - nm_add_site_again.current.id == nm_add_site.current.id
102    - nm_add_site_again.current.name == mso_site|default("ansible_test")
103
104
105# CHANGE SITE
106- name: Change site (check_mode)
107  mso_site:
108    <<: *site_present
109    site_id: '{{ nm_add_site.current.id }}'
110    site: '{{ mso_site | default("ansible_test") }}_2'
111  check_mode: yes
112  register: cm_change_site
113
114- name: Verify cm_change_site
115  assert:
116    that:
117    - cm_change_site is changed
118    - cm_change_site.current.id == nm_add_site.current.id
119    - cm_change_site.current.name == '{{ mso_site | default("ansible_test") }}_2'
120
121- name: Change site (normal mode)
122  mso_site:
123    <<: *site_present
124    site_id: '{{ nm_add_site.current.id }}'
125    site: '{{ mso_site | default("ansible_test") }}_2'
126    output_level: debug
127  register: nm_change_site
128
129- name: Verify nm_change_site
130  assert:
131    that:
132    - nm_change_site is changed
133    - nm_change_site.current.id == nm_add_site.current.id
134    - nm_change_site.current.name == '{{ mso_site | default("ansible_test") }}_2'
135
136- name: Change site again (check_mode)
137  mso_site:
138    <<: *site_present
139    site_id: '{{ nm_add_site.current.id }}'
140    site: '{{ mso_site | default("ansible_test") }}_2'
141  check_mode: yes
142  register: cm_change_site_again
143
144- name: Verify cm_change_site_again
145  assert:
146    that:
147    - cm_change_site_again is not changed
148    - cm_change_site_again.current.id == nm_add_site.current.id
149    - cm_change_site_again.current.name == '{{ mso_site | default("ansible_test") }}_2'
150
151- name: Change site again (normal mode)
152  mso_site:
153    <<: *site_present
154    site_id: '{{ nm_add_site.current.id }}'
155    site: '{{ mso_site | default("ansible_test") }}_2'
156  register: nm_change_site_again
157
158- name: Verify nm_change_site_again
159  assert:
160    that:
161    - nm_change_site_again is not changed
162    - nm_change_site_again.current.id == nm_add_site.current.id
163    - nm_change_site_again.current.name == '{{ mso_site | default("ansible_test") }}_2'
164
165
166# QUERY ALL SITES
167- name: Query all sites (check_mode)
168  mso_site: &site_query
169    host: '{{ mso_hostname }}'
170    username: '{{ mso_username }}'
171    password: '{{ mso_password }}'
172    validate_certs: '{{ mso_validate_certs | default(false) }}'
173    use_ssl: '{{ mso_use_ssl | default(true) }}'
174    use_proxy: '{{ mso_use_proxy | default(true) }}'
175    output_level: '{{ mso_output_level | default("info") }}'
176    state: query
177  check_mode: yes
178  register: cm_query_all_sites
179
180- name: Query all sites (normal mode)
181  mso_site: *site_query
182  register: nm_query_all_sites
183
184- name: Verify query_all_sites
185  assert:
186    that:
187    - cm_query_all_sites is not changed
188    - nm_query_all_sites is not changed
189    # NOTE: Order of sites is not stable between calls
190    #- cm_query_all_sites == nm_query_all_sites
191
192
193# QUERY A SITE
194- name: Query our site
195  mso_site:
196    <<: *site_query
197    site: '{{ mso_site | default("ansible_test") }}_2'
198  check_mode: yes
199  register: cm_query_site
200
201- name: Query our site
202  mso_site:
203    <<: *site_query
204    site: '{{ mso_site | default("ansible_test") }}_2'
205  register: nm_query_site
206
207- name: Verify query_site
208  assert:
209    that:
210    - cm_query_site is not changed
211    - cm_query_site.current.id == nm_add_site.current.id
212    - cm_query_site.current.name == '{{ mso_site | default("ansible_test") }}_2'
213    - nm_query_site is not changed
214    - nm_query_site.current.id == nm_add_site.current.id
215    - nm_query_site.current.name == '{{ mso_site | default("ansible_test") }}_2'
216    - cm_query_site == nm_query_site
217
218
219# REMOVE SITE
220- name: Remove site (check_mode)
221  mso_site: *site_absent
222  check_mode: yes
223  register: cm_remove_site
224
225- name: Verify cm_remove_site
226  assert:
227    that:
228    - cm_remove_site is changed
229    - cm_remove_site.current == {}
230
231- name: Remove site (normal mode)
232  mso_site: *site_absent
233  register: nm_remove_site
234
235- name: Verify nm_remove_site
236  assert:
237    that:
238    - nm_remove_site is changed
239    - nm_remove_site.current == {}
240
241- name: Remove site again (check_mode)
242  mso_site: *site_absent
243  check_mode: yes
244  register: cm_remove_site_again
245
246- name: Verify cm_remove_site_again
247  assert:
248    that:
249    - cm_remove_site_again is not changed
250    - cm_remove_site_again.current == {}
251
252- name: Remove site again (normal mode)
253  mso_site: *site_absent
254  register: nm_remove_site_again
255
256- name: Verify nm_remove_site_again
257  assert:
258    that:
259    - nm_remove_site_again is not changed
260    - nm_remove_site_again.current == {}
261
262
263# QUERY NON-EXISTING SITE
264- name: Query non-existing site (check_mode)
265  mso_site:
266    <<: *site_query
267    site: '{{ mso_site | default("ansible_test") }}'
268  check_mode: yes
269  register: cm_query_non_site
270
271- name: Query non-existing site (normal mode)
272  mso_site:
273    <<: *site_query
274    site: '{{ mso_site | default("ansible_test") }}'
275  register: nm_query_non_site
276
277# TODO: Implement more tests
278- name: Verify query_non_site
279  assert:
280    that:
281    - cm_query_non_site is not changed
282    - nm_query_non_site is not changed
283    - cm_query_non_site == nm_query_non_site
284