Fixes bug in looking for interfaces
[genesis.git] / foreman / ci / deploy.sh
index 862077e..6771da0 100755 (executable)
@@ -30,6 +30,7 @@ declare -A admin_ip_arr
 declare -A public_ip_arr
 
 vm_dir=/var/opt/opnfv
+script=`realpath $0`
 ##END VARS
 
 ##FUNCTIONS
@@ -324,7 +325,7 @@ parse_cmdline() {
   fi
 
   ##Validate nic args
-  if [ $nic_arg_flag -eq 1 ]; then
+  if [[ $nic_arg_flag -eq 1 ]]; then
     if [ -z "$virtual" ]; then
       for nic_type in admin_nic private_nic public_nic; do
         eval "nic_value=\$$nic_type"
@@ -448,8 +449,8 @@ install_vagrant() {
   fi
 
   ##add centos 7 box to vagrant
-  if ! vagrant box list | grep chef/centos-7.0; then
-    if ! vagrant box add chef/centos-7.0 --provider virtualbox; then
+  if ! vagrant box list | grep opnfv/centos-7.0; then
+    if ! vagrant box add opnfv/centos-7.0 --provider virtualbox; then
       printf '%s\n' 'deploy.sh: Unable to download centos7 box for Vagrant' >&2
       exit 1
     fi
@@ -476,20 +477,12 @@ clean_tmp() {
 }
 
 ##clone genesis and move to node vm dir
-##params: none
-##usage: clone_bgs
+##params: destination directory
+##usage: clone_bgs /tmp/myvm/
 clone_bgs() {
-  cd /tmp/
-  rm -rf /tmp/genesis/
-
-  ##clone artifacts and move into foreman_vm dir
-  if ! GIT_SSL_NO_VERIFY=true git clone https://gerrit.opnfv.org/gerrit/genesis.git; then
-    printf '%s\n' 'deploy.sh: Unable to clone genesis repo' >&2
-    exit 1
-  fi
-
-  mv -f /tmp/genesis/foreman/ci $vm_dir/foreman_vm
-  rm -rf /tmp/genesis/
+  script_dir="`dirname "$script"`"
+  cp -fr $script_dir/ $1
+  cp -fr $script_dir/../../common/puppet-opnfv $1
 }
 
 ##validates the network settings and update VagrantFile with network settings
@@ -500,7 +493,7 @@ configure_network() {
 
   ##if nic_arg_flag is set, then we don't figure out
   ##NICs dynamically
-  if [ $nic_arg_flag -eq 1 ]; then
+  if [[ $nic_arg_flag -eq 1 ]]; then
     echo "${blue}Static Network Interfaces Defined.  Updating Vagrantfile...${reset}"
     if [ $virtual ]; then
       nic_list="$public_nic"
@@ -516,7 +509,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=`ifconfig | grep -E "^[a-zA-Z0-9]+:"| grep -Ev "lo|tun|virbr|vboxnet" | awk '{print $1}' | sed 's/://'`
+    output=`/bin/ls -l /sys/class/net | tail -n +2 | grep -v virtual | cut -d " " -f10`
   fi
 
   if [ ! "$output" ]; then
@@ -732,6 +725,20 @@ configure_network() {
     fi
   fi
 
+  nodes=`sed -nr '/nodes:/{:start /workaround/!{N;b start};//p}' opnfv_ksgen_settings.yml | sed -n '/^  [A-Za-z0-9]\+:$/p' | sed 's/\s*//g' | sed 's/://g'`
+  controller_nodes=`echo $nodes | tr " " "\n" | grep controller | tr "\n" " "`
+  echo "${blue}Controller nodes found in settings: ${controller_nodes}${reset}"
+  my_controller_array=( $controller_nodes )
+  num_control_nodes=${#my_controller_array[@]}
+  if [ "$num_control_nodes" -ne 3 ]; then
+    if cat opnfv_ksgen_settings.yml | grep ha_flag | grep true; then
+      echo "${red}Error: You must define exactly 3 control nodes when HA flag is true!${reset}"
+      exit 1
+    fi
+  else
+    echo "${blue}Number of Controller nodes detected: ${num_control_nodes}${reset}"
+  fi
+
   if [ $no_parse ]; then
     echo "${blue}Skipping parsing variables into settings file as no_parse flag is set${reset}"
 
@@ -986,20 +993,13 @@ start_virtual_nodes() {
     compute_wait_completed=false
 
     for node in ${nodes}; do
-      cd /tmp/
 
       ##remove VM nodes incase it wasn't cleaned up
       rm -rf $vm_dir/$node
       rm -rf /tmp/genesis/
 
       ##clone genesis and move into node folder
-      if ! GIT_SSL_NO_VERIFY=true git clone https://gerrit.opnfv.org/gerrit/genesis.git; then
-        printf '%s\n' 'deploy.sh: Unable to clone vagrant repo' >&2
-        exit 1
-      fi
-
-      mv -f /tmp/genesis/foreman/ci $vm_dir/$node
-      rm -rf /tmp/genesis/
+      clone_bgs $vm_dir/$node
 
       cd $vm_dir/$node
 
@@ -1126,6 +1126,7 @@ start_virtual_nodes() {
       if ! vagrant ssh -c "route | grep default | grep $this_default_gw"; then
         echo "${blue} Adding public route back to $node! ${reset}"
         vagrant ssh -c "route add default gw $this_default_gw"
+        vagrant ssh -c "route delete default gw 10.0.2.2"
       fi
       popd
     done
@@ -1137,18 +1138,86 @@ start_virtual_nodes() {
   fi
 }
 
+##check to make sure nodes are powered off
+##this function does nothing if virtual
+##params: none
+##usage: check_baremetal_nodes()
+check_baremetal_nodes() {
+  if [ $virtual ]; then
+    echo "${blue}Skipping Baremetal node power status check as deployment is virtual ${reset}"
+  else
+    echo "${blue}Checking Baremetal nodes power state... ${reset}"
+    if [ ! -z "$base_config" ]; then
+      # Install ipmitool
+      # Major version is pinned to force some consistency for Arno
+      if ! yum list installed | grep -i ipmitool; then
+        echo "${blue}Installing ipmitool...${reset}"
+        if ! yum -y install ipmitool-1*; then
+          echo "${red}Failed to install ipmitool!${reset}"
+          exit 1
+        fi
+      fi
+
+        ###find all the bmc IPs and number of nodes
+      node_counter=0
+      output=`grep bmc_ip $base_config | grep -Eo '[0-9]+.[0-9]+.[0-9]+.[0-9]+'`
+      for line in ${output} ; do
+        bmc_ip[$node_counter]=$line
+        ((node_counter++))
+      done
+
+      max_nodes=$((node_counter-1))
+
+      ###find bmc_users per node
+      node_counter=0
+      output=`grep bmc_user $base_config | sed 's/\s*bmc_user:\s*//'`
+      for line in ${output} ; do
+        bmc_user[$node_counter]=$line
+        ((node_counter++))
+      done
+
+      ###find bmc_pass per node
+      node_counter=0
+      output=`grep bmc_pass $base_config | sed 's/\s*bmc_pass:\s*//'`
+      for line in ${output} ; do
+        bmc_pass[$node_counter]=$line
+        ((node_counter++))
+      done
+
+      for mynode in `seq 0 $max_nodes`; do
+        echo "${blue}Node: ${bmc_ip[$mynode]} ${bmc_user[$mynode]} ${bmc_pass[$mynode]} ${reset}"
+        ipmi_output=`ipmitool -I lanplus -P ${bmc_pass[$mynode]} -U ${bmc_user[$mynode]} -H ${bmc_ip[$mynode]} chassis status \
+                    | grep "System Power" | cut -d ':' -f2 | tr -d [:blank:]`
+        if [ "$ipmi_output" == "on" ]; then
+          echo "${red}Error: Node is powered on: ${bmc_ip[$mynode]} ${reset}"
+          echo "${red}Please run clean.sh before running deploy! ${reset}"
+          exit 1
+        elif [ "$ipmi_output" == "off" ]; then
+          echo "${blue}Node: ${bmc_ip[$mynode]} is powered off${reset}"
+        else
+          echo "${red}Warning: Unable to detect node power state: ${bmc_ip[$mynode]} ${reset}"
+        fi
+      done
+    else
+      echo "${red}base_config was not provided for a baremetal install! Exiting${reset}"
+      exit 1
+    fi
+  fi
+}
+
 ##END FUNCTIONS
 
 main() {
   parse_cmdline "$@"
   disable_selinux
+  check_baremetal_nodes
   install_EPEL
   install_vbox
   install_ansible
   install_vagrant
   clean_tmp
   verify_vm_dir
-  clone_bgs
+  clone_bgs $vm_dir/foreman_vm
   configure_network
   configure_virtual
   start_foreman