From d058207867c5deca673864c0dfb4e18d3029e927 Mon Sep 17 00:00:00 2001 From: dixiaoli Date: Mon, 29 Feb 2016 14:46:15 +0800 Subject: [PATCH] Add OSC plugin for openstack orchestation build info This change implements the "openstack orchestration build info" command Based on the existing heat command: heat build-info Change-Id: I8801d56fbe8119c47f708e620f35215c8664cda7 Blueprint: heat-support-python-openstackclient --- heatclient/osc/v1/build_info.py | 46 +++++++++++++++++++ .../tests/unit/osc/v1/test_build_info.py | 44 ++++++++++++++++++ setup.cfg | 1 + 3 files changed, 91 insertions(+) create mode 100644 heatclient/osc/v1/build_info.py create mode 100644 heatclient/tests/unit/osc/v1/test_build_info.py diff --git a/heatclient/osc/v1/build_info.py b/heatclient/osc/v1/build_info.py new file mode 100644 index 00000000..11dead55 --- /dev/null +++ b/heatclient/osc/v1/build_info.py @@ -0,0 +1,46 @@ +# 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 build info action implementations""" + +import logging +import six + +from cliff import show +from openstackclient.common import utils + +from heatclient.common import utils as heat_utils + + +class BuildInfo(show.ShowOne): + """Retrieve build information.""" + + log = logging.getLogger(__name__ + ".BuildInfo") + + def get_parser(self, prog_name): + parser = super(BuildInfo, 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 + result = heat_client.build_info.build_info() + + formatters = { + 'api': heat_utils.json_formatter, + 'engine': heat_utils.json_formatter, + } + columns = sorted(list(six.iterkeys(result))) + return columns, utils.get_dict_properties(result, columns, + formatters=formatters) diff --git a/heatclient/tests/unit/osc/v1/test_build_info.py b/heatclient/tests/unit/osc/v1/test_build_info.py new file mode 100644 index 00000000..c17a42f0 --- /dev/null +++ b/heatclient/tests/unit/osc/v1/test_build_info.py @@ -0,0 +1,44 @@ +# 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 build_info as osc_build_info +from heatclient.tests.unit.osc.v1 import fakes as orchestration_fakes + + +class TestBuildInfo(orchestration_fakes.TestOrchestrationv1): + response = {"api": { + "revision": "{api_build_revision}" + }, + "engine": { + "revision": "{engine_build_revision}" + } + } + + def setUp(self): + super(TestBuildInfo, self).setUp() + self.cmd = osc_build_info.BuildInfo(self.app, None) + self.mock_client = self.app.client_manager.orchestration + self.mock_client.build_info.build_info = mock.Mock( + return_value=self.response) + + def test_build_info(self): + arglist = [] + parsed_args = self.check_parser(self.cmd, arglist, []) + columns, data = self.cmd.take_action(parsed_args) + self.mock_client.build_info.build_info.assert_called_with() + self.assertEqual(['api', 'engine'], columns) + self.assertEqual(['{\n "revision": "{api_build_revision}"\n}', + '{\n "revision": "{engine_build_revision}"\n}'], + list(data)) diff --git a/setup.cfg b/setup.cfg index 57fd8a07..367af4bb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -30,6 +30,7 @@ openstack.cli.extension = orchestration = heatclient.osc.plugin openstack.orchestration.v1 = + orchestration_build_info = heatclient.osc.v1.build_info:BuildInfo 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