From 707c57628a32b77c30284722db22ae475db205f5 Mon Sep 17 00:00:00 2001 From: Tzu-Mainn Chen Date: Mon, 1 Sep 2014 05:48:43 +0200 Subject: [PATCH] Add set_power_state to node api Change-Id: Idcddc3e5de59dc72595577dae17e0b6350d07668 --- tuskar_ui/api/node.py | 27 +++++++++++++++++++++++++ tuskar_ui/infrastructure/nodes/forms.py | 4 +++- tuskar_ui/test/api_tests/node_tests.py | 5 +++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/tuskar_ui/api/node.py b/tuskar_ui/api/node.py index 41bed4b4b..d10401a2c 100644 --- a/tuskar_ui/api/node.py +++ b/tuskar_ui/api/node.py @@ -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 diff --git a/tuskar_ui/infrastructure/nodes/forms.py b/tuskar_ui/infrastructure/nodes/forms.py index d46daebd2..da99b6e38 100644 --- a/tuskar_ui/infrastructure/nodes/forms.py +++ b/tuskar_ui/infrastructure/nodes/forms.py @@ -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.')) diff --git a/tuskar_ui/test/api_tests/node_tests.py b/tuskar_ui/test/api_tests/node_tests.py index 3b70a8c90..691318ef9 100644 --- a/tuskar_ui/test/api_tests/node_tests.py +++ b/tuskar_ui/test/api_tests/node_tests.py @@ -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()