From 3ac7da64d12c631def3640369998d292fd1a199f Mon Sep 17 00:00:00 2001 From: Sam Yaple Date: Wed, 17 Jun 2015 08:11:44 +0000 Subject: Add initial config function and keystone support Add set_configs function that implements the flow from the proposed ansible-multi spec. Move start.sh to config-internal.sh to preserve existing behaviour. config-externall.sh copies the appropriate configs in from the bind'd location and sets permissions and ownership appropriately. Partially Implements: blueprint ansible-multi Change-Id: I53fca0660451087f273fefc3c63e0d8cf1a2c096 --- docker/centos/binary/keystone/Dockerfile | 4 +- docker/centos/binary/keystone/config-external.sh | 1 + docker/centos/binary/keystone/config-internal.sh | 1 + docker/common/base/kolla-common.sh | 24 ++++ docker/common/keystone/config-external.sh | 7 + docker/common/keystone/config-internal.sh | 165 ++++++++++++++++++++++ docker/common/keystone/start.sh | 168 ++--------------------- 7 files changed, 211 insertions(+), 159 deletions(-) create mode 120000 docker/centos/binary/keystone/config-external.sh create mode 120000 docker/centos/binary/keystone/config-internal.sh create mode 100644 docker/common/keystone/config-external.sh create mode 100755 docker/common/keystone/config-internal.sh (limited to 'docker') diff --git a/docker/centos/binary/keystone/Dockerfile b/docker/centos/binary/keystone/Dockerfile index f8db5f582..e05db2fde 100644 --- a/docker/centos/binary/keystone/Dockerfile +++ b/docker/centos/binary/keystone/Dockerfile @@ -17,8 +17,8 @@ RUN chown -R keystone:keystone /var/www/cgi-bin/keystone RUN chmod 755 /var/www/cgi-bin/keystone/* # Add start-up and check scripts -COPY ./start.sh /start.sh -COPY ./check.sh /check.sh +COPY start.sh check.sh / +COPY config-internal.sh config-external.sh /opt/kolla/ # Run the Keystone start script CMD ["/start.sh"] diff --git a/docker/centos/binary/keystone/config-external.sh b/docker/centos/binary/keystone/config-external.sh new file mode 120000 index 000000000..ae5be7eea --- /dev/null +++ b/docker/centos/binary/keystone/config-external.sh @@ -0,0 +1 @@ +../../../common/keystone/config-external.sh \ No newline at end of file diff --git a/docker/centos/binary/keystone/config-internal.sh b/docker/centos/binary/keystone/config-internal.sh new file mode 120000 index 000000000..fe8d98c1f --- /dev/null +++ b/docker/centos/binary/keystone/config-internal.sh @@ -0,0 +1 @@ +../../../common/keystone/config-internal.sh \ No newline at end of file diff --git a/docker/common/base/kolla-common.sh b/docker/common/base/kolla-common.sh index 8c2ef5ec1..bd6a539a0 100644 --- a/docker/common/base/kolla-common.sh +++ b/docker/common/base/kolla-common.sh @@ -168,3 +168,27 @@ dump_vars() { set +o posix } +set_configs() { + case $KOLLA_CONFIG_STRATEGY in + CONFIG_INTERNAL) + # exec is intentional to preserve existing behaviour + exec /opt/kolla/config-internal.sh + ;; + CONFIG_EXTERNAL_COPY_ALWAYS) + source /opt/kolla/config-exernal.sh + ;; + CONFIG_EXTERNAL_COPY_ONCE) + if [[ -f /configured ]]; then + echo 'INFO - This container has already been configured; Refusing to copy new configs' + return + fi + source /opt/kolla/config-exernal.sh + touch /configured + ;; + + *) + echo '$CONFIG_STRATEGY is not set properly' + exit 1 + ;; + esac +} diff --git a/docker/common/keystone/config-external.sh b/docker/common/keystone/config-external.sh new file mode 100644 index 000000000..76e4acfff --- /dev/null +++ b/docker/common/keystone/config-external.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if [[ -f /opt/kolla/keystone/keystone.conf ]]; then + cp /opt/kolla/keystone/keystone.conf /etc/keystone/keystone.conf + chown keystone: /etc/keystone/keystone.conf + chmod 0644 /etc/keystone/keystone.conf +fi diff --git a/docker/common/keystone/config-internal.sh b/docker/common/keystone/config-internal.sh new file mode 100755 index 000000000..527870fdf --- /dev/null +++ b/docker/common/keystone/config-internal.sh @@ -0,0 +1,165 @@ +#!/bin/bash + +set -e + +# Run Kolla common script +echo "Running the kolla-common script" +. /opt/kolla/kolla-common.sh + +# Credentials, token, etc.. +: ${ADMIN_USER:=admin} +: ${ADMIN_USER_PASSWORD:=password} +: ${ADMIN_TENANT_NAME:=admin} +: ${KEYSTONE_USER:=keystone} +: ${KEYSTONE_ADMIN_PASSWORD:=password} +: ${KEYSTONE_ADMIN_TOKEN:=changeme} +# DB Settings +: ${INIT_KEYSTONE_DB:=true} +: ${KEYSTONE_DB_NAME:=keystone} +: ${KEYSTONE_DB_USER:=keystone} +: ${DB_ROOT_PASSWORD:=password} +: ${MARIADB_SERVICE_HOST:=$PUBLIC_IP} +: ${KEYSTONE_DB_PASSWORD:=password} +# Service Addresses/Ports/Version +: ${KEYSTONE_PUBLIC_SERVICE_HOST:=$PUBLIC_IP} +: ${KEYSTONE_ADMIN_SERVICE_HOST:=$PUBLIC_IP} +: ${KEYSTONE_PUBLIC_SERVICE_PORT:=5000} +: ${KEYSTONE_ADMIN_SERVICE_PORT:=35357} +: ${KEYSTONE_API_VERSION:=2.0} +# Logging +: ${LOG_FILE:=/var/log/keystone/keystone.log} +: ${VERBOSE_LOGGING:=true} +: ${DEBUG_LOGGING:=false} +: ${USE_STDERR:=false} +# Token provider, driver, etc.. +: ${TOKEN_PROVIDER:=uuid} +: ${TOKEN_DRIVER:=sql} + +## Check DB connectivity and required variables +echo "Checking connectivity to the DB" +fail_unless_db +echo "Checking for required variables" +check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_DB_PASSWORD \ + KEYSTONE_ADMIN_PASSWORD ADMIN_TENANT_NAME \ + KEYSTONE_PUBLIC_SERVICE_HOST KEYSTONE_ADMIN_SERVICE_HOST \ + PUBLIC_IP INIT_KEYSTONE_DB +dump_vars + +# Setup the Keystone DB +echo "Setting up Keystone DB" +mysql -h ${MARIADB_SERVICE_HOST} -u root -p"${DB_ROOT_PASSWORD}" mysql < /openrc </dev/null || useradd --user-group keystone + +# Run PKI Setup script +echo "Setting up PKI" +/usr/bin/keystone-manage pki_setup --keystone-user keystone --keystone-group keystone + +# Fix permissions +chown -R keystone:keystone /var/log/keystone +chown -R keystone:keystone /etc/keystone/ssl +chmod -R o-rwx /etc/keystone/ssl + +# Initialize the Keystone DB +echo "Initializing Keystone DB" +if [ "${INIT_KEYSTONE_DB}" == "true" ] ; then + su -s /bin/bash -c "keystone-manage db_sync" keystone +fi + +# Start Keystone +echo "Starting Keystone" +/usr/sbin/httpd -DFOREGROUND & +PID=$! + +# Export Keystone service environment variables +export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}" +export SERVICE_ENDPOINT="http://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v${KEYSTONE_API_VERSION}" + +# Check to make sure the service is running +echo "Verifying Keystone is running" +while ! curl -o /dev/null -s --fail ${SERVICE_ENDPOINT}; do + echo "waiting for Keystone @ ${SERVICE_ENDPOINT}" + sleep 1; +done +echo "keystone is active @ ${SERVICE_ENDPOINT}" + +# Create Keystone tenant, user, role, service and endpoints +echo "Creating Keystone tenant, user, role, service and endpoints" +crux user-create --update \ + -n ${ADMIN_USER} -p "${ADMIN_USER_PASSWORD}" \ + -t ${ADMIN_TENANT_NAME} -r admin +crux user-create --update \ + -n ${KEYSTONE_USER} -p "${KEYSTONE_ADMIN_PASSWORD}" \ + -t ${ADMIN_TENANT_NAME} -r admin +crux endpoint-create --remove-all \ + -n keystone -t identity \ + -I "http://${KEYSTONE_PUBLIC_SERVICE_HOST}:${KEYSTONE_PUBLIC_SERVICE_PORT}/v${KEYSTONE_API_VERSION}" \ + -A "http://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v${KEYSTONE_API_VERSION}" \ + -P "http://${KEYSTONE_PUBLIC_SERVICE_HOST}:${KEYSTONE_PUBLIC_SERVICE_PORT}/v${KEYSTONE_API_VERSION}" + +# Wait on all jobs to exit before proceeding (see man wait) +wait diff --git a/docker/common/keystone/start.sh b/docker/common/keystone/start.sh index 527870fdf..4dce4c757 100755 --- a/docker/common/keystone/start.sh +++ b/docker/common/keystone/start.sh @@ -1,165 +1,19 @@ #!/bin/bash -set -e +set -o errexit -# Run Kolla common script -echo "Running the kolla-common script" -. /opt/kolla/kolla-common.sh +CMD="/usr/bin/keystone-all" +ARGS="" -# Credentials, token, etc.. -: ${ADMIN_USER:=admin} -: ${ADMIN_USER_PASSWORD:=password} -: ${ADMIN_TENANT_NAME:=admin} -: ${KEYSTONE_USER:=keystone} -: ${KEYSTONE_ADMIN_PASSWORD:=password} -: ${KEYSTONE_ADMIN_TOKEN:=changeme} -# DB Settings -: ${INIT_KEYSTONE_DB:=true} -: ${KEYSTONE_DB_NAME:=keystone} -: ${KEYSTONE_DB_USER:=keystone} -: ${DB_ROOT_PASSWORD:=password} -: ${MARIADB_SERVICE_HOST:=$PUBLIC_IP} -: ${KEYSTONE_DB_PASSWORD:=password} -# Service Addresses/Ports/Version -: ${KEYSTONE_PUBLIC_SERVICE_HOST:=$PUBLIC_IP} -: ${KEYSTONE_ADMIN_SERVICE_HOST:=$PUBLIC_IP} -: ${KEYSTONE_PUBLIC_SERVICE_PORT:=5000} -: ${KEYSTONE_ADMIN_SERVICE_PORT:=35357} -: ${KEYSTONE_API_VERSION:=2.0} -# Logging -: ${LOG_FILE:=/var/log/keystone/keystone.log} -: ${VERBOSE_LOGGING:=true} -: ${DEBUG_LOGGING:=false} -: ${USE_STDERR:=false} -# Token provider, driver, etc.. -: ${TOKEN_PROVIDER:=uuid} -: ${TOKEN_DRIVER:=sql} +# loading common functions +source /opt/kolla/kolla-common.sh -## Check DB connectivity and required variables -echo "Checking connectivity to the DB" -fail_unless_db -echo "Checking for required variables" -check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_DB_PASSWORD \ - KEYSTONE_ADMIN_PASSWORD ADMIN_TENANT_NAME \ - KEYSTONE_PUBLIC_SERVICE_HOST KEYSTONE_ADMIN_SERVICE_HOST \ - PUBLIC_IP INIT_KEYSTONE_DB -dump_vars +set_configs -# Setup the Keystone DB -echo "Setting up Keystone DB" -mysql -h ${MARIADB_SERVICE_HOST} -u root -p"${DB_ROOT_PASSWORD}" mysql < /openrc </dev/null || useradd --user-group keystone - -# Run PKI Setup script -echo "Setting up PKI" -/usr/bin/keystone-manage pki_setup --keystone-user keystone --keystone-group keystone - -# Fix permissions -chown -R keystone:keystone /var/log/keystone -chown -R keystone:keystone /etc/keystone/ssl -chmod -R o-rwx /etc/keystone/ssl - -# Initialize the Keystone DB -echo "Initializing Keystone DB" -if [ "${INIT_KEYSTONE_DB}" == "true" ] ; then - su -s /bin/bash -c "keystone-manage db_sync" keystone +# Bootstrap and exit if BOOTSTRAP variable is set +if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then + su -c "keystone-manage db_sync" keystone + exit 0 fi -# Start Keystone -echo "Starting Keystone" -/usr/sbin/httpd -DFOREGROUND & -PID=$! - -# Export Keystone service environment variables -export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}" -export SERVICE_ENDPOINT="http://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v${KEYSTONE_API_VERSION}" - -# Check to make sure the service is running -echo "Verifying Keystone is running" -while ! curl -o /dev/null -s --fail ${SERVICE_ENDPOINT}; do - echo "waiting for Keystone @ ${SERVICE_ENDPOINT}" - sleep 1; -done -echo "keystone is active @ ${SERVICE_ENDPOINT}" - -# Create Keystone tenant, user, role, service and endpoints -echo "Creating Keystone tenant, user, role, service and endpoints" -crux user-create --update \ - -n ${ADMIN_USER} -p "${ADMIN_USER_PASSWORD}" \ - -t ${ADMIN_TENANT_NAME} -r admin -crux user-create --update \ - -n ${KEYSTONE_USER} -p "${KEYSTONE_ADMIN_PASSWORD}" \ - -t ${ADMIN_TENANT_NAME} -r admin -crux endpoint-create --remove-all \ - -n keystone -t identity \ - -I "http://${KEYSTONE_PUBLIC_SERVICE_HOST}:${KEYSTONE_PUBLIC_SERVICE_PORT}/v${KEYSTONE_API_VERSION}" \ - -A "http://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v${KEYSTONE_API_VERSION}" \ - -P "http://${KEYSTONE_PUBLIC_SERVICE_HOST}:${KEYSTONE_PUBLIC_SERVICE_PORT}/v${KEYSTONE_API_VERSION}" - -# Wait on all jobs to exit before proceeding (see man wait) -wait +exec $CMD $ARGS -- cgit v1.2.3