hms_load_and_verify.sh #1

  • //
  • guest/
  • perforce_software/
  • hms/
  • dev/
  • hms/
  • lib/
  • hms_load_and_verify.sh
  • View
  • Commits
  • Open Download .zip Download (6 KB)
# hms_load_and_verify.sh
Version=1.0.3

#==============================================================================
# Copyright and license info is available in the LICENSE file included with
# the Server Deployment Package (SDP), and also available online:
# https://swarm.workshop.perforce.com/projects/perforce-software-sdp/view/main/LICENSE
#------------------------------------------------------------------------------

#==============================================================================
# HMS Library Functions.

#------------------------------------------------------------------------------
# Function: load_helix_topology
#
# Input:
# $1 - Helix Topology file path
# $2 - Helix Topology file required format version.
#
# The following global arrays are updated:
#
# * InstanceName array
# * InstanceUserPorts array
# * InstanceMasterHost array
# * InstanceServerPort array
# * InstanceBrokerPort array
# * InstanceManaged array
# * InstanceCount integer
#
# Instance definition:
# Form: INSTANCE|Name|UserPorts|MasterHost|ServerPort|BrokerPort|Managed|Desc
# Example:
# INSTANCE|fgs|perforce:1666|helix-01|1999|1666|Friendly Greeting Systems
#
# Return:
# 0 - Instances loaded, syntax verified.
# 1 - Errors detected.
#------------------------------------------------------------------------------
function load_helix_topology {
   vvmsg "CALL: load_helix_topology($*)"

   declare cfgFile=$1
   declare reqVersion=$2
   declare cfgVersion=
   declare instanceName=
   declare instanceUserPorts=
   declare instanceMasterHost=
   declare instanceServerPort=
   declare instanceBrokerPort=
   declare instanceManaged=
   declare instanceDesc=
   declare failoverName=
   declare failoverType=
   declare failoverMasterHost=
   declare failoverBackupHost=
   declare failoverInstances=
   declare failoverActive=
   declare line=
   declare -a errors
   declare -i errorCount=0
   declare -i i=0
   declare -i lineCount=0

   msg "Loading instances from [$cfgFile]."

   if [[ ! -r "$cfgFile" ]]; then
      errmsg "Cannot read Helix Topology file [$cfgFile]."
      return 1
   fi

   # The first action is artifically hard-coded to START_IMPORT.

   while read line; do
      lineCount+=1
      case $line in
         (\#*|NAME*) continue;;
         (GLOBAL_OPTIONS*)
            GlobalOptions=$(echo $line|cut -d '=' -f 2)
         ;;
         (VERSION*)
            cfgVersion=$(echo $line | cut -d '=' -f 2)
            if [[ "$cfgVersion" > "$reqVersion" ]]; then
               msg "Verified:  Helix Topology file version [$cfgVersion] meets minimum requirement."
            else
               errors[$errorCount]="Helix Topology file version [$cfgVersion] is too old.  Must be at least ${reqVersion}.0."
               errorCount+=1
            fi
         ;;
         (INSTANCE*)
            # INSTANCE|Name|UserPorts|MasterHost|ServerPort|BrokerPort|Managed|Desc
            instanceName="$(echo $line | cut -d '|' -f 2)"
            instanceUserPorts="$(echo $line | cut -d '|' -f 3)"
            instanceMasterHost="$(echo $line | cut -d '|' -f 4)"
            instanceServerPort="$(echo $line | cut -d '|' -f 5)"
            instanceBrokerPort="$(echo $line | cut -d '|' -f 6)"
            instanceManaged="$(echo $line | cut -d '|' -f 7)"
            instanceDesc="$(echo $line | cut -d '|' -f 8)"
            InstanceName[$InstanceCount]=$instanceName
            InstanceUserPorts[$InstanceCount]=$instanceUserPorts
            InstanceMasterHost[$InstanceCount]=$instanceMasterHost
            InstanceServerPort[$InstanceCount]=$instanceServerPort
            InstanceBrokerPort[$InstanceCount]=$instanceBrokerPort
            InstanceManaged[$InstanceCount]=$instanceManaged
            InstanceDesc[$InstanceCount]=$instanceDesc
            InstanceCount+=1
         ;;
         (FAILOVER*)
            # FAILOVER|Name|Type|MasterHost|BackupHost|InstanceList|Active|Desc
            failoverName="$(echo $line | cut -d '|' -f 2)"
            failoverType="$(echo $line | cut -d '|' -f 3)"
            failoverMasterHost="$(echo $line | cut -d '|' -f 4)"
            failoverBackupHost="$(echo $line | cut -d '|' -f 5)"
            failoverInstanceList="$(echo $line | cut -d '|' -f 6)"
            failoverActive="$(echo $line | cut -d '|' -f 7)"
            failoverDesc="$(echo $line | cut -d '|' -f 8)"
            FailoverName[$FailoverCount]=$failoverName
            FailoverType[$FailoverCount]=$failoverType
            FailoverMasterHost[$FailoverCount]=$failoverMasterHost
            FailoverBackupHost[$FailoverCount]=$failoverBackupHost
            FailoverInstanceList[$FailoverCount]=$failoverInstanceList
            FailoverActive[$FailoverCount]=$failoverActive
            FailoverDesc[$FailoverCount]=$failoverDesc
            FailoverCount+=1
         ;;
      esac
   done < $cfgFile

   msg "${H}\nLoaded ${#InstanceName[*]} instances:\n"

   printf "%-3s %-13s %-16s %-4s %-4s %-1s %-40s %-s\n" "#" "Instance" "Master Host" "P4D" "P4B" "On" "User P4PORTs" "Description"
   printf "%-3s %-13s %-16s %-4s %-4s %-1s %-40s %-s\n" "---" "------------" "---------------" "----" "----" "--" "----------------------------------------" "------------------------------------------------"
   i=0; while [[ $i -lt ${#InstanceName[*]} ]]; do
      printf "%-3d %-13s %-16s %-4s %-4s %-1s %-40s %-s\n" "$((i+1))" "${InstanceName[$i]}" "${InstanceMasterHost[$i]}" "${InstanceServerPort[$i]}" "${InstanceBrokerPort[$i]}" "${InstanceManaged[$i]}" "${InstanceUserPorts[$i]}" "${InstanceDesc[$i]}"
      i+=1
   done

   if [[ $errorCount -eq 0 ]]; then
      msg "\nVerified:  All instances passed sanity checks."
   else
      msg "\nThe following problems were identified:"
      i=0; while [[ $i -lt $errorCount ]]; do
         errmsg "${errors[$i]}"
         i+=1
      done
   fi

   msg "${H}\nLoaded ${#InstanceName[*]} failover options:\n"

   printf "%-3s %-8s %-5s %-16s %-16s %-36s %-1s %-s\n" "#" "Name" "Type" "Master Host" "Backup Host" "Instance List" "On" "Description"
   printf "%-3s %-8s %-5s %-16s %-16s %-36s %-1s %-s\n" "---" "--------" "-----" "----------------" "----------------" "------------------------------------" "--" "----------------------------------------"
   i=0; while [[ $i -lt ${#FailoverName[*]} ]]; do
      printf "%-3s %-8s %-5s %-16s %-16s %-36s %-1s  %-s\n" "$((i+1))" "${FailoverName[$i]}" "${FailoverType[$i]}" "${FailoverMasterHost[$i]}" "${FailoverBackupHost[$i]}" "${FailoverInstanceList[$i]}" "${FailoverActive[$i]}" "${FailoverDesc[$i]}"
      i+=1
   done


   if [[ $errorCount -eq 0 ]]; then
      return 0
   else
      return 1
   fi
}
# Change User Description Committed
#2 25531 C. Thomas Tyler Refactored to receive merge from SDP.

This structure emphasizes that HMS will be layered on the SDP. The tree is
now structured to make it clear where files appear in an as-deployed
configurtion, overlaid into the '/p4/common' structure of the SDP.

The test suite is outside this structure, as it will not be deployed (due
to dependencies on infratructure that won't likely appear in SDP production
deployments).
#1 20312 ttyler Populate -o -b hms_sg_to_workshop.