From 206e246d257714f5928c46d0dcf9dc6bf95b84de Mon Sep 17 00:00:00 2001 From: Pavlo Shchelokovskyy Date: Tue, 15 Nov 2016 14:00:24 +0200 Subject: [PATCH] Remove agent vendor passthru from most drivers This patch removes the deprecated agent lookup/heartbeat as vendor passthru functionality from most of the drivers in following modules: - ironic.drivers.agent - ironic.drivers.pxe - ironic.drivers.drac - ironic.drivers.irmc Some drivers are left untouched though: - iLO and OneView drivers are a bit more complicated and will be fixed in follow-up patches - iBoot, WoL and AMT drivers will be fixed in ironic-staging-drivers repo first and then removed from ironic tree. Change-Id: Ia9ee46cda68ef823d1fe8e5ea03c1d5948810a50 Partial-Bug: #1640533 --- ironic/drivers/agent.py | 26 +------------ ironic/drivers/drac.py | 15 +------- ironic/drivers/irmc.py | 2 - ironic/drivers/pxe.py | 38 ++----------------- ironic/tests/unit/drivers/test_agent.py | 11 +----- ironic/tests/unit/drivers/test_irmc.py | 2 - ironic/tests/unit/drivers/test_pxe.py | 24 +++--------- ...emove-agent-passthru-432b18e6c430cee6.yaml | 37 ++++++++++++++++++ 8 files changed, 51 insertions(+), 104 deletions(-) create mode 100644 releasenotes/notes/remove-agent-passthru-432b18e6c430cee6.yaml diff --git a/ironic/drivers/agent.py b/ironic/drivers/agent.py index 7be191dc90..92e56425c5 100644 --- a/ironic/drivers/agent.py +++ b/ironic/drivers/agent.py @@ -32,7 +32,6 @@ from ironic.drivers.modules.ucs import management as ucs_mgmt from ironic.drivers.modules.ucs import power as ucs_power from ironic.drivers.modules import virtualbox from ironic.drivers.modules import wol -from ironic.drivers import utils class AgentAndIPMIToolDriver(base.BaseDriver): @@ -52,15 +51,7 @@ class AgentAndIPMIToolDriver(base.BaseDriver): self.deploy = agent.AgentDeploy() self.management = ipmitool.IPMIManagement() self.console = ipmitool.IPMIShellinaboxConsole() - self.agent_vendor = agent.AgentVendorInterface() - self.ipmi_vendor = ipmitool.VendorPassthru() - self.mapping = {'send_raw': self.ipmi_vendor, - 'bmc_reset': self.ipmi_vendor, - 'heartbeat': self.agent_vendor} - self.driver_passthru_mapping = {'lookup': self.agent_vendor} - self.vendor = utils.MixinVendorInterface( - self.mapping, - driver_passthru_mapping=self.driver_passthru_mapping) + self.vendor = ipmitool.VendorPassthru() self.raid = agent.AgentRAID() self.inspect = inspector.Inspector.create_if_enabled( 'AgentAndIPMIToolDriver') @@ -105,16 +96,7 @@ class AgentAndIPMINativeDriver(base.BaseDriver): self.deploy = agent.AgentDeploy() self.management = ipminative.NativeIPMIManagement() self.console = ipminative.NativeIPMIShellinaboxConsole() - self.agent_vendor = agent.AgentVendorInterface() - self.ipminative_vendor = ipminative.VendorPassthru() - self.mapping = { - 'send_raw': self.ipminative_vendor, - 'bmc_reset': self.ipminative_vendor, - 'heartbeat': self.agent_vendor, - } - self.driver_passthru_mapping = {'lookup': self.agent_vendor} - self.vendor = utils.MixinVendorInterface(self.mapping, - self.driver_passthru_mapping) + self.vendor = ipminative.VendorPassthru() self.raid = agent.AgentRAID() self.inspect = inspector.Inspector.create_if_enabled( 'AgentAndIPMINativeDriver') @@ -140,7 +122,6 @@ class AgentAndSSHDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = agent.AgentDeploy() self.management = ssh.SSHManagement() - self.vendor = agent.AgentVendorInterface() self.raid = agent.AgentRAID() self.inspect = inspector.Inspector.create_if_enabled( 'AgentAndSSHDriver') @@ -171,7 +152,6 @@ class AgentAndVirtualBoxDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = agent.AgentDeploy() self.management = virtualbox.VirtualBoxManagement() - self.vendor = agent.AgentVendorInterface() self.raid = agent.AgentRAID() @@ -219,7 +199,6 @@ class AgentAndUcsDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = agent.AgentDeploy() self.management = ucs_mgmt.UcsManagement() - self.vendor = agent.AgentVendorInterface() self.inspect = inspector.Inspector.create_if_enabled( 'AgentAndUcsDriver') @@ -244,7 +223,6 @@ class AgentAndCIMCDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = agent.AgentDeploy() self.management = cimc_mgmt.CIMCManagement() - self.vendor = agent.AgentVendorInterface() self.inspect = inspector.Inspector.create_if_enabled( 'AgentAndCIMCDriver') diff --git a/ironic/drivers/drac.py b/ironic/drivers/drac.py index a102ef20cd..811a5da74f 100644 --- a/ironic/drivers/drac.py +++ b/ironic/drivers/drac.py @@ -27,9 +27,7 @@ from ironic.drivers.modules.drac import power from ironic.drivers.modules.drac import raid from ironic.drivers.modules.drac import vendor_passthru from ironic.drivers.modules import inspector -from ironic.drivers.modules import iscsi_deploy from ironic.drivers.modules import pxe -from ironic.drivers import utils class PXEDracDriver(base.BaseDriver): @@ -46,18 +44,7 @@ class PXEDracDriver(base.BaseDriver): self.deploy = deploy.DracDeploy() self.management = management.DracManagement() self.raid = raid.DracRAID() - self.iscsi_vendor = iscsi_deploy.VendorPassthru() - self.drac_vendor = vendor_passthru.DracVendorPassthru() - self.mapping = {'heartbeat': self.iscsi_vendor, - 'get_bios_config': self.drac_vendor, - 'set_bios_config': self.drac_vendor, - 'commit_bios_config': self.drac_vendor, - 'abandon_bios_config': self.drac_vendor, - 'list_unfinished_jobs': self.drac_vendor, - } - self.driver_passthru_mapping = {'lookup': self.iscsi_vendor} - self.vendor = utils.MixinVendorInterface(self.mapping, - self.driver_passthru_mapping) + self.vendor = vendor_passthru.DracVendorPassthru() self.inspect = drac_inspect.DracInspect() diff --git a/ironic/drivers/irmc.py b/ironic/drivers/irmc.py index 4b5b4fc900..bde978a0da 100644 --- a/ironic/drivers/irmc.py +++ b/ironic/drivers/irmc.py @@ -50,7 +50,6 @@ class IRMCVirtualMediaIscsiDriver(base.BaseDriver): self.deploy = iscsi_deploy.ISCSIDeploy() self.console = ipmitool.IPMIShellinaboxConsole() self.management = management.IRMCManagement() - self.vendor = iscsi_deploy.VendorPassthru() self.inspect = inspect.IRMCInspect() @@ -75,5 +74,4 @@ class IRMCVirtualMediaAgentDriver(base.BaseDriver): self.deploy = agent.AgentDeploy() self.console = ipmitool.IPMIShellinaboxConsole() self.management = management.IRMCManagement() - self.vendor = agent.AgentVendorInterface() self.inspect = inspect.IRMCInspect() diff --git a/ironic/drivers/pxe.py b/ironic/drivers/pxe.py index a379a7723d..78d52c403a 100644 --- a/ironic/drivers/pxe.py +++ b/ironic/drivers/pxe.py @@ -52,7 +52,6 @@ from ironic.drivers.modules.ucs import management as ucs_mgmt from ironic.drivers.modules.ucs import power as ucs_power from ironic.drivers.modules import virtualbox from ironic.drivers.modules import wol -from ironic.drivers import utils class PXEAndIPMIToolDriver(base.BaseDriver): @@ -73,15 +72,7 @@ class PXEAndIPMIToolDriver(base.BaseDriver): self.management = ipmitool.IPMIManagement() self.inspect = inspector.Inspector.create_if_enabled( 'PXEAndIPMIToolDriver') - self.iscsi_vendor = iscsi_deploy.VendorPassthru() - self.ipmi_vendor = ipmitool.VendorPassthru() - self.mapping = {'send_raw': self.ipmi_vendor, - 'bmc_reset': self.ipmi_vendor, - 'heartbeat': self.iscsi_vendor} - self.driver_passthru_mapping = {'lookup': self.iscsi_vendor} - self.vendor = utils.MixinVendorInterface( - self.mapping, - driver_passthru_mapping=self.driver_passthru_mapping) + self.vendor = ipmitool.VendorPassthru() self.raid = agent.AgentRAID() @@ -124,7 +115,6 @@ class PXEAndSSHDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = iscsi_deploy.ISCSIDeploy() self.management = ssh.SSHManagement() - self.vendor = iscsi_deploy.VendorPassthru() self.inspect = inspector.Inspector.create_if_enabled( 'PXEAndSSHDriver') self.raid = agent.AgentRAID() @@ -154,16 +144,7 @@ class PXEAndIPMINativeDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = iscsi_deploy.ISCSIDeploy() self.management = ipminative.NativeIPMIManagement() - self.iscsi_vendor = iscsi_deploy.VendorPassthru() - self.ipminative_vendor = ipminative.VendorPassthru() - self.mapping = { - 'send_raw': self.ipminative_vendor, - 'bmc_reset': self.ipminative_vendor, - 'heartbeat': self.iscsi_vendor, - } - self.driver_passthru_mapping = {'lookup': self.iscsi_vendor} - self.vendor = utils.MixinVendorInterface(self.mapping, - self.driver_passthru_mapping) + self.vendor = ipminative.VendorPassthru() self.inspect = inspector.Inspector.create_if_enabled( 'PXEAndIPMINativeDriver') self.raid = agent.AgentRAID() @@ -191,14 +172,7 @@ class PXEAndSeaMicroDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = iscsi_deploy.ISCSIDeploy() self.management = seamicro.Management() - self.seamicro_vendor = seamicro.VendorPassthru() - self.iscsi_vendor = iscsi_deploy.VendorPassthru() - self.mapping = {'heartbeat': self.iscsi_vendor, - 'attach_volume': self.seamicro_vendor, - 'set_node_vlan_id': self.seamicro_vendor} - self.driver_passthru_mapping = {'lookup': self.iscsi_vendor} - self.vendor = utils.MixinVendorInterface(self.mapping, - self.driver_passthru_mapping) + self.vendor = seamicro.VendorPassthru() self.console = seamicro.ShellinaboxConsole() @@ -271,7 +245,6 @@ class PXEAndSNMPDriver(base.BaseDriver): self.power = snmp.SNMPPower() self.boot = pxe.PXEBoot() self.deploy = iscsi_deploy.ISCSIDeploy() - self.vendor = iscsi_deploy.VendorPassthru() # PDUs have no boot device management capability. # Only PXE as a boot device is supported. @@ -296,7 +269,6 @@ class PXEAndIRMCDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = iscsi_deploy.ISCSIDeploy() self.management = irmc_management.IRMCManagement() - self.vendor = iscsi_deploy.VendorPassthru() self.inspect = irmc_inspect.IRMCInspect() @@ -324,7 +296,6 @@ class PXEAndVirtualBoxDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = iscsi_deploy.ISCSIDeploy() self.management = virtualbox.VirtualBoxManagement() - self.vendor = iscsi_deploy.VendorPassthru() self.raid = agent.AgentRAID() @@ -369,7 +340,6 @@ class PXEAndMSFTOCSDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = iscsi_deploy.ISCSIDeploy() self.management = msftocs_management.MSFTOCSManagement() - self.vendor = iscsi_deploy.VendorPassthru() class PXEAndUcsDriver(base.BaseDriver): @@ -391,7 +361,6 @@ class PXEAndUcsDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = iscsi_deploy.ISCSIDeploy() self.management = ucs_mgmt.UcsManagement() - self.vendor = iscsi_deploy.VendorPassthru() self.inspect = inspector.Inspector.create_if_enabled( 'PXEAndUcsDriver') @@ -415,7 +384,6 @@ class PXEAndCIMCDriver(base.BaseDriver): self.boot = pxe.PXEBoot() self.deploy = iscsi_deploy.ISCSIDeploy() self.management = cimc_mgmt.CIMCManagement() - self.vendor = iscsi_deploy.VendorPassthru() self.inspect = inspector.Inspector.create_if_enabled( 'PXEAndCIMCDriver') diff --git a/ironic/tests/unit/drivers/test_agent.py b/ironic/tests/unit/drivers/test_agent.py index 23cdb87515..1f9913e4fa 100644 --- a/ironic/tests/unit/drivers/test_agent.py +++ b/ironic/tests/unit/drivers/test_agent.py @@ -28,7 +28,6 @@ from ironic.drivers.modules import iboot from ironic.drivers.modules import ipmitool from ironic.drivers.modules import pxe from ironic.drivers.modules import wol -from ironic.drivers import utils from ironic.tests import base @@ -42,10 +41,7 @@ class AgentAndIPMIToolDriverTestCase(base.TestCase): self.assertIsInstance(driver.boot, pxe.PXEBoot) self.assertIsInstance(driver.deploy, agent_module.AgentDeploy) self.assertIsInstance(driver.management, ipmitool.IPMIManagement) - self.assertIsInstance(driver.agent_vendor, - agent_module.AgentVendorInterface) - self.assertIsInstance(driver.ipmi_vendor, ipmitool.VendorPassthru) - self.assertIsInstance(driver.vendor, utils.MixinVendorInterface) + self.assertIsInstance(driver.vendor, ipmitool.VendorPassthru) self.assertIsInstance(driver.raid, agent_module.AgentRAID) @@ -59,10 +55,7 @@ class AgentAndIPMIToolAndSocatDriverTestCase(base.TestCase): self.assertIsInstance(driver.boot, pxe.PXEBoot) self.assertIsInstance(driver.deploy, agent_module.AgentDeploy) self.assertIsInstance(driver.management, ipmitool.IPMIManagement) - self.assertIsInstance(driver.agent_vendor, - agent_module.AgentVendorInterface) - self.assertIsInstance(driver.ipmi_vendor, ipmitool.VendorPassthru) - self.assertIsInstance(driver.vendor, utils.MixinVendorInterface) + self.assertIsInstance(driver.vendor, ipmitool.VendorPassthru) self.assertIsInstance(driver.raid, agent_module.AgentRAID) diff --git a/ironic/tests/unit/drivers/test_irmc.py b/ironic/tests/unit/drivers/test_irmc.py index cd9fbfdf8d..a07da81059 100644 --- a/ironic/tests/unit/drivers/test_irmc.py +++ b/ironic/tests/unit/drivers/test_irmc.py @@ -48,7 +48,6 @@ class IRMCVirtualMediaIscsiTestCase(testtools.TestCase): irmc.ipmitool.IPMIShellinaboxConsole) self.assertIsInstance(driver.management, irmc.management.IRMCManagement) - self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru) self.assertIsInstance(driver.inspect, irmc.inspect.IRMCInspect) @mock.patch.object(irmc.importutils, 'try_import') @@ -91,7 +90,6 @@ class IRMCVirtualMediaAgentTestCase(testtools.TestCase): irmc.ipmitool.IPMIShellinaboxConsole) self.assertIsInstance(driver.management, irmc.management.IRMCManagement) - self.assertIsInstance(driver.vendor, irmc.agent.AgentVendorInterface) self.assertIsInstance(driver.inspect, irmc.inspect.IRMCInspect) @mock.patch.object(irmc.importutils, 'try_import') diff --git a/ironic/tests/unit/drivers/test_pxe.py b/ironic/tests/unit/drivers/test_pxe.py index 13ec8144c0..2fe9ec2dfd 100644 --- a/ironic/tests/unit/drivers/test_pxe.py +++ b/ironic/tests/unit/drivers/test_pxe.py @@ -31,6 +31,7 @@ from ironic.drivers.modules.ilo import console as ilo_console from ironic.drivers.modules.ilo import inspect as ilo_inspect from ironic.drivers.modules.ilo import management as ilo_management from ironic.drivers.modules.ilo import power as ilo_power +from ironic.drivers.modules.ilo import vendor as ilo_vendor from ironic.drivers.modules import ipminative from ironic.drivers.modules import ipmitool from ironic.drivers.modules.irmc import management as irmc_management @@ -47,7 +48,6 @@ from ironic.drivers.modules.ucs import power as ucs_power from ironic.drivers.modules import virtualbox from ironic.drivers.modules import wol from ironic.drivers import pxe -from ironic.drivers import utils class PXEDriversTestCase(testtools.TestCase): @@ -61,8 +61,7 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) self.assertIsInstance(driver.management, ipmitool.IPMIManagement) self.assertIsNone(driver.inspect) - # TODO(rameshg87): Need better way of asserting the routes. - self.assertIsInstance(driver.vendor, utils.MixinVendorInterface) + self.assertIsInstance(driver.vendor, ipmitool.VendorPassthru) self.assertIsInstance(driver.raid, agent.AgentRAID) def test_pxe_ipmitool_socat_driver(self): @@ -74,8 +73,7 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) self.assertIsInstance(driver.management, ipmitool.IPMIManagement) self.assertIsNone(driver.inspect) - # TODO(rameshg87): Need better way of asserting the routes. - self.assertIsInstance(driver.vendor, utils.MixinVendorInterface) + self.assertIsInstance(driver.vendor, ipmitool.VendorPassthru) self.assertIsInstance(driver.raid, agent.AgentRAID) def test_pxe_ssh_driver(self): @@ -85,7 +83,6 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.boot, pxe_module.PXEBoot) self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) self.assertIsInstance(driver.management, ssh.SSHManagement) - self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru) self.assertIsNone(driver.inspect) self.assertIsInstance(driver.raid, agent.AgentRAID) @@ -103,8 +100,7 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) self.assertIsInstance(driver.management, ipminative.NativeIPMIManagement) - # TODO(rameshg87): Need better way of asserting the routes. - self.assertIsInstance(driver.vendor, utils.MixinVendorInterface) + self.assertIsInstance(driver.vendor, ipminative.VendorPassthru) self.assertIsNone(driver.inspect) self.assertIsInstance(driver.raid, agent.AgentRAID) @@ -127,9 +123,7 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.boot, pxe_module.PXEBoot) self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) self.assertIsInstance(driver.management, seamicro.Management) - self.assertIsInstance(driver.seamicro_vendor, seamicro.VendorPassthru) - self.assertIsInstance(driver.iscsi_vendor, iscsi_deploy.VendorPassthru) - self.assertIsInstance(driver.vendor, utils.MixinVendorInterface) + self.assertIsInstance(driver.vendor, seamicro.VendorPassthru) self.assertIsInstance(driver.console, seamicro.ShellinaboxConsole) @mock.patch.object(pxe.importutils, 'try_import', spec_set=True, @@ -170,7 +164,7 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.power, ilo_power.IloPower) self.assertIsInstance(driver.boot, pxe_module.PXEBoot) self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) - self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru) + self.assertIsInstance(driver.vendor, ilo_vendor.VendorPassthru) self.assertIsInstance(driver.console, ilo_console.IloConsoleInterface) self.assertIsInstance(driver.management, @@ -196,7 +190,6 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.power, snmp.SNMPPower) self.assertIsInstance(driver.boot, pxe_module.PXEBoot) self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) - self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru) self.assertIsNone(driver.management) @mock.patch.object(pxe.importutils, 'try_import', spec_set=True, @@ -220,7 +213,6 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) self.assertIsInstance(driver.management, irmc_management.IRMCManagement) - self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru) @mock.patch.object(pxe.importutils, 'try_import', spec_set=True, autospec=True) @@ -242,7 +234,6 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) self.assertIsInstance(driver.management, virtualbox.VirtualBoxManagement) - self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru) self.assertIsInstance(driver.raid, agent.AgentRAID) @mock.patch.object(pxe.importutils, 'try_import', spec_set=True, @@ -287,7 +278,6 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) self.assertIsInstance(driver.management, msftocs_management.MSFTOCSManagement) - self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru) @mock.patch.object(pxe.importutils, 'try_import', spec_set=True, autospec=True) @@ -301,7 +291,6 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) self.assertIsInstance(driver.management, ucs_management.UcsManagement) - self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru) @mock.patch.object(pxe.importutils, 'try_import', spec_set=True, autospec=True) @@ -323,7 +312,6 @@ class PXEDriversTestCase(testtools.TestCase): self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) self.assertIsInstance(driver.management, cimc_management.CIMCManagement) - self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru) @mock.patch.object(pxe.importutils, 'try_import', spec_set=True, autospec=True) diff --git a/releasenotes/notes/remove-agent-passthru-432b18e6c430cee6.yaml b/releasenotes/notes/remove-agent-passthru-432b18e6c430cee6.yaml new file mode 100644 index 0000000000..0314aefc84 --- /dev/null +++ b/releasenotes/notes/remove-agent-passthru-432b18e6c430cee6.yaml @@ -0,0 +1,37 @@ +--- +features: + - | + Agent lookup/heartbeat as vendor passthru is removed from most of + in-tree ironic drivers. Affected drivers are + + * agent_ipmitool + * agent_ipmitool_socat + * agent_ipminative + * agent_irmc + * agent_ssh + * agent_vbox + * agent_ucs + * pxe_agent_cimc + * pxe_ipmitool + * pxe_ipmitool_socat + * pxe_ssh + * pxe_ipminative + * pxe_seamicro + * pxe_snmp + * pxe_irmc + * pxe_vbox + * pxe_msftocs + * pxe_ucs + * pxe_iscsi_cimc + * pxe_drac + * pxe_drac_inspector + * iscsi_irmc + + All the other vendor passthru methods are left in place if the + driver had them. +upgrade: + - Agent lookup/heartbeat as vendor passthru is removed from ironic. + That means that most in-tree drivers relying on Ironic Python Agent (IPA) + lookup/heartbeat functionality become incompatible with IPA < 1.5.0. + Operators are required to update their IPA-based deploy ramdisks to + contain IPA >= 1.5.0.