diff options
-rw-r--r-- | heatclient/osc/v1/stack.py | 28 | ||||
-rw-r--r-- | heatclient/tests/unit/test_stacks.py | 6 | ||||
-rw-r--r-- | heatclient/v1/stacks.py | 13 | ||||
-rw-r--r-- | setup.cfg | 1 |
4 files changed, 48 insertions, 0 deletions
diff --git a/heatclient/osc/v1/stack.py b/heatclient/osc/v1/stack.py index 79203ce..5ecf843 100644 --- a/heatclient/osc/v1/stack.py +++ b/heatclient/osc/v1/stack.py @@ -543,6 +543,34 @@ class EnvironmentShowStack(format_utils.YamlFormat): return columns, data +class ListFileStack(format_utils.YamlFormat): + """Show a stack's files map.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(ListFileStack, 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: + files = client.stacks.files(stack_id=parsed_args.stack) + except heat_exc.HTTPNotFound: + msg = _('Stack not found: %s') % parsed_args.stack + raise exc.CommandError(msg) + + return ['files'], [files] + + def _list(client, args=None): kwargs = {} columns = [ diff --git a/heatclient/tests/unit/test_stacks.py b/heatclient/tests/unit/test_stacks.py index c454451..34c7e71 100644 --- a/heatclient/tests/unit/test_stacks.py +++ b/heatclient/tests/unit/test_stacks.py @@ -156,6 +156,12 @@ class StackOperationsTest(testtools.TestCase): stack.environment() manager.environment.assert_called_once_with('env_stack/env1') + def test_files_show(self): + manager = mock.MagicMock() + stack = mock_stack(manager, 'files_stack', 'files1') + stack.files() + manager.files.assert_called_once_with('files_stack/files1') + class StackManagerNoPaginationTest(testtools.TestCase): diff --git a/heatclient/v1/stacks.py b/heatclient/v1/stacks.py index 7279ea5..40ac180 100644 --- a/heatclient/v1/stacks.py +++ b/heatclient/v1/stacks.py @@ -65,6 +65,9 @@ class Stack(base.Resource): def environment(self): return self.manager.environment(self.identifier) + def files(self): + return self.manager.files(self.identifier) + def get(self): # set_loaded() first ... so if we have to bail, we know we tried. self._loaded = True @@ -291,6 +294,16 @@ class StackManager(StackChildManager): body = utils.get_response_body(resp) return body + def files(self, stack_id): + """Returns the files for an existing stack. + + :param stack_id: identifies the stack + :return: + """ + resp = self.client.get('/stacks/%s/files' % stack_id) + body = utils.get_response_body(resp) + return body + def validate(self, **kwargs): """Validate a stack template.""" @@ -57,6 +57,7 @@ openstack.orchestration.v1 = stack_event_show = heatclient.osc.v1.event:ShowEvent stack_environment_show = heatclient.osc.v1.stack:EnvironmentShowStack stack_failures_list = heatclient.osc.v1.stack_failures:ListStackFailures + stack_file_list = heatclient.osc.v1.stack:ListFileStack stack_hook_clear = heatclient.osc.v1.stack:StackHookClear stack_hook_poll = heatclient.osc.v1.stack:StackHookPoll stack_list = heatclient.osc.v1.stack:ListStack |