diff options
34 files changed, 853 insertions, 831 deletions
diff --git a/requirements.txt b/requirements.txt index dce5e2e0..93511b97 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,3 +12,4 @@ python-tackerclient>=0.8.0 # Apache-2.0 PyYAML>=3.10.0 # MIT opnfv snaps +xtesting # Apache-2.0 diff --git a/scenarios/os-odl-sfc/role/os-odl-sfc/files/ansible-role-requirements-master.yml b/scenarios/os-odl-sfc/role/os-odl-sfc/files/ansible-role-requirements-master.yml deleted file mode 100644 index a82e01ed..00000000 --- a/scenarios/os-odl-sfc/role/os-odl-sfc/files/ansible-role-requirements-master.yml +++ /dev/null @@ -1,227 +0,0 @@ ---- -# SPDX-license-identifier: Apache-2.0 -############################################################################## -# Copyright (c) 2017 Ericsson AB 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 -############################################################################## -# these versions are based on the osa commit 7b3aac28a0a87e5966527829f6b0abcbc2303cc7 on 2017-12-11 -# https://review.openstack.org/gitweb?p=openstack/openstack-ansible.git;a=commit;h=7b3aac28a0a87e5966527829f6b0abcbc2303cc7 -- name: ansible-hardening - scm: git - src: https://git.openstack.org/openstack/ansible-hardening - version: 46a94c72518f83d27b25a5fa960dde7130956215 -- name: apt_package_pinning - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-apt_package_pinning - version: eba07d7dd7962d90301c49fc088551f9b35f367a -- name: pip_install - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-pip_install - version: 32c27505c6e0ee00ea0fb4a1c62240c60f17a0e3 -- name: galera_client - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-galera_client - version: 9a8302cbba24ea4e5907567e5f93e874d30d79df -- name: galera_server - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-galera_server - version: aa452989d7295111962f67a3f3a96d96bc408846 -- name: ceph_client - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-ceph_client - version: 34a04f7b24c80297866bc5ab56618e2211b1d5f9 -- name: haproxy_server - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-haproxy_server - version: 9966fd96fede46c3b00c9e069e402eae90c66f17 -- name: keepalived - scm: git - src: https://github.com/evrardjp/ansible-keepalived - version: 5deafcab39de162ac1550c58246963974e8dcf4e -- name: lxc_container_create - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-lxc_container_create - version: 68f81c679be88577633f98e8b9252a62bdcef754 -- name: lxc_hosts - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-lxc_hosts - version: 84ac3442e542aeedf1396c88e0387b4ea1548eb1 -- name: memcached_server - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-memcached_server - version: ae6f721dc0342e1e7b45ff2448ab51f7539dc01f -- name: openstack_hosts - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-openstack_hosts - version: 05c7f09d181de1809fd596cc0d879c49e3f86bbf -- name: os_keystone - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_keystone - version: cd9d4ef7d8614d241fa40ba33c1c205fd2b47fa1 -- name: openstack_openrc - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-openstack_openrc - version: d594c2debc249daa5b7f6f2890f546093efd1ee5 -- name: os_aodh - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_aodh - version: ce871dee75511f94bfd24dde8f97e573cf6d3ead -- name: os_barbican - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_barbican - version: c3e191037d0978479e3cb95a59b2986adab28c69 -- name: os_ceilometer - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_ceilometer - version: 55bb04eaad4dd5c7fdad742b3557dc30dc9d45bf -- name: os_cinder - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_cinder - version: 536dd3446e0fc7fc68ab42b982ac9affc4215787 -- name: os_designate - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_designate - version: a65d7a3394aef340ff94587dd0bb48133ed00763 -- name: os_glance - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_glance - version: 43aa00424f233a6125f7a9216cec42da1d8ca4c5 -- name: os_gnocchi - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_gnocchi - version: b1f7574dc529f8298a983d8d0e09520e90b571a8 -- name: os_heat - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_heat - version: 0b3eb9348d55d6b1cf077a2c45b297f9a1be730d -- name: os_horizon - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_horizon - version: da72526dc1757688ecec8914344e330aaa0be720 -- name: os_ironic - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_ironic - version: a90558f7a216e5e661c5d1a4048dbe30559542d1 -- name: os_magnum - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_magnum - version: 736d1707339cb99396578018a6bda7af9184fb02 -- name: os_molteniron - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_molteniron - version: 9b4c104a252c453bcd798fec9dbae7224b3d8001 -- name: os_neutron - scm: git - src: https://github.com/manuelbuil/openstack-ansible-os_neutron - version: testing-ovs-nsh2 -- name: os_nova - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_nova - version: 53df001c9034f198b9349def3c9158f8bbe43ff3 -- name: os_octavia - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_octavia - version: 02ad3c68802287a1ba54cf10de085dcd14c324d8 -- name: os_rally - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_rally - version: bc9075dba204e64d11cb397017d32b0c2297eed0 -- name: os_sahara - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_sahara - version: 3c45121050ba21bd284f054d7b82a338f347157f -- name: os_swift - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_swift - version: f31217bb097519f15755f2337165657d7eb6b014 -- name: os_tacker - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_tacker - version: d95902891c4e6200510509c066006c921cfff8df -- name: os_tempest - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_tempest - version: 866dedbcba180ca82c3c93823cef3db2d3241d1b -- name: os_trove - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-os_trove - version: b425fa316999d0863a44126f239a33d8c3fec3a6 -- name: plugins - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-plugins - version: d2f60237761646968a4b39b15185fb5c84e7386f -- name: rabbitmq_server - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-rabbitmq_server - version: 311f76890c8f99cb0b46958775d84de614609323 -- name: repo_build - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-repo_build - version: 59a3f444c263235d8f0f584da8768656179fa02a -- name: repo_server - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-repo_server - version: 7889f37cdd2a90b4b98e8ef2e886f1fd4950fc0a -- name: rsyslog_client - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-rsyslog_client - version: 310cfe9506d3742be10790533ad0d16100d81498 -- name: rsyslog_server - scm: git - src: https://git.openstack.org/openstack/openstack-ansible-rsyslog_server - version: ba7bb699c0c874c7977add86ca308ca18be8f9a8 -- name: sshd - scm: git - src: https://github.com/willshersystems/ansible-sshd - version: 537b9b2bc2fd7f23301222098344727f8161993c -- name: bird - scm: git - src: https://github.com/logan2211/ansible-bird - version: 5033c412398cf6f98097a9ac274a6f12810c807e -- name: etcd - scm: git - src: https://github.com/logan2211/ansible-etcd - version: 3933355dfe51477822db517d3c07ad561fb61318 -- name: unbound - scm: git - src: https://github.com/logan2211/ansible-unbound - version: 7be67d6b60718896f0c17a7d4a14b912f72a59ae -- name: resolvconf - scm: git - src: https://github.com/logan2211/ansible-resolvconf - version: d48dd3eea22094b6ecc6aa6ea07279c8e68e28b5 -- name: ceph-defaults - scm: git - src: https://github.com/ceph/ansible-ceph-defaults - version: 19884aaac1bc58921952af955c66602ccca89e93 -- name: ceph-common - scm: git - src: https://github.com/ceph/ansible-ceph-common - version: 08804bd46dff42ebff64e7f27c86f2265fe4d6fc -- name: ceph-config - scm: git - src: https://github.com/ceph/ansible-ceph-config - version: e070537f443c3ae5d262835c8b0a7a992850283b -- name: ceph-mon - scm: git - src: https://github.com/ceph/ansible-ceph-mon - version: 309b7e339e057d56d9dd38bdd61998b900f45ba8 -- name: ceph-mgr - scm: git - src: https://github.com/ceph/ansible-ceph-mgr - version: fe8f0864500b54cc7c9f897b871ba2cdf1d37096 -- name: ceph-osd - scm: git - src: https://github.com/ceph/ansible-ceph-osd - version: e022d6773bc827e75ad051b429dec786a75d68f4 -- name: opendaylight - scm: git - src: https://github.com/opendaylight/integration-packaging-ansible-opendaylight - version: ef1367ad15ad10ac8cc9416f6fd49fd8b350d377 -- name: haproxy_endpoints - scm: git - src: https://github.com/logan2211/ansible-haproxy-endpoints - version: 49901861b16b8afaa9bccdbc649ac956610ff22b diff --git a/scenarios/os-odl-sfc/role/os-odl-sfc/files/ansible-role-requirements-pike.yml b/scenarios/os-odl-sfc/role/os-odl-sfc/files/ansible-role-requirements-pike.yml index 4b0b9b8b..a954dccc 100644 --- a/scenarios/os-odl-sfc/role/os-odl-sfc/files/ansible-role-requirements-pike.yml +++ b/scenarios/os-odl-sfc/role/os-odl-sfc/files/ansible-role-requirements-pike.yml @@ -1,31 +1,31 @@ - name: ansible-hardening scm: git src: https://git.openstack.org/openstack/ansible-hardening - version: c05e36f48de66feb47046a0126d986fa03313f29 + version: cee2e0b5b432c50614b908d9bf50ed2cc32d8daa - name: apt_package_pinning scm: git src: https://git.openstack.org/openstack/openstack-ansible-apt_package_pinning - version: 9403a36513aee54c15890ac96c1f8c455f9c083d + version: 956e06cf66bd878b132c58bdd97304749c0da189 - name: pip_install scm: git src: https://git.openstack.org/openstack/openstack-ansible-pip_install - version: df107891bf9fdfa7287bdfe43f3fa0120a80e5ad + version: e52f829e7386e43ca8a85ab820901740590dc6ea - name: galera_client scm: git src: https://git.openstack.org/openstack/openstack-ansible-galera_client - version: 52b374547648056b58c544532296599801d501d7 + version: 79b4bd9980b75355ec729bba37a440f4c88df106 - name: galera_server scm: git src: https://git.openstack.org/openstack/openstack-ansible-galera_server - version: b124e06872ebeca7d81cb22fb80ae97a995b07a8 + version: 67628375be0e3996b0f5cbddf8e1b15d6ca85333 - name: ceph_client scm: git src: https://git.openstack.org/openstack/openstack-ansible-ceph_client - version: 5fcbc68fdbd3105d233fd3c03c887f13227b1c3d + version: de60aa5d96cd6803674e8b398828205909aa54a6 - name: haproxy_server scm: git src: https://git.openstack.org/openstack/openstack-ansible-haproxy_server - version: a905aaed8627f59d9dc10b9bc031589a7c65828f + version: aacaaed2e36945baa7fb9e8bd6ceb8393dad3730 - name: keepalived scm: git src: https://github.com/evrardjp/ansible-keepalived @@ -33,35 +33,35 @@ - name: lxc_container_create scm: git src: https://git.openstack.org/openstack/openstack-ansible-lxc_container_create - version: c41d3b20da6be07d9bf5db7f7e6a1384c7cfb5eb + version: 8a3b201bbaa82a38bd162315efccec1ec244e481 - name: lxc_hosts scm: git src: https://git.openstack.org/openstack/openstack-ansible-lxc_hosts - version: d974c4db1696027899b28b2cb58800cae9a605e5 + version: a6f5052063e7ac4157da36c4d105fdb855abd366 - name: memcached_server scm: git src: https://git.openstack.org/openstack/openstack-ansible-memcached_server - version: 08c483f3c5d49c236194090534a015b67c8cded6 + version: 2c8cd40e18902b9aa6fab87e9fd299d437ed0a78 - name: openstack_hosts scm: git src: https://git.openstack.org/openstack/openstack-ansible-openstack_hosts - version: a0d3b9c9756b6e95b0e034f3d0576fbb33607820 + version: deb8d59ff40d9f828172933df6028202e6c9fb04 - name: os_keystone scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_keystone - version: ffc9c9b5e681748ff3e54e43f22c921e83342a51 + version: 782ec3eae6d43e00699b831859401b347273f7fd - name: openstack_openrc scm: git src: https://git.openstack.org/openstack/openstack-ansible-openstack_openrc - version: b27229ef168aed7f2febf6991b2d7459ec8883ee + version: 452a227ea5cf50611832cd289e163d577791407a - name: os_aodh scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_aodh - version: bcd77b1e10a7054e9365da6a20848b393153d025 + version: 0321e0bae7050b97fa8e3d66033fe177c31e2d63 - name: os_barbican scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_barbican - version: 0797e8bdadd2fcf4696b22f0e18340c8d9539b09 + version: 06ef75aa9aa9bd126bd17ab86a7c38f44d901203 - name: os_ceilometer scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_ceilometer @@ -69,15 +69,15 @@ - name: os_cinder scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_cinder - version: 6f5ab34e5a0694f3fc84e63c912e00e86e3de280 + version: 9173876f6bfc5e2955d74628b32f5cff2e9e39c3 - name: os_designate scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_designate - version: eac6d3c674397097d8adf722635252b1822c8f6c + version: dd13917240c7dc9fff9df7e042ba32fb002838ce - name: os_glance scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_glance - version: 47080919c937aace65fc7dc8e9670dbcfd910b88 + version: 91e544aadae016c0e190d52a89ce0a1659a84641 - name: os_gnocchi scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_gnocchi @@ -89,11 +89,11 @@ - name: os_horizon scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_horizon - version: 71aa69b1425f5b5b2bdc274357b62a9b4b57ae8f + version: af4abbad26b4ab9ce3c50266bc212199e3e6aea8 - name: os_ironic scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_ironic - version: 34205b6b99fc3cfe54eddbcde0380e626976e425 + version: 91abf2ec56b9b4337e5e98d9ba6f2c04155331a1 - name: os_magnum scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_magnum @@ -101,15 +101,15 @@ - name: os_molteniron scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_molteniron - version: 58cff32e954ab817d07b8e0a136663c34d7f7b60 + version: 0506e3c3f511518cbd5e7499e2a675b25d4ac967 - name: os_neutron scm: git src: https://github.com/manuelbuil/openstack-ansible-os_neutron - version: pike-SFC-support + version: pike-SFC-support-Feb - name: os_nova scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_nova - version: 80e0d04822f7ddc5b8d574329e4eb8a76aea63ff + version: 312959bea6d4d577c6a4146ae81fa4044ac26d14 - name: os_octavia scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_octavia @@ -117,19 +117,19 @@ - name: os_rally scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_rally - version: b2658fb704fd3a1e8bce794b8bf87ac83931aa46 + version: c91eb6cc61a1f4c2136084e0df758eed117f1bbb - name: os_sahara scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_sahara - version: e3e4f1bc8d72dd6fb7e26b8d0d364f9a60e16b0f + version: c2ad98dcda096c34e9b63d4e44c9a231ed093fb4 - name: os_swift scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_swift - version: 0bb5979de285305f652694cee139390a8102c134 + version: 8f5f4be2c1040220e40b8bddbdf5e3b1a1d35baa - name: os_tempest scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_tempest - version: 0fb52fcd130bee25f40cd515da69948821d5b504 + version: bcdfa619fe46629bdf5aa8cde5d1e843e7a7b576 - name: os_trove scm: git src: https://git.openstack.org/openstack/openstack-ansible-os_trove @@ -137,27 +137,27 @@ - name: plugins scm: git src: https://git.openstack.org/openstack/openstack-ansible-plugins - version: 11aed400f86951593bb60d1e853574b67894b0b3 + version: 3601c1e006890899f3c794cb8654bfaca6c32d58 - name: rabbitmq_server scm: git src: https://git.openstack.org/openstack/openstack-ansible-rabbitmq_server - version: fa80dfc0f8129e02f3f3b34bb7205889d3e5696c + version: 5add96f3d72fb07998da715c52c46eceb54d9c4a - name: repo_build scm: git src: https://git.openstack.org/openstack/openstack-ansible-repo_build - version: d0079ff721b0f9c4682d57eccfadb36f365eea2b + version: 377c4376aef1c67c8f0cb3d3bca741bc102bf740 - name: repo_server scm: git src: https://git.openstack.org/openstack/openstack-ansible-repo_server - version: 8302adcb11cad4e6245fd6bd1bbb4db08d3b60e9 + version: 63c6537fcb7fa688e1e82074ea958b9349f58cc7 - name: rsyslog_client scm: git src: https://git.openstack.org/openstack/openstack-ansible-rsyslog_client - version: f41638370114412b97c6523b4c626ca70f0337f4 + version: 693255ee40a2908707fcc962d620d68008647a57 - name: rsyslog_server scm: git src: https://git.openstack.org/openstack/openstack-ansible-rsyslog_server - version: 61a3ab251f63c6156f2a6604ee1a822070e19c90 + version: fa201bbadeb959f363ecba7046f052b2ee16e474 - name: sshd scm: git src: https://github.com/willshersystems/ansible-sshd @@ -205,8 +205,8 @@ - name: os_tacker scm: git src: https://github.com/manuelbuil/openstack-ansible-os_tacker - version: pike-suse-support + version: pike-SFC-support-Feb - name: opendaylight scm: git src: https://git.opendaylight.org/gerrit/p/integration/packaging/ansible-opendaylight.git - version: 2af197bd13f77d2a07878b160c00f8ceeebb3c34 + version: 4aabce0605ef0f51eef4d6564cc7d779630706c5 diff --git a/scenarios/os-odl-sfc/role/os-odl-sfc/files/openstack-ansible/playbooks/defaults/repo_packages/opendaylight-master.yml b/scenarios/os-odl-sfc/role/os-odl-sfc/files/openstack-ansible/playbooks/defaults/repo_packages/opendaylight-master.yml deleted file mode 100644 index f0743fc0..00000000 --- a/scenarios/os-odl-sfc/role/os-odl-sfc/files/openstack-ansible/playbooks/defaults/repo_packages/opendaylight-master.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -# Copyright 2017, Ericsson AB -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -networking_odl_git_repo: https://git.openstack.org/openstack/networking-odl -networking_odl_git_install_branch: 7a3c5fee7deb01d9237f5d1cc43a17931999af02 # HEAD of "master" as of 24.11.2017 -networking_odl_project_group: neutron_all - -networking_sfc_git_repo: https://git.openstack.org/openstack/networking-sfc -networking_sfc_git_install_branch: 899038b4d48c469af9f8c4982898478f32ba14a8 # HEAD of "master" as of 24.10.2017 -networking_sfc_project_group: neutron_all diff --git a/scenarios/os-odl-sfc/role/os-odl-sfc/files/tacker_files/openstack_services_master.yml b/scenarios/os-odl-sfc/role/os-odl-sfc/files/tacker_files/openstack_services_master.yml deleted file mode 100644 index 86501634..00000000 --- a/scenarios/os-odl-sfc/role/os-odl-sfc/files/tacker_files/openstack_services_master.yml +++ /dev/null @@ -1,222 +0,0 @@ ---- -# Copyright 2014, Rackspace US, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -## NOTICE on items in this file: -## * If you use anything in the *._git_install_branch field that is not a TAG -## make sure to leave an in-line comment as to "why". - -## For the sake of anyone else editing this file: -## * If you add services to this file please do so in alphabetical order. -## * Every entry should be name spaced with the name of the client followed by an "_" -## * All items with this file should be separated by `name_` note that the name of the -## package should be one long name with no additional `_` separating it. - - -### Before this is shipped all of these services should have a tag set as the branch, -### or have a comment / reason attached to them as to why a tag can not work. - - -## Global Requirements -requirements_git_repo: https://git.openstack.org/openstack/requirements -requirements_git_install_branch: 691711c0effddd9cbaaadba3d494c15bc422fdd5 # HEAD of "master" as of 24.11.2017 - - -## Aodh service -aodh_git_repo: https://git.openstack.org/openstack/aodh -aodh_git_install_branch: 359043dc774be847cb539d18d13e336d40453e72 # HEAD of "master" as of 24.11.2017 -aodh_git_project_group: aodh_all - - -## Barbican service -barbican_git_repo: https://git.openstack.org/openstack/barbican -barbican_git_install_branch: 5617d605f2e12840933e4a9d6417912cdbb811d5 # HEAD of "master" as of 24.11.2017 -barbican_git_project_group: barbican_all - - -## Ceilometer service -ceilometer_git_repo: https://git.openstack.org/openstack/ceilometer -ceilometer_git_install_branch: bd464f1f572ba150f52e284de430d13045dc6c18 # HEAD of "master" as of 24.11.2017 -ceilometer_git_project_group: ceilometer_all - - -## Cinder service -cinder_git_repo: https://git.openstack.org/openstack/cinder -cinder_git_install_branch: 80558687d0fa55f2adf699e7369ebe3dbc3591bf # HEAD of "master" as of 24.11.2017 -cinder_git_project_group: cinder_all - - -## Designate service -designate_git_repo: https://git.openstack.org/openstack/designate -designate_git_install_branch: 2f75586379e8d611f37e06d385e79d0bc2c84ca1 # HEAD of "master" as of 24.11.2017 -designate_git_project_group: designate_all - - -## Horizon Designate dashboard plugin -designate_dashboard_git_repo: https://git.openstack.org/openstack/designate-dashboard -designate_dashboard_git_install_branch: 571e127e5f853aa4dbdd377d831e32f8ff81eafe # HEAD of "master" as of 24.11.2017 -designate_dashboard_git_project_group: horizon_all - - -## Dragonflow service -dragonflow_git_repo: https://git.openstack.org/openstack/dragonflow -dragonflow_git_install_branch: 7bf00cf315659252f03f6c65f6159a924da6f978 # HEAD of "master" as of 24.11.2017 -dragonflow_git_project_group: neutron_all - - -## Glance service -glance_git_repo: https://git.openstack.org/openstack/glance -glance_git_install_branch: d88bd2ca8ef95810441dae640d3c6b9e79eca353 # HEAD of "master" as of 24.11.2017 -glance_git_project_group: glance_all - - -## Heat service -heat_git_repo: https://git.openstack.org/openstack/heat -heat_git_install_branch: f4a06c2a92a361dbb401107b4ea1ab60972f473e # HEAD of "master" as of 24.11.2017 -heat_git_project_group: heat_all - - -## Horizon service -horizon_git_repo: https://git.openstack.org/openstack/horizon -horizon_git_install_branch: 846d269d90e01e463b510474040e0ad984a5679f # HEAD of "master" as of 24.11.2017 -horizon_git_project_group: horizon_all - -## Horizon Ironic dashboard plugin -ironic_dashboard_git_repo: https://git.openstack.org/openstack/ironic-ui -ironic_dashboard_git_install_branch: d6199d51171e6c8700663b0b0618ee0adf033b4d # HEAD of "master" as of 24.11.2017 -ironic_dashboard_git_project_group: horizon_all - -## Horizon Magnum dashboard plugin -magnum_dashboard_git_repo: https://git.openstack.org/openstack/magnum-ui -magnum_dashboard_git_install_branch: 6160d903fae9c652b459c93c218e0ea75924a85d # HEAD of "master" as of 24.11.2017 -magnum_dashboard_git_project_group: horizon_all - -## Horizon LBaaS dashboard plugin -neutron_lbaas_dashboard_git_repo: https://git.openstack.org/openstack/neutron-lbaas-dashboard -neutron_lbaas_dashboard_git_install_branch: ef650294bcc7447d441e6a710c39d64e384e1b27 # HEAD of "master" as of 24.11.2017 -neutron_lbaas_dashboard_git_project_group: horizon_all - -## Horizon FWaaS dashboard plugin -neutron_fwaas_dashboard_git_repo: https://git.openstack.org//openstack/neutron-fwaas-dashboard -neutron_fwaas_dashboard_git_install_branch: 6de122d4753a6db24d2dc4c22a71e702ed980e82 # HEAD of "master" as of 24.11.2017 -neutron_fwaas_dashboard_git_project_group: horizon_all - -## Horizon Sahara dashboard plugin -sahara_dashboard_git_repo: https://git.openstack.org/openstack/sahara-dashboard -sahara_dashboard_git_install_branch: 3e5c59e6229dac8b303029058fcee9d61200ebc8 # HEAD of "master" as of 24.11.2017 -sahara_dashboard_git_project_group: horizon_all - - -## Keystone service -keystone_git_repo: https://git.openstack.org/openstack/keystone -keystone_git_install_branch: 70fe4ec09b55def21361a32c8fa7f12e7c891ab1 # HEAD of "master" as of 24.11.2017 -keystone_git_project_group: keystone_all - - -## Neutron service -neutron_git_repo: https://git.openstack.org/openstack/neutron -neutron_git_install_branch: d1277c1630570ca45b490c48371e3f7e97be78c3 # HEAD of "master" as of 24.11.2017 -neutron_git_project_group: neutron_all - -neutron_lbaas_git_repo: https://git.openstack.org/openstack/neutron-lbaas -neutron_lbaas_git_install_branch: b1123e7a759248dfa63afdf8b86aafd692572ebd # HEAD of "master" as of 24.11.2017 -neutron_lbaas_git_project_group: neutron_all - -neutron_vpnaas_git_repo: https://git.openstack.org/openstack/neutron-vpnaas -neutron_vpnaas_git_install_branch: 79e4eb81dd05588bcf68b92d46c62f0d26153542 # HEAD of "master" as of 24.11.2017 -neutron_vpnaas_git_project_group: neutron_all - -neutron_fwaas_git_repo: https://git.openstack.org/openstack/neutron-fwaas -neutron_fwaas_git_install_branch: 74eac2ca2980e6162d9c88ee6bd48830386c392a # HEAD of "master" as of 24.11.2017 -neutron_fwaas_git_project_group: neutron_all - -neutron_dynamic_routing_git_repo: https://git.openstack.org/openstack/neutron-dynamic-routing -neutron_dynamic_routing_git_install_branch: 183c3fa4840d22be1974534eb9e1b28b552f4a42 # HEAD of "master" as of 24.11.2017 -neutron_dynamic_routing_git_project_group: neutron_all - -networking_calico_git_repo: https://git.openstack.org/openstack/networking-calico -networking_calico_git_install_branch: 9688df1a3d1d8b3fd9ba367e82fe6b0559416728 # HEAD of "master" as of 24.11.2017 -networking_calico_git_project_group: neutron_all - -## Nova service -nova_git_repo: https://git.openstack.org/openstack/nova -nova_git_install_branch: 22a790ef45b0523e8cf2ed97d14e050431c90fd9 # HEAD of "master" as of 24.11.2017 -nova_git_project_group: nova_all - - -## PowerVM Virt Driver -nova_powervm_git_repo: https://git.openstack.org/openstack/nova-powervm -nova_powervm_git_install_branch: f2de4441e39b0f66cf31f854b228e9e7037f04de # HEAD of "master" as of 24.11.2017 -nova_powervm_git_project_group: nova_all - - -## LXD Virt Driver -nova_lxd_git_repo: https://git.openstack.org/openstack/nova-lxd -nova_lxd_git_install_branch: e498de603b31c189fd32a6067d45a36575b96b0a # HEAD of "master" as of 24.11.2017 -nova_lxd_git_project_group: nova_all - - -## Sahara service -sahara_git_repo: https://git.openstack.org/openstack/sahara -sahara_git_install_branch: 395856c513b1efad82db8fa78fb1cbfe0f3a6749 # HEAD of "master" as of 24.11.2017 -sahara_git_project_group: sahara_all - - -## Swift service -swift_git_repo: https://git.openstack.org/openstack/swift -swift_git_install_branch: 3135878d2fe9909f49fcadeeb9cc6c6933d06127 # HEAD of "master" as of 24.11.2017 -swift_git_project_group: swift_all - - -## Swift3 middleware -swift_swift3_git_repo: https://git.openstack.org/openstack/swift3 -swift_swift3_git_install_branch: 1fb6a30ee59a16cd4b6c49bab963ff9e3f974580 # HEAD of "master" as of 24.11.2017 -swift_swift3_git_project_group: swift_all - - -## Ironic service -ironic_git_repo: https://git.openstack.org/openstack/ironic -ironic_git_install_branch: 27ce77142bfb9ac56e85db37e0923a0eb47f2f7a # HEAD of "master" as of 24.11.2017 -ironic_git_project_group: ironic_all - -## Magnum service -magnum_git_repo: https://git.openstack.org/openstack/magnum -magnum_git_install_branch: 4bf3b3263870a4ec81cf372713cacec446b3ee84 # HEAD of "master" as of 24.11.2017 -magnum_git_project_group: magnum_all - -## Trove service -trove_git_repo: https://git.openstack.org/openstack/trove -trove_git_install_branch: b09d0eb3135047891a369d3c0eb2c6e9ae649f5b # HEAD of "master" as of 24.11.2017 -trove_git_project_group: trove_all - -## Horizon Trove dashboard plugin -trove_dashboard_git_repo: https://git.openstack.org/openstack/trove-dashboard -trove_dashboard_git_install_branch: 14a4609606d42cae827b8fc6b44453caea258976 # HEAD of "master" as of 24.11.2017 -trove_dashboard_git_project_group: horizon_all - -## Octavia service -octavia_git_repo: https://git.openstack.org/openstack/octavia -octavia_git_install_branch: bb9bb2d05b268cff9846e0a09ad3940be5fe5a80 # HEAD of "master" as of 24.11.2017 -octavia_git_project_group: octavia_all - -## Molteniron service -molteniron_git_repo: https://git.openstack.org/openstack/molteniron -molteniron_git_install_branch: 094276cda77d814d07ad885e7d63de8d1243750a # HEAD of "master" as of 24.11.2017 -molteniron_git_project_group: molteniron_all - -## Tacker service -tacker_git_repo: https://git.openstack.org/openstack/tacker -tacker_git_install_branch: cc03b5d952527b8cad2e2e309a97d55afb1ca559 # HEAD of "master" as of 24.11.2017 -tacker_git_project_group: tacker_all diff --git a/scenarios/os-odl-sfc/role/os-odl-sfc/files/tacker_files/openstack_services_pike.yml b/scenarios/os-odl-sfc/role/os-odl-sfc/files/tacker_files/openstack_services_pike.yml index cecd7db1..59182abb 100644 --- a/scenarios/os-odl-sfc/role/os-odl-sfc/files/tacker_files/openstack_services_pike.yml +++ b/scenarios/os-odl-sfc/role/os-odl-sfc/files/tacker_files/openstack_services_pike.yml @@ -31,42 +31,42 @@ ## Global Requirements requirements_git_repo: https://git.openstack.org/openstack/requirements -requirements_git_install_branch: 732861162db604622ac23ad65c070e3f69d0b44e # HEAD of "stable/pike" as of 10.11.2017 +requirements_git_install_branch: 6b102588bd6c817d1957236fc24779b8912b3353 # HEAD of "stable/pike" as of 16.02.2018 ## Aodh service aodh_git_repo: https://git.openstack.org/openstack/aodh -aodh_git_install_branch: ed3ce41fa0ae0173601b683748265e502b84553b # HEAD of "stable/pike" as of 10.11.2017 +aodh_git_install_branch: f0ec11eef92d39bd3f07e026a404e2e7aa7fa6bc # HEAD of "stable/pike" as of 16.02.2018 aodh_git_project_group: aodh_all ## Barbican service barbican_git_repo: https://git.openstack.org/openstack/barbican -barbican_git_install_branch: ec47f0358a17fde8fa1253253e21af07f72b7fa3 # HEAD of "stable/pike" as of 10.11.2017 +barbican_git_install_branch: 1d20692a6fe77eacdafdd307498bb11da285c437 # HEAD of "stable/pike" as of 16.02.2018 barbican_git_project_group: barbican_all ## Ceilometer service ceilometer_git_repo: https://git.openstack.org/openstack/ceilometer -ceilometer_git_install_branch: 8f10d547a4c4eeac0af2a5c833881dbe48c26464 # HEAD of "stable/pike" as of 10.11.2017 +ceilometer_git_install_branch: 35a33b6daacfb9792382d4d5da4880737ab78fed # HEAD of "stable/pike" as of 16.02.2018 ceilometer_git_project_group: ceilometer_all ## Cinder service cinder_git_repo: https://git.openstack.org/openstack/cinder -cinder_git_install_branch: 34928801b06e1162895a64c4e95c2f2692303a50 # HEAD of "stable/pike" as of 10.11.2017 +cinder_git_install_branch: 4fb3a702ba8c3de24c41a6f706597bfa81e60435 # HEAD of "stable/pike" as of 16.02.2018 cinder_git_project_group: cinder_all ## Designate service designate_git_repo: https://git.openstack.org/openstack/designate -designate_git_install_branch: 6beba54a71510525d5bbc4956d20d27bffa982e5 # HEAD of "stable/pike" as of 10.11.2017 +designate_git_install_branch: 12fbb38799d6731862f07a9e299d5476a5c02f90 # HEAD of "stable/pike" as of 16.02.2018 designate_git_project_group: designate_all ## Horizon Designate dashboard plugin designate_dashboard_git_repo: https://git.openstack.org/openstack/designate-dashboard -designate_dashboard_git_install_branch: bc128a7c29a427933fc4ca94a7510ef8c97e5206 # HEAD of "stable/pike" as of 10.11.2017 +designate_dashboard_git_install_branch: bc128a7c29a427933fc4ca94a7510ef8c97e5206 # HEAD of "stable/pike" as of 16.02.2018 designate_dashboard_git_project_group: horizon_all @@ -78,140 +78,140 @@ dragonflow_git_project_group: neutron_all ## Glance service glance_git_repo: https://git.openstack.org/openstack/glance -glance_git_install_branch: 06af2eb5abe0332f7035a7d7c2fbfd19fbc4dae7 # HEAD of "stable/pike" as of 10.11.2017 +glance_git_install_branch: 5c1f76d91012c9cc7b12f76e917af9e9a9bb7667 # HEAD of "stable/pike" as of 16.02.2018 glance_git_project_group: glance_all ## Heat service heat_git_repo: https://git.openstack.org/openstack/heat -heat_git_install_branch: 31175a5641035abeec58c3f135ad09d3f231ac41 # HEAD of "stable/pike" as of 10.11.2017 +heat_git_install_branch: cda1cf15f4a20355c58bd26e2f4ce00007a15266 # HEAD of "stable/pike" as of 16.02.2018 heat_git_project_group: heat_all ## Horizon service horizon_git_repo: https://git.openstack.org/openstack/horizon -horizon_git_install_branch: 246ff9f81248a00a434e66d18fad70519ba811cc # HEAD of "stable/pike" as of 10.11.2017 +horizon_git_install_branch: 5d77b95586fd5491b3dee5d5c199c34f53680370 # HEAD of "stable/pike" as of 16.02.2018 horizon_git_project_group: horizon_all ## Horizon Ironic dashboard plugin ironic_dashboard_git_repo: https://git.openstack.org/openstack/ironic-ui -ironic_dashboard_git_install_branch: e2cba8ed8745b8ffcaa60d26ab69fd93f61582ad # HEAD of "stable/pike" as of 10.11.2017 +ironic_dashboard_git_install_branch: ca9f9f1e9c2baba5415bee2e7961221a3daa6da6 # HEAD of "stable/pike" as of 16.02.2018 ironic_dashboard_git_project_group: horizon_all ## Horizon Magnum dashboard plugin magnum_dashboard_git_repo: https://git.openstack.org/openstack/magnum-ui -magnum_dashboard_git_install_branch: 0b9fc50aada1a3e214acaad1204b48c96a549e5f # HEAD of "stable/pike" as of 10.11.2017 +magnum_dashboard_git_install_branch: 0b9fc50aada1a3e214acaad1204b48c96a549e5f # HEAD of "stable/pike" as of 16.02.2018 magnum_dashboard_git_project_group: horizon_all ## Horizon LBaaS dashboard plugin neutron_lbaas_dashboard_git_repo: https://git.openstack.org/openstack/neutron-lbaas-dashboard -neutron_lbaas_dashboard_git_install_branch: a5a05a27e7cab99dc379774f1d01c0076818e539 # HEAD of "stable/pike" as of 10.11.2017 +neutron_lbaas_dashboard_git_install_branch: f51341588490baca3795b6f068347cd2260d2e3b # HEAD of "stable/pike" as of 16.02.2018 neutron_lbaas_dashboard_git_project_group: horizon_all ## Horizon Sahara dashboard plugin sahara_dashboard_git_repo: https://git.openstack.org/openstack/sahara-dashboard -sahara_dashboard_git_install_branch: 00c241d97bd3a116513580cfe8006480723d7c17 # HEAD of "stable/pike" as of 10.11.2017 +sahara_dashboard_git_install_branch: d56477dba6f4073ab4df6126bb489743779a3270 # HEAD of "stable/pike" as of 16.02.2018 sahara_dashboard_git_project_group: horizon_all ## Keystone service keystone_git_repo: https://git.openstack.org/openstack/keystone -keystone_git_install_branch: d07677aba54362a4a3aa2d165b155105ffe30d73 # HEAD of "stable/pike" as of 10.11.2017 +keystone_git_install_branch: e8953d03926b2a5594bbc3d5d8af6854b97cddb7 # HEAD of "stable/pike" as of 16.02.2018 keystone_git_project_group: keystone_all ## Neutron service neutron_git_repo: https://git.openstack.org/openstack/neutron -neutron_git_install_branch: bd64409bbb9465143ea6df9db4d53a7679599b69 # HEAD of "stable/pike" as of 10.11.2017 +neutron_git_install_branch: f9fcf5e34ac68ec44c4b61bd76117d2d9213792b # HEAD of "stable/pike" as of 16.02.2018 neutron_git_project_group: neutron_all neutron_lbaas_git_repo: https://git.openstack.org/openstack/neutron-lbaas -neutron_lbaas_git_install_branch: f0b6a85877ba9c31c41fc6c8b96ffd2b63e6afb9 # HEAD of "stable/pike" as of 10.11.2017 +neutron_lbaas_git_install_branch: 49448db1a69d53ad0d137216b1805690a7daef45 # HEAD of "stable/pike" as of 16.02.2018 neutron_lbaas_git_project_group: neutron_all neutron_vpnaas_git_repo: https://git.openstack.org/openstack/neutron-vpnaas -neutron_vpnaas_git_install_branch: 60e4e7113b5fbbf28e97ebce2f40b7f1675200e6 # HEAD of "stable/pike" as of 10.11.2017 +neutron_vpnaas_git_install_branch: 60e4e7113b5fbbf28e97ebce2f40b7f1675200e6 # HEAD of "stable/pike" as of 16.02.2018 neutron_vpnaas_git_project_group: neutron_all neutron_fwaas_git_repo: https://git.openstack.org/openstack/neutron-fwaas -neutron_fwaas_git_install_branch: c2bafa999f7ea45687d5a3d42739e465564e99d1 # HEAD of "stable/pike" as of 10.11.2017 +neutron_fwaas_git_install_branch: ea4e95913d843d72c8a3079203171813ba69895d # HEAD of "stable/pike" as of 16.02.2018 neutron_fwaas_git_project_group: neutron_all neutron_dynamic_routing_git_repo: https://git.openstack.org/openstack/neutron-dynamic-routing -neutron_dynamic_routing_git_install_branch: 9098d4447581117e857d2f86fb4a0508b5ffbb6a # HEAD of "stable/pike" as of 10.11.2017 +neutron_dynamic_routing_git_install_branch: 9098d4447581117e857d2f86fb4a0508b5ffbb6a # HEAD of "stable/pike" as of 16.02.2018 neutron_dynamic_routing_git_project_group: neutron_all networking_calico_git_repo: https://git.openstack.org/openstack/networking-calico -networking_calico_git_install_branch: 9688df1a3d1d8b3fd9ba367e82fe6b0559416728 # HEAD of "master" as of 10.11.2017 +networking_calico_git_install_branch: cc3628125775f2f1b3c57c95db3d6b50278dc92b # HEAD of "master" as of 16.02.2018 networking_calico_git_project_group: neutron_all ## Nova service nova_git_repo: https://git.openstack.org/openstack/nova -nova_git_install_branch: 8fdb1372138f8371a4d414deb38b86e9197b8649 # HEAD of "stable/pike" as of 10.11.2017 +nova_git_install_branch: 806eda3da84d6f9b47c036ff138415458b837536 # HEAD of "stable/pike" as of 16.02.2018 nova_git_project_group: nova_all ## PowerVM Virt Driver nova_powervm_git_repo: https://git.openstack.org/openstack/nova-powervm -nova_powervm_git_install_branch: e0b516ca36fa5dfd38ae6f7ea97afd9a52f313ed # HEAD of "stable/pike" as of 10.11.2017 +nova_powervm_git_install_branch: e0b516ca36fa5dfd38ae6f7ea97afd9a52f313ed # HEAD of "stable/pike" as of 16.02.2018 nova_powervm_git_project_group: nova_all ## LXD Virt Driver nova_lxd_git_repo: https://git.openstack.org/openstack/nova-lxd -nova_lxd_git_install_branch: 9747c274138d9ef40512d5015e9e581f6bbec5d9 # HEAD of "stable/pike" as of 10.11.2017 +nova_lxd_git_install_branch: 9747c274138d9ef40512d5015e9e581f6bbec5d9 # HEAD of "stable/pike" as of 16.02.2018 nova_lxd_git_project_group: nova_all ## Sahara service sahara_git_repo: https://git.openstack.org/openstack/sahara -sahara_git_install_branch: 3ee0da5ea09904125c44e1f9d1a9b83554b1a1cd # HEAD of "stable/pike" as of 10.11.2017 +sahara_git_install_branch: a39c690aeca04dcde56384448ce577fd50eb8bf1 # HEAD of "stable/pike" as of 16.02.2018 sahara_git_project_group: sahara_all ## Swift service swift_git_repo: https://git.openstack.org/openstack/swift -swift_git_install_branch: 0344d6eb5afc723adc7bacf4b4e2aaf04da47548 # HEAD of "stable/pike" as of 10.11.2017 +swift_git_install_branch: 0ff2d5e3b85a42914a89eac64ed9a87172334a2c # HEAD of "stable/pike" as of 16.02.2018 swift_git_project_group: swift_all ## Swift3 middleware swift_swift3_git_repo: https://git.openstack.org/openstack/swift3 -swift_swift3_git_install_branch: 1fb6a30ee59a16cd4b6c49bab963ff9e3f974580 # HEAD of "master" as of 10.11.2017 +swift_swift3_git_install_branch: 1c117c96dda8113c3398c16e68b61efef397de74 # HEAD of "master" as of 16.02.2018 swift_swift3_git_project_group: swift_all ## Ironic service ironic_git_repo: https://git.openstack.org/openstack/ironic -ironic_git_install_branch: c163e78629eac4e696ae62dc9a29a0fc77ca463f # HEAD of "stable/pike" as of 10.11.2017 +ironic_git_install_branch: f6f55a74526e906d061f9abcd9a1ad704f6dcfe5 # HEAD of "stable/pike" as of 16.02.2018 ironic_git_project_group: ironic_all ## Magnum service magnum_git_repo: https://git.openstack.org/openstack/magnum -magnum_git_install_branch: 839884593e6f6dabaebe401b013465c836fefc84 # HEAD of "stable/pike" as of 10.11.2017 +magnum_git_install_branch: 6d9914de87a67cd5dd33f9f37b49a28486c52cc6 # HEAD of "stable/pike" as of 16.02.2018 magnum_git_project_group: magnum_all ## Trove service trove_git_repo: https://git.openstack.org/openstack/trove -trove_git_install_branch: e6d4b4b3fe1768348c9df815940b97cecb5e7ee2 # HEAD of "stable/pike" as of 10.11.2017 +trove_git_install_branch: 2a39699f8612a8f82dfce68949b714d19a102499 # HEAD of "stable/pike" as of 16.02.2018 trove_git_project_group: trove_all ## Horizon Trove dashboard plugin trove_dashboard_git_repo: https://git.openstack.org/openstack/trove-dashboard -trove_dashboard_git_install_branch: 387c3358555ee539f7abbbf4875497497e12c265 # HEAD of "stable/pike" as of 10.11.2017 +trove_dashboard_git_install_branch: bffd0776d139f38f96ce8ded07ccde4b5a41bc7a # HEAD of "stable/pike" as of 16.02.2018 trove_dashboard_git_project_group: horizon_all ## Octavia service octavia_git_repo: https://git.openstack.org/openstack/octavia -octavia_git_install_branch: 534e1f932cff19e6a54e256c56b7e3479755760d # HEAD of "stable/pike" as of 10.11.2017 +octavia_git_install_branch: a39cf133518716dc1a60069f5aa46afa384db3a8 # HEAD of "stable/pike" as of 16.02.2018 octavia_git_project_group: octavia_all ## Molteniron service molteniron_git_repo: https://git.openstack.org/openstack/molteniron -molteniron_git_install_branch: 094276cda77d814d07ad885e7d63de8d1243750a # HEAD of "master" as of 10.11.2017 +molteniron_git_install_branch: 094276cda77d814d07ad885e7d63de8d1243750a # HEAD of "master" as of 16.02.2018 molteniron_git_project_group: molteniron_all ## Tacker service tacker_git_repo: https://github.com/manuelbuil/tacker -tacker_git_install_branch: pike-insecured-bug-fixed +tacker_git_install_branch: pike-SFC-support-Feb tacker_git_project_group: tacker_all diff --git a/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/add-sfc-repos-and-inventory-master.yml b/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/add-sfc-repos-and-inventory-master.yml deleted file mode 100644 index 1cffdf8e..00000000 --- a/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/add-sfc-repos-and-inventory-master.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- - -- name: Add networking-odl and networking-sfc repos - copy: - src: openstack-ansible/playbooks/defaults/repo_packages/opendaylight-master.yml - dest: "{{OPENSTACK_OSA_PATH}}/playbooks/defaults/repo_packages/opendaylight.yml" diff --git a/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/add-sfc-repos-and-inventory-pike.yml b/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/add-sfc-repos-and-inventory-pike.yml index 3396b83e..3c80fa5e 100644 --- a/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/add-sfc-repos-and-inventory-pike.yml +++ b/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/add-sfc-repos-and-inventory-pike.yml @@ -3,14 +3,14 @@ - name: Add networking-odl and networking-sfc repos copy: src: openstack-ansible/playbooks/defaults/repo_packages/opendaylight-pike.yml - dest: "{{OPENSTACK_OSA_PATH}}/playbooks/defaults/repo_packages/opendaylight.yml" + dest: "{{openstack_osa_path}}/playbooks/defaults/repo_packages/opendaylight.yml" - name: Provide nova inventory which adds OVS-NSH hosts copy: src: openstack-ansible/playbooks/inventory_odl/env.d/nova.yml - dest: "{{OPENSTACK_OSA_PATH}}/playbooks/inventory/env.d/nova.yml" + dest: "{{openstack_osa_path}}/playbooks/inventory/env.d/nova.yml" - name: Provide neutron inventory which adds ODL hosts copy: src: openstack-ansible/playbooks/inventory_odl/env.d/neutron.yml - dest: "{{OPENSTACK_OSA_PATH}}/playbooks/inventory/env.d/neutron.yml" + dest: "{{openstack_osa_path}}/playbooks/inventory/env.d/neutron.yml" diff --git a/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/copy-OSA-files-master.yml b/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/copy-OSA-files-master.yml index f58de4c2..5ffebee6 100644 --- a/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/copy-OSA-files-master.yml +++ b/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/copy-OSA-files-master.yml @@ -3,28 +3,18 @@ - name: copy user_sfc_scenarios_variables.yml (SUSE) copy: - src: "{{XCI_FLAVOR}}/user_sfc_scenarios_variables_suse.yml" - dest: "{{OPENSTACK_OSA_ETC_PATH}}/user_sfc_scenarios_variables.yml" + src: "{{xci_flavor}}/user_sfc_scenarios_variables_suse.yml" + dest: "{{openstack_osa_etc_path}}/user_sfc_scenarios_variables.yml" when: ansible_pkg_mgr == 'zypper' - name: copy user_sfc_scenarios_variables.yml (Ubuntu) copy: - src: "{{XCI_FLAVOR}}/user_sfc_scenarios_variables_ubuntu.yml" - dest: "{{OPENSTACK_OSA_ETC_PATH}}/user_sfc_scenarios_variables.yml" + src: "{{xci_flavor}}/user_sfc_scenarios_variables_ubuntu.yml" + dest: "{{openstack_osa_etc_path}}/user_sfc_scenarios_variables.yml" when: ansible_pkg_mgr == 'apt' -- name: copy OPNFV role requirements - copy: - src: "ansible-role-requirements-master.yml" - dest: "{{OPENSTACK_OSA_PATH}}/ansible-role-requirements.yml" - -- name: copy openstack_services.yml with tacker - copy: - src: "tacker_files/openstack_services_master.yml" - dest: "{{OPENSTACK_OSA_PATH}}/playbooks/defaults/repo_packages/openstack_services.yml" - # To get the mano_host variable (can only be defined here for the inventory) - name: copy openstack_user_config.yml copy: - src: "tacker_files/{{XCI_FLAVOR}}/openstack_user_config.yml" - dest: "{{OPENSTACK_OSA_ETC_PATH}}/openstack_user_config.yml" + src: "tacker_files/{{xci_flavor}}/openstack_user_config.yml" + dest: "{{openstack_osa_etc_path}}/openstack_user_config.yml" diff --git a/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/copy-OSA-files-pike.yml b/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/copy-OSA-files-pike.yml index 5459dfed..a9d197da 100644 --- a/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/copy-OSA-files-pike.yml +++ b/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/copy-OSA-files-pike.yml @@ -3,55 +3,55 @@ - name: copy user_sfc_scenarios_variables.yml copy: - src: "{{XCI_FLAVOR}}/user_sfc_scenarios_variables_pike.yml" - dest: "{{OPENSTACK_OSA_ETC_PATH}}/user_sfc_scenarios_variables.yml" + src: "{{xci_flavor}}/user_sfc_scenarios_variables_pike.yml" + dest: "{{openstack_osa_etc_path}}/user_sfc_scenarios_variables.yml" - name: copy OPNFV role requirements copy: src: "ansible-role-requirements-pike.yml" - dest: "{{OPENSTACK_OSA_PATH}}/ansible-role-requirements.yml" + dest: "{{openstack_osa_path}}/ansible-role-requirements.yml" - name: copy openstack_user_config.yml copy: - src: "tacker_files/{{XCI_FLAVOR}}/openstack_user_config.yml" - dest: "{{OPENSTACK_OSA_ETC_PATH}}/openstack_user_config.yml" + src: "tacker_files/{{xci_flavor}}/openstack_user_config.yml" + dest: "{{openstack_osa_etc_path}}/openstack_user_config.yml" - name: copy tacker inventory file copy: src: "tacker_files/tacker.yml" - dest: "{{OPENSTACK_OSA_ETC_PATH}}/env.d/tacker.yml" + dest: "{{openstack_osa_etc_path}}/env.d/tacker.yml" - name: copy user_secrets.yml for tacker copy: src: "tacker_files/user_secrets.yml" - dest: "{{OPENSTACK_OSA_ETC_PATH}}/user_secrets.yml" + dest: "{{openstack_osa_etc_path}}/user_secrets.yml" - name: copy haproxy_config.yml for tacker copy: src: "tacker_files/haproxy_config.yml" - dest: "{{OPENSTACK_OSA_PATH}}/group_vars/all/haproxy_config.yml" + dest: "{{openstack_osa_path}}/group_vars/all/haproxy_config.yml" - name: copy openstack_services.yml with tacker copy: src: "tacker_files/openstack_services_pike.yml" - dest: "{{OPENSTACK_OSA_PATH}}/playbooks/defaults/repo_packages/openstack_services.yml" + dest: "{{openstack_osa_path}}/playbooks/defaults/repo_packages/openstack_services.yml" - name: copy all/tacker.yml copy: src: "tacker_files/all_tacker.yml" - dest: "{{OPENSTACK_OSA_PATH}}/group_vars/all/tacker.yml" + dest: "{{openstack_osa_path}}/group_vars/all/tacker.yml" - name: copy tacker_all.yml copy: src: "tacker_files/tacker_all.yml" - dest: "{{OPENSTACK_OSA_PATH}}/group_vars/tacker_all.yml" + dest: "{{openstack_osa_path}}/group_vars/tacker_all.yml" - name: copy setup-openstack.yml copy: src: "tacker_files/setup-openstack.yml" - dest: "{{OPENSTACK_OSA_PATH}}/playbooks/setup-openstack.yml" + dest: "{{openstack_osa_path}}/playbooks/setup-openstack.yml" - name: copy os-tacker-install.yml copy: src: "tacker_files/os-tacker-install.yml" - dest: "{{OPENSTACK_OSA_PATH}}/playbooks/os-tacker-install.yml" + dest: "{{openstack_osa_path}}/playbooks/os-tacker-install.yml" diff --git a/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/main.yml b/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/main.yml index 819ef203..628d8af8 100644 --- a/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/main.yml +++ b/scenarios/os-odl-sfc/role/os-odl-sfc/tasks/main.yml @@ -10,16 +10,12 @@ - name: Add SFC repos and inventory for Pike include: add-sfc-repos-and-inventory-pike.yml - when: OPENSTACK_OSA_VERSION == "stable/pike" - -- name: Add SFC repos and inventory for master - include: add-sfc-repos-and-inventory-master.yml - when: OPENSTACK_OSA_VERSION != "stable/pike" + when: openstack_osa_version == "stable/pike" - name: Copy the OSA not-yet-upstreamed files for Pike include: copy-OSA-files-pike.yml - when: OPENSTACK_OSA_VERSION == "stable/pike" + when: openstack_osa_version == "stable/pike" - name: Copy the OSA not-yet-upstreamed files for master include: copy-OSA-files-master.yml - when: OPENSTACK_OSA_VERSION != "stable/pike" + when: openstack_osa_version != "stable/pike" @@ -5,5 +5,7 @@ home-page = https://wiki.opnfv.org/display/sfc/Service+Function+Chaining+Home [files] packages = sfc -scripts = - sfc/tests/functest/run_sfc_tests.py + +[entry_points] +console_scripts = + run_sfc_tests = sfc.tests.functest.run_sfc_tests:main diff --git a/sfc/lib/config.py b/sfc/lib/config.py index 7fb42e3e..a4f5d67b 100644 --- a/sfc/lib/config.py +++ b/sfc/lib/config.py @@ -8,16 +8,18 @@ # http://www.apache.org/licenses/LICENSE-2.0 # +import logging import os import yaml -import sfc import functest -import sfc.lib.test_utils as test_utils -from functest.utils.constants import CONST -import logging +from functest.utils import config +from functest.utils import env import functest.utils.functest_utils as ft_utils +import sfc +import sfc.lib.test_utils as test_utils + logger = logging.getLogger(__name__) @@ -28,8 +30,7 @@ class CommonConfig(object): """ def __init__(self): - self.line_length = 30 - self.test_db = os.environ['TEST_DB_URL'] + self.line_length = 35 self.functest_repo_path = os.path.dirname(functest.__file__) self.functest_logging_api = os.path.join(self.functest_repo_path, "ci", "logging.ini") @@ -41,16 +42,30 @@ class CommonConfig(object): self.sfc_test_dir, "vnfd-default-params-file") self.vnffgd_dir = os.path.join(self.sfc_test_dir, "vnffgd-templates") self.functest_results_dir = os.path.join( - CONST.dir_results, "odl-sfc") - self.config_file = os.path.join(self.sfc_test_dir, "config.yaml") + getattr(config.CONF, 'dir_results'), "odl-sfc") + + # We need to know the openstack version in order to use one config or + # another. For Pike we will use config-pike.yaml. Queens and Rocky + # will use config.yaml + if 'OPENSTACK_OSA_VERSION' in os.environ: + if os.environ['OPENSTACK_OSA_VERSION'] == 'stable/pike': + self.config_file = os.path.join(self.sfc_test_dir, + "config-pike.yaml") + else: + self.config_file = os.path.join(self.sfc_test_dir, + "config.yaml") + else: + self.config_file = os.path.join(self.sfc_test_dir, + "config-pike.yaml") + self.vim_file = os.path.join(self.sfc_test_dir, "register-vim.json") - self.installer_type = CONST.__getattribute__('INSTALLER_TYPE') + self.installer_type = env.get('INSTALLER_TYPE') self.installer_fields = test_utils.fill_installer_dict( - self.installer_type) + self.installer_type) - self.installer_ip = CONST.__getattribute__('INSTALLER_IP') + self.installer_ip = env.get('INSTALLER_IP') self.installer_user = ft_utils.get_parameter_from_yaml( self.installer_fields['user'], self.config_file) @@ -58,19 +73,19 @@ class CommonConfig(object): try: self.installer_password = ft_utils.get_parameter_from_yaml( self.installer_fields['password'], self.config_file) - except: + except Exception: self.installer_password = None try: self.installer_key_file = ft_utils.get_parameter_from_yaml( self.installer_fields['pkey_file'], self.config_file) - except: + except Exception: self.installer_key_file = None try: self.installer_cluster = ft_utils.get_parameter_from_yaml( self.installer_fields['cluster'], self.config_file) - except: + except Exception: self.installer_cluster = None self.flavor = ft_utils.get_parameter_from_yaml( @@ -87,8 +102,7 @@ class CommonConfig(object): "defaults.image_format", self.config_file) self.image_url = ft_utils.get_parameter_from_yaml( "defaults.image_url", self.config_file) - self.dir_functest_data = ft_utils.get_functest_config( - "general.dir.functest_data") + self.dir_functest_data = getattr(config.CONF, 'dir_functest_data') class TestcaseConfig(object): @@ -104,7 +118,8 @@ class TestcaseConfig(object): testcases_yaml = yaml.safe_load(f) test_config = testcases_yaml['testcases'].get(testcase, None) if test_config is None: - logger.error('Test {0} configuration is not present in {1}' - .format(testcase, common_config.config_file)) + logger.error( + 'Test %s configuration is not present in %s', + testcase, common_config.config_file) # Update class fields with configuration variables dynamically self.__dict__.update(**test_config) diff --git a/sfc/lib/odl_utils.py b/sfc/lib/odl_utils.py index c8b0ebdd..e1980423 100644 --- a/sfc/lib/odl_utils.py +++ b/sfc/lib/odl_utils.py @@ -5,13 +5,22 @@ import time import json import re import logging -import functest.utils.functest_utils as ft_utils +import functools import sfc.lib.openstack_utils as os_sfc_utils logger = logging.getLogger(__name__) +ODL_MODULE_EXCEPTIONS = { + "service-function-path-state": "service-function-path" +} + +ODL_PLURAL_EXCEPTIONS = { + "service-function-path-state": "service-function-paths-state" +} + + def actual_rsps_in_compute(ovs_logger, compute_ssh): ''' Example flows that match the regex (line wrapped because of flake8) @@ -20,31 +29,36 @@ def actual_rsps_in_compute(ovs_logger, compute_ssh): load:0x27->NXM_NX_NSP[0..23],load:0xff->NXM_NX_NSI[], load:0xffffff->NXM_NX_NSH_C1[],load:0->NXM_NX_NSH_C2[],resubmit(,17) ''' - match_rsp = re.compile( - r'.+tp_dst=([0-9]+).+load:(0x[0-9a-f]+)->NXM_NX_NSP\[0\.\.23\].+') + match_rsp = re.compile(r'.+' + r'(tp_(?:src|dst)=[0-9]+)' + r'.+' + r'load:(0x[0-9a-f]+)->NXM_NX_NSP\[0\.\.23\]' + r'.+') # First line is OFPST_FLOW reply (OF1.3) (xid=0x2): # This is not a flow so ignore flows = (ovs_logger.ofctl_dump_flows(compute_ssh, 'br-int', '101') .strip().split('\n')[1:]) matching_flows = [match_rsp.match(f) for f in flows] - # group(1) = 22 (tp_dst value) | group(2) = 0xff (rsp value) - rsps_in_compute = ['{0}_{1}'.format(mf.group(2), mf.group(1)) + # group(1) = tsp_dst=22 | group(2) = 0xff (rsp value) + rsps_in_compute = ['{0}|{1}'.format(mf.group(2), mf.group(1)) for mf in matching_flows if mf is not None] return rsps_in_compute -def get_active_rsps(odl_ip, odl_port): +def get_active_rsps_on_ports(odl_ip, odl_port, neutron_ports): ''' Queries operational datastore and returns the RSPs for which we have - created a classifier (ACL). These are considered as active RSPs - for which classification rules should exist in the compute nodes + created a classifier (ACL) on the specified neutron ports. These are + considered as active RSPs on those ports for which classification rules + should exist in the compute node on which such ports are located. - This function enhances the returned dictionary with the - destination port of the ACL. + This function enhances each returned RSP with the openflow matches on + the tcp ports that classify traffic into that RSP. ''' + port_ids = [port.id for port in neutron_ports] acls = get_odl_acl_list(odl_ip, odl_port) - rsps = [] + rsps = {} for acl in acls['access-lists']['acl']: try: # We get the first ace. ODL creates a new ACL @@ -55,66 +69,129 @@ def get_active_rsps(odl_ip, odl_port): acl['acl-name'])) continue - if not ('netvirt-sfc-acl:rsp-name' in ace['actions']): + matches = ace['matches'] + + # We are just interested in the destination-port-range matches + # that we use throughout the tests + if matches.get('destination-port-range') is None: continue + tcp_port = matches['destination-port-range']['lower-port'] + + # A single ace may classify traffic into a forward path + # and optionally into a reverse path if destination port is set + src_port = matches.get('netvirt-sfc-acl:source-port-uuid') + dst_port = matches.get('netvirt-sfc-acl:destination-port-uuid') + forward_of_match = None + reverse_of_match = None + if src_port in port_ids: + forward_of_match = 'tp_dst=' + str(tcp_port) + if dst_port in port_ids: + # For classification to the reverse path + # the openflow match inverts + reverse_of_match = 'tp_src=' + str(tcp_port) + + # This ACL does not apply to any of the given ports + if not forward_of_match and not reverse_of_match: + continue + + actions = ace['actions'] + rsp_names = get_rsps_from_netvirt_acl_actions(odl_ip, + odl_port, + actions) + + for rsp_name in rsp_names: + rsp = rsps.get(rsp_name) + if not rsp: + rsp = get_rsp(odl_ip, odl_port, rsp_name) + of_matches = rsp.get('of-matches', []) + if reverse_of_match and rsp.get('reverse-path'): + of_matches.append(reverse_of_match) + elif forward_of_match and not rsp.get('reverse-path'): + of_matches.append(forward_of_match) + rsp['of-matches'] = of_matches + rsps[rsp_name] = rsp - rsp_name = ace['actions']['netvirt-sfc-acl:rsp-name'] - rsp = get_odl_resource_elem(odl_ip, - odl_port, - 'rendered-service-path', - rsp_name, - datastore='operational') - ''' - Rsps are returned in the format: - { - "rendered-service-path": [ - { - "name": "Path-red-Path-83", - "path-id": 83, - ... - "rendered-service-path-hop": [ - { - ... - "service-function-name": "testVNF1", - "service-index": 255 - ... - 'rendered-service-path' Is returned as a list with one - element (we select by name and the names are unique) - ''' - rsp_port = rsp['rendered-service-path'][0] - rsp_port['dst-port'] = (ace['matches'] - ['destination-port-range']['lower-port']) - rsps.append(rsp_port) - return rsps - - -def promised_rsps_in_computes(odl_ip, odl_port): + return rsps.values() + + +def get_rsps_from_netvirt_acl_actions(odl_ip, odl_port, netvirt_acl_actions): ''' - Return a list of rsp_port which represents the rsp id and the destination - port configured in ODL + Return the list of RSPs referenced from the netvirt sfc redirect action ''' - rsps = get_active_rsps(odl_ip, odl_port) - rsps_in_computes = ['{0}_{1}'.format(hex(rsp['path-id']), rsp['dst-port']) - for rsp in rsps] + rsp_names = [] + + if 'netvirt-sfc-acl:rsp-name' in netvirt_acl_actions: + rsp_names.append(netvirt_acl_actions['netvirt-sfc-acl:rsp-name']) + + if 'netvirt-sfc-acl:sfp-name' in netvirt_acl_actions: + # If the acl redirect action is a sfp instead of rsp + # we need to get the rsps associated to that sfp + sfp_name = netvirt_acl_actions['netvirt-sfc-acl:sfp-name'] + sfp_state = get_odl_resource_elem(odl_ip, + odl_port, + 'service-function-path-state', + sfp_name, + datastore='operational') + sfp_rsps = sfp_state.get('sfp-rendered-service-path', []) + sfp_rsp_names = [rsp['name'] for rsp in sfp_rsps if 'name' in rsp] + rsp_names.extend(sfp_rsp_names) + + return rsp_names + + +def get_rsp(odl_ip, odl_port, rsp_name): + rsp = get_odl_resource_elem(odl_ip, + odl_port, + 'rendered-service-path', + rsp_name, + datastore='operational') + return rsp + + +def promised_rsps_in_compute(odl_ip, odl_port, compute_ports): + ''' + Return a list of rsp|of_match which represents the RSPs and openflow + matches on the source/destination port that classify traffic into such + RSP as configured in ODL ACLs + ''' + rsps = get_active_rsps_on_ports(odl_ip, odl_port, compute_ports) + rsps_in_computes = ['{0}|{1}'.format(hex(rsp['path-id']), of_match) + for rsp in rsps + for of_match in rsp['of-matches']] return rsps_in_computes -@ft_utils.timethis +def timethis(func): + """Measure the time it takes for a function to complete""" + @functools.wraps(func) + def timed(*args, **kwargs): + ts = time.time() + result = func(*args, **kwargs) + te = time.time() + elapsed = '{0}'.format(te - ts) + logger.info('{f}(*{a}, **{kw}) took: {t} sec'.format( + f=func.__name__, a=args, kw=kwargs, t=elapsed)) + return result, elapsed + return timed + + +@timethis def wait_for_classification_rules(ovs_logger, compute_nodes, odl_ip, odl_port, - compute_client_name, timeout=200): + compute_name, neutron_ports, timeout=200): ''' Check if the classification rules configured in ODL are implemented in OVS. We know by experience that this process might take a while ''' try: - compute = find_compute(compute_client_name, compute_nodes) + compute = find_compute(compute_name, compute_nodes) # Find the configured rsps in ODL. Its format is nsp_destPort promised_rsps = [] timeout2 = 10 while not promised_rsps: - promised_rsps = promised_rsps_in_computes(odl_ip, odl_port) + promised_rsps = promised_rsps_in_compute(odl_ip, odl_port, + neutron_ports) timeout2 -= 1 if timeout2 == 0: os_sfc_utils.get_tacker_items() @@ -123,7 +200,8 @@ def wait_for_classification_rules(ovs_logger, compute_nodes, odl_ip, odl_port, time.sleep(3) while timeout > 0: - logger.info("RSPs in ODL Operational DataStore:") + logger.info("RSPs in ODL Operational DataStore" + "for compute '{}':".format(compute_name)) logger.info("{0}".format(promised_rsps)) # Fetch the rsps implemented in the compute @@ -167,8 +245,18 @@ def get_odl_ip_port(nodes): return ip, port -def pluralize(s): - return '{0}s'.format(s) +def pluralize(resource): + plural = ODL_PLURAL_EXCEPTIONS.get(resource, None) + if not plural: + plural = '{0}s'.format(resource) + return plural + + +def get_module(resource): + module = ODL_MODULE_EXCEPTIONS.get(resource, None) + if not module: + module = resource + return module def format_odl_resource_list_url(odl_ip, odl_port, resource, @@ -176,7 +264,8 @@ def format_odl_resource_list_url(odl_ip, odl_port, resource, odl_pwd='admin'): return ('http://{usr}:{pwd}@{ip}:{port}/restconf/{ds}/{rsrc}:{rsrcs}' .format(usr=odl_user, pwd=odl_pwd, ip=odl_ip, port=odl_port, - ds=datastore, rsrc=resource, rsrcs=pluralize(resource))) + ds=datastore, rsrc=get_module(resource), + rsrcs=pluralize(resource))) def format_odl_resource_elem_url(odl_ip, odl_port, resource, @@ -202,7 +291,12 @@ def get_odl_resource_elem(odl_ip, odl_port, resource, elem_name, datastore='config'): url = format_odl_resource_elem_url( odl_ip, odl_port, resource, elem_name, datastore=datastore) - return requests.get(url).json() + response = requests.get(url).json() + # Response is in the format of a dictionary containing + # a single value that is an array with the element requested: + # {'resource' : [element]} + # Return just the element + return response.get(resource, [{}])[0] def delete_odl_resource_elem(odl_ip, odl_port, resource, elem_name, @@ -288,10 +382,10 @@ def find_compute(compute_client_name, compute_nodes): return compute -def check_vnffg_deletion(odl_ip, odl_port, ovs_logger, compute_client_name, - compute_nodes, retries=20): +def check_vnffg_deletion(odl_ip, odl_port, ovs_logger, neutron_ports, + compute_client_name, compute_nodes, retries=20): ''' - First, RSPs are checked in the oprational datastore of ODL. Nothing should + First, RSPs are checked in the operational datastore of ODL. Nothing should exist. As it might take a while for ODL to remove that, some retries are needed. @@ -302,7 +396,7 @@ def check_vnffg_deletion(odl_ip, odl_port, ovs_logger, compute_client_name, # Check RSPs while retries_counter > 0: - if (get_active_rsps(odl_ip, odl_port)): + if get_active_rsps_on_ports(odl_ip, odl_port, neutron_ports): retries_counter -= 1 time.sleep(3) else: @@ -334,6 +428,7 @@ def check_vnffg_deletion(odl_ip, odl_port, ovs_logger, compute_client_name, return True + def create_chain(tacker_client, default_param_file, neutron_port, COMMON_CONFIG, TESTCASE_CONFIG): diff --git a/sfc/lib/openstack_utils.py b/sfc/lib/openstack_utils.py index 7257b126..b7254bf1 100644 --- a/sfc/lib/openstack_utils.py +++ b/sfc/lib/openstack_utils.py @@ -4,7 +4,8 @@ import time import json import yaml from tackerclient.tacker import client as tackerclient -from functest.utils.constants import CONST +from functest.utils import constants +from functest.utils import env from snaps.openstack.tests import openstack_tests @@ -29,7 +30,7 @@ import snaps.openstack.create_instance as cr_inst from snaps.config.vm_inst import VmInstanceConfig, FloatingIpConfig from snaps.openstack.utils import ( - nova_utils, neutron_utils, glance_utils, heat_utils, keystone_utils) + nova_utils, neutron_utils, heat_utils, keystone_utils) logger = logging.getLogger(__name__) DEFAULT_TACKER_API_VERSION = '1.0' @@ -39,12 +40,12 @@ class OpenStackSFC: def __init__(self): self.os_creds = openstack_tests.get_credentials( - os_env_file=CONST.__getattribute__('openstack_creds')) + os_env_file=constants.ENV_FILE) self.creators = [] self.nova = nova_utils.nova_client(self.os_creds) self.neutron = neutron_utils.neutron_client(self.os_creds) - self.glance = glance_utils.glance_client(self.os_creds) self.heat = heat_utils.heat_client(self.os_creds) + self.keystone = keystone_utils.keystone_client(self.os_creds) def register_glance_image(self, name, url, img_format, public): image_settings = ImageConfig(name=name, img_format=img_format, url=url, @@ -80,7 +81,7 @@ class OpenStackSFC: self.creators.append(network_creator) # Router - ext_network_name = CONST.__getattribute__('EXTERNAL_NETWORK') + ext_network_name = env.get('EXTERNAL_NETWORK') router_settings = RouterConfig(name=router_name, external_gateway=ext_network_name, @@ -156,19 +157,30 @@ class OpenStackSFC: ''' Return the compute where the client sits ''' + return self.get_vm_compute('client') + + def get_compute_server(self): + ''' + Return the compute where the server sits + ''' + return self.get_vm_compute('server') + + def get_vm_compute(self, vm_name): + ''' + Return the compute where the vm sits + ''' for creator in self.creators: # We want to filter the vm creators - if hasattr(creator, 'get_vm_info'): - vm_info = creator.get_vm_info() - # We want to fetch only the client - if vm_info['name'] == 'client': - return vm_info['OS-EXT-SRV-ATTR:host'] + if hasattr(creator, 'get_vm_inst'): + # We want to fetch by vm_name + if creator.get_vm_inst().name == vm_name: + return creator.get_vm_inst().compute_host - raise Exception("There is no client VM!!") + raise Exception("There is no VM with name '{}'!!".format(vm_name)) def assign_floating_ip(self, router, vm, vm_creator): ''' - Assign a floating ips to all the VMs + Assign floating ips to all the VMs ''' name = vm.name + "-float" port_name = vm.ports[0].name @@ -180,22 +192,45 @@ class OpenStackSFC: return ip.ip # We need this function because tacker VMs cannot be created through SNAPs - def assign_floating_ip_vnfs(self, router): + def assign_floating_ip_vnfs(self, router, ips=None): ''' - Assign a floating ips to all the SFs + Assign floating ips to all the SFs. Optionally specify the + subnet IPs that a floating IP should be assigned to, assuming that the + SF is connected to a single subnet globally and per port. ''' stacks = self.heat.stacks.list() fips = [] + project_name = 'admin' for stack in stacks: servers = heat_utils.get_stack_servers(self.heat, self.nova, self.neutron, - stack) + self.keystone, + stack, + project_name) sf_creator = cr_inst.generate_creator(self.os_creds, servers[0], - self.image_settings) - port_name = servers[0].ports[0].name + self.image_settings, + project_name) + name = servers[0].name + "-float" + if ips is None: + port_name = servers[0].ports[0].name + else: + port_name = None + for port in servers[0].ports: + if port.ips[0]['ip_address'] in ips: + port_name = port.name + break + + if port_name is None: + err_msg = "The VNF {} does not have any suitable port {} " \ + "for floating IP assignment".format( + name, + 'with ip any of ' + str(ips) if ips else '') + logger.error(err_msg) + raise Exception(err_msg) + float_ip = FloatingIpConfig(name=name, port_name=port_name, router_name=router.name) @@ -205,13 +240,19 @@ class OpenStackSFC: return fips - def get_client_port_id(self, vm): + def get_client_port(self, vm, vm_creator): ''' Get the neutron port id of the client ''' - port_id = neutron_utils.get_port(self.neutron, - port_name=vm.name + "-port") - return port_id + port_name = vm.name + "-port" + port = vm_creator.get_port_by_name(port_name) + if port is not None: + return port + else: + logger.error("The VM {0} does not have any port" + " with name {1}".format(vm.name, port_name)) + raise Exception("Client VM does not have the desired port") + # TACKER SECTION # @@ -227,7 +268,7 @@ def get_tacker_client_version(): def get_tacker_client(other_creds={}): creds_override = None os_creds = openstack_tests.get_credentials( - os_env_file=CONST.__getattribute__('openstack_creds'), + os_env_file=constants.ENV_FILE, overrides=creds_override) sess = keystone_utils.keystone_session(os_creds) return tackerclient.Client(get_tacker_client_version(), session=sess) @@ -235,12 +276,12 @@ def get_tacker_client(other_creds={}): def get_id_from_name(tacker_client, resource_type, resource_name): try: - req_params = {'fields': 'id', 'name': resource_name} - endpoint = '/{0}s'.format(resource_type) - resp = tacker_client.get(endpoint, params=req_params) - endpoint = endpoint.replace('-', '_') - return resp[endpoint[1:]][0]['id'] - except Exception, e: + params = {'fields': 'id', 'name': resource_name} + collection = resource_type + 's' + path = '/' + collection + resp = tacker_client.list(collection, path, **params) + return resp[collection][0]['id'] + except Exception as e: logger.error("Error [get_id_from_name(tacker_client, " "resource_type, resource_name)]: %s" % e) return None @@ -288,7 +329,7 @@ def list_vnfds(tacker_client, verbose=False): if not verbose: vnfds = [vnfd['id'] for vnfd in vnfds['vnfds']] return vnfds - except Exception, e: + except Exception as e: logger.error("Error [list_vnfds(tacker_client)]: %s" % e) return None @@ -303,7 +344,7 @@ def create_vnfd(tacker_client, tosca_file=None, vnfd_name=None): return tacker_client.create_vnfd( body={"vnfd": {"attributes": {"vnfd": vnfd_body}, "name": vnfd_name}}) - except Exception, e: + except Exception as e: logger.error("Error [create_vnfd(tacker_client, '%s')]: %s" % (tosca_file, e)) return None @@ -317,7 +358,7 @@ def delete_vnfd(tacker_client, vnfd_id=None, vnfd_name=None): raise Exception('You need to provide VNFD id or VNFD name') vnfd = get_vnfd_id(tacker_client, vnfd_name) return tacker_client.delete_vnfd(vnfd) - except Exception, e: + except Exception as e: logger.error("Error [delete_vnfd(tacker_client, '%s', '%s')]: %s" % (vnfd_id, vnfd_name, e)) return None @@ -329,7 +370,7 @@ def list_vnfs(tacker_client, verbose=False): if not verbose: vnfs = [vnf['id'] for vnf in vnfs['vnfs']] return vnfs - except Exception, e: + except Exception as e: logger.error("Error [list_vnfs(tacker_client)]: %s" % e) return None @@ -364,7 +405,7 @@ def create_vnf(tacker_client, vnf_name, vnfd_id=None, vnf_body['vnf']['vim_id'] = get_vim_id(tacker_client, vim_name) return tacker_client.create_vnf(body=vnf_body) - except Exception, e: + except Exception as e: logger.error("error [create_vnf(tacker_client," " '%s', '%s', '%s')]: %s" % (vnf_name, vnfd_id, vnfd_name, e)) @@ -384,12 +425,28 @@ def get_vnf(tacker_client, vnf_id=None, vnf_name=None): else: raise Exception('Could not retrieve ID from name [%s]' % vnf_name) - except Exception, e: + except Exception as e: logger.error("Could not retrieve VNF [vnf_id=%s, vnf_name=%s] - %s" % (vnf_id, vnf_name, e)) return None +def get_vnf_ip(tacker_client, vnf_id=None, vnf_name=None): + """ + Get the management ip of the first VNF component as obtained from the + tacker REST API: + + { + "vnf": { + ... + "mgmt_url": "{\"VDU1\": \"192.168.120.3\"}", + ... + } + """ + vnf = get_vnf(tacker_client, vnf_id, vnf_name) + return json.loads(vnf['mgmt_url']).values()[0] + + def wait_for_vnf(tacker_client, vnf_id=None, vnf_name=None, timeout=100): try: vnf = get_vnf(tacker_client, vnf_id, vnf_name) @@ -409,7 +466,7 @@ def wait_for_vnf(tacker_client, vnf_id=None, vnf_name=None, timeout=100): raise Exception('Timeout when booting vnf %s' % vnf['id']) return vnf['id'] - except Exception, e: + except Exception as e: logger.error("error [wait_for_vnf(tacker_client, '%s', '%s')]: %s" % (vnf_id, vnf_name, e)) return None @@ -423,7 +480,7 @@ def delete_vnf(tacker_client, vnf_id=None, vnf_name=None): raise Exception('You need to provide a VNF id or name') vnf = get_vnf_id(tacker_client, vnf_name) return tacker_client.delete_vnf(vnf) - except Exception, e: + except Exception as e: logger.error("Error [delete_vnf(tacker_client, '%s', '%s')]: %s" % (vnf_id, vnf_name, e)) return None @@ -437,7 +494,7 @@ def create_vim(tacker_client, vim_file=None): vim_body = json.load(vim_fd) logger.info('VIM template:\n{0}'.format(vim_body)) return tacker_client.create_vim(body=vim_body) - except Exception, e: + except Exception as e: logger.error("Error [create_vim(tacker_client, '%s')]: %s" % (vim_file, e)) return None @@ -453,14 +510,14 @@ def create_vnffgd(tacker_client, tosca_file=None, vnffgd_name=None): return tacker_client.create_vnffgd( body={'vnffgd': {'name': vnffgd_name, 'template': {'vnffgd': vnffgd_body}}}) - except Exception, e: + except Exception as e: logger.error("Error [create_vnffgd(tacker_client, '%s')]: %s" % (tosca_file, e)) return None def create_vnffg(tacker_client, vnffg_name=None, vnffgd_id=None, - vnffgd_name=None, param_file=None): + vnffgd_name=None, param_file=None, symmetrical=False): ''' Creates the vnffg which will provide the RSP and the classifier ''' @@ -468,7 +525,8 @@ def create_vnffg(tacker_client, vnffg_name=None, vnffgd_id=None, vnffg_body = { 'vnffg': { 'attributes': {}, - 'name': vnffg_name + 'name': vnffg_name, + 'symmetrical': symmetrical } } if param_file is not None: @@ -485,7 +543,7 @@ def create_vnffg(tacker_client, vnffg_name=None, vnffgd_id=None, vnffg_body['vnffg']['vnffgd_id'] = get_vnffgd_id(tacker_client, vnffgd_name) return tacker_client.create_vnffg(body=vnffg_body) - except Exception, e: + except Exception as e: logger.error("error [create_vnffg(tacker_client," " '%s', '%s', '%s')]: %s" % (vnffg_name, vnffgd_id, vnffgd_name, e)) @@ -498,7 +556,7 @@ def list_vnffgds(tacker_client, verbose=False): if not verbose: vnffgds = [vnffgd['id'] for vnffgd in vnffgds['vnffgds']] return vnffgds - except Exception, e: + except Exception as e: logger.error("Error [list_vnffgds(tacker_client)]: %s" % e) return None @@ -509,7 +567,7 @@ def list_vnffgs(tacker_client, verbose=False): if not verbose: vnffgs = [vnffg['id'] for vnffg in vnffgs['vnffgs']] return vnffgs - except Exception, e: + except Exception as e: logger.error("Error [list_vnffgs(tacker_client)]: %s" % e) return None @@ -522,7 +580,7 @@ def delete_vnffg(tacker_client, vnffg_id=None, vnffg_name=None): raise Exception('You need to provide a VNFFG id or name') vnffg = get_vnffg_id(tacker_client, vnffg_name) return tacker_client.delete_vnffg(vnffg) - except Exception, e: + except Exception as e: logger.error("Error [delete_vnffg(tacker_client, '%s', '%s')]: %s" % (vnffg_id, vnffg_name, e)) return None @@ -536,7 +594,7 @@ def delete_vnffgd(tacker_client, vnffgd_id=None, vnffgd_name=None): raise Exception('You need to provide VNFFGD id or VNFFGD name') vnffgd = get_vnffgd_id(tacker_client, vnffgd_name) return tacker_client.delete_vnffgd(vnffgd) - except Exception, e: + except Exception as e: logger.error("Error [delete_vnffgd(tacker_client, '%s', '%s')]: %s" % (vnffgd_id, vnffgd_name, e)) return None @@ -548,7 +606,7 @@ def list_vims(tacker_client, verbose=False): if not verbose: vims = [vim['id'] for vim in vims['vims']] return vims - except Exception, e: + except Exception as e: logger.error("Error [list_vims(tacker_client)]: %s" % e) return None @@ -561,7 +619,7 @@ def delete_vim(tacker_client, vim_id=None, vim_name=None): raise Exception('You need to provide VIM id or VIM name') vim = get_vim_id(tacker_client, vim_name) return tacker_client.delete_vim(vim) - except Exception, e: + except Exception as e: logger.error("Error [delete_vim(tacker_client, '%s', '%s')]: %s" % (vim_id, vim_name, e)) return None @@ -582,9 +640,8 @@ def register_vim(tacker_client, vim_file=None): with open(vim_file) as f: json_dict = json.load(f) - json_dict['vim']['auth_url'] = CONST.__getattribute__('OS_AUTH_URL') - json_dict['vim']['auth_cred']['password'] = CONST.__getattribute__( - 'OS_PASSWORD') + json_dict['vim']['auth_url'] = os.environ['OS_AUTH_URL'] + json_dict['vim']['auth_cred']['password'] = os.environ['OS_PASSWORD'] json.dump(json_dict, open(tmp_file, 'w')) @@ -617,19 +674,28 @@ def create_vnf_in_av_zone( def create_vnffg_with_param_file(tacker_client, vnffgd_name, vnffg_name, - default_param_file, neutron_port): + default_param_file, client_port, + server_port=None, server_ip=None): param_file = default_param_file - - if neutron_port is not None: + data = {} + if client_port: + data['net_src_port_id'] = client_port + if server_port: + data['net_dst_port_id'] = server_port + if server_ip: + data['ip_dst_prefix'] = server_ip + + if client_port is not None or server_port is not None: param_file = os.path.join( '/tmp', - 'param_{0}.json'.format(neutron_port)) - data = { - 'net_src_port_id': neutron_port - } + 'param_{0}.json'.format(vnffg_name)) with open(param_file, 'w+') as f: json.dump(data, f) + + symmetrical = True if client_port and server_port else False + create_vnffg(tacker_client, vnffgd_name=vnffgd_name, vnffg_name=vnffg_name, - param_file=param_file) + param_file=param_file, + symmetrical=symmetrical) diff --git a/sfc/lib/test_utils.py b/sfc/lib/test_utils.py index a04f1e24..18c55dc1 100644 --- a/sfc/lib/test_utils.py +++ b/sfc/lib/test_utils.py @@ -10,9 +10,10 @@ import os import subprocess import time +import shutil +import urllib import logging -import functest.utils.functest_utils as ft_utils logger = logging.getLogger(__name__) @@ -51,13 +52,29 @@ def run_cmd_remote(ip, cmd, username="root", passwd="opnfv"): return run_cmd(ssh_cmd) +def download_url(url, dest_path): + """ + Download a file to a destination path given a URL + """ + name = url.rsplit('/')[-1] + dest = dest_path + "/" + name + try: + response = urllib.urlopen(url) + except Exception: + return False + + with open(dest, 'wb') as lfile: + shutil.copyfileobj(response, lfile) + return True + + def download_image(url, image_path): image_filename = os.path.basename(image_path) image_url = "%s/%s" % (url, image_filename) image_dir = os.path.dirname(image_path) if not os.path.isfile(image_path): logger.info("Downloading image") - ft_utils.download_url(image_url, image_dir) + download_url(image_url, image_dir) else: logger.info("Using old image") @@ -107,17 +124,20 @@ def start_http_server(ip, iterations_check=10): return False -def start_vxlan_tool(remote_ip, interface="eth0", block=None): +def start_vxlan_tool(remote_ip, interface="eth0", output=None, block=None): """ Starts vxlan_tool on a remote host. vxlan_tool.py converts a regular Service Function into a NSH-aware SF when the "--do forward" option is used, it decrements the NSI appropiately. - 'block' parameters allows to specify a port where packets will be dropped. + 'output' allows to specify an interface through which to forward if + different than the input interface. + 'block' parameter allows to specify a port where packets will be dropped. """ command = "nohup python /root/vxlan_tool.py" - options = "{do} {interface} {block_option}".format( + options = "{do} {interface} {output_option} {block_option}".format( do="--do forward", interface="--interface {}".format(interface), + output_option="--output {}".format(output) if output else "", block_option="--block {}".format(block) if block is not None else "") output_redirection = "> /dev/null 2>&1" diff --git a/sfc/tests/functest/config-pike.yaml b/sfc/tests/functest/config-pike.yaml new file mode 100644 index 00000000..6b7b5a80 --- /dev/null +++ b/sfc/tests/functest/config-pike.yaml @@ -0,0 +1,84 @@ +--- +defaults: + # odl-sfc uses custom flavors as per below params + flavor: custom + ram_size_in_mb: 500 + disk_size_in_gb: 1 + vcpu_count: 1 + image_name: sfc_nsh_fraser + installer: + fuel: + user: root + password: r00tme + cluster: 1 # Change this to the id of the desired fuel env (1, 2, 3...) + apex: + user: stack + pkey_file: "/root/.ssh/id_rsa" + osa: + user: root + pkey_file: "/root/.ssh/id_rsa" + compass: + user: root + pkey_file: "/root/.ssh/id_rsa" + image_format: qcow2 + image_url: "http://artifacts.opnfv.org/sfc/images/sfc_nsh_fraser.qcow2" + vnfd-dir: "vnfd-templates" + vnfd-default-params-file: "test-vnfd-default-params.yaml" + + +testcases: + sfc_one_chain_two_service_functions: + enabled: true + order: 0 + description: "ODL-SFC Testing SFs when they are located on the same chain" + net_name: example-net + subnet_name: example-subnet + router_name: example-router + subnet_cidr: "11.0.0.0/24" + secgroup_name: "example-sg" + secgroup_descr: "Example Security group" + test_vnfd_red: "test-one-chain-vnfd1.yaml" + test_vnfd_blue: "test-one-chain-vnfd2.yaml" + test_vnffgd_red: "test-one-chain-vnffgd-pike.yaml" + + sfc_two_chains_SSH_and_HTTP: + enabled: false + order: 1 + description: "ODL-SFC tests with two chains and one SF per chain" + net_name: example-net + subnet_name: example-subnet + router_name: example-router + subnet_cidr: "11.0.0.0/24" + secgroup_name: "example-sg" + secgroup_descr: "Example Security group" + test_vnfd_red: "test-two-chains-vnfd1.yaml" + test_vnfd_blue: "test-two-chains-vnfd2.yaml" + test_vnffgd_red: "test-two-chains-vnffgd1-pike.yaml" + test_vnffgd_blue: "test-two-chains-vnffgd2-pike.yaml" + + sfc_symmetric_chain: + enabled: false + order: 2 + description: "Verify the behavior of a symmetric service chain" + net_name: example-net + subnet_name: example-subnet + router_name: example-router + subnet_cidr: "11.0.0.0/24" + secgroup_name: "example-sg" + secgroup_descr: "Example Security group" + test_vnfd: "test-symmetric-vnfd.yaml" + allowed_source_port: 22222 + blocked_source_port: 33333 + + sfc_chain_deletion: + enabled: false + order: 3 + description: "Verify if chains work correctly after deleting one" + net_name: example-net + subnet_name: example-subnet + router_name: example-router + subnet_cidr: "11.0.0.0/24" + secgroup_name: "example-sg" + secgroup_descr: "Example Security group" + test_vnfd_red: "test-one-chain-vnfd1.yaml" + test_vnffgd_red: "test-deletion-vnffgd-pike.yaml" diff --git a/sfc/tests/functest/config.yaml b/sfc/tests/functest/config.yaml index 5bbba65f..3cd1883a 100644 --- a/sfc/tests/functest/config.yaml +++ b/sfc/tests/functest/config.yaml @@ -17,6 +17,9 @@ defaults: osa: user: root pkey_file: "/root/.ssh/id_rsa" + compass: + user: root + pkey_file: "/root/.ssh/id_rsa" image_format: qcow2 image_url: "http://artifacts.opnfv.org/sfc/images/sfc_nsh_fraser.qcow2" vnfd-dir: "vnfd-templates" diff --git a/sfc/tests/functest/run_sfc_tests.py b/sfc/tests/functest/run_sfc_tests.py index a1e73040..64c5b385 100644 --- a/sfc/tests/functest/run_sfc_tests.py +++ b/sfc/tests/functest/run_sfc_tests.py @@ -1,4 +1,4 @@ -#!/bin/python +#!/usr/bin/env python # # Copyright (c) 2015 All rights reserved # This program and the accompanying materials @@ -11,10 +11,10 @@ import importlib import os import time -import sys import yaml +import sys -from functest.core import testcase +from xtesting.core import testcase from opnfv.utils import ovs_logger as ovs_log from opnfv.deployment.factory import Factory as DeploymentFactory from sfc.lib import cleanup as sfc_cleanup @@ -104,7 +104,7 @@ class SfcFunctest(testcase.TestCase): self.__disable_heat_resource_finder_cache_apex(controllers) elif installer_type == "fuel": self.__disable_heat_resource_finder_cache_fuel(controllers) - elif installer_type == "osa": + elif installer_type == "osa" or "compass": pass else: raise Exception('Unsupported installer') @@ -187,8 +187,7 @@ class SfcFunctest(testcase.TestCase): return testcase.TestCase.EX_RUN_ERROR -if __name__ == '__main__': - logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s' - '- %(levelname)s - %(message)s') +def main(): + logging.basicConfig(level=logging.INFO) SFC = SfcFunctest() sys.exit(SFC.run()) diff --git a/sfc/tests/functest/sfc_chain_deletion.py b/sfc/tests/functest/sfc_chain_deletion.py index 22d634e0..9fde460f 100644 --- a/sfc/tests/functest/sfc_chain_deletion.py +++ b/sfc/tests/functest/sfc_chain_deletion.py @@ -1,4 +1,4 @@ -#!/bin/python +#!/usr/bin/env python # # Copyright (c) 2015 All rights reserved # This program and the accompanying materials @@ -42,7 +42,7 @@ def main(): installer_type = os.environ.get("INSTALLER_TYPE") - supported_installers = ['fuel', 'apex', 'osa'] + supported_installers = ['fuel', 'apex', 'osa', 'compass'] if installer_type not in supported_installers: logger.error( @@ -155,14 +155,16 @@ def main(): logger.error('ERROR while booting vnfs') sys.exit(1) - neutron_port = openstack_sfc.get_client_port_id(client_instance) + neutron_port = openstack_sfc.get_client_port(client_instance, + client_creator) odl_utils.create_chain(tacker_client, default_param_file, neutron_port, COMMON_CONFIG, TESTCASE_CONFIG) # Start measuring the time it takes to implement the classification rules t1 = threading.Thread(target=odl_utils.wait_for_classification_rules, args=(ovs_logger, compute_nodes, odl_ip, - odl_port, openstack_sfc.get_compute_client(),)) + odl_port, openstack_sfc.get_compute_client(), + [neutron_port],)) try: t1.start() @@ -208,8 +210,9 @@ def main(): os_sfc_utils.delete_vnffgd(tacker_client, vnffgd_name='red') if not odl_utils.check_vnffg_deletion(odl_ip, odl_port, ovs_logger, - openstack_sfc.get_compute_client(), - compute_nodes): + [neutron_port], + openstack_sfc.get_compute_client(), + compute_nodes): logger.debug("The chains were not correctly removed") raise Exception("Chains not correctly removed, test failed") @@ -219,7 +222,8 @@ def main(): # Start measuring the time it takes to implement the classification rules t2 = threading.Thread(target=odl_utils.wait_for_classification_rules, args=(ovs_logger, compute_nodes, odl_ip, - odl_port, openstack_sfc.get_compute_client(),)) + odl_port, openstack_sfc.get_compute_client(), + [neutron_port],)) try: t2.start() except Exception as e: diff --git a/sfc/tests/functest/sfc_one_chain_two_service_functions.py b/sfc/tests/functest/sfc_one_chain_two_service_functions.py index 411262d1..07f7814c 100644 --- a/sfc/tests/functest/sfc_one_chain_two_service_functions.py +++ b/sfc/tests/functest/sfc_one_chain_two_service_functions.py @@ -43,7 +43,7 @@ def main(): installer_type = os.environ.get("INSTALLER_TYPE") - supported_installers = ['fuel', 'apex', 'osa'] + supported_installers = ['fuel', 'apex', 'osa', 'compass'] if installer_type not in supported_installers: logger.error( @@ -177,7 +177,8 @@ def main(): tosca_file=tosca_file, vnffgd_name='red') - neutron_port = openstack_sfc.get_client_port_id(client_instance) + neutron_port = openstack_sfc.get_client_port(client_instance, + client_creator) os_sfc_utils.create_vnffg_with_param_file(tacker_client, 'red', 'red_http', default_param_file, @@ -186,7 +187,8 @@ def main(): # Start measuring the time it takes to implement the classification rules t1 = threading.Thread(target=odl_utils.wait_for_classification_rules, args=(ovs_logger, compute_nodes, odl_ip, - odl_port, openstack_sfc.get_compute_client(),)) + odl_port, openstack_sfc.get_compute_client(), + [neutron_port],)) try: t1.start() except Exception as e: diff --git a/sfc/tests/functest/sfc_symmetric_chain.py b/sfc/tests/functest/sfc_symmetric_chain.py index b8d35514..43599d62 100644 --- a/sfc/tests/functest/sfc_symmetric_chain.py +++ b/sfc/tests/functest/sfc_symmetric_chain.py @@ -1,4 +1,4 @@ -#!/bin/python +#!/usr/bin/env python # # Copyright (c) 2017 Ericsson AB and others. All rights reserved # @@ -20,7 +20,7 @@ import opnfv.utils.ovs_logger as ovs_log from opnfv.deployment.factory import Factory as DeploymentFactory import sfc.lib.config as sfc_config -import sfc.lib.utils as test_utils +import sfc.lib.test_utils as test_utils from sfc.lib.results import Results import sfc.lib.topology_shuffler as topo_shuffler @@ -60,7 +60,7 @@ def main(): tacker_client = os_sfc_utils.get_tacker_client() - _, custom_flavor = openstack_sfc.get_or_create_flavor( + custom_flavor = openstack_sfc.create_flavor( COMMON_CONFIG.flavor, COMMON_CONFIG.ram_size_in_mb, COMMON_CONFIG.disk_size_in_gb, @@ -91,8 +91,9 @@ def main(): sg = openstack_sfc.create_security_group(TESTCASE_CONFIG.secgroup_name) vnf_name = 'testVNF1' - # Using seed=0 uses the baseline topology: everything in the same host - testTopology = topo_shuffler.topology([vnf_name], openstack_sfc, seed=0) + topo_seed = topo_shuffler.get_seed() + testTopology = topo_shuffler.topology([vnf_name], openstack_sfc, + seed=topo_seed) logger.info('This test is run with the topology {0}' .format(testTopology['id'])) logger.info('Topology description: {0}' @@ -100,15 +101,17 @@ def main(): client_instance, client_creator = openstack_sfc.create_instance( CLIENT, COMMON_CONFIG.flavor, image_creator, network, sg, - av_zone=testTopology['client']) + av_zone=testTopology[CLIENT]) server_instance, server_creator = openstack_sfc.create_instance( SERVER, COMMON_CONFIG.flavor, image_creator, network, sg, - av_zone=testTopology['server']) + av_zone=testTopology[SERVER]) server_ip = server_instance.ports[0].ips[0]['ip_address'] logger.info("Server instance received private ip [{}]".format(server_ip)) + os_sfc_utils.register_vim(tacker_client, vim_file=COMMON_CONFIG.vim_file) + tosca_file = os.path.join( COMMON_CONFIG.sfc_test_dir, COMMON_CONFIG.vnfd_dir, @@ -119,11 +122,15 @@ def main(): COMMON_CONFIG.vnfd_dir, COMMON_CONFIG.vnfd_default_params_file) - os_sfc_utils.create_vnfd(tacker_client, tosca_file=tosca_file) - test_utils.create_vnf_in_av_zone( + os_sfc_utils.create_vnfd( + tacker_client, + tosca_file=tosca_file, + vnfd_name='test-vnfd1') + os_sfc_utils.create_vnf_in_av_zone( tacker_client, vnf_name, 'test-vnfd1', + 'test-vim', default_param_file, testTopology[vnf_name]) @@ -132,37 +139,40 @@ def main(): logger.error('ERROR while booting VNF') sys.exit(1) - os_sfc_utils.create_sfc( + tosca_file = os.path.join( + COMMON_CONFIG.sfc_test_dir, + COMMON_CONFIG.vnffgd_dir, + TESTCASE_CONFIG.test_vnffgd) + os_sfc_utils.create_vnffgd( + tacker_client, + tosca_file=tosca_file, + vnffgd_name='test-vnffgd') + + client_port = openstack_sfc.get_client_port( + client_instance, + client_creator) + server_port = openstack_sfc.get_client_port( + server_instance, + server_creator) + + server_ip_prefix = server_ip + '/32' + + os_sfc_utils.create_vnffg_with_param_file( tacker_client, - sfc_name='red', - chain_vnf_names=[vnf_name], - symmetrical=True) - - os_sfc_utils.create_sfc_classifier( - tacker_client, 'red_http', sfc_name='red', - match={ - 'source_port': 0, - 'dest_port': 80, - 'protocol': 6 - }) - - # FIXME: JIRA SFC-86 - # Tacker does not allow to specify the direction of the chain to be used, - # only references the SFP (which for symmetric chains results in two RSPs) - os_sfc_utils.create_sfc_classifier( - tacker_client, 'red_http_reverse', sfc_name='red', - match={ - 'source_port': 80, - 'dest_port': 0, - 'protocol': 6 - }) - - logger.info(test_utils.run_cmd('tacker sfc-list')) - logger.info(test_utils.run_cmd('tacker sfc-classifier-list')) + 'test-vnffgd', + 'test-vnffg', + default_param_file, + client_port.id, + server_port.id, + server_ip_prefix) # Start measuring the time it takes to implement the classification rules - t1 = threading.Thread(target=odl_utils.wait_for_classification_rules, - args=(ovs_logger, compute_nodes, odl_ip, odl_port,)) + t1 = threading.Thread( + target=wait_for_classification_rules, + args=(ovs_logger, compute_nodes, + openstack_sfc.get_compute_server(), server_port, + openstack_sfc.get_compute_client(), client_port, + odl_ip, odl_port,)) try: t1.start() @@ -176,15 +186,19 @@ def main(): server_floating_ip = openstack_sfc.assign_floating_ip(router, server_instance, server_creator) - fips_sfs = openstack_sfc.assign_floating_ip_vnfs(router) + + vnf_ip = os_sfc_utils.get_vnf_ip(tacker_client, vnf_id=vnf_id) + fips_sfs = openstack_sfc.assign_floating_ip_vnfs(router, [vnf_ip]) sf_floating_ip = fips_sfs[0] - fips = [client_floating_ip, server_floating_ip, fips_sfs[0]] + fips = [client_floating_ip, server_floating_ip, sf_floating_ip] for ip in fips: logger.info("Checking connectivity towards floating IP [%s]" % ip) if not test_utils.ping(ip, retries=50, retry_timeout=3): logger.error("Cannot ping floating IP [%s]" % ip) + os_sfc_utils.get_tacker_items() + odl_utils.get_odl_items(odl_ip, odl_port) sys.exit(1) logger.info("Successful ping to floating IP [%s]" % ip) @@ -197,39 +211,124 @@ def main(): logger.error('\033[91mFailed to start the HTTP server\033[0m') sys.exit(1) - blocked_port = TESTCASE_CONFIG.blocked_source_port - logger.info("Firewall started, blocking traffic port %d" % blocked_port) - test_utils.start_vxlan_tool(sf_floating_ip, block=blocked_port) + logger.info("Starting vxlan_tool on %s" % sf_floating_ip) + test_utils.start_vxlan_tool(sf_floating_ip, interface='eth0', + output='eth1') + test_utils.start_vxlan_tool(sf_floating_ip, interface='eth1', + output='eth0') logger.info("Wait for ODL to update the classification rules in OVS") t1.join() - allowed_port = TESTCASE_CONFIG.allowed_source_port - logger.info("Test if HTTP from port %s works" % allowed_port) - if not test_utils.is_http_blocked( - client_floating_ip, server_ip, allowed_port): + logger.info("Test HTTP") + if not test_utils.is_http_blocked(client_floating_ip, + server_ip, + TESTCASE_CONFIG.source_port): results.add_to_summary(2, "PASS", "HTTP works") else: error = ('\033[91mTEST 1 [FAILED] ==> HTTP BLOCKED\033[0m') logger.error(error) test_utils.capture_ovs_logs( ovs_logger, controller_clients, compute_clients, error) + results.add_to_summary(2, "FAIL", "HTTP blocked") + + logger.info("Changing the vxlan_tool to block HTTP request traffic") + + # Make SF1 block http request traffic + test_utils.stop_vxlan_tool(sf_floating_ip) + logger.info("Starting HTTP firewall on %s" % sf_floating_ip) + test_utils.start_vxlan_tool(sf_floating_ip, interface='eth0', + output='eth1', block="80") + test_utils.start_vxlan_tool(sf_floating_ip, interface='eth1', + output='eth0') + + logger.info("Test HTTP again blocking request on SF1") + if test_utils.is_http_blocked(client_floating_ip, + server_ip, + TESTCASE_CONFIG.source_port): + results.add_to_summary(2, "PASS", "HTTP uplink blocked") + else: + error = ('\033[91mTEST 2 [FAILED] ==> HTTP WORKS\033[0m') + logger.error(error) + test_utils.capture_ovs_logs( + ovs_logger, controller_clients, compute_clients, error) results.add_to_summary(2, "FAIL", "HTTP works") - logger.info("Test if HTTP from port %s is blocked" % blocked_port) - if test_utils.is_http_blocked( - client_floating_ip, server_ip, blocked_port): - results.add_to_summary(2, "PASS", "HTTP Blocked") + logger.info("Changing the vxlan_tool to block HTTP response traffic") + + # Make SF1 block response http traffic + test_utils.stop_vxlan_tool(sf_floating_ip) + logger.info("Starting HTTP firewall on %s" % sf_floating_ip) + test_utils.start_vxlan_tool(sf_floating_ip, interface='eth0', + output='eth1') + test_utils.start_vxlan_tool(sf_floating_ip, interface='eth1', + output='eth0', + block=TESTCASE_CONFIG.source_port) + + logger.info("Test HTTP again blocking response on SF1") + if test_utils.is_http_blocked(client_floating_ip, + server_ip, + TESTCASE_CONFIG.source_port): + results.add_to_summary(2, "PASS", "HTTP downlink blocked") else: - error = ('\033[91mTEST 2 [FAILED] ==> HTTP WORKS\033[0m') + error = ('\033[91mTEST 3 [FAILED] ==> HTTP WORKS\033[0m') logger.error(error) test_utils.capture_ovs_logs( ovs_logger, controller_clients, compute_clients, error) - results.add_to_summary(2, "FAIL", "HTTP Blocked") + results.add_to_summary(2, "FAIL", "HTTP works") + + logger.info("Changing the vxlan_tool to allow HTTP traffic") + + # Make SF1 allow http traffic + test_utils.stop_vxlan_tool(sf_floating_ip) + logger.info("Starting HTTP firewall on %s" % sf_floating_ip) + test_utils.start_vxlan_tool(sf_floating_ip, interface='eth0', + output='eth1') + test_utils.start_vxlan_tool(sf_floating_ip, interface='eth1', + output='eth0') + + logger.info("Test HTTP") + if not test_utils.is_http_blocked(client_floating_ip, server_ip): + results.add_to_summary(2, "PASS", "HTTP restored") + else: + error = ('\033[91mTEST 4 [FAILED] ==> HTTP BLOCKED\033[0m') + logger.error(error) + test_utils.capture_ovs_logs( + ovs_logger, controller_clients, compute_clients, error) + results.add_to_summary(2, "FAIL", "HTTP blocked") return results.compile_summary(), openstack_sfc.creators +def wait_for_classification_rules(ovs_logger, compute_nodes, + server_compute, server_port, + client_compute, client_port, + odl_ip, odl_port): + if client_compute == server_compute: + odl_utils.wait_for_classification_rules( + ovs_logger, + compute_nodes, + odl_ip, + odl_port, + client_compute, + [server_port, client_port]) + else: + odl_utils.wait_for_classification_rules( + ovs_logger, + compute_nodes, + odl_ip, + odl_port, + server_compute, + server_port) + odl_utils.wait_for_classification_rules( + ovs_logger, + compute_nodes, + odl_ip, + odl_port, + client_compute, + client_port) + + if __name__ == '__main__': logging.config.fileConfig(COMMON_CONFIG.functest_logging_api) main() diff --git a/sfc/tests/functest/sfc_two_chains_SSH_and_HTTP.py b/sfc/tests/functest/sfc_two_chains_SSH_and_HTTP.py index 9d4c68c8..a5133f00 100644 --- a/sfc/tests/functest/sfc_two_chains_SSH_and_HTTP.py +++ b/sfc/tests/functest/sfc_two_chains_SSH_and_HTTP.py @@ -1,4 +1,4 @@ -#!/bin/python +#!/usr/bin/env python # # Copyright (c) 2015 All rights reserved # This program and the accompanying materials @@ -42,7 +42,7 @@ def main(): installer_type = os.environ.get("INSTALLER_TYPE") - supported_installers = ['fuel', 'apex', 'osa'] + supported_installers = ['fuel', 'apex', 'osa', 'compass'] if installer_type not in supported_installers: logger.error( @@ -175,7 +175,8 @@ def main(): tosca_file=tosca_file, vnffgd_name='red') - neutron_port = openstack_sfc.get_client_port_id(client_instance) + neutron_port = openstack_sfc.get_client_port(client_instance, + client_creator) os_sfc_utils.create_vnffg_with_param_file(tacker_client, 'red', 'red_http', default_param_file, @@ -184,7 +185,8 @@ def main(): # Start measuring the time it takes to implement the classification rules t1 = threading.Thread(target=odl_utils.wait_for_classification_rules, args=(ovs_logger, compute_nodes, odl_ip, - odl_port, openstack_sfc.get_compute_client(),)) + odl_port, openstack_sfc.get_compute_client(), + [neutron_port],)) try: t1.start() @@ -274,7 +276,8 @@ def main(): # Start measuring the time it takes to implement the classification rules t2 = threading.Thread(target=odl_utils.wait_for_classification_rules, args=(ovs_logger, compute_nodes, odl_ip, - odl_port, openstack_sfc.get_compute_client(),)) + odl_port, openstack_sfc.get_compute_client(), + [neutron_port],)) try: t2.start() except Exception as e: diff --git a/sfc/tests/functest/vnfd-templates/test-symmetric-vnfd.yaml b/sfc/tests/functest/vnfd-templates/test-symmetric-vnfd.yaml index 1f4c11f6..bf175ef7 100644 --- a/sfc/tests/functest/vnfd-templates/test-symmetric-vnfd.yaml +++ b/sfc/tests/functest/vnfd-templates/test-symmetric-vnfd.yaml @@ -15,12 +15,15 @@ topology_template: nfv_compute: properties: num_cpus: 1 - mem_size: 2 GB - disk_size: 10 GB + mem_size: 500 MB + disk_size: 1 GB properties: - image: sfc_nsh_euphrates + image: sfc_nsh_fraser availability_zone: {get_input: zone} mgmt_driver: noop + config: | + param0: key1 + param1: key2 service_type: firewall monitoring_policy: name: ping @@ -46,6 +49,18 @@ topology_template: - virtualBinding: node: VDU1 + CP2: + type: tosca.nodes.nfv.CP.Tacker + properties: + management: false + order: 1 + anti_spoofing_protection: false + requirements: + - virtualLink: + node: VL1 + - virtualBinding: + node: VDU1 + VL1: type: tosca.nodes.nfv.VL properties: diff --git a/sfc/tests/functest/vnffgd-templates/test-deletion-vnffgd.yaml-queens b/sfc/tests/functest/vnffgd-templates/test-deletion-vnffgd-pike.yaml index 28b78ead..3f10e6b8 100644 --- a/sfc/tests/functest/vnffgd-templates/test-deletion-vnffgd.yaml-queens +++ b/sfc/tests/functest/vnffgd-templates/test-deletion-vnffgd-pike.yaml @@ -18,8 +18,8 @@ topology_template: type: ACL criteria: - network_src_port_id: {get_input: net_src_port_id} - destination_port_range: 80-80 - ip_proto: 6 + - destination_port_range: 80-80 + - ip_proto: 6 path: - forwarder: test-vnfd1 capability: CP1 diff --git a/sfc/tests/functest/vnffgd-templates/test-deletion-vnffgd.yaml b/sfc/tests/functest/vnffgd-templates/test-deletion-vnffgd.yaml index 3f10e6b8..28b78ead 100644 --- a/sfc/tests/functest/vnffgd-templates/test-deletion-vnffgd.yaml +++ b/sfc/tests/functest/vnffgd-templates/test-deletion-vnffgd.yaml @@ -18,8 +18,8 @@ topology_template: type: ACL criteria: - network_src_port_id: {get_input: net_src_port_id} - - destination_port_range: 80-80 - - ip_proto: 6 + destination_port_range: 80-80 + ip_proto: 6 path: - forwarder: test-vnfd1 capability: CP1 diff --git a/sfc/tests/functest/vnffgd-templates/test-one-chain-vnffgd.yaml-queens b/sfc/tests/functest/vnffgd-templates/test-one-chain-vnffgd-pike.yaml index 544d6e8e..27c7d545 100644 --- a/sfc/tests/functest/vnffgd-templates/test-one-chain-vnffgd.yaml-queens +++ b/sfc/tests/functest/vnffgd-templates/test-one-chain-vnffgd-pike.yaml @@ -18,8 +18,8 @@ topology_template: type: ACL criteria: - network_src_port_id: {get_input: net_src_port_id} - destination_port_range: 80-80 - ip_proto: 6 + - destination_port_range: 80-80 + - ip_proto: 6 path: - forwarder: test-vnfd1 capability: CP1 diff --git a/sfc/tests/functest/vnffgd-templates/test-one-chain-vnffgd.yaml b/sfc/tests/functest/vnffgd-templates/test-one-chain-vnffgd.yaml index 27c7d545..544d6e8e 100644 --- a/sfc/tests/functest/vnffgd-templates/test-one-chain-vnffgd.yaml +++ b/sfc/tests/functest/vnffgd-templates/test-one-chain-vnffgd.yaml @@ -18,8 +18,8 @@ topology_template: type: ACL criteria: - network_src_port_id: {get_input: net_src_port_id} - - destination_port_range: 80-80 - - ip_proto: 6 + destination_port_range: 80-80 + ip_proto: 6 path: - forwarder: test-vnfd1 capability: CP1 diff --git a/sfc/tests/functest/vnffgd-templates/test-symmetric-vnffgd.yaml b/sfc/tests/functest/vnffgd-templates/test-symmetric-vnffgd.yaml new file mode 100644 index 00000000..6b14df1b --- /dev/null +++ b/sfc/tests/functest/vnffgd-templates/test-symmetric-vnffgd.yaml @@ -0,0 +1,46 @@ +--- +tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0 +description: test-case-symmetric + +topology_template: + description: topology-template-test1 + inputs: + net_src_port_id: + type: string + net_dst_port_id: + type: string + ip_dst_prefix: + type: string + + node_templates: + Forwarding_path1: + type: tosca.nodes.nfv.FP.Tacker + description: creates path + properties: + id: 1 + policy: + type: ACL + criteria: + - network_src_port_id: {get_input: net_src_port_id} + - network_dst_port_id: {get_input: net_dst_port_id} + - ip_dst_prefix: {get_input: ip_dst_prefix} + - destination_port_range: 80-80 + - ip_proto: 6 + path: + - forwarder: test-vnfd1 + capability: CP1 + - forwarder: test-vnfd1 + capability: CP2 + + groups: + VNFFG1: + type: tosca.groups.nfv.VNFFG + description: creates chain + properties: + vendor: tacker + version: 1.0 + number_of_endpoints: 2 + dependent_virtual_link: [VL1, VL1] + connection_point: [CP1, CP2] + constituent_vnfs: [test-vnfd1, test-vnfd1] + members: [Forwarding_path1] diff --git a/sfc/tests/functest/vnffgd-templates/test-symmetric-vnffgd.yaml-queens b/sfc/tests/functest/vnffgd-templates/test-symmetric-vnffgd.yaml-queens new file mode 100644 index 00000000..c40c447c --- /dev/null +++ b/sfc/tests/functest/vnffgd-templates/test-symmetric-vnffgd.yaml-queens @@ -0,0 +1,46 @@ +--- +tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0 +description: test-case-symmetric + +topology_template: + description: topology-template-test1 + inputs: + net_src_port_id: + type: string + net_dst_port_id: + type: string + ip_dst_prefix: + type: string + + node_templates: + Forwarding_path1: + type: tosca.nodes.nfv.FP.Tacker + description: creates path + properties: + id: 1 + policy: + type: ACL + criteria: + - network_src_port_id: {get_input: net_src_port_id} + network_dst_port_id: {get_input: net_dst_port_id} + ip_dst_prefix: {get_input: ip_dst_prefix} + destination_port_range: 80-80 + ip_proto: 6 + path: + - forwarder: test-vnfd1 + capability: CP1 + - forwarder: test-vnfd1 + capability: CP2 + + groups: + VNFFG1: + type: tosca.groups.nfv.VNFFG + description: creates chain + properties: + vendor: tacker + version: 1.0 + number_of_endpoints: 2 + dependent_virtual_link: [VL1, VL1] + connection_point: [CP1, CP2] + constituent_vnfs: [test-vnfd1, test-vnfd1] + members: [Forwarding_path1] diff --git a/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd1.yaml-queens b/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd1-pike.yaml index 9df28b50..f0615e4e 100644 --- a/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd1.yaml-queens +++ b/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd1-pike.yaml @@ -18,8 +18,8 @@ topology_template: type: ACL criteria: - network_src_port_id: {get_input: net_src_port_id} - destination_port_range: 22-80 - ip_proto: 6 + - destination_port_range: 22-80 + - ip_proto: 6 path: - forwarder: test-vnfd1 capability: CP1 diff --git a/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd1.yaml b/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd1.yaml index f0615e4e..ceee363b 100644 --- a/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd1.yaml +++ b/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd1.yaml @@ -1,25 +1,32 @@ --- tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0 -description: test-case2_HTTP Test +description: test-two-chains_HTTP Test topology_template: - description: topology-template-test2 + description: topology-template-test-two-chains inputs: net_src_port_id: type: string node_templates: Forwarding_path1: - type: tosca.nodes.nfv.FP.Tacker + type: tosca.nodes.nfv.FP.TackerV2 description: creates path properties: id: 1 policy: type: ACL criteria: - - network_src_port_id: {get_input: net_src_port_id} - - destination_port_range: 22-80 - - ip_proto: 6 + - name: get_ssh + classifier: + network_src_port_id: {get_input: net_src_port_id} + destination_port_range: 22-22 + ip_proto: 6 + - name: get_http + classifier: + network_src_port_id: {get_input: net_src_port_id} + destination_port_range: 80-80 + ip_proto: 6 path: - forwarder: test-vnfd1 capability: CP1 diff --git a/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd2.yaml-queens b/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd2-pike.yaml index ef24ffa0..ec18c9d6 100644 --- a/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd2.yaml-queens +++ b/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd2-pike.yaml @@ -19,8 +19,8 @@ topology_template: type: ACL criteria: - network_src_port_id: {get_input: net_src_port_id} - destination_port_range: 22-80 - ip_proto: 6 + - destination_port_range: 22-80 + - ip_proto: 6 path: - forwarder: test-vnfd2 capability: CP1 diff --git a/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd2.yaml b/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd2.yaml index ec18c9d6..15739cc7 100644 --- a/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd2.yaml +++ b/sfc/tests/functest/vnffgd-templates/test-two-chains-vnffgd2.yaml @@ -1,26 +1,32 @@ --- tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0 -description: test-case2_SSH Test +description: test-two-chains_SSH Test topology_template: - description: topology-template-test2 + description: topology-template-test-two-chains inputs: net_src_port_id: type: string - node_templates: Forwarding_path1: - type: tosca.nodes.nfv.FP.Tacker + type: tosca.nodes.nfv.FP.TackerV2 description: creates path properties: id: 2 policy: type: ACL criteria: - - network_src_port_id: {get_input: net_src_port_id} - - destination_port_range: 22-80 - - ip_proto: 6 + - name: get_ssh + classifier: + network_src_port_id: {get_input: net_src_port_id} + destination_port_range: 22-22 + ip_proto: 6 + - name: get_http + classifier: + network_src_port_id: {get_input: net_src_port_id} + destination_port_range: 80-80 + ip_proto: 6 path: - forwarder: test-vnfd2 capability: CP1 |