Blame tools/deploy-openstack

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"