* 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
		
			
				
	
	
		
			144 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # set -x
 | |
| . functions.sh
 | |
| 
 | |
| # Time between building VMs
 | |
| build_fanout=60
 | |
| 
 | |
| # Adds the VM into MAAS
 | |
| maas_add_node()
 | |
| {
 | |
|     node_name=$1
 | |
|     mac_addr=$2
 | |
|     node_type=$3
 | |
| 
 | |
|     # This command creates the machine in MAAS. This will then automatically
 | |
|     # turn the machines on, and start commissioning.
 | |
|     maas ${maas_profile} machines create \
 | |
|         hostname=${node_name}            \
 | |
|         mac_addresses=${mac_addr}        \
 | |
|         architecture=amd64/generic       \
 | |
|         power_type=manual
 | |
| 
 | |
|     # Grabs the system_id for th node that we are adding
 | |
|     system_id=$(maas_system_id ${node_name})
 | |
| 
 | |
|     ensure_machine_in_state ${system_id} "Ready"
 | |
| 
 | |
|     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.
 | |
|     maas_assign_networks ${system_id}
 | |
| }
 | |
| 
 | |
| # Attempts to auto assign all the networks for a host
 | |
| maas_assign_networks()
 | |
| {
 | |
|     system_id=$1
 | |
| 
 | |
|     # Get the details of the physical interface
 | |
|     phsy_int=$(maas ${maas_profile} interfaces read ${system_id} | jq ".[] | {id:.id, name:.name,parent:.parents}" --compact-output | grep "parent.*\[\]")
 | |
|     phys_int_name=$(echo $phsy_int | jq .name | sed s/\"//g)
 | |
|     phys_int_id=$(echo $phsy_int | jq .id | sed s/\"//g)
 | |
| 
 | |
|     i=0
 | |
|     for vlan in ${vlans[*]}
 | |
|     do
 | |
|         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_id=$(echo $vlan_int | jq .id | sed s/\"//g)
 | |
|             if [[ $vlan -eq $external_vlan ]] ; then
 | |
|                 mode="STATIC"
 | |
|                 ip_addr="ip_address=$external_ip"
 | |
|             else
 | |
|                 mode="AUTO"
 | |
|             fi
 | |
|         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_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
 | |
| }
 | |
| 
 | |
| # 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
 | |
| }
 | |
| 
 | |
| # The purpose of this function is to stop, release the nodes and wipe the disks
 | |
| destroy_node() {
 | |
|     pod_id=$(maas_pod_id ${hypervisor_name})
 | |
|     maas ${maas_profile} pod delete ${pod_id}
 | |
| 
 | |
|     system_id=$(maas_system_id ${hypervisor_name})
 | |
|     maas ${maas_profile} machine delete ${system_id}
 | |
| }
 | |
| 
 | |
| deploy_node() {
 | |
|     system_id=$(maas_system_id ${hypervisor_name})
 | |
|     maas ${maas_profile} machine deploy ${system_id} user_data="$(base64 user-data.yaml)"
 | |
| 
 | |
|     # Only return when the node has finised deploying
 | |
|     ensure_machine_in_state ${system_id} "Deployed"
 | |
| }
 | |
| 
 | |
| show_help() {
 | |
|   echo "
 | |
| 
 | |
|   -c    Creates Hypervisor
 | |
|   -w    Removes Hypervisor
 | |
|   -d    Deploy Hypervisor
 | |
|   -a    Create and Deploy
 | |
|   "
 | |
| }
 | |
| 
 | |
| read_config
 | |
| 
 | |
| while getopts ":cwia" opt; do
 | |
|   case $opt in
 | |
|     c)
 | |
|         create_node
 | |
|         ;;
 | |
|     w)
 | |
|         wipe_node
 | |
|         ;;
 | |
|     d)
 | |
|         install_node
 | |
|         ;;
 | |
|     a)
 | |
|         create_node
 | |
|         install_node
 | |
|         ;;
 | |
|     \?)
 | |
|         printf "Unrecognized option: -%s. Valid options are:" "$OPTARG" >&2
 | |
|         show_help
 | |
|         exit 1
 | |
|         ;;
 | |
|   esac
 | |
| done
 |