superlint/.automation/test/ansible/ghe-initialize/templates/ghe-config-apply.sh
2020-11-06 23:10:09 +01:00

206 lines
6.9 KiB
Bash

#!/usr/bin/env bash
################################################################################
# Script to run ghe-config-apply on the primary GHES instance
# and wait for any previous runs to complete
################################################################################
###########
# Globals #
###########
GHE_CONFIG_PID='/var/run/ghe-config.pid' # PID file when a config is running
GHE_APPLY_COMMAND='ghe-config-apply' # Command running when a config run
SLEEP_SECONDS=20 # Seconds to sleep before next check
PID_CHECK_LIMIT=15 # How many times to check the pid before moving on
PID_CHECK=0 # Count of times to check the pid
PROCESS_CHECK_LIMIT=15 # How many times to check the process before moving on
PROCESS_CHECK=0 # Count of times to check the process
################################################################################
########################### SUB ROUTINES BELOW #################################
################################################################################
################################################################################
#### Function CheckGHEPid ######################################################
CheckGHEPid() {
##################################
# Check to prevent infinite loop #
##################################
if [ ${PID_CHECK} -gt ${PID_CHECK_LIMIT} ]; then
# Over the limit, move on
info "We have checked the pid ${PID_CHECK} times, moving on..."
else
################################################
# Check to see if the PID is alive and running #
################################################
if [ ! -f "${GHE_CONFIG_PID}" ]; then
# File not found
info "We're good to move forward, no .pid file found at:[${GHE_CONFIG_PID}]"
else
# Found the pid running, need to sleep
info "Current PID found, sleeping ${SLEEP_SECONDS} seconds before next check..."
################
# Sleep it off #
################
SLEEP_CMD=$(sleep ${SLEEP_SECONDS} 2>&1)
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ ${ERROR_CODE} -ne 0 ]; then
error "Failed to sleep!"
error "[${SLEEP_CMD}]"
info "Will try to call apply as last effort..."
####################################
# Call config apply as last effort #
####################################
RunConfigApply
else
#####################
# Increment counter #
#####################
((PID_CHECK++))
##################################
# Try to check for the pid again #
##################################
CheckGHEPid
fi
fi
fi
}
################################################################################
#### Function CheckGHEProcess ##################################################
CheckGHEProcess() {
##################################
# Check to prevent infinite loop #
##################################
if [ ${PROCESS_CHECK} -gt ${PROCESS_CHECK_LIMIT} ]; then
# Over the limit, move on
info "We have checked the process ${PROCESS_CHECK} times, moving on..."
else
####################################################
# Check to see if the process is alive and running #
####################################################
CHECK_PROCESS_CMD=$(pgrep -f "${GHE_APPLY_COMMAND}" 2>&1)
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ ${ERROR_CODE} -ne 0 ]; then
# No process running on the system
info "Were good to move forward, no process like:[${GHE_APPLY_COMMAND}] running currently on the system"
else
# Found the process running, need to sleep
info "Current process alive:[${CHECK_PROCESS_CMD}], sleeping ${SLEEP_SECONDS} seconds before next check..."
################
# Sleep it off #
################
SLEEP_CMD=$(sleep ${SLEEP_SECONDS} 2>&1)
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ ${ERROR_CODE} -ne 0 ]; then
error "Failed to sleep!"
error "[${SLEEP_CMD}]"
info "Will try to call apply as last effort..."
####################################
# Call config apply as last effort #
####################################
RunConfigApply
else
#####################
# Increment counter #
#####################
((PROCESS_CHECK++))
######################################
# Try to check for the process again #
######################################
CheckGHEProcess
fi
fi
fi
}
################################################################################
#### Function RunConfigApply ###################################################
RunConfigApply() {
##########
# Header #
##########
info "Running ${GHE_APPLY_COMMAND} to the server..."
##############################################
# Run the command to apply changes to server #
##############################################
APPLY_CMD=$(ghe-config-apply 2>&1)
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ ${ERROR_CODE} -ne 0 ]; then
# Errors
error "Failed to run config apply command!"
fatal "[${APPLY_CMD}]"
else
# Success
info "Successfully ran ${F[C]}${GHE_APPLY_COMMAND}"
fi
}
################################################################################
################################## MAIN ########################################
################################################################################
######################
# Check for pid file #
######################
CheckGHEPid
#############################
# Check for running process #
#############################
CheckGHEProcess
####################
# Run config apply #
####################
RunConfigApply
###########################################
# We're going to run it again after a nap #
# to make sure there is no crazy actions #
###########################################
sleep 300s
######################
# Check for pid file #
######################
CheckGHEPid
#############################
# Check for running process #
#############################
CheckGHEProcess
####################
# Run config apply #
####################
RunConfigApply