blob: 9fa374b4569027c46fc1038af1e0dde303401837 (
plain)
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
|
#!/bin/bash
set -eu -o pipefail
cloud_init_iso()
{
local iso="$1"
local hostname="$2"
local pubkey="$3"
local dir="$(mktemp -d)"
cat <<EOF > "$dir/meta-data"
# Amazon EC2 style metadata
local-hostname: $hostname
EOF
cat <<EOF > "$dir/user-data"
#cloud-config
ssh_authorized_keys:
- $pubkey
EOF
genisoimage -quiet -volid cidata -joliet -rock -output "$iso" "$dir"
rm -rf "$dir"
}
create_vm()
{
local name="$1"
local memory="$2"
local image="$3"
local iso="$4"
virt-install \
--name="$name" \
--memory "$memory" \
--disk="path=$image,cache=none" \
--disk="path=$iso,readonly=on" \
--network=network=default \
--quiet \
--connect qemu:///system \
--cpu=host-passthrough \
--os-variant=debian9 \
--import \
--graphics=spice \
--noautoconsole
}
wait_for_ssh()
{
local host="$1"
while ! nc -w 1 "$host" 22 < /dev/null > /dev/null
do
sleep 5
done
}
main()
{
local base="$1"
local vm="$2"
local memory="$3"
local img="$4"
local size="$5"
local pubkey="$(cat "$6")"
local iso="$vm.iso"
cloud_init_iso "$vm.iso" "$vm" "$pubkey"
cp "$base" "$img"
qemu-img resize -q "$img" "$size"
create_vm "$vm" "$memory" "$img" "$iso"
wait_for_ssh "$vm"
rm -f "$iso"
}
main "$@"
|