We are ecstatic to announce the release of: tacker 3.0.0: OpenStack NFV Orchestration This release is part of the ussuri release series. The source is available from: https://opendev.org/openstack/tacker Download the package from: https://tarballs.openstack.org/tacker/ Please report issues through: https://bugs.launchpad.net/tacker/+bugs For more details, please see below. Changes in tacker 2.0.0..3.0.0 ------------------------------ ebaefbed Imported Translations from Zanata c10dd3f1 Auth parameters for uploading vnf package from URI 5d97f8fa Fetch an on-boarded VNF package with HTTP_RANGE 0dd7595c Update TOX_CONSTRAINTS_FILE for stable/ussuri 10e982e1 Update .gitreview for stable/ussuri 4a2fd6c2 Update hacking for Python3 70ac63d8 Remove 'vnf_packages' key from vnf package list response 0210cb1d Adding Multi-Interface for Containerized VNF in Tacker 62813239 Support LCM operation with user data 3f5c8160 Support attribute filtering for GET /vnf_packages API cfaa39d7 Add db support to filter vnf packages 9c74c42a Add schema to validate query parameter 7fb68fae Add filter rule engine to process filter query 12badc24 Add API documentation for vnflcm APIs 428096a2 Add functional tests for vnflcm APIs 840d7548 Add delete vnf instance API 31beaa32 Fix FT vnf package functional tests 298d089b Remove extensions from vnf package wsgi app c45c877f Add list vnf instance API cff8c756 Sychronize vnf action tasks b4f357f2 Add heal vnf instance API fbb38266 Add terminate vnf instance API 19ff0032 Add show vnf instance API a1459062 Add instantiate vnf instance API 90a0b59a Multi-Interface for C-VNF User Guide 533dcd6b Set working directory in tacker conductor service 2779a38b Add create vnf instance API aa3508fb Add version objects and db apis for vnf lcm 30fcfcc0 Add db script for vnf lcm changes f03b615b Implement RestFul API to read VNFD of an on-boarded VNF package 848ab62a Fix upload vnf_package with single yaml file csar 55b96c51 Add unique constraint on vnfd_id column dcbeac52 Add vnflcm support base framework c74cad52 Add VNF package update API 067d0037 Fix the functional test devstack job 6bf9c073 Fix: Failing two unit tests due to heat-translator bc353d80 Fix k8s features for pyhton3 support 98a67d5b Cleanup Python 2.7 support 3f3cee41 Support updating VNF parameters in tacker c4cd7c80 Ensure to use python3 to install horizon 364ce692 Ping monitor ignores retry parameter 55319282 remove external dependency from devstack 33f92086 Delete vnf package if operationalState is DISABLED 93826207 Delete VNF should fail with 409 error 71658dc9 Drop python 2.7 support and testing 9dd0823c Support patch to fix window style line ending 8ee4d0d4 remove upper-constraints.txt from lower-const job bdb2d52b Fix bug that causes InternalServerError in FT 3b184438 Fix assertTrue in verifying whether data type is list c3263b83 Start README.rst with a better title 86cfa2af Fix bytestring bugs in Python3.7 unittest 83bc8468 Allow VNF package upload without policies 448eb618 Switch to Ussuri jobs af4cdf08 Fix gate job for test_vnf_param_with_artifacts_image_tosca_template b320839d Delete test_create_vnffg_pre() for Python3 unittest 85a51088 update manual_installation.rst for vnf package 61520ccc Imported Translations from Zanata c90ba7d7 Update master for stable/train 4a4ce82a python2/3 cmpatible sorted function Diffstat (except docs and test files) ------------------------------------- .gitreview | 1 + .zuul.yaml | 77 +- README.rst | 6 +- api-ref/source/conf.py | 5 +- api-ref/source/v1/index.rst | 1 + api-ref/source/v1/parameters.yaml | 54 + api-ref/source/v1/parameters_vnflcm.yaml | 737 ++++++++++ .../vnf_packages/vnf-packages-patch-request.json | 7 + .../vnf_packages/vnf-packages-patch-response.json | 6 + .../vnflcm/create-vnf-instance-request.json | 5 + .../vnflcm/create-vnf-instance-response.json | 19 + .../samples/vnflcm/heal-vnf-instance-request.json | 4 + .../vnflcm/instantiate-vnf-instance-request.json | 68 + .../samples/vnflcm/list-vnf-instance-response.json | 175 +++ .../samples/vnflcm/show-vnf-instance-response.json | 173 +++ .../vnflcm/terminate-vnf-instance-request.json | 4 + .../v1/samples/vnfs/vnfs-delete-request.json | 8 + api-ref/source/v1/status.yaml | 16 + api-ref/source/v1/vnf_packages.inc | 653 +++++---- api-ref/source/v1/vnflcm.inc | 527 +++++++ api-ref/source/v1/vnfs.inc | 14 + devstack/lib/tacker | 61 +- .../contributor/vnfd_template_description.rst | 43 +- etc/tacker/api-paste.ini | 13 +- lower-constraints.txt | 24 +- ...-get-vnfpackages-response-d9211712cf419bef.yaml | 14 + .../notes/drop-py-2-7-8db9ceef15903295.yaml | 6 + releasenotes/source/index.rst | 1 + .../locale/en_GB/LC_MESSAGES/releasenotes.po | 547 -------- releasenotes/source/train.rst | 6 + requirements.txt | 11 +- .../openwrt-x86-kvm_guest-combined-ext4.img.gz | Bin 0 -> 3915400 bytes setup.cfg | 11 +- setup.py | 8 - tacker/api/api_common.py | 16 +- tacker/api/common/__init__.py | 0 tacker/api/common/_filters.py | 403 ++++++ tacker/api/common/attribute_filter.py | 259 ++++ tacker/api/schemas/vnf_lcm.py | 228 +++ tacker/api/schemas/vnf_packages.py | 31 + tacker/api/v1/attributes.py | 4 +- tacker/api/v1/base.py | 17 +- tacker/api/validation/__init__.py | 40 + tacker/api/validation/parameter_types.py | 143 ++ tacker/api/validation/validators.py | 53 +- tacker/api/views/__init__.py | 92 ++ tacker/api/views/vnf_lcm.py | 75 + tacker/api/views/vnf_packages.py | 137 +- tacker/api/vnflcm/__init__.py | 0 tacker/api/vnflcm/v1/__init__.py | 0 tacker/api/vnflcm/v1/controller.py | 325 +++++ tacker/api/vnflcm/v1/router.py | 92 ++ tacker/api/vnfpkgm/v1/controller.py | 359 ++++- tacker/api/vnfpkgm/v1/router.py | 12 +- tacker/cmd/eventlet/tacker_server.py | 2 - tacker/common/clients.py | 39 + tacker/common/config.py | 2 + tacker/common/coordination.py | 156 +++ tacker/common/csar_utils.py | 79 +- tacker/common/driver_manager.py | 1 - tacker/common/exceptions.py | 76 + tacker/common/utils.py | 171 ++- tacker/conductor/conductor_server.py | 223 ++- tacker/conductor/conductorrpc/vnf_lcm_rpc.py | 62 + tacker/conductor/conductorrpc/vnf_pkgm_rpc.py | 9 + tacker/conf/__init__.py | 4 +- tacker/conf/coordination.py | 33 + tacker/db/db_sqlalchemy/models.py | 81 +- .../000632983ada_add_template_source_column.py | 2 + ...ad3bbce1c18_create_of_network_service_tables.py | 2 + .../0ae5b1ce3024_unique_constraint_name.py | 2 + .../versions/12a57080b277_add_service_db.py | 2 + .../versions/12a57080b278_alter_devices.py | 2 + .../versions/13c0e0661015_add_descrition_to_vnf.py | 2 + ...3ecc2dd6f7f_change_nullable_value_of_path_id.py | 2 + .../versions/1c6b0d82afcd_servicevm_framework.py | 2 + .../versions/22f5385a3d3f_add_status_to_vims.py | 2 + .../versions/22f5385a3d4f_remove_proxydb.py | 2 + .../versions/22f5385a3d50_rename_devicedb.py | 2 + ...24bec5f211c7_alter_value_in_deviceattributes.py | 2 + .../2774a42c7163_remove_service_related.py | 2 + .../versions/2ff0a0e360f1_audit_support.py | 2 + ...baeb8299_change_vim_shared_property_to_false.py | 2 + .../354de64ba129_set_mandatory_columns_not_null.py | 2 + ...747cc26b9c6_add_support_vnffg_to_ns_database.py | 2 + .../versions/4ee19c8a6d0a_audit_support_events.py | 2 + .../versions/507122918800_adds_vnffg.py | 2 + .../versions/5246a6bd410f_multisite_vim.py | 2 + .../5958429bcb3c_modify_datatype_of_value.py | 2 + .../5d490546290c_add_name_to_classifiers.py | 2 + ...f88e86b35c7_make_vnfd_vnf_vim_name_mandatory.py | 2 + .../versions/81ffa86020d_rpc_proxy.py | 2 + .../8f7145914cb0_remove_infra_driver_column.py | 2 + .../versions/941b5a6fff9e_enable_soft_delete.py | 2 + ...975e28392888_add_unique_key_vnf_package_vnfd.py | 62 + .../versions/985e28392890_add_vnflcm_db.py | 109 ++ .../versions/9d425296f2c3_add_vnfpkgm_db.py | 2 + .../db/migration/alembic_migrations/versions/HEAD | 2 +- ..._unique_constraint_on_vnf_packages_user_data.py | 40 + .../acf941e54075_add_error_reason_to_device.py | 2 + ...07673bb8654_set_status_type_tenant_id_length.py | 2 + ...256228ed37c_unique_constraint_on_name_and_id.py | 2 + .../c7cde2f45f82_set_description_to_text.py | 2 + .../cd04a8335c18_mgmt_url_to_mgmt_ip_address.py | 2 + .../d2e39e01d540_add_size_to_vnfpackage.py | 37 + .../versions/d4f265e8eb9d_add_default_to_vim.py | 2 + ...3093baf1_add_unique_constraint_on_deleted_at.py | 2 + .../e8918cda6433_add_attributes_to_vnffg.py | 2 + ...plate_source_status_to_vnffgtemplate_and_nsd.py | 2 + ...026327_add_default_onboarded_template_source.py | 2 + ...5c1c3b0f6b4_set_default_value_for_deleted_at.py | 2 + .../versions/f958f58e5daa_uuid_consistency.py | 6 +- tacker/db/vnfm/vnfm_db.py | 47 +- tacker/extensions/vnflcm.py | 31 + tacker/extensions/vnfm.py | 13 + tacker/glance_store/store.py | 61 +- tacker/hacking/checks.py | 12 +- tacker/keymgr/barbican_key_manager.py | 8 +- tacker/locale/de/LC_MESSAGES/tacker.po | 133 +- tacker/manager.py | 8 + tacker/nfvo/drivers/vim/openstack_driver.py | 44 +- tacker/nfvo/drivers/workflow/workflow_generator.py | 2 - tacker/nfvo/nfvo_plugin.py | 4 +- tacker/objects/__init__.py | 6 + tacker/objects/base.py | 14 + tacker/objects/fields.py | 58 + tacker/objects/heal_vnf_request.py | 18 +- tacker/objects/instantiate_vnf_req.py | 570 ++++++++ tacker/objects/terminate_vnf_req.py | 54 + tacker/objects/vim_connection.py | 58 + tacker/objects/vnf_deployment_flavour.py | 19 + tacker/objects/vnf_instance.py | 284 ++++ tacker/objects/vnf_instantiated_info.py | 985 +++++++++++++ tacker/objects/vnf_package.py | 314 ++++- tacker/objects/vnf_package_vnfd.py | 35 +- tacker/objects/vnf_resources.py | 176 +++ tacker/objects/vnf_software_image.py | 92 +- tacker/policies/__init__.py | 56 +- tacker/policies/vnf_lcm.py | 106 ++ tacker/policies/vnf_package.py | 31 + tacker/policy.py | 2 +- tacker/service.py | 2 + .../Definitions/etsi_nfv_sol001_common_types.yaml | 204 +++ .../Definitions/etsi_nfv_sol001_vnfd_types.yaml | 1468 ++++++++++++++++++++ .../Files/images/cirros-0.4.0-x86_64-disk.img | Bin 0 -> 12716032 bytes .../Files/images/cirros-0.4.0-x86_64-disk.img | 1 + .../vnfd_helloworld_single.yaml | 1266 +++++++++++++++++ .../sample_lcm_with_user_data_df_simple.yaml | 94 ++ .../sample_lcm_with_user_data_top.vnfd.yaml | 31 + .../sample_lcm_with_user_data_types.yaml | 53 + .../sample_lcm_with_user_data_invalid_hot.yaml | 32 + .../TOSCA-Metadata/TOSCA.meta | 7 + .../UserData/__init__.py | 0 .../UserData/lcm_user_data.py | 39 + .../user_data_sample_non_dict/UserData/__init__.py | 0 .../UserData/lcm_user_data_non_dict.py | 26 + .../BaseHOT/sample_lcm_with_user_data_hot.yaml | 32 + .../TOSCA-Metadata/TOSCA.meta | 7 + .../user_data_sample_normal/UserData/__init__.py | 0 .../UserData/lcm_user_data.py | 39 + .../BaseHOT/sample_lcm_with_user_data_hot.yaml | 32 + .../TOSCA-Metadata/TOSCA.meta | 7 + .../UserData/__init__.py | 0 .../UserData/lcm_user_data_invalid_hot_param.py | 39 + .../BaseHOT/sample_lcm_with_user_data_hot.yaml | 32 + .../TOSCA-Metadata/TOSCA.meta | 7 + .../UserData/__init__.py | 0 .../UserData/lcm_user_data_invalid_script.py | 28 + .../BaseHOT/sample_lcm_with_user_data_hot.yaml | 32 + .../TOSCA-Metadata/TOSCA.meta | 7 + .../UserData/__init__.py | 0 .../BaseHOT/sample_lcm_with_user_data_hot.yaml | 32 + .../TOSCA-Metadata/TOSCA.meta | 7 + .../UserData/__init__.py | 0 .../UserData/lcm_user_data_sleeping.py | 51 + .../vnflcm1/Definitions/helloworld3_df_simple.yaml | 202 +++ .../vnflcm1/Definitions/helloworld3_top.vnfd.yaml | 31 + .../nfv/vnflcm1/Definitions/helloworld3_types.yaml | 53 + .../etsi/nfv/vnflcm1/TOSCA-Metadata/TOSCA.meta | 7 + .../vnflcm2/Definitions/helloworld3_df_simple.yaml | 193 +++ .../vnflcm2/Definitions/helloworld3_top.vnfd.yaml | 31 + .../nfv/vnflcm2/Definitions/helloworld3_types.yaml | 53 + .../etsi/nfv/vnflcm2/TOSCA-Metadata/TOSCA.meta | 7 + .../Definitions/helloworld3.vnfd.tosca.yaml | 32 + .../nfv/vnflcm3/Definitions/helloworld3VNF.yaml | 53 + .../Definitions/helloworld3simple.vnfd.tosca.yaml | 129 ++ .../etsi/nfv/vnflcm3/TOSCA-Metadata/TOSCA.meta | 7 + .../Definitions/helloworld3_df_simple.yaml | 275 ++++ .../vnfpkgm1/Definitions/helloworld3_top.vnfd.yaml | 31 + .../vnfpkgm1/Definitions/helloworld3_types.yaml | 53 + .../etsi/nfv/vnfpkgm1/TOSCA-Metadata/TOSCA.meta | 7 + .../Definitions/helloworld3_df_simple.yaml | 275 ++++ .../vnfpkgm2/Definitions/helloworld3_top.vnfd.yaml | 31 + .../vnfpkgm2/Definitions/helloworld3_types.yaml | 53 + .../etsi/nfv/vnfpkgm2/TOSCA-Metadata/TOSCA.meta | 7 + .../instantiate_vnf_request_lcm_userdata.json | 34 + .../samples/sample-tosca-vnf-update-values.yaml | 3 + .../sample_vnf_package_csar_with_policy.zip | Bin 0 -> 12190368 bytes ...sample_vnf_package_csar_with_short_notation.zip | Bin 0 -> 17751 bytes .../sample_vnf_package_csar_without_policy.zip | Bin 0 -> 12189925 bytes .../samples/sample_vnfpkg_no_meta_single_vnfd.zip | Bin 0 -> 9457 bytes .../vnflcm/test_vnf_instance_with_user_data.py | 501 +++++++ .../conductor/conductorrpc/test_vnf_pkgm_rpc.py | 177 +-- .../unit/objects/test_terminate_vnf_request.py | 51 + .../unit/objects/test_vnf_instantiated_info.py | 278 ++++ .../etsi_nfv/etsi_nfv_sol001_common_types.yaml | 202 +++ .../data/etsi_nfv/etsi_nfv_sol001_vnfd_types.yaml | 1352 ++++++++++++++++++ .../etsi_nfv/hot/hot_generate_hot_from_tosca.yaml | 65 + .../hot_generate_hot_from_tosca_with_scaling.yaml | 61 + .../etsi_nfv/hot/scaling/worker_instance.hot.yaml | 41 + .../etsi_nfv/tosca_generate_hot_from_tosca.yaml | 115 ++ ...tosca_generate_hot_from_tosca_parser_error.yaml | 16 + ...a_generate_hot_from_tosca_translator_error.yaml | 48 + ..._generate_hot_from_tosca_with_params_error.yaml | 197 +++ ...tosca_generate_hot_from_tosca_with_scaling.yaml | 183 +++ ...t_from_tosca_with_scaling_invalid_inst_req.yaml | 105 ++ ...rom_tosca_with_substitution_mappings_error.yaml | 197 +++ .../data/etsi_nfv/tosca_params_error.yaml | 3 + .../openstack/data/hot_alarm_scale_custom.yaml | 2 +- .../infra_drivers/openstack/data/hot_data.yaml | 27 + .../openstack/data/hot_scale_custom.yaml | 2 +- .../infra_drivers/openstack/data/param_data.yaml | 2 + .../openstack/data/test_tosca_cvnf.yaml | 37 + .../openstack/data/test_tosca_openwrt_param.yaml | 44 + .../openstack/data/update_invalid_param_data.yaml | 2 + .../openstack/data/update_new_param_data.yaml | 3 + .../openstack/data/update_param_data.yaml | 2 + .../infra_drivers/openstack/fixture_data/client.py | 137 +- .../openstack/fixture_data/fixture_data_utils.py | 272 +++- .../openstack/test_etsi_translate_template.py | 297 ++++ .../vnfm/infra_drivers/openstack/test_openstack.py | 90 +- .../openstack/test_openstack_driver.py | 1242 ++++++++++++++++- .../unit/vnfm/lcm_user_data/utils/__init__.py | 0 .../unit/vnfm/lcm_user_data/utils/test_utils.py | 192 +++ .../unit/vnfm/monitor_drivers/ping/test_ping.py | 40 +- tacker/tosca/utils.py | 447 +++++- tacker/vnflcm/__init__.py | 0 tacker/vnflcm/abstract_driver.py | 44 + tacker/vnflcm/utils.py | 756 ++++++++++ tacker/vnflcm/vnflcm_driver.py | 426 ++++++ tacker/vnfm/infra_drivers/abstract_driver.py | 60 + .../kubernetes/k8s/tosca_kube_object.py | 11 +- .../kubernetes/k8s/translate_inputs.py | 27 +- .../kubernetes/k8s/translate_outputs.py | 9 +- .../infra_drivers/kubernetes/kubernetes_driver.py | 28 + tacker/vnfm/infra_drivers/noop.py | 28 + .../vnfm/infra_drivers/openstack/glance_client.py | 63 + tacker/vnfm/infra_drivers/openstack/heat_client.py | 23 +- tacker/vnfm/infra_drivers/openstack/openstack.py | 701 +++++++++- .../infra_drivers/openstack/translate_template.py | 65 +- tacker/vnfm/lcm_user_data/__init__.py | 0 tacker/vnfm/lcm_user_data/abstract_user_data.py | 30 + tacker/vnfm/lcm_user_data/constants.py | 14 + tacker/vnfm/lcm_user_data/utils.py | 172 +++ tacker/vnfm/monitor.py | 7 +- .../vnfm/monitor_drivers/ceilometer/ceilometer.py | 1 + tacker/vnfm/monitor_drivers/ping/ping.py | 38 +- tacker/vnfm/monitor_drivers/zabbix/zabbix.py | 16 +- tacker/vnfm/plugin.py | 42 +- tacker/vnfm/vim_client.py | 4 +- tacker/wsgi.py | 25 +- test-requirements.txt | 6 +- tools/install_venv.py | 3 +- tools/test-setup-default-vim.sh | 1 - tox.ini | 33 +- 321 files changed, 30315 insertions(+), 1979 deletions(-) Requirements updates -------------------- diff --git a/requirements.txt b/requirements.txt index c1610336..4bf5861b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13 +13 @@ requests>=2.14.2 # Apache-2.0 -jsonschema>=2.6.0 # MIT +jsonschema>=3.0.0 # MIT @@ -17 +17,2 @@ netaddr>=0.7.18 # BSD -SQLAlchemy!=1.1.5,!=1.1.6,!=1.1.7,!=1.1.8,>=1.0.10 # MIT +SQLAlchemy>=1.3.0 # MIT +sqlalchemy-filters>=0.10.0 @@ -29 +30 @@ oslo.log>=3.36.0 # Apache-2.0 -oslo.messaging>=5.29.0 # Apache-2.0 +oslo.messaging>=9.3.0 # Apache-2.0 @@ -39,0 +41 @@ openstackdocstheme>=1.20.0 # Apache-2.0 +openstacksdk>=0.44.0 # Apache-2.0 @@ -43 +45 @@ tosca-parser>=1.6.0 # Apache-2.0 -heat-translator>=1.3.1 # Apache-2.0 +heat-translator>=2.0.0 # Apache-2.0 @@ -51,0 +54 @@ setuptools!=24.0.0,!=34.0.0,!=34.0.1,!=34.0.2,!=34.0.3,!=34.1.0,!=34.1.1,!=34.2. +tooz>=1.58.0 # Apache-2.0 diff --git a/test-requirements.txt b/test-requirements.txt index 6d15758a..7a611181 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -11,2 +11,2 @@ fixtures>=3.0.0 # Apache-2.0/BSD -hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0 -mock>=2.0.0 # BSD +hacking>=3.0,<3.1.0 # Apache-2.0 +mock>=3.0.0 # BSD @@ -22 +22 @@ python-blazarclient>=1.0.1 # Apache-2.0 -requests-mock>=1.2.0 # Apache-2.0 \ No newline at end of file +requests-mock>=1.2.0 # Apache-2.0