Charm: ~openstack-ubuntu-testing:precise/quantal
Revision: 37
Hook: install
#!/bin/bash
FORMULA_DIR=$(dirname $0)
ARG0=${0##*/}
if [[ -e $FORMULA_DIR/glance-common ]] ; then
. $FORMULA_DIR/glance-common
else
echo "ERROR: Could nto load glance-common from $FORMULA_DIR"
fi
function install_hook {
juju-log "Installing glance packages"
apt-get -y install python-software-properties || exit 1
add_ppa
apt-get update
# retry after a hash mismatch
if [[ $? != 0 ]] ; then
juju-log "WARN: First apt-get update failed, trying again...."
rm -rf /var/cache/apt/*
rm -rf /var/lib/apt/lists/*
sleep 5
apt-get update
[[ $? != 0 ]] && juju-log"ERROR: Second attempt to apt-get update FAILED." && exit 1
fi
apt-get -y install $PACKAGES || exit 1
glance_ctl all stop
# work around LP #784837 until its fixed.
[[ ! -d /var/log/glance ]] && mkdir /var/log/glance
chown glance /var/log/glance
[[ ! -e /var/log/glance/api.log ]] && touch /var/log/glance/api.log
[[ ! -e /var/log/glance/registry.log ]] && touch /var/log/glance/registry.log
chown glance /var/log/glance/*.log
# XXX turn up the logging for now.
set_or_update verbose True api
set_or_update debug True api
set_or_update verbose True registry
set_or_update debug True registry
# give ubuntu user passwd-less sudo for log access
echo "ubuntu ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/ubuntu-qa
chmod 0440 /etc/sudoers.d/ubuntu-qa
# remove this out once packaging has been updated. adam 01/23
cat >/etc/glance/policy.json <<END
{
"default": []
}
END
chmod 755 /etc/glance/policy.json
# drop version info to be picked up by interested jenkins jobs
dpkg -l | grep glance | awk '{ print $2","$3 }' > /tmp/versions_tested
}
function db_joined {
juju-log "glance: db_joined: requesting access to $GLANCE_DB for $DB_USER@`unit-get private-address`"
relation-set database=$GLANCE_DB
relation-set username=$DB_USER
relation-set hostname=`unit-get private-address`
}
function db_changed {
DB_HOST=`relation-get private-address`
DB_PASSWORD=`relation-get password`
if [[ -z $DB_HOST ]] || [[ -z $DB_PASSWORD ]] ; then
echo "db_changed: DB_HOST || DB_PASSWORD not yet set. Exit 0 and retry"
exit 0
else
echo "db_changed: Received password from $DB_HOST"
fi
juju-log "glance: db_changed: Configuring registry for access to $GLANCE_DB@$DB_HOST"
glance_ctl all stop
set_or_update sql_connection "mysql://$DB_USER:$DB_PASSWORD@$DB_HOST/$GLANCE_DB" registry
set_or_update sql_connection "mysql://$DB_USER:$DB_PASSWORD@$DB_HOST/$GLANCE_DB" api
# Set the db version to 0 if its not under version control. We assume that any existing
# database we are being related to was created WITH version control.
if ! glance-manage db_version ; then
juju-log "Setting glance database version to 0"
glance-manage version_control 0
fi
glance-manage db_sync
glance_ctl all restart
}
function image-service_joined {
bind_host=$(cat /etc/glance/glance-api.conf | grep bind_host | cut -d= -f2 | sed -e 's/ //g')
bind_port=$(cat /etc/glance/glance-api.conf | grep bind_port | cut -d= -f2 | sed -e 's/ //g')
[[ $bind_host == "0.0.0.0" ]] && bind_host=`unit-get private-address`
juju-log "glance: image-service_joined: To peer glance-api-server=$bind_host:$bind_port"
relation-set glance-api-server="$bind_host:$bind_port"
}
function object-store_changed {
URL=`relation-get url`
USER=`relation-get user`
PASSWORD=`relation-get password`
[[ -z $URL ]] || [[ -z $USER ]] || [[ -z $PASSWORD ]] && \
echo "URL||USER||PASSWORD not set, peer not ready?" && exit 0
set_or_update default_store swift api
set_or_update swift_store_user system:$USER api
set_or_update swift_store_key $PASSWORD api
set_or_update swift_store_auth_address $URL api
set_or_update swift_store_create_container_on_put true api
glance_ctl glance-api restart
}
function keystone_joined {
# advertise our API endpoint to keystone
url="http://$(unit-get private-address):9292/v1"
relation-set service="glance" \
region="RegionOne" public_url=$url admin_url=$url internal_url=$url
}
function keystone_changed {
# we hopefully get a token in return. configure middleware accordingly
token=$(relation-get admin_token)
service_port=$(relation-get service_port)
auth_port=$(relation-get auth_port)
service_username=$(relation-get service_username)
service_password=$(relation-get service_password)
service_tenant=$(relation-get service_tenant)
[[ -z "$token" ]] || [[ -z "$service_port" ]] || [[ -z "$auth_port" ]] ||
[[ -z "$service_username" ]] || [[ -z "$service_password" ]] ||
[[ -z "$service_tenant" ]] && juju-log "keystone_changed: Peer not ready" &&
exit 0
[[ "$token" == "-1" ]] &&
juju-log "keystone_changed: admin token error" && exit 1
juju-log "keystone_changed: Acquired admin. token"
keystone_host=$(relation-get private-address)
set_paste_deploy_flavor "keystone" "api" || exit 1
set_paste_deploy_flavor "keystone" "registry" || exit 1
for i in api-paste registry-paste ; do
set_or_update "service_host" "$keystone_host" $i
set_or_update "service_port" "$service_port" $i
set_or_update "auth_host" "$keystone_host" $i
set_or_update "auth_port" "$auth_port" $i
set_or_update "auth_uri" "http://$keystone_host:$service_port/" $i
set_or_update "admin_token" "$token" $i
set_or_update "admin_tenant_name" "$service_tenant" $i
set_or_update "admin_user" "$service_username" $i
set_or_update "admin_password" "$service_password" $i
done
glance_ctl all restart
}
case $ARG0 in
"start"|"stop") glance_ctl all $ARG0 ;;
"install") install_hook ;;
"shared-db-relation-joined") db_joined ;;
"shared-db-relation-changed") db_changed;;
"image-service-relation-joined") image-service_joined ;;
"image-service-relation-changed") exit 0 ;;
"object-store-relation-joined") exit 0 ;;
"object-store-relation-changed") object-store_changed ;;
"identity-service-relation-joined") keystone_joined ;;
"identity-service-relation-changed") keystone_changed ;;
esac