From dc6cd79a9ef4b7e95aa539c17a37363209e1a435 Mon Sep 17 00:00:00 2001 From: Jay Faulkner Date: Wed, 9 Apr 2025 14:35:52 -0700 Subject: [PATCH] Mark SNMP driver unsupported for removal The SNMP driver uses pysnmp-lextudio, we'll be lucky if it works through the deprecation period. If by the start of the 2026.2 cycle it's not been migrated to a different library, it will need to be removed. In order to keep CI running on an unsupported driver, I've added an option to the devstack plugin to skip failing on upgrade check. Related-Bug: 2106674 Generated-By: Jetbrains Junie Change-Id: Ibe5576d04fc3ca1cc102f126853ed3d1e8c404d2 --- devstack/lib/ironic | 13 ++++++++++--- ironic/drivers/snmp.py | 6 ++++++ .../snmp-driver-deprecation-ac612cb6c9412e1e.yaml | 10 ++++++++++ zuul.d/ironic-jobs.yaml | 1 + 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 releasenotes/notes/snmp-driver-deprecation-ac612cb6c9412e1e.yaml 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