#
# ============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}
]
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:
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
"""
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():
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:
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