Add support for stack file list

This shows the files map for a given stack

Depends-On: I3198b6a7dc06648af24c198d39470f3b0d5d6f11
Change-Id: Ib7d033a660fe294bf3f7b42e4aa7020149ce24c1
blueprint: files-show
This commit is contained in:
Steven Hardy 2016-06-08 13:02:40 +01:00
parent 1c85ce9f5a
commit 3ae1c3e715
4 changed files with 48 additions and 0 deletions

View File

@ -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 = [

View File

@ -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):

View File

@ -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."""

View File

@ -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