Merge "Adds functionality to modify VM resources"
authorTim Rozet <trozet@redhat.com>
Thu, 10 Sep 2015 17:31:44 +0000 (17:31 +0000)
committerGerrit Code Review <gerrit@172.30.200.206>
Thu, 10 Sep 2015 17:31:44 +0000 (17:31 +0000)
1  2 
foreman/ci/deploy.sh

diff --combined foreman/ci/deploy.sh
@@@ -29,6 -29,8 +29,8 @@@ declare -A controllers_ip_ar
  declare -A admin_ip_arr
  declare -A public_ip_arr
  
+ vagrant_box_dir=~/.vagrant.d/boxes/opnfv-VAGRANTSLASH-centos-7.0/1.0.0/virtualbox/
+ vagrant_box_vmdk=box-disk1.vmdk
  vm_dir=/var/opt/opnfv
  script=`realpath $0`
  ##END VARS
@@@ -509,7 -511,7 +511,7 @@@ configure_network() 
      echo "${blue}Detecting network configuration...${reset}"
      ##detect host 1 or 3 interface configuration
      #output=`ip link show | grep -E "^[0-9]" | grep -Ev ": lo|tun|virbr|vboxnet" | awk '{print $2}' | sed 's/://'`
 -    output=`/bin/ls -l /sys/class/net | tail -n +2 | grep -v virtual | cut -d " " -f9`
 +    output=`/bin/ls -l /sys/class/net | tail -n +2 | grep -v virtual | cut -d " " -f10`
    fi
  
    if [ ! "$output" ]; then
      ##set variable info
      if [ ! -z "$static_ip_range" ]; then
        new_ip=$(echo $static_ip_range | cut -d , -f1)
 +      subnet_mask=$(find_netmask $this_default_gw_interface)
 +      host_subnet=$(find_subnet $interface_ip $subnet_mask)
 +      ip_range_subnet=$(find_subnet $new_ip $subnet_mask)
 +      if [ "$ip_range_subnet" != "$host_subnet" ]; then
 +        echo "${red}static_ip_range: ${static_ip_range} is not in the same subnet as your default gateway interface: ${host_subnet}.  Please use a correct range!${reset}"
 +        exit 1
 +      fi
      else
        new_ip=$(next_usable_ip $interface_ip)
        if [ ! "$new_ip" ]; then
@@@ -1023,6 -1018,19 +1025,19 @@@ start_virtual_nodes() 
        node_type=config_nodes_${node}_type
        node_type=$(eval echo \$$node_type)
  
+       ##modify memory and cpu
+       node_memory=$(eval echo \${config_nodes_${node}_memory})
+       node_vcpus=$(eval echo \${config_nodes_${node}_cpus})
+       node_storage=$(eval echo \${config_nodes_${node}_disk})
+       sed -i 's/^.*vb.memory =.*$/     vb.memory = '"$node_memory"'/' Vagrantfile
+       sed -i 's/^.*vb.cpus =.*$/     vb.cpus = '"$node_vcpus"'/' Vagrantfile
+       if ! resize_vagrant_disk $node_storage; then
+         echo "${red}Error while resizing vagrant box to size $node_storage for $node! ${reset}"
+         exit 1
+       fi
        ##trozet test make compute nodes wait 20 minutes
        if [ "$compute_wait_completed" = false ] && [ "$node_type" != "controller" ]; then
          echo "${blue}Waiting 20 minutes for Control nodes to install before continuing with Compute nodes..."
        sed -i 's/bootstrap.sh/vm_nodes_provision.sh/' Vagrantfile
        ## modify default_gw to be node_default_gw
        sed -i 's/^.*default_gw =.*$/  default_gw = '\""$node_default_gw"\"'/' Vagrantfile
