summaryrefslogtreecommitdiff
path: root/ironic/drivers/modules/redfish/raid.py
diff options
context:
space:
mode:
Diffstat (limited to 'ironic/drivers/modules/redfish/raid.py')
-rw-r--r--ironic/drivers/modules/redfish/raid.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/ironic/drivers/modules/redfish/raid.py b/ironic/drivers/modules/redfish/raid.py
index 65ef258ea..013553562 100644
--- a/ironic/drivers/modules/redfish/raid.py
+++ b/ironic/drivers/modules/redfish/raid.py
@@ -23,6 +23,7 @@ from oslo_utils import units
from ironic.common import exception
from ironic.common.i18n import _
+from ironic.common import raid as raid_common
from ironic.common import raid
from ironic.common import states
from ironic.conductor import task_manager
@@ -685,6 +686,30 @@ def create_virtual_disk(task, raid_controller, physical_disks, raid_level,
raise exception.RedfishError(error=exc)
+def update_raid_config(node):
+ """Updates node's raid_config field with current logical disks.
+
+ :param node: node for which to update the raid_config field
+ """
+ system = redfish_utils.get_system(node)
+ logical_disks = []
+ for stor in system.storage.get_members():
+ for vol in stor.volumes.get_members():
+ if vol.raid_type:
+ logical_disk = {
+ 'id': vol.identity,
+ 'name': vol.name,
+ 'controller': stor.identity,
+ 'size_gb': int(vol.capacity_bytes / units.Gi),
+ 'raid_level': next(
+ key for key, value in RAID_LEVELS.items()
+ if value['raid_type'] == vol.raid_type)
+ }
+ logical_disks.append(logical_disk)
+
+ raid_common.update_raid_info(node, {'logical_disks': logical_disks})
+
+
class RedfishRAID(base.RAIDInterface):
def __init__(self):
@@ -811,6 +836,8 @@ class RedfishRAID(base.RAIDInterface):
deploy_opts = deploy_utils.build_agent_options(task.node)
task.driver.boot.prepare_ramdisk(task, deploy_opts)
manager_utils.node_power_action(task, states.REBOOT)
+ else:
+ update_raid_config(node)
return self.post_create_configuration(
task, raid_configs, return_state=return_state)
@@ -840,6 +867,8 @@ class RedfishRAID(base.RAIDInterface):
deploy_opts = deploy_utils.build_agent_options(task.node)
task.driver.boot.prepare_ramdisk(task, deploy_opts)
manager_utils.node_power_action(task, states.REBOOT)
+ else:
+ update_raid_config(node)
return self.post_delete_configuration(
task, raid_configs, return_state=return_state)
@@ -969,6 +998,7 @@ class RedfishRAID(base.RAIDInterface):
task.upgrade_lock()
self._clear_raid_configs(node)
+ update_raid_config(task.node)
except exception.NodeNotFound:
LOG.info('During _query_raid_config_failed, node '
@@ -1106,6 +1136,7 @@ class RedfishRAID(base.RAIDInterface):
self._clear_raid_configs(node)
LOG.info('RAID configuration completed for node %(node)s',
{'node': node.uuid})
+ update_raid_config(task.node)
if task.node.clean_step:
manager_utils.notify_conductor_resume_clean(task)
else: