summaryrefslogtreecommitdiffstats
path: root/deployed-server/scripts/enable-ssh-admin.sh
diff options
context:
space:
mode:
authorJiri Stransky <jistr@redhat.com>2017-08-03 14:23:27 +0200
committerFlavio Percoco <flaper87@gmail.com>2017-08-08 08:07:19 +0200
commit507bed1da9fb9288b8ddcff5535b56710ac43d5f (patch)
tree51da2a7b1267a748d3565b828c0c2bba9b4185bc /deployed-server/scripts/enable-ssh-admin.sh
parent5bf7d6582b2346a9c1671430ebead6c358508863 (diff)
Add script to create tripleo-admin on deployed servers
When using deployed servers, we want to create a standard tripleo-admin user for Mistral's ssh tasks (e.g. running Ansible on overcloud). This script wraps the respective Mistral workflow. Change-Id: I2de698b4aae07f74569243a9e7c1c56eb578e700 Related-Bug: #1708180 Depends-On: Ibe8e54f7b38d8c6c8d944d2b13f0eed004c34c4c
Diffstat (limited to 'deployed-server/scripts/enable-ssh-admin.sh')
-rwxr-xr-xdeployed-server/scripts/enable-ssh-admin.sh60
1 files changed, 60 insertions, 0 deletions
diff --git a/deployed-server/scripts/enable-ssh-admin.sh b/deployed-server/scripts/enable-ssh-admin.sh
new file mode 100755
index 00000000..dcabeadf
--- /dev/null
+++ b/deployed-server/scripts/enable-ssh-admin.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+set -eu
+
+# whitespace (space or newline) separated list
+OVERCLOUD_HOSTS=${OVERCLOUD_HOSTS:-""}
+OVERCLOUD_SSH_USER=${OVERCLOUD_SSH_USER:-"$USER"}
+# this is just for compatibility with CI
+SUBNODES_SSH_KEY=${SUBNODES_SSH_KEY:-"$HOME/.ssh/id_rsa"}
+# this is the intended variable for overriding
+OVERCLOUD_SSH_KEY=${OVERCLOUD_SSH_KEY:-"$SUBNODES_SSH_KEY"}
+
+SLEEP_TIME=5
+
+function overcloud_ssh_hosts_json {
+ echo "$OVERCLOUD_HOSTS" | python -c '
+from __future__ import print_function
+import json, re, sys
+print(json.dumps(re.split("\s+", sys.stdin.read().strip())))'
+}
+
+function overcloud_ssh_key_json {
+ # we pass the contents to Mistral instead of just path, otherwise
+ # the key file would have to be readable for the mistral user
+ cat "$OVERCLOUD_SSH_KEY" | python -c 'import json,sys; print(json.dumps(sys.stdin.read()))'
+}
+
+function workflow_finished {
+ local execution_id="$1"
+ openstack workflow execution show -f shell $execution_id | grep 'state="SUCCESS"' > /dev/null
+}
+
+if [ -z "$OVERCLOUD_HOSTS" ]; then
+ echo 'Please set $OVERCLOUD_HOSTS'
+ exit 1
+fi
+
+echo "Starting workflow to create ssh admin on deployed servers."
+echo "SSH user: $OVERCLOUD_SSH_USER"
+echo "SSH key file: $OVERCLOUD_SSH_KEY"
+echo "Hosts: $OVERCLOUD_HOSTS"
+echo
+
+EXECUTION_PARAMS="{\"ssh_user\": \"$OVERCLOUD_SSH_USER\", \"ssh_servers\": $(overcloud_ssh_hosts_json), \"ssh_private_key\": $(overcloud_ssh_key_json)}"
+EXECUTION_CREATE_OUTPUT=$(openstack workflow execution create -f shell -d 'deployed server ssh admin creation' tripleo.access.v1.enable_ssh_admin "$EXECUTION_PARAMS")
+echo "$EXECUTION_CREATE_OUTPUT"
+EXECUTION_ID=$(echo "$EXECUTION_CREATE_OUTPUT" | grep '^id=' | awk '-F"' '{ print $2 }')
+
+if [ -z "$EXECUTION_ID" ]; then
+ echo "Failed to get workflow execution ID for ssh admin creation workflow"
+ exit 1
+fi
+
+echo -n "Waiting for the workflow execution to finish (id $EXECUTION_ID)."
+while ! workflow_finished $EXECUTION_ID; do
+ sleep $SLEEP_TIME
+ echo -n .
+done
+
+echo "Success."