forked from osbuild/osbuild-composer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdeploy-openstack
executable file
·84 lines (71 loc) · 2.24 KB
/
deploy-openstack
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/bash
#
# deploy-openstack IMAGE USERDATA
#
# Starts an openstack instance, injecting configuration via cloud-init. It
# assumes that an openstackrc file has been sourced into the environment.
#
# CONFIG -- A JSON file containing configuration for an openstack deployment,
# containing "image", "flavor", "network" (same as openstack server
# create arguments), and "extra-args".
#
# USERDATA -- A cloud-init user-data config file, or a directory of
# configuration as accepted by the `gen-user-data` tool.
#
set -euo pipefail
if [[ "$#" != 2 ]]; then
echo "usage: $0 CONFIG USERDATA"
exit 1
fi
scriptdir=$(dirname "$0")
config=$1
userdata=$2
if [ ! -f "$config" ]; then
echo "first parameter should be a file"
exit 1
fi
if [ -d "$(dirname "$config")/../.git" ]; then
if [ "$(git status --porcelain -uno | wc -l)" -gt 0 ] || [ "$(git branch --show-current)" != "main" ]; then
read -p "Are you sure you want to deploy from git repo with non-main branch or dirty files ? " -n 1 -r
if [[ $REPLY =~ ^[Nn]$ ]]; then
exit 1
fi
fi
fi
# Verify that an openstackrc file has been sourced. This will fail when the
# variables do not exist.
printenv OS_PROJECT_NAME OS_USERNAME > /dev/null
workdir=$(mktemp -d "$scriptdir/qemu-tmp-XXXXXX")
function cleanup() {
rm -rf "$workdir"
}
trap cleanup EXIT
if [ -d "$userdata" ]; then
"$scriptdir/gen-user-data" "$userdata" > "$workdir/user-data"
else
cp "$userdata" "$workdir/user-data"
fi
name=$(jq -r '.name // ""' "$config")
image=$(jq -r '.image // ""' "$config")
flavor=$(jq -r '.flavor // ""' "$config")
network=$(jq -r '.network // ""' "$config")
extra_args=$(jq -r '.extra_args // ""' "$config")
if [[ -z "$name" || -z "$image" || -z "$flavor" ]]; then
echo "at least 'name', 'image', and 'flavor' must be set in $config"
exit 1
fi
if openstack server show "$name" 2>/dev/null >/dev/null; then
echo "server '$name' already exists - delete it with"
echo ""
echo " openstack server stop $name"
echo " openstack server delete $name"
exit 1
fi
openstack server create \
--wait \
--image "$image" \
--flavor "$flavor" \
--user-data "$workdir/user-data" \
${network:+--network "$network"} \
${extra_args:+$extra_args} \
"$name"