|
63 | 63 | neighbor_ip: 193.168.1.2 # IP address of the interface in dst fabric |
64 | 64 | src_asn: "{{ ansible_ipv6_asn }}" # BGP ASN in source fabric |
65 | 65 | dst_asn: "{{ ansible_unnum_asn }}" # BGP ASN in destination fabric |
| 66 | + mtu: 9216 # |
| 67 | + auto_deploy: false # optional, default is false |
| 68 | + # Flag that controls auto generation of neighbor VRF Lite configuration |
| 69 | + peer1_description: "Description of source" # optional, default is "" |
| 70 | + peer2_description: "Description of dest" # optional, default is "" |
| 71 | + peer1_cmds: # Freeform config for source interface |
| 72 | + - no shutdown # optional, default is "" |
| 73 | + peer2_cmds: # Freeform config for destination interface |
| 74 | + - no shutdown # optional, default is "" |
66 | 75 | register: merge_basic_result |
67 | 76 |
|
68 | 77 | - name: ASSERT - Basic merge diff counters |
|
75 | 84 | - '(merge_basic_result.diff[0].query | length) == 0' |
76 | 85 | - '(merge_basic_result["diff"][0]["deploy"][0][ "{{ ansible_unnum_fabric }}" ] | length) == 1' |
77 | 86 | - '(merge_basic_result["diff"][0]["deploy"][0][ "{{ ansible_ipv6_fabric }}" ] | length) == 1' |
78 | | - failed_when: merge_basic_result.diff is not defined |
79 | 87 |
|
80 | 88 | - name: ASSERT - Basic merge return codes |
81 | 89 | ansible.builtin.assert: |
82 | 90 | that: |
83 | 91 | - 'item["RETURN_CODE"] == 200' |
84 | 92 | loop: '{{ merge_basic_result.response }}' |
85 | 93 |
|
86 | | -############################################## |
87 | | -## BASIC MERGE - IDEMPOTENCE ## |
88 | | -############################################## |
89 | | - |
90 | | - - name: Merge - Idempotence (basic link) |
91 | | - cisco.dcnm.dcnm_links: *links_merge_basic |
92 | | - register: merge_basic_idem |
93 | | - |
94 | | - - name: ASSERT - Basic merge idempotence diff counters |
95 | | - ansible.builtin.assert: |
96 | | - that: |
97 | | - - '(merge_basic_idem.diff[0].merged | length) == 0' |
98 | | - - '(merge_basic_idem.diff[0].modified | length) == 0' |
99 | | - - '(merge_basic_idem.diff[0].deleted | length) == 0' |
100 | | - - '(merge_basic_idem.diff[0].query | length) == 0' |
101 | | - failed_when: merge_basic_idem.diff is not defined |
102 | | - |
103 | | - - name: ASSERT - Basic merge idempotence return codes |
104 | | - ansible.builtin.assert: |
105 | | - that: |
106 | | - - 'item["RETURN_CODE"] == 200' |
107 | | - loop: '{{ merge_basic_idem.response }}' |
108 | | - |
109 | 94 | ############################################## |
110 | 95 | ## BASIC DELETE ## |
111 | 96 | ############################################## |
|
117 | 102 | - name: ASSERT - Basic delete diff counters |
118 | 103 | ansible.builtin.assert: |
119 | 104 | that: |
| 105 | + - '(delete_basic_result.changed == true' |
120 | 106 | - '(delete_basic_result.diff[0].merged | length) == 0' |
121 | 107 | - '(delete_basic_result.diff[0].modified | length) == 0' |
122 | 108 | - '(delete_basic_result.diff[0].deleted | length) == 1' |
123 | 109 | - '(delete_basic_result.diff[0].query | length) == 0' |
124 | | - failed_when: delete_basic_result.diff is not defined |
| 110 | + - '(delete_basic_result["diff"][0]["deploy"][0][ "{{ ansible_unnum_fabric }}" ] | length) == 1' |
| 111 | + - '(delete_basic_result["diff"][0]["deploy"][0][ "{{ ansible_ipv6_fabric }}" ] | length) == 1' |
125 | 112 |
|
126 | 113 | - name: ASSERT - Basic delete return codes |
127 | 114 | ansible.builtin.assert: |
|
140 | 127 | - name: ASSERT - Basic delete idempotence diff counters |
141 | 128 | ansible.builtin.assert: |
142 | 129 | that: |
| 130 | + - '(delete_basic_idem.changed == false' |
143 | 131 | - '(delete_basic_idem.diff[0].merged | length) == 0' |
144 | 132 | - '(delete_basic_idem.diff[0].modified | length) == 0' |
145 | 133 | - '(delete_basic_idem.diff[0].deleted | length) == 0' |
146 | 134 | - '(delete_basic_idem.diff[0].query | length) == 0' |
147 | | - failed_when: delete_basic_idem.diff is not defined |
148 | 135 |
|
149 | 136 | - name: ASSERT - Basic delete idempotence return codes |
150 | 137 | ansible.builtin.assert: |
|
153 | 140 | loop: '{{ delete_basic_idem.response }}' |
154 | 141 |
|
155 | 142 | ############################################## |
156 | | -## MULTISITE MERGE (CREATION MINIMAL) ## |
| 143 | +## MERGE ## |
157 | 144 | ############################################## |
158 | 145 |
|
159 | 146 | - name: Merge - Create multisite underlay + overlay links (minimal) |
|
172 | 159 | neighbor_ip: 193.168.2.2 |
173 | 160 | src_asn: "{{ ansible_ipv6_asn }}" |
174 | 161 | dst_asn: "{{ ansible_unnum_asn }}" |
| 162 | + mtu: 9216 # |
| 163 | + deploy_dci_tracking: false # optional, default is false |
| 164 | + max_paths: 1 # optional, default is 1 |
| 165 | + route_tag: 12345 # optional, optional is "" |
| 166 | + ebgp_password_enable: true # optional, default is true |
| 167 | + ebgp_password: 9BFE3270E19CA112 # optional, required only if ebgp_password_enable flag is true and inherit_from_msd is false |
| 168 | + inherit_from_msd: true # optional, required only if ebgp_password_enable flag is true, default is false |
| 169 | + ebgp_auth_key_type: 3 # optional, required only if ebpg_password_enable is true and inherit_from_msd |
| 170 | + # is false. Default is 3 |
| 171 | + # choose from [3 - 3DES, 7 - Cisco ] |
| 172 | + peer1_description: "Description of source" # optional, default is "" |
| 173 | + peer2_description: "Description of dest" # optional, default is "" |
| 174 | + peer1_cmds: # Freeform config for source interface |
| 175 | + - no shutdown # optional, default is "" |
| 176 | + peer2_cmds: # Freeform config for destination interface |
| 177 | + - no shutdown # optional, default is "" |
| 178 | + |
175 | 179 | - dst_fabric: "{{ ansible_unnum_fabric }}" |
176 | 180 | src_interface: "{{ intf_1_5 }}" |
177 | 181 | dst_interface: "{{ intf_1_5 }}" |
|
183 | 187 | neighbor_ip: 193.168.3.2 |
184 | 188 | src_asn: "{{ ansible_ipv6_asn }}" |
185 | 189 | dst_asn: "{{ ansible_unnum_asn }}" |
| 190 | + trm_enabled: false # optional, default is false |
| 191 | + bgp_multihop: 5 # optional, default is 5 |
| 192 | + ebgp_password_enable: true # optional, default is true |
| 193 | + ebgp_password: 9BFE3270E19CA112 # optional, required only if ebgp_password_enable flag is true and inherit_from_msd is false |
| 194 | + inherit_from_msd: false # optional, required only if ebgp_password_enable flag is true, default is false |
| 195 | + ebpg_auth_key_type: 3 # optional, required only if ebpg_password_enable is true and inherit_from_msd |
| 196 | + # is false. Default is 3 |
| 197 | + # choose from [3 - 3DES, 7 - Cisco ] |
186 | 198 | register: merge_ms_result |
187 | 199 | when: (ansible_ipv6_fabric in ms_fabric_list or ansible_unnum_fabric in ms_fabric_list) |
188 | 200 |
|
189 | 201 | - name: ASSERT - Multisite merge diff counters (minimal) |
190 | 202 | ansible.builtin.assert: |
191 | 203 | that: |
| 204 | + - '(merge_ms_result.changed == true' |
192 | 205 | - '(merge_ms_result.diff[0].merged | length) == 2' |
193 | 206 | - '(merge_ms_result.diff[0].modified | length) == 0' |
194 | 207 | - '(merge_ms_result.diff[0].deleted | length) == 0' |
195 | 208 | - '(merge_ms_result.diff[0].query | length) == 0' |
196 | | - failed_when: merge_ms_result.diff is not defined |
| 209 | + - '(merge_ms_result["diff"][0]["deploy"][0][ "{{ ansible_unnum_fabric }}" ] | length) == 1' |
| 210 | + - '(merge_ms_result["diff"][0]["deploy"][0][ "{{ ansible_ipv6_fabric }}" ] | length) == 1' |
197 | 211 | when: (ansible_ipv6_fabric in ms_fabric_list or ansible_unnum_fabric in ms_fabric_list) |
198 | 212 |
|
199 | 213 | - name: ASSERT - Multisite merge return codes (minimal) |
|
204 | 218 | when: (ansible_ipv6_fabric in ms_fabric_list or ansible_unnum_fabric in ms_fabric_list) |
205 | 219 |
|
206 | 220 | ############################################## |
207 | | -## MULTISITE MERGE (MINIMAL) - IDEMPOTENCE ## |
| 221 | +## DELETE ## |
208 | 222 | ############################################## |
209 | 223 |
|
210 | 224 | - name: Merge - Multisite idempotence (minimal) |
|
215 | 229 | - name: ASSERT - Multisite merge idempotence diff counters (minimal) |
216 | 230 | ansible.builtin.assert: |
217 | 231 | that: |
| 232 | + - '(merge_ms_idem.changed == true' |
218 | 233 | - '(merge_ms_idem.diff[0].merged | length) == 0' |
219 | 234 | - '(merge_ms_idem.diff[0].modified | length) == 0' |
220 | 235 | - '(merge_ms_idem.diff[0].deleted | length) == 0' |
221 | 236 | - '(merge_ms_idem.diff[0].query | length) == 0' |
222 | | - failed_when: merge_ms_idem.diff is not defined |
| 237 | + - '(merge_ms_idem["diff"][0]["deploy"][0][ "{{ ansible_unnum_fabric }}" ] | length) == 1' |
| 238 | + - '(merge_ms_idem["diff"][0]["deploy"][0][ "{{ ansible_ipv6_fabric }}" ] | length) == 1' |
223 | 239 | when: (ansible_ipv6_fabric in ms_fabric_list or ansible_unnum_fabric in ms_fabric_list) |
224 | 240 |
|
225 | 241 | - name: ASSERT - Multisite merge idempotence return codes (minimal) |
|
230 | 246 | when: (ansible_ipv6_fabric in ms_fabric_list or ansible_unnum_fabric in ms_fabric_list) |
231 | 247 |
|
232 | 248 | ############################################## |
233 | | -## MULTISITE DELETE ## |
| 249 | +## IDEMPOTENCE ## |
234 | 250 | ############################################## |
235 | 251 |
|
236 | 252 | - name: Delete - Remove multisite links |
|
241 | 257 | - name: ASSERT - Multisite delete diff counters |
242 | 258 | ansible.builtin.assert: |
243 | 259 | that: |
| 260 | + - '(delete_ms_result.changed == false' |
244 | 261 | - '(delete_ms_result.diff[0].merged | length) == 0' |
245 | 262 | - '(delete_ms_result.diff[0].modified | length) == 0' |
246 | 263 | - '(delete_ms_result.diff[0].deleted | length) == 2' |
247 | 264 | - '(delete_ms_result.diff[0].query | length) == 0' |
248 | | - failed_when: delete_ms_result.diff is not defined |
249 | 265 | when: (ansible_ipv6_fabric in ms_fabric_list or ansible_unnum_fabric in ms_fabric_list) |
250 | 266 |
|
251 | 267 | - name: ASSERT - Multisite delete return codes |
|
254 | 270 | - 'item["RETURN_CODE"] == 200' |
255 | 271 | loop: '{{ delete_ms_result.response }}' |
256 | 272 | when: (ansible_ipv6_fabric in ms_fabric_list or ansible_unnum_fabric in ms_fabric_list) |
257 | | - |
258 | | -############################################## |
259 | | -## MULTISITE DELETE - IDEMPOTENCE ## |
260 | | -############################################## |
261 | | - |
262 | | - - name: Delete - Multisite idempotence |
263 | | - cisco.dcnm.dcnm_links: *links_delete |
264 | | - register: delete_ms_idem |
265 | | - when: (ansible_ipv6_fabric in ms_fabric_list or ansible_unnum_fabric in ms_fabric_list) |
266 | | - |
267 | | - - name: ASSERT - Multisite delete idempotence diff counters |
268 | | - ansible.builtin.assert: |
269 | | - that: |
270 | | - - '(delete_ms_idem.diff[0].merged | length) == 0' |
271 | | - - '(delete_ms_idem.diff[0].modified | length) == 0' |
272 | | - - '(delete_ms_idem.diff[0].deleted | length) == 0' |
273 | | - - '(delete_ms_idem.diff[0].query | length) == 0' |
274 | | - failed_when: delete_ms_idem.diff is not defined |
275 | | - when: (ansible_ipv6_fabric in ms_fabric_list or ansible_unnum_fabric in ms_fabric_list) |
276 | | - |
277 | | - - name: ASSERT - Multisite delete idempotence return codes |
278 | | - ansible.builtin.assert: |
279 | | - that: |
280 | | - - 'item["RETURN_CODE"] == 200' |
281 | | - loop: '{{ delete_ms_idem.response }}' |
282 | | - when: (ansible_ipv6_fabric in ms_fabric_list or ansible_unnum_fabric in ms_fabric_list) |
283 | | - |
284 | | -############################################## |
285 | | -## CLEANUP ## |
286 | | -############################################## |
287 | | - |
288 | | - always: |
289 | | - - name: Cleanup - Final delete to ensure no leftover links |
290 | | - cisco.dcnm.dcnm_links: *links_delete |
291 | | - register: cleanup_result |
292 | | - when: it_context is not defined |
293 | | - |
294 | | - - name: ASSERT - Cleanup return codes |
295 | | - ansible.builtin.assert: |
296 | | - that: |
297 | | - - 'item["RETURN_CODE"] == 200' |
298 | | - loop: '{{ cleanup_result.response }}' |
299 | | - when: it_context is not defined |
0 commit comments