diff options
author | Bryan Jones <jonesbr@us.ibm.com> | 2016-01-13 15:32:59 +0000 |
---|---|---|
committer | Bryan Jones <jonesbr@us.ibm.com> | 2016-02-09 20:37:04 +0000 |
commit | 270d0178f81ce87109adde62d510c493ac1ba9d4 (patch) | |
tree | 87b454e5b55ca33a33ed0d158e5872085ebba18b | |
parent | 661ced35b4538789ea989bbc83212763b81c112d (diff) | |
download | python-heatclient-270d0178f81ce87109adde62d510c493ac1ba9d4.tar.gz |
OpenStackClient plugin for stack output list
This change implements the 'openstack stack output list' command.
Blueprint: heat-support-python-openstackclient
Change-Id: I1ca54c47076c7216106fb1c938107cf9016e968d
-rw-r--r-- | heatclient/osc/v1/stack.py | 33 | ||||
-rw-r--r-- | heatclient/tests/unit/osc/v1/test_stack.py | 29 | ||||
-rw-r--r-- | setup.cfg | 1 |
3 files changed, 63 insertions, 0 deletions
diff --git a/heatclient/osc/v1/stack.py b/heatclient/osc/v1/stack.py index 918cd71..dc1c9d3 100644 --- a/heatclient/osc/v1/stack.py +++ b/heatclient/osc/v1/stack.py @@ -774,3 +774,36 @@ class OutputShowStack(show.ShowOne): output['output_value']) return self.dict2columns(output) + + +class OutputListStack(lister.Lister): + """List stack outputs.""" + + log = logging.getLogger(__name__ + '.OutputListStack') + + def get_parser(self, prog_name): + parser = super(OutputListStack, self).get_parser(prog_name) + parser.add_argument( + 'stack', + metavar='<NAME or ID>', + help=_('Name or ID of stack to query') + ) + return parser + + def take_action(self, parsed_args): + self.log.debug('take_action(%s)', parsed_args) + + client = self.app.client_manager.orchestration + + try: + outputs = client.stacks.output_list(parsed_args.stack)['outputs'] + except heat_exc.HTTPNotFound: + msg = _('Stack not found: %s') % parsed_args.stack + raise exc.CommandError(msg) + + columns = ['output_key', 'description'] + + return ( + columns, + (utils.get_dict_properties(s, columns) for s in outputs) + ) diff --git a/heatclient/tests/unit/osc/v1/test_stack.py b/heatclient/tests/unit/osc/v1/test_stack.py index cb33977..8dd30cb 100644 --- a/heatclient/tests/unit/osc/v1/test_stack.py +++ b/heatclient/tests/unit/osc/v1/test_stack.py @@ -728,3 +728,32 @@ class TestStackOutputShow(TestStack): self.assertEqual('Stack my_stack or output output3 not found.', str(error)) self.stack_client.output_show.assert_called_with('my_stack', 'output3') + + +class TestStackOutputList(TestStack): + + response = {'outputs': [{'output_key': 'key1', 'description': 'desc1'}, + {'output_key': 'key2', 'description': 'desc2'}]} + + def setUp(self): + super(TestStackOutputList, self).setUp() + self.cmd = stack.OutputListStack(self.app, None) + + def test_stack_output_list(self): + arglist = ['my_stack'] + self.stack_client.output_list.return_value = self.response + parsed_args = self.check_parser(self.cmd, arglist, []) + + columns, data = self.cmd.take_action(parsed_args) + + self.assertEqual(['output_key', 'description'], columns) + self.stack_client.output_list.assert_called_with('my_stack') + + def test_stack_output_list_not_found(self): + arglist = ['my_stack'] + self.stack_client.output_list.side_effect = heat_exc.HTTPNotFound + parsed_args = self.check_parser(self.cmd, arglist, []) + + error = self.assertRaises(exc.CommandError, + self.cmd.take_action, parsed_args) + self.assertEqual('Stack not found: my_stack', str(error)) @@ -40,6 +40,7 @@ openstack.orchestration.v1 = stack_adopt = heatclient.osc.v1.stack:AdoptStack stack_create = heatclient.osc.v1.stack:CreateStack stack_list = heatclient.osc.v1.stack:ListStack + stack_output_list = heatclient.osc.v1.stack:OutputListStack stack_output_show = heatclient.osc.v1.stack:OutputShowStack stack_resource_metadata = heatclient.osc.v1.resources:ResourceMetadata stack_show = heatclient.osc.v1.stack:ShowStack |