From: Luis Date: Mon, 20 Nov 2023 20:42:53 +0000 (+0000) Subject: Feature 11003: AZ for cinder X-Git-Tag: release-v15.0-start~13 X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Ftests.git;a=commitdiff_plain;h=97dcbb6cede16bb1c98057127d1080435ac24659 Feature 11003: AZ for cinder Change-Id: I3e9829d3bc21f2399eab4db3e5d08ceb9d3d1918 Signed-off-by: Luis --- diff --git a/robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py b/robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py index 1e35e78..ea31ace 100644 --- a/robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py +++ b/robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py @@ -11,8 +11,8 @@ # limitations under the License. import os -from pathlib import Path import yaml +from get_clouds_yaml_info import get_values_from_cloud, get_vim_values # VIM configuration @@ -22,49 +22,16 @@ if cloud_type == "openstack": vim_account_type = "openstack" vim_name_prefix = "basic01" # 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 - + cloud, os_cloud = get_values_from_cloud() + ( + vim_user, + vim_password, + vim_auth_url, + vim_tenant, + vim_user_domain_name, + vim_project_domain_name, + vim_insecure, + ) = get_vim_values(cloud, os_cloud) # Extra config vim_config_dict = {} vim_config_dict["vim_network_name"] = os.environ.get("VIM_MGMT_NET") diff --git a/robot-systest/resources/basic_08-disable_port_security_network_level_data.py b/robot-systest/resources/basic_08-disable_port_security_network_level_data.py index ab2edd8..7fd16ba 100644 --- a/robot-systest/resources/basic_08-disable_port_security_network_level_data.py +++ b/robot-systest/resources/basic_08-disable_port_security_network_level_data.py @@ -13,6 +13,7 @@ import os from pathlib import Path import yaml +from get_clouds_yaml_info import get_values_from_cloud, get_vim_values # VIM Configuration @@ -20,46 +21,16 @@ vim_account_type = "openstack" vim_name = "basic_08_vim_test" # Get credentials 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 +cloud, os_cloud = get_values_from_cloud() +( + vim_user, + vim_password, + vim_auth_url, + vim_tenant, + vim_user_domain_name, + vim_project_domain_name, + vim_insecure, +) = get_vim_values(cloud, os_cloud) # Extra VIM config vim_config_dict = {} 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..2a78e11 --- /dev/null +++ b/robot-systest/resources/basic_32-volume_with_different_az.py @@ -0,0 +1,45 @@ +# 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 +import yaml +from get_clouds_yaml_info import get_values_from_cloud, get_vim_values + + +# 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 + cloud, os_cloud = get_values_from_cloud() + ( + vim_user, + vim_password, + vim_auth_url, + vim_tenant, + vim_user_domain_name, + vim_project_domain_name, + vim_insecure, + ) = get_vim_values(cloud, os_cloud) + + # 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/resources/get_clouds_yaml_info.py b/robot-systest/resources/get_clouds_yaml_info.py new file mode 100644 index 0000000..f921a8f --- /dev/null +++ b/robot-systest/resources/get_clouds_yaml_info.py @@ -0,0 +1,71 @@ +# 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 + + +def get_values_from_cloud(): + 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] + return cloud, os_cloud + + +def get_vim_values(cloud, 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 + return ( + vim_user, + vim_password, + vim_auth_url, + vim_tenant, + vim_user_domain_name, + vim_project_domain_name, + vim_insecure, + ) 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