# 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. |