bugfix: dpkg was interrupted in one ubuntu instance
[bottlenecks.git] / testsuites / rubbos / puppet_manifests / internal / run_rubbos_internal.sh
index 12dc17a..ae67b85 100755 (executable)
@@ -19,12 +19,15 @@ local_cfg_path=$1
 local_results_dir=$2
 controller_host=`hostname`
 
-REMOTE_GIT_REPO=git://git.opnfv.org/bottlenecks
+#REMOTE_GIT_REPO=git://git.opnfv.org/bottlenecks
+REMOTE_GIT_REPO=https://gerrit.opnfv.org/gerrit/bottlenecks
 REMOTE_ARTIFACTS_REPO=http://artifacts.opnfv.org/bottlenecks/rubbos/rubbos_files.tar.gz
-LOCAL_GIT_REPO=/btnks-git
-LOCAL_ARTIFACTS_REPO=/btnks-artifacts
-LOCAL_RUBBOS_MANIFESTS_HOME=/btnks-git/bottlenecks/testsuites/rubbos/puppet_manifests
-LOCAL_ARTIFACTS_RUBBOS_HOME=/btnks-artifacts/rubbos_files
+LOCAL_GIT_REPO=/home/ubuntu/btnks-git
+LOCAL_ARTIFACTS_REPO=/home/ubuntu/btnks-artifacts
+LOCAL_RUBBOS_MANIFESTS_HOME=/home/ubuntu/btnks-git/bottlenecks/testsuites/rubbos/puppet_manifests
+LOCAL_ARTIFACTS_RUBBOS_HOME=/home/ubuntu/btnks-artifacts/rubbos_files
+
+SSH_ARGS="-o StrictHostKeyChecking=no -o BatchMode=yes -i /home/ubuntu/.ssh/id_rsa"
 
 # conf properties from the input config file
 client_servers=
@@ -50,6 +53,8 @@ webservers_arr=
 appservers_arr=
 dbservers_arr=
 all_agents_arr=
+hostname_arr=
+hostip_arr=
 
 # Other variables used in this script
 class_nodes=
