Files
training-labs/labs/osbash/tools/test-once.sh
Roger Luethi a97437ef94 Sync changes in scripts dir to node VMs
Until now, the scripts directory has not been synced to the node VMs
because each script was copied there prior to execution. This method
does not work if a script needs additional files (e.g., configuration)
that reside in the scripts directory. This is what we plan to do for
some optional services which will come in separate sub-directories
such as scripts/ubuntu/tacker.

Therefore, this changeset ensures that the scripts directory is copied
to the target node VM before script execution begins.

Change-Id: Iee4ed2fdc99045e779575a68a5c19c35895bdbd8
2018-02-01 16:52:17 +01:00

67 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
set -o errexit -o nounset
TOP_DIR=$(cd "$(dirname "$0")/.." && pwd)
source "$TOP_DIR/config/localrc"
source "$TOP_DIR/config/paths"
source "$CONFIG_DIR/localrc"
source "$CONFIG_DIR/deploy.osbash"
source "$CONFIG_DIR/openstack"
source "$OSBASH_LIB_DIR/functions-host.sh"
source "$OSBASH_LIB_DIR/$PROVIDER-functions.sh"
if [ $# -eq 0 ]; then
echo "Purpose: Copy one script to target node and execute it via ssh."
echo "Usage: $0 <script>"
exit 1
fi
SCRIPT_SRC=$1
if [ ! -f "$SCRIPT_SRC" ]; then
echo "File not found: $SCRIPT_SRC"
exit 1
fi
SCRIPT=$(basename "$SCRIPT_SRC")
# Set VM_SSH_PORT (and wait for node sshd to respond)
ssh_env_for_node controller
wait_for_ssh "$VM_SSH_PORT"
function get_remote_top_dir {
if vm_ssh "$VM_SSH_PORT" "test -d /osbash"; then
# The installation uses a VirtualBox shared folder.
local remote_top_dir=/osbash
echo >&2 -n "Waiting for shared folder."
# Just to be on the safe side -- the shared folder should be there
# before ssh comes up.
until vm_ssh "$VM_SSH_PORT" "test -e $remote_top_dir/lib"; do
sleep 1
echo >&2 -n .
done
echo >&2
echo $remote_top_dir
else
# Copy and execute the script with scp/ssh.
echo /home/osbash
fi
}
REMOTE_TOP_DIR=$(get_remote_top_dir)
EXE_DIR_NAME=test_tmp
mkdir -p "$TOP_DIR/$EXE_DIR_NAME"
cp -f "$SCRIPT_SRC" "$TOP_DIR/$EXE_DIR_NAME"
if [[ "$REMOTE_TOP_DIR" = "/home/osbash" ]]; then
# Not using a shared folder, we need to scp the script to the target node
vm_scp_to_vm "$VM_SSH_PORT" "$TOP_DIR/$EXE_DIR_NAME/$SCRIPT"
# The script may need access to extra files in the scripts directory, so
# copy that over.
vm_scp_to_vm "$VM_SSH_PORT" "$TOP_DIR/scripts"
fi
vm_ssh "$VM_SSH_PORT" "bash -c $REMOTE_TOP_DIR/$EXE_DIR_NAME/$SCRIPT" || \
rc=$?
echo "$SCRIPT returned status: ${rc:-0}"
exit ${rc:-0}