summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--prototypes/sfc_tacker/README.rst62
-rwxr-xr-xprototypes/sfc_tacker/poc.tacker-up.sh385
2 files changed, 0 insertions, 447 deletions
diff --git a/prototypes/sfc_tacker/README.rst b/prototypes/sfc_tacker/README.rst
deleted file mode 100644
index e219abd34..000000000
--- a/prototypes/sfc_tacker/README.rst
+++ /dev/null
@@ -1,62 +0,0 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International License.
-.. SPDX-License-Identifier: CC-BY-4.0
-.. (c) 2016 Telefonaktiebolaget L. M. ERICSSON
-
-README SFC + Tacker
-===================
-
-The Enclosed shell script builds, deploys, orchestrates Tacker,
-an Open NFV Orchestrator with in-built general purpose VNF Manager
-to deploy and operate Virtual Network Functions (VNFs).
-
-The provided deployment tool is experimental, not fault
-tolerant but as idempotent as possible. To use the provided shell
-script for provision/deployment, transfer the script to the Openstack
-primary controller node, where Your deployed OpenDaylight SDN
-controller runs. The deployment tool (poc.tacker-up.sh), expects that
-Your primary controller reaches all your OPNFV/Fuel cluster nodes and
-has internet connection either directly or via an http proxy, note
-that a working and consistent DNS name resolution is a must.
-
-Theory of operation: the deployment tool downloads the source
-python packages from GitHub and a json rpc library developed by Josh
-Marshall. Besides these sources, downloads software for python/debian
-software release. When building succeeds the script deploys the software
-components to the OPNFV Cluster nodes. Finally orchestrates the deployed
-tacker binaries as an infrastucture/service. The Tacker has two
-components:
-
-#. Tacker server
-
- - what interacts with Openstack and OpenDayLight.
-
-#. Tacker client
-
- - a command line software talks with the server,
- available on all cluster nodes and the access point
- to the Tacker service. Note that the tacker
- distribution provides a a plugin to the Horizon
- OpenStack Gui, but thus Horizon plugin is out of the
- scope of this Proof of Concept setup/deployment.
-
-As mentioned, this compilation contains an OpenDayLight SDN controller
-with Service Function Chaining and Group based Policy features enabled.
-
-To acces for your cluster information ssh to the fuel master (10.20.0.2)
-and issue command: fuel node.
-Here is an output of an example deployment:
-
-+--------+------------+------------------+-------------+-----------+-------------------+----------------------------------+-------------------+------------+--------------+
-| **id** | **status** | **name** | **cluster** | **ip** | **mac** | **roles** | **pending_roles** | **online** | **group_id** |
-+--------+------------+------------------+-------------+-----------+-------------------+----------------------------------+-------------------+------------+--------------+
-| 1 | ready | Untitled (cc:51) | 1 | 10.20.0.6 | 52:54:00:1e:cc:51 | compute | | True | 1 |
-+--------+------------+------------------+-------------+-----------+-------------------+----------------------------------+-------------------+------------+--------------+
-| 2 | ready | Untitled (e6:3e) | 1 | 10.20.0.4 | 52:54:00:0c:e6:3e | compute | | True | 1 |
-+--------+------------+------------------+-------------+-----------+-------------------+----------------------------------+-------------------+------------+--------------+
-| 3 | ready | Untitled (a2:4c) | 1 | 10.20.0.5 | 52:54:00:d3:a2:4c | compute | | True | 1 |
-+--------+------------+------------------+-------------+-----------+-------------------+----------------------------------+-------------------+------------+--------------+
-| 4 | ready | Untitled (c7:d8) | 1 | 10.20.0.3 | 52:54:00:00:c7:d8 | cinder, controller, opendaylight | | True | 1 |
-+--------+------------+------------------+-------------+-----------+-------------------+----------------------------------+-------------------+------------+--------------+
-
-As You can see in this case the poc.tacker-up.sh script should be
-transferred and run on node having IP address 10.20.0.3
diff --git a/prototypes/sfc_tacker/poc.tacker-up.sh b/prototypes/sfc_tacker/poc.tacker-up.sh
deleted file mode 100755
index caad3f86a..000000000
--- a/prototypes/sfc_tacker/poc.tacker-up.sh
+++ /dev/null
@@ -1,385 +0,0 @@
-#!/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
-# present) and there is a fuel master on 10.20.0.2 and can be reached with default
-# credentials.
-#
-# author: Ferenc Cserepkei <ferenc.cserepkei@ericsson.com>
-#
-# (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
-#
-
-
-SSH_OPTIONS=(-o StrictHostKeyChecking=no -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o LogLevel=error)
-
-MYDIR=$(dirname $(readlink -f "$0"))
-MYREPO="tacker-server"
-CLIREPO="tacker-client"
-DEPREPO="jsonrpclib"
-
-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
- fi
-}
-
-# Function checks whether a python egg is available, if not, installs
-function chkPPkg () {
- PKG="$1"
- IPPACK=$(python - <<'____EOF'
-import pip
-from os.path import join
-for package in pip.get_installed_distributions():
- print(package.location)
- print(join(package.location, *package._get_metadata("top_level.txt")))
-____EOF
-)
- echo "$IPPACK" | grep -q "$PKG"
- if [ $? -ne 0 ];then
- pip install "$PKG"
- fi
-}
-
-# Function setting up the build/deploy environment
-function envSetup () {
- apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BCE5CC461FA22B08
- apt-get update
- apt-get install -y git python-pip python-all debhelper
- chkPPkg stdeb
- chkCrudini
-}
-
-# Function installs jsonrpclib from github
-function deployJsonrpclib () {
- if [[ -e "${MYDIR}/${JSONRPC}" ]]; then
- echo "$JSONRPC exists."
- return 1
- fi
- cd $MYDIR
- rm -rf $DEPREPO
- git clone https://github.com/joshmarshall/jsonrpclib.git $DEPREPO
- cd $DEPREPO
- 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
-}
-
-# Function builds Tacker server from github
-function buildTackerServer () {
- if [[ -e "${MYDIR}/${SERVER}" ]]; then
- echo "$SERVER exists."
- return 1
- fi
- cd $MYDIR
- rm -rf $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
---- a/setup.cfg 2016-02-08 10:54:37.416525934 +0100
-+++ b/setup.cfg 2016-02-08 10:55:29.293428896 +0100
-@@ -22,14 +22,14 @@
- packages =
- tacker
- data_files =
-- etc/tacker =
-+ /etc/tacker =
- etc/tacker/api-paste.ini
- etc/tacker/policy.json
- etc/tacker/tacker.conf
- etc/tacker/rootwrap.conf
-- etc/rootwrap.d =
-+ /etc/rootwrap.d =
- etc/tacker/rootwrap.d/servicevm.filters
-- etc/init.d = etc/init.d/tacker-server
-+ /etc/init.d = etc/init.d/tacker-server
-
- [global]
- setup-hooks =
-EOFSCP
- dpkg --purge python-tacker
- python setup.py --command-packages=stdeb.command bdist_deb
-}
-
-# 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")
- if [[ -e "${MYDIR}/${OUTPUT}" ]]; then
- echo "$OUTPUT exists."
- rm -r "$TMPDIR"
- return 1
- fi
- dpkg-deb -x "$DEBFILE" "$TMPDIR"
- dpkg-deb --control "$DEBFILE" "${TMPDIR}/DEBIAN"
- cd "$TMPDIR"
- patch -p 1 <<EOFDC
-diff -ruN DEBIAN/control DEBIAN/control
---- a/DEBIAN/control 2016-08-19 11:53:10.000000000 +0000
-+++ b/DEBIAN/control 2016-08-19 12:01:49.629096317 +0000
-@@ -4,7 +4,7 @@
- Architecture: all
- Maintainer: OpenStack <openstack-dev@lists.openstack.org>
- Installed-Size: 1566
--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
- Priority: optional
- Description: OpenStack servicevm/device manager
-EOFDC
- cd "$MYDIR"
- echo "Patching deb..."
- dpkg -b "$TMPDIR" "${MYDIR}/${SERVER}"
- rm -r "$TMPDIR"
- dpkg -i "${MYDIR}/${SERVER}"
-}
-
-# Function deploys Tacker-server (installs missing mandatory files: upstart, default)
-function deployTackerServer () {
- rm -rf /etc/default/tacker-server
- cat > /etc/default/tacker-server <<EOFTD
-ENABLED=true
-PIDFILE=/var/run/tacker/tacker-server.pid
-LOGFILE=/var/log/tacker/tacker-server.log
-PATH="\${PATH:+\$PATH:}/usr/sbin:/sbin"
-TMPDIR=/var/lib/tacker/tmp
-EOFTD
- rm -rf /etc/init/tacker.conf
- cat > /etc/init/tacker.conf <<EOFSC
-# tacker-server - Provides the Tacker servicevm/device manager service
-description "Openstack Tacker Server"
-author "Ferenc Cserepkei <ferenc.cserepkei@ericsson.com>"
-
-start on runlevel [2345]
-stop on runlevel [!2345]
-
-respawn
-respawn limit 20 5
-limit nofile 65535 65535
-
-chdir /var/run
-
-pre-start script
- # stop job from continuing if no config file found for daemon
- [ ! -f /etc/default/tacker-server ] && { stop; exit 0; }
- [ ! -f /etc/tacker/tacker.conf ] && { stop; exit 0; }
-
- # source the config file
- . /etc/default/tacker-server
-
- # stop job from continuing if admin has not enabled service in
- # config file.
- [ -z "\$ENABLED" ] && { stop; exit 0; }
-
- mkdir -p /var/run/tacker
- mkdir -p /var/log/tacker
- echo "Starting tacker server"
-end script
-
-pre-stop script
- echo "Stopping tacker server"
-end script
-
-exec /usr/bin/python /usr/bin/tacker-server --log-file=/var/log/tacker/tacker-server.log -v -d --config-file=/etc/tacker/tacker.conf
-EOFSC
-}
-
-# Function installs python-tackerclient from github
-function deployTackerClient() {
- if [[ -e "${MYDIR}/${CLIENT}" ]]; then
- echo "$CLIENT exists."
- return 1
- fi
- cd $MYDIR
- rm -rf $CLIREPO
- dpkg --purge python-tackerclient
- git clone -b 'SFC_refactor' https://github.com/trozet/python-tackerclient.git $CLIREPO
- cd $CLIREPO
- python setup.py --command-packages=stdeb.command bdist_deb
- cd "deb_dist"
- CLIENT=$(echo python-python-tackerclient_*_all.deb)
- cp $CLIENT $MYDIR
- dpkg -i "${MYDIR}/${CLIENT}"
-}
-
-# Function removes the cloned git repositories
-function remove_repo () {
- if [[ -d "${MYDIR}/${1}" ]]; then
- rm -r "$1"
- fi
-}
-
-# Funcion copies and installs built artifact on all remaining cluster nodes
-function populate_client() {
- wget -O deb http://archive.ubuntu.com/ubuntu/pool/universe/s/sshpass/sshpass_1.05-1_amd64.deb &&\
- dpkg -i deb &&\
- rm deb
-
- clusternodes=$(sshpass -p "r00tme" ssh ${SSH_OPTIONS[@]} root@10.20.0.2 fuel node | cut -d '|' -f 5 | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" )
- 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[@]} -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
-}
-
-# Function orchestrate the Tacker service
-function orchestrate () {
- rm -rf /etc/puppet/modules/tacker
- pushd /etc/puppet/modules
- git clone https://github.com/trozet/puppet-tacker.git tacker
- rm -rf /etc/puppet/modules/tacker/.git
- 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')
- int_addr=$(ifconfig br-mesh | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p')
- odl_addr=$(hiera management_vip)
- 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)
- 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')
- 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'
- myPassword='tacker'
-
- cat > configure_tacker.pp << EOF
- class mysql::config {}
- include mysql::config
- class mysql::server {}
- include mysql::server
-
- class { 'tacker':
- package_ensure => 'absent',
- client_package_ensure => 'absent',
- bind_port => '${bind_port}',
- keystone_password => '${myPassword}',
- keystone_tenant => '${service_tenant}',
- auth_uri => '${auth_uri}',
- identity_uri => '${identity_uri}',
- database_connection => '${database_connection}',
- rabbit_host => '${rabbit_host}',
- rabbit_password => '${rabbit_password}',
- heat_uri => '${heat_uri}',
- opendaylight_host => '${odl_addr}',
- opendaylight_port => '${odl_port}',
- }
-
- class { 'tacker::db::mysql':
- password => '${myPassword}',
- allowed_hosts => ${allowed_hosts},
- }
-
- class { 'tacker::keystone::auth':
- password => '${myPassword}',
- tenant => '${service_tenant}',
- admin_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
-#!/bin/sh
-export LC_ALL=C
-export OS_NO_CACHE='true'
-export OS_TENANT_NAME='${service_tenant}'
-export OS_PROJECT_NAME='${service_tenant}'
-export OS_USERNAME='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='${myRegion}'
-export TACKER_ENDPOINT_TYPE='internalURL'
-EOFRC
- chmod +x tackerc
-}
-
-# Funcion copies and installs built environment settings on all remaining cluster nodes
-function populate_rc() {
- wget -O deb http://archive.ubuntu.com/ubuntu/pool/universe/s/sshpass/sshpass_1.05-1_amd64.deb &&\
- dpkg -i deb &&\
- rm deb
-
- clusternodes=$(sshpass -p "r00tme" ssh ${SSH_OPTIONS[@]} root@10.20.0.2 fuel node | cut -d '|' -f 5 | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" )
- myaddr=$(ifconfig br-fw-admin | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p')
- for anode in $clusternodes ; do
- if [ "$anode" != "$myaddr" ] ; then
- echo "Populating settings to $anode"
- scp ${SSH_OPTIONS[@]} -i "${MYDIR}/.ssh/id_rsa" tackerc ${fadm}@${anode}:tackerc
- fi
- done
-}
-
-
-envSetup
-deployTackerClient
-deployJsonrpclib
-buildTackerServer
-blessPackage
-deployTackerServer
-populate_client
-orchestrate
-populate_rc
-
-git clone https://github.com/trozet/sfc-random.git
-
-remove_repo "$MYREPO"
-remove_repo "$DEPREPO"
-remove_repo "$CLIREPO"
-
-echo "Built: ${MYDIR}/${OUTPUT}"
-echo "Built: ${MYDIR}/${CLIENT}"
-echo "Built: ${MYDIR}/${JSONRPC}"
-echo "tackerc - mandatory environmental parameters file created"