We need a tracking/polling API across QUADS server, python-quads-lib, and quads-client using the new plugin architecture design. This is a major feature-set that also pulls in changes to two other codebases as consumers.
We'd go with stage-based status tracking of assignment progress:
Stage-based progress -- no progress_pct column. Progress is derived from the ordinal position of the status value within the pipeline stages. There are 12 pipeline stages (excluding terminal states completed and failed):
| Stage |
Status |
Where reported |
Dell/HPE |
Supermicro |
No-wipe |
Corresponds to |
| 1/12 |
pending |
cli.py (on create) |
yes |
yes |
yes |
Queued, not yet started |
| 2/12 |
switch_config |
cli.py (before move tasks) |
yes |
yes |
yes |
switch_dispatcher.configure() + switch_config_applied=True |
| 3/12 |
ipmi_config |
standard.py:70 |
yes |
yes |
yes |
ipmi.configure_user() (always runs, outside semaphore) |
| 4/12 |
hardware_prep |
standard.py:99 |
yes |
-- |
-- |
prepare_host_hardware() via Badfish. Dell: change_boot() + 600s iDRAC wait. Supermicro has no Badfish/iLO equivalent. |
| 5/12 |
power_on |
standard.py:104 / ipmi.py:48-61 |
yes (Badfish) |
yes (IPMI reset) |
-- |
All vendors power on. Dell/HPE: power_on_host() via Badfish. Supermicro: ipmi.reset() (power off, wait, power on) inside pxe_persistent(). |
| 6/12 |
provisioning |
standard.py:86/117 |
yes |
yes |
-- |
prepare_host_provisioning() -- registers host in provisioner |
| 7/12 |
cleanup |
standard.py:121 |
yes |
-- |
-- |
cleanup_virtual_media() via Badfish. Supermicro: no virtual media to clean. |
| 8/12 |
reboot |
standard.py:124-131/90 |
yes |
yes |
-- |
Dell: reboot_for_rebuild() (sets PXE boot order via Badfish). HPE/Supermicro: ipmi.pxe_persistent() (sets PXE flag + IPMI power cycle). |
| 9/12 |
post_install |
standard.py:150-158 |
yes |
yes |
yes |
Schedule + host record updates |
| 10/12 |
foreman_rbac |
cli.py:1960 / foreman_heal.py |
yes |
yes |
yes |
foreman_heal() -- Foreman host RBAC synced |
| 11/12 |
validation |
environment.py:345-411 |
yes |
yes |
-- |
post_system_test() + post_network_test(), host.validated=True |
| 12/12 |
released |
environment.py:394-400 / cli.py |
yes |
yes |
yes |
assignment.validated=True -- environment available to tenant |
| -- |
completed |
(after released) |
yes |
yes |
yes |
Terminal: all steps done |
| -- |
failed |
standard.py:264 / cli.py / environment.py |
yes |
yes |
yes |
Terminal: move/switch/validation failure |
We need a tracking/polling API across QUADS server, python-quads-lib, and quads-client using the new plugin architecture design. This is a major feature-set that also pulls in changes to two other codebases as consumers.
We'd go with stage-based status tracking of assignment progress:
Stage-based progress -- no
progress_pctcolumn. Progress is derived from the ordinal position of thestatusvalue within the pipeline stages. There are 12 pipeline stages (excluding terminal statescompletedandfailed):switch_dispatcher.configure()+switch_config_applied=Trueipmi.configure_user()(always runs, outside semaphore)prepare_host_hardware()via Badfish. Dell:change_boot()+ 600s iDRAC wait. Supermicro has no Badfish/iLO equivalent.power_on_host()via Badfish. Supermicro:ipmi.reset()(power off, wait, power on) insidepxe_persistent().prepare_host_provisioning()-- registers host in provisionercleanup_virtual_media()via Badfish. Supermicro: no virtual media to clean.reboot_for_rebuild()(sets PXE boot order via Badfish). HPE/Supermicro:ipmi.pxe_persistent()(sets PXE flag + IPMI power cycle).foreman_heal()-- Foreman host RBAC syncedpost_system_test()+post_network_test(),host.validated=Trueassignment.validated=True-- environment available to tenant