gtu #2

  • //
  • p4ms/
  • dev/
  • p4/
  • common/
  • site/
  • bin/
  • gtu
  • View
  • Commits
  • Open Download .zip Download (5 KB)
#!/bin/bash
set -u

declare -i ErrorCount=0
declare ThisScript=${0##*/}
declare ThisHost=${HOSTNAME%%.*}
declare ThisUser=
declare Version=1.4.3
declare ThisScriptHome=/p4/common/site/bin
declare SDPHostsCfg=/p4/common/site/config/sdp_hosts.cfg
declare FromHost=
declare HostUpgradeLog=
declare HostUpgradeCmd=
declare -i NoOp=1
declare LogTime=
declare Log=
declare H1="=============================================================================="
declare H2="------------------------------------------------------------------------------"
declare H3="++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"

function msg () { echo -e "$*"; }
function errmsg () { msg "\\nError: ${1:-Unknown Error}\\n"; ErrorCount+=1; }
function bail () { errmsg "${1:-Unknown Error}"; exit "${2:-$ErrorCount}"; }
function usage () { msg "$ThisScript - Global Topology Upgrade."; exit 2; }

#------------------------------------------------------------------------------
# Function: terminate
# shellcheck disable=SC2317
function terminate
{
   # Disable signal trapping.
   trap - EXIT SIGINT SIGTERM

   #dbg "$ThisScript: EXITCODE: $ErrorCount"

   # Stop logging.
   [[ "$Log" == off ]] || msg "\\nLog is: $Log\\n${H1}"

   # With the trap removed, exit.
   exit "$ErrorCount"
}

declare -i shiftArgs=0

set +u
while [[ $# -gt 0 ]]; do
   case $1 in
      (-h) usage -h;;
      (-man) usage -man;;
      (-V) msg "$ThisScript version $Version"; exit 2;;
      (-y) NoOp=0;;
      (-from) FromHost="$2"; shiftArgs=1;;
      (-L) Log="$2"; shiftArgs=1;;
      (-D) set -x;; # Debug; use 'set -x' mode.
      (-*) usage -h "Unknown option ($1).";;
      (*) usage -h "Unknown parameter ($1).";;
   esac

   # Shift (modify $#) the appropriate number of times.
   shift; while [[ $shiftArgs -gt 0 ]]; do
      [[ $# -eq 0 ]] && usage -h "Incorrect number of arguments."
      shiftArgs=$shiftArgs-1
      shift
   done
done
set -u

source "$SDPHostsCfg" ||\
   bail "Could not do: 'source $SDPHostsCfg'"

LogTime=$(date +'%Y-%m-%d-%H%M%S')
Log="${LOGS}/${ThisScript%.sh}.main.${LogTime}.log"

if [[ "$Log" != off ]]; then
   touch "$Log" || bail "Could not touch log: $Log"
   exec > >(tee "$Log")
   exec 2>&1

   msg "${H1}\\nLog is: $Log\\n"
fi

ThisUser=$(id -n -u)
msg "Starting $ThisScript version $Version as $ThisUser@$ThisHost on $(date)."

trap terminate EXIT SIGINT SIGTERM

msg "${H1}\\nDoing Outer-to-Inner Upgrades ..."
if [[ "$ThisHost" == $P4MS_HOST && -z "$FromHost" ]]; then
   for h in $ALL_SDP_HOSTS; do
      msg "${H2}\\nKicking off upgrade on $h."
      HostUpgradeCmd="$ThisScriptHome/$ThisScript -from $ThisHost"
      [[ "$NoOp" -eq 0 ]] && HostUpgradeCmd+=" -y"
      HostUpgradeLog="${LOGS}/${ThisScript%.sh}.${h}.${LogTime}.log"
      ssh -q "$h" "$HostUpgradeCmd" > "$HostUpgradeLog" 2>&1 ||\
         bail "$ThisScript failed on host $h.  See: $HostUpgradeLog"
      msg "Verified: Upgrade AOK on $h. Details in $HostUpgradeLog"
   done
fi

if [[ -z "$FromHost" ]]; then
   if [[ "$ThisHost" == $P4MS_HOST ]]; then
      msg "${H3}\\nALL DONE!"
      exit 0
   else
      bail "A Global Topology Upgrade must be kicked off from the P4MS server, $P4MS_HOST."
   fi
fi

cd /hxdepots || bail "Could not do: cd /hxdepots"

[[ -d downloads ]] || mkdir downloads
cd downloads || bail "Could not do: cd downloads [from $PWD]."
[[ -d new ]] && mv new old."$(date +'%Y%m%d-%H%M%S')"
[[ -e sdp.Unix.tgz ]] && mv sdp.Unix.tgz sdp.Unix.old."$(date +'%Y%m%d-%H%M%S')"
curl -s -L -O https://swarm.workshop.perforce.com/download/guest/perforce_software/sdp/downloads/sdp.Unix.tgz
ls -l sdp.Unix.tgz
mkdir new || bail "Could not do: mkdir new [from $PWD]."
cd new || bail "Could not do: cd new [from $PWD]."
tar -xzf ../sdp.Unix.tgz || bail "Could not do: tar xzf ../sdp.Unix.tgz [from $PWD]."

cd /hxdepots/downloads/new/sdp/Server/Unix/p4/common/sdp_upgrade ||\
   bail "Could not do: cd /hxdepots/downloads/new/sdp/Server/Unix/p4/common/sdp_upgrade"
./sdp_upgrade.sh || bail "SDP Upgrade preflight failed on $ThisHost. Aborting."

if [[ "$NoOp" -eq 0 ]]; then
   sleep 2
   ./sdp_upgrade.sh -y || bail "SDP Upgrade failed on $ThisHost. Aborting."
else
   msg "DRY RUN: Not executing sdp_upgrade.sh with '-y'."
fi

cd /p4/sdp/helix_binaries || bail "Could not do: cd /p4/sdp/helix_binaries"

if [[ "$NoOp" -eq 0 ]]; then
   ./get_helix_binaries.sh -r r24.2 || bail "Call to get_helix_binaries.sh failed."
else
   msg "DRY RUN: Executing ./get_helix_binaries.sh with '-n'."
   ./get_helix_binaries.sh -r r24.2 -n || bail "Call to get_helix_binaries.sh failed."
fi

cd /home/perforce || bail "Could not do: cd /home/perforce"

upgrade.sh || bail "P4D Upgrade preflight failed on $ThisHost. Aborting."

if [[ "$NoOp" -eq 0 ]]; then
   sleep 2
   upgrade.sh -y || bail "P4D Upgrade failed on $ThisHost. Aborting."
else
   msg "DRY RUN: Not executing upgrade.sh with '-y'."
fi

exit "$ErrorCount"
# Change User Description Committed
#2 31812 C. Thomas Tyler Updated global_replica_status.sh and gtu.
#1 31811 C. Thomas Tyler Added gtu, BSW version.