diff --git a/devstack/lib/ironic b/devstack/lib/ironic index c6ab0d8cf9..037e85427d 100644 --- a/devstack/lib/ironic +++ b/devstack/lib/ironic @@ -91,6 +91,10 @@ fi # Ping timeout after the node becomes active IRONIC_PING_TIMEOUT=${IRONIC_PING_TIMEOUT:-} +# Whether to allow devstack to continue when ironic-status upgrade check +# finds unsupported drivers. Set to "true" to continue despite the error. +IRONIC_ALLOW_UNSUPPORTED_DRIVERS=$(trueorfalse False IRONIC_ALLOW_UNSUPPORTED_DRIVERS) + # Deploy to hardware platform IRONIC_HW_NODE_CPU=${IRONIC_HW_NODE_CPU:-1} IRONIC_HW_NODE_RAM=${IRONIC_HW_NODE_RAM:-512} @@ -2165,11 +2169,14 @@ function init_ironic { # NOTE(rloo): We're not upgrading but want to make sure this command works, # even though we're not parsing the output of this command. - $IRONIC_BIN_DIR/ironic-status upgrade check - $IRONIC_BIN_DIR/ironic-status upgrade check && ret_val=$? || ret_val=$? if [ $ret_val -gt 1 ] ; then - die $LINENO "The `ironic-status upgrade check` command returned an error. Cannot proceed." + # Allow continuing even with unsupported drivers if explicitly enabled + if [[ "${IRONIC_ALLOW_UNSUPPORTED_DRIVERS}" != "True" ]]; then + die $LINENO "The `ironic-status upgrade check` command returned an error. Cannot proceed." + else + echo "WARNING: Continuing despite upgrade check failure because IRONIC_ALLOW_UNSUPPORTED_DRIVERS=True" + fi fi if is_service_enabled ir-novnc; then create_systemd_container_dir diff --git a/ironic/drivers/snmp.py b/ironic/drivers/snmp.py index c5ed96658e..bd69ceb685 100644 --- a/ironic/drivers/snmp.py +++ b/ironic/drivers/snmp.py @@ -25,6 +25,12 @@ from ironic.drivers.modules import snmp class SNMPHardware(generic.GenericHardware): """SNMP Hardware type """ + # NOTE(JayF) The SNMP driver depends on an old, out of maintenance library + # pysnmp-lextudio; unless it is migrated to a modern library (pysnmp), + # it will be removed in a future Ironic release. See bug #2106674. + # TODO(JayF) Remove this driver on or after OpenStack 2026.1 release. + supported = False + @property def supported_power_interfaces(self): """List of supported power interfaces.""" diff --git a/releasenotes/notes/snmp-driver-deprecation-ac612cb6c9412e1e.yaml b/releasenotes/notes/snmp-driver-deprecation-ac612cb6c9412e1e.yaml new file mode 100644 index 0000000000..79a80c754c --- /dev/null +++ b/releasenotes/notes/snmp-driver-deprecation-ac612cb6c9412e1e.yaml @@ -0,0 +1,10 @@ +deprecations: + - | + The SNMP hardware type and associated interfaces have been deprecated + for removal in a future Ironic release. It currently depends on an + outdated, unsupported library and unless it is migrated off that library + by the end of the 2026.1 cycle it will be removed. + + Operators utilizing this driver will need to find an alternate way + to manage their machines. Alternatively, the Ironic community welcomes + contributions to keep this driver alive. diff --git a/zuul.d/ironic-jobs.yaml b/zuul.d/ironic-jobs.yaml index 43a6dfaa5b..25b2dbe1ee 100644 --- a/zuul.d/ironic-jobs.yaml +++ b/zuul.d/ironic-jobs.yaml @@ -482,6 +482,7 @@ IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True IRONIC_VM_EPHEMERAL_DISK: 0 IRONIC_AUTOMATED_CLEAN_ENABLED: False + IRONIC_ALLOW_UNSUPPORTED_DRIVERS: True # NOTE(TheJulia): Explicitly set scope enforcement to False until we # remove the legacy policies. IRONIC_ENFORCE_SCOPE: False