Skip to content
Snippets Groups Projects
classifier_schema.py 17.53 KiB


_common_locations_schema_definitions = {
    "location-endpoint": {
        "type": "object",
        "properties": {
            "equipment": {"type": "string"},
            "name": {"type": "string"},
            "abbreviation": {"type": "string"}
        },
        "required": ["equipment", "name", "abbreviation"],
        "additionalProperties": False
    },
    "location": {
        "type": "object",
        "properties": {
            "a": {"$ref": "#/definitions/location-endpoint"},
            "b": {"$ref": "#/definitions/location-endpoint"}
        },
        "required": ["a"],
        "additionalProperties": False
    },
    "locations-list": {
        "type": "array",
        "items": {"$ref": "#/definitions/location"}
    }
}

_juniper_link_response_schema_definitions = {
    "ip-address": {
        "type": "string",
        "oneOf": [
            {"pattern": r'^(\d+\.){3}\d+$'},
            {"pattern": r'^([a-f\d]{4}:){7}[a-f\d]{4}$'}
        ]
    },
    "ipv4-interface-address": {
        "type": "string",
        "pattern": r'^(\d+\.){3}\d+/\d+$'
    },
    "ipv6-interface-address": {
        "type": "string",
        "pattern": r'^[a-f\d:]+/\d+$'
    },
    "snmp-info": {
        "type": "object",
        "properties": {
            "community": {"type": "string"},
            "index": {"type": "integer"}
        },
        "required": ["community", "index"],
        "additionalProperties": False
    },
    "interface-info": {
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "description": {"type": "string"},
            "ipv4": {
                "type": "array",
                "items": {"$ref": "#/definitions/ipv4-interface-address"}
            },
            "ipv6": {
                "type": "array",
                "items": {"$ref": "#/definitions/ipv6-interface-address"}
            },

            # TODO: check what's changed: added to make tests pass
            'bundle': {"type": "array"},
            'bundle_members': {"type": "array"},
            'snmp':  {"$ref": "#/definitions/snmp-info"}
        },
        "required": ["name", "description", "ipv4", "ipv6"],
        "additionalProperties": False
    },
    "service-info": {
        "type": "object",
        "properties": {
            "id": {"type": "integer"},
            "name": {"type": "string"},
            "status": {
                "type": "string",
                "enum": ["operational", "installed", "planned", "ordered"]
            },
            "circuit_type": {
                "type": "string",
                "enum": ["path", "service", "l2circuit"]
            },
            "service_type": {"type": "string"},
            "project": {"type": "string"},
            "equipment": {"type": "string"},
            "pop": {"type": "string"},
            "pop_abbreviation": {"type": "string"},

            "other_end_pop": {"type": "string"},
            "other_end_pop_abbreviation": {"type": "string"},
            "other_end_equipment": {"type": "string"},
            "port": {"type": "string"},
            "other_end_port": {"type": "string"},
            "logical_unit": {
                "oneOf": [
                    {"type": "integer"},
                    {"type": "string", "maxLength": 0}
                ]
            },
            "other_end_logical_unit": {
                "oneOf": [
                    {"type": "integer"},
                    {"type": "string", "maxLength": 0}
                ]
            },
            "manufacturer": {
                "type": "string",
                "enum": ["juniper", "coriant", "infinera",
                         "cisco", "hewlett packard",
                         "corsa", "graham smith uk ltd",
                         "unknown", ""]
            },
            "card_id": {"type": "string"},
            "other_end_card_id": {"type": "string"},
            "interface_name": {"type": "string"},
            "other_end_interface_name": {"type": "string"},

            # TODO: check what's changed: added to make tests pass
            'other_end_pop_name': {"type": "string"},
            'pop_name': {"type": "string"}
        },
        # TODO: modify service-info so that "" entries are just omitted
        #       (... rather than requiring 'oneOf')
        # TODO: put 'other_end_*' params in a sub dictionary
        # "required": [
        #     "id", "name", "status",
        #     "circuit_type", "service_type",
        #     "project", "port", "manufacturer",
        #     "equipment", "logical_unit", "card_id", "interface_name"
        # ],
        "additionalProperties": False
    },
    "related-service-info": {
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "status": {
                "type": "string",
                "enum": ["operational", "installed", "planned", "ordered"]
            },
            "circuit_type": {
                "type": "string",
                "enum": ["path", "service", "l2circuit"]
            },
            "project": {"type": "string"}
        },
        "required": ["name", "status", "circuit_type", "project"],
        "additionalProperties": False
    }
}

JUNIPER_LINK_RESPONSE_SCHEMA = {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",

    "definitions": {
        **_juniper_link_response_schema_definitions,
        **_common_locations_schema_definitions
    },

    "type": "object",
    "properties": {
        "services": {
            "type": "array",
            "items": {"$ref": "#/definitions/service-info"}
        },
        "interface": {"$ref": "#/definitions/interface-info"},
        "related-services": {
            "type": "array",
            "items": {"$ref": "#/definitions/related-service-info"}
        },
        "locations": {"$ref": "#/definitions/locations-list"}
    },
    "required": ["interface", "locations"],
    "additionalProperties": False
}


