#!/bin/bash
# Script for Installation of Database Service (Trove) in Openstack

export mysql_user=root
export mysql_pass=redhat
export trove_db_user=trove
export trove_db_pass=trove
export trove_db=trove
export trove_user=trove
export trove_pass=trove
export myip=`hostname -i`
export rabbit_user=openstack
export rabbit_pass=rabbitmq
export admin_user=admin
export admin_pass=openstackadmin

echo "Setup Trove for Openstack, Please wait for few mins..."
mysql -u $mysql_user -p$mysql_pass -e "create database $trove_db;";
mysql -u $mysql_user -p$mysql_pass -e "grant all privileges on $trove_db.* to '$trove_db_user'@'localhost' identified by '$trove_db_pass';";
mysql -u $mysql_user -p$mysql_pass -e "grant all privileges on $trove_db.* to '$trove_db_user'@'%' identified by '$trove_db_pass;";
mysql -u $mysql_user -p$mysql_pass -e "flush privileges;"

source /root/admin-openrc

openstack user create --domain default --password $trove_pass $trove_user
openstack role add --project service --user $trove_user admin
openstack service create --name trove --description "Database" database;
openstack endpoint create --region RegionOne database public http://$myip:8779/v1.0/%\(tenant_id\)s;
openstack endpoint create --region RegionOne database internal http://$myip:8779/v1.0/%\(tenant_id\)s;
openstack endpoint create --region RegionOne database admin http://$myip:8779/v1.0/%\(tenant_id\)s;


yum install openstack-trove python-troveclient -y;

mv /etc/trove/trove.conf /etc/trove/trove.conf.org

cat > /etc/trove/trove.conf  <<EOF
[DEFAULT]
log_dir = /var/log/trove
trove_auth_url = http://$myip/identity/v2.0
nova_compute_url = http://$myip:8774/v2
cinder_url = http://$myip:8776/v1
swift_url = http://$myip:8080/v1/AUTH_
notifier_queue_hostname = $myip
rpc_backend = rabbit

auth_strategy = keystone
add_addresses = True
network_label_regex = ^NETWORK_LABEL$
api_paste_config = /etc/trove/api-paste.ini


[keystone_authtoken]
auth_uri = http://$myip/identity
auth_url = http://$myip/identity_admin
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = $trove_user
password = $trove_pass

[database]
connection = mysql+pymysql://$trove_db_user:$trove_db_pass@localhost/$trove_db

[oslo_messaging_rabbit]
rabbit_host = $myip
rabbit_userid = $rabbit_user
rabbit_password = $rabbit_pass
EOF

mv /etc/trove/trove-taskmanager.conf /etc/trove/trove-taskmanager.conf.org

cat > /etc/trove/trove-taskmanager.conf <<EOF
[DEFAULT]
log_dir = /var/log/trove
trove_auth_url = http://$myip/identity/v2.0
nova_compute_url = http://$myip:8774/v2
cinder_url = http://$myip:8776/v1
swift_url = http://$myip:8080/v1/AUTH_
notifier_queue_hostname = $myip
rpc_backend = rabbit

# Configuration options for talking to nova via the novaclient.
# These options are for an admin user in your keystone config.
# It proxy's the token received from the user to send to nova
# via this admin users creds,
# basically acting like the client via that proxy token.
nova_proxy_admin_user = $admin_user
nova_proxy_admin_pass = $admin_pass
nova_proxy_admin_tenant_name = service
taskmanager_manager = trove.taskmanager.manager.Manager

# Inject configuration into guest via ConfigDrive
use_nova_server_config_drive = True

# Set these if using Neutron Networking
network_driver=trove.network.neutron.NeutronDriver
network_label_regex=.*

[database]
connection = mysql+pymysql://$trove_db_user:$trove_db_pass@localhost/$trove_db

[oslo_messaging_rabbit]
rabbit_host = $myip
rabbit_userid = $rabbit_user
rabbit_password = $rabbit_pass
EOF

mv /etc/trove/trove-conductor.conf /etc/trove/trove-conductor.conf.org

cat > /etc/trove/trove-conductor.conf <<EOF
[DEFAULT]
log_dir = /var/log/trove
trove_auth_url = http://$myip/identity/v2.0
nova_compute_url = http://$myip:8774/v2
cinder_url = http://$myip:8776/v1
swift_url = http://$myip:8080/v1/AUTH_
notifier_queue_hostname = $myip
rpc_backend = rabbit

[database]
connection = mysql+pymysql://$trove_db_user:$trove_db_pass@localhost/$trove_db

[oslo_messaging_rabbit]
rabbit_host = $myip
rabbit_userid = $rabbit_user
rabbit_password = $rabbit_pass
EOF

cat > /etc/trove/trove-guestagent.conf <<EOF
rabbit_host = $myip
rabbit_password = $rabbit_pass
nova_proxy_admin_user = $admin_user
nova_proxy_admin_pass = $admin_pass
nova_proxy_admin_tenant_name = service
trove_auth_url = http://$myip/identity_admin/v2.0
EOF

su -s /bin/sh -c "trove-manage db_sync" trove;

systemctl enable openstack-trove-api.service openstack-trove-taskmanager.service openstack-trove-conductor.service;
systemctl start openstack-trove-api.service openstack-trove-taskmanager.service openstack-trove-conductor.service;

pip install trove-dashboard;
cp -r /usr/lib/python2.7/site-packages/trove_dashboard/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/;
service httpd restart

echo "Trove Installation has been done, please verify from the Openstack Dashboard..."
