Add set_power_state to node api

Change-Id: Idcddc3e5de59dc72595577dae17e0b6350d07668
This commit is contained in:
Tzu-Mainn Chen 2014-09-01 05:48:43 +02:00
parent 986fa74186
commit 707c57628a
3 changed files with 35 additions and 1 deletions

View File

@ -203,6 +203,22 @@ class IronicNode(base.APIResourceWrapper):
node = ironicclient(request).node.update(uuid, [patch])
return cls(node, request)
@classmethod
def set_power_state(cls, request, uuid, power_state):
"""Set the power_state of node
:param request: request object
:type request: django.http.HttpRequest
:param uuid: ID of IronicNode
:type uuid: str
:param power_state: desired power_state
:type power_state: str
"""
node = ironicclient(request).node.set_power_state(uuid, power_state)
return cls(node, request)
@classmethod
def list_ports(cls, request, uuid):
"""Return a list of ports associated with this IronicNode
@ -347,6 +363,11 @@ class BareMetalNode(base.APIResourceWrapper):
raise NotImplementedError(
"set_maintenance is not defined for Nova BareMetal nodes")
@classmethod
def set_power_state(cls, request, uuid, power_state):
raise NotImplementedError(
"set_power_state is not defined for Nova BareMetal nodes")
@cached_property
def power_state(self):
"""Return a power state of this BareMetalNode
@ -509,6 +530,12 @@ class Node(base.APIResourceWrapper):
request, uuid, maintenance)
return cls(node)
@classmethod
def set_power_state(cls, request, uuid, power_state):
node = NodeClient(request).node_class.set_power_state(
request, uuid, power_state)
return cls(node)
@cached_property
def instance(self):
"""Return the Nova Instance associated with this Node

View File

@ -259,7 +259,9 @@ class BaseAutoDiscoverNodeFormset(BaseNodeFormset):
api.node.Node.set_maintenance(request,
node.uuid,
True)
#TODO(tzumainn): now we need to boot the node
api.node.Node.set_power_state(request,
node.uuid,
'reboot')
except Exception:
success = False
exceptions.handle(request, _('Unable to register node.'))

View File

@ -106,6 +106,11 @@ class NodeAPITests(test.APITestCase):
with self.assertRaises(NotImplementedError):
api.node.Node.set_maintenance(self.request, node.uuid, False)
def test_node_set_power_state(self):
node = self.baremetalclient_nodes.first()
with self.assertRaises(NotImplementedError):
api.node.Node.set_power_state(self.request, node.uuid, 'on')
def test_node_instance(self):
node = self.baremetalclient_nodes.first()
instance = self.novaclient_servers.first()