-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlaunch-vm
executable file
·77 lines (57 loc) · 2.38 KB
/
launch-vm
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
#!/bin/bash
SERVER="$1"
RELEASE="$2"
NAME="$3"
GROUP="$4"
IP="$5"
GW="$6"
KEY="$7"
case "$GROUP" in
"dev")
KEY+=$'\n'
KEY+="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMCBYZIgMwjph+MuXycHXknE0mgIg8DdAB+hP6Nh9JoGy1unp9DxgZZ62iJ+ILXI/lH1P4lN1VBw1jcT1UaU9kc= ubuntu@dev"
;;
"prod")
KEY+=$'\n'
KEY+="ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBD1a8H1MNIx3Glwf/yOaQ7wx+EV8dFqsflTqyMSpzA/9in5BmuZAyi/VVSZYz0w9htgIj9tVvcTBZi/xmozcPs8= ubuntu@prod"
;;
esac
POOL="ssd"
cat << EOF > /tmp/launch-vm.sh
#!/bin/bash
set -x
set -e
zfs clone "\`zfs list -t all | grep hirsute | tail -n1 | cut -f1 -d' '\`" "$POOL/$GROUP-$NAME"
echo "Waiting for devices to settle..."
sleep 2
MNTDIR="/tmp/mnt_$GROUP-$NAME"
mkdir -p \$MNTDIR
growpart /dev/zvol/$POOL/$GROUP-$NAME 1
e2fsck -f /dev/zvol/$POOL/$GROUP-$NAME-part1
resize2fs /dev/zvol/$POOL/$GROUP-$NAME-part1
mount /dev/zvol/$POOL/$GROUP-$NAME-part1 \$MNTDIR
pushd /tmp > /dev/null
apt-get download qemu-guest-agent liburing1
dpkg --install --root=\$MNTDIR --admindir=\$MNTDIR/var/lib/dpkg *.deb
rm *.deb
popd > /dev/null
chroot \$MNTDIR /usr/sbin/adduser --home=/home/ubuntu --shell=/bin/bash --gecos=Ubuntu ubuntu --disabled-password
chroot \$MNTDIR /usr/bin/gpasswd -a ubuntu sudo
echo "ubuntu:ubuntu" | chroot \$MNTDIR /usr/sbin/chpasswd
mkdir \$MNTDIR/home/ubuntu/.ssh
echo "$KEY" >> \$MNTDIR/home/ubuntu/.ssh/authorized_keys
sed -i 's/%sudo.*/%sudo ALL=(ALL) NOPASSWD: ALL/' \$MNTDIR/etc/sudoers
echo $NAME > \$MNTDIR/etc/hostname
sed -i 's/127.0.0.1 localhost/\0\n127.0.1.1 $NAME/' \$MNTDIR/etc/hosts
echo -e 'network:\n version: 2\n renderer: networkd\n ethernets:\n enp1s0:\n addresses:\n - $IP\n gateway4: $GW\n nameservers:\n search: [$GROUP.vm.ea.home]\n addresses: [172.19.255.254]\n' > \$MNTDIR/etc/netplan/00-default.yaml
chroot \$MNTDIR /usr/bin/ssh-keygen -A
umount \$MNTDIR
rmdir \$MNTDIR
virt-install --connect qemu:///system --virt-type kvm --name $GROUP-$NAME --ram 4096 --vcpus 4 --disk path=/dev/zvol/$POOL/$GROUP-$NAME,format=raw,bus=virtio --import --network network=net-$GROUP,model=virtio --noautoconsole --os-variant ubuntu20.04 --console pty,target_type=virtio --graphics none
echo
virsh dominfo $GROUP-$NAME
rm /tmp/launch-vm.sh
EOF
scp /tmp/launch-vm.sh $SERVER:/tmp/launch-vm.sh
ssh -t $SERVER sudo bash /tmp/launch-vm.sh
rm /tmp/launch-vm.sh