summaryrefslogtreecommitdiff
path: root/heatclient/common/format_utils.py
diff options
context:
space:
mode:
authordixiaoli <dixiaobj@cn.ibm.com>2015-11-30 23:34:13 -0600
committerdixiaoli <dixiaobj@cn.ibm.com>2016-02-24 19:20:59 +0800
commit5f6a88bc5f37dfd153d44c8c6201eed36f33b340 (patch)
tree89097b3b1985d600ecacd99658986086a431a64c /heatclient/common/format_utils.py
parent413b5f2dbd677e29764e3d87605b1a7a8cdaca14 (diff)
downloadpython-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.py40
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)))