diff options
-rw-r--r-- | deploy/cloud/deploy.py | 12 | ||||
-rw-r--r-- | deploy/cloud/deployment.py | 6 | ||||
-rwxr-xr-x | deploy/deploy.py | 11 | ||||
-rw-r--r-- | deploy/deploy_env.py | 11 | ||||
-rw-r--r-- | docs/build-instruction.rst | 9 | ||||
-rw-r--r-- | docs/conf.py | 28 | ||||
-rw-r--r-- | docs/configguide/installerconfig.rst | 4 | ||||
-rw-r--r-- | docs/index.rst | 22 | ||||
-rw-r--r-- | docs/installation-instruction.rst | 5 | ||||
-rw-r--r-- | docs/release-notes.rst | 4 | ||||
-rwxr-xr-x | prototypes/sfc_tacker/poc.tacker-up.sh | 53 |
11 files changed, 91 insertions, 74 deletions
diff --git a/deploy/cloud/deploy.py b/deploy/cloud/deploy.py index 679b0ad6f..3d3017e42 100644 --- a/deploy/cloud/deploy.py +++ b/deploy/cloud/deploy.py @@ -29,9 +29,10 @@ YAML_CONF_DIR = '/var/lib/opnfv' class Deploy(object): - def __init__(self, dea_file, no_health_check): + def __init__(self, dea_file, no_health_check, deploy_timeout): self.dea = DeploymentEnvironmentAdapter(dea_file) self.no_health_check = no_health_check + self.deploy_timeout = deploy_timeout self.macs_per_blade = {} self.blades = self.dea.get_node_ids() self.blade_node_dict = self.dea.get_blade_node_map() @@ -59,7 +60,8 @@ class Deploy(object): def deploy_cloud(self): dep = Deployment(self.dea, YAML_CONF_DIR, self.env_id, - self.node_roles_dict, self.no_health_check) + self.node_roles_dict, self.no_health_check, + self.deploy_timeout) dep.deploy() def deploy(self): @@ -76,13 +78,17 @@ def parse_arguments(): parser.add_argument('-nh', dest='no_health_check', action='store_true', default=False, help='Don\'t run health check after deployment') + parser.add_argument('-dt', dest='deploy_timeout', action='store', + default=240, help='Deployment timeout (in minutes) ' + '[default: 240]') parser.add_argument('dea_file', action='store', help='Deployment Environment Adapter: dea.yaml') args = parser.parse_args() check_file_exists(args.dea_file) kwargs = {'dea_file': args.dea_file, - 'no_health_check': args.no_health_check} + 'no_health_check': args.no_health_check, + 'deploy_timeout': args.deploy_timeout} return kwargs diff --git a/deploy/cloud/deployment.py b/deploy/cloud/deployment.py index 42bab09bb..306abf006 100644 --- a/deploy/cloud/deployment.py +++ b/deploy/cloud/deployment.py @@ -31,12 +31,13 @@ LIST_OF_CHAR_TO_BE_ESCAPED = ['[', ']', '"'] class Deployment(object): def __init__(self, dea, yaml_config_dir, env_id, node_id_roles_dict, - no_health_check): + no_health_check, deploy_timeout): self.dea = dea self.yaml_config_dir = yaml_config_dir self.env_id = env_id self.node_id_roles_dict = node_id_roles_dict self.no_health_check = no_health_check + self.deploy_timeout = deploy_timeout self.pattern = re.compile( '\d\d\d\d-\d\d-\d\d\s\d\d:\d\d:\d\d') @@ -96,7 +97,6 @@ class Deployment(object): print(log_msg + '\n') def run_deploy(self): - WAIT_LOOP = 240 SLEEP_TIME = 60 LOG_FILE = 'cloud.log' @@ -105,7 +105,7 @@ class Deployment(object): % (self.env_id, LOG_FILE)) ready = False - for i in range(WAIT_LOOP): + for i in range(int(self.deploy_timeout)): env = parse(exec_cmd('fuel env --env %s' % self.env_id)) log('Environment status: %s' % env[0][E['status']]) r, _ = exec_cmd('tail -2 %s | head -1' % LOG_FILE, False) diff --git a/deploy/deploy.py b/deploy/deploy.py index bf0b39d42..bc1dfdb49 100755 --- a/deploy/deploy.py +++ b/deploy/deploy.py @@ -61,7 +61,7 @@ class AutoDeploy(object): def __init__(self, no_fuel, fuel_only, no_health_check, cleanup_only, cleanup, storage_dir, pxe_bridge, iso_file, dea_file, dha_file, fuel_plugins_dir, fuel_plugins_conf_dir, - no_plugins): + no_plugins, deploy_timeout): self.no_fuel = no_fuel self.fuel_only = fuel_only self.no_health_check = no_health_check @@ -75,6 +75,7 @@ class AutoDeploy(object): self.fuel_plugins_dir = fuel_plugins_dir self.fuel_plugins_conf_dir = fuel_plugins_conf_dir self.no_plugins = no_plugins + self.deploy_timeout = deploy_timeout self.dea = (DeploymentEnvironmentAdapter(dea_file) if not cleanup_only else None) self.dha = DeploymentHardwareAdapter(dha_file) @@ -197,7 +198,7 @@ class AutoDeploy(object): dep = CloudDeploy(self.dea, self.dha, self.fuel_conf['ip'], self.fuel_username, self.fuel_password, self.dea_file, self.fuel_plugins_conf_dir, - WORK_DIR, self.no_health_check) + WORK_DIR, self.no_health_check, self.deploy_timeout) return dep.deploy() def setup_execution_environment(self): @@ -313,6 +314,9 @@ def parse_arguments(): help='Fuel Plugins Configuration directory') parser.add_argument('-np', dest='no_plugins', action='store_true', default=False, help='Do not install Fuel Plugins') + parser.add_argument('-dt', dest='deploy_timeout', action='store', + default=240, help='Deployment timeout (in minutes) ' + '[default: 240]') args = parser.parse_args() log(args) @@ -338,7 +342,8 @@ def parse_arguments(): 'dha_file': args.dha_file, 'fuel_plugins_dir': args.fuel_plugins_dir, 'fuel_plugins_conf_dir': args.fuel_plugins_conf_dir, - 'no_plugins': args.no_plugins} + 'no_plugins': args.no_plugins, + 'deploy_timeout': args.deploy_timeout} return kwargs diff --git a/deploy/deploy_env.py b/deploy/deploy_env.py index 735ea66a3..3d1cdf430 100644 --- a/deploy/deploy_env.py +++ b/deploy/deploy_env.py @@ -34,7 +34,8 @@ BLADE_RESTART_TIMES = 3 class CloudDeploy(object): def __init__(self, dea, dha, fuel_ip, fuel_username, fuel_password, - dea_file, fuel_plugins_conf_dir, work_dir, no_health_check): + dea_file, fuel_plugins_conf_dir, work_dir, no_health_check, + deploy_timeout): self.dea = dea self.dha = dha self.fuel_ip = fuel_ip @@ -48,6 +49,7 @@ class CloudDeploy(object): self.fuel_plugins_conf_dir = fuel_plugins_conf_dir self.work_dir = work_dir self.no_health_check = no_health_check + self.deploy_timeout = deploy_timeout self.file_dir = os.path.dirname(os.path.realpath(__file__)) self.ssh = SSHClient(self.fuel_ip, self.fuel_username, self.fuel_password) @@ -103,8 +105,11 @@ class CloudDeploy(object): deploy_app = '%s/%s' % (self.work_dir, deploy_app) dea_file = '%s/%s' % (self.work_dir, os.path.basename(self.dea_file)) with self.ssh as s: - status = s.run('python %s %s %s' % ( - deploy_app, ('-nh' if self.no_health_check else ''), dea_file)) + status = s.run('python %s %s %s %s' % ( + deploy_app, + ('-nh' if self.no_health_check else ''), + ('-dt %s' % self.deploy_timeout if self.deploy_timeout else ''), + dea_file)) return status def check_supported_release(self): diff --git a/docs/build-instruction.rst b/docs/build-instruction.rst index d5721af0b..254c0d3f2 100644 --- a/docs/build-instruction.rst +++ b/docs/build-instruction.rst @@ -1,9 +1,6 @@ -================================================================================================ +================================================================================================= OPNFV Build instruction for the Brahmaputra release of OPNFV when using Fuel as a deployment tool -================================================================================================ - -.. contents:: Table of Contents - :backlinks: none +================================================================================================= License ======= @@ -87,7 +84,7 @@ Then restart docker: .. code-block:: console -$ sudo service docker restart + $ sudo service docker restart Setting up OPNFV Gerrit in order to being able to clone the code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 000000000..6cd69313d --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,28 @@ +# SPDX-license-identifier: Apache-2.0 +############################################################################## +# Copyright (c) 2016 Linux Foundation and others. +# 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 +############################################################################## + +# Copied from releng/docs/etc/conf.py +extensions = ['sphinxcontrib.httpdomain', + 'sphinx.ext.autodoc', + 'sphinx.ext.viewcode', + 'sphinx.ext.napoleon'] + +needs_sphinx = '1.3' +master_doc = 'index' +pygments_style = 'sphinx' + +html_use_index = False +numfig = True +html_logo = 'opnfv-logo.png' + +latex_domain_indices = False +latex_logo = 'opnfv-logo.png' + +# addtional config +latex_elements = {'figure_align': 'H'} diff --git a/docs/configguide/installerconfig.rst b/docs/configguide/installerconfig.rst index 0b26743e5..60ffadf1f 100644 --- a/docs/configguide/installerconfig.rst +++ b/docs/configguide/installerconfig.rst @@ -69,7 +69,7 @@ Following high level hardware requirements must be met: +--------------------+------------------------------------------------------+ | **HW Aspect** | **Requirement** | | | | -+--------------------+------------------------------------------------------+ ++====================+======================================================+ | **# of nodes** | Minimum 5 (3 for non redundant deployment): | | | | | | - 1 Fuel deployment master (may be virtualized) | @@ -155,7 +155,7 @@ developed by OPNFV: +--------------------+------------------------------------------------------+ | **Plugin name** | **Short description** | | | | -+--------------------+------------------------------------------------------+ ++====================+======================================================+ | OpenDaylight | OpenDaylight provides an open-source SDN Controller | | | providing networking features such as L2 and L3 | | | network control, "Service Function Chaining", | diff --git a/docs/index.rst b/docs/index.rst index fd61a5201..6bba3aaf1 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -4,32 +4,16 @@ .. You should have received a copy of the license along with this work. .. If not, see <http://creativecommons.org/licenses/by/4.0/>. -.. OPNFV Release Engineering documentation, created by - sphinx-quickstart on Tue Jun 9 19:12:31 2015. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -.. image:: opnfv-logo.png - :height: 40 - :width: 200 - :alt: OPNFV - :align: left - +********** Fuel@OPNFV -======================================= - -Contents: +********** .. toctree:: :maxdepth: 4 - :titlesonly: build-instruction.rst installation-instruction.rst release-notes.rst -* :ref:`search` - -Revision: _sha1_ +.. :titlesonly: -Build date: |today| diff --git a/docs/installation-instruction.rst b/docs/installation-instruction.rst index aaf96becb..f7125816d 100644 --- a/docs/installation-instruction.rst +++ b/docs/installation-instruction.rst @@ -2,9 +2,6 @@ OPNFV Installation instruction for the Brahmaputra release of OPNFV when using Fuel as a deployment tool ======================================================================================================== -.. contents:: Table of Contents - :backlinks: none - License ======= @@ -111,7 +108,7 @@ installation of Brahmaputra using Fuel: +--------------------+------------------------------------------------------+ | **HW Aspect** | **Requirement** | | | | -+--------------------+------------------------------------------------------+ ++====================+======================================================+ | **# of nodes** | Minimum 5 (3 for non redundant deployment): | | | | | | - 1 Fuel deployment master (may be virtualized) | diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 8e590c0f3..e731af02c 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -2,9 +2,6 @@ OPNFV Release Note for the Brahmaputra release of OPNFV when using Fuel as a deployment tool ============================================================================================ -.. contents:: Table of Contents - :backlinks: none - License ======= @@ -121,6 +118,7 @@ comes with the following documentation: Reason for version ------------------ + Feature additions ~~~~~~~~~~~~~~~~~ diff --git a/prototypes/sfc_tacker/poc.tacker-up.sh b/prototypes/sfc_tacker/poc.tacker-up.sh index 0b6e0ce0f..f7c9e1165 100755 --- a/prototypes/sfc_tacker/poc.tacker-up.sh +++ b/prototypes/sfc_tacker/poc.tacker-up.sh @@ -1,6 +1,5 @@ #!/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 @@ -11,10 +10,9 @@ # # (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 # @@ -27,14 +25,14 @@ 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" +SERVER="python-tacker_2014.2.0~dev177-1_all.deb" # 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 } @@ -212,17 +210,6 @@ function deployTackerClient() { 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" cp $CLIENT $MYDIR @@ -246,7 +233,7 @@ function populate_client() { 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" + echo "Installing $CLIENT on $anode" scp ${SSH_OPTIONS[@]} $CLIENT $anode:$CLIENT ssh ${SSH_OPTIONS[@]} $anode dpkg -i $CLIENT ssh ${SSH_OPTIONS[@]} $anode rm $CLIENT @@ -263,21 +250,27 @@ function orchestarte () { 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" + 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" + 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 @@ -289,7 +282,7 @@ function orchestarte () { 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}', @@ -304,7 +297,11 @@ function orchestarte () { class { 'tacker::db::mysql': password => '${myPassword}', - host => '${sql_host}', + dbname => 'tacker', + user => 'tacker', + host => '127.0.0.1', + charset => 'utf8', + collate => 'utf8_general_ci', allowed_hosts => ${allowed_hosts}, } @@ -346,7 +343,7 @@ function populate_rc() { 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" + echo "Populating seetings to $anode" scp ${SSH_OPTIONS[@]} tackerc $anode:tackerc fi done |