summaryrefslogtreecommitdiff
path: root/ironic/drivers/modules/irmc/power.py
diff options
context:
space:
mode:
authorNaohiro Tamura <naohirot@jp.fujitsu.com>2015-01-17 00:13:24 +0900
committerNaohiro Tamura <naohirot@jp.fujitsu.com>2015-07-06 01:22:25 +0900
commitf55ab34e54cffd10b263db6d74e2669e75de6e4b (patch)
treeb2feab34df2a53fcf6bac14df50008fae12f9ccf /ironic/drivers/modules/irmc/power.py
parent29248df4432150e420d0d22a40f2ac47aa8870f8 (diff)
downloadironic-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.py28
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])