Add new subcommand to set node boot source

Change-Id: I1b1606ce609d8d9c6bafb832767c8cffac18c564
This commit is contained in:
Lin Yang 2018-03-03 12:08:03 -08:00
parent 30a0934f61
commit eec72604a8
4 changed files with 69 additions and 3 deletions

View File

@ -345,13 +345,13 @@ class DetachEndpoint(command.Command):
rsd_client.node.detach(parsed_args.node, parsed_args.resource)
class ResetEndpoint(command.Command):
class ResetNode(command.Command):
"""Reset the power of the node."""
_description = "Reset the power of the node"
def get_parser(self, prog_name):
parser = super(ResetEndpoint, self).get_parser(prog_name)
parser = super(ResetNode, self).get_parser(prog_name)
parser.add_argument(
'node',
metavar='<node>',
@ -366,3 +366,36 @@ class ResetEndpoint(command.Command):
self.log.debug("take_action(%s)", parsed_args)
rsd_client = self.app.client_manager.rsd
rsd_client.node.reset(parsed_args.node, parsed_args.action)
class SetBootSource(command.Command):
"""Set the boot source of the node."""
_description = "Set the boot source of the node"
def get_parser(self, prog_name):
parser = super(SetBootSource, self).get_parser(prog_name)
parser.add_argument(
'node',
metavar='<node>',
help='ID of the node.')
parser.add_argument(
'--target',
metavar='<boot source>',
help='Boot source of this node, e.g. "pxe", "hdd".')
parser.add_argument(
'--enabled',
metavar='<frequency>',
help='The enabled frequency of this setting, '
'e.g. "once", "continuous", "disabled".')
parser.add_argument(
'--mode',
metavar='<boot mode>',
help='Boot mode, e.g. "legacy", "uefi".')
return parser
def take_action(self, parsed_args):
self.log.debug("take_action(%s)", parsed_args)
rsd_client = self.app.client_manager.rsd
rsd_client.node.set_boot_source(parsed_args.node, parsed_args.target,
parsed_args.enabled, parsed_args.mode)

View File

@ -124,3 +124,26 @@ class NodeTest(testtools.TestCase):
self.mgr.reset(node_id, 'fake_reset_value')
self.mgr.client.get_node.assert_called_once_with('/redfish/v1/Nodes/1')
mock_node.reset_node.assert_called_once_with('fake_reset_value')
def test_set_boot_source(self):
node_id = '1'
mock_node = mock.Mock()
self.client.get_node.return_value = mock_node
self.mgr.set_boot_source(node_id, 'pxe')
self.mgr.client.get_node.assert_called_once_with('/redfish/v1/Nodes/1')
mock_node.set_node_boot_source.assert_called_once_with(
'pxe', 'once', None)
self.client.reset_mock()
mock_node.reset_mock()
self.mgr.set_boot_source(node_id, 'pxe', 'continuous')
self.mgr.client.get_node.assert_called_once_with('/redfish/v1/Nodes/1')
mock_node.set_node_boot_source.assert_called_once_with(
'pxe', 'continuous', None)
self.client.reset_mock()
mock_node.reset_mock()
self.mgr.set_boot_source(node_id, 'pxe', mode='uefi')
self.mgr.client.get_node.assert_called_once_with('/redfish/v1/Nodes/1')
mock_node.set_node_boot_source.assert_called_once_with(
'pxe', 'once', 'uefi')

View File

@ -15,6 +15,8 @@
import os
from rsd_lib.resources.v2_1.node import constants as node_cons
from rsdclient.common import base
from rsdclient.common import utils
@ -84,3 +86,10 @@ class NodeManager(base.Manager):
def reset(self, node_id, action):
node = self.client.get_node(self._get_node_uri(node_id))
node.reset_node(action)
def set_boot_source(self, node_id, target, enabled=None, mode=None):
if not enabled:
enabled = node_cons.BOOT_SOURCE_ENABLED_ONCE
node = self.client.get_node(self._get_node_uri(node_id))
node.set_node_boot_source(target, enabled, mode)

View File

@ -34,7 +34,8 @@ openstack.rsd.v1 =
rsd_node_list = rsdclient.osc.v1.node:ListNode
rsd_node_attach = rsdclient.osc.v1.node:AttachEndpoint
rsd_node_detach = rsdclient.osc.v1.node:DetachEndpoint
rsd_node_reset = rsdclient.osc.v1.node:ResetEndpoint
rsd_node_reset = rsdclient.osc.v1.node:ResetNode
rsd_node_bootsource = rsdclient.osc.v1.node:SetBootSource
rsd_storage_list = rsdclient.osc.v1.storage_service:ListStorageServices
rsd_storage_show = rsdclient.osc.v1.storage_service:ShowStorageServices