@@ -60,16 +65,53 @@ read_conf() {
     if [ ${#line} -gt 0 ] && [ ${line:0:1} != "#" ] && [ ${line:0:1} != "[" ];then
       line=(${line//=/ })
       case ${line[0]} in
+        "controller" )
+          e_arr=(${line[1]//:/ })
+          controller_host=${e_arr[0]}
+          controller_ip=${e_arr[2]}
+          hostname_arr=("${hostname_arr[@]}" "${e_arr[0]}")
+          hostip_arr=("${hostip_arr[@]}" "${e_arr[2]}");;
         "client_servers" )
-          client_servers=${line[1]};;
+          elems=(${line[1]//,/ })
+          for e in "${elems[@]}";do
+            e_arr=(${e//:/ })
+            client_servers=${client_servers}${e_arr[0]}","
+            hostname_arr=("${hostname_arr[@]}" "${e_arr[0]}")
+            hostip_arr=("${hostip_arr[@]}" "${e_arr[1]}")
+          done
+          client_servers=${client_servers%,};;
         "web_servers" )
-          web_servers=${line[1]};;
+          e_arr=(${line[1]//:/ })
+          web_servers=${web_servers}${e_arr[0]}","
+          hostname_arr=("${hostname_arr[@]}" "${e_arr[0]}")
+          hostip_arr=("${hostip_arr[@]}" "${e_arr[1]}")
+          web_servers=${e_arr[0]};;
         "app_servers" )
-          app_servers=${line[1]};;
+          elems=(${line[1]//,/ })
+          for e in "${elems[@]}";do
+            e_arr=(${e//:/ })
+            app_servers=${app_servers}${e_arr[0]}","
+            hostname_arr=("${hostname_arr[@]}" "${e_arr[0]}")
+            hostip_arr=("${hostip_arr[@]}" "${e_arr[1]}")
+          done
+          app_servers=${app_servers%,};;
         "cjdbc_controller" )
-          cjdbc_controller=${line[1]};;
-        "database_servers" )
-          database_servers=${line[1]};;
+          if [ "x"${line[1]} != "x" ]; then
+            e_arr=(${line[1]//:/ })
+            hostname_arr=("${hostname_arr[@]}" "${e_arr[0]}")
+            hostip_arr=("${hostip_arr[@]}" "${e_arr[1]}")
+            cjdbc_controller=${e_arr[0]}
+          fi
+          ;;
+        "db_servers" )
+          elems=(${line[1]//,/ })
+          for e in "${elems[@]}";do
+            e_arr=(${e//:/ })
+            database_servers=${database_servers}${e_arr[0]}","
+            hostname_arr=("${hostname_arr[@]}" "${e_arr[0]}")
+            hostip_arr=("${hostip_arr[@]}" "${e_arr[1]}")
+          done
+          database_servers=${database_servers%,};;
         "database_port" )
           database_port=${line[1]};;
         "db_username" )
@@ -102,6 +144,11 @@ read_conf() {
   fi
 
   echo "-------------Main conf info:----------"
+  i=1
+  while [ $i -lt ${#hostname_arr[@]} ]; do
+    echo ${hostip_arr[$i]}" "${hostname_arr[$i]}
+    let i=i+1
+  done
   echo "clients_arr:           "${clients_arr[@]}
   echo "bench_client:          "$bench_client
   echo "remote_client_servers: "$remote_client_servers
@@ -118,6 +165,7 @@ fetch_remote_resources() {
     rm -rf $LOCAL_GIT_REPO
   fi
   mkdir -p $LOCAL_GIT_REPO
+  sudo dpkg --configure -a
   sudo apt-get install -y git
   cd $LOCAL_GIT_REPO
   git clone ${REMOTE_GIT_REPO}
@@ -127,7 +175,7 @@ fetch_remote_resources() {
   fi
   mkdir -p $LOCAL_ARTIFACTS_REPO
   cd $LOCAL_ARTIFACTS_REPO
-  wget ${REMOTE_ARTIFACTS_REPO}
+  wget -nv ${REMOTE_ARTIFACTS_REPO}
   tar xvzf rubbos_files.tar.gz
 
   if [ -d $local_results_dir ];then
@@ -136,6 +184,68 @@ fetch_remote_resources() {
   mkdir -p $local_results_dir
 }
 
+# ssh all vms/instances once only after first creation
+direct_ssh() {
+  echo "127.0.0.1 $(hostname)" >> /etc/hosts
+  echo "write hosts file: 127.0.0.1 $(hostname)"
+  cp ${LOCAL_GIT_REPO}/bottlenecks/utils/infra_setup/bottlenecks_key/bottlenecks_key /home/ubuntu/.ssh/id_rsa
+  sudo chmod 0600 /home/ubuntu/.ssh/id_rsa
+  echo 'StrictHostKeyChecking no' > /home/ubuntu/.ssh/config
+  sudo chown -R ubuntu:ubuntu /home/ubuntu/.ssh
+  i=1
+  while [ $i -lt ${#hostip_arr[@]} ]; do
+    echo ${hostip_arr[$i]}" "${hostname_arr[$i]} >> /etc/hosts
+    let i=i+1
+  done
+  echo "Done controller."
+
+  i=1
+  while [ $i -lt ${#hostip_arr[@]} ]; do
+    if [ ${hostname_arr[$i]} == ${controller_host} ];then
+      let i=i+1
+      continue
+    fi
+    echo "Processing: "${hostip_arr[$i]}" "${hostname_arr[$i]}
+    echo "ssh *sudo hostname* test:"
+    ssh ${SSH_ARGS} ubuntu@${hostip_arr[$i]} "sudo hostname"
+
+    ssh ${SSH_ARGS} ubuntu@${hostip_arr[$i]} "sudo cp /etc/hosts /home/ubuntu/ && sudo chmod 646 /home/ubuntu/hosts"
+    ssh ${SSH_ARGS} ubuntu@${hostip_arr[$i]} "echo 127.0.0.1 ${hostname_arr[$i]} >> /home/ubuntu/hosts"
+    j=1
+    while [ $j -lt ${#hostip_arr[@]} ];do
+      local host_item=${hostip_arr[$j]}" "${hostname_arr[$j]}
+      ssh ${SSH_ARGS} ubuntu@${hostip_arr[$i]} "echo ${host_item} >> /home/ubuntu/hosts"
+      let j=j+1
+    done
+    ssh ${SSH_ARGS} ubuntu@${hostip_arr[$i]} "sudo chmod 644 /home/ubuntu/hosts && sudo cp /home/ubuntu/hosts /etc/ && sudo rm -rf /home/ubuntu/hosts"
+    echo "done hosts"
+
+    sudo ssh ${SSH_ARGS} ubuntu@${hostip_arr[$i]} "echo 'StrictHostKeyChecking no' > /home/ubuntu/.ssh/config"
+    sudo scp ${SSH_ARGS} /home/ubuntu/.ssh/id_rsa ubuntu@${hostip_arr[$i]}:/home/ubuntu/.ssh/
+
+    let i=i+1
+  done
+}
+
+start_puppet_service() {
+  # Start puppetserver
+  sudo service puppetserver stop
+  sudo service puppetserver start
+  sudo service puppetserver status
+  # Start all puppet agents
+  for host in "${all_agents_arr[@]}";do
+    echo "start puppet agent on:"${host}
+    ssh ${SSH_ARGS} ubuntu@${host} "sudo service puppet status"
+    ssh ${SSH_ARGS} ubuntu@${host} "sudo service puppet stop"
+    ssh ${SSH_ARGS} ubuntu@${host} "sudo service puppet start --no-client"
+    ssh ${SSH_ARGS} ubuntu@${host} "sudo service puppet status"
+  done
+
+  sudo puppet cert list --all
+  sudo puppet cert sign --all
+  sudo puppet cert list --all
+}
+
 # inline function
 # It requires one local file path which needs to be replaced
 _replace_text() {
@@ -185,30 +295,17 @@ _to_puppet_class_nodes() {
 
 # inline function
 _execute_catalog() {
-  # use *class_nodes* to receive return vale
-  _to_puppet_class_nodes ${client_servers}
-  sed -i 's/REPLACED_CLIENT_NODES/'${class_nodes}'/g' /etc/puppet/manifests/site.pp
-
-  _to_puppet_class_nodes ${web_servers}
-  sed -i 's/REPLACED_HTTPD_NODES/'${class_nodes}'/g' /etc/puppet/manifests/site.pp
-
-  _to_puppet_class_nodes ${app_servers}
-  sed -i 's/REPLACED_TOMCAT_NODES/'${class_nodes}'/g' /etc/puppet/manifests/site.pp
-
-  _to_puppet_class_nodes ${database_servers}
-  sed -i 's/REPLACED_MYSQL_NODES/'${class_nodes}'/g' /etc/puppet/manifests/site.pp
-
   for host in "${clients_arr[@]}"; do
-    ssh ubuntu@${host} 'sudo puppet agent -t' &
+    ssh ${SSH_ARGS} ubuntu@${host} 'sudo puppet agent -t' &
   done
   for host in "${webservers_arr[@]}"; do
-    ssh ubuntu@${host} 'sudo puppet agent -t'
+    ssh ${SSH_ARGS} ubuntu@${host} 'sudo puppet agent -t'
   done
   for host in "${appservers_arr[@]}"; do
-    ssh ubuntu@${host} 'sudo puppet agent -t'
+    ssh ${SSH_ARGS} ubuntu@${host} 'sudo puppet agent -t'
   done
   for host in "${dbservers_arr[@]}"; do
-    ssh ubuntu@${host} 'sudo puppet agent -t'
+    ssh ${SSH_ARGS} ubuntu@${host} 'sudo puppet agent -t'
   done
 }
 
@@ -232,39 +329,40 @@ prepare_manifests() {
 
 execute_catalog() {
   # start all (exec catalog)
-  echo "--> Cleanup all agents..."
-  sudo cp ${LOCAL_RUBBOS_MANIFESTS_HOME}/site_off.pp /etc/puppet/manifests/site.pp
-  _execute_catalog
-
-  sleep 3s
-
-  echo "--> Start to execute catalogs in all agents..."
-  sudo cp ${LOCAL_RUBBOS_MANIFESTS_HOME}/site_on.pp /etc/puppet/manifests/site.pp
-  _execute_catalog
-  echo "--> Finish to execute catalogs in all agents."
+  if [ "x"$1 == "xstart" ];then
+    echo "--> Start to execute catalogs in all agents..."
+    sudo cp ${LOCAL_RUBBOS_MANIFESTS_HOME}/site_on.pp /etc/puppet/manifests/site.pp
+    _execute_catalog
+    echo "--> Finish to execute catalogs in all agents."
+  elif [ "x"$1 == "xclean" ];then
+    echo "--> Cleanup all agents..."
+    sudo cp ${LOCAL_RUBBOS_MANIFESTS_HOME}/site_off.pp /etc/puppet/manifests/site.pp
+    _execute_catalog
+   echo "--> Finish to cleanup all agents."
+  fi
 }
 
 run_emulator() {
   # prepare data in db servers
   for host in "${dbservers_arr[@]}"; do
-    ssh ubuntu@${host} 'sudo scp ubuntu@'${controller_host}':/etc/puppet/modules/rubbos_mysql/files/rubbos_data_sql.tar.gz '${rubbos_home}''
-    ssh ubuntu@${host} 'cd '${rubbos_home}' && sudo ./prepare_rubbos_mysql_db.sh ./rubbos_data_sql.tar.gz ./rubbos_data_sql_dir'
+    ssh ${SSH_ARGS} ubuntu@${host} 'sudo scp ubuntu@'${controller_host}':/etc/puppet/modules/rubbos_mysql/files/rubbos_data_sql.tar.gz '${rubbos_home}''
+    ssh ${SSH_ARGS} ubuntu@${host} 'cd '${rubbos_home}' && sudo ./prepare_rubbos_mysql_db.sh ./rubbos_data_sql.tar.gz ./rubbos_data_sql_dir'
   done
 
   # run emulator.sh ( Modify rubbos.properties file first)
-  ssh ubuntu@${bench_client} 'sudo rm -rf '${rubbos_home}'/bench/bench'
+  ssh ${SSH_ARGS} ubuntu@${bench_client} 'sudo rm -rf '${rubbos_home}'/bench/bench'
   for x in "${clients_per_node_arr[@]}";do
     echo "run emulator with clients_per_node="$x
     for host in "${clients_arr[@]}";do
-      ssh ubuntu@${host} "sed -e 's/REPLACED_NUMBER_OF_CLIENTS_PER_NODE/'${x}'/g' '${rubbos_home}'/Client/rubbos.properties.template > '${rubbos_home}'/Client/rubbos.properties "
+      ssh ${SSH_ARGS} ubuntu@${host} "sed -e 's/REPLACED_NUMBER_OF_CLIENTS_PER_NODE/'${x}'/g' '${rubbos_home}'/Client/rubbos.properties.template > '${rubbos_home}'/Client/rubbos.properties "
     done
-    ssh ubuntu@${bench_client} 'cd '${rubbos_home}'/bench && ./run_emulator.sh'
+    ssh ${SSH_ARGS} ubuntu@${bench_client} 'cd '${rubbos_home}'/bench && ./run_emulator.sh'
   done
 }
 
 collect_results() {
   # collect results, from bench_host to controller
-  scp -r ubuntu@${bench_client}:${rubbos_home}/bench/bench/* ${local_results_dir}
+  scp ${SSH_ARGS} -r ubuntu@${bench_client}:${rubbos_home}/bench/bench/* ${local_results_dir}
 }
 
 process_results() {
@@ -281,16 +379,22 @@ main() {
   read_conf
   echo "==> fetch_remote_resources:"
   fetch_remote_resources
+  echo "==> direct_ssh:"
+  direct_ssh
+  echo "==> start_puppet_service:"
+  start_puppet_service
   echo "==> prepare_manifests:"
   prepare_manifests
-  echo "==> execute_catalog:"
-  execute_catalog
+  echo "==> execute_catalog start:"
+  execute_catalog start
   echo "==> run_emulator:"
   run_emulator
   echo "==> collect_results (to controller:${local_results_dir}):"
   collect_results
   echo "==> process_results:"
   process_results
+  echo "==> execute_catalog clean:"
+  execute_catalog clean
 }
 
 main