#!/bin/bash -x

. /etc/openstackquickstartrc

. /usr/lib/openstack-quickstart/functions.sh

echo "Setting up OpenStack demo extra node..."

install_packages patterns-OpenStack-compute-node

setup_node_for_nova_compute
disable_firewall_and_enable_forwarding

#-----------------------------------------
## setup neutron configuration
#-----------------------------------------

setup_messaging_client /etc/neutron/neutron.conf $IP $pw
setup_keystone_authtoken /etc/neutron/neutron.conf

ownip=`ip addr show dev eth0 | perl -ne 'm/inet (\d+\.\d+\.\d+\.\d+)/ && print $1'`
sed -i -e "s;127.0.0.1;$IP;" /etc/bash.openstackrc

crudini --set /etc/neutron/neutron.conf database connection $DB://neutron:$mpw@$IP/neutron
crudini --set /etc/neutron/neutron.conf DEFAULT host $ownip
crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips true
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_change true
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes true
crudini --set /etc/neutron/neutron.conf DEFAULT nova_url "http://$SERVICE_HOST:8774/v2"
crudini --set /etc/neutron/neutron.conf DEFAULT nova_admin_username nova
crudini --set /etc/neutron/neutron.conf DEFAULT nova_admin_password $ADMIN_PASSWORD
crudini --set /etc/neutron/neutron.conf DEFAULT nova_admin_tenant_name service
crudini --set /etc/neutron/neutron.conf DEFAULT nova_admin_auth_url $KEYSTONE_PUBLIC_ENDPOINT

crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings physnet1:$TENANT_ETH
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT use_namespaces true
crudini --set /etc/neutron/l3_agent.ini DEFAULT use_namespaces true


#-----------------------------------------
## setup nova configuration
#-----------------------------------------

setup_messaging_client /etc/nova/nova.conf $IP $pw
setup_keystone_authtoken /etc/nova/nova.conf
setup_nova_compute

crudini --set /etc/nova/nova.conf neutron url http://$IP:9696/
crudini --set /etc/nova/nova.conf neutron admin_auth_url $KEYSTONE_PUBLIC_ENDPOINT
crudini --set /etc/nova/nova.conf DEFAULT my_ip $ownip
crudini --set /etc/nova/nova.conf DEFAULT host $ownip
crudini --set /etc/nova/nova.conf glance host $IP
crudini --set /etc/nova/nova.conf glance api_servers "http://$IP:9292"
crudini --set /etc/nova/nova.conf DEFAULT novncproxy_base_url http://$IP:6080/vnc_auto.html
crudini --set /etc/nova/nova.conf DEFAULT vncserver_listen "0.0.0.0"
crudini --set /etc/nova/nova.conf DEFAULT vncserver_proxyclient_address $ownip

test -d /var/lib/nova/.ssh && chown -R nova:nova /var/lib/nova/.ssh

for m in cinder heat nova glance neutron ; do
    sed -i -e 's/%SERVICE_TENANT_NAME%/service/' \
           -e "s/%SERVICE_PASSWORD%/$ADMIN_PASSWORD/" \
               /etc/$m/*.ini /etc/$m/$m*.conf
done

# configure NTP, because we need synchronized time between nodes
grep -q ntp.org /etc/ntp.conf || echo server pool.ntp.org >> /etc/ntp.conf

# start services
for s in ntp open-iscsi openstack-neutron-linuxbridge-agent \
    openstack-nova-compute
do
    start_and_enable_service $s
done

grep -q bash.openstackrc /etc/bash.bashrc.local ||\
echo "export HOST_IP=$IP
. /etc/bash.openstackrc 
setcreds admin $pw" >> /etc/bash.bashrc.local
