Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #TESTED WORKING as base64 bootstrap script 12Nov
- # TO DO:
- # 1. Add the additional VMs
- # a. versa
- # b. linux
- # 2. Make sure all the VM's have the right vNICs attached
- #/////// BEGIN BOOTSTRAP_VM DEBUG SECTION - DELETE FOR PRODUCTION //////
- DEBUG_MODE=TRUE
- echo -e "superpassword\nsuperpassword" | passwd root
- echo $DEBUG_MODE
- ip addr add 192.168.3.11/22 dev eth0
- ip route add default via 192.168.1.1
- #/////// END BOOTSTRAP_VM DEBUG SECTION //////
- # VARIABLE DECLARATIONS:
- VNET1_NAME="vNET_Trusted"
- VNET1_RESERVED1_NAME="vNET_Trusted_Reserved_Router"
- VNET1_RESERVED1_IP="10.10.10.1"
- VNET1_RESERVED2_NAME="vNET_Trusted_Reserved_RouterMgmt"
- VNET1_RESERVED2_IP="10.10.10.2"
- NETWORK1_ADDRESS="10.10.10.0"
- NETWORK1_MASK="255.255.255.0"
- GATEWAY1="10.10.10.1"
- DNS1="8.8.8.8"
- IP1="10.10.10.1"
- SIZE1="250"
- VNET2_NAME="vNET_Untrusted"
- #VNET2_RESERVED1_NAME=""
- NETWORK2_ADDRESS="10.10.11.0"
- NETWORK2_MASK="255.255.255.0"
- GATEWAY2="10.10.11.1"
- DNS2="8.8.8.8"
- IP2="10.10.11.1"
- SIZE2="250"
- VNET3_NAME="vNET_Internal"
- VNET3_RESERVED1_NAME="vNET_Internal_Reserved_Versa"
- VNET3_RESERVED1_IP="10.10.12.1"
- VNET3_RESERVED2_NAME="vNET_Internal_Reserved_VersaMgmt"
- VNET3_RESERVED2_IP="10.10.12.2"
- NETWORK3_ADDRESS="10.10.12.0"
- NETWORK3_MASK="255.255.255.0"
- GATEWAY3="10.10.12.1"
- DNS3="8.8.8.8"
- IP3="10.10.12.1"
- SIZE3="250"
- VNET4_NAME="vNET_Public"
- #VNET4_RESERVED1_NAME=""
- NETWORK4_ADDRESS="10.10.13.0"
- NETWORK4_MASK="255.255.255.0"
- GATEWAY4="10.10.13.1"
- DNS4="8.8.8.8"
- IP4="10.10.13.1"
- SIZE4="250"
- MARKETPLACE_IMAGE1_NAME="Alpine Linux 3.12"
- IMAGE1_NAME="juniper"
- MARKETPLACE_IMAGE2_NAME="Alpine Linux 3.12"
- IMAGE2_NAME="versa"
- MARKETPLACE_IMAGE3_NAME="Alpine Linux 3.12"
- IMAGE3_NAME="Alpine Linux 3.12"
- DOWNLOAD_IMAGE_TIMEOUT=300 # maximum number of seconds to wait for image download to complete
- DOWNLOAD_VM_SLEEP_INCREMENT=5 # How long to wait before checking image download state again
- INSTANTIATE_VM_TIMEOUT=60
- INSTANTIATE_VM_SLEEP_INCREMENT=5
- # END VARIABLE DECLARATIONS
- # create the vnet template files:
- echo "NAME = \"$VNET1_NAME\"
- VN_MAD = \"bridge\"
- BRIDGE = \"br0\"
- NETWORK_UNAME = \"oneadmin\"
- NETWORK_ADDRESS = \"$NETWORK1_ADDRESS\"
- NETWORK_MASK = \"$NETWORK1_MASK\"
- GATEWAY = \"$GATEWAY1\"
- DNS = \"$DNS1\"
- AR=[ TYPE = \"IP4\", IP = \"$IP1\", SIZE = \"$SIZE1\" ]" > /dev/shm/vnet1.tpl
- cat /dev/shm/vnet1.tpl > /dev/tty1
- echo "NAME = \"$VNET2_NAME\"
- VN_MAD = \"bridge\"
- # NOTE: MAY NEED TO CHANGE THE BRIDGE IF USING A SPLIT NETWORK CONFIGURATION!!!!!!!!
- BRIDGE = \"br0\"
- NETWORK_UNAME = \"oneadmin\"
- NETWORK_ADDRESS = \"$NETWORK2_ADDRESS\"
- NETWORK_MASK = \"$NETWORK2_MASK\"
- GATEWAY = \"$GATEWAY2\"
- DNS = \"$DNS2\"
- AR=[ TYPE = \"IP4\", IP = \"$IP2\", SIZE = \"$SIZE2\" ]" > /dev/shm/vnet2.tpl
- cat /dev/shm/vnet2.tpl > /dev/tty1
- echo "NAME = \"$VNET3_NAME\"
- VN_MAD = \"bridge\"
- # NOTE: MAY NEED TO CHANGE THE BRIDGE IF USING A SPLIT NETWORK CONFIGURATION!!!!!!!!
- BRIDGE = \"br0\"
- NETWORK_UNAME = \"oneadmin\"
- NETWORK_ADDRESS = \"$NETWORK3_ADDRESS\"
- NETWORK_MASK = \"$NETWORK3_MASK\"
- GATEWAY = \"$GATEWAY3\"
- DNS = \"$DNS3\"
- AR=[ TYPE = \"IP4\", IP = \"$IP3\", SIZE = \"$SIZE3\" ]" > /dev/shm/vnet3.tpl
- cat /dev/shm/vnet3.tpl > /dev/tty1
- echo "NAME = \"$VNET4_NAME\"
- VN_MAD = \"bridge\"
- # NOTE: MAY NEED TO CHANGE THE BRIDGE IF USING A SPLIT NETWORK CONFIGURATION!!!!!!!!
- BRIDGE = \"br0\"
- NETWORK_UNAME = \"oneadmin\"
- NETWORK_ADDRESS = \"$NETWORK4_ADDRESS\"
- NETWORK_MASK = \"$NETWORK4_MASK\"
- GATEWAY = \"$GATEWAY4\"
- DNS = \"$DNS4\"
- AR=[ TYPE = \"IP4\", IP = \"$IP4\", SIZE = \"$SIZE4\" ]" > /dev/shm/vnet4.tpl
- cat /dev/shm/vnet4.tpl > /dev/tty1
- # create the vnets from template files
- onevnet create /dev/shm/vnet1.tpl > /dev/tty1
- onevnet create /dev/shm/vnet2.tpl > /dev/tty1
- onevnet create /dev/shm/vnet3.tpl > /dev/tty1
- onevnet create /dev/shm/vnet4.tpl > /dev/tty1
- # change owner and group:
- # set username = admin and group = oneadmin
- onevnet chown $VNET1_NAME admin oneadmin
- onevnet chown $VNET2_NAME admin oneadmin
- onevnet chown $VNET3_NAME admin oneadmin
- onevnet chown $VNET4_NAME admin oneadmin
- onevnet chmod $VNET1_NAME 777 -v
- onevnet chmod $VNET2_NAME 777 -v
- onevnet chmod $VNET3_NAME 777 -v
- onevnet chmod $VNET4_NAME 777 -v
- # create IP address reservations for the router interfaces:
- onevnet reserve $VNET1_NAME -a 0 -n $VNET1_RESERVED1_NAME -i $VNET1_RESERVED1_IP -s 1
- onevnet reserve $VNET1_NAME -a 0 -n $VNET1_RESERVED2_NAME -i $VNET1_RESERVED2_IP -s 1
- onevnet reserve $VNET3_NAME -a 0 -n $VNET3_RESERVED1_NAME -i $VNET3_RESERVED1_IP -s 1
- onevnet reserve $VNET3_NAME -a 0 -n $VNET3_RESERVED2_NAME -i $VNET3_RESERVED2_IP -s 1
- # change owner and group:
- # set username = admin and group = oneadmin
- onevnet chown $VNET1_RESERVED1_NAME admin oneadmin
- onevnet chown $VNET1_RESERVED2_NAME admin oneadmin
- onevnet chown $VNET3_RESERVED1_NAME admin oneadmin
- onevnet chown $VNET3_RESERVED2_NAME admin oneadmin
- onevnet chmod $VNET1_RESERVED1_NAME 777 -v
- onevnet chmod $VNET1_RESERVED2_NAME 777 -v
- onevnet chmod $VNET3_RESERVED1_NAME 777 -v
- onevnet chmod $VNET3_RESERVED2_NAME 777 -v
- function download_marketplace_image () {
- echo ""
- echo "Running test: Download a VM from the NodeWeaver Marketplace..."
- echo ""
- # Download an image from the generic NodeWeaver marketplace
- # Get the current image ID of the desired Image from the marketplace:
- # Download the Image
- # Input parameters:
- # $1 = Name of the image to download (MARKETPLACE_IMAGE#_NAME)
- # $2 = What to call the downloaded image (IMAGE#_NAME)
- onemarketapp export "$1" "$2" -d 1
- # Check the status of the download until download is complete or DOWNLOAD_IMAGE_TIMEOUT is reached...
- while [ "$DOWNLOAD_IMAGE_TIMEOUT" -gt 0 ]; do
- echo -e "\tChecking download status for [$2]"
- THIS_IMAGE_STATE=$(oneimage list --csv | grep "$2" | awk -F "," '{print $9}')
- echo -e "\tState of image [$2] is [$THIS_IMAGE_STATE]" > /dev/tty1
- if [ "$THIS_IMAGE_STATE" = "rdy" ]; then
- echo -e "\tDownload complete for image [$2], state=[$THIS_IMAGE_STATE]"
- #TEST_RESULT_IMAGE_DOWNLOAD=1 # Set the test result to 1
- break
- else
- DOWNLOAD_IMAGE_TIMEOUT=$((DOWNLOAD_IMAGE_TIMEOUT-DOWNLOAD_VM_SLEEP_INCREMENT))
- echo -e "\tImage is still downloading, current state is [${THIS_IMAGE_STATE}]. Will check again in ${DOWNLOAD_VM_SLEEP_INCREMENT} seconds..."
- sleep 5
- fi
- done
- # Set ownership of the new image and template:
- oneimage chown "$2" admin oneadmin
- oneimage chmod "$2" 777 -v
- onetemplate chown "$2" admin oneadmin
- onetemplate chmod "$2" 777 -v
- }
- function check_vm_state () {
- echo "Checking state of [$1], current timeout [$INSTANTIATE_VM_TIMEOUT]"
- while [ "$INSTANTIATE_VM_TIMEOUT" -gt 0 ]; do
- THIS_VM_STATE=$(onevm list --csv | grep "$THIS_VM_NAME" | awk -F "," '{print $5}')
- if [ "$THIS_VM_STATE" = "runn" ]; then
- echo "VM_STATE for [$THIS_VM_NAME] = [$THIS_VM_STATE]" > /dev/tty1
- break
- else
- #echo "THIS_VM_STATE = [${THIS_VM_STATE}]"
- INSTANTIATE_VM_TIMEOUT=$((INSTANTIATE_VM_TIMEOUT-INSTANTIATE_VM_SLEEP_INCREMENT))
- echo "VM starting up, current state is [$THIS_VM_STATE]. Will check again in $INSTANTIATE_VM_SLEEP_INCREMENT seconds..."
- sleep 5
- fi
- done
- }
- function instantiate_vm () {
- # Instantiate a VM from a template
- # THIS ONLY WORKS AS A BOOTSTRAP SCRIPT if you specify that it needs to run as the "admin" user - UID 2
- # Input parameters:
- # $1 = Name of the image to instantiate (IMAGE#_NAME)
- # $2 = List of vNETs to attach to (comma seperated and no spaces if multiple vNICs to attach)
- VM_ID=$(onetemplate instantiate --as_uid 2 --nic "$2" --persistent "$1" | awk '{print $3}')
- THIS_VM_NAME="$1-copy-$VM_ID"
- echo "Instantiating new VM [$THIS_VM_NAME]..."
- check_vm_state "$THIS_VM_NAME"
- # Set ownership of the new VM:
- onevm chown "$VM_ID" admin oneadmin
- }
- download_marketplace_image "$MARKETPLACE_IMAGE1_NAME" "$IMAGE1_NAME"
- download_marketplace_image "$MARKETPLACE_IMAGE2_NAME" "$IMAGE2_NAME"
- download_marketplace_image "$MARKETPLACE_IMAGE3_NAME" "$IMAGE3_NAME"
- instantiate_vm "$IMAGE1_NAME" "$VNET1_RESERVED1_NAME,$VNET1_RESERVED2_NAME,$VNET2_NAME"
- instantiate_vm "$IMAGE2_NAME" "$VNET3_RESERVED1_NAME,$VNET3_RESERVED2_NAME,$VNET4_NAME"
- instantiate_vm "$IMAGE3_NAME" "$VNET3_NAME"
Add Comment
Please, Sign In to add comment