* If no ID is given, compute one.
svn path=/configurations/trunk/tud/; revision=27051
Eelco Dolstra committed
Apr 29, 2011 at 14:37 UTC
89b3b32293d928a7b0bb5b6f7b69d2979090b90a
1 file changed
+16
-13
cloud/scripts/create-vm
+16
-13
@@ -3,9 +3,13 @@
3
set -e
4
5
id="$1"
6
+
7
+# Assign a number to the VM. From this we derive the MAC and IPv6 addresses.
8
+lastnr=$(flock -x /vmdisks/adhoc-cloud/lock -c 'lastnr=$(cat /vmdisks/adhoc-cloud/last-nr || echo 65536); lastnr=$(($lastnr + 1)); echo $lastnr; echo $lastnr > /vmdisks/adhoc-cloud/last-nr')
9
+
10
+# If no id is given, use the number.
11
if [ -z "$id" ]; then
7
- echo "Syntax: $0 ID"
8
- exit 1
12
+ id="i-$lastnr"
13
fi
14
15
xml=/vmdisks/adhoc-cloud/"$id".xml
@@ -13,20 +17,17 @@ image=/vmdisks/adhoc-cloud/"$id".qcow2
17
info=/vmdisks/adhoc-cloud/"$id".info
18
19
if [ -e "$info" -o -e "$xml" -o -e "$image" ]; then
16
- echo "Virtual machine $id exists!"
20
+ echo "Virtual machine $id exists!" >&2
21
exit 1
22
fi
23
20
-# Assign a number to the VM. From this we derive the MAC and IPv6 addresses.
21
-lastnr=$(flock -x /vmdisks/adhoc-cloud/lock -c 'lastnr=$(cat /vmdisks/adhoc-cloud/last-nr || echo 65536); lastnr=$(($lastnr + 1)); echo $lastnr; echo $lastnr > /vmdisks/adhoc-cloud/last-nr')
22
-
24
# Compute the MAC.
25
hex=$(printf "%06x" $lastnr)
26
mac="00:16:3e:${hex:0:2}:${hex:2:2}:${hex:4:2}"
27
ipv6="2001:610:685:1:216:3eff:fe${hex:0:2}:${hex:2:2}${hex:4:2}"
28
28
-echo "MAC address is $mac"
29
-echo "IPv6 address is $ipv6"
29
+echo "MAC address is $mac" >&2
30
+echo "IPv6 address is $ipv6" >&2
31
32
echo "$ipv6" > "$info"
33
@@ -60,18 +61,20 @@ cat > "$xml" <<EOF
61
</domain>
62
EOF
63
63
-qemu-img create -f qcow2 "$image" -b /vmdisks/nixos-0.1pre26294-x86_64-base.qcow2
64
+qemu-img create -f qcow2 "$image" -b /vmdisks/nixos-0.1pre26294-x86_64-base.qcow2 >&2
65
65
-virsh define "$xml"
66
+virsh define "$xml" >&2
67
67
-virsh start "adhoc-cloud-$id"
68
+virsh start "adhoc-cloud-$id" >&2
69
70
# Wait until SSH is up.
71
if [ "$ASYNC" != 1 ]; then
72
echo -n "Waiting for machine to finish booting..." >&2
73
for ((i = 0; i < 60; i++)); do
74
if ping6 -c1 "$ipv6" > /dev/null; then break; fi
74
- echo -n "."
75
+ echo -n "." >&2
76
done
76
- echo
77
+ echo >&2
78
fi
79
+
80
+echo $id