diff options
Diffstat (limited to 'tools/kingbird/install_kingbird.sh')
-rw-r--r-- | tools/kingbird/install_kingbird.sh | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/tools/kingbird/install_kingbird.sh b/tools/kingbird/install_kingbird.sh new file mode 100644 index 0000000..c936aa3 --- /dev/null +++ b/tools/kingbird/install_kingbird.sh @@ -0,0 +1,169 @@ +#!/bin/bash + +set -o xtrace +set -o errexit +set -o nounset +set -o pipefail + +# Ensure that openrc containing OpenStack environment variables is present. +source openrc + +# Endpoints. Dynamically get IP addresses from another service (keystone) +KINGBIRD_PUBLIC_URL=$(openstack endpoint list --long | grep keystone | cut -d '|' -f 6 | cut -d '/' -f 3 | cut -d ':' -f 1) +KINGBIRD_ADMIN_URL=$(openstack endpoint list --long | grep keystone | cut -d '|' -f 7 | cut -d '/' -f 3 | cut -d ':' -f 1) +KINGBIRD_INTERNAL_URL=$(openstack endpoint list --long | grep keystone | cut -d '|' -f 7 | cut -d '/' -f 3 | cut -d ':' -f 1) + +# MySQL +mysql_host=$(mysql -uroot -se "SELECT SUBSTRING_INDEX(USER(), '@', -1);") +mysql_user='kingbird' +mysql_pass='mysql_kb' +mysql_db='kingbird' + +# Keystone +admin_password='keystone_kb_pass' +admin_user='kingbird' +admin_tenant_name='services' +auth_uri=$OS_AUTH_URL"v3" + +# Rabbit +rabbit_user='nova' +rabbit_password=$(sed -n 's/^rabbit_password *= *\([^ ]*.*\)/\1/p' < /etc/nova/nova.conf) +rabbit_hosts=$(sed -n 's/^rabbit_hosts *= *\([^ ]*.*\)/\1/p' < /etc/nova/nova.conf) + +# Config +KINGBIRD_CONF_FILE='/etc/kingbird/kingbird.conf' +bind_host=$(sed -n 's/^admin_bind_host *= *\([^ ]*.*\)/\1/p' < /etc/keystone/keystone.conf) + +function ini_has_option { + local file=$1 + local section=$2 + local option=$3 + local line + line=$(sed -ne "/^\[$section\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" "$file") + [ -n "$line" ] +} + +function iniset { + local file=$1 + local section=$2 + local option=$3 + local value=$4 + + [[ -z $section || -z $option ]] && return + + if ! grep -q "^\[$section\]" "$file" 2>/dev/null; then + echo -e "\n[$section]" >>"$file" + fi + if ! ini_has_option "$file" "$section" "$option"; then + sed -i -e "/^\[$section\]/ a\\ +$option = $value +" "$file" + else + local sep=$(echo -ne "\x01") + # Replace it + sed -i -e '/^\['${section}'\]/,/^\[.*\]/ s'${sep}'^\('${option}'[ \t]*=[ \t]*\).*$'${sep}'\1'"${value}"${sep} "$file" + fi +} + +export DEBIAN_FRONTEND=noninteractive +apt-get -qq update +apt-get install -y \ + curl \ + git \ + libffi-dev \ + libssl-dev \ + libxml2-dev \ + libxslt1-dev \ + libyaml-dev \ + python-dev \ + python-pip \ + python-setuptools + +sudo pip install --upgrade pip +sudo pip install tox==1.6.1 + + +#Recreate database +mysql -uroot -e "DROP DATABASE IF EXISTS $mysql_db;" +mysql -uroot -e "CREATE DATABASE $mysql_db CHARACTER SET utf8;" +mysql -uroot -e "GRANT ALL PRIVILEGES ON $mysql_db.* TO '$mysql_user'@'$mysql_host' IDENTIFIED BY '$mysql_pass';" + +#Configure kingbird user +openstack user show kingbird 2>/dev/null +if [ $? -eq 0 ]; then + echo "User already exists. Skipping.." +else + echo "Creating Kingbird user.." + openstack user create --project=$admin_tenant_name --password=$admin_password $admin_user + openstack role add --user=$admin_user --project=$admin_tenant_name admin +fi + +#Configure kingbird endpoints +openstack service show kingbird 2>/dev/null +if [ $? -eq 0 ]; then + echo "Kingbird service already exists. Skipping.." +else + echo "Creating Kingbird endpoints.." + openstack service create --name=kingbird --description="Kingbird" multisite + openstack endpoint create kingbird \ + --publicurl $KINGBIRD_PUBLIC_URL \ + --adminurl $KINGBIRD_ADMIN_URL \ + --internalurl $KINGBIRD_INTERNAL_URL \ + --region $OS_REGION_NAME +fi + +#Setup Kingbird +git clone https://github.com/openstack/kingbird.git && cd kingbird/ + +pip install -r requirements.txt +pip install . + +mkdir -p /etc/kingbird/ +oslo-config-generator --config-file tools/config-generator.conf --output-file $KINGBIRD_CONF_FILE + +# Delete previous repo clone +cd .. +rm -rf kingbird/ + +# Configure host section +iniset $KINGBIRD_CONF_FILE DEFAULT bind_host $bind_host +iniset $KINGBIRD_CONF_FILE DEFAULT bind_port 8118 +iniset $KINGBIRD_CONF_FILE host_details host $bind_host + +# Configure cache section. Ideally should be removed +iniset $KINGBIRD_CONF_FILE cache admin_tenant $admin_tenant_name +iniset $KINGBIRD_CONF_FILE cache admin_username $admin_user +iniset $KINGBIRD_CONF_FILE cache admin_password $admin_password +iniset $KINGBIRD_CONF_FILE cache auth_uri $auth_uri +iniset $KINGBIRD_CONF_FILE cache identity_uri $OS_AUTH_URL + +# Configure keystone_authtoken section +iniset $KINGBIRD_CONF_FILE keystone_authtoken admin_tenant_name $admin_tenant_name +iniset $KINGBIRD_CONF_FILE keystone_authtoken admin_user $admin_user +iniset $KINGBIRD_CONF_FILE keystone_authtoken admin_password $admin_password +iniset $KINGBIRD_CONF_FILE keystone_authtoken auth_uri $auth_uri +iniset $KINGBIRD_CONF_FILE keystone_authtoken identity_uri $OS_AUTH_URL + +# Configure RabbitMQ credentials +iniset $KINGBIRD_CONF_FILE oslo_messaging_rabbit rabbit_userid $rabbit_user +iniset $KINGBIRD_CONF_FILE oslo_messaging_rabbit rabbit_password $rabbit_password +iniset $KINGBIRD_CONF_FILE oslo_messaging_rabbit rabbit_hosts $rabbit_hosts +iniset $KINGBIRD_CONF_FILE oslo_messaging_rabbit rabbit_virtual_host / +iniset $KINGBIRD_CONF_FILE oslo_messaging_rabbit rabbit_ha_queues False + + +# Configure the database. +iniset $KINGBIRD_CONF_FILE database connection "mysql://$mysql_user:$mysql_pass@$mysql_host/$mysql_db?charset=utf8" +iniset $KINGBIRD_CONF_FILE database max_overflow -1 +iniset $KINGBIRD_CONF_FILE database max_pool_size 1000 + +# Kill kingbird +if pgrep kingbird-api &> /dev/null ; then pkill -f kingbird-api ; fi +if pgrep kingbird-engine &> /dev/null ; then pkill -f kingbird-engine ; fi + +# Run kingbird +mkdir -p /var/log/kingbird +kingbird-manage --config-file $KINGBIRD_CONF_FILE db_sync +nohup kingbird-engine --config-file $KINGBIRD_CONF_FILE --log-file /var/log/kingbird/kingbird-engine.log & +nohup kingbird-api --config-file $KINGBIRD_CONF_FILE --log-file /var/log/kingbird/kingbird-api.log & + |