From f4b7ae95ac24f395e8d7ddd36cba362659fd29b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Andr=C3=A9?= Date: Mon, 19 Jan 2015 15:06:28 +0900 Subject: [PATCH] Check for nova DB availability in dependent containers When nova-api start and the nova database hasn't yet been created, it would create it itself, preventing the migration in nova-conductor to run and making it unable to start. This commit ensures that nova-api container will not try to steal nova-conductor's job of creating the nova database. Nova-scheduler reacts differently to the missing database and simply exits with a backtrace. This commit also prevents nova-scheduler to start when the nova database cannot be found. Change-Id: Ib6f7521151815faa7a26ec1d170df5a1cdb7fd63 Related-Bug: #1335804 --- docker/fedora-rdo-base/kolla-common.sh | 6 ++++-- docker/nova-base/config-nova.sh | 1 - docker/nova-controller/nova-api/start.sh | 3 ++- docker/nova-controller/nova-scheduler/start.sh | 3 +++ 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docker/fedora-rdo-base/kolla-common.sh b/docker/fedora-rdo-base/kolla-common.sh index c9ba03be52..56c658c43f 100644 --- a/docker/fedora-rdo-base/kolla-common.sh +++ b/docker/fedora-rdo-base/kolla-common.sh @@ -56,12 +56,14 @@ check_for_neutron() { } # Exit unless we receive a successful response from the database server. +# Optionally takes a database name to check for. Defaults to 'mysql'. check_for_db() { + local database=${1:-mysql} check_required_vars MARIADB_SERVICE_HOST DB_ROOT_PASSWORD mysql -h ${MARIADB_SERVICE_HOST} -u root -p"${DB_ROOT_PASSWORD}" \ - -e "select 1" mysql > /dev/null 2>&1 || { - echo "ERROR: database is not available @ $MARIADB_SERVICE_HOST" >&2 + -e "select 1" $database > /dev/null 2>&1 || { + echo "ERROR: database $database is not available @ $MARIADB_SERVICE_HOST" >&2 exit 1 } diff --git a/docker/nova-base/config-nova.sh b/docker/nova-base/config-nova.sh index 10aa646fab..829fb48dea 100755 --- a/docker/nova-base/config-nova.sh +++ b/docker/nova-base/config-nova.sh @@ -11,7 +11,6 @@ : ${RABBIT_PASSWORD:=guest} : ${NETWORK_MANAGER:=nova} -check_for_db check_required_vars KEYSTONE_ADMIN_TOKEN NOVA_DB_PASSWORD \ RABBITMQ_SERVICE_HOST GLANCE_API_SERVICE_HOST \ KEYSTONE_PUBLIC_SERVICE_HOST PUBLIC_IP diff --git a/docker/nova-controller/nova-api/start.sh b/docker/nova-controller/nova-api/start.sh index 49329f21c6..723a3539e9 100755 --- a/docker/nova-controller/nova-api/start.sh +++ b/docker/nova-controller/nova-api/start.sh @@ -7,8 +7,9 @@ set -e check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_ADMIN_SERVICE_HOST \ NOVA_KEYSTONE_USER NOVA_KEYSTONE_PASSWORD \ ADMIN_TENANT_NAME NOVA_API_SERVICE_HOST \ - NOVA_EC2_API_SERVICE_HOST PUBLIC_IP + NOVA_EC2_API_SERVICE_HOST PUBLIC_IP NOVA_DB_NAME check_for_keystone +check_for_db $NOVA_DB_NAME export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}" export SERVICE_ENDPOINT="http://${KEYSTONE_ADMIN_SERVICE_HOST}:35357/v2.0" diff --git a/docker/nova-controller/nova-scheduler/start.sh b/docker/nova-controller/nova-scheduler/start.sh index 71dd848f7e..da7f5f32a0 100755 --- a/docker/nova-controller/nova-scheduler/start.sh +++ b/docker/nova-controller/nova-scheduler/start.sh @@ -4,4 +4,7 @@ set -e . /opt/kolla/config-nova.sh +check_required_vars NOVA_DB_NAME +check_for_db $NOVA_DB_NAME + exec /usr/bin/nova-scheduler