Remove agent vendor passthru from drivers
Agent lookup/heartbeat as vendor passthru interface is deprecated and is being removed from Ironic. This patch updates all the drivers in ironic-staging-drivers to not rely in this functionality. Change-Id: Idfcfdff6a8657d6e6f09b8fe85ebaa0251969955 Related-Bug: #1640533
This commit is contained in:
parent
9de213f26f
commit
fd7a07f981
|
@ -20,11 +20,12 @@ from ironic.drivers.modules import deploy_utils
|
||||||
from ironic.drivers.modules import iscsi_deploy
|
from ironic.drivers.modules import iscsi_deploy
|
||||||
|
|
||||||
|
|
||||||
class AMTPXEVendorPassthru(iscsi_deploy.VendorPassthru):
|
class AMTISCSIDeploy(iscsi_deploy.ISCSIDeploy):
|
||||||
|
"""AMT-specific version of ISCSIDeploy driver interface"""
|
||||||
|
|
||||||
@task_manager.require_exclusive_lock
|
@task_manager.require_exclusive_lock
|
||||||
def continue_deploy(self, task):
|
def continue_deploy(self, task):
|
||||||
if deploy_utils.get_boot_option(task.node) == "netboot":
|
if deploy_utils.get_boot_option(task.node) == "netboot":
|
||||||
task.driver.management.ensure_next_boot_device(task.node,
|
task.driver.management.ensure_next_boot_device(task.node,
|
||||||
boot_devices.PXE)
|
boot_devices.PXE)
|
||||||
super(AMTPXEVendorPassthru, self).continue_deploy(task)
|
super(AMTISCSIDeploy, self).continue_deploy(task)
|
|
@ -17,13 +17,12 @@ from ironic.common import exception as ironic_exception
|
||||||
from ironic.drivers import base
|
from ironic.drivers import base
|
||||||
from ironic.drivers.modules import agent
|
from ironic.drivers.modules import agent
|
||||||
from ironic.drivers.modules import fake
|
from ironic.drivers.modules import fake
|
||||||
from ironic.drivers.modules import iscsi_deploy
|
|
||||||
from ironic.drivers.modules import pxe
|
from ironic.drivers.modules import pxe
|
||||||
from oslo_utils import importutils
|
from oslo_utils import importutils
|
||||||
|
|
||||||
|
from ironic_staging_drivers.amt import deploy as amt_deploy
|
||||||
from ironic_staging_drivers.amt import management as amt_management
|
from ironic_staging_drivers.amt import management as amt_management
|
||||||
from ironic_staging_drivers.amt import power as amt_power
|
from ironic_staging_drivers.amt import power as amt_power
|
||||||
from ironic_staging_drivers.amt import vendor as amt_vendor
|
|
||||||
from ironic_staging_drivers.common.i18n import _
|
from ironic_staging_drivers.common.i18n import _
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +37,6 @@ class FakeAMTFakeDriver(base.BaseDriver):
|
||||||
self.power = amt_power.AMTPower()
|
self.power = amt_power.AMTPower()
|
||||||
self.deploy = fake.FakeDeploy()
|
self.deploy = fake.FakeDeploy()
|
||||||
self.management = amt_management.AMTManagement()
|
self.management = amt_management.AMTManagement()
|
||||||
self.vendor = amt_vendor.AMTPXEVendorPassthru()
|
|
||||||
|
|
||||||
|
|
||||||
class PXEAndAMTISCSIDriver(base.BaseDriver):
|
class PXEAndAMTISCSIDriver(base.BaseDriver):
|
||||||
|
@ -58,9 +56,8 @@ class PXEAndAMTISCSIDriver(base.BaseDriver):
|
||||||
reason=_("Unable to import pywsman library"))
|
reason=_("Unable to import pywsman library"))
|
||||||
self.power = amt_power.AMTPower()
|
self.power = amt_power.AMTPower()
|
||||||
self.boot = pxe.PXEBoot()
|
self.boot = pxe.PXEBoot()
|
||||||
self.deploy = iscsi_deploy.ISCSIDeploy()
|
self.deploy = amt_deploy.AMTISCSIDeploy()
|
||||||
self.management = amt_management.AMTManagement()
|
self.management = amt_management.AMTManagement()
|
||||||
self.vendor = amt_vendor.AMTPXEVendorPassthru()
|
|
||||||
|
|
||||||
|
|
||||||
class PXEAndAMTAgentDriver(base.BaseDriver):
|
class PXEAndAMTAgentDriver(base.BaseDriver):
|
||||||
|
@ -82,4 +79,3 @@ class PXEAndAMTAgentDriver(base.BaseDriver):
|
||||||
self.boot = pxe.PXEBoot()
|
self.boot = pxe.PXEBoot()
|
||||||
self.deploy = agent.AgentDeploy()
|
self.deploy = agent.AgentDeploy()
|
||||||
self.management = amt_management.AMTManagement()
|
self.management = amt_management.AMTManagement()
|
||||||
self.vendor = agent.AgentVendorInterface()
|
|
||||||
|
|
|
@ -57,7 +57,6 @@ class PXEIBootISCSIDriver(base.BaseDriver):
|
||||||
self.power = iboot_power.IBootPower()
|
self.power = iboot_power.IBootPower()
|
||||||
self.boot = pxe.PXEBoot()
|
self.boot = pxe.PXEBoot()
|
||||||
self.deploy = iscsi_deploy.ISCSIDeploy()
|
self.deploy = iscsi_deploy.ISCSIDeploy()
|
||||||
self.vendor = iscsi_deploy.VendorPassthru()
|
|
||||||
|
|
||||||
|
|
||||||
class PXEIBootAgentDriver(base.BaseDriver):
|
class PXEIBootAgentDriver(base.BaseDriver):
|
||||||
|
@ -78,4 +77,3 @@ class PXEIBootAgentDriver(base.BaseDriver):
|
||||||
self.power = iboot_power.IBootPower()
|
self.power = iboot_power.IBootPower()
|
||||||
self.boot = pxe.PXEBoot()
|
self.boot = pxe.PXEBoot()
|
||||||
self.deploy = agent.AgentDeploy()
|
self.deploy = agent.AgentDeploy()
|
||||||
self.vendor = agent.AgentVendorInterface()
|
|
||||||
|
|
|
@ -38,12 +38,10 @@ class AgentAndIPMIToolIntelNMDriver(base.BaseDriver):
|
||||||
self.deploy = agent.AgentDeploy()
|
self.deploy = agent.AgentDeploy()
|
||||||
self.management = ipmitool.IPMIManagement()
|
self.management = ipmitool.IPMIManagement()
|
||||||
self.console = ipmitool.IPMIShellinaboxConsole()
|
self.console = ipmitool.IPMIShellinaboxConsole()
|
||||||
self.agent_vendor = agent.AgentVendorInterface()
|
|
||||||
self.ipmi_vendor = ipmitool.VendorPassthru()
|
self.ipmi_vendor = ipmitool.VendorPassthru()
|
||||||
self.nm_vendor = nm_vendor.IntelNMVendorPassthru()
|
self.nm_vendor = nm_vendor.IntelNMVendorPassthru()
|
||||||
self.mapping = {'send_raw': self.ipmi_vendor,
|
self.mapping = {'send_raw': self.ipmi_vendor,
|
||||||
'bmc_reset': self.ipmi_vendor,
|
'bmc_reset': self.ipmi_vendor,
|
||||||
'heartbeat': self.agent_vendor,
|
|
||||||
'control_nm_policy': self.nm_vendor,
|
'control_nm_policy': self.nm_vendor,
|
||||||
'set_nm_policy': self.nm_vendor,
|
'set_nm_policy': self.nm_vendor,
|
||||||
'get_nm_policy': self.nm_vendor,
|
'get_nm_policy': self.nm_vendor,
|
||||||
|
@ -55,10 +53,7 @@ class AgentAndIPMIToolIntelNMDriver(base.BaseDriver):
|
||||||
'get_nm_version': self.nm_vendor,
|
'get_nm_version': self.nm_vendor,
|
||||||
'get_nm_statistics': self.nm_vendor,
|
'get_nm_statistics': self.nm_vendor,
|
||||||
'reset_nm_statistics': self.nm_vendor}
|
'reset_nm_statistics': self.nm_vendor}
|
||||||
self.driver_passthru_mapping = {'lookup': self.agent_vendor}
|
self.vendor = utils.MixinVendorInterface(self.mapping)
|
||||||
self.vendor = utils.MixinVendorInterface(
|
|
||||||
self.mapping,
|
|
||||||
driver_passthru_mapping=self.driver_passthru_mapping)
|
|
||||||
self.raid = agent.AgentRAID()
|
self.raid = agent.AgentRAID()
|
||||||
self.inspect = inspector.Inspector.create_if_enabled(
|
self.inspect = inspector.Inspector.create_if_enabled(
|
||||||
'AgentAndIPMIToolDriver')
|
'AgentAndIPMIToolDriver')
|
||||||
|
|
|
@ -45,7 +45,6 @@ class PXELibvirtAgentDriver(base.BaseDriver):
|
||||||
self.boot = pxe.PXEBoot()
|
self.boot = pxe.PXEBoot()
|
||||||
self.deploy = agent.AgentDeploy()
|
self.deploy = agent.AgentDeploy()
|
||||||
self.management = power.LibvirtManagement()
|
self.management = power.LibvirtManagement()
|
||||||
self.vendor = agent.AgentVendorInterface()
|
|
||||||
self.raid = agent.AgentRAID()
|
self.raid = agent.AgentRAID()
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,4 +64,3 @@ class PXELibvirtISCSIDriver(base.BaseDriver):
|
||||||
self.boot = pxe.PXEBoot()
|
self.boot = pxe.PXEBoot()
|
||||||
self.deploy = iscsi_deploy.ISCSIDeploy()
|
self.deploy = iscsi_deploy.ISCSIDeploy()
|
||||||
self.management = power.LibvirtManagement()
|
self.management = power.LibvirtManagement()
|
||||||
self.vendor = iscsi_deploy.VendorPassthru()
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
"""Test class for AMT Vendor methods."""
|
"""Test class for AMT Deploy methods."""
|
||||||
|
|
||||||
from ironic.common import boot_devices
|
from ironic.common import boot_devices
|
||||||
from ironic.common import states
|
from ironic.common import states
|
||||||
|
@ -28,37 +28,19 @@ from ironic_staging_drivers.tests.unit.amt import utils as test_utils
|
||||||
INFO_DICT = test_utils.get_test_amt_info()
|
INFO_DICT = test_utils.get_test_amt_info()
|
||||||
|
|
||||||
|
|
||||||
class AMTPXEVendorPassthruTestCase(db_base.DbTestCase):
|
class AMTISCSIDeployTestCase(db_base.DbTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(AMTPXEVendorPassthruTestCase, self).setUp()
|
super(AMTISCSIDeployTestCase, self).setUp()
|
||||||
mgr_utils.mock_the_extension_manager(driver="pxe_amt_iscsi")
|
mgr_utils.mock_the_extension_manager(driver="pxe_amt_iscsi")
|
||||||
self.node = obj_utils.create_test_node(
|
self.node = obj_utils.create_test_node(
|
||||||
self.context, driver='pxe_amt_iscsi', driver_info=INFO_DICT)
|
self.context, driver='pxe_amt_iscsi', driver_info=INFO_DICT)
|
||||||
|
|
||||||
def test_vendor_routes(self):
|
|
||||||
expected = ['heartbeat']
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid,
|
|
||||||
shared=True) as task:
|
|
||||||
vendor_routes = task.driver.vendor.vendor_routes
|
|
||||||
self.assertIsInstance(vendor_routes, dict)
|
|
||||||
self.assertEqual(sorted(expected), sorted(list(vendor_routes)))
|
|
||||||
|
|
||||||
def test_driver_routes(self):
|
|
||||||
expected = ['lookup']
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid,
|
|
||||||
shared=True) as task:
|
|
||||||
driver_routes = task.driver.vendor.driver_routes
|
|
||||||
self.assertIsInstance(driver_routes, dict)
|
|
||||||
self.assertEqual(sorted(expected), sorted(list(driver_routes)))
|
|
||||||
|
|
||||||
@mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device',
|
@mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device',
|
||||||
spec_set=True, autospec=True)
|
spec_set=True, autospec=True)
|
||||||
@mock.patch.object(iscsi_deploy.VendorPassthru, 'continue_deploy',
|
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'continue_deploy',
|
||||||
spec_set=True, autospec=True)
|
spec_set=True, autospec=True)
|
||||||
def test_vendorpassthru_continue_deploy_netboot(self,
|
def test_continue_deploy_netboot(self, mock_continue, mock_ensure):
|
||||||
mock_pxe_vendorpassthru,
|
|
||||||
mock_ensure):
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid,
|
with task_manager.acquire(self.context, self.node.uuid,
|
||||||
shared=False) as task:
|
shared=False) as task:
|
||||||
task.node.provision_state = states.DEPLOYWAIT
|
task.node.provision_state = states.DEPLOYWAIT
|
||||||
|
@ -66,25 +48,23 @@ class AMTPXEVendorPassthruTestCase(db_base.DbTestCase):
|
||||||
task.node.instance_info['capabilities'] = {
|
task.node.instance_info['capabilities'] = {
|
||||||
"boot_option": "netboot"
|
"boot_option": "netboot"
|
||||||
}
|
}
|
||||||
task.driver.vendor.continue_deploy(task)
|
task.driver.deploy.continue_deploy(task)
|
||||||
mock_ensure.assert_called_with(
|
mock_ensure.assert_called_with(
|
||||||
task.driver.management, task.node, boot_devices.PXE)
|
task.driver.management, task.node, boot_devices.PXE)
|
||||||
mock_pxe_vendorpassthru.assert_called_once_with(
|
mock_continue.assert_called_once_with(
|
||||||
task.driver.vendor, task)
|
task.driver.deploy, task)
|
||||||
|
|
||||||
@mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device',
|
@mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device',
|
||||||
spec_set=True, autospec=True)
|
spec_set=True, autospec=True)
|
||||||
@mock.patch.object(iscsi_deploy.VendorPassthru, 'continue_deploy',
|
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'continue_deploy',
|
||||||
spec_set=True, autospec=True)
|
spec_set=True, autospec=True)
|
||||||
def test_vendorpassthru_continue_deploy_localboot(self,
|
def test_continue_deploy_localboot(self, mock_continue, mock_ensure):
|
||||||
mock_pxe_vendorpassthru,
|
|
||||||
mock_ensure):
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid,
|
with task_manager.acquire(self.context, self.node.uuid,
|
||||||
shared=False) as task:
|
shared=False) as task:
|
||||||
task.node.provision_state = states.DEPLOYWAIT
|
task.node.provision_state = states.DEPLOYWAIT
|
||||||
task.node.target_provision_state = states.ACTIVE
|
task.node.target_provision_state = states.ACTIVE
|
||||||
task.node.instance_info['capabilities'] = {"boot_option": "local"}
|
task.node.instance_info['capabilities'] = {"boot_option": "local"}
|
||||||
task.driver.vendor.continue_deploy(task,)
|
task.driver.deploy.continue_deploy(task,)
|
||||||
self.assertFalse(mock_ensure.called)
|
self.assertFalse(mock_ensure.called)
|
||||||
mock_pxe_vendorpassthru.assert_called_once_with(
|
mock_continue.assert_called_once_with(
|
||||||
task.driver.vendor, task)
|
task.driver.deploy, task)
|
|
@ -46,7 +46,6 @@ class PXEWakeOnLanISCSIDriver(base.BaseDriver):
|
||||||
self.boot = pxe.PXEBoot()
|
self.boot = pxe.PXEBoot()
|
||||||
self.power = wol_power.WakeOnLanPower()
|
self.power = wol_power.WakeOnLanPower()
|
||||||
self.deploy = iscsi_deploy.ISCSIDeploy()
|
self.deploy = iscsi_deploy.ISCSIDeploy()
|
||||||
self.vendor = iscsi_deploy.VendorPassthru()
|
|
||||||
|
|
||||||
|
|
||||||
class PXEWakeOnLanAgentDriver(base.BaseDriver):
|
class PXEWakeOnLanAgentDriver(base.BaseDriver):
|
||||||
|
@ -64,4 +63,3 @@ class PXEWakeOnLanAgentDriver(base.BaseDriver):
|
||||||
self.boot = pxe.PXEBoot()
|
self.boot = pxe.PXEBoot()
|
||||||
self.power = wol_power.WakeOnLanPower()
|
self.power = wol_power.WakeOnLanPower()
|
||||||
self.deploy = agent.AgentDeploy()
|
self.deploy = agent.AgentDeploy()
|
||||||
self.vendor = agent.AgentVendorInterface()
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- Implementations and dependency on Ironic Python Agent (IPA)
|
||||||
|
lookup/heartbeats as vendor passthru methods is removed from
|
||||||
|
all drivers in ``ironic-staging-drivers`` as it has been deprecated
|
||||||
|
and removed from ironic as well.
|
||||||
|
|
||||||
|
Effectively, ``AMT``, ``iBoot``, ``Libvirt`` and ``WoL`` drivers
|
||||||
|
no longer have any vendor passthru methods.
|
||||||
|
``Intel NodeManager`` drivers still have most of their vendor passthru
|
||||||
|
methods related to IPMI and Intel NodeManager-specific extensions,
|
||||||
|
except for ``lookup`` and ``heartbeat`` vendor passthru methods.
|
||||||
|
|
||||||
|
This also means that drivers in ``ironic-staging-drivers`` are now
|
||||||
|
incompatible with ironic < 6.1.0 and IPA < 1.5.0.
|
||||||
|
On upgrade of ironic-staging-drivers, operators must ensure that their
|
||||||
|
ironic version and verison of IPA in deploy ramdisks is compatible and
|
||||||
|
upgrade those too if needed.
|
||||||
|
Users of custom (non-IPA-based) implementations for lookup/heartbeats
|
||||||
|
from ramdisk are required to update those to use ironic API v1.22.
|
Loading…
Reference in New Issue