71 lines
2.3 KiB
Bash
Executable File
71 lines
2.3 KiB
Bash
Executable File
#!/bin/bash -ex
|
|
MYDIR="$(readlink -e "$(dirname "$BASH_SOURCE")")"
|
|
# Use provided preseed.cfg to install everything
|
|
# Fucking https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1343245
|
|
printf ' /dev/vms/* rw,\n /dev/dm-* rw,\n' | sudo tee -a /etc/apparmor.d/abstractions/libvirt-qemu > /dev/null
|
|
# Build and install Libvirt package with ZFS support
|
|
mkdir ~/libvirt-build
|
|
pushd ~/libvirt-build
|
|
apt-get source libvirt-bin
|
|
sudo apt-get build-dep libvirt-bin
|
|
sudo apt-get install devscripts
|
|
cd libvirt-1.2.12
|
|
patch -p0 < "$MYDIR/libvirt.patch"
|
|
debuild -uc -us -b
|
|
cd ..
|
|
sudo dpkg -i --force-confnew libvirt0_1.2.12-0ubuntu13_amd64.deb libvirt-bin_1.2.12-0ubuntu13_amd64.deb
|
|
popd
|
|
# Setup ZFS
|
|
virsh pool-define-as vms zfs --source-dev /dev/sdc
|
|
virsh pool-build vms
|
|
virsh pool-autostart vms
|
|
virsh pool-start vms
|
|
|
|
# Networks
|
|
virsh net-undefine default
|
|
for net in admin management private public storage; do
|
|
if [ "$net" = "admin" ]; then
|
|
fwd="<ip address='172.20.0.1' prefix='24'></ip>"
|
|
elif [ "$net" = "public" ]; then
|
|
fwd="<forward mode='nat'/><ip address='172.16.0.1' prefix='24'></ip>"
|
|
else
|
|
fwd=""
|
|
fi
|
|
virsh net-define <(echo "<network><name>$net</name>$fwd</network>")
|
|
virsh net-autostart $net
|
|
virsh net-start $net
|
|
done
|
|
|
|
# Master node
|
|
# Download ISO from some node
|
|
virsh vol-create-as vms fuel 100G
|
|
virsh define "$MYDIR/fuel.xml"
|
|
virsh start fuel
|
|
virsh event fuel lifecycle # wait for shutdown on reboot
|
|
virsh event fuel lifecycle --timeout 5 # wait for final shutdown on reboot
|
|
# This error is OK: (see https://www.redhat.com/archives/libvir-list/2015-April/msg00619.html)
|
|
# error: internal error: virsh event: no domain VSH_OT_DATA option
|
|
EDITOR="sed -i '/boot.*cdrom/d; /on_reboot/d'" virsh edit fuel # don't boot from CD, don't destroy on reboot
|
|
virsh start fuel
|
|
virsh autostart fuel
|
|
sleep 600 # let it install everything
|
|
|
|
# Other nodes
|
|
for i in $(seq 1 6); do
|
|
name="controller-$i"
|
|
virsh vol-create-as vms $name 100G
|
|
virsh define <(sed "s/%NAME%/$name/; s/%CPU%/2/; s/%MEMORY%/4/; /-ceph/d" "$MYDIR/node.xml")
|
|
virsh autostart $name
|
|
virsh start $name
|
|
sleep 120
|
|
done
|
|
for i in $(seq 1 6); do
|
|
name="compute-$i"
|
|
virsh vol-create-as vms $name 100G
|
|
virsh vol-create-as vms $name-ceph 100G
|
|
virsh define <(sed "s/%NAME%/$name/; s/%CPU%/4/; s/%MEMORY%/8/" "$MYDIR/node.xml")
|
|
virsh autostart $name
|
|
virsh start $name
|
|
sleep 120
|
|
done
|