From 3643d4072775a4412b212daf583823e847b14851 Mon Sep 17 00:00:00 2001 From: Luis Date: Mon, 20 Nov 2023 20:33:51 +0000 Subject: [PATCH] Feature 11003: AZ for Cinder Signed-off-by: Luis --- .../basic_32-volume_with_different_az.py | 77 ++++++++++++ .../basic_32-volume_with_different_az.robot | 115 ++++++++++++++++++ 2 files changed, 192 insertions(+) create mode 100644 robot-systest/resources/basic_32-volume_with_different_az.py create mode 100644 robot-systest/testsuite/basic_32-volume_with_different_az.robot diff --git a/robot-systest/resources/basic_32-volume_with_different_az.py b/robot-systest/resources/basic_32-volume_with_different_az.py new file mode 100644 index 0000000..4cc1210 --- /dev/null +++ b/robot-systest/resources/basic_32-volume_with_different_az.py @@ -0,0 +1,77 @@ +# 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. + +import os +from pathlib import Path +import yaml + + +# VIM configuration +cloud_type = os.environ.get("CLOUD_TYPE", "openstack") +if cloud_type == "openstack": + # Openstack VIM + vim_account_type = "openstack" + vim_name_prefix = "basic32" + # Get credentias from Openstack Clouds file + os_cloud = os.environ.get("OS_CLOUD") + clouds_file_paths = [ + "./clouds.yaml", + str(Path.home()) + "/.config/openstack/clouds.yaml", + "/etc/openstack/clouds.yaml", + ] + for path in clouds_file_paths: + clouds_file_path = Path(path) + if clouds_file_path.exists(): + break + if not clouds_file_path.exists(): + raise Exception("Openstack clouds file not found") + with clouds_file_path.open() as clouds_file: + clouds = yaml.safe_load(clouds_file) + if os_cloud not in clouds["clouds"]: + raise Exception("Openstack cloud '" + os_cloud + "' not found") + cloud = clouds["clouds"][os_cloud] + if "username" not in cloud["auth"]: + raise Exception("Username not found in Openstack cloud '" + os_cloud + "'") + vim_user = cloud["auth"]["username"] + if "password" not in cloud["auth"]: + raise Exception("Password not found in Openstack cloud '" + os_cloud + "'") + vim_password = cloud["auth"]["password"] + if "auth_url" not in cloud["auth"]: + raise Exception("Auth url not found in Openstack cloud '" + os_cloud + "'") + vim_auth_url = cloud["auth"]["auth_url"] + if "project_name" not in cloud["auth"]: + raise Exception( + "Project name not found in Openstack cloud '" + os_cloud + "'" + ) + vim_tenant = cloud["auth"]["project_name"] + vim_user_domain_name = ( + cloud["auth"]["user_domain_name"] + if "user_domain_name" in cloud["auth"] + else None + ) + vim_project_domain_name = ( + cloud["auth"]["project_domain_name"] + if "project_domain_name" in cloud["auth"] + else None + ) + vim_insecure = True if "verify" in cloud and not cloud["verify"] else None + + # Availability Zone config + vim_config_dict = {"storage_availability_zone": "storage_az"} + vim_config = "'{}'".format( + yaml.safe_dump(vim_config_dict, default_flow_style=True, width=10000).rstrip( + "\r\n" + ) + ) + +else: + raise Exception("VIM type not supported: '" + cloud_type + "'") diff --git a/robot-systest/testsuite/basic_32-volume_with_different_az.robot b/robot-systest/testsuite/basic_32-volume_with_different_az.robot new file mode 100644 index 0000000..2b41c78 --- /dev/null +++ b/robot-systest/testsuite/basic_32-volume_with_different_az.robot @@ -0,0 +1,115 @@ +# 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. + +*** Settings *** +Documentation [BASIC-32] Basic NS with a volume in different availability zone + +Library OperatingSystem +Library String +Library Collections +Library Process +Library SSHLibrary + +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vim_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/prometheus_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot +Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot + +Variables %{ROBOT_DEVOPS_FOLDER}/resources/basic_32-volume_with_different_az.py + +Force Tags basic_32 + +Suite Setup Run Keyword And Ignore Error Suite Preparation + +*** Variables *** +# NS and VNF descriptor package folder and ids +${vnfd_pkg} several_volumes_vnf +${vnfd_name} several_volumes-vnf +${nsd_pkg} several_volumes_ns +${nsd_name} several_volumes-ns + +# NS instance name and configuration +${ns_name} basic_32 +${ns_config} {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}} ] } + +# SSH keys and username to be used +${publickey} %{HOME}/.ssh/id_rsa.pub +${privatekey} %{HOME}/.ssh/id_rsa + + +*** Test Cases *** +Create VIM Target Basic + [Documentation] Create a VIM Target only with the az parameters. + ... Checks the status of the VIM in Prometheus after it creation. + + Pass Execution If '${vim_account_type}' != 'openstack' Not applicable for ${vim_account_type} VIM + ${rand}= Generate Random String 6 [NUMBERS] + ${vim_name_az}= Catenate SEPARATOR=_ ${vim_name_prefix} ${rand} + Set Suite Variable ${vim_name_az} + ${created_vim_account_id}= Create VIM Target ${vim_name_az} ${vim_user} ${vim_password} ${vim_auth_url} ${vim_tenant} ${vim_account_type} config=${vim_config} + Set Suite Variable ${created_vim_account_id} + + +Create VNF Descriptor + + Create VNFD '%{PACKAGES_FOLDER}/${vnfd_pkg}' + + +Create NS Descriptor + + Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' + + +Network Service Instance Test + [Tags] prepare + ${id}= Create Network Service ${nsd_name} ${vim_name_az} ${ns_name} ${ns_config} ${publickey} + Set Suite Variable ${ns_id} ${id} + + +Delete NS Instance Test + [Tags] cleanup + + Delete NS ${ns_name} + + +Delete NS Descriptor Test + [Tags] cleanup + + Delete NSD ${nsd_name} + + +Delete VNF Descriptor Test + [Tags] cleanup + + Delete VNFD ${vnfd_name} + + +Delete VIM Target By ID + [Documentation] Delete the VIM Target created in previous test-case by its ID. + ... Checks whether the VIM Target was created or not before perform the deletion. + [Tags] cleanup + + ${vim_account_id}= Get VIM Target ID ${vim_name_az} + Should Be Equal As Strings ${vim_account_id} ${created_vim_account_id} + Delete VIM Target ${vim_account_id} + + +*** Keywords *** +Suite Cleanup + [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim + + Run Keyword If Any Tests Failed Delete NS ${ns_name} + + Run Keyword If Any Tests Failed Delete NSD ${nsd_name} + + Run Keyword If Any Tests Failed Delete VNFD ${vnfd_name} \ No newline at end of file -- GitLab