The wait_for function needs to be added into all the images
This affects both fedora and the centos base images. Wait_for will be intregrated into kolla-common. Co-authored by: Charles Crouch <charcrou@cisco.com> Change-Id: Ide2304b787d4c3bf6fb3949f09e2cf1f450c2173
This commit is contained in:
parent
53d7e3b6fa
commit
4075c851ed
@ -19,6 +19,41 @@ check_required_vars() {
|
||||
done
|
||||
}
|
||||
|
||||
wait_for() {
|
||||
local loops=${1:-""}
|
||||
local sleeptime=${2:-""}
|
||||
local fail_match_output=${fail_match_output:-""}
|
||||
local successful_match_output=${successful_match_output:-""}
|
||||
shift 2 || true
|
||||
local command="$@"
|
||||
|
||||
if [ -z "$loops" -o -z "$sleeptime" -o -z "$command" ]; then
|
||||
echo "Incorrect call of wait_for. Refer to docs/wait-for.md for help"
|
||||
fi
|
||||
|
||||
local i=0
|
||||
while [ $i -lt $loops ]; do
|
||||
i=$((i + 1))
|
||||
local status=0
|
||||
local output=$(eval $command 2>&1) || status=$?
|
||||
if [[ -n "$successful_match_output" ]] \
|
||||
&& [[ $output =~ $successful_match_output ]]; then
|
||||
break
|
||||
elif [[ -n "$fail_match_output" ]] \
|
||||
&& [[ $output =~ $fail_match_output ]]; then
|
||||
echo "Command output matched '$fail_match_output'."
|
||||
continue
|
||||
elif [[ -z "$successful_match_output" ]] && [[ $status -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
sleep $sleeptime
|
||||
done
|
||||
local seconds=$((loops * sleeptime))
|
||||
printf 'Timing out after %d seconds:\ncommand=%s\nOUTPUT=%s\n' \
|
||||
"$seconds" "$command" "$output"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Exit unless we receive a successful response from corresponding OpenStack
|
||||
# service.
|
||||
check_for_os_service() {
|
||||
|
@ -95,3 +95,4 @@ RUN yum install -y \
|
||||
RUN mkdir -p /opt/kolla
|
||||
ADD service_hosts.sh /opt/kolla/service_hosts.sh
|
||||
ADD kolla-common.sh /opt/kolla/kolla-common.sh
|
||||
ADD wait_for /opt/kolla/wait_for
|
||||
|
@ -94,4 +94,3 @@ RUN yum install -y \
|
||||
RUN mkdir -p /opt/kolla
|
||||
ADD service_hosts.sh /opt/kolla/service_hosts.sh
|
||||
ADD kolla-common.sh /opt/kolla/kolla-common.sh
|
||||
|
||||
|
@ -1,85 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Based on
|
||||
# https://raw.githubusercontent.com/openstack/tripleo-incubator/6931c1fc7ed98ce36998c5b82750a880b0365445/scripts/wait_for
|
||||
#
|
||||
# Copyright 2013 Red Hat
|
||||
# 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.
|
||||
|
||||
set -e # exit on the first non-zero status
|
||||
set -u # exit on unset variables
|
||||
#set -x # setting this actually breaks the scripts function
|
||||
|
||||
SCRIPT_NAME=$(basename $0)
|
||||
|
||||
|
||||
function show_options() {
|
||||
echo "Usage: $SCRIPT_NAME LOOPS_NUMBER SLEEP_TIME ARGS"
|
||||
echo
|
||||
echo "ARGS are read and concatenated together into a single command."
|
||||
echo "Execute the command in a loop until it succeeds or the number"
|
||||
echo "of attempts exceeds LOOPS_NUMBER value. After each failure"
|
||||
echo "pause for SLEEP_TIME seconds."
|
||||
echo
|
||||
echo "An optional FAIL_MATCH_OUTPUT variable may also be set to control "
|
||||
echo "if the loop exits early if the commands stdout/stderr matches the "
|
||||
echo "supplied regex string."
|
||||
echo
|
||||
echo "Examples:"
|
||||
echo " wait_for 30 10 ping -c 1 192.0.2.2"
|
||||
echo " wait_for 10 1 ls file_we_are_waiting_for"
|
||||
echo " wait_for 10 3 date \| grep 8"
|
||||
echo " FAIL_MATCH_OUTPUT=CREATE_FAILED wait_for 30 10 heat stack-show undercloud"
|
||||
echo " SUCCESSFUL_MATCH_OUTPUT=CREATE_COMPLETE wait_for 30 10 heat stack-show undercloud"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
LOOPS=${1:-""}
|
||||
SLEEPTIME=${2:-""}
|
||||
FAIL_MATCH_OUTPUT=${FAIL_MATCH_OUTPUT:-""}
|
||||
SUCCESSFUL_MATCH_OUTPUT=${SUCCESSFUL_MATCH_OUTPUT:-""}
|
||||
shift 2 || true
|
||||
COMMAND="$@"
|
||||
|
||||
if [ -z "$LOOPS" -o -z "$SLEEPTIME" -o -z "$COMMAND" ]; then
|
||||
show_options
|
||||
fi
|
||||
|
||||
|
||||
i=0
|
||||
while [ $i -lt $LOOPS ]; do
|
||||
i=$((i + 1))
|
||||
STATUS=0
|
||||
OUTPUT=$(eval $COMMAND 2>&1) || STATUS=$?
|
||||
if [[ -n "$SUCCESSFUL_MATCH_OUTPUT" ]] \
|
||||
&& [[ $OUTPUT =~ $SUCCESSFUL_MATCH_OUTPUT ]]; then
|
||||
exit 0
|
||||
elif [[ -n "$FAIL_MATCH_OUTPUT" ]] \
|
||||
&& [[ $OUTPUT =~ $FAIL_MATCH_OUTPUT ]]; then
|
||||
echo "Command output matched '$FAIL_MATCH_OUTPUT'. Exiting..."
|
||||
exit 1
|
||||
elif [[ -z "$SUCCESSFUL_MATCH_OUTPUT" ]] && [[ $STATUS -eq 0 ]]; then
|
||||
# The command successfully completed and we aren't testing against
|
||||
# it's output so we have finished waiting.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
sleep $SLEEPTIME
|
||||
done
|
||||
SECONDS=$((LOOPS * SLEEPTIME))
|
||||
printf 'Timing out after %d seconds:\nCOMMAND=%s\nOUTPUT=%s\n' \
|
||||
"$SECONDS" "$COMMAND" "$OUTPUT"
|
||||
exit 1
|
||||
|
@ -11,10 +11,10 @@ check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_ADMIN_SERVICE_HOST \
|
||||
ADMIN_TENANT_NAME GLANCE_API_SERVICE_HOST \
|
||||
PUBLIC_IP
|
||||
|
||||
/opt/kolla/wait_for 30 1 keystone \
|
||||
--os-auth-url=http://${KEYSTONE_PUBLIC_SERVICE_HOST}:35357/v2.0 \
|
||||
--os-username=admin --os-tenant-name=${ADMIN_TENANT_NAME} \
|
||||
--os-password=${KEYSTONE_ADMIN_PASSWORD} endpoint-list
|
||||
wait_for 30 1 keystone \
|
||||
--os-auth-url=http://${KEYSTONE_PUBLIC_SERVICE_HOST}:35357/v2.0 \
|
||||
--os-username=admin --os-tenant-name=${ADMIN_TENANT_NAME} \
|
||||
--os-password=${KEYSTONE_ADMIN_PASSWORD} endpoint-list
|
||||
check_for_keystone
|
||||
|
||||
export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
|
||||
|
18
docs/wait-for.md
Normal file
18
docs/wait-for.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Wait-for function
|
||||
|
||||
The usage of the wait_for function looks like the following
|
||||
$ SCRIPT_NAME LOOPS_NUMBER SLEEP_TIME ARGS
|
||||
|
||||
The ARGS are read and concatenated together into a single command
|
||||
and the command is executed in a loop until it succeeds or reaches
|
||||
the max number of attempts (LOOPS_NUMBER).
|
||||
|
||||
An optional FAIL_MATCH_OUTPUT variable may also be set to control
|
||||
if the loop exits early if the commands stdout/stderr matches the
|
||||
supplied regex string.
|
||||
Examples:
|
||||
$ wait_for 30 10 ping -c 1 192.0.2.2
|
||||
$ wait_for 10 1 ls file_we_are_waiting_for
|
||||
$ wait_for 10 3 date \| grep 8
|
||||
$ FAIL_MATCH_OUTPUT=CREATE_FAILED wait_for 30 10 heat stack-show undercloud
|
||||
$ SUCCESSFUL_MATCH_OUTPUT=CREATE_COMPLETE wait_for 30 10 heat stack-show undercloud
|
Loading…
Reference in New Issue
Block a user