Skip to content

Commit b5f2822

Browse files
sajaganalhercot
authored andcommitted
[ignore] Added comments and additional task to validate the query all option in the aci_fabric_node_decommission module files
1 parent eb78939 commit b5f2822

2 files changed

Lines changed: 89 additions & 70 deletions

File tree

plugins/modules/aci_fabric_node_decommission.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ def main():
226226

227227
aci = ACIModule(module)
228228

229+
target_dn = None
230+
if pod_id and node_id:
231+
target_dn = "topology/pod-{0}/node-{1}".format(pod_id, node_id)
232+
229233
aci.construct_url(
230234
root_class=dict(
231235
aci_class="fabricOOServicePol",
@@ -234,7 +238,7 @@ def main():
234238
subclass_1=dict(
235239
aci_class="fabricRsDecommissionNode",
236240
aci_rn="rsdecommissionNode-[topology/pod-{0}/node-{1}]".format(pod_id, node_id),
237-
target_filter={},
241+
target_filter={"tDn": target_dn},
238242
),
239243
)
240244

@@ -244,18 +248,20 @@ def main():
244248
aci.payload(
245249
aci_class="fabricRsDecommissionNode",
246250
class_config=dict(
247-
tDn="topology/pod-{0}/node-{1}".format(pod_id, node_id),
251+
tDn=target_dn,
248252
removeFromController="yes" if remove_from_controller else "no",
249253
),
250254
)
251255
aci.get_diff(aci_class="fabricRsDecommissionNode")
252256
aci.post_config()
253257

254258
elif state == "absent": # Commission
259+
# The aci.delete_config function removes the object directly from APIC, which can interrupt the commission or decommission process before it finishes.
260+
# Because of that the Fabric Node may enter a bad state.
255261
aci.payload(
256262
aci_class="fabricRsDecommissionNode",
257263
class_config=dict(
258-
tDn="topology/pod-{0}/node-{1}".format(pod_id, node_id),
264+
tDn=target_dn,
259265
status="deleted",
260266
),
261267
)

tests/integration/targets/aci_fabric_node_decommission/tasks/main.yml

Lines changed: 80 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,26 @@
3131
serial: "{{ aci_fabric_serial }}"
3232
state: present
3333

34+
- name: Ensure the dummy fabric node is decommissioned
35+
cisco.aci.aci_fabric_node_decommission:
36+
<<: *aci_info
37+
pod_id: 1
38+
node_id: 333
39+
remove_from_controller: true
40+
state: absent
41+
3442
# SETUP
3543
- name: Commission the fabric node
36-
cisco.aci.aci_fabric_node_decommission:
44+
cisco.aci.aci_fabric_node_decommission: &commission_node
3745
<<: *aci_info
3846
pod_id: 1
3947
node_id: 201
4048
state: absent
4149
register: commission_node
4250

43-
- name: Query fabric node to check the node is commissioned - $query_commission_node_1
51+
- name: Query fabric node to check the node is commissioned
4452
cisco.aci.aci_fabric_node_decommission:
45-
<<: *aci_info
46-
pod_id: 1
47-
node_id: 201
53+
<<: *commission_node
4854
state: query
4955
register: query_commission_node_1
5056

@@ -55,41 +61,53 @@
5561
- query_commission_node_1.current == []
5662

5763
# TEST
58-
- name: Decommission the fabric node (check_mode) - $cm_decommission_node
64+
- name: Decommission the fabric node (check_mode)
5965
cisco.aci.aci_fabric_node_decommission:
60-
<<: *aci_info
61-
pod_id: 1
62-
node_id: 201
66+
<<: *commission_node
6367
state: present
6468
output_level: debug
6569
check_mode: true
6670
register: cm_decommission_node
6771

68-
- name: Decommission the fabric node - $decommission_node
72+
- name: Decommission the fabric node
6973
cisco.aci.aci_fabric_node_decommission:
70-
<<: *aci_info
71-
pod_id: 1
72-
node_id: 201
74+
<<: *commission_node
7375
state: present
7476
register: decommission_node
7577

76-
- name: Decommission the fabric node again - $decommission_node_again
78+
- name: Decommission the fabric node again
7779
cisco.aci.aci_fabric_node_decommission:
80+
<<: *commission_node
81+
state: present
82+
register: decommission_node_again
83+
84+
- name: Query the decommissioned fabric node
85+
cisco.aci.aci_fabric_node_decommission:
86+
<<: *commission_node
87+
state: query
88+
register: query_decommissioned_node
89+
90+
- name: Add a dummy fabric node
91+
cisco.aci.aci_fabric_node: &dummy_node_present
7892
<<: *aci_info
93+
name: dummy_fabric_node
94+
node_type: unspecified
7995
pod_id: 1
80-
node_id: 201
96+
node_id: 333
97+
serial: FDO22220XYZ
8198
state: present
82-
register: decommission_node_again
8399

84-
- name: Query the decommissioned fabric node - $query_decommissioned_node
100+
- name: Decommission the dummy fabric node
85101
cisco.aci.aci_fabric_node_decommission:
86102
<<: *aci_info
87103
pod_id: 1
88-
node_id: 201
89-
state: query
90-
register: query_decommissioned_node
104+
node_id: 333
105+
remove_from_controller: true
106+
state: present
107+
output_level: debug
108+
register: decommission_dummy_node
91109

92-
- name: Query all decommissioned fabric nodes - $query_all_decommissioned_nodes
110+
- name: Query all decommissioned fabric nodes
93111
cisco.aci.aci_fabric_node_decommission:
94112
<<: *aci_info
95113
state: query
@@ -116,49 +134,32 @@
116134
- decommission_node_again.previous.0.fabricRsDecommissionNode.attributes.dn == "uni/fabric/outofsvc/rsdecommissionNode-[topology/pod-1/node-201]"
117135
- decommission_node_again.previous.0.fabricRsDecommissionNode.attributes.removeFromController == "no"
118136
- decommission_node_again.previous.0.fabricRsDecommissionNode.attributes.tDn == "topology/pod-1/node-201"
119-
- query_decommissioned_node is not changed
120-
- query_decommissioned_node.current.0.fabricRsDecommissionNode.attributes.dn == "uni/fabric/outofsvc/rsdecommissionNode-[topology/pod-1/node-201]"
121-
- query_decommissioned_node.current.0.fabricRsDecommissionNode.attributes.removeFromController == "no"
122-
- query_decommissioned_node.current.0.fabricRsDecommissionNode.attributes.tDn == "topology/pod-1/node-201"
123-
- query_decommissioned_node.current.0.fabricRsDecommissionNode.attributes.targetId == "201"
124-
- query_all_decommissioned_nodes is not changed
125-
- query_all_decommissioned_nodes.current | length >= 1
126-
- query_all_decommissioned_nodes.current.0.fabricRsDecommissionNode.attributes.dn == "uni/fabric/outofsvc/rsdecommissionNode-[topology/pod-1/node-201]"
127-
- query_all_decommissioned_nodes.current.0.fabricRsDecommissionNode.attributes.removeFromController == "no"
128-
- query_all_decommissioned_nodes.current.0.fabricRsDecommissionNode.attributes.tDn == "topology/pod-1/node-201"
129-
- query_all_decommissioned_nodes.current.0.fabricRsDecommissionNode.attributes.targetId == "201"
137+
- decommission_dummy_node is changed
138+
- decommission_dummy_node.current.0.fabricRsDecommissionNode.attributes.dn == "uni/fabric/outofsvc/rsdecommissionNode-[topology/pod-1/node-333]"
139+
- decommission_dummy_node.current.0.fabricRsDecommissionNode.attributes.removeFromController == "yes"
140+
- decommission_dummy_node.current.0.fabricRsDecommissionNode.attributes.tDn == "topology/pod-1/node-333"
141+
- decommission_dummy_node.previous == []
130142

131-
- name: Commission the fabric node (check_mode) - $cm_commission_node
143+
- name: Commission the fabric node (check_mode)
132144
cisco.aci.aci_fabric_node_decommission:
133-
<<: *aci_info
134-
pod_id: 1
135-
node_id: 201
136-
state: absent
145+
<<: *commission_node
137146
output_level: debug
138147
check_mode: true
139148
register: cm_commission_node
140149

141-
- name: Commission the fabric node - $commission_node
150+
- name: Commission the fabric node
142151
cisco.aci.aci_fabric_node_decommission:
143-
<<: *aci_info
144-
pod_id: 1
145-
node_id: 201
146-
state: absent
152+
<<: *commission_node
147153
register: commission_node
148154

149-
- name: Commission the fabric node again - $commission_node_again
155+
- name: Commission the fabric node again
150156
cisco.aci.aci_fabric_node_decommission:
151-
<<: *aci_info
152-
pod_id: 1
153-
node_id: 201
154-
state: absent
157+
<<: *commission_node
155158
register: commission_node_again
156159

157-
- name: Query the commissioned fabric node - $query_commissioned_node_2
160+
- name: Query the commissioned fabric node
158161
cisco.aci.aci_fabric_node_decommission:
159-
<<: *aci_info
160-
pod_id: 1
161-
node_id: 201
162+
<<: *commission_node
162163
state: query
163164
register: query_commissioned_node_2
164165

@@ -180,43 +181,55 @@
180181
- commission_node_again is not changed
181182
- commission_node_again.current == []
182183
- commission_node_again.previous == []
184+
185+
- name: Assertion check for query commission and decommission the fabric node
186+
ansible.builtin.assert:
187+
that:
188+
- query_decommissioned_node is not changed
189+
- query_decommissioned_node.current.0.fabricRsDecommissionNode.attributes.dn == "uni/fabric/outofsvc/rsdecommissionNode-[topology/pod-1/node-201]"
190+
- query_decommissioned_node.current.0.fabricRsDecommissionNode.attributes.removeFromController == "no"
191+
- query_decommissioned_node.current.0.fabricRsDecommissionNode.attributes.tDn == "topology/pod-1/node-201"
192+
- query_decommissioned_node.current.0.fabricRsDecommissionNode.attributes.targetId == "201"
193+
- query_all_decommissioned_nodes is not changed
194+
- query_all_decommissioned_nodes.current | length >= 2
195+
- query_all_decommissioned_nodes.current.0.fabricRsDecommissionNode.attributes.dn == "uni/fabric/outofsvc/rsdecommissionNode-[topology/pod-1/node-201]"
196+
- query_all_decommissioned_nodes.current.0.fabricRsDecommissionNode.attributes.removeFromController == "no"
197+
- query_all_decommissioned_nodes.current.0.fabricRsDecommissionNode.attributes.tDn == "topology/pod-1/node-201"
198+
- query_all_decommissioned_nodes.current.0.fabricRsDecommissionNode.attributes.targetId == "201"
199+
- query_all_decommissioned_nodes.current.1.fabricRsDecommissionNode.attributes.dn == "uni/fabric/outofsvc/rsdecommissionNode-[topology/pod-1/node-333]"
200+
- query_all_decommissioned_nodes.current.1.fabricRsDecommissionNode.attributes.removeFromController == "yes"
201+
- query_all_decommissioned_nodes.current.1.fabricRsDecommissionNode.attributes.tDn == "topology/pod-1/node-333"
202+
- query_all_decommissioned_nodes.current.1.fabricRsDecommissionNode.attributes.targetId == "333"
183203
- query_commissioned_node_2 is not changed
184204
- query_commissioned_node_2.current == []
185205

186-
- name: Decommission the fabric node and remove from the controller (check_mode) - $cm_after_removed_from_controller
206+
- name: Decommission the fabric node and remove from the controller (check_mode)
187207
cisco.aci.aci_fabric_node_decommission:
188-
<<: *aci_info
189-
pod_id: 1
190-
node_id: 201
208+
<<: *commission_node
191209
remove_from_controller: true
192210
state: present
193211
output_level: debug
194212
check_mode: true
195213
register: cm_after_removed_from_controller
196214

197-
- name: Decommission the fabric node and remove from the controller - $after_removed_from_controller
215+
- name: Decommission the fabric node and remove from the controller
198216
cisco.aci.aci_fabric_node_decommission:
199-
<<: *aci_info
200-
pod_id: 1
201-
node_id: 201
217+
<<: *commission_node
202218
remove_from_controller: true
203219
state: present
204220
register: after_removed_from_controller
205221

206-
- name: Decommission the fabric node and remove from the controller again - $after_removed_from_controller_again
222+
- name: Decommission the fabric node and remove from the controller again
207223
cisco.aci.aci_fabric_node_decommission:
208-
<<: *aci_info
209-
pod_id: 1
210-
node_id: 201
224+
<<: *commission_node
211225
remove_from_controller: true
212226
state: present
213227
register: after_removed_from_controller_again
214228

215-
- name: Query the decommissioned fabric node which is removed from the controller - $query_after_removed_from_controller
229+
# Retries and delays are implemented to ensure that the fabric node is fully and automatically removed from the controller when remove_from_controller is set true
230+
- name: Query the decommissioned fabric node which is removed from the controller
216231
cisco.aci.aci_fabric_node_decommission:
217-
<<: *aci_info
218-
pod_id: 1
219-
node_id: 201
232+
<<: *commission_node
220233
state: query
221234
register: query_after_removed_from_controller
222235
until:

0 commit comments

Comments
 (0)