penzoiders

ccl_demo

Nov 15th, 2021
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 9.37 KB | None | 0 0
  1.     #!/bin/bash
  2.     #TESTED WORKING as base64 bootstrap script 12Nov
  3.  
  4.     # TO DO:
  5.     # 1. Add the additional VMs
  6.     #        a. versa
  7.     #        b. linux
  8.     # 2. Make sure all the VM's have the right vNICs attached
  9.  
  10.  
  11.     #/////// BEGIN BOOTSTRAP_VM DEBUG SECTION - DELETE FOR PRODUCTION //////
  12.     DEBUG_MODE=TRUE
  13.     echo -e "superpassword\nsuperpassword" | passwd root
  14.     echo $DEBUG_MODE
  15.     ip addr add 192.168.3.11/22 dev eth0
  16.     ip route add default via 192.168.1.1
  17.     #/////// END BOOTSTRAP_VM DEBUG SECTION //////
  18.  
  19.     # VARIABLE  DECLARATIONS:
  20.     VNET1_NAME="vNET_Trusted"
  21.     VNET1_RESERVED1_NAME="vNET_Trusted_Reserved_Router"
  22.     VNET1_RESERVED1_IP="10.10.10.1"
  23.     VNET1_RESERVED2_NAME="vNET_Trusted_Reserved_RouterMgmt"
  24.     VNET1_RESERVED2_IP="10.10.10.2"
  25.     NETWORK1_ADDRESS="10.10.10.0"
  26.     NETWORK1_MASK="255.255.255.0"
  27.     GATEWAY1="10.10.10.1"
  28.     DNS1="8.8.8.8"
  29.     IP1="10.10.10.1"
  30.     SIZE1="250"
  31.  
  32.     VNET2_NAME="vNET_Untrusted"
  33.     #VNET2_RESERVED1_NAME=""
  34.     NETWORK2_ADDRESS="10.10.11.0"
  35.     NETWORK2_MASK="255.255.255.0"
  36.     GATEWAY2="10.10.11.1"
  37.     DNS2="8.8.8.8"
  38.     IP2="10.10.11.1"
  39.     SIZE2="250"
  40.  
  41.     VNET3_NAME="vNET_Internal"
  42.     VNET3_RESERVED1_NAME="vNET_Internal_Reserved_Versa"
  43.     VNET3_RESERVED1_IP="10.10.12.1"
  44.     VNET3_RESERVED2_NAME="vNET_Internal_Reserved_VersaMgmt"
  45.     VNET3_RESERVED2_IP="10.10.12.2"
  46.     NETWORK3_ADDRESS="10.10.12.0"
  47.     NETWORK3_MASK="255.255.255.0"
  48.     GATEWAY3="10.10.12.1"
  49.     DNS3="8.8.8.8"
  50.     IP3="10.10.12.1"
  51.     SIZE3="250"
  52.  
  53.     VNET4_NAME="vNET_Public"
  54.     #VNET4_RESERVED1_NAME=""
  55.     NETWORK4_ADDRESS="10.10.13.0"
  56.     NETWORK4_MASK="255.255.255.0"
  57.     GATEWAY4="10.10.13.1"
  58.     DNS4="8.8.8.8"
  59.     IP4="10.10.13.1"
  60.     SIZE4="250"
  61.  
  62.     MARKETPLACE_IMAGE1_NAME="Alpine Linux 3.12"
  63.     IMAGE1_NAME="juniper"
  64.     MARKETPLACE_IMAGE2_NAME="Alpine Linux 3.12"
  65.     IMAGE2_NAME="versa"
  66.     MARKETPLACE_IMAGE3_NAME="Alpine Linux 3.12"
  67.     IMAGE3_NAME="Alpine Linux 3.12"
  68.     DOWNLOAD_IMAGE_TIMEOUT=300 # maximum number of seconds to wait for image download to complete
  69.     DOWNLOAD_VM_SLEEP_INCREMENT=5 # How long to wait before checking image download state again
  70.  
  71.     INSTANTIATE_VM_TIMEOUT=60
  72.     INSTANTIATE_VM_SLEEP_INCREMENT=5
  73.  
  74.     # END VARIABLE  DECLARATIONS
  75.  
  76.  
  77.  
  78.     # create the vnet template files:
  79.     echo "NAME = \"$VNET1_NAME\"
  80.    VN_MAD = \"bridge\"
  81.    BRIDGE = \"br0\"
  82.    NETWORK_UNAME = \"oneadmin\"
  83.    NETWORK_ADDRESS = \"$NETWORK1_ADDRESS\"
  84.    NETWORK_MASK = \"$NETWORK1_MASK\"
  85.    GATEWAY = \"$GATEWAY1\"
  86.    DNS = \"$DNS1\"
  87.    AR=[ TYPE = \"IP4\", IP = \"$IP1\", SIZE = \"$SIZE1\" ]" > /dev/shm/vnet1.tpl
  88.  
  89.     cat /dev/shm/vnet1.tpl > /dev/tty1
  90.  
  91.  
  92.     echo "NAME = \"$VNET2_NAME\"
  93.    VN_MAD = \"bridge\"
  94.    # NOTE:  MAY NEED TO CHANGE THE BRIDGE IF USING A SPLIT NETWORK CONFIGURATION!!!!!!!!
  95.    BRIDGE = \"br0\"
  96.    NETWORK_UNAME = \"oneadmin\"
  97.    NETWORK_ADDRESS = \"$NETWORK2_ADDRESS\"
  98.    NETWORK_MASK = \"$NETWORK2_MASK\"
  99.    GATEWAY = \"$GATEWAY2\"
  100.    DNS = \"$DNS2\"
  101.    AR=[ TYPE = \"IP4\", IP = \"$IP2\", SIZE = \"$SIZE2\" ]" > /dev/shm/vnet2.tpl
  102.  
  103.     cat /dev/shm/vnet2.tpl > /dev/tty1
  104.  
  105.     echo "NAME = \"$VNET3_NAME\"
  106.    VN_MAD = \"bridge\"
  107.    # NOTE:  MAY NEED TO CHANGE THE BRIDGE IF USING A SPLIT NETWORK CONFIGURATION!!!!!!!!
  108.    BRIDGE = \"br0\"
  109.    NETWORK_UNAME = \"oneadmin\"
  110.    NETWORK_ADDRESS = \"$NETWORK3_ADDRESS\"
  111.    NETWORK_MASK = \"$NETWORK3_MASK\"
  112.    GATEWAY = \"$GATEWAY3\"
  113.    DNS = \"$DNS3\"
  114.    AR=[ TYPE = \"IP4\", IP = \"$IP3\", SIZE = \"$SIZE3\" ]" > /dev/shm/vnet3.tpl
  115.  
  116.     cat /dev/shm/vnet3.tpl > /dev/tty1
  117.  
  118.     echo "NAME = \"$VNET4_NAME\"
  119.    VN_MAD = \"bridge\"
  120.    # NOTE:  MAY NEED TO CHANGE THE BRIDGE IF USING A SPLIT NETWORK CONFIGURATION!!!!!!!!
  121.    BRIDGE = \"br0\"
  122.    NETWORK_UNAME = \"oneadmin\"
  123.    NETWORK_ADDRESS = \"$NETWORK4_ADDRESS\"
  124.    NETWORK_MASK = \"$NETWORK4_MASK\"
  125.    GATEWAY = \"$GATEWAY4\"
  126.    DNS = \"$DNS4\"
  127.    AR=[ TYPE = \"IP4\", IP = \"$IP4\", SIZE = \"$SIZE4\" ]" > /dev/shm/vnet4.tpl
  128.  
  129.     cat /dev/shm/vnet4.tpl > /dev/tty1
  130.  
  131.  
  132.     # create the vnets from template files
  133.     onevnet create /dev/shm/vnet1.tpl > /dev/tty1
  134.     onevnet create /dev/shm/vnet2.tpl > /dev/tty1
  135.     onevnet create /dev/shm/vnet3.tpl > /dev/tty1
  136.     onevnet create /dev/shm/vnet4.tpl > /dev/tty1
  137.  
  138.  
  139.     # change owner and group:
  140.     # set username = admin and group = oneadmin
  141.     onevnet chown $VNET1_NAME admin oneadmin
  142.     onevnet chown $VNET2_NAME admin oneadmin
  143.     onevnet chown $VNET3_NAME admin oneadmin
  144.     onevnet chown $VNET4_NAME admin oneadmin
  145.     onevnet chmod $VNET1_NAME 777 -v
  146.     onevnet chmod $VNET2_NAME 777 -v
  147.     onevnet chmod $VNET3_NAME 777 -v
  148.     onevnet chmod $VNET4_NAME 777 -v
  149.  
  150.     # create IP address reservations for the router interfaces:
  151.     onevnet reserve $VNET1_NAME -a 0 -n $VNET1_RESERVED1_NAME -i $VNET1_RESERVED1_IP -s 1
  152.     onevnet reserve $VNET1_NAME -a 0 -n $VNET1_RESERVED2_NAME -i $VNET1_RESERVED2_IP -s 1
  153.     onevnet reserve $VNET3_NAME -a 0 -n $VNET3_RESERVED1_NAME -i $VNET3_RESERVED1_IP -s 1
  154.     onevnet reserve $VNET3_NAME -a 0 -n $VNET3_RESERVED2_NAME -i $VNET3_RESERVED2_IP -s 1
  155.  
  156.  
  157.     # change owner and group:
  158.     # set username = admin and group = oneadmin
  159.     onevnet chown $VNET1_RESERVED1_NAME admin oneadmin
  160.     onevnet chown $VNET1_RESERVED2_NAME admin oneadmin
  161.     onevnet chown $VNET3_RESERVED1_NAME admin oneadmin
  162.     onevnet chown $VNET3_RESERVED2_NAME admin oneadmin
  163.     onevnet chmod $VNET1_RESERVED1_NAME 777 -v
  164.     onevnet chmod $VNET1_RESERVED2_NAME 777 -v
  165.     onevnet chmod $VNET3_RESERVED1_NAME 777 -v
  166.     onevnet chmod $VNET3_RESERVED2_NAME 777 -v
  167.  
  168.  
  169.     function download_marketplace_image () {
  170.             echo ""
  171.             echo "Running test:  Download a VM from the NodeWeaver Marketplace..."
  172.             echo ""
  173.         # Download an image from the generic NodeWeaver marketplace
  174.         # Get the current image ID of the desired Image from the marketplace:
  175.         # Download the Image
  176.         # Input parameters:
  177.         #        $1 = Name of the image to download (MARKETPLACE_IMAGE#_NAME)
  178.         #        $2 = What to call the downloaded image (IMAGE#_NAME)
  179.  
  180.         onemarketapp export "$1" "$2" -d 1
  181.  
  182.         # Check the status of the download until download is complete or DOWNLOAD_IMAGE_TIMEOUT is reached...
  183.         while [ "$DOWNLOAD_IMAGE_TIMEOUT" -gt 0 ]; do
  184.             echo -e "\tChecking download status for [$2]"
  185.             THIS_IMAGE_STATE=$(oneimage list --csv | grep "$2" | awk -F "," '{print $9}')
  186.             echo -e "\tState of image [$2] is [$THIS_IMAGE_STATE]" > /dev/tty1
  187.             if [ "$THIS_IMAGE_STATE" = "rdy" ]; then
  188.                 echo -e "\tDownload complete for image [$2], state=[$THIS_IMAGE_STATE]"
  189.                             #TEST_RESULT_IMAGE_DOWNLOAD=1 # Set the test result to 1
  190.                 break
  191.             else
  192.                 DOWNLOAD_IMAGE_TIMEOUT=$((DOWNLOAD_IMAGE_TIMEOUT-DOWNLOAD_VM_SLEEP_INCREMENT))
  193.                 echo -e "\tImage is still downloading, current state is [${THIS_IMAGE_STATE}].  Will check again in ${DOWNLOAD_VM_SLEEP_INCREMENT} seconds..."
  194.                 sleep 5
  195.             fi
  196.         done
  197.  
  198.         # Set ownership of the new image and template:
  199.         oneimage chown "$2" admin oneadmin
  200.         oneimage chmod "$2" 777 -v
  201.         onetemplate chown "$2" admin oneadmin
  202.         onetemplate chmod "$2" 777 -v
  203.  
  204.     }
  205.  
  206.     function check_vm_state () {
  207.             echo "Checking state of [$1], current timeout [$INSTANTIATE_VM_TIMEOUT]"
  208.             while [ "$INSTANTIATE_VM_TIMEOUT" -gt 0 ]; do
  209.             THIS_VM_STATE=$(onevm list --csv | grep "$THIS_VM_NAME" | awk -F "," '{print $5}')
  210.             if [ "$THIS_VM_STATE" = "runn" ]; then
  211.                 echo "VM_STATE for [$THIS_VM_NAME] = [$THIS_VM_STATE]" > /dev/tty1
  212.                 break
  213.             else
  214.                 #echo "THIS_VM_STATE = [${THIS_VM_STATE}]"
  215.                 INSTANTIATE_VM_TIMEOUT=$((INSTANTIATE_VM_TIMEOUT-INSTANTIATE_VM_SLEEP_INCREMENT))
  216.                 echo "VM starting up, current state is [$THIS_VM_STATE].  Will check again in $INSTANTIATE_VM_SLEEP_INCREMENT seconds..."
  217.                 sleep 5
  218.             fi
  219.         done
  220.     }
  221.  
  222.  
  223.     function instantiate_vm () {
  224.             # Instantiate a VM from a template
  225.             # THIS ONLY WORKS AS A BOOTSTRAP SCRIPT if you specify that it needs to run as the "admin" user - UID 2
  226.             # Input parameters:
  227.             #        $1 = Name of the image to instantiate (IMAGE#_NAME)
  228.             #        $2 = List of vNETs to attach to (comma seperated and no spaces if multiple vNICs to attach)
  229.  
  230.             VM_ID=$(onetemplate instantiate --as_uid 2 --nic "$2" --persistent "$1" | awk '{print $3}')
  231.             THIS_VM_NAME="$1-copy-$VM_ID"
  232.             echo "Instantiating new VM [$THIS_VM_NAME]..."
  233.  
  234.             check_vm_state "$THIS_VM_NAME"
  235.  
  236.             # Set ownership of the new VM:
  237.             onevm chown "$VM_ID" admin oneadmin
  238.     }
  239.  
  240.  
  241.  
  242.     download_marketplace_image "$MARKETPLACE_IMAGE1_NAME" "$IMAGE1_NAME"
  243.     download_marketplace_image "$MARKETPLACE_IMAGE2_NAME" "$IMAGE2_NAME"
  244.     download_marketplace_image "$MARKETPLACE_IMAGE3_NAME" "$IMAGE3_NAME"
  245.     instantiate_vm "$IMAGE1_NAME" "$VNET1_RESERVED1_NAME,$VNET1_RESERVED2_NAME,$VNET2_NAME"
  246.     instantiate_vm "$IMAGE2_NAME" "$VNET3_RESERVED1_NAME,$VNET3_RESERVED2_NAME,$VNET4_NAME"
  247.     instantiate_vm "$IMAGE3_NAME" "$VNET3_NAME"
Add Comment
Please, Sign In to add comment