summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbuild/overcloud-full.sh3
-rw-r--r--build/patches/tacker-client-fix-symmetrical.patch31
-rw-r--r--build/patches/tacker-vnffg-input-params.patch141
-rwxr-xr-xbuild/undercloud.sh2
-rw-r--r--lib/ansible/playbooks/post_deploy_overcloud.yml4
5 files changed, 180 insertions, 1 deletions
diff --git a/build/overcloud-full.sh b/build/overcloud-full.sh
index 06e461f7..dbb4de70 100755
--- a/build/overcloud-full.sh
+++ b/build/overcloud-full.sh
@@ -47,6 +47,7 @@ qemu-img resize overcloud-full_build.qcow2 +1200M
# expand file system to max disk size
# installing forked apex-puppet-tripleo
# upload neutron port data plane status
+# REMOVE Tacker VNFFG patch when moving to Pike
LIBGUESTFS_BACKEND=direct virt-customize \
--run-command "xfs_growfs /dev/sda" \
--upload ${BUILD_DIR}/apex-puppet-tripleo.tar.gz:/etc/puppet/modules \
@@ -73,6 +74,8 @@ LIBGUESTFS_BACKEND=direct virt-customize \
--run-command "cd /usr/share/openstack-puppet/modules/neutron && patch -p1 < puppet-neutron-ml2-ip-version-fix.patch" \
--upload ${BUILD_ROOT}/patches/puppet-neutron-vpp-ml2-type_drivers-setting.patch:/usr/share/openstack-puppet/modules/neutron/ \
--run-command "cd /usr/share/openstack-puppet/modules/neutron && patch -p1 < puppet-neutron-vpp-ml2-type_drivers-setting.patch" \
+ --upload ${BUILD_ROOT}/patches/tacker-vnffg-input-params.patch:/usr/lib/python2.7/site-packages/ \
+ --run-command "cd usr/lib/python2.7/site-packages/ && patch -p1 < tacker-vnffg-input-params.patch" \
-a overcloud-full_build.qcow2
# apply neutron port data plane status patches
diff --git a/build/patches/tacker-client-fix-symmetrical.patch b/build/patches/tacker-client-fix-symmetrical.patch
new file mode 100644
index 00000000..eab01a62
--- /dev/null
+++ b/build/patches/tacker-client-fix-symmetrical.patch
@@ -0,0 +1,31 @@
+From 9630f711a88a69480c44d6ac21244d9a8b0d92c7 Mon Sep 17 00:00:00 2001
+From: Tim Rozet <trozet@redhat.com>
+Date: Fri, 18 Aug 2017 16:22:23 -0400
+Subject: [PATCH] Fixes passing boolean as string for symmetrical
+
+Bug where 'True'/'False' strings were being passed in REST to Tacker
+service which would end up throwing an exception because the DB type for
+symmetrical is boolean/small int. This converts it to boolean in the
+client.
+
+Closes-Bug: 1711550
+
+Change-Id: Ide2aeab73b1dd88beb6e491e6b07cdee9fb7e48a
+Signed-off-by: Tim Rozet <trozet@redhat.com>
+---
+
+diff --git a/tackerclient/tacker/v1_0/nfvo/vnffg.py b/tackerclient/tacker/v1_0/nfvo/vnffg.py
+index 729cd19..92b98ed 100644
+--- a/tackerclient/tacker/v1_0/nfvo/vnffg.py
++++ b/tackerclient/tacker/v1_0/nfvo/vnffg.py
+@@ -97,7 +97,9 @@
+ help=_('List of logical VNFD name to VNF instance name mapping. '
+ 'Example: VNF1:my_vnf1,VNF2:my_vnf2'))
+ parser.add_argument(
+- '--symmetrical', metavar='{True,False}',
++ '--symmetrical',
++ action='store_true',
++ default=False,
+ help=_('Should a reverse path be created for the NFP'))
+ parser.add_argument(
+ '--param-file',
diff --git a/build/patches/tacker-vnffg-input-params.patch b/build/patches/tacker-vnffg-input-params.patch
new file mode 100644
index 00000000..0da36e6b
--- /dev/null
+++ b/build/patches/tacker-vnffg-input-params.patch
@@ -0,0 +1,141 @@
+From a0f1e680d81c7db66ae7a2a08c3d069901d0765a Mon Sep 17 00:00:00 2001
+From: Jimmy.Ye <yexuerong@cmss.chinamobile.com>
+Date: Thu, 30 Mar 2017 18:45:32 +0800
+Subject: [PATCH] fix create vnffg instance not support param input
+
+ (1) update and add unit test yaml files
+ (2) update and add unit test fuctions
+
+We are cherry picking this to ocata because we need it for OPNFV. There was a
+conflict in exceptions.py and db/utils.py. I left the new version because I
+think it should work. I will test it and check
+
+Change-Id: I9c43eed0c16ac5a43130724f2eeebefce82c1277
+Closes-Bug: #1675672
+---
+
+diff --git a/tacker/common/exceptions.py b/tacker/common/exceptions.py
+index 76afae6..321940b 100644
+--- a/tacker/common/exceptions.py
++++ b/tacker/common/exceptions.py
+@@ -271,5 +271,5 @@
+ message = _("%(resource)s with name %(name)s already exists")
+
+
+-class InvalidParam(TackerException):
+- message = _("Param values must be a dict type")
++class DuplicateEntity(TackerException):
++ message = _("%(_type)s already exist with given %(entry)s")
+diff --git a/tacker/db/nfvo/vnffg_db.py b/tacker/db/nfvo/vnffg_db.py
+index 290d6d5..fd16f0f 100644
+--- a/tacker/db/nfvo/vnffg_db.py
++++ b/tacker/db/nfvo/vnffg_db.py
+@@ -18,6 +18,7 @@
+ import uuid
+
+ from oslo_log import log as logging
++from six import iteritems
+ from sqlalchemy import orm
+ from sqlalchemy.orm import exc as orm_exc
+ from tacker._i18n import _
+@@ -284,6 +285,40 @@
+ self._make_chain_dict,
+ filters=filters, fields=fields)
+
++ def _update_template_params(self, original, paramvalues, param_matched):
++ if 'get_input' not in str(original):
++ return
++ if isinstance(original, dict):
++ for key_, value in iteritems(original):
++ if isinstance(value, dict) and 'get_input' in value:
++ if value['get_input'] in paramvalues:
++ original[key_] = paramvalues[value['get_input']]
++ param_matched.setdefault(value['get_input'], 0)
++ param_matched[value['get_input']] += 1
++ else:
++ raise nfvo.VnffgTemplateParamParsingException(
++ get_input=value['get_input'])
++ else:
++ self._update_template_params(value,
++ paramvalues, param_matched)
++ elif isinstance(original, list):
++ for element in original:
++ self._update_template_params(element,
++ paramvalues, param_matched)
++
++ def _process_parameterized_template(self, dev_attrs, vnffgd_template):
++ param_vattrs_dict = dev_attrs.pop('param_values', None)
++ param_matched = {}
++ if isinstance(param_vattrs_dict, dict):
++ self._update_template_params(vnffgd_template,
++ param_vattrs_dict, param_matched)
++ else:
++ raise nfvo.VnffgParamValueFormatError(
++ param_value=param_vattrs_dict)
++ for param_key in param_vattrs_dict.keys():
++ if param_matched.get(param_key) is None:
++ raise nfvo.VnffgParamValueNotUsed(param_key=param_key)
++
+ # called internally, not by REST API
+ def _create_vnffg_pre(self, context, vnffg):
+ vnffg = vnffg['vnffg']
+@@ -298,6 +333,17 @@
+ template_db = self._get_resource(context, VnffgTemplate,
+ template_id)
+ LOG.debug(_('vnffg template %s'), template_db)
++
++ if vnffg.get('attributes') and \
++ vnffg['attributes'].get('param_values'):
++ vnffg_param = vnffg['attributes']
++ vnffgd_topology_template = \
++ template_db.template['vnffgd']['topology_template']
++ self._process_parameterized_template(vnffg_param,
++ vnffgd_topology_template)
++ template_db.template['vnffgd']['topology_template'] = \
++ vnffgd_topology_template
++
+ vnf_members = self._get_vnffg_property(template_db,
+ 'constituent_vnfs')
+ LOG.debug(_('Constituent VNFs: %s'), vnf_members)
+diff --git a/tacker/extensions/nfvo.py b/tacker/extensions/nfvo.py
+index 449db95..cf15dff 100644
+--- a/tacker/extensions/nfvo.py
++++ b/tacker/extensions/nfvo.py
+@@ -130,8 +130,17 @@
+ "creating/updating VNFFG.")
+
+
+-class VnffgVimMappingException(exceptions.TackerException):
+- message = _("VNF Instance VNF %(vnf_id)s does not match VIM ID %(vim_id).")
++class VnffgParamValueFormatError(exceptions.TackerException):
++ message = _("Param values %(param_value)s is not in dict format.")
++
++
++class VnffgTemplateParamParsingException(exceptions.TackerException):
++ message = _("Failed to parse VNFFG Template due to "
++ "missing input param %(get_input)s.")
++
++
++class VnffgParamValueNotUsed(exceptions.TackerException):
++ message = _("Param input %(param_key)s not used.")
+
+
+ class VnffgPropertyNotFoundException(exceptions.NotFound):
+diff --git a/tacker/nfvo/nfvo_plugin.py b/tacker/nfvo/nfvo_plugin.py
+index 690ce90..6892842 100644
+--- a/tacker/nfvo/nfvo_plugin.py
++++ b/tacker/nfvo/nfvo_plugin.py
+@@ -229,13 +229,6 @@
+
+ @log.log
+ def create_vnffg(self, context, vnffg):
+- vnffg_attributes = vnffg['vnffg']['attributes']
+- if vnffg_attributes.get('param_values'):
+- param = vnffg_attributes['param_values']
+- if isinstance(param, dict):
+- vnffg_attributes['param_values'] = yaml.safe_dump(param)
+- else:
+- raise exceptions.InvalidParam()
+ vnffg_dict = super(NfvoPlugin, self)._create_vnffg_pre(context, vnffg)
+ nfp = super(NfvoPlugin, self).get_nfp(context,
+ vnffg_dict['forwarding_paths'])
diff --git a/build/undercloud.sh b/build/undercloud.sh
index 5930c503..feba4235 100755
--- a/build/undercloud.sh
+++ b/build/undercloud.sh
@@ -54,6 +54,8 @@ LIBGUESTFS_BACKEND=direct virt-customize \
--uninstall "libvirt-client" \
--install "libguestfs-tools" \
--install "python-tackerclient" \
+ --upload ${BUILD_ROOT}/patches/tacker-client-fix-symmetrical.patch:/usr/lib/python2.7/site-packages/ \
+ --run-command "cd usr/lib/python2.7/site-packages/ && patch -p1 < tacker-client-fix-symmetrical.patch" \
-a undercloud_build.qcow2
mv -f undercloud_build.qcow2 undercloud.qcow2
diff --git a/lib/ansible/playbooks/post_deploy_overcloud.yml b/lib/ansible/playbooks/post_deploy_overcloud.yml
index 5af138d2..5640e906 100644
--- a/lib/ansible/playbooks/post_deploy_overcloud.yml
+++ b/lib/ansible/playbooks/post_deploy_overcloud.yml
@@ -47,5 +47,7 @@
file:
path: /etc/tacker/vim/fernet_keys
state: directory
- mode: 0755
+ mode: 0775
+ owner: root
+ group: tacker
become: yes