diff options
author | Jenkins <jenkins@review.openstack.org> | 2016-03-02 07:51:45 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2016-03-02 07:51:45 +0000 |
commit | 5d9cc24a7dd500e007ea133abd2afdb1607e564a (patch) | |
tree | 02b90722148256ce89d974b8273dbcba8957c2c9 | |
parent | 8173b256565c618d48216acf07ac3317a7caf3ab (diff) | |
parent | aee1611ffa69eaa841fe6708478b8945b6c0bd81 (diff) | |
download | python-heatclient-5d9cc24a7dd500e007ea133abd2afdb1607e564a.tar.gz |
Merge "Add OSC plugin for openstack orchestation service list"
-rw-r--r-- | heatclient/osc/v1/service.py | 41 | ||||
-rw-r--r-- | heatclient/tests/unit/osc/v1/fakes.py | 1 | ||||
-rw-r--r-- | heatclient/tests/unit/osc/v1/test_service.py | 65 | ||||
-rw-r--r-- | setup.cfg | 1 |
4 files changed, 108 insertions, 0 deletions
diff --git a/heatclient/osc/v1/service.py b/heatclient/osc/v1/service.py new file mode 100644 index 0000000..57c8cf0 --- /dev/null +++ b/heatclient/osc/v1/service.py @@ -0,0 +1,41 @@ +# 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. +# + +"""Orchestration v1 Service action implementations""" + +import logging + +from cliff import lister +from openstackclient.common import utils + + +class ListService(lister.Lister): + """List the Heat engines.""" + + log = logging.getLogger(__name__ + ".ListService") + + def get_parser(self, prog_name): + parser = super(ListService, self).get_parser(prog_name) + return parser + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + + heat_client = self.app.client_manager.orchestration + columns = ['hostname', 'binary', 'engine_id', 'host', + 'topic', 'updated_at', 'status'] + services = heat_client.services.list() + return ( + columns, + (utils.get_item_properties(s, columns) for s in services) + ) diff --git a/heatclient/tests/unit/osc/v1/fakes.py b/heatclient/tests/unit/osc/v1/fakes.py index ee7f238..89df035 100644 --- a/heatclient/tests/unit/osc/v1/fakes.py +++ b/heatclient/tests/unit/osc/v1/fakes.py @@ -31,6 +31,7 @@ class FakeOrchestrationv1Client(object): self.events = fakes.FakeResource(None, {}) self.actions = fakes.FakeResource(None, {}) self.build_info = fakes.FakeResource(None, {}) + self.services = fakes.FakeResource(None, {}) self.software_deployments = fakes.FakeResource(None, {}) self.software_configs = fakes.FakeResource(None, {}) self.template_versions = fakes.FakeResource(None, {}) diff --git a/heatclient/tests/unit/osc/v1/test_service.py b/heatclient/tests/unit/osc/v1/test_service.py new file mode 100644 index 0000000..8128e85 --- /dev/null +++ b/heatclient/tests/unit/osc/v1/test_service.py @@ -0,0 +1,65 @@ +# 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 heatclient.osc.v1 import service as osc_service +from heatclient.tests.unit.osc.v1 import fakes as orchestration_fakes + + +class TestServiceList(orchestration_fakes.TestOrchestrationv1): + response = {"services": [ + { + "status": "up", + "binary": "heat-engine", + "report_interval": 60, + "engine_id": "9d9242c3-4b9e-45e1-9e74-7615fbf20e5d", + "created_at": "2015-02-03T05:55:59.000000", + "hostname": "mrkanag", + "updated_at": "2015-02-03T05:57:59.000000", + "topic": "engine", + "host": "engine-1", + "deleted_at": 'null', + "id": "e1908f44-42f9-483f-b778-bc814072c33d" + }, + { + "status": "down", + "binary": "heat-engine", + "report_interval": 60, + "engine_id": "2d2434bf-adb6-4453-9c6b-b22fb8bd2306", + "created_at": "2015-02-03T06:03:14.000000", + "hostname": "mrkanag", + "updated_at": "2015-02-03T06:09:55.000000", + "topic": "engine", + "host": "engine", + "deleted_at": 'null', + "id": "582b5657-6db7-48ad-8483-0096350faa21" + } + ]} + + columns = ['hostname', 'binary', 'engine_id', 'host', + 'topic', 'updated_at', 'status'] + + def setUp(self): + super(TestServiceList, self).setUp() + self.cmd = osc_service.ListService(self.app, None) + self.mock_client = self.app.client_manager.orchestration + self.mock_client.services.list = mock.Mock( + return_value=self.response) + + def test_service_list(self): + arglist = [] + parsed_args = self.check_parser(self.cmd, arglist, []) + columns, data = self.cmd.take_action(parsed_args) + self.mock_client.services.list.assert_called_with() + self.assertEqual(self.columns, columns) @@ -31,6 +31,7 @@ openstack.cli.extension = openstack.orchestration.v1 = orchestration_build_info = heatclient.osc.v1.build_info:BuildInfo + orchestration_service_list = heatclient.osc.v1.service:ListService orchestration_template_function_list = heatclient.osc.v1.template:FunctionList orchestration_template_version_list = heatclient.osc.v1.template:VersionList orchestration_resource_type_list = heatclient.osc.v1.resource_type:ResourceTypeList |