Many update

* Move all configs into config directory
* Move all examples into example directoy
* Move all common functions into functions.sh
* Fine tune a few other functions
* Moved common hypervisor config away
* Added examples for some of the hypervisor configs
* Start work on snap enablement of boostrap-maas.sh script
This commit is contained in:
Arif Ali 2020-12-26 20:03:28 +00:00
parent f9ba912164
commit 098be2f389
Signed by: arif
GPG Key ID: 369608FBA1353A70
19 changed files with 282 additions and 271 deletions

View File

@ -4,13 +4,13 @@ This is a quick-and-dirty set of shell scripts that will build out and
bootstrap a MAAS environment with all of the bits and pieces you need to get
it running for any cloud, any workload.
* `manage-maas-nodes`...: Create kvm instances that MAAS will manage
* `bootstrap--maas.sh`..: Build and bootstrap your MAAS environment
* `manage-maas-nodes.sh.......`: Create kvm instances that MAAS will manage
* `manage-hypervisor-nodes.sh.`: Create hypervisors that MAAS will manage
* `bootstrap-maas.sh..........`: Build and bootstrap your MAAS environment
There are plenty of options to customize its behavior, as well as drop in to
any step of the process without rebuilding the full MAAS from scratch.
## Requirements
Requires, minimally, `bash`, `jq` and a working Ubuntu environment. This
@ -18,7 +18,6 @@ has **not** been tested on CentOS or Debian, but should work minimally on
those environments, if you choose to make that your host. Patches are
welcome, of course.
## Components
```
@ -45,7 +44,6 @@ newer PostgreSQL dependencies.
MAAS from snap is also not supported (yet) again for the same SQL
dependencies which are included inside the MAAS snap.
## TODO and What's Next
* Support for using MAAS from snap vs. main or PPA. With snap, postgresql

View File

@ -1,46 +0,0 @@
hypervisor_name=asrock02
hypervisor_ip=10.0.1.251
hypervisor_mac="a8:a1:59:44:76:79"
external_vlan=1
qemu_connection="qemu+ssh://virsh@${hypervisor_ip}/system"
qemu_password="SgUoBByKjG9Lj78SwfWAHXD8DvgE67Cu"
storage_path="/var/lib/libvirt/maas-images"
compute="as2-maas-node"
control_count=1
control_cpus=3
control_ram=8192
node_count=11
node_start=1
node_cpus=2
node_ram=4096
disks=()
disks+=(50)
disks+=(20)
disks+=(20)
network_type=bridge
vlans=()
vlans+=(300)
vlans+=(301)
vlans+=(302)
vlans+=(303)
vlans+=(304)
vlans+=(305)
vlans+=(1)
bridges=()
bridges+=("br0")
bridges+=("br1")
bridges+=("br2")
bridges+=("br3")
bridges+=("br4")
bridges+=("br5")
bridges+=("br6")

View File

@ -39,6 +39,8 @@ init_variables() {
core_packages=( jq moreutils uuid )
maas_packages=( maas maas-cli maas-proxy maas-dhcp maas-dns maas-rack-controller maas-region-api maas-common )
pg_packages=( postgresql-10 postgresql-client postgresql-client-common postgresql-common )
maas_snaps=( maas maas-test-db )
}
remove_maas() {
@ -56,12 +58,21 @@ remove_maas() {
done
}
remove_maas_snap() {
sudo snap remove ${maas_snaps[@]}
}
install_maas() {
# This is separate from the removal, so we can handle them atomically
sudo apt-get -fuy --reinstall install "${core_packages}" "${maas_packages[@]}" "${pg_packages[@]}"
sudo sed -i 's/DISPLAY_LIMIT=5/DISPLAY_LIMIT=100/' /usr/share/maas/web/static/js/bundle/maas-min.js
}
install_maas_snap() {
sudo apt-get -fuy --reinstall install "${core_packages}"
sudo snap install ${maas_snaps[@]} --channel=$maas_version/stable
}
purge_admin_user() {
read -r -d '' purgeadmin <<EOF
@ -72,7 +83,10 @@ with deleted_user as (delete from auth_user where username = '$maas_profile' ret
delete from piston3_consumer where user_id = (select id from deleted_user);
EOF
sudo -u postgres psql -c "$purgeadmin" maasdb
psql_cmd="psql"
[[ $maas_pkg_type == "snap" ]] && psql_cmd="maas-test-db.psql"
sudo -u postgres $psql_cmd -c "$purgeadmin" maasdb
}
build_maas() {
@ -85,7 +99,11 @@ build_maas() {
if [ -f ~/.maas-api.key ]; then
rm ~/.maas-api.key
maas_api_key="$(sudo maas-region apikey --username=$maas_profile | tee ~/.maas-api.key)"
maas_cmd="maas-region"
[[ $maas_pkg_type == "snap" ]] && maas_cmd="maas"
maas_api_key="$(sudo ${maas_cmd} apikey --username $maas_profile | head -n 1 | tee ~/.maas-api.key)"
fi;
# Fetch the MAAS API key, store to a file for later reuse, also set this var to that value
@ -125,19 +143,21 @@ build_maas() {
sleep 3
maas $maas_profile vlan update fabric-1 0 dhcp_on=True primary_rack="$maas_system_id"
# This is needed, because it points to localhost by default and will fail to
# commission/deploy in this state
echo "DEBUG: http://$maas_bridge_ip:5240/MAAS/"
if [[ $maas_pkg_type == "deb" ]]; then
# This is needed, because it points to localhost by default and will fail to
# commission/deploy in this state
echo "DEBUG: http://$maas_bridge_ip:5240/MAAS/"
sudo debconf-set-selections maas.debconf
sleep 2
# sudo maas-rack config --region-url "http://$maas_bridge_ip:5240/MAAS/" && sudo service maas-rackd restart
sudo DEBIAN_FRONTEND=noninteractive dpkg-reconfigure maas-rack-controller
sleep 2
sudo debconf-set-selections maas.debconf
sleep 2
# sudo maas-rack config --region-url "http://$maas_bridge_ip:5240/MAAS/" && sudo service maas-rackd restart
sudo DEBIAN_FRONTEND=noninteractive dpkg-reconfigure maas-rack-controller
sleep 2
sudo DEBIAN_FRONTEND=noninteractive dpkg-reconfigure maas-region-controller
sudo service maas-rackd restart
sleep 5
sudo DEBIAN_FRONTEND=noninteractive dpkg-reconfigure maas-region-controller
sudo service maas-rackd restart
sleep 5
fi
}
bootstrap_maas() {
@ -171,12 +191,12 @@ bootstrap_maas() {
# These are for juju, adding a cloud matching the customer/reproducer we need
add_cloud() {
if ! [ -x "$(command -v juju)" ]; then
sudo snap install juju --channel "$juju_version"
fi
rand_uuid=$(uuid -F siv)
cloud_name="$1"
maas_api_key=$(<~/.maas-api.key)
if ! [ -x "$(command -v juju)" ]; then
sudo snap install juju --channel "$juju_version"
fi
rand_uuid=$(uuid -F siv)
cloud_name="$1"
maas_api_key=$(<~/.maas-api.key)
cat > clouds-"$rand_uuid".yaml <<EOF
clouds:
@ -234,7 +254,7 @@ EOF
# Since we created ephemeral files, let's wipe them out. Comment if you want to keep them around
if [[ $? = 0 ]]; then
rm -f clouds-"$rand_uuid".yaml credentials-"$rand_uuid".yaml config-"$rand_uuid".yaml
rm -f clouds-"$rand_uuid".yaml credentials-"$rand_uuid".yaml config-"$rand_uuid".yaml
fi
juju enable-ha
@ -247,7 +267,6 @@ destroy_cloud() {
juju --debug clouds --format json | jq --arg cloud "$cloud_name" '.[$cloud]'
juju --debug remove-cloud "$cloud_name"
}
show_help() {
@ -281,54 +300,54 @@ no_proxy="localhost,127.0.0.1,$maas_system_ip,$(echo $maas_ip_range.{100..200} |
while getopts ":a:bc:ij:nt:r" opt; do
case $opt in
a )
check_bins
remove_maas
install_maas
build_maas
bootstrap_maas
add_cloud "$OPTARG"
;;
check_bins
remove_maas
install_maas
build_maas
bootstrap_maas
add_cloud "$OPTARG"
;;
b )
echo "Building out a new MAAS server"
check_bins
install_maas
build_maas
bootstrap_maas
exit 0
;;
echo "Building out a new MAAS server"
check_bins
install_maas
build_maas
bootstrap_maas
exit 0
;;
c )
check_bins maas
init_variables
add_cloud "$OPTARG"
;;
check_bins maas
init_variables
add_cloud "$OPTARG"
;;
i )
echo "Installing MAAS and PostgreSQL dependencies"
install_maas
exit 0
;;
echo "Installing MAAS and PostgreSQL dependencies"
install_maas
exit 0
;;
j )
echo "Bootstrapping Juju controller $OPTARG"
add_cloud "$OPTARG"
exit 0
;;
echo "Bootstrapping Juju controller $OPTARG"
add_cloud "$OPTARG"
exit 0
;;
r )
remove_maas
exit 0
;;
remove_maas
exit 0
;;
t )
destroy_cloud "$OPTARG"
exit 0
;;
\? )
printf "Unrecognized option: -%s. Valid options are:" "$OPTARG" >&2
show_help
exit 1
;;
destroy_cloud "$OPTARG"
exit 0
;;
\? )
printf "Unrecognized option: -%s. Valid options are:" "$OPTARG" >&2
show_help
exit 1
;;
: )
printf "Option -%s needs an argument.\n" "$OPTARG" >&2
show_help
echo ""
exit 1
printf "Option -%s needs an argument.\n" "$OPTARG" >&2
show_help
echo ""
exit 1
;;
esac
done

7
configs/asrock01.config Normal file
View File

@ -0,0 +1,7 @@
hypervisor_name=asrock01
hypervisor_ip=10.0.1.253
hypervisor_mac="a8:a1:59:44:70:ac"
external_ip=192.168.1.211
compute="as1-maas-node"

7
configs/asrock02.config Normal file
View File

@ -0,0 +1,7 @@
hypervisor_name=asrock02
hypervisor_ip=10.0.1.251
hypervisor_mac="a8:a1:59:44:76:79"
external_ip=192.168.1.212
compute="as2-maas-node"

7
configs/asrock03.config Normal file
View File

@ -0,0 +1,7 @@
hypervisor_name=asrock03
hypervisor_ip=10.0.1.250
hypervisor_mac=""
external_ip=192.168.1.213
compute="as3-maas-node"

14
configs/hp01.config Normal file
View File

@ -0,0 +1,14 @@
hypervisor_name=hp01
hypervisor_ip=10.0.1.252
hypervisor_mac="e0:07:1b:ff:27:48"
qemu_connection="qemu+ssh://virt@10.0.1.252/system"
qemu_password="5b5Bnev4kh3QeDGQ4KK8bVtX"
storage_path="/var/lib/vz/maas"
external_ip=192.168.1.200
compute="hp1-maas-node"
node_count=7

View File

@ -1,7 +1,3 @@
hypervisor_name=asrock01
hypervisor_ip=10.0.1.253
hypervisor_mac="a8:a1:59:44:70:ac"
external_vlan=1
qemu_connection="qemu+ssh://virsh@${hypervisor_ip}/system"
@ -9,8 +5,6 @@ qemu_password="SgUoBByKjG9Lj78SwfWAHXD8DvgE67Cu"
storage_path="/var/lib/libvirt/maas-images"
compute="as1-maas-node"
control_count=1
control_cpus=3
control_ram=8192

View File

@ -9,12 +9,12 @@ maas_pass="openstack"
maas_profile="admin"
maas_system_ip="192.168.1.10"
maas_upstream_dns="1.1.1.1 4.4.4.4 8.8.8.8"
maas_user="maas"
maas_version="2.4"
maas_user="admin"
maas_version="2.8"
maas_api_key="z9cT7jE3BhmxcXkWWN:ew5WW9QdDMg8TXVnjt:NtKgJdfgA5FVw2YT9CnaKU87wJ5fTxKa"
no_proxy="localhost,127.0.0.1,$maas_system_ip"
squid_proxy="http://192.168.100.10:3128"
virsh_user="ubuntu"
virsh_user="virsh"
package_repository="http://$maas_bridge_ip:8765/mirror/ubuntu"
snap_store_proxy="$squid_proxy"
snap_store_assertions=""

View File

@ -1,23 +1,18 @@
qemu_connection="qemu+ssh://virt@10.0.1.252/system"
qemu_password="5b5Bnev4kh3QeDGQ4KK8bVtX"
storage_path="/var/lib/vz/maas"
qemu_connection="qemu+ssh://virsh@10.0.1.253/system"
qemu_password="seBGtkWFKZuFUFgig8NYU5uh"
storage_path="/var/lib/libvirt/maas-images"
compute="hp1-maas-node"
compute="maas-node"
control_count=1
control_cpus=3
control_ram=8192
node_count=7
node_count=11
node_start=1
node_cpus=2
node_ram=4096
disks=()
disks+=(50)
disks+=(20)
disks+=(20)
network_type=bridge
bridges=()

View File

@ -0,0 +1,20 @@
qemu_connection="qemu+ssh://virsh@10.0.1.253/system"
qemu_password="seBGtkWFKZuFUFgig8NYU5uh"
storage_path="/var/lib/libvirt/maas-images"
compute="maas-node"
control_count=1
control_cpus=3
control_ram=8192
node_count=11
node_start=1
node_cpus=2
node_ram=4096
network_type=network
networks=()
networks+=("maas")
networks+=("maas")

109
functions.sh Normal file
View File

@ -0,0 +1,109 @@
#!/bin/bash
# how long you want to wait for commissioning
# default is 1200, i.e. 20 mins
state_timeout=1200
install_deps()
{
# Install some of the dependent packages
sudo apt -y update && sudo apt -y install jq bc virtinst
# We install the snap, as maas-cli is not in distributions, this ensures
# that the package we invoke would be consistent
sudo snap install maas --channel=${maas_version}/stable
}
# Ensures that any dependent packages are installed for any MAAS CLI commands
# This also logs in to MAAS, and sets up the admin profile
maas_login()
{
# Login to MAAS using the API key and the endpoint
echo ${maas_api_key} | maas login ${maas_profile} ${maas_endpoint} -
}
# Grabs the unique system_id for the host human readable hostname
maas_system_id()
{
node_name=$1
maas ${maas_profile} machines read hostname=${node_name} | jq ".[].system_id" | sed s/\"//g
}
# Based on the nodename, finds the pod id, if it exists
maas_pod_id()
{
node_name=$1
maas ${maas_profile} pods read | jq ".[] | {pod_id:.id, hyp_name:.name}" --compact-output | \
grep ${node_name} | jq ".pod_id" | sed s/\"//g
}
machine_add_tag()
{
system_id=$1
tag=$2
# If the tag doesn't exist, then create it
if [[ $(maas ${maas_profile} tag read ${tag}) == "Not Found" ]] ; then
maas ${maas_profile} tags create name=${tag}
fi
# Assign the tag to the machine
maas ${maas_profile} tag update-nodes ${tag} add=${system_id}
}
# This takes the system_id, and ensures that the machine is in $state state
# You may want to tweak the commission_timeout above in somehow it's failing
# and needs to be done quicker
ensure_machine_in_state()
{
system_id=$1
state=$2
# TODO: add a $3 to be able to customise the timeout
# timout= if [[ $3 == "" ]] ; then state_timeout else $3 ; fi
timeout=${state_timeout}
# The epoch time when this part started
time_start=$(date +%s)
# variable that will be used to check against for the timeout
time_end=${time_start}
# The initial state of the system
status_name=$(maas ${maas_profile} machine read ${system_id} | jq ".status_name" | sed s/\"//g)
# We will continue to check the state of the machine to see if it is in
# $state or the timeout has occured, which defaults to 20 mins
while [[ ${status_name} != "${state}" ]] && [[ $( echo ${time_end} - ${time_start} | bc ) -le ${timeout} ]]
do
# Check every 20 seconds of the state
sleep 20
# Grab the current state
status_name=$(maas ${maas_profile} machine read ${system_id} | jq ".status_name" | sed s/\"//g)
# Grab the current time to compare against
time_end=$(date +%s)
done
}
read_config()
{
configs=""
configs+=" configs/default.config"
configs+=" configs/maas.config"
configs+=" configs/hypervisor.common.config"
configs+=" configs/hypervisor.config"
for config in $configs ; do
if [ ! -f $config ]; then
printf "Error: missing config file. Please create the file '$config'.\n"
exit 1
else
shopt -s extglob
source "$config"
fi
done
}

View File

@ -1,50 +1,11 @@
#!/bin/bash
# set -x
. default.config
. maas.config
. hypervisor.config
# how long you want to wait for commissioning
# default is 1200, i.e. 20 mins
commission_timeout=1200
. functions.sh
# Time between building VMs
build_fanout=60
# Ensures that any dependent packages are installed for any MAAS CLI commands
# This also logs in to MAAS, and sets up the admin profile
maas_login()
{
# Install some of the dependent packages
sudo apt -y update && sudo apt -y install jq bc virtinst
# We install the snap, as maas-cli is not in distributions, this ensures
# that the package we invoke would be consistent
sudo snap install maas --channel=2.8/stable
# Login to MAAS using the API key and the endpoint
echo ${maas_api_key} | maas login ${maas_profile} ${maas_endpoint} -
}
# Grabs the unique system_id for the host human readable hostname
maas_system_id()
{
node_name=$1
maas ${maas_profile} machines read hostname=${node_name} | jq ".[].system_id" | sed s/\"//g
}
maas_pod_id()
{
node_name=$1
maas ${maas_profile} pods read | jq ".[] | {pod_id:.id, hyp_name:.name}" --compact-output | \
grep ${node_name} | jq ".pod_id" | sed s/\"//g
}
# Adds the VM into MAAS
maas_add_node()
{
@ -63,17 +24,9 @@ maas_add_node()
# Grabs the system_id for th node that we are adding
system_id=$(maas_system_id ${node_name})
# This will ensure that the node is ready before we start manipulating
# other attributes.
ensure_machine_ready ${system_id}
ensure_machine_in_state ${system_id} "Ready"
# If the tag doesn't exist, then create it
if [[ $(maas ${maas_profile} tag read ${node_type}) == "Not Found" ]] ; then
maas ${maas_profile} tags create name=${node_type}
fi
# Assign the tag to the machine
maas ${maas_profile} tag update-nodes ${node_type} add=${system_id}
machine_add_tag ${system_id} ${node_type}
# Ensure that all the networks on the system have the Auto-Assign set
# so that the all the of the networks on the host have an IP automatically.
@ -96,57 +49,43 @@ maas_assign_networks()
subnet_line=$(maas admin subnets read | jq ".[] | {subnet_id:.id, vlan:.vlan.vid, vlan_id:.vlan.id}" --compact-output | grep "vlan\":$vlan,")
maas_vlan_id=$(echo $subnet_line | jq .vlan_id | sed s/\"//g)
maas_subnet_id=$(echo $subnet_line | jq .subnet_id | sed s/\"//g)
ip_addr=""
if [[ $i -eq 0 ]] ; then
vlan_int_id=${phys_int_id}
mode="STATIC"
ip_addr="ip_address=$hypervisor_ip"
else
vlan_int=$(maas ${maas_profile} interfaces create-vlan ${system_id} vlan=${maas_vlan_id} parent=$phys_int_id)
vlan_int=$(maas ${maas_profile} interfaces create-vlan ${system_id} vlan=${maas_vlan_id} parent=$phys_int_id)
vlan_int_id=$(echo $vlan_int | jq .id | sed s/\"//g)
if [[ $vlan -eq $external_vlan ]] ; then
mode="DHCP"
mode="STATIC"
ip_addr="ip_address=$external_ip"
else
mode="AUTO"
fi
ip_addr=""
fi
bridge_int=$(maas ${maas_profile} interfaces create-bridge ${system_id} name=${bridges[$i]} vlan=$maas_vlan_id mac_address=${hypervisor_mac} parent=$vlan_int_id)
bridge_int=$(maas ${maas_profile} interfaces create-bridge ${system_id} name=${bridges[$i]} vlan=$maas_vlan_id mac_address=${hypervisor_mac} parent=$vlan_int_id)
bridge_int_id=$(echo $bridge_int | jq .id | sed s/\"//g)
bridge_link=$(maas ${maas_profile} interface link-subnet $system_id $bridge_int_id mode=${mode} subnet=${maas_subnet_id} ${ip_addr})
(( i++ ))
done
}
# This takes the system_id, and ensures that the machine is uin Ready state
# You may want to tweak the commission_timeout above in somehow it's failing
# and needs to be done quicker
ensure_machine_ready()
{
system_id=$1
time_start=$(date +%s)
time_end=${time_start}
status_name=$(maas ${maas_profile} machine read ${system_id} | jq ".status_name" | sed s/\"//g)
while [[ ${status_name} != "Ready" ]] && [[ $( echo ${time_end} - ${time_start} | bc ) -le ${commission_timeout} ]]
do
sleep 20
status_name=$(maas ${maas_profile} machine read ${system_id} | jq ".status_name" | sed s/\"//g)
time_end=$(date +%s)
done
}
# Calls the functions that destroys and cleans up all the VMs
wipe_node() {
install_deps
maas_login
destroy_node
}
create_node() {
install_deps
maas_login
maas_add_node ${hypervisor_name} ${hypervisor_mac} physical
}
install_node() {
install_deps
maas_login
deploy_node
}
@ -157,19 +96,15 @@ destroy_node() {
maas ${maas_profile} pod delete ${pod_id}
system_id=$(maas_system_id ${hypervisor_name})
maas ${maas_profile} machine release ${system_id}
maas ${maas_profile} machine delete ${system_id}
}
deploy_node() {
system_id=$(maas_system_id ${hypervisor_name})
#maas ${maas_profile} machine deploy ${system_id} install_kvm=true user_data="$(base64 user-data.yaml)"
maas ${maas_profile} machine deploy ${system_id} user_data="$(base64 user-data.yaml)"
# TODO: keep trying, until it gives a valid output
#until $(maas ${maas_profile} machine deploy ${system_id} install_kvm=true) ; do
# machine ${maas_profile} machine release ${system_id}
# Only return when the node has finised deploying
ensure_machine_in_state ${system_id} "Deployed"
}
show_help() {
@ -177,12 +112,14 @@ show_help() {
-c Creates Hypervisor
-w Removes Hypervisor
-i Install/Deploy Hypervisor
-d Deploy Hypervisor
-a Create and Deploy
"
}
while getopts ":cwdi" opt; do
read_config
while getopts ":cwia" opt; do
case $opt in
c)
create_node
@ -190,7 +127,7 @@ while getopts ":cwdi" opt; do
w)
wipe_node
;;
i)
d)
install_node
;;
a)

View File

@ -1,10 +1,7 @@
#!/bin/bash
# set -x
. default.config
. maas.config
. hypervisor.config
. functions.sh
# Storage type
storage_format="raw"
@ -13,36 +10,9 @@ storage_format="raw"
nic_model="virtio"
stg_bus="scsi"
# how long you want to wait for commissioning
# default is 1200, i.e. 20 mins
commission_timeout=1200
# Time between building VMs
build_fanout=60
# Ensures that any dependent packages are installed for any MAAS CLI commands
# This also logs in to MAAS, and sets up the admin profile
maas_login()
{
# Install some of the dependent packages
sudo apt -y update && sudo apt -y install jq bc virtinst
# We install the snap, as maas-cli is not in distributions, this ensures
# that the package we invoke would be consistent
sudo snap install maas --channel=2.8/stable
# Login to MAAS using the API key and the endpoint
echo ${maas_api_key} | maas login ${maas_profile} ${maas_endpoint} -
}
# Grabs the unique system_id for the host human readable hostname
maas_system_id()
{
node_name=$1
maas ${maas_profile} machines read hostname=${node_name} | jq ".[].system_id" | sed s/\"//g
}
# Adds the VM into MAAS
maas_add_node()
{
@ -64,17 +34,10 @@ maas_add_node()
# Grabs the system_id for th node that we are adding
system_id=$(maas_system_id ${node_name})
# This will ensure that the node is ready before we start manipulating
# other attributes.
ensure_machine_ready ${system_id}
# If the tag doesn't exist, then create it
if [[ $(maas ${maas_profile} tag read ${node_type}) == "Not Found" ]] ; then
maas ${maas_profile} tags create name=${node_type}
fi
ensure_machine_in_state ${system_id} "Ready"
# Assign the tag to the machine
maas ${maas_profile} tag update-nodes ${node_type} add=${system_id}
machine_add_tag ${system_id} ${node_type}
# Ensure that all the networks on the system have the Auto-Assign set
# so that the all the of the networks on the host have an IP automatically.
@ -105,31 +68,15 @@ maas_auto_assign_networks()
# Calls the 3 functions that creates the VMs
create_vms() {
install_deps
maas_login
create_storage
build_vms
}
# This takes the system_id, and ensures that the machine is uin Ready state
# You may want to tweak the commission_timeout above in somehow it's failing
# and needs to be done quicker
ensure_machine_ready()
{
system_id=$1
time_start=$(date +%s)
time_end=${time_start}
status_name=$(maas ${maas_profile} machine read ${system_id} | jq ".status_name" | sed s/\"//g)
while [[ ${status_name} != "Ready" ]] && [[ $( echo ${time_end} - ${time_start} | bc ) -le ${commission_timeout} ]]
do
sleep 20
status_name=$(maas ${maas_profile} machine read ${system_id} | jq ".status_name" | sed s/\"//g)
time_end=$(date +%s)
done
}
# Calls the functions that destroys and cleans up all the VMs
wipe_vms() {
install_deps
maas_login
destroy_vms
}
@ -301,6 +248,9 @@ show_help() {
"
}
# Initialise the configs
read_config
while getopts ":cwd" opt; do
case $opt in
c)