Skip to content

Commit e533231

Browse files
committed
Clear idrac jobs earlier in enroll and optionally reset drac completely
1 parent 3e1c22f commit e533231

3 files changed

Lines changed: 40 additions & 17 deletions

File tree

python/understack-workflows/tests/test_enroll_server.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -289,24 +289,24 @@ def test_enrol_happy_path_uses_virtual_media_inspect_and_flips_back(mocker):
289289
),
290290
call(
291291
created_node.uuid,
292-
"inspect", # OOB redfish inspect for bios_name / basic info
293-
cleansteps=None,
292+
"clean",
293+
cleansteps=[{"interface": "management", "step": "clear_job_queue"}],
294294
runbook=None,
295-
disable_ramdisk=None,
295+
disable_ramdisk=True,
296296
),
297297
call(
298298
created_node.uuid,
299-
"inspect", # agent inspect via virtual media
299+
"inspect", # OOB redfish inspect for bios_name / basic info
300300
cleansteps=None,
301301
runbook=None,
302302
disable_ramdisk=None,
303303
),
304304
call(
305305
created_node.uuid,
306-
"clean",
307-
cleansteps=[{"interface": "management", "step": "clear_job_queue"}],
306+
"inspect", # agent inspect
307+
cleansteps=None,
308308
runbook=None,
309-
disable_ramdisk=True,
309+
disable_ramdisk=None,
310310
),
311311
call(
312312
created_node.uuid,
@@ -421,24 +421,24 @@ def test_enrol_existing_failed_node_recovers_and_updates(mocker):
421421
),
422422
call(
423423
existing_node.uuid,
424-
"inspect", # OOB inspect
425-
cleansteps=None,
424+
"clean",
425+
cleansteps=[{"interface": "management", "step": "clear_job_queue"}],
426426
runbook=None,
427-
disable_ramdisk=None,
427+
disable_ramdisk=True,
428428
),
429429
call(
430430
existing_node.uuid,
431-
"inspect", # Agent inspect via virtual media
431+
"inspect", # OOB inspect
432432
cleansteps=None,
433433
runbook=None,
434434
disable_ramdisk=None,
435435
),
436436
call(
437437
existing_node.uuid,
438-
"clean",
439-
cleansteps=[{"interface": "management", "step": "clear_job_queue"}],
438+
"inspect", # Agent inspect
439+
cleansteps=None,
440440
runbook=None,
441-
disable_ramdisk=True,
441+
disable_ramdisk=None,
442442
),
443443
call(
444444
existing_node.uuid,

python/understack-workflows/understack_workflows/ironic_node.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,17 @@ def clear_pending_idrac_jobs(node: Node):
173173
)
174174

175175

176+
def reset_idrac_to_known_good_state(node: Node):
177+
logger.info("%s performing known_good_state clean step", node.uuid)
178+
transition(
179+
node,
180+
target_state="clean",
181+
expected_state="manageable",
182+
clean_steps=[{"interface": "management", "step": "known_good_state"}],
183+
disable_ramdisk=True,
184+
)
185+
186+
176187
def _driver_for(manufacturer: str) -> tuple[str, str]:
177188
"""Answer the (driver, inspect_interface) for this server."""
178189
if manufacturer.startswith("Dell"):

python/understack-workflows/understack_workflows/main/enroll_server.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ def main() -> None:
6565
firmware_update=args.firmware_update,
6666
raid_configure=args.raid_configure,
6767
external_cmdb_id=args.external_cmdb_id,
68+
reset_idrac=args.reset_idrac,
6869
)
6970

7071

@@ -74,6 +75,7 @@ def enroll(
7475
raid_configure: bool,
7576
old_password: str | None,
7677
external_cmdb_id: str | None = None,
78+
reset_idrac: bool = False,
7779
) -> None:
7880
logger.info("Starting enroll workflow for bmc_ip_address=%s", ip_address)
7981

@@ -90,6 +92,13 @@ def enroll(
9092
external_cmdb_id=external_cmdb_id,
9193
)
9294

95+
# Clear stale iDRAC jobs before virtual-media inspection, or optionally
96+
# reset the controller to a broader known-good state.
97+
if reset_idrac:
98+
ironic_node.reset_idrac_to_known_good_state(node)
99+
else:
100+
ironic_node.clear_pending_idrac_jobs(node)
101+
93102
# Out-of-band redfish inspection populates data including baremetal ports.
94103
#
95104
# Our hooks augment the ironic baremetal port with the BMC-reported
@@ -120,9 +129,6 @@ def enroll(
120129
)
121130
logger.info("[node:%s] Selected PXE interface %s", node.uuid, pxe_interface)
122131

123-
# Clear the job queue - stale jobs can conflict with the ones we create:
124-
ironic_node.clear_pending_idrac_jobs(node)
125-
126132
# This sets the boot device to use for all future HTTP boots:
127133
if update_dell_bios_settings(bmc, pxe_interface=pxe_interface):
128134
logger.info("%s performing second inspection write BIOS settings", node.uuid)
@@ -278,6 +284,12 @@ def argument_parser():
278284
default=True,
279285
help="Configure RAID before inspection",
280286
)
287+
parser.add_argument(
288+
"--reset-idrac",
289+
type=parse_bool,
290+
default=False,
291+
help="Reset iDRAC to known_good_state instead of clear_job_queue",
292+
)
281293
parser.add_argument(
282294
"--external-cmdb-id",
283295
required=False,

0 commit comments

Comments
 (0)