| #!/bin/bash |
| ######### |
| # ============LICENSE_START==================================================== |
| # org.onap.aaf |
| # =========================================================================== |
| # Copyright (c) 2017 AT&T Intellectual Property. All 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. |
| # ============LICENSE_END==================================================== |
| # |
| # |
| # A Script for use in Pods... Check for status files, and validate before moving on. |
| # |
| DIR="/opt/app/aaf/status" |
| APP=$1 |
| shift |
| |
| function status { |
| if [ -d "$DIR" ]; then |
| echo "$@" > $DIR/$APP-$HOSTNAME |
| fi |
| } |
| |
| |
| function check { |
| if [ -d "$DIR" ]; then |
| if [ -z "$(ls $DIR/$OTHER* 2> /dev/null)" ]; then |
| echo "$DIR/$OTHER does not exist" |
| else |
| echo "$(cat $DIR/$OTHER*)" |
| fi |
| else |
| echo "$DIR does not exist" |
| fi |
| } |
| |
| function wait { |
| n=0 |
| while [ $n -lt 40 ]; do |
| rv="$(check)" |
| echo "$rv" |
| if [ -z "$(echo $rv | grep "ready")" ]; then |
| (( ++n )) |
| echo "Sleep 10 (iteration $n)" |
| sleep 10 |
| else |
| echo "$OTHER is $rv" |
| n=10000 |
| fi |
| done |
| } |
| |
| function wait_nc { |
| n=0 |
| while [ $n -lt 40 ]; do |
| echo "Waiting for Network Access to $@" |
| status "Waiting for Network Access to $1 $2" |
| rv="$(nc -zvw 5 $1 $2 2>&1 | grep -e "[open|succeed]")" |
| echo $rv |
| |
| if [[ "$rv" == *open* ]] || [[ "$rv" == *succeeded* ]]; then |
| status "Network Connectable to $1 $2" |
| n=10000 |
| else |
| (( ++n )) |
| echo "Sleep 10 (iteration $n)" |
| sleep 10 |
| fi |
| done |
| } |
| |
| function start { |
| n=0 |
| while [ $n -lt 40 ]; do |
| rv="$(check)" |
| echo "$OTHER is $rv" |
| if [ -z "$(echo $rv | grep "ready")" ]; then |
| (( ++n )) |
| echo "Sleep 10 (iteration $n)" |
| sleep 10 |
| else |
| # This is critical. Until status is literally "ready" in the status directory, no processes will start |
| status ready |
| echo "Starting $@" |
| n=10000 |
| fi |
| done |
| } |
| |
| while [ ! -z "$1" ]; do |
| OTHER=$1 |
| shift |
| case "$OTHER" in |
| nc) |
| H=$1 |
| shift |
| P=$1 |
| shift |
| wait_nc "$H" "$P" |
| if [ -z "$@" ]; then |
| echo "ready" |
| status "ready" |
| fi |
| ;; |
| sleep) |
| echo "Sleeping $1" |
| status "Sleeping $1" |
| sleep $1 |
| shift |
| if [ -z "$@" ]; then |
| echo "ready" |
| status "ready" |
| fi |
| echo "Done" |
| ;; |
| remove) |
| echo "Removing $DIR/$APP-$HOSTNAME" |
| rm -f $DIR/$APP-$HOSTNAME |
| ;; |
| wait) |
| OTHER="$1" |
| shift |
| wait |
| ;; |
| *) |
| echo "App $APP is waiting to start until $OTHER is ready" |
| status "waiting for $OTHER" |
| |
| start |
| break |
| ;; |
| esac |
| done |