summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--heatclient/osc/v1/stack.py28
-rw-r--r--heatclient/tests/unit/test_stacks.py6
-rw-r--r--heatclient/v1/stacks.py13
-rw-r--r--setup.cfg1
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."""
diff --git a/setup.cfg b/setup.cfg
index df15f20..2088aa4 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -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