From aaf34cfa2570a65fb36fea12f38edeeb3ad2a4db Mon Sep 17 00:00:00 2001 From: Mark Goddard Date: Mon, 9 Dec 2019 11:11:26 +0000 Subject: [PATCH] Fix keystone bootstrap error message display In some situations, Keystone bootstrap can fail, and then unhelpfully fails displaying the error message output by the 'keystone-manage bootstrap' command. This appears to be due to unprintable control characters in the error message which prevent the output of the script from being valid JSON. This change fixes the issue by piping the output through 'cat -v', which replaces unprintable characters with control codes. Change-Id: I82444bc2272311023cc9e92c5a298d1c4c87483b Closes-Bug: #1855701 (cherry picked from commit bcca3fabe305c1e206fdb231c31809ceff2d4774) --- docker/keystone/keystone/keystone_bootstrap.sh | 6 +++++- ...fix-keystone-bootstrap-unprintable-e01b088ef821fd18.yaml | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/fix-keystone-bootstrap-unprintable-e01b088ef821fd18.yaml diff --git a/docker/keystone/keystone/keystone_bootstrap.sh b/docker/keystone/keystone/keystone_bootstrap.sh index c140e97c73..e37e383526 100644 --- a/docker/keystone/keystone/keystone_bootstrap.sh +++ b/docker/keystone/keystone/keystone_bootstrap.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -o pipefail + # NOTE(SamYaple): Kolla needs to wraps `keystone-manage bootstrap` to ensure # any change is reported correctly for idempotency. This script will exit with # valid json that can be parsed with information about if the task has failed @@ -29,7 +31,9 @@ function exit_json { } changed="false" -keystone_bootstrap=$(keystone-manage bootstrap --bootstrap-username "${USERNAME}" --bootstrap-password "${PASSWORD}" --bootstrap-project-name "${PROJECT}" --bootstrap-role-name "${ROLE}" --bootstrap-admin-url "${ADMIN_URL}" --bootstrap-internal-url "${INTERNAL_URL}" --bootstrap-public-url "${PUBLIC_URL}" --bootstrap-service-name "keystone" --bootstrap-region-id "${REGION}" 2>&1) +# NOTE(mgoddard): pipe through cat -v to remove unprintable control characters +# which prevent JSON decoding. +keystone_bootstrap=$(keystone-manage bootstrap --bootstrap-username "${USERNAME}" --bootstrap-password "${PASSWORD}" --bootstrap-project-name "${PROJECT}" --bootstrap-role-name "${ROLE}" --bootstrap-admin-url "${ADMIN_URL}" --bootstrap-internal-url "${INTERNAL_URL}" --bootstrap-public-url "${PUBLIC_URL}" --bootstrap-service-name "keystone" --bootstrap-region-id "${REGION}" 2>&1 | cat -v) if [[ $? != 0 ]]; then fail_json "${keystone_bootstrap}" fi diff --git a/releasenotes/notes/fix-keystone-bootstrap-unprintable-e01b088ef821fd18.yaml b/releasenotes/notes/fix-keystone-bootstrap-unprintable-e01b088ef821fd18.yaml new file mode 100644 index 0000000000..885e0e7606 --- /dev/null +++ b/releasenotes/notes/fix-keystone-bootstrap-unprintable-e01b088ef821fd18.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixes an issue with keystone bootstrap where an error message emitted by + the ``keystone-manage bootstrap`` command is hidden. See `bug 1855701 + `__ for details.