_peer_info_response_schema_definitions = {
    "ip-address": {
        "type": "string",
        "oneOf": [
            {"pattern": r'^(\d+\.){3}\d+$'},
            {"pattern": r'^([a-f\d]{4}:){7}[a-f\d]{4}$'}
        ]
    },
    "interface-address": {
        "type": "string",
        "oneOf": [
            {"pattern": r'^(\d+\.){3}\d+/\d+$'},
            {"pattern": r'^[a-f\d:]+/\d+$'}
        ]
    },
    "vpn-rr-peer": {
        "type": "object",
        "properties": {
            "name": {"$ref": "#/definitions/ip-address"},
            "description": {"type": "string"},
            "peer-as": {"type": "integer"},
            "router": {"type": "string"}
        },
        "required": ["name", "description"],
        "additionalProperties": False
    },
    "ix-public-peer": {
        "type": "object",
        "properties": {
            "name": {"$ref": "#/definitions/ip-address"},
            "description": {"type": "string"},
            "router": {"type": "string"},
            "as": {
                "type": "object",
                "properties": {
                    "local": {"type": "integer"},
                    "peer": {"type": "integer"},
                },
                "required": ["local", "peer"],
                "additionalProperties": False
            }
        },
        "required": ["name", "description", "as"],
        "additionalProperties": False
    },
    "ix-public-peer-list": {
        "type": "array",
        "items": {"$ref": "#/definitions/ip-address"}
    },
    "ix-public-peer-info": {
        "type": "object",
        "properties": {
            "peer": {"$ref": "#/definitions/ix-public-peer"},
            "group": {"$ref": "#/definitions/ix-public-peer-list"},
            "router": {"$ref": "#/definitions/ix-public-peer-list"}
        },
        "required": ["peer", "group", "router"],
        "additionalProperties": False
    },
    "interface-info": {
        "type": "object",
        "properties": {
            "name": {"$ref": "#/definitions/ip-address"},
            "interface address": {
                "$ref": "#/definitions/interface-address"},
            "interface name": {"type": "string"},
            "router": {"type": "string"}
        },
        "required": [
            "name", "interface address", "interface name", "router"],
        "additionalProperties": False
    },
    "service-info": {
        "type": "object"
    },
    "interface-lookup-info": {
        "type": "object",
        "properties": {
            "interface": {"$ref": "#/definitions/interface-info"},
            "services": {
                "type": "array",
                "items": {"$ref": "#/definitions/service-info"}
            }
        }
    },
    "snmp-info": {
        "type": "object",
        "properties": {
            "hostname": {"type": "string"},
            "oid": {"type": "string"},
            "community": {"type": "string"}
        },
        "required": ["oid", "community", "hostname"],
        "additionalProperties": False
    },
    "asn-group-member": {
        "type": "object",
        "properties": {
            "router": {"type": "string"},
            "address": {"type": "string"},
            "group": {"type": "string"}
        },
        "required": ["router", "address", "group"],
        "additionalProperties": False
    },
    "asn-group": {
        "type": "object",
        "properties": {
            "asn": {"type": "integer"},
            "peers": {
                "type": "array",
                "items": {"$ref": "#/definitions/asn-group-member"}
            }
        },
        "required": ["asn", "peers"],
        "additionalProperties": False
    }
}


PEER_INFO_RESPONSE_SCHEMA = {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",

    "definitions": {
        **_peer_info_response_schema_definitions,
        **_common_locations_schema_definitions
    },

    "type": "object",
    "properties": {
        "ix-public-peer-info": {
            "$ref": "#/definitions/ix-public-peer-info"},
        "vpn-rr-peer-info": {"$ref": "#/definitions/vpn-rr-peer"},
        "interfaces": {
            "type": "array",
            "items": {"$ref": "#/definitions/interface-lookup-info"}
        },
        "locations": {"$ref": "#/definitions/locations-list"},
        "snmp": {
            "type": "array",
            "items": {"$ref": "#/definitions/snmp-info"}
        },
        "asn": {"$ref": "#/definitions/asn-group"}
    },
    "additionalProperties": False
}