-       ## modify VM memory to be 4gig
-       ##if node type is controller
-       if [ "$node_type" == "controller" ]; then
-         sed -i 's/^.*vb.memory =.*$/     vb.memory = 4096/' Vagrantfile
-       fi
        echo "${blue}Starting Vagrant Node $node! ${reset}"
        ##stand up vagrant
        if ! vagrant up; then
      if [ ! -z "$horizon_public_vip" ]; then
        echo "${blue} Virtual deployment SUCCESS!! Foreman URL:  http://${foreman_ip}, Horizon URL: http://${horizon_public_vip} ${reset}"
      else
 -      echo "${blue} Virtual deployment SUCCESS!! Foreman URL:  http://${foreman_ip}, Horizon URL: http://${odl_control_ip} ${reset}"
 +      ##Find public IP of controller
 +      for node in ${nodes}; do
 +        node_type=config_nodes_${node}_type
 +        node_type=$(eval echo \$$node_type)
 +        if [ "$node_type" == "controller" ]; then
 +          pushd $vm_dir/$node
 +          horizon_ip=`vagrant ssh -c "ifconfig enp0s10" | grep -Eo "inet [0-9\.]+" | awk {'print $2'}`
 +          popd
 +          break
 +        fi
 +      done
 +      if [ -z "$horizon_ip" ]; then
 +        echo "${red}Warn: Unable to determine horizon IP, please login to your controller node to find it${reset}"
 +      fi
 +      echo "${blue} Virtual deployment SUCCESS!! Foreman URL:  http://${foreman_ip}, Horizon URL: http://${horizon_ip} ${reset}"
      fi
    fi
  }
@@@ -1226,6 -1215,77 +1236,77 @@@ check_baremetal_nodes() 
    fi
  }
  
+ ##resizes vagrant disk (cannot shrink)
+ ##params: size in GB
+ ##usage: resize_vagrant_disk 100
+ resize_vagrant_disk() {
+   if [[ "$1" < 40 ]]; then
+     echo "${blue}Warn: Requested disk size cannot be less than 40, using 40 as new size${reset}"
+     new_size_gb=40
+   else
+     new_size_gb=$1
+   fi
+   if ! vagrant box list | grep opnfv; then
+     vagrant box remove -f opnfv/centos-7.0
+     if ! vagrant box add opnfv/centos-7.0 --provider virtualbox; then
+       echo "${red}Unable to reclone vagrant box! Exiting...${reset}"
+       exit 1
+     fi
+   fi
+   pushd $vagrant_box_dir
+   # Close medium to make sure we can modify it
+   vboxmanage closemedium disk $vagrant_box_vmdk
+   cur_size=$(vboxmanage showhdinfo $vagrant_box_vmdk | grep -i capacity | grep -Eo [0-9]+)
+   cur_size_gb=$((cur_size / 1024))
+   if [ "$cur_size_gb" -eq "$new_size_gb" ]; then
+     echo "${blue}Info: Disk size already ${cur_size_gb} ${reset}"
+     popd
+     return
+   elif [[ "$new_size_gb" < "$cur_size_gb" ]] ; then
+     echo "${blue}Info: Requested disk is less than ${cur_size_gb} ${reset}"
+     echo "${blue}Re-adding vagrant box${reset}"
+     if vagrant box list | grep opnfv; then
+       popd
+       vagrant box remove -f opnfv/centos-7.0
+       if ! vagrant box add opnfv/centos-7.0 --provider virtualbox; then
+         echo "${red}Unable to reclone vagrant box! Exiting...${reset}"
+         exit 1
+       fi
+       pushd $vagrant_box_dir
+     fi
+   fi
+   new_size=$((new_size_gb * 1024))
+   if ! vboxmanage clonehd $vagrant_box_vmdk tmp-disk.vdi --format vdi; then
+     echo "${red}Error: Unable to clone ${vagrant_box_vmdk}${reset}"
+     popd
+     return 1
+   fi
+   if ! vboxmanage modifyhd tmp-disk.vdi --resize $new_size; then
+     echo "${red}Error: Unable modify tmp-disk.vdi to ${new_size}${reset}"
+     popd
+     return 1
+   fi
+   if  ! vboxmanage clonehd tmp-disk.vdi resized-disk.vmdk --format vmdk; then
+     echo "${red}Error: Unable clone tmp-disk.vdi to vmdk${reset}"
+     popd
+     return 1
+   fi
+   vboxmanage closemedium disk tmp-disk.vdi --delete
+   rm -f tmp-disk.vdi $vagrant_box_vmdk
+   cp -f resized-disk.vmdk $vagrant_box_vmdk
+   vboxmanage closemedium disk resized-disk.vmdk --delete
+   popd
+ }
  ##END FUNCTIONS
  
  main() {