[VVP] ports.py check port type
[vvp/validation-scripts.git] / ice_validator / tests / utils / ports.py
index e479201..89440eb 100644 (file)
 #
 # ============LICENSE_END============================================
 #
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
 #
 
-from .network_roles import get_network_role_from_port
+from .network_roles import get_network_role_and_type
 from .vm_types import get_vm_type_for_nova_server
 import re
 
 
-def is_valid_ip_address(ip_address, vm_type, network_role, port_property):
+def is_valid_ip_address(
+    ip_address, vm_type, network_role, port_property, parameter_type, network_type
+):
     """
     Check the ip_address to make sure it is properly formatted and
     also contains {vm_type} and {network_role}
@@ -133,8 +134,12 @@ def is_valid_ip_address(ip_address, vm_type, network_role, port_property):
     ]
 
     for v3 in allowed_formats:
+        if v3[1] != parameter_type:
+            continue
         if v3[0] != port_property:
             continue
+        if v3[2] != network_type:
+            continue
         # check if pattern matches
         m = v3[3].match(ip_address)
         if m:
@@ -146,7 +151,7 @@ def is_valid_ip_address(ip_address, vm_type, network_role, port_property):
     return False
 
 
-def get_invalid_ip_addresses(resources, port_property):
+def get_invalid_ip_addresses(resources, port_property, parameters):
     """
     Get a list of valid ip addresses for a heat resources section
     """
@@ -187,8 +192,8 @@ def get_invalid_ip_addresses(resources, port_property):
                 else:
                     continue
 
-                network_role = get_network_role_from_port(port_resource)
-                if not network_role:
+                network_role, network_type = get_network_role_and_type(port_resource)
+                if not network_role or not network_type:
                     continue
 
                 for k1, v1 in port_resource["properties"].items():
@@ -199,14 +204,25 @@ def get_invalid_ip_addresses(resources, port_property):
                             continue
                         if "get_param" not in v2["ip_address"]:
                             continue
-
                         ip_address = v2["ip_address"]["get_param"]
 
                         if isinstance(ip_address, list):
                             ip_address = ip_address[0]
 
+                        if ip_address not in parameters:
+                            continue
+
+                        parameter_type = parameters[ip_address].get("type")
+                        if not parameter_type:
+                            continue
+
                         valid_ip_address = is_valid_ip_address(
-                            ip_address, vm_type, network_role, port_property
+                            ip_address,
+                            vm_type,
+                            network_role,
+                            port_property,
+                            parameter_type,
+                            network_type,
                         )
 
                         if not valid_ip_address:
@@ -215,17 +231,17 @@ def get_invalid_ip_addresses(resources, port_property):
     return invalid_ip_addresses
 
 
-def is_reserved_port(port_id):
-    """
-    Checks to see if the resource id for a port follows
-    the reserve port concept
-    """
-    formats = [
-        ["port_id", re.compile(r"reserve_port_(.+?)_floating_ip_\d+")],
-        ["port_id", re.compile(r"reserve_port_(.+?)_floating_v6_ip_\d+")],
-    ]
-    for f in formats:
-        m = f[1].match(port_id.lower())
-        if m and m.group(1):
-            return True
-    return False
+def get_list_of_ports_attached_to_nova_server(nova_server):
+    networks_list = nova_server.get("properties", {}).get("networks")
+
+    port_ids = []
+    if networks_list:
+        for network in networks_list:
+            network_prop = network.get("port")
+            if network_prop:
+                pid = network_prop.get("get_param")
+                if not pid:
+                    pid = network_prop.get("get_resource")
+                port_ids.append(pid)
+
+    return port_ids