meta data for this page
  •  

Ez a dokumentum egy előző változata!


#!/bin/bash ##################################################### # OVM CPU PIN MAP v1.3 # Keszitette: Agoston Peter ##################################################### CPU_SUM_WARN=5 CPU_SUM_CRIT=10 OVM_ADMIN_PASSWD=PAssword123 OVMC=„/opt/ovm_utils/ovm_vmcontrol” SSHC=„ssh -n -p 10000 admin@localhost” if -z "$OVM_ADMIN_PASSWD"; then

      read -s -p "Add meg az oracle VM Manager admin jelszavat: " OVM_ADMIN_PASSWD

fi

red=$'\e[1;31m' grn=$'\e[1;32m' yel=$'\e[1;33m' blu=$'\e[1;34m' mag=$'\e[1;35m' cyn=$'\e[1;36m' whi=$'\e[1;37m' inv=$'\e[7;37m' gry=$'\e[1;90m' end=$'\e[0m'

function fejlec {

  # $1: CIM, $2: hossz
  FEJLEC=`echo $1 | tr '[:lower:]' '[:upper:]'`
  KIMENET="-=[ ${yel}$FEJLEC${end} ]=-"
  for I in `seq 1 $((($2-${#FEJLEC}-3)/2))`; do
      KIMENET="_$(echo $KIMENET)_"
  done
  echo -e $KIMENET

}

function vastag_fejlec {

  # $1: CIM, $2: hossz
  FEJLEC=`echo $1 | tr '[:lower:]' '[:upper:]'`
  KIMENET="-=[ ${yel}$FEJLEC${whi} ]=-"
  printf "${whi}"
  for I in `seq 1 $2`; do printf '#'; done
  echo
  for I in `seq 1 $((($2-${#FEJLEC}-7)/2))`; do
      KIMENET="#$(echo $KIMENET)#"
  done
  echo -e $KIMENET
  printf "${whi}"
  for I in `seq 1 $2`; do printf '#'; done
  printf "${end}"

}

echo Kulcs ellenorzese a CLI-hez… if grep -c Success) -eq 0 ; then

      echo "Nincs SSH kulcs a CLI-hez, legeneralom:"

# read -s -p „Add meg az oracle VM Manager administrator jelszavat: ” OVM_PASSWD

      echo "Kulcs legeneralasa:"
      ssh-keygen -t rsa
      echo "Publikus kulcs masolasa a /home/oracle/.ssh/ovmcli_authorized_keys-be..."
      su - oracle -c "touch /home/oracle/.ssh/ovmcli_authorized_keys"
      cat ~/.ssh/id_rsa.pub >> /home/oracle/.ssh/ovmcli_authorized_keys
      echo "Elso kapcsolodas (jelszot ker):"
      ssh admin@localhost -p 10000 exit
      echo "Teszt kapcsolodas:"
      if [[ $(ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 admin@localhost -p 10000 list manager |grep -c Success) -eq 0 ]]; then
              echo "Sikertelen. Eddig tartott a tudomanyom, ellenorizd mi lehet a gond!"
              exit 1
      else
              echo "Sikeres!"
      fi

fi

