#!/bin/bash
-
#
# POC Script to build/install/deploy/orchestrate Tacker on an OPNFV Brhamaputra Fuel cluster
# Script assuming it runs on the openstack primary controller (where is opendaylight
#
# (c) 2016 Telefonaktiebolaget L. M. ERICSSON
#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
+# All rights reserved. This program and the accompanying materials are made available
+# under the terms of the Apache License, Version 2.0 which accompanies this distribution,
+# and is available at http://www.apache.org/licenses/LICENSE-2.0
#
CLIREPO="tacker-client"
DEPREPO="jsonrpclib"
-CLIENT="python-python-tackerclient_0.0.1~dev48-1_all.deb"
-JSONRPC="python-jsonrpclib_0.1.7-1_all.deb"
-SERVER="python-tacker_2014.2.0~dev176-1_all.deb"
+CLIENT=$(echo python-python-tackerclient_*_all.deb)
+JSONRPC=$(echo python-jsonrpclib_*_all.deb)
+SERVER=$(echo python-tacker_*_all.deb)
+
+#fuel admin user name
+fadm="fadm"
# Function checks whether crudini is available, if not - installs
function chkCrudini () {
if [[ ! -f '/usr/bin/crudini' ]]; then
wget -N http://mirrors.kernel.org/ubuntu/pool/universe/p/python-iniparse/python-iniparse_0.4-2.1build1_all.deb
wget -N http://archive.ubuntu.com/ubuntu/pool/universe/c/crudini/crudini_0.3-1_amd64.deb
- dpkg -i python-iniparse_0.4-2.1build1_all.deb crudini_0.3-1_amd64.deb crudini_0.3-1_amd64.deb
+ dpkg -i python-iniparse_0.4-2.1build1_all.deb crudini_0.3-1_amd64.deb
fi
}
dpkg --purge python-jsonrpclib
python setup.py --command-packages=stdeb.command bdist_deb
cd "deb_dist"
+ JSONRPC=$(echo python-jsonrpclib_*_all.deb)
cp $JSONRPC $MYDIR
dpkg -i $JSONRPC
}
fi
cd $MYDIR
rm -rf $MYREPO
- git clone -b 'SFC_brahmaputra' https://github.com/trozet/tacker.git $MYREPO
+ git clone -b 'SFC_colorado' https://github.com/trozet/tacker.git $MYREPO
cd $MYREPO
patch -p 1 <<EOFSCP
diff -ruN a/setup.cfg b/setup.cfg
# Function corrects and installs the Tacker-server debian package
function blessPackage () {
+ pushd "${MYDIR}/${MYREPO}/deb_dist"
+ SERVER=$(echo python-tacker_*_all.deb)
+ popd
DEBFILE="${MYDIR}/${MYREPO}/deb_dist/${SERVER}"
TMPDIR=$(mktemp -d /tmp/deb.XXXXXX) || exit 1
OUTPUT=$(basename "$DEBFILE")
cd "$TMPDIR"
patch -p 1 <<EOFDC
diff -ruN a/DEBIAN/control b/DEBIAN/control
---- a/DEBIAN/control 2016-02-08 10:06:18.000000000 +0000
-+++ b/DEBIAN/control 2016-02-08 10:45:09.501373675 +0000
+--- a/DEBIAN/control 2016-08-09 05:13:13.000000000 -0400
++++ b/DEBIAN/control 2016-08-09 05:32:56.761035046 -0400
@@ -4,7 +4,7 @@
Architecture: all
Maintainer: OpenStack <openstack-dev@lists.openstack.org>
- Installed-Size: 1575
+ Installed-Size: 1565
-Depends: python (>= 2.7), python (<< 2.8), python:any (>= 2.7.1-0ubuntu2), python-pbr, python-paste, python-pastedeploy, python-routes, python-anyjson, python-babel, python-eventlet, python-greenlet, python-httplib2, python-requests, python-iso8601, python-jsonrpclib, python-jinja2, python-kombu, python-netaddr, python-sqlalchemy (>= 1.0~), python-sqlalchemy (<< 1.1), python-webob, python-heatclient, python-keystoneclient, alembic, python-six, python-stevedore, python-oslo.config, python-oslo.messaging-, python-oslo.rootwrap, python-novaclient
+Depends: python (>= 2.7), python (<< 2.8), python:any (>= 2.7.1-0ubuntu2), python-pbr, python-paste, python-pastedeploy, python-routes, python-anyjson, python-babel, python-eventlet, python-greenlet, python-httplib2, python-requests, python-iso8601, python-jsonrpclib, python-jinja2, python-kombu, python-netaddr, python-sqlalchemy (>= 1.0~), python-sqlalchemy (<< 1.1), python-webob, python-heatclient, python-keystoneclient, alembic, python-six, python-stevedore, python-oslo.config, python-oslo.messaging, python-oslo.rootwrap, python-novaclient
Section: python
EOFDC
cd "$MYDIR"
echo "Patching deb..."
- dpkg -b "$TMPDIR" "${MYDIR}/${OUTPUT}"
+ dpkg -b "$TMPDIR" "${MYDIR}/${SERVER}"
rm -r "$TMPDIR"
- dpkg -i "${MYDIR}/${OUTPUT}"
+ dpkg -i "${MYDIR}/${SERVER}"
}
# Function deploys Tacker-server (installs missing mandatory files: upstart, default)
dpkg --purge python-tackerclient
git clone -b 'SFC_refactor' https://github.com/trozet/python-tackerclient.git $CLIREPO
cd $CLIREPO
-# patch -p 1 <<EOFCSC
-#--- a/setup.cfg 2016-02-09 08:51:48.424937110 +0000
-#+++ b/setup.cfg 2016-02-09 08:52:17.084938135 +0000
-#@@ -1,5 +1,5 @@
-# [metadata]
-#-name = python-tackerclient
-#+name = tackerclient
-# summary = CLI and Client Library for OpenStack Networking
-# description-file =
-# README.rst
-#EOFCSC
python setup.py --command-packages=stdeb.command bdist_deb
cd "deb_dist"
+ CLIENT=$(echo python-python-tackerclient_*_all.deb)
cp $CLIENT $MYDIR
- dpkg -i $CLIENT
+ dpkg -i "${MYDIR}/${CLIENT}"
}
# Function removes the cloned git repositories
myaddr=$(ifconfig br-fw-admin | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p')
for anode in $clusternodes ; do
if [ "$anode" != "$myaddr" ] ; then
- echo "installing $CLIENT on $anode"
- scp ${SSH_OPTIONS[@]} $CLIENT $anode:$CLIENT
- ssh ${SSH_OPTIONS[@]} $anode dpkg -i $CLIENT
- ssh ${SSH_OPTIONS[@]} $anode rm $CLIENT
+ echo "Installing $CLIENT on $anode"
+ scp ${SSH_OPTIONS[@]} -i "${MYDIR}/.ssh/id_rsa" ${CLIENT} ${fadm}@${anode}:${CLIENT}
+ ssh ${SSH_OPTIONS[@]} -i "${MYDIR}/.ssh/id_rsa" ${fadm}@${anode} sudo dpkg -i ${CLIENT}
+ ssh ${SSH_OPTIONS[@]} -i "${MYDIR}/.ssh/id_rsa" ${fadm}@${anode} rm ${CLIENT}
fi
done
}
popd
### Facts ###
+
+ # Port(s) Protocol ServiceDetails Source
+ # 8805-8872 tcp,udp Unassigned IANA
+ bind_port='8808'
+
auth_uri=$(crudini --get '/etc/heat/heat.conf' 'keystone_authtoken' 'auth_uri')
identity_uri=$(crudini --get '/etc/heat/heat.conf' 'keystone_authtoken' 'identity_uri')
- database_connection="mysql://tacker:tacker@$(hiera database_vip)/tacker"
+ int_addr=$(ifconfig br-mesh | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p')
+ mgmt_addr=$(ifconfig br-mgmt | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p')
+ pub_addr=$(ifconfig br-ex-lnx | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p')
rabbit_host=$(crudini --get '/etc/heat/heat.conf' 'oslo_messaging_rabbit' 'rabbit_hosts'| cut -d ':' -f 1)
rabbit_password=$(crudini --get '/etc/heat/heat.conf' 'oslo_messaging_rabbit' 'rabbit_password')
sql_host=$(hiera database_vip)
- admin_url="http://$(hiera management_vip):8888/"
- public_url="http://$(hiera public_vip):8888/"
+ database_connection="mysql://tacker:tacker@${sql_host}/tacker"
+ internal_url="http://${int_addr}:${bind_port}"
+ admin_url="http://${mgmt_addr}:${bind_port}"
+ public_url="http://${pub_addr}:${bind_port}"
heat_api_vip=$(crudini --get '/etc/heat/heat.conf' 'heat_api' 'bind_host')
- mgmt_addr=$(ifconfig br-mgmt | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p')
- allowed_hosts="[ '${HOSTNAME}', 'localhost', '127.0.0.1', '%' ]"
+ allowed_hosts="[ '${sql_host}', '${HOSTNAME%%.domain.tld}', 'localhost', '127.0.0.1', '%' ]"
heat_uri="http://${heat_api_vip}:8004/v1"
odl_port='8282'
service_tenant='services'
- myRegion='regionOne'
+ myRegion='RegionOne'
myPassword='tacker'
cat > configure_tacker.pp << EOF
class { 'tacker':
package_ensure => 'absent',
client_package_ensure => 'absent',
- bind_host => '${mgmt_addr}',
+ bind_port => '${bind_port}',
keystone_password => '${myPassword}',
keystone_tenant => '${service_tenant}',
auth_uri => '${auth_uri}',
class { 'tacker::db::mysql':
password => '${myPassword}',
- host => '${sql_host}',
allowed_hosts => ${allowed_hosts},
}
password => '${myPassword}',
tenant => '${service_tenant}',
admin_url => '${admin_url}',
- internal_url => '${admin_url}',
+ internal_url => '${internal_url}',
public_url => '${public_url}',
region => '${myRegion}',
}
EOF
+ apt-get install -y mysql-client-5.5
+ cat > /usr/bin/tacker-manage <<EOFAKEMANAGE
+#!/bin/bash
+EOFAKEMANAGE
+ chmod +x /usr/bin/tacker-manage
puppet apply configure_tacker.pp
rm -f tackerc
cat > tackerc <<EOFRC
export OS_TENANT_NAME='${service_tenant}'
export OS_PROJECT_NAME='${service_tenant}'
export OS_USERNAME='tacker'
-export OS_PASSWORD='tacker'
+export OS_PASSWORD='${myPassword}'
export OS_AUTH_URL='${auth_uri}'
export OS_DEFAULT_DOMAIN='default'
export OS_AUTH_STRATEGY='keystone'
-export OS_REGION_NAME='RegionOne'
+export OS_REGION_NAME='${myRegion}'
+export TACKER_ENDPOINT_TYPE='internalURL'
EOFRC
chmod +x tackerc
}
myaddr=$(ifconfig br-fw-admin | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p')
for anode in $clusternodes ; do
if [ "$anode" != "$myaddr" ] ; then
- echo "populating seetings to $anode"
- scp ${SSH_OPTIONS[@]} tackerc $anode:tackerc
+ echo "Populating settings to $anode"
+ scp ${SSH_OPTIONS[@]} -i "${MYDIR}/.ssh/id_rsa" tackerc ${fadm}@${anode}:tackerc
fi
done
}