diff options
Diffstat (limited to 'mason/mason-generator.sh')
-rwxr-xr-x | mason/mason-generator.sh | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/mason/mason-generator.sh b/mason/mason-generator.sh new file mode 100755 index 00000000..a0b2fb0a --- /dev/null +++ b/mason/mason-generator.sh @@ -0,0 +1,94 @@ +#!/bin/sh + +set -e + +if [ "$1" == "-h" -o "$1" == "--help" ]; then + echo "Usage:" + echo " `basename $0` HOST_PREFIX UPSTREAM_TROVE_HOSTNAME VM_USER VM_HOST VM_PATH [HOST_POSTFIX]" + echo "" + echo "Where:" + echo " HOST_PREFIX -- Name of your Mason instance" + echo " e.g. \"my-mason\" to produce hostnames:" + echo " my-mason-trove and my-mason-controller" + echo " UPSTREAM_TROVE_HOSTNAME -- Upstream trove's hostname" + echo " VM_USER -- User on VM host for VM deployment" + echo " VM_HOST -- VM host for VM deployment" + echo " VM_PATH -- Path to store VM images in on VM host" + echo " HOST_POSTFIX -- e.g. \".example.com\" to get" + echo " my-mason-trove.example.com" + echo "" + echo "This script makes deploying a Mason system simpler by automating" + echo "the generation of keys for the systems to use, building of the" + echo "systems, filling out the mason deployment cluster morphology" + echo "template with useful values, and finally deploying the systems." + echo "" + echo "To ensure that the deployed system can deploy test systems, you" + echo "must supply an ssh key to the VM host. Do so with the following" + echo "command:" + echo " ssh-copy-id -i ssh_keys-HOST_PREFIX/mason.key.pub VM_USER@VM_HOST" + echo "" + exit 0 +fi + + +HOST_PREFIX=$1 +UPSTREAM_TROVE=$2 +VM_USER=$3 +VM_HOST=$4 +VM_PATH=$5 +HOST_POSTFIX=$6 + +sedescape() { + # Escape all non-alphanumeric characters + printf "%s\n" "$1" | sed -e 's/\W/\\&/g' +} + + +############################################################################## +# Key generation +############################################################################## + +mkdir "ssh_keys-${HOST_PREFIX}" +cd "ssh_keys-${HOST_PREFIX}" +ssh-keygen -t rsa -b 2048 -f mason.key -C mason@TROVE_HOST -N '' +ssh-keygen -t rsa -b 2048 -f lorry.key -C lorry@TROVE_HOST -N '' +ssh-keygen -t rsa -b 2048 -f worker.key -C worker@TROVE_HOST -N '' +ssh-keygen -t rsa -b 2048 -f id_rsa -C trove-admin@TROVE_HOST -N '' +cd ../ + + +############################################################################## +# Mason setup +############################################################################## + +cp mason.morph mason-${HOST_PREFIX}.morph + +sed -i "s/red-box-v1/$(sedescape "$HOST_PREFIX")/g" "mason-$HOST_PREFIX.morph" +sed -i "s/ssh_keys/ssh_keys-$(sedescape "$HOST_PREFIX")/g" "mason-$HOST_PREFIX.morph" +sed -i "s/upstream-trove/$(sedescape "$UPSTREAM_TROVE")/" "mason-$HOST_PREFIX.morph" +sed -i "s/vm-user/$(sedescape "$VM_USER")/g" "mason-$HOST_PREFIX.morph" +sed -i "s/vm-host/$(sedescape "$VM_HOST")/g" "mason-$HOST_PREFIX.morph" +sed -i "s/vm-path/$(sedescape "$VM_PATH")/g" "mason-$HOST_PREFIX.morph" +sed -i "s/\.example\.com/$(sedescape "$HOST_POSTFIX")/g" "mason-$HOST_PREFIX.morph" + + +############################################################################## +# System building +############################################################################## + +morph build trove-system-x86_64 +morph build distbuild-system-x86_64 + + +############################################################################## +# System deployment +############################################################################## + +morph deploy mason-${HOST_PREFIX}.morph + + +############################################################################## +# Cleanup +############################################################################## + +rm mason-${HOST_PREFIX}.morph |