Files
shipyard/images/airflow/script/upgrade_airflow_worker.sh
Bryan Strassner 6f995d1fb2 Update upgrade_airflow_worker.sh script
The current script is fragile to the introduction of a DEBUG logging
level. This change addresses the specifics of logging records being
returned when invoking the airflow command enough to make the dag_status
result end up being the last result as the script desires, so the script
is returned to working order, even if the logging level is set to DEBUG.

This change goes a little further to the point of removing all records
that indicate a logging level of DEBUG|INFO|WARN|ERROR.

Change-Id: Ic72358097e3a476e20fa3713008d0d0bcd35463e
2019-04-17 08:36:35 -05:00

100 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# Copyright 2018 AT&T Intellectual Property. All other rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -ex
# NOTE: We are directing all the output of the script to /dev/null in order
# to complete the workflow. Hence it will be useful to create a log file to
# track the progress of the script for troubleshooting purpose.
check_timeout_counter() {
# Check total elapsed time
# The default time out is set to 5 minutes
if [[ $counter -ge $max_count ]]; then
echo -e "Update Site Workflow Status Check Timed Out!" >> /usr/local/airflow/upgrade_airflow_worker.log
return 1
fi
}
# Define Variables
#
# Allow user to optionally pass in custom query time and max count as $4
# and $5 respectively
# Default query time is 30 seconds
# Default max_count for 5 minutes time out is 60*5/30 = 10
#
# NOTE: Dag ID will take value of $1
#
# NOTE: $2 will look like '2018-03-13' while $3 will look like '05:10:19'
# The execution date that we need to pass into the Airflow CLI will need
# to take the form of '2018-03-13T05:10:19'. Hence we will need to concatenate
# $2 and $3 together to form the dag_execution_date.
#
dag_id=$1
dag_execution_date="$2T$3"
query_time=${4:-30}
max_count=${5:-10}
# Initialize dag_state to "running" state
# Dag can be in "running", "success", "failed", "skipped" or "up for retry" state
dag_state="running"
# Initialize counter to 1
counter=1
echo -e "Checking Dag State..."
while true;
do
# Set current working directory to be the directory where the shell script
# is located. In this way we will be able to import the modules that are
# required for our custom Operators.
cd "${0%/*}"
# Get current state of dag using Airflow CLI
# Use grep to remove logging messages that can pollute the status response
check_dag_state=`airflow dag_state ${dag_id} ${dag_execution_date} | grep -vE "DEBUG|INFO|WARN|ERROR"`
echo -e ${check_dag_state} >> /usr/local/airflow/upgrade_airflow_worker.log
# We will need to extract the last word in the 'check_dag_state'
# string variable as that will contain the status of the dag run
dag_state=`echo ${check_dag_state} | awk '{print $NF}'`
echo -e ${dag_state} >> /usr/local/airflow/upgrade_airflow_worker.log
if [[ $dag_state == "success" ]]; then
echo -e "\nWorkflow has completed" >> /usr/local/airflow/upgrade_airflow_worker.log
echo -e "\n" >> /usr/local/airflow/upgrade_airflow_worker.log
echo -e "Proceeding to upgrade Airflow Worker..." >> /usr/local/airflow/upgrade_airflow_worker.log
echo -e "Deleting Airflow Worker Pods..." >> /usr/local/airflow/upgrade_airflow_worker.log
for i in `kubectl get pods -n ucp | grep -i airflow-worker | awk '{print $1}'`; do
# Delete Airflow Worker pod so that they will respawn with the new
# configurations and/or images
kubectl delete pod $i -n ucp
done
echo -e "Airflow Worker Pods Deleted!" >> /usr/local/airflow/upgrade_airflow_worker.log
return 0
fi
echo -e "Workflow is in" $dag_state "state\n" >> /usr/local/airflow/upgrade_airflow_worker.log
echo -e "Back Off for $query_time seconds...\n" >> /usr/local/airflow/upgrade_airflow_worker.log
sleep $query_time
# Step counter and check the timeout counter
((counter++))
check_timeout_counter
done