-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathaoi-launch
executable file
·105 lines (88 loc) · 3.05 KB
/
aoi-launch
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/bin/bash -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
function error {
echo "$@"
exit 1
}
if [ "$1" == "" ]; then
echo "Must supply a VM name to create."
exit 1
else
NAME=$1
fi
if [ "$2" == "" ]; then
DISTRO=trusty
else
DISTRO=$2
fi
HOSTNAME=$NAME
INSTANCE=$NAME
IMAGES_DIR=$HOME/.cloud-images
TARGET_IMAGE=$HOSTNAME.img
TARGET_IMAGE_PATH=$IMAGES_DIR/$HOSTNAME.img
CDROM=${IMAGES_DIR}/${HOSTNAME}-config.iso
virsh pool-define-as \
--name cloud-images --type dir --target $IMAGES_DIR 2> /dev/null \
|| echo "Image pool already exists: $IMAGES_DIR"
pushd $IMAGES_DIR > /dev/null 2>&1
BACKING_IMAGE=$(readlink $DISTRO.baseimg) || echo "Base image not found."
if [ "$BACKING_IMAGE" == "" ]; then
echo "Must specify a distribution that matches an existing image."
echo "Available images:"
find . -type l -name '*.baseimg' | sed 's/\.\// /' | sed 's/.baseimg$//'
exit 1
fi
BACKING_IMAGE_PATH=$IMAGES_DIR/$BACKING_IMAGE
qemu-img create -f qcow2 -b "$BACKING_IMAGE" $TARGET_IMAGE
qemu-img resize $TARGET_IMAGE +25GB
qemu-img info $TARGET_IMAGE
popd > /dev/null 2>&1
# Create a CD-ROM with cloud-init meta-data and user-data files.
CIDATA=$(mktemp -d)
$SCRIPT_DIR/aoi-get-cloud-metadata $HOSTNAME > "$CIDATA"/meta-data
$SCRIPT_DIR/aoi-get-cloud-userdata > "$CIDATA"/user-data
pushd "$CIDATA"
echo "cloud-init meta data:"
cat meta-data
echo ""
echo "cloud-init user data:"
cat user-data
echo ""
echo "Writing cloud-init data to: $CDROM"
genisoimage -o $CDROM -V cidata -r -input-charset utf-8 -J meta-data user-data
popd
rm -rf "$CIDATA"
virt-install \
--name $HOSTNAME \
--virt-type kvm --hvm --noautoconsole \
--import --disk=$TARGET_IMAGE_PATH,backing_store=$BACKING_IMAGE_PATH --disk=$CDROM,device=cdrom \
--memory 1024 \
--network network=default,mac=$($SCRIPT_DIR/aoi-get-mac $HOSTNAME) \
--network network=testnet,mac=$($SCRIPT_DIR/aoi-get-mac testnet-$HOSTNAME)
virsh autostart $HOSTNAME
function wait_for {
while [ "$($SCRIPT_DIR/aoi-ssh $1 echo OK 2> /dev/null)" != "OK" ]; do
sleep 0.1
done
}
echo -n "Waiting for $HOSTNAME to become available..."
wait_for $HOSTNAME
printf "\n"
if [ "$DISTRO" == "xenial" ]; then
# xenial cloud-init has a race condition whereby the hostname provided
# by DHCP will not be correct. Need to force a DHCP renewal.
# See https://launchpad.net/bugs/1574963
echo "Rebooting to reset lease table..."
$SCRIPT_DIR/aoi-ssh $HOSTNAME sudo service networking reload
wait_for $HOSTNAME
fi
UBUNTU_ARCHIVE_HOST="$(aoi config get ubuntu_archive_host '')"
UBUNTU_SECURITY_HOST="$(aoi config get ubuntu_security_host '')"
if [ "$ARCHIVE_HOST" != "" ]; then
$SCRIPT_DIR/aoi-ssh $HOSTNAME sudo sed --in-place "s/archive.ubuntu.com/$UBUNTU_ARCHIVE_HOST/" /etc/apt/sources.list
fi
if [ "$SECURITY_ARCHIVE_HOST" != "" ]; then
$SCRIPT_DIR/aoi-ssh $HOSTNAME sudo sed --in-place "s/security.ubuntu.com/$UBUNTU_SECURITY_HOST/" /etc/apt/sources.list
fi
echo "$HOSTNAME is now available. To access, use:"
echo " $SCRIPT_DIR/aoi-ssh $HOSTNAME [command]"