CURR_DIR=$(pwd) cd ${OVMC%/*} >/dev/null 2>&1 if | ! -e $OVMC ; then

      echo "Vagy az ovm_vmcontrol fajl, vagy az utvonala hibas: $OVMC"
      exit 1

fi SCRIPT_VER=$(grep -oP '(?⇐# OVM CPU PIN MAP )[^)]*$' $CURR_DIR/$0)

function pin_map { printf „Melyik OVS(ek) pin terkepet mutassam (szokozokkel elvalasztva)? ” read -e -i „${SERVERS## }” SOME_SERVERS for OVS in $SOME_SERVERS; do

  [[ $($SSHC show server name="$OVS" | grep -c 'Status: Success') -eq 0 ]] && continue;
  unset CPU_PIN_SUM
  echo
  CPU_NUM=$($SSHC show server name="$OVS" | grep -c '^.*Cpu.*Processor ')
  fejlec "#$OVS# CPU PIN MAP" $(($MAX_CPU_NUM*3-3))
  VM_NUM=$($SSHC show server name="${OVS}" | grep -c '^.*Vm .*\[.*\]')
  if [[ $VM_NUM -eq 0 ]]; then
      echo -e "${whi}Ezen a szerveren nincs VM.${end}"
      continue
  fi
  # CPU PIN MAP
  for CPU in $(seq 0 $(($CPU_NUM-1))); do
      printf "|${yel}%02d${end}" $CPU
  done
  echo "| vCPU"
  for I in $(seq 0 $(($MAX_CPU_NUM-1))); do printf "+--"; done
  echo "+"
      while read VM; do
      VM_NAME=$(echo $VM | grep -oP '(?<=\[).*(?=\])')
      VM_ID=$(echo $VM | awk '{print $5}')
      PINS=$($OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v $VM_NAME -c getvcpu | awk -F':' '/Current pinned CPU/{print $2}')
      if [[ $PINS =~ - ]]; then
          PIN_TOL=$(echo $PINS | awk -F'-' '{print $1}')
          PIN_IG=$(echo $PINS | awk -F'-' '{print $2}')
          PINS=""
          for I in $(seq $PIN_TOL $PIN_IG); do
              PINS="${PINS# } $I"
          done
      else
          PINS=$(echo $PINS | sed 's/,/ /g')
      fi
      for CPU in $(seq 0 $(($CPU_NUM-1))); do
          if [[ $(echo $PINS | grep -Pc "\b$CPU\b") -eq 1 ]]; then
              printf "|${whi}##${end}"
              CPU_PIN_SUM[$CPU]=$((${CPU_PIN_SUM[$CPU]}+1))
          else
              printf "|  "
          fi
      done
      if [[ -z $PINS ]]; then
              echo -e "| ${red}$VM_NAME [${PINS:-Nincs pinelve}]${end}"
      else
              echo -e "| ${whi}$VM_NAME [${PINS:-Nincs pinelve}]${end}"
      fi
      done <<< "`$SSHC "show server name=$OVS" | grep '^.*Vm .*\[.*\]' | sort`"
  # CPU pin szumma / cpu
  for I in $(seq 0 $(($MAX_CPU_NUM-1))); do printf "+--"; done
  echo "+"
  for CPU in $(seq 0 $(($CPU_NUM-1))); do
      if [[ ${CPU_PIN_SUM[$CPU]} -ge $CPU_SUM_CRIT ]]; then
          printf "|${red}%02d${end}" ${CPU_PIN_SUM[$CPU]}
      elif [[ ${CPU_PIN_SUM[$CPU]} -ge $CPU_SUM_WARN ]]; then
          printf "|${yel}%02d${end}" ${CPU_PIN_SUM[$CPU]}
      elif [[ ${CPU_PIN_SUM[$CPU]} -gt 0 ]]; then
          printf "|${grn}%02d${end}" ${CPU_PIN_SUM[$CPU]}
      else
          printf "|  "
      fi
  done
  echo "| Pins / vCPU"

done echo }

function vm_pin {

  printf "Mi a VM neve, amit pinelni szeretnel? "
  read INPUT_VM
  [[ $INPUT_VM == "" ]] && continue;
  if [[ $($SSHC show vm name="$INPUT_VM" | grep -c 'Status: Success') -eq 0 ]]; then
      echo "Nincs ilyen VM nalam."
      echo "Nyomj ENTER-t a visszatereshez."; read
      continue;
  fi
  SERVER=$($SSHC show vm name="$INPUT_VM" | grep 'Server =' | grep -oP '(?<=\[).*(?=\])')
  CPU_NUM=$($SSHC show server name="${SERVER}" | grep -c '^.*Cpu.*Processor ')
  echo "Ehhez a VM-hez az alabbi vCPU keszletet hasznalhatod: 0-$(($CPU_NUM-1))"
  printf "Melyik vCPU-kra szeretned pinelni (pl: 0-3; 2,4,6; 25-29)? "
  read INPUT_VCPU_LIST
  if [[ $INPUT_VCPU_LIST == "" ]]; then
      $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$INPUT_VM" -c rmvcpu
  else
      $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$INPUT_VM" -c setvcpu -s "$INPUT_VCPU_LIST"
  fi

}

function backup {

  printf "Melyik OVS pin-jeit mentsuk (${SERVERS## })? "
  read OVSEK
for OVS in $OVSEK; do
  [[ $OVS == "" ]] && continue;
  if [[ $($SSHC show server name="$OVS" | grep -c 'Status: Success') -eq 0 ]]; then
      echo "$OVS: nincs ilyen OVS nalam."
      continue;
  fi
  read -e -p "A backup fajl neve, abszolut utvonallal: " -i $CURR_DIR/$(date "+%Y%m%d_%H%M")_${OVS}_cpu_pins.bkp FILENAME
  if [[ -e "$FILENAME" ]]; then
      read -p "A fajl mar letezik. Felulirjuk? [I/N] " VALASZ
      [[ "${VALASZ^^}" == "I" ]] || continue;
  fi
  touch $FILENAME
  if [[ $? -ne 0 ]]; then
      echo "A fajl valamiert nem irhato."
      echo "Nyomj ENTER-t a visszatereshez."; read
      continue;
  else
      echo "A $FILENAME fajl irhato."
  fi
  echo "#ovm_cpu_pin_map Script version: $SCRIPT_VER, Backup date: $(date "+%Y%m%d_%H%M"), Original filename: $FILENAME " > $FILENAME
  while read VM; do
      VM_NAME=$(echo $VM | grep -oP '(?<=\[).*(?=\])')
      PINS=$($OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v $VM_NAME -c getvcpu | awk -F':' '/Current pinned CPU/{print $2}')
      if [[ $PINS =~ - ]]; then
          PIN_TOL=$(echo $PINS | awk -F'-' '{print $1}')
          PIN_IG=$(echo $PINS | awk -F'-' '{print $2}')
          PINS=""
          for I in $(seq $PIN_TOL $PIN_IG); do
              PINS="${PINS# },$I"
          done
      fi
      PINS=$(echo $PINS | sed 's/^,//')
      echo "$OVS;$VM_NAME;$PINS" |tee -a $FILENAME
  done <<< "`$SSHC "show server name=$OVS" | grep '^.*Vm .*\[.*\]' | sort`"
done

}

function restore {

  echo -e "A script konyvtaraban ($CURR_DIR/\*.bkp) az alabbi mentesek talalhatok:${grn}"
  grep "^#ovm_cpu_pin_map" $CURR_DIR/*bkp | sed 's/:.*$//'
  echo -e ${end}
  echo "Melyiket toltsem vissza (copy & paste)? "
  read RESTORE_FILENAME
  echo -e ${whi}
  if [[ ! -e "$RESTORE_FILENAME" ]]; then
      echo "A fajl nem letezik."
      echo "Nyomj ENTER-t a visszatereshez."; read
      continue;
  fi
  if [[ $(grep -c "^#ovm_cpu_pin_map" $RESTORE_FILENAME) -eq 0 ]]; then
      echo "Nem megfelelo fejlecu fajl."
      echo "Nyomj ENTER-t a visszatereshez."; read
      continue
  fi
  cat $RESTORE_FILENAME
  echo -e ${end}
  read -e -p "Mehet a VM-ek pinelesenek beallitasa a mentesbol? [I/N] " VALASZ
  [[ "${VALASZ^^}" == "I" ]] || continue;
  echo -e ${whi}
  echo -e "VM nev;VCPU-k;Statusz" | awk -F';' '{printf "%-30s %-30s %-60s",$1,$2,$3}'
  echo -e ${end}
  grep -v '^#' $RESTORE_FILENAME | while read SOR; do
      OVS=$(echo $SOR |awk -F';' '{print $1}')
      VM_NAME=$(echo $SOR |awk -F';' '{print $2}')
      VCPU_LIST=$(echo $SOR |awk -F';' '{print $3}')
      echo -e "$VM_NAME;$VCPU_LIST" | awk -F';' '{printf "%-30s %-31s",$1,$2}'
      printf ${red}
      if [[ -z "$VCPU_LIST" ]]; then
          $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$VM_NAME" -c rmvcpu >/dev/null
      else
          $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$VM_NAME" -c setvcpu -s "$VCPU_LIST" >/dev/null
      fi
      [[ $? -eq 0 ]] && echo -e "${grn}OK${end}"
      printf ${end}
  continue
  done

} #################################################### Vezerlo ciklus #################################################### FUNKCIO=„-” while $FUNKCIO =~ [^qQ]; do ############ FUNKCIO=„-”

clear TERMINAL_COLS=$(/usr/bin/tput cols) vastag_fejlec „Oracle VM CPU pin map $SCRIPT_VER by Agoston Peter” $1) '#' echo echo -e „${yel}Szerverek beolvasasa…${end}” MAX_CPU_NUM=0 SERVERS=„” while read SERVER; do

  SERVERS="${SERVERS# } ${SERVER##*:}"
  CPU_NUM=$($SSHC show server name="${SERVER##*:}" | grep -c '^.*Cpu.*Processor ')
  if [[ $MAX_CPU_NUM -lt $CPU_NUM ]]; then MAX_CPU_NUM=$CPU_NUM; fi
  VM_NUM=$($SSHC show server name="${SERVER##*:}" | grep -c '^.*Vm .*\[.*\]')
  echo -e "${whi}${SERVER##*:}${end} ${whi}$CPU_NUM${end} ${whi}$VM_NUM${end}" | awk '{printf "%-30s:     %5s vcpu, %5s VM\n",$1,$2,$3}'

done «< „`$SSHC „list server” | grep 'id:' | sort`” echo echo -e „${yel}Valassz funkciot:${end}” echo -e „[${whi}t${end}] vCPU pin terkep lekerdezese” echo -e „[${whi}p${end}] VM pinelesenek modositasa” echo -e „[${whi}m${end}] Pin terkep mentese fajlba” echo -e „[${whi}v${end}] Pin terkep visszaallitasa mentesbol” echo -e „[${whi}q${end}] Kilepes” FUNKCIO=„” printf „: ”; read FUNKCIO while $FUNKCIO =~ [^tTpPmMvVqQ]; do read FUNKCIO; done case $FUNKCIO in

  [tT] )
      pin_map
      echo "Nyomj ENTER-t a visszatereshez."; read
      ;;
  [pP] )
      vm_pin
      echo "Nyomj ENTER-t a visszatereshez."; read
      ;;
  [mM] )
      backup
      echo "Nyomj ENTER-t a visszatereshez."; read
      ;;
  [vV] )
      restore
      echo "Nyomj ENTER-t a visszatereshez."; read
      ;;

esac done ############## cd $CURR_DIR

1)
$TERMINAL_COLS-5