|
Packit Service |
509fd4 |
#!/usr/bin/bash
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
# deploy-openstack IMAGE USERDATA
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
# Starts an openstack instance, injecting configuration via cloud-init. It
|
|
Packit Service |
509fd4 |
# assumes that an openstackrc file has been sourced into the environment.
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
# CONFIG -- A JSON file containing configuration for an openstack deployment,
|
|
Packit Service |
509fd4 |
# containing "image", "flavor", "network" (same as openstack server
|
|
Packit Service |
509fd4 |
# create arguments), and "extra-args".
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
# USERDATA -- A cloud-init user-data config file, or a directory of
|
|
Packit Service |
509fd4 |
# configuration as accepted by the `gen-user-data` tool.
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
set -euo pipefail
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
if [[ "$#" != 2 ]]; then
|
|
Packit Service |
509fd4 |
echo "usage: $0 CONFIG USERDATA"
|
|
Packit Service |
509fd4 |
exit 1
|
|
Packit Service |
509fd4 |
fi
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
scriptdir=$(dirname "$0")
|
|
Packit Service |
509fd4 |
config=$1
|
|
Packit Service |
509fd4 |
userdata=$2
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
# Verify that an openstackrc file has been sourced. This will fail when the
|
|
Packit Service |
509fd4 |
# variables do not exist.
|
|
Packit Service |
509fd4 |
printenv OS_PROJECT_NAME OS_USERNAME > /dev/null
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
workdir=$(mktemp -d "$scriptdir/qemu-tmp-XXXXXX")
|
|
Packit Service |
509fd4 |
function cleanup() {
|
|
Packit Service |
509fd4 |
rm -rf "$workdir"
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
trap cleanup EXIT
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
if [ -d "$userdata" ]; then
|
|
Packit Service |
509fd4 |
"$scriptdir/gen-user-data" "$userdata" > "$workdir/user-data"
|
|
Packit Service |
509fd4 |
else
|
|
Packit Service |
509fd4 |
cp "$userdata" "$workdir/user-data"
|
|
Packit Service |
509fd4 |
fi
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
name=$(jq -r '.name // ""' "$config")
|
|
Packit Service |
509fd4 |
image=$(jq -r '.image // ""' "$config")
|
|
Packit Service |
509fd4 |
flavor=$(jq -r '.flavor // ""' "$config")
|
|
Packit Service |
509fd4 |
network=$(jq -r '.network // ""' "$config")
|
|
Packit Service |
509fd4 |
extra_args=$(jq -r '.extra_args // ""' "$config")
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
if [[ -z "$name" || -z "$image" || -z "$flavor" ]]; then
|
|
Packit Service |
509fd4 |
echo "at least 'name', 'image', and 'flavor' must be set in $config"
|
|
Packit Service |
509fd4 |
exit 1
|
|
Packit Service |
509fd4 |
fi
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
if openstack server show "$name" 2>/dev/null >/dev/null; then
|
|
Packit Service |
509fd4 |
echo "server '$name' already exists - delete it with"
|
|
Packit Service |
509fd4 |
echo ""
|
|
Packit Service |
509fd4 |
echo " openstack server stop $name"
|
|
Packit Service |
509fd4 |
echo " openstack server delete $name"
|
|
Packit Service |
509fd4 |
exit 1
|
|
Packit Service |
509fd4 |
fi
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
openstack server create \
|
|
Packit Service |
509fd4 |
--wait \
|
|
Packit Service |
509fd4 |
--image "$image" \
|
|
Packit Service |
509fd4 |
--flavor "$flavor" \
|
|
Packit Service |
509fd4 |
--user-data "$workdir/user-data" \
|
|
Packit Service |
509fd4 |
${network:+--network "$network"} \
|
|
Packit Service |
509fd4 |
${extra_args:+$extra_args} \
|
|
Packit Service |
509fd4 |
"$name"
|