Merge "Timing metrics: iLO drivers"

This commit is contained in:
Jenkins 2016-09-14 08:50:35 +00:00 committed by Gerrit Code Review
commit d8fa47f47d
7 changed files with 63 additions and 0 deletions

View File

@ -18,6 +18,7 @@ Boot Interface for iLO drivers and its supporting methods.
import os import os
import tempfile import tempfile
from ironic_lib import metrics_utils
from ironic_lib import utils as ironic_utils from ironic_lib import utils as ironic_utils
from oslo_config import cfg from oslo_config import cfg
from oslo_log import log as logging from oslo_log import log as logging
@ -39,6 +40,8 @@ from ironic.drivers.modules.ilo import common as ilo_common
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
METRICS = metrics_utils.get_metrics_logger(__name__)
CONF = cfg.CONF CONF = cfg.CONF
REQUIRED_PROPERTIES = { REQUIRED_PROPERTIES = {
@ -250,6 +253,7 @@ class IloVirtualMediaBoot(base.BootInterface):
def get_properties(self): def get_properties(self):
return COMMON_PROPERTIES return COMMON_PROPERTIES
@METRICS.timer('IloVirtualMediaBoot.validate')
def validate(self, task): def validate(self, task):
"""Validate the deployment information for the task's node. """Validate the deployment information for the task's node.
@ -272,6 +276,7 @@ class IloVirtualMediaBoot(base.BootInterface):
props = ['kernel', 'ramdisk'] props = ['kernel', 'ramdisk']
deploy_utils.validate_image_properties(task.context, d_info, props) deploy_utils.validate_image_properties(task.context, d_info, props)
@METRICS.timer('IloVirtualMediaBoot.prepare_ramdisk')
def prepare_ramdisk(self, task, ramdisk_params): def prepare_ramdisk(self, task, ramdisk_params):
"""Prepares the boot of deploy ramdisk using virtual media. """Prepares the boot of deploy ramdisk using virtual media.
@ -320,6 +325,7 @@ class IloVirtualMediaBoot(base.BootInterface):
ilo_common.setup_vmedia(task, deploy_iso, ramdisk_params) ilo_common.setup_vmedia(task, deploy_iso, ramdisk_params)
@METRICS.timer('IloVirtualMediaBoot.prepare_instance')
def prepare_instance(self, task): def prepare_instance(self, task):
"""Prepares the boot of instance. """Prepares the boot of instance.
@ -356,6 +362,7 @@ class IloVirtualMediaBoot(base.BootInterface):
LOG.warning(_LW("The UUID for the root partition could not " LOG.warning(_LW("The UUID for the root partition could not "
"be found for node %s"), node.uuid) "be found for node %s"), node.uuid)
@METRICS.timer('IloVirtualMediaBoot.clean_up_instance')
def clean_up_instance(self, task): def clean_up_instance(self, task):
"""Cleans up the boot of instance. """Cleans up the boot of instance.
@ -377,6 +384,7 @@ class IloVirtualMediaBoot(base.BootInterface):
ilo_common.cleanup_vmedia_boot(task) ilo_common.cleanup_vmedia_boot(task)
@METRICS.timer('IloVirtualMediaBoot.clean_up_ramdisk')
def clean_up_ramdisk(self, task): def clean_up_ramdisk(self, task):
"""Cleans up the boot of ironic ramdisk. """Cleans up the boot of ironic ramdisk.

View File

@ -15,11 +15,15 @@
iLO Deploy Driver(s) and supporting methods. iLO Deploy Driver(s) and supporting methods.
""" """
from ironic_lib import metrics_utils
from ironic.common import exception from ironic.common import exception
from ironic.common.i18n import _ from ironic.common.i18n import _
from ironic.drivers.modules.ilo import common as ilo_common from ironic.drivers.modules.ilo import common as ilo_common
from ironic.drivers.modules import ipmitool from ironic.drivers.modules import ipmitool
METRICS = metrics_utils.get_metrics_logger(__name__)
class IloConsoleInterface(ipmitool.IPMIShellinaboxConsole): class IloConsoleInterface(ipmitool.IPMIShellinaboxConsole):
"""A ConsoleInterface that uses ipmitool and shellinabox.""" """A ConsoleInterface that uses ipmitool and shellinabox."""
@ -29,6 +33,7 @@ class IloConsoleInterface(ipmitool.IPMIShellinaboxConsole):
props.update(ilo_common.CONSOLE_PROPERTIES) props.update(ilo_common.CONSOLE_PROPERTIES)
return props return props
@METRICS.timer('IloConsoleInterface.validate')
def validate(self, task): def validate(self, task):
"""Validate the Node console info. """Validate the Node console info.

View File

@ -15,6 +15,7 @@
iLO Deploy Driver(s) and supporting methods. iLO Deploy Driver(s) and supporting methods.
""" """
from ironic_lib import metrics_utils
from oslo_log import log as logging from oslo_log import log as logging
from ironic.common import boot_devices from ironic.common import boot_devices
@ -35,6 +36,8 @@ from ironic.drivers.modules import pxe
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
METRICS = metrics_utils.get_metrics_logger(__name__)
def _prepare_agent_vmedia_boot(task): def _prepare_agent_vmedia_boot(task):
"""Ejects virtual media devices and prepares for vmedia boot.""" """Ejects virtual media devices and prepares for vmedia boot."""
@ -162,6 +165,7 @@ class IloVirtualMediaIscsiDeploy(iscsi_deploy.ISCSIDeploy):
def get_properties(self): def get_properties(self):
return {} return {}
@METRICS.timer('IloVirtualMediaIscsiDeploy.validate')
def validate(self, task): def validate(self, task):
"""Validate the prerequisites for virtual media based deploy. """Validate the prerequisites for virtual media based deploy.
@ -176,6 +180,7 @@ class IloVirtualMediaIscsiDeploy(iscsi_deploy.ISCSIDeploy):
_validate(task) _validate(task)
super(IloVirtualMediaIscsiDeploy, self).validate(task) super(IloVirtualMediaIscsiDeploy, self).validate(task)
@METRICS.timer('IloVirtualMediaIscsiDeploy.tear_down')
@task_manager.require_exclusive_lock @task_manager.require_exclusive_lock
def tear_down(self, task): def tear_down(self, task):
"""Tear down a previous deployment on the task's node. """Tear down a previous deployment on the task's node.
@ -192,6 +197,7 @@ class IloVirtualMediaIscsiDeploy(iscsi_deploy.ISCSIDeploy):
_disable_secure_boot_if_supported(task) _disable_secure_boot_if_supported(task)
return super(IloVirtualMediaIscsiDeploy, self).tear_down(task) return super(IloVirtualMediaIscsiDeploy, self).tear_down(task)
@METRICS.timer('IloVirtualMediaIscsiDeploy.prepare')
def prepare(self, task): def prepare(self, task):
"""Prepare the deployment environment for this task's node. """Prepare the deployment environment for this task's node.
@ -203,6 +209,7 @@ class IloVirtualMediaIscsiDeploy(iscsi_deploy.ISCSIDeploy):
super(IloVirtualMediaIscsiDeploy, self).prepare(task) super(IloVirtualMediaIscsiDeploy, self).prepare(task)
@METRICS.timer('IloVirtualMediaIscsiDeploy.prepare_cleaning')
def prepare_cleaning(self, task): def prepare_cleaning(self, task):
"""Boot into the agent to prepare for cleaning. """Boot into the agent to prepare for cleaning.
@ -228,6 +235,7 @@ class IloVirtualMediaAgentDeploy(agent.AgentDeploy):
""" """
return ilo_boot.COMMON_PROPERTIES return ilo_boot.COMMON_PROPERTIES
@METRICS.timer('IloVirtualMediaAgentDeploy.validate')
def validate(self, task): def validate(self, task):
"""Validate the prerequisites for virtual media based deploy. """Validate the prerequisites for virtual media based deploy.
@ -242,6 +250,7 @@ class IloVirtualMediaAgentDeploy(agent.AgentDeploy):
_validate(task) _validate(task)
super(IloVirtualMediaAgentDeploy, self).validate(task) super(IloVirtualMediaAgentDeploy, self).validate(task)
@METRICS.timer('IloVirtualMediaAgentDeploy.tear_down')
@task_manager.require_exclusive_lock @task_manager.require_exclusive_lock
def tear_down(self, task): def tear_down(self, task):
"""Tear down a previous deployment on the task's node. """Tear down a previous deployment on the task's node.
@ -254,6 +263,7 @@ class IloVirtualMediaAgentDeploy(agent.AgentDeploy):
_disable_secure_boot_if_supported(task) _disable_secure_boot_if_supported(task)
return super(IloVirtualMediaAgentDeploy, self).tear_down(task) return super(IloVirtualMediaAgentDeploy, self).tear_down(task)
@METRICS.timer('IloVirtualMediaAgentDeploy.prepare')
def prepare(self, task): def prepare(self, task):
"""Prepare the deployment environment for this node. """Prepare the deployment environment for this node.
@ -265,6 +275,7 @@ class IloVirtualMediaAgentDeploy(agent.AgentDeploy):
super(IloVirtualMediaAgentDeploy, self).prepare(task) super(IloVirtualMediaAgentDeploy, self).prepare(task)
@METRICS.timer('IloVirtualMediaAgentDeploy.prepare_cleaning')
def prepare_cleaning(self, task): def prepare_cleaning(self, task):
"""Boot into the agent to prepare for cleaning. """Boot into the agent to prepare for cleaning.
@ -279,6 +290,7 @@ class IloVirtualMediaAgentDeploy(agent.AgentDeploy):
manager_utils.node_power_action(task, states.POWER_OFF) manager_utils.node_power_action(task, states.POWER_OFF)
return super(IloVirtualMediaAgentDeploy, self).prepare_cleaning(task) return super(IloVirtualMediaAgentDeploy, self).prepare_cleaning(task)
@METRICS.timer('IloVirtualMediaAgentDeploy.get_clean_steps')
def get_clean_steps(self, task): def get_clean_steps(self, task):
"""Get the list of clean steps from the agent. """Get the list of clean steps from the agent.
@ -305,6 +317,7 @@ class IloVirtualMediaAgentDeploy(agent.AgentDeploy):
class IloPXEDeploy(iscsi_deploy.ISCSIDeploy): class IloPXEDeploy(iscsi_deploy.ISCSIDeploy):
@METRICS.timer('IloPXEDeploy.prepare')
def prepare(self, task): def prepare(self, task):
"""Prepare the deployment environment for this task's node. """Prepare the deployment environment for this task's node.
@ -334,6 +347,7 @@ class IloPXEDeploy(iscsi_deploy.ISCSIDeploy):
super(IloPXEDeploy, self).prepare(task) super(IloPXEDeploy, self).prepare(task)
@METRICS.timer('IloPXEDeploy.deploy')
def deploy(self, task): def deploy(self, task):
"""Start deployment of the task's node. """Start deployment of the task's node.
@ -346,6 +360,7 @@ class IloPXEDeploy(iscsi_deploy.ISCSIDeploy):
manager_utils.node_set_boot_device(task, boot_devices.PXE) manager_utils.node_set_boot_device(task, boot_devices.PXE)
return super(IloPXEDeploy, self).deploy(task) return super(IloPXEDeploy, self).deploy(task)
@METRICS.timer('IloPXEDeploy.tear_down')
@task_manager.require_exclusive_lock @task_manager.require_exclusive_lock
def tear_down(self, task): def tear_down(self, task):
"""Tear down a previous deployment on the task's node. """Tear down a previous deployment on the task's node.
@ -359,6 +374,7 @@ class IloPXEDeploy(iscsi_deploy.ISCSIDeploy):
_disable_secure_boot_if_supported(task) _disable_secure_boot_if_supported(task)
return super(IloPXEDeploy, self).tear_down(task) return super(IloPXEDeploy, self).tear_down(task)
@METRICS.timer('IloPXEDeploy.prepare_cleaning')
def prepare_cleaning(self, task): def prepare_cleaning(self, task):
"""Boot into the agent to prepare for cleaning. """Boot into the agent to prepare for cleaning.

View File

@ -12,6 +12,7 @@
""" """
iLO Inspect Interface iLO Inspect Interface
""" """
from ironic_lib import metrics_utils
from oslo_log import log as logging from oslo_log import log as logging
from oslo_utils import importutils from oslo_utils import importutils
@ -28,6 +29,8 @@ ilo_error = importutils.try_import('proliantutils.exception')
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
METRICS = metrics_utils.get_metrics_logger(__name__)
CAPABILITIES_KEYS = {'BootMode', 'secure_boot', 'rom_firmware_version', CAPABILITIES_KEYS = {'BootMode', 'secure_boot', 'rom_firmware_version',
'ilo_firmware_version', 'server_model', 'max_raid_level', 'ilo_firmware_version', 'server_model', 'max_raid_level',
'pci_gpu_devices', 'sr_iov_devices', 'nic_capacity'} 'pci_gpu_devices', 'sr_iov_devices', 'nic_capacity'}
@ -162,6 +165,7 @@ class IloInspect(base.InspectInterface):
def get_properties(self): def get_properties(self):
return ilo_common.REQUIRED_PROPERTIES return ilo_common.REQUIRED_PROPERTIES
@METRICS.timer('IloInspect.validate')
def validate(self, task): def validate(self, task):
"""Check that 'driver_info' contains required ILO credentials. """Check that 'driver_info' contains required ILO credentials.
@ -176,6 +180,7 @@ class IloInspect(base.InspectInterface):
node = task.node node = task.node
ilo_common.parse_driver_info(node) ilo_common.parse_driver_info(node)
@METRICS.timer('IloInspect.inspect_hardware')
def inspect_hardware(self, task): def inspect_hardware(self, task):
"""Inspect hardware to get the hardware properties. """Inspect hardware to get the hardware properties.

View File

@ -15,6 +15,7 @@
iLO Management Interface iLO Management Interface
""" """
from ironic_lib import metrics_utils
from oslo_log import log as logging from oslo_log import log as logging
from oslo_utils import excutils from oslo_utils import excutils
from oslo_utils import importutils from oslo_utils import importutils
@ -32,6 +33,8 @@ from ironic.drivers.modules import ipmitool
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
METRICS = metrics_utils.get_metrics_logger(__name__)
ilo_error = importutils.try_import('proliantutils.exception') ilo_error = importutils.try_import('proliantutils.exception')
BOOT_DEVICE_MAPPING_TO_ILO = { BOOT_DEVICE_MAPPING_TO_ILO = {
@ -86,6 +89,7 @@ class IloManagement(base.ManagementInterface):
def get_properties(self): def get_properties(self):
return MANAGEMENT_PROPERTIES return MANAGEMENT_PROPERTIES
@METRICS.timer('IloManagement.validate')
def validate(self, task): def validate(self, task):
"""Check that 'driver_info' contains required ILO credentials. """Check that 'driver_info' contains required ILO credentials.
@ -100,6 +104,7 @@ class IloManagement(base.ManagementInterface):
""" """
ilo_common.parse_driver_info(task.node) ilo_common.parse_driver_info(task.node)
@METRICS.timer('IloManagement.get_supported_boot_devices')
def get_supported_boot_devices(self, task): def get_supported_boot_devices(self, task):
"""Get a list of the supported boot devices. """Get a list of the supported boot devices.
@ -110,6 +115,7 @@ class IloManagement(base.ManagementInterface):
""" """
return list(BOOT_DEVICE_MAPPING_TO_ILO.keys()) return list(BOOT_DEVICE_MAPPING_TO_ILO.keys())
@METRICS.timer('IloManagement.get_boot_device')
def get_boot_device(self, task): def get_boot_device(self, task):
"""Get the current boot device for a node. """Get the current boot device for a node.
@ -152,6 +158,7 @@ class IloManagement(base.ManagementInterface):
return {'boot_device': boot_device, 'persistent': persistent} return {'boot_device': boot_device, 'persistent': persistent}
@METRICS.timer('IloManagement.set_boot_device')
@task_manager.require_exclusive_lock @task_manager.require_exclusive_lock
def set_boot_device(self, task, device, persistent=False): def set_boot_device(self, task, device, persistent=False):
"""Set the boot device for a node. """Set the boot device for a node.
@ -191,6 +198,7 @@ class IloManagement(base.ManagementInterface):
LOG.debug("Node %(uuid)s set to boot from %(device)s.", LOG.debug("Node %(uuid)s set to boot from %(device)s.",
{'uuid': task.node.uuid, 'device': device}) {'uuid': task.node.uuid, 'device': device})
@METRICS.timer('IloManagement.get_sensors_data')
def get_sensors_data(self, task): def get_sensors_data(self, task):
"""Get sensors data. """Get sensors data.
@ -207,6 +215,7 @@ class IloManagement(base.ManagementInterface):
ipmi_management = ipmitool.IPMIManagement() ipmi_management = ipmitool.IPMIManagement()
return ipmi_management.get_sensors_data(task) return ipmi_management.get_sensors_data(task)
@METRICS.timer('IloManagement.reset_ilo')
@base.clean_step(priority=CONF.ilo.clean_priority_reset_ilo) @base.clean_step(priority=CONF.ilo.clean_priority_reset_ilo)
def reset_ilo(self, task): def reset_ilo(self, task):
"""Resets the iLO. """Resets the iLO.
@ -216,6 +225,7 @@ class IloManagement(base.ManagementInterface):
""" """
return _execute_ilo_clean_step(task.node, 'reset_ilo') return _execute_ilo_clean_step(task.node, 'reset_ilo')
@METRICS.timer('IloManagement.reset_ilo_credential')
@base.clean_step(priority=CONF.ilo.clean_priority_reset_ilo_credential) @base.clean_step(priority=CONF.ilo.clean_priority_reset_ilo_credential)
def reset_ilo_credential(self, task): def reset_ilo_credential(self, task):
"""Resets the iLO password. """Resets the iLO password.
@ -238,6 +248,7 @@ class IloManagement(base.ManagementInterface):
task.node.driver_info = info task.node.driver_info = info
task.node.save() task.node.save()
@METRICS.timer('IloManagement.reset_bios_to_default')
@base.clean_step(priority=CONF.ilo.clean_priority_reset_bios_to_default) @base.clean_step(priority=CONF.ilo.clean_priority_reset_bios_to_default)
def reset_bios_to_default(self, task): def reset_bios_to_default(self, task):
"""Resets the BIOS settings to default values. """Resets the BIOS settings to default values.
@ -250,6 +261,7 @@ class IloManagement(base.ManagementInterface):
""" """
return _execute_ilo_clean_step(task.node, 'reset_bios_to_default') return _execute_ilo_clean_step(task.node, 'reset_bios_to_default')
@METRICS.timer('IloManagement.reset_secure_boot_keys_to_default')
@base.clean_step(priority=CONF.ilo. @base.clean_step(priority=CONF.ilo.
clean_priority_reset_secure_boot_keys_to_default) clean_priority_reset_secure_boot_keys_to_default)
def reset_secure_boot_keys_to_default(self, task): def reset_secure_boot_keys_to_default(self, task):
@ -263,6 +275,7 @@ class IloManagement(base.ManagementInterface):
""" """
return _execute_ilo_clean_step(task.node, 'reset_secure_boot_keys') return _execute_ilo_clean_step(task.node, 'reset_secure_boot_keys')
@METRICS.timer('IloManagement.clear_secure_boot_keys')
@base.clean_step(priority=CONF.ilo.clean_priority_clear_secure_boot_keys) @base.clean_step(priority=CONF.ilo.clean_priority_clear_secure_boot_keys)
def clear_secure_boot_keys(self, task): def clear_secure_boot_keys(self, task):
"""Clear all secure boot keys. """Clear all secure boot keys.
@ -275,6 +288,7 @@ class IloManagement(base.ManagementInterface):
""" """
return _execute_ilo_clean_step(task.node, 'clear_secure_boot_keys') return _execute_ilo_clean_step(task.node, 'clear_secure_boot_keys')
@METRICS.timer('IloManagement.activate_license')
@base.clean_step(priority=0, abortable=False, argsinfo={ @base.clean_step(priority=0, abortable=False, argsinfo={
'ilo_license_key': { 'ilo_license_key': {
'description': ( 'description': (
@ -308,6 +322,7 @@ class IloManagement(base.ManagementInterface):
LOG.info(_LI("iLO license activated for node %(node)s."), LOG.info(_LI("iLO license activated for node %(node)s."),
{'node': node.uuid}) {'node': node.uuid})
@METRICS.timer('IloManagement.update_firmware')
@base.clean_step(priority=0, abortable=False, argsinfo={ @base.clean_step(priority=0, abortable=False, argsinfo={
'firmware_update_mode': { 'firmware_update_mode': {
'description': ( 'description': (

View File

@ -16,6 +16,7 @@
iLO Power Driver iLO Power Driver
""" """
from ironic_lib import metrics_utils
from oslo_log import log as logging from oslo_log import log as logging
from oslo_service import loopingcall from oslo_service import loopingcall
from oslo_utils import importutils from oslo_utils import importutils
@ -34,6 +35,8 @@ ilo_error = importutils.try_import('proliantutils.exception')
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
METRICS = metrics_utils.get_metrics_logger(__name__)
def _attach_boot_iso_if_needed(task): def _attach_boot_iso_if_needed(task):
"""Attaches boot ISO for a deployed node. """Attaches boot ISO for a deployed node.
@ -172,6 +175,7 @@ class IloPower(base.PowerInterface):
def get_properties(self): def get_properties(self):
return ilo_common.COMMON_PROPERTIES return ilo_common.COMMON_PROPERTIES
@METRICS.timer('IloPower.validate')
def validate(self, task): def validate(self, task):
"""Check if node.driver_info contains the required iLO credentials. """Check if node.driver_info contains the required iLO credentials.
@ -181,6 +185,7 @@ class IloPower(base.PowerInterface):
""" """
ilo_common.parse_driver_info(task.node) ilo_common.parse_driver_info(task.node)
@METRICS.timer('IloPower.get_power_state')
def get_power_state(self, task): def get_power_state(self, task):
"""Gets the current power state. """Gets the current power state.
@ -193,6 +198,7 @@ class IloPower(base.PowerInterface):
""" """
return _get_power_state(task.node) return _get_power_state(task.node)
@METRICS.timer('IloPower.set_power_state')
@task_manager.require_exclusive_lock @task_manager.require_exclusive_lock
def set_power_state(self, task, power_state): def set_power_state(self, task, power_state):
"""Turn the current power state on or off. """Turn the current power state on or off.
@ -207,6 +213,7 @@ class IloPower(base.PowerInterface):
""" """
_set_power_state(task, power_state) _set_power_state(task, power_state)
@METRICS.timer('IloPower.reboot')
@task_manager.require_exclusive_lock @task_manager.require_exclusive_lock
def reboot(self, task): def reboot(self, task):
"""Reboot the node """Reboot the node

View File

@ -15,6 +15,7 @@
Vendor Interface for iLO drivers and its supporting methods. Vendor Interface for iLO drivers and its supporting methods.
""" """
from ironic_lib import metrics_utils
from oslo_log import log as logging from oslo_log import log as logging
from ironic.common import exception from ironic.common import exception
@ -30,10 +31,13 @@ from ironic.drivers.modules import iscsi_deploy
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
METRICS = metrics_utils.get_metrics_logger(__name__)
class IloVirtualMediaAgentVendorInterface(agent.AgentVendorInterface): class IloVirtualMediaAgentVendorInterface(agent.AgentVendorInterface):
"""Interface for vendor passthru related actions.""" """Interface for vendor passthru related actions."""
@METRICS.timer('IloVirtualMediaAgentVendorInterface.reboot_to_instance')
def reboot_to_instance(self, task): def reboot_to_instance(self, task):
node = task.node node = task.node
LOG.debug('Preparing to reboot to instance for node %s', LOG.debug('Preparing to reboot to instance for node %s',
@ -54,6 +58,7 @@ class IloVirtualMediaAgentVendorInterface(agent.AgentVendorInterface):
class VendorPassthru(iscsi_deploy.VendorPassthru): class VendorPassthru(iscsi_deploy.VendorPassthru):
"""Vendor-specific interfaces for iLO deploy drivers.""" """Vendor-specific interfaces for iLO deploy drivers."""
@METRICS.timer('IloVendorPassthru.validate')
def validate(self, task, method, **kwargs): def validate(self, task, method, **kwargs):
"""Validate vendor-specific actions. """Validate vendor-specific actions.
@ -74,6 +79,7 @@ class VendorPassthru(iscsi_deploy.VendorPassthru):
return return
super(VendorPassthru, self).validate(task, method, **kwargs) super(VendorPassthru, self).validate(task, method, **kwargs)
@METRICS.timer('IloVendorPassthru.continue_deploy')
@task_manager.require_exclusive_lock @task_manager.require_exclusive_lock
def continue_deploy(self, task, **kwargs): def continue_deploy(self, task, **kwargs):
"""Method invoked when deployed with the IPA ramdisk. """Method invoked when deployed with the IPA ramdisk.
@ -103,6 +109,7 @@ class VendorPassthru(iscsi_deploy.VendorPassthru):
deploy_utils.validate_image_properties( deploy_utils.validate_image_properties(
task.context, {'image_source': kwargs.get('boot_iso_href')}, []) task.context, {'image_source': kwargs.get('boot_iso_href')}, [])
@METRICS.timer('IloVendorPassthru.boot_into_iso')
@base.passthru(['POST']) @base.passthru(['POST'])
@task_manager.require_exclusive_lock @task_manager.require_exclusive_lock
def boot_into_iso(self, task, **kwargs): def boot_into_iso(self, task, **kwargs):