-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcreatevm
46 lines (38 loc) · 1.34 KB
/
createvm
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
#!/bin/bash
#
# Erstellt fuer ein Modul VMs auf den KVM Hosts.
#
[ $# -lt 1 ] && { echo createvm modul; exit 1; }
# einfacher YAML Parser von https://stackoverflow.com/questions/5014632/how-can-i-parse-a-yaml-file-from-a-linux-shell-script
function parse_yaml
{
local prefix=$2
local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034')
sed -ne "s|^\($s\):|\1|" \
-e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
-e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 |
awk -F$fs '{
indent = length($1)/2;
vname[indent] = $2;
for (i in vname) {if (i > indent) {delete vname[i]}}
if (length($3) > 0) {
vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
printf("%s%s%s=%s\n", "'$prefix'",vn, $2, $3);
}
}'
}
################### Argumente Auswerten ###################
export HOST=$(echo $1 | cut -d- -f1)
# config.yaml parsen und als config_xxxx Umgebungsvariablen setzen
for e in $(eval parse_yaml ../config.yaml | grep "^${HOST}" | sed "s/^${HOST}/config/")
do
export $e
done
################### Vagrantfile erzeugen und VM starten ###################
export HOSTNAME=$1
export HOSTIP=$(printf %u $(echo $1 | cut -d- -f2))
mkdir -p $1/data $1/config $1/templates
envsubst <Vagrantfile.template >$1/Vagrantfile
cd $1
vagrant up
# start http://$1 /B