cue/contrib/scripts/install/single_vm/user_data_template

248 lines
8.0 KiB
Bash

#!/bin/bash
set -x #echo on
cat > /etc/network/interfaces << EOF
auto lo
iface lo inet loopback
source interfaces.d/*
EOF
cat > /etc/network/interfaces.d/eth0 << EOF
auto eth0
iface eth0 inet dhcp
metric 0
EOF
cat > /etc/network/interfaces.d/eth1 << EOF
auto eth1
iface eth1 inet dhcp
metric 1
EOF
ifup eth1
# Script configuration parameters ***start
os_region_name={{OS_REGION_NAME}}
os_tenant_name={{OS_TENANT_NAME}}
os_username={{OS_USERNAME}}
os_password={{OS_PASSWORD}}
os_auth_url={{OS_AUTH_URL}}
os_key_name={{OS_KEY_NAME}}
os_security_group={{CUE_SECURITY_GROUP}}
cue_image_id={{CUE_IMAGE_ID}}
cue_management_network_id={{CUE_MANAGEMENT_NIC}}
mysql_root_password={{MYSQL_ROOT_PASSWORD}}
mysql_cue_api_password={{MYSQL_CUEAPI_PASSWORD}}
mysql_cue_worker_password={{MYSQL_CUEWORKER_PASSWORD}}
floating_ip={{FLOATING_IP}}
# Script configuration parameters ***end
# Determinate is the given option present in the INI file
# ini_has_option config-file section option
function ini_has_option {
local xtrace=$(set +o | grep xtrace)
set +o xtrace
local file=$1
local section=$2
local option=$3
local line
line=$(sed -ne "/^\[$section\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" "$file")
$xtrace
[ -n "$line" ]
}
# Set an option in an INI file
# iniset config-file section option value
function iniset {
local xtrace=$(set +o | grep xtrace)
set +o xtrace
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
# Add section at the end
echo -e "\n[$section]" >>"$file"
fi
if ! ini_has_option "$file" "$section" "$option"; then
# Add it
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
${xtrace}
}
# Update & upgrade VM
unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get -o Dpkg::Options::="--force-confnew" --force-yes -fuy dist-upgrade
# Install required pacakges
apt-get install -y python-pip python-dev git build-essential zookeeper zookeeperd python-mysqldb supervisor
# Install keystone
cd /home/ubuntu/
sudo -u ubuntu -g ubuntu git clone https://git.openstack.org/openstack-dev/devstack
mkdir -p /opt/stack
chown ubuntu:ubuntu /opt/stack
sudo -u ubuntu -g ubuntu git clone https://github.com/openstack/requirements /opt/stack/requirements
cat > devstack/local.conf<< EOF
[[local|localrc]]
HOST_IP=127.0.0.1
SERVICE_HOST=$floating_ip
REQUIREMENTS_MODE=soft
ADMIN_PASSWORD=password
MYSQL_PASSWORD=$mysql_root_password
RABBIT_PASSWORD=password
SERVICE_PASSWORD=password
SERVICE_TOKEN=password
LOGFILE=/opt/stack/logs/stack.sh.log
VERBOSE=True
LOG_COLOR=True
SCREEN_LOGDIR=/opt/stack/logs
disable_service g-api
disable_service g-reg
disable_service n-api
disable_service n-crt
disable_service n-obj
disable_service n-cpu
disable_service n-net
disable_service n-cond
disable_service n-sch
disable_service n-novnc
disable_service n-xvnc
disable_service n-cauth
disable_service c-sch
disable_service c-api
disable_service c-vol
disable_service h-eng
disable_service h-api
disable_service h-api-cfn
disable_service h-api-cw
disable_service horizon
disable_service tempest
EOF
pushd /home/ubuntu/devstack
sudo -u ubuntu -g ubuntu ./stack.sh
popd
# Setup keystone user, service, and endpoint
CUE_URL="http://${floating_ip}:8795/"
source ./devstack/openrc admin admin
keystone user-create --name cue --tenant service --pass password
keystone user-role-add --user cue --role admin --tenant service
keystone service-create --name cue --type "message-broker" --description "Message Broker Provisioning Service"
keystone endpoint-create --region $OS_REGION_NAME --service cue --publicurl $CUE_URL --adminurl $CUE_URL --internalurl $CUE_URL
# Install MySQL DB
debconf-set-selections <<< "mysql-server mysql-server/root_password password ${mysql_root_password}"
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password ${mysql_root_password}"
apt-get -y install mysql-server
# Create cue database
echo "create database cue;" | mysql -u root -p${mysql_root_password}
# Create MySQL DB users for Cue API and Cue worker processes
echo "CREATE USER 'cue_api'@'%' IDENTIFIED BY '${mysql_cue_api_password}'" | mysql -u root -p${mysql_root_password}
echo "CREATE USER 'cue_worker'@'%' IDENTIFIED BY '${mysql_cue_worker_password}'" | mysql -u root -p${mysql_root_password}
# Grant cue_api and cue_worker users privilidge to cue database
echo "GRANT ALL PRIVILEGES ON cue. * TO 'cue_api'@'%';" | mysql -u root -p${mysql_root_password}
echo "GRANT ALL PRIVILEGES ON cue. * TO 'cue_worker'@'%';" | mysql -u root -p${mysql_root_password}
# Restart mysql server
service mysql restart
# Install cue service
git clone https://github.com/openstack/cue.git
cd cue
python setup.py install
pip install pbr
# Create local directory for cue configuratin and policy files
mkdir -p /etc/cue
# Copy Cue's default configuration files and policy file to /etc/cue/
CUE_CONF="/etc/cue/cue.conf"
cp etc/cue/cue.conf.sample ${CUE_CONF}
cp etc/cue/policy.json /etc/cue/policy.json
# Set required cue configuration settings
db_connection_api=mysql://cue_api:${mysql_cue_api_password}@127.0.0.1/cue
db_connection_worker=mysql://cue_worker:${mysql_cue_worker_password}@127.0.0.1/cue
iniset ${CUE_CONF} DEFAULT rabbit_port 5672
iniset ${CUE_CONF} DEFAULT debug True
iniset ${CUE_CONF} DEFAULT os_security_group ${os_security_group}
iniset ${CUE_CONF} DEFAULT management_network_id ${cue_management_network_id}
iniset ${CUE_CONF} DEFAULT auth_strategy keystone
iniset ${CUE_CONF} api host_ip '0.0.0.0'
iniset ${CUE_CONF} api port 8795
iniset ${CUE_CONF} api max_limit 1000
iniset ${CUE_CONF} database connection ${db_connection_api}
iniset ${CUE_CONF} openstack os_key_name ${os_key_name}
iniset ${CUE_CONF} openstack os_region_name ${os_region_name}
iniset ${CUE_CONF} openstack os_tenant_name ${os_tenant_name}
iniset ${CUE_CONF} openstack os_username ${os_username}
iniset ${CUE_CONF} openstack os_password ${os_password}
iniset ${CUE_CONF} openstack os_auth_url ${os_auth_url}
iniset ${CUE_CONF} database connection ${db_connection_worker}
iniset ${CUE_CONF} keystone_authtoken admin_tenant_name service
iniset ${CUE_CONF} keystone_authtoken admin_password password
iniset ${CUE_CONF} keystone_authtoken admin_user cue
iniset ${CUE_CONF} keystone_authtoken identity_uri http://${floating_ip}:35357
# Execute Cue's database upgrade scripts
cue-manage --config-file /etc/cue/cue.conf database upgrade
# Execute Cue's taskflow upgrade scripts
cue-manage --config-file /etc/cue/cue.conf taskflow upgrade
# set default broker and cue image
cue-manage --config-file ${CUE_CONF} broker add rabbitmq true
BROKER_ID=$(cue-manage --config-file ${CUE_CONF} broker list | grep rabbitmq | tr -d ' ' | cut -f 2 -d '|')
cue-manage --config-file ${CUE_CONF} broker add_metadata ${BROKER_ID} --image ${cue_image_id}
# Create supervisord execution configuration for Cue API
cat > /etc/supervisor/conf.d/cueapi.conf<< EOF
[program:cue-api]
command=cue-api --debug --config-file /etc/cue/cue.conf
process_name=%(program_name)s
stdout_logfile=/var/log/cue-api.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/var/log/cue-api.err
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
EOF
# Create supervisord execution configuration for Cue Worker
cat > /etc/supervisor/conf.d/cueworker.conf<< EOF
[program:cue-worker]
command=cue-worker --debug --config-file /etc/cue/cue.conf
process_name=%(program_name)s
stdout_logfile=/var/log/cue-worker.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/var/log/cue-worker.err
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
EOF
# Restart supervisord to start Cue API and Cue Worker processes
service supervisor restart