diff options
| author | Jenkins <jenkins@review.openstack.org> | 2015-06-30 21:34:49 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2015-06-30 21:34:49 +0000 |
| commit | 90d92347e83e348ef5e2f1ed2faba2a3820ab436 (patch) | |
| tree | 5d8dd8a5c1a26971050ec54d16ca2ff82e8c720a /docker/common/keystone | |
| parent | cc9432a57476ee043f81700e811d33f78f66adaf (diff) | |
| parent | 3ac7da64d12c631def3640369998d292fd1a199f (diff) | |
| download | kolla-90d92347e83e348ef5e2f1ed2faba2a3820ab436.tar.gz kolla-90d92347e83e348ef5e2f1ed2faba2a3820ab436.zip | |
Merge "Add initial config function and keystone support"
Diffstat (limited to 'docker/common/keystone')
| -rw-r--r-- | docker/common/keystone/config-external.sh | 7 | ||||
| -rwxr-xr-x | docker/common/keystone/config-internal.sh | 165 | ||||
| -rwxr-xr-x | docker/common/keystone/start.sh | 168 |
3 files changed, 183 insertions, 157 deletions
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 <<EOF +CREATE DATABASE IF NOT EXISTS ${KEYSTONE_DB_NAME}; +GRANT ALL PRIVILEGES ON ${KEYSTONE_DB_NAME}.* TO + '${KEYSTONE_DB_USER}'@'%' IDENTIFIED BY '${KEYSTONE_DB_PASSWORD}' +EOF + +# File path and name used by crudini tool +cfg=/etc/keystone/keystone.conf + +# Token Configuration +echo "Configuring keystone.conf" +crudini --set $cfg \ + DEFAULT \ + admin_token \ + "${KEYSTONE_ADMIN_TOKEN}" + +# Database Configuration +crudini --set $cfg \ + database \ + connection \ + "mysql://${KEYSTONE_DB_USER}:${KEYSTONE_DB_PASSWORD}@${MARIADB_SERVICE_HOST}/${KEYSTONE_DB_NAME}" + +# Logging +crudini --del $cfg \ + DEFAULT \ + log_dir +crudini --set $cfg \ + DEFAULT \ + log_file \ + ${LOG_FILE} +crudini --set $cfg \ + DEFAULT \ + verbose \ + ${VERBOSE_LOGGING} +crudini --set $cfg \ + DEFAULT \ + debug \ + ${DEBUG_LOGGING} +crudini --set $cfg \ + DEFAULT \ + use_stderr \ + ${USE_STDERR} + +# Token Management +crudini --set $cfg \ + token \ + provider \ + keystone.token.providers."${TOKEN_PROVIDER}".Provider +crudini --set $cfg \ + token \ + driver \ + keystone.token.persistence.backends."${TOKEN_DRIVER}".Token +crudini --set $cfg \ + revoke \ + driver \ + keystone.contrib.revoke.backends."${TOKEN_DRIVER}".Revoke + +# Setup the openrc auth file +cat > /openrc <<EOF +export OS_AUTH_URL=http://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v${KEYSTONE_API_VERSION} +export OS_USERNAME=${KEYSTONE_USER} +export OS_PASSWORD=${KEYSTONE_ADMIN_PASSWORD} +export OS_TENANT_NAME=${ADMIN_TENANT_NAME} +EOF + +# Create keystone user and group if they don't exist +id -u keystone &>/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 <<EOF -CREATE DATABASE IF NOT EXISTS ${KEYSTONE_DB_NAME}; -GRANT ALL PRIVILEGES ON ${KEYSTONE_DB_NAME}.* TO - '${KEYSTONE_DB_USER}'@'%' IDENTIFIED BY '${KEYSTONE_DB_PASSWORD}' -EOF - -# File path and name used by crudini tool -cfg=/etc/keystone/keystone.conf - -# Token Configuration -echo "Configuring keystone.conf" -crudini --set $cfg \ - DEFAULT \ - admin_token \ - "${KEYSTONE_ADMIN_TOKEN}" - -# Database Configuration -crudini --set $cfg \ - database \ - connection \ - "mysql://${KEYSTONE_DB_USER}:${KEYSTONE_DB_PASSWORD}@${MARIADB_SERVICE_HOST}/${KEYSTONE_DB_NAME}" - -# Logging -crudini --del $cfg \ - DEFAULT \ - log_dir -crudini --set $cfg \ - DEFAULT \ - log_file \ - ${LOG_FILE} -crudini --set $cfg \ - DEFAULT \ - verbose \ - ${VERBOSE_LOGGING} -crudini --set $cfg \ - DEFAULT \ - debug \ - ${DEBUG_LOGGING} -crudini --set $cfg \ - DEFAULT \ - use_stderr \ - ${USE_STDERR} - -# Token Management -crudini --set $cfg \ - token \ - provider \ - keystone.token.providers."${TOKEN_PROVIDER}".Provider -crudini --set $cfg \ - token \ - driver \ - keystone.token.persistence.backends."${TOKEN_DRIVER}".Token -crudini --set $cfg \ - revoke \ - driver \ - keystone.contrib.revoke.backends."${TOKEN_DRIVER}".Revoke - -# Setup the openrc auth file -cat > /openrc <<EOF -export OS_AUTH_URL=http://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v${KEYSTONE_API_VERSION} -export OS_USERNAME=${KEYSTONE_USER} -export OS_PASSWORD=${KEYSTONE_ADMIN_PASSWORD} -export OS_TENANT_NAME=${ADMIN_TENANT_NAME} -EOF - -# Create keystone user and group if they don't exist -id -u keystone &>/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 |
