diff options
author | dixiaoli <dixiaobj@cn.ibm.com> | 2015-11-30 23:34:13 -0600 |
---|---|---|
committer | dixiaoli <dixiaobj@cn.ibm.com> | 2016-02-24 19:20:59 +0800 |
commit | 5f6a88bc5f37dfd153d44c8c6201eed36f33b340 (patch) | |
tree | 89097b3b1985d600ecacd99658986086a431a64c /heatclient/common/format_utils.py | |
parent | 413b5f2dbd677e29764e3d87605b1a7a8cdaca14 (diff) | |
download | python-heatclient-5f6a88bc5f37dfd153d44c8c6201eed36f33b340.tar.gz |
OpenstackClient plugin for software deployment output show
This change implements the "openstack software deployment output show" command
Based from the existing heat command:
heat deployment-output-show
Change-Id: Ide607c925a15071c0c02c8cdb1ba20d9a745f9a9
Blueprint: heat-support-python-openstackclient
Diffstat (limited to 'heatclient/common/format_utils.py')
-rw-r--r-- | heatclient/common/format_utils.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/heatclient/common/format_utils.py b/heatclient/common/format_utils.py index 2b02fc9..5cb691a 100644 --- a/heatclient/common/format_utils.py +++ b/heatclient/common/format_utils.py @@ -13,6 +13,8 @@ # Copyright 2015 IBM Corp. from cliff import show +import six +import sys class RawFormat(show.ShowOne): @@ -51,3 +53,41 @@ class ValueFormat(RawFormat): @property def formatter_default(self): return 'value' + + +def indent_and_truncate(txt, spaces=0, truncate=False, truncate_limit=10, + truncate_prefix=None, truncate_postfix=None): + """Indents supplied multiline text by the specified number of spaces + + """ + if txt is None: + return + lines = six.text_type(txt).splitlines() + if truncate and len(lines) > truncate_limit: + lines = lines[-truncate_limit:] + if truncate_prefix is not None: + lines.insert(0, truncate_prefix) + if truncate_postfix is not None: + lines.append(truncate_postfix) + + if spaces > 0: + lines = [" " * spaces + line for line in lines] + return '\n'.join(lines) + + +def print_software_deployment_output(data, name, out=sys.stdout, long=False): + """Prints details of the software deployment for user consumption + + The format attempts to be valid yaml, but is primarily aimed at showing + useful information to the user in a helpful layout. + """ + if name in ('deploy_stdout', 'deploy_stderr'): + output = indent_and_truncate( + data.get(name), + spaces=4, + truncate=not long, + truncate_prefix='...', + truncate_postfix='(truncated, view all with --long)') + out.write(' %s: |\n%s\n' % (name, output)) + else: + out.write(' %s: %s\n' % (name, data.get(name))) |