Feature 11003: AZ for cinder 47/14047/3
authorLuis <lvega@whitestack.com>
Mon, 20 Nov 2023 20:42:53 +0000 (20:42 +0000)
committergarciadeblas <gerardo.garciadeblas@telefonica.com>
Wed, 29 Nov 2023 11:50:39 +0000 (12:50 +0100)
Change-Id: I3e9829d3bc21f2399eab4db3e5d08ceb9d3d1918
Signed-off-by: Luis <lvega@whitestack.com>
robot-systest/resources/basic_01-crud_operations_on_vim_targets_data.py
robot-systest/resources/basic_08-disable_port_security_network_level_data.py
robot-systest/resources/basic_32-volume_with_different_az.py [new file with mode: 0644]
robot-systest/resources/get_clouds_yaml_info.py [new file with mode: 0644]
robot-systest/testsuite/basic_32-volume_with_different_az.robot [new file with mode: 0644]

index 1e35e78..ea31ace 100644 (file)
@@ -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")
index ab2edd8..7fd16ba 100644 (file)
@@ -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 (file)
index 0000000..2a78e11
--- /dev/null
@@ -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 (file)
index 0000000..f921a8f
--- /dev/null
@@ -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 (file)
index 0000000..2b41c78
--- /dev/null
@@ -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