From b393e77f81f9cc2acf661a7d726d2e306703a6fc Mon Sep 17 00:00:00 2001 From: Hua Wang Date: Wed, 3 Feb 2016 17:22:11 +0800 Subject: [PATCH] Remove node object from magnumclient The node object represents either a bare metal or virtual machine node that is provisioned with an OS to run the containers, or alternatively, run kubernetes. Magnum use Heat to deploy the nodes, so it is unnecessary to maintain node object in Magnum. Heat can do the work for us. The code about node object is useless now, so let's remove it from Magnum. Change-Id: Icb7bd21032b592c94033d93e22f460d8c2270fbe Closes-Bug: #1541255 Depends-On: If8761b06a364127683099afb4dc51ea551be6f89 --- magnumclient/tests/test_shell.py | 1 - magnumclient/tests/v1/test_nodes.py | 135 ---------------------- magnumclient/tests/v1/test_nodes_shell.py | 38 ------ magnumclient/v1/client.py | 2 - magnumclient/v1/nodes.py | 99 ---------------- magnumclient/v1/nodes_shell.py | 44 ------- magnumclient/v1/shell.py | 2 - 7 files changed, 321 deletions(-) delete mode 100644 magnumclient/tests/v1/test_nodes.py delete mode 100644 magnumclient/tests/v1/test_nodes_shell.py delete mode 100644 magnumclient/v1/nodes.py delete mode 100644 magnumclient/v1/nodes_shell.py diff --git a/magnumclient/tests/test_shell.py b/magnumclient/tests/test_shell.py index f4d07d8d..618c4297 100644 --- a/magnumclient/tests/test_shell.py +++ b/magnumclient/tests/test_shell.py @@ -122,7 +122,6 @@ class ShellTest(utils.TestCase): stdout, stderr = self.shell('bash-completion') # just check we have some output required = [ - '.*--type', '.*--json', '.*help', '.*bay-show', diff --git a/magnumclient/tests/v1/test_nodes.py b/magnumclient/tests/v1/test_nodes.py deleted file mode 100644 index 676c558f..00000000 --- a/magnumclient/tests/v1/test_nodes.py +++ /dev/null @@ -1,135 +0,0 @@ -# Copyright 2015 IBM Corp. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import copy - -import testtools -from testtools import matchers - -from magnumclient import exceptions -from magnumclient.tests import utils -from magnumclient.v1 import nodes - - -NODE1 = {'id': 123, - 'uuid': '66666666-7777-8888-9999-000000000001', - 'type': 'virt', - 'image_id': 'ubuntu', - 'ironic_node_id': '5d12f6fd-a196-4bf0-ae4c-1f639a523a51', - } -NODE2 = {'id': 124, - 'uuid': '66666666-7777-8888-9999-000000000002', - 'type': 'ironic', - 'image_id': 'rhel7', - 'ironic_node_id': '5d12f6fd-a196-4bf0-ae4c-1f639a523a52', - } - -CREATE_NODE = copy.deepcopy(NODE1) -del CREATE_NODE['id'] -del CREATE_NODE['uuid'] -del CREATE_NODE['ironic_node_id'] - -UPDATED_NODE = copy.deepcopy(NODE1) -NEW_IMAGE_ID = 'centos7' -UPDATED_NODE['image_id'] = NEW_IMAGE_ID - -fake_responses = { - '/v1/nodes': - { - 'GET': ( - {}, - {'nodes': [NODE1, NODE2]}, - ), - 'POST': ( - {}, - CREATE_NODE, - ), - }, - '/v1/nodes/%s' % NODE1['id']: - { - 'GET': ( - {}, - NODE1 - ), - 'DELETE': ( - {}, - None, - ), - 'PATCH': ( - {}, - UPDATED_NODE, - ), - }, -} - - -class NodeManagerTest(testtools.TestCase): - - def setUp(self): - super(NodeManagerTest, self).setUp() - self.api = utils.FakeAPI(fake_responses) - self.mgr = nodes.NodeManager(self.api) - - def test_node_list(self): - nodes = self.mgr.list() - expect = [ - ('GET', '/v1/nodes', {}, None), - ] - self.assertEqual(expect, self.api.calls) - self.assertThat(nodes, matchers.HasLength(2)) - - def test_node_show(self): - node = self.mgr.get(NODE1['id']) - expect = [ - ('GET', '/v1/nodes/%s' % NODE1['id'], {}, None) - ] - self.assertEqual(expect, self.api.calls) - self.assertEqual(NODE1['type'], node.type) - self.assertEqual(NODE1['image_id'], node.image_id) - - def test_node_create(self): - node = self.mgr.create(**CREATE_NODE) - expect = [ - ('POST', '/v1/nodes', {}, CREATE_NODE), - ] - self.assertEqual(expect, self.api.calls) - self.assertTrue(node) - - def test_node_create_fail(self): - CREATE_NODE_FAIL = copy.deepcopy(CREATE_NODE) - CREATE_NODE_FAIL["wrong_key"] = "wrong" - self.assertRaisesRegexp(exceptions.InvalidAttribute, - ("Key must be in %s" % - ','.join(nodes.CREATION_ATTRIBUTES)), - self.mgr.create, **CREATE_NODE_FAIL) - self.assertEqual([], self.api.calls) - - def test_node_delete(self): - node = self.mgr.delete(NODE1['id']) - expect = [ - ('DELETE', '/v1/nodes/%s' % NODE1['id'], {}, None), - ] - self.assertEqual(expect, self.api.calls) - self.assertIsNone(node) - - def test_node_update(self): - patch = {'op': 'replace', - 'value': NEW_IMAGE_ID, - 'path': '/image_id'} - node = self.mgr.update(id=NODE1['id'], patch=patch) - expect = [ - ('PATCH', '/v1/nodes/%s' % NODE1['id'], {}, patch), - ] - self.assertEqual(expect, self.api.calls) - self.assertEqual(NEW_IMAGE_ID, node.image_id) diff --git a/magnumclient/tests/v1/test_nodes_shell.py b/magnumclient/tests/v1/test_nodes_shell.py deleted file mode 100644 index 795f657e..00000000 --- a/magnumclient/tests/v1/test_nodes_shell.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2015 NEC Corporation. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import mock - -from magnumclient.tests.v1 import shell_test_base - - -class ShellTest(shell_test_base.TestCommandLineArgument): - - @mock.patch('magnumclient.v1.nodes.NodeManager.list') - def test_node_list_success(self, mock_list): - self._test_arg_success('node-list') - self.assertTrue(mock_list.called) - - @mock.patch('magnumclient.v1.nodes.NodeManager.list') - def test_node_list_failure(self, mock_list): - self._test_arg_failure('node-list --wrong', - self._unrecognized_arg_error) - self.assertFalse(mock_list.called) - - @mock.patch('magnumclient.v1.nodes.NodeManager.create') - def test_node_create_success(self, mock_create): - self._test_arg_success('node-create ' - '--type test ' - '--image-id test') - self.assertTrue(mock_create.called) diff --git a/magnumclient/v1/client.py b/magnumclient/v1/client.py index d074387e..2be777aa 100644 --- a/magnumclient/v1/client.py +++ b/magnumclient/v1/client.py @@ -22,7 +22,6 @@ from magnumclient.v1 import bays from magnumclient.v1 import certificates from magnumclient.v1 import containers from magnumclient.v1 import mservices -from magnumclient.v1 import nodes from magnumclient.v1 import pods from magnumclient.v1 import replicationcontrollers as rcs from magnumclient.v1 import services @@ -112,7 +111,6 @@ class Client(object): self.certificates = certificates.CertificateManager(self.http_client) self.baymodels = baymodels.BayModelManager(self.http_client) self.containers = containers.ContainerManager(self.http_client) - self.nodes = nodes.NodeManager(self.http_client) self.pods = pods.PodManager(self.http_client) self.rcs = rcs.ReplicationControllerManager(self.http_client) self.services = services.ServiceManager(self.http_client) diff --git a/magnumclient/v1/nodes.py b/magnumclient/v1/nodes.py deleted file mode 100644 index 5633ec24..00000000 --- a/magnumclient/v1/nodes.py +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright 2014 NEC Corporation. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from magnumclient.common import base -from magnumclient.common import utils -from magnumclient import exceptions - - -CREATION_ATTRIBUTES = ['name', 'type', 'image_id'] - - -class Node(base.Resource): - def __repr__(self): - return "" % self._info - - -class NodeManager(base.Manager): - resource_class = Node - - @staticmethod - def _path(id=None): - return '/v1/nodes/%s' % id if id else '/v1/nodes' - - def list(self, limit=None, marker=None, sort_key=None, - sort_dir=None, detail=False): - """Retrieve a list of nodes. - - :param marker: Optional, the UUID of a node, eg the last - node from a previous result set. Return - the next result set. - :param limit: The maximum number of results to return per - request, if: - - 1) limit > 0, the maximum number of nodes to return. - 2) limit == 0, return the entire list of nodes. - 3) limit param is NOT specified (None), the number of items - returned respect the maximum imposed by the Magnum API - (see Magnum's api.max_limit option). - - :param sort_key: Optional, field used for sorting. - - :param sort_dir: Optional, direction of sorting, either 'asc' (the - default) or 'desc'. - - :param detail: Optional, boolean whether to return detailed information - about nodes. - - :returns: A list of nodes. - - """ - if limit is not None: - limit = int(limit) - - filters = utils.common_filters(marker, limit, sort_key, sort_dir) - - path = '' - if detail: - path += 'detail' - if filters: - path += '?' + '&'.join(filters) - - if limit is None: - return self._list(self._path(path), "nodes") - else: - return self._list_pagination(self._path(path), "nodes", - limit=limit) - - def get(self, id): - try: - return self._list(self._path(id))[0] - except IndexError: - return None - - def create(self, **kwargs): - new = {} - for (key, value) in kwargs.items(): - if key in CREATION_ATTRIBUTES: - new[key] = value - else: - raise exceptions.InvalidAttribute( - "Key must be in %s" % ",".join(CREATION_ATTRIBUTES)) - return self._create(self._path(), new) - - def delete(self, id): - return self._delete(self._path(id)) - - def update(self, id, patch): - return self._update(self._path(id), patch) diff --git a/magnumclient/v1/nodes_shell.py b/magnumclient/v1/nodes_shell.py deleted file mode 100644 index c4ecb1e8..00000000 --- a/magnumclient/v1/nodes_shell.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright 2015 NEC Corporation. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from magnumclient.common import utils as magnum_utils -from magnumclient.openstack.common import cliutils as utils - - -def _show_node(node): - utils.print_dict(node._info) - - -def do_node_list(cs, args): - """Print a list of configured nodes.""" - nodes = cs.nodes.list() - columns = ('uuid', 'type', 'image_id') - utils.print_list(nodes, columns, - {'versions': magnum_utils.print_list_field('versions')}) - - -@utils.arg('--type', - metavar='', - help='Type of node to create (virt or bare).') -@utils.arg('--image-id', - metavar='', - help='The name or UUID of the base image to use for the node.') -def do_node_create(cs, args): - """Create a node.""" - opts = {} - opts['type'] = args.type - opts['image_id'] = args.image_id - - node = cs.nodes.create(**opts) - _show_node(node) diff --git a/magnumclient/v1/shell.py b/magnumclient/v1/shell.py index 2f6cfb69..ce736219 100644 --- a/magnumclient/v1/shell.py +++ b/magnumclient/v1/shell.py @@ -18,7 +18,6 @@ from magnumclient.v1 import bays_shell from magnumclient.v1 import certificates_shell from magnumclient.v1 import containers_shell from magnumclient.v1 import mservices_shell -from magnumclient.v1 import nodes_shell from magnumclient.v1 import pods_shell from magnumclient.v1 import replicationcontrollers_shell from magnumclient.v1 import services_shell @@ -29,7 +28,6 @@ COMMAND_MODULES = [ certificates_shell, containers_shell, mservices_shell, - nodes_shell, pods_shell, replicationcontrollers_shell, services_shell,