Skip to content

Instantly share code, notes, and snippets.

@sean-perryman
Created January 8, 2022 00:27
Show Gist options
  • Save sean-perryman/70dbc31c560d2680e1055c720ce90246 to your computer and use it in GitHub Desktop.
Save sean-perryman/70dbc31c560d2680e1055c720ce90246 to your computer and use it in GitHub Desktop.
#!/bin/bash
#
# MicroStack by Canonical - Helper Install Script
#
# This script installs the MicroStack snap and setups up the networking fix developed by Rodrigo Nascimento
#
# Original blog post available here: https://connection.rnascimento.com/2021/03/08/openstack-single-node-microstack/
#
# Note: Make sure you adjust the INTERFACE and IP_ADDRESS variables to your environment.
# If you make the IP_ADDRESS the same as your current address you won't lose connection.
#
#Exit if not running as root or with sudo
if [ "$(id -u)" -ne 0 ]; then
echo 'This script must be run by root or with sudo' >&2
exit 1
fi
INTERFACE="enp5s0"
IP_ADDRESS="192.168.88.41"
# Install MicroStack
snap install microstack --devmode --beta
microstack init --auto --control
# Alias useful commands
snap alias microstack.ovs-vsctl ovs-vsctl
snap alias microstack.openstack openstack
# Set up the OpenVSwitch bridge per the above-mentioned blog post
echo Setting up the OVS bridge, hold on to your butts...
ovs-vsctl add-port br-ex $INTERFACE
ip addr flush dev $INTERFACE
ip addr add $IP_ADDRESS/24 dev br-ex
ip link set br-ex up
# Create the service file
echo Creating the microstack-br-workaround.service file
echo "[Unit]" > /etc/systemd/system/microstack-br-workaround.service
echo "Description=Service for adding physical ip to microstack bridge" >> /etc/systemd/system/microstack-br-workaround.service
echo "Requires=snap.microstack.external-bridge.service" >> /etc/systemd/system/microstack-br-workaround.service
echo "After=snap.microstack.external-bridge.service" >> /etc/systemd/system/microstack-br-workaround.service
echo >> /etc/systemd/system/microstack-br-workaround.service
echo "[Service]" >> /etc/systemd/system/microstack-br-workaround.service
echo "ExecStart=/usr/local/bin/microstack-br-workaround" >> /etc/systemd/system/microstack-br-workaround.service
echo "SyslogIdentifier=microstack-br-workaround" >> /etc/systemd/system/microstack-br-workaround.service
echo "Restart=no" >> /etc/systemd/system/microstack-br-workaround.service
echo "WorkingDirectory=/usr/local/bin" >> /etc/systemd/system/microstack-br-workaround.service
echo "TimeoutStopSec=30" >> /etc/systemd/system/microstack-br-workaround.service
echo "Type=oneshot" >> /etc/systemd/system/microstack-br-workaround.service
echo >> /etc/systemd/system/microstack-br-workaround.service
echo "[Install]" >> /etc/systemd/system/microstack-br-workaround.service
echo "WantedBy=multi-user.target" >> /etc/systemd/system/microstack-br-workaround.service
# Create the script and chmod +x it
echo Creating the microstack-br-workaround script
echo "#!/bin/bash" > /usr/local/bin/microstack-br-workaround
echo "ip address add $IP_ADDRESS dev br-ex || :" >> /usr/local/bin/microstack-br-workaround
echo "ip link set br-ex up || :" >> /usr/local/bin/microstack-br-workaround
chmod +x /usr/local/bin/microstack-br-workaround
# Enable the service to maintain post-reboot
echo Enabling microstack-br-workaround service
systemctl daemon-reload
systemctl enable microstack-br-workaround.service --now
# Get the admin password and output to a file. Chown just in case.
snap get microstack config.credentials.keystone-password > /home/ubuntu/openstack_admin_password.txt
chown ubuntu:ubuntu /home/ubuntu/openstack_admin_password.txt
# All done!
echo Horizon Admin Password: | cat /home/ubuntu/openstack_admin_password.txt
echo Horizon URL: https://$IP_ADDRESS
echo Done!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment