diff options
author | Naohiro Tamura <naohirot@jp.fujitsu.com> | 2015-01-17 00:13:24 +0900 |
---|---|---|
committer | Naohiro Tamura <naohirot@jp.fujitsu.com> | 2015-07-06 01:22:25 +0900 |
commit | f55ab34e54cffd10b263db6d74e2669e75de6e4b (patch) | |
tree | b2feab34df2a53fcf6bac14df50008fae12f9ccf /ironic/drivers/modules/irmc/power.py | |
parent | 29248df4432150e420d0d22a40f2ac47aa8870f8 (diff) | |
download | ironic-f55ab34e54cffd10b263db6d74e2669e75de6e4b.tar.gz |
Add iRMC Virtual Media Deploy module for iRMC Driver
This module enables PXE/TFTP less deployment capability to provision
PRIMERGY bare metal nodes (having iRMC S4 and beyond) by booting the
bare metal node with virtual media using NFS or CIFS from conductor
node to deploy the image.
Implements: blueprint irmc-virtualmedia-deploy-driver
Change-Id: I747b3245c7ba5e991abb07c894c8cd2b2d3c45e8
Diffstat (limited to 'ironic/drivers/modules/irmc/power.py')
-rw-r--r-- | ironic/drivers/modules/irmc/power.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/ironic/drivers/modules/irmc/power.py b/ironic/drivers/modules/irmc/power.py index 4b4ecf90b..de9cd8ae3 100644 --- a/ironic/drivers/modules/irmc/power.py +++ b/ironic/drivers/modules/irmc/power.py @@ -18,14 +18,17 @@ from oslo_config import cfg from oslo_log import log as logging from oslo_utils import importutils +from ironic.common import boot_devices from ironic.common import exception from ironic.common.i18n import _ from ironic.common.i18n import _LE from ironic.common import states from ironic.conductor import task_manager +from ironic.conductor import utils as manager_utils from ironic.drivers import base from ironic.drivers.modules import ipmitool from ironic.drivers.modules.irmc import common as irmc_common +from ironic.drivers.modules.irmc import deploy as irmc_deploy scci = importutils.try_import('scciclient.irmc.scci') @@ -39,6 +42,28 @@ if scci: states.REBOOT: scci.POWER_RESET} +def _attach_boot_iso_if_needed(task): + """Attaches boot ISO for a deployed node if it exists. + + This method checks the instance info of the bare metal node for a + boot ISO. If the instance info has a value of key 'irmc_boot_iso', + it indicates that 'boot_option' is 'netboot'. Threfore it attaches + the boot ISO on the bare metal node and then sets the node to boot from + virtual media cdrom. + + :param task: a TaskManager instance containing the node to act on. + :raises: IRMCOperationError if attaching virtual media failed. + :raises: InvalidParameterValue if the validation of the + ManagementInterface fails. + """ + d_info = task.node.driver_internal_info + node_state = task.node.provision_state + + if 'irmc_boot_iso' in d_info and node_state == states.ACTIVE: + irmc_deploy.setup_vmedia_for_boot(task, d_info['irmc_boot_iso']) + manager_utils.node_set_boot_device(task, boot_devices.CDROM) + + def _set_power_state(task, target_state): """Turns the server power on/off or do a reboot. @@ -53,6 +78,9 @@ def _set_power_state(task, target_state): node = task.node irmc_client = irmc_common.get_irmc_client(node) + if target_state in (states.POWER_ON, states.REBOOT): + _attach_boot_iso_if_needed(task) + try: irmc_client(STATES_MAP[target_state]) |