From 2d376f13674bf899cbe9b32d71cd7ecdfb1219e5 Mon Sep 17 00:00:00 2001 From: James Slagle Date: Tue, 28 Mar 2017 13:15:33 -0400 Subject: [PATCH] Fix broken command prompt Interactive editing of the command line was broken due to the usage of $PROMPT_COMMAND. The cursor would often be placed at the wrong location when editing history due to prompt length confusion. We already had the OS_CLOUDNAME variable for this purpose, and I took the prompt setting logic from what we previously used in tripleo-incubator: http://git.openstack.org/cgit/openstack/tripleo-incubator/tree/cloudprompt Change-Id: I85d6a2be597477ff74ba72ffa4c4aefc42c0df3c Partial-Bug: #1673459 --- .../update-ps1-in-rc-files-c710832fc1ee37f5.yaml | 4 ++-- tripleo_common/tests/utils/test_overcloudrc.py | 5 ++--- tripleo_common/utils/overcloudrc.py | 11 ++++++++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/releasenotes/notes/update-ps1-in-rc-files-c710832fc1ee37f5.yaml b/releasenotes/notes/update-ps1-in-rc-files-c710832fc1ee37f5.yaml index 173cb29c2..618fc9086 100644 --- a/releasenotes/notes/update-ps1-in-rc-files-c710832fc1ee37f5.yaml +++ b/releasenotes/notes/update-ps1-in-rc-files-c710832fc1ee37f5.yaml @@ -3,5 +3,5 @@ features: - | When sourcing the overcloudrc on the undercloud, the command prompt will show that the credentials have been loaded by being preprended with - the overcloud stack name in all capital letters. For example, - '(OVERCLOUD) [stack@undercloud ~]$' + the overcloud stack name. For example, + '(overcloud) [stack@undercloud ~]$' diff --git a/tripleo_common/tests/utils/test_overcloudrc.py b/tripleo_common/tests/utils/test_overcloudrc.py index 3a8546583..3c4ee89a1 100644 --- a/tripleo_common/tests/utils/test_overcloudrc.py +++ b/tripleo_common/tests/utils/test_overcloudrc.py @@ -40,8 +40,7 @@ class OvercloudRcTest(base.TestCase): self.assertIn("OS_PASSWORD=AdminPassword", result['overcloudrc.v3']) self.assertNotIn("OS_IDENTITY_API_VERSION=3", result['overcloudrc']) self.assertIn("OS_IDENTITY_API_VERSION=3", result['overcloudrc.v3']) - expected_prompt = 'export PROMPT_COMMAND="echo -n \'(OVERCAST) \'"' - self.assertIn(expected_prompt, result['overcloudrc']) - self.assertIn(expected_prompt, result['overcloudrc.v3']) + self.assertIn(overcloudrc.CLOUDPROMPT, result['overcloudrc']) + self.assertIn(overcloudrc.CLOUDPROMPT, result['overcloudrc.v3']) self.assertIn("OS_AUTH_TYPE=password", result['overcloudrc']) self.assertIn("OS_AUTH_TYPE=password", result['overcloudrc.v3']) diff --git a/tripleo_common/utils/overcloudrc.py b/tripleo_common/utils/overcloudrc.py index 88f4f7aa4..2f9d41d70 100644 --- a/tripleo_common/utils/overcloudrc.py +++ b/tripleo_common/utils/overcloudrc.py @@ -63,6 +63,14 @@ def bracket_ipv6(address): CLEAR_ENV = """# Clear any old environment that may conflict. for key in $( set | awk '{FS=\"=\"} /^OS_/ {print $1}' ); do unset $key ; done """ +CLOUDPROMPT = """ +# Add OS_CLOUDNAME to PS1 +if [ -z "${CLOUDPROMPT_ENABLED:-}" ]; then + export PS1=${PS1:-""} + export PS1=\${OS_CLOUDNAME:+"(\$OS_CLOUDNAME)"}\ $PS1 + export CLOUDPROMPT_ENABLED=1 +fi +""" def create_overcloudrc(stack, no_proxy, admin_password): @@ -79,7 +87,6 @@ def create_overcloudrc(stack, no_proxy, admin_password): [no_proxy, overcloud_host, overcloud_admin_vip]) rc_params = { - 'PROMPT_COMMAND': '"echo -n \'(%s) \'"' % stack.stack_name.upper(), 'NOVA_VERSION': '1.1', 'COMPUTE_API_VERSION': '1.1', 'OS_USERNAME': 'admin', @@ -100,6 +107,7 @@ def create_overcloudrc(stack, no_proxy, admin_password): for key, value in rc_params.items(): line = "export %(key)s=%(value)s\n" % {'key': key, 'value': value} overcloudrc = overcloudrc + line + overcloudrc = overcloudrc + CLOUDPROMPT rc_params.update({ 'OS_AUTH_URL': overcloud_endpoint.replace('/v2.0', '') + '/v3', @@ -112,6 +120,7 @@ def create_overcloudrc(stack, no_proxy, admin_password): for key, value in rc_params.items(): line = "export %(key)s=%(value)s\n" % {'key': key, 'value': value} overcloudrc_v3 = overcloudrc_v3 + line + overcloudrc_v3 = overcloudrc_v3 + CLOUDPROMPT return { "overcloudrc": overcloudrc,