_infinera_lambda_response_schema_definitions = {
    "service-info": {
        "type": "object",
        "properties": {
            "id": {"type": "integer"},
            "name": {"type": "string"},
            "status": {
                "type": "string",
                "enum": ["operational", "installed", "planned", "ordered"]
            },
            "circuit_type": {
                "type": "string",
                "enum": ["path", "service", "l2circuit"]
            },
            "service_type": {"type": "string"},
            "project": {"type": "string"},
            "pop_name": {"type": "string"},
            "pop_abbreviation": {"type": "string"},
            "other_end_pop_name": {"type": "string"},
            "other_end_pop_abbreviation": {"type": "string"},
            "equipment": {"type": "string"},
            "other_end_equipment": {"type": "string"},
            "port": {"type": "string"},
            "other_end_port": {"type": "string"},
            "logical_unit": {
                "oneOf": [
                    {"type": "integer"},
                    {"type": "string", "maxLength": 0}
                ]
            },
            "other_end_logical_unit": {
                "oneOf": [
                    {"type": "integer"},
                    {"type": "string", "maxLength": 0}
                ]
            },
            "manufacturer": {
                "type": "string",
                "enum": ["juniper", "coriant", "infinera",
                         "cisco", "hewlett packard",
                         "corsa", "graham smith uk ltd",
                         "unknown", ""]
            },
            "card_id": {"type": "string"},
            "other_end_card_id": {"type": "string"},
            "interface_name": {"type": "string"},
            "other_end_interface_name": {"type": "string"}
        },
        "additionalProperties": False
    },
    "related-service-info": {
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "status": {
                "type": "string",
                "enum": ["operational", "installed", "planned", "ordered"]
            },
            "circuit_type": {
                "type": "string",
                "enum": ["path", "service", "l2circuit"]
            },
            "project": {"type": "string"}
        },
        "required": ["name", "status", "circuit_type", "project"],
        "additionalProperties": False
    },
    "geant-lambda": {
        "type": "object",
        "properties": {
            "id": {"type": "integer"},
            "name": {"type": "string"},
            "project": {"type": "string"},
            "status": {
                "type": "string",
                "enum": ["operational", "installed", "planned", "ordered"]
            },
        },
        "additionalProperties": False
    }
}

INFINERA_LAMBDA_INFO_RESPONSE_SCHEMA = {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",

    "definitions": {
        **_infinera_lambda_response_schema_definitions,
        **_common_locations_schema_definitions
    },

    "type": "object",
    "properties": {
        "services": {
            "type": "array",
            "items": {"$ref": "#/definitions/service-info"}
        },
        "related-services": {
            "type": "array",
            "items": {"$ref": "#/definitions/related-service-info"}
        },
        "geant-lambda": {
            "$ref": "#/definitions/geant-lambda"
        },
        "locations": {"$ref": "#/definitions/locations-list"}
    },
    "additionalProperties": False
}

CORIANT_INFO_RESPONSE_SCHEMA = {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",

    "definitions": {
        "location-endpoint": {
            "type": "object",
            "properties": {
                "equipment": {"type": "string"},
                "name": {"type": "string"},
                "abbreviation": {"type": "string"}
            },
            "required": ["equipment", "name", "abbreviation"],
            "additionalProperties": False
        },
        "location": {
            "type": "object",
            "properties": {
                "a": {"$ref": "#/definitions/location-endpoint"},
                "b": {"$ref": "#/definitions/location-endpoint"}
            },
            "required": ["a"],
            "additionalProperties": False
        },
        "locations-list": {
            "type": "array",
            "items": {"$ref": "#/definitions/location"}
        },
        "pop-info": {
            "type": "object",
            "properties": {
                "name": {"type": "string"},
                "abbreviation": {"type": "string"},
                "country": {"type": "string"},
                "city": {"type": "string"},
                "longitude": {"type": "number"},
                "latitude": {"type": "number"}
            },
            "required": [
                "name",
                "abbreviation",
                "country",
                "city",
                "longitude",
                "latitude"
            ],
            "additionalProperties": False
        },
        "endpoint": {
            "type": "object",
            "properties": {
                "equipment name": {"type": "string"},
                "card id": {"type": "string"},
                "port number": {"type": "string"},
                "pop": {"$ref": "#/definitions/pop-info"}
            },
            "required": ["equipment name", "port number", "pop"],
            "additionalProperties": False
        },
        "path": {
            "type": "object",
            "properties": {
                'category': {"type": "string"},
                'circuit_type': {"type": "string"},
                'service_type': {"type": "string"},
                'peering_type': {"type": "string"},
                'status': {"type": "string"},
                'name': {"type": "string"},
                'a': {"$ref": "#/definitions/endpoint"},
                'b': {"$ref": "#/definitions/endpoint"}
            },
            "required": [
                "category",
                "circuit_type",
                "service_type",
                "peering_type",
                "status",
                "a",
                "b"],
            "additionalProperties": False
        },
        "related-service-info": {
            "type": "object",
            "properties": {
                "name": {"type": "string"},
                "status": {
                    "type": "string",
                    "enum": ["operational", "installed", "planned", "ordered"]
                },
                "circuit_type": {
                    "type": "string",
                    "enum": ["path", "service", "l2circuit"]
                },
                "project": {"type": "string"}
            },
            "additionalProperties": False
        }
    },

    "type": "object",
    "properties": {
        "equipment name": {"type": "string"},
        "card id": {"type": "string"},
        "port number": {"type": "string"},
        "path": {"$ref": "#/definitions/path"},
        "related-services": {
            "type": "array",
            "items": {"$ref": "#/definitions/related-service-info"}
        },
    },
    "required": ["equipment name", "card id", "port number"],
    "additionalProperties": False
}