114 lines
5.4 KiB
Bash
Executable File
114 lines
5.4 KiB
Bash
Executable File
#!/bin/bash -ex
|
|
# Config-ish
|
|
MAGNET_511_ISO='magnet:?xt=urn:btih:63907abc2acf276d595cd12f9723088fd66cbe24&dn=MirantisOpenStack-5.1.1.iso&tr=http%3A%2F%2Ftracker01-bud.infra.mirantis.net%3A8080%2Fannounce&tr=http%3A%2F%2Ftracker01-msk.infra.mirantis.net%3A8080%2Fannounce&tr=http%3A%2F%2Ftracker01-mnv.infra.mirantis.net%3A8080%2Fannounce&tr=http%3A%2F%2Fseed-qa.msk.mirantis.net%3A8080%2Fannounce&ws=http%3A%2F%2Ffuel-storage.srt.mirantis.net%2Ffuelweb%2FMirantisOpenStack-5.1.1.iso'
|
|
MAGNET_60_LRZ='magnet:?xt=urn:btih:d8bda80a9079e1fc0c598bc71ed64376103f2c4f&dn=MirantisOpenStack-6.0-upgrade.tar.lrz&tr=http%3A%2F%2Ftracker01-bud.infra.mirantis.net%3A8080%2Fannounce&tr=http%3A%2F%2Ftracker01-msk.infra.mirantis.net%3A8080%2Fannounce&tr=http%3A%2F%2Ftracker01-mnv.infra.mirantis.net%3A8080%2Fannounce&tr=http%3A%2F%2Fseed-qa.msk.mirantis.net%3A8080%2Fannounce&ws=http%3A%2F%2Ffuel-storage.srt.mirantis.net%2Ffuelweb%2FMirantisOpenStack-6.0-upgrade.tar.lrz'
|
|
MAGNET_61_LRZ='magnet:?xt=urn:btih:ee1222ff4b8633229f49daa6e6e62d02ef77b606&dn=MirantisOpenStack-6.1-upgrade.tar.lrz&tr=http%3A%2F%2Ftracker01-bud.infra.mirantis.net%3A8080%2Fannounce&tr=http%3A%2F%2Ftracker01-mnv.infra.mirantis.net%3A8080%2Fannounce&tr=http%3A%2F%2Ftracker01-msk.infra.mirantis.net%3A8080%2Fannounce&ws=http%3A%2F%2Fvault.infra.mirantis.net%2FMirantisOpenStack-6.1-upgrade.tar.lrz'
|
|
MAGNET_61_ISO='magnet:?xt=urn:btih:9d59953417e0c2608f8fa0ffe43ceac00967708f&dn=MirantisOpenStack-6.1.iso&tr=http%3A%2F%2Ftracker01-bud.infra.mirantis.net%3A8080%2Fannounce&tr=http%3A%2F%2Ftracker01-mnv.infra.mirantis.net%3A8080%2Fannounce&tr=http%3A%2F%2Ftracker01-msk.infra.mirantis.net%3A8080%2Fannounce&ws=http%3A%2F%2Fvault.infra.mirantis.net%2FMirantisOpenStack-6.1.iso'
|
|
DOWNLOAD_TORRENTS="$MAGNET_511_ISO $MAGNET_60_LRZ $MAGNET_61_LRZ"
|
|
FUEL_ISO='MirantisOpenStack-5.1.1.iso'
|
|
|
|
MYDIR="$(readlink -e "$(dirname "$BASH_SOURCE")")"
|
|
|
|
sudo apt-get update
|
|
|
|
# Use provided preseed.cfg to install everything
|
|
|
|
# Install and start PolicyKit separately to avoid issues during install later
|
|
sudo apt-get install -y policykit-1
|
|
sudo service polkitd start
|
|
|
|
sudo apt-get isntall -y dpkg-dev acl
|
|
|
|
# Transmission
|
|
sudo apt-get install -y transmission-cli transmission-daemon
|
|
DOWNLOADS_DIR="$HOME/Downloads"
|
|
mkdir -p "$DOWNLOADS_DIR"
|
|
setfacl -m 'user:debian-transmission:rwx' "$DOWNLOADS_DIR"
|
|
sudo service transmission-daemon stop
|
|
EDIT_SCRIPT='import sys,json; i=iter(sys.argv); next(i); fname=next(i); s=json.load(open(fname)); s.update(zip(i,i)); json.dump(s,open(fname,"w"),indent=4,sort_keys=True)'
|
|
sudo python3 -c "$EDIT_SCRIPT" /etc/transmission-daemon/settings.json download-dir "$DOWNLOADS_DIR"
|
|
sudo service transmission-daemon start
|
|
for magnet in $DOWNLOAD_TORRENTS; do
|
|
transmission-remote -n transmission:transmission -a "$magnet"
|
|
done
|
|
|
|
# Libvirt
|
|
# Fucking https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1343245
|
|
printf ' /dev/zvol/vms/* rw,\n /dev/zd* 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 -y libvirt-bin
|
|
sudo apt-get install -y devscripts
|
|
cd libvirt-1.2.12
|
|
patch -p0 < "$MYDIR/libvirt.patch"
|
|
debuild -uc -us -b
|
|
cd ..
|
|
sudo dpkg -i --force-confnew libvirt0_*_amd64.deb libvirt-bin_*_amd64.deb
|
|
popd
|
|
|
|
# Setup ZFS pool
|
|
virsh pool-define-as vms zfs --source-name vms
|
|
# no pool-build since we need -f flag for zpool create
|
|
sudo zpool create -f vms /dev/sdc
|
|
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="<forward mode='nat'/><ip address='10.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
|
|
|
|
# Don't let LVM find zvols
|
|
sudo sed -i 's#.*global_filter =.*# global_filter = [ "r|^/dev/zd.*|", "r|^/dev/zvol/.*|" ]#' /etc/lvm/lvm.conf
|
|
|
|
# Install hook to create redirects to master node
|
|
sudo cp "$MYDIR/libvirt-qemu-hook.py" /etc/libvirt/hooks/qemu
|
|
sudo service libvirt-bin restart
|
|
|
|
# Master node
|
|
while [ ! -f "$DOWNLOADS_DIR/$FUEL_ISO" ]; do
|
|
sleep 10
|
|
done
|
|
virsh vol-create-as vms fuel 100G
|
|
virsh define <(sed "s|%ISO%|$DOWNLOADS_DIR/$FUEL_ISO|" "$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
|