Commit 7ec87bb3 authored by Pablo Armingol's avatar Pablo Armingol
Browse files

feat: implement extract_teraflowsdn_device_name function and integrate device...

feat: implement extract_teraflowsdn_device_name function and integrate device name into optical path computation
parent 2ea59363
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -13,6 +13,38 @@ def safe_get(d, keys, default=None):
            return default
    return d


def extract_teraflowsdn_device_name(service: Service):
    for cr in service.service_config.config_rules:
        if cr.WhichOneof('config_rule') != 'custom':
            continue

        raw_value = cr.custom.resource_value
        if not raw_value:
            continue

        try:
            data = json.loads(raw_value)
        except Exception:
            continue

        if not isinstance(data, dict):
            continue

        device_type = data.get('device_type') or data.get('type')
        if device_type != 'teraflowsdn':
            continue

        drivers = data.get('device_drivers')
        if not isinstance(drivers, list):
            continue

        if 'DEVICEDRIVER_IETF_L3VPN' in drivers:
            return data.get('device_name') or data.get('name')

    return None


def group_block(group, action, group_id_override=None, node=None):
    active = "true" if action == 'create' else "false"
    group_id = group_id_override if group_id_override is not None else group.get("group-id", group.get("digital_sub_carriers_group_id", 1))
@@ -301,11 +333,14 @@ def compute_optical_path(service: Service) -> PathCompReply:
    network_slice_uuid_str = f"{src_name}_to_{dest_str}"
    tunnel_uuid = str(uuid.uuid5(uuid.NAMESPACE_DNS, network_slice_uuid_str))
    
    device_name = extract_teraflowsdn_device_name(service)
    provisionamiento = {
        "network-slice-uuid": network_slice_uuid_str,
        "viability": True,
        "actions": []
    }
    if device_name:
        provisionamiento["device_name"] = device_name

    try:
        attributes = resp_json.get("tapi-connectivity:connectivity-service", {}).get("connection", [{}])[0].get("optical-connection-attributes", {})
@@ -392,6 +427,8 @@ def compute_optical_path(service: Service) -> PathCompReply:
            "src-ip-mask": str(nodes[src_name]["ip-mask"]),
            "src-vlan-id": nodes[src_name]["vlan-id"],
        }
        if device_name:
            content["device_name"] = device_name
        for i, dest in enumerate(dest_list):
            if dest in nodes:
                content[f"dest{i+1}-node-uuid"] = dest