{
  "$defs": {
    "BackendConfig": {
      "description": "This is the CarrierEthernetEvc's backend config.  It determines which backend should be\navailable and which one should be the default.",
      "properties": {
        "default": {
          "enum": [
            "LDP",
            "EVPN"
          ],
          "type": "string",
          "default": "LDP",
          "description": "The default backend to use if none is specified.",
          "title": "Default"
        },
        "enabled": {
          "description": "The list of backends that can be selected.",
          "items": {
            "enum": [
              "LDP",
              "EVPN"
            ],
            "type": "string"
          },
          "title": "Enabled",
          "type": "array"
        }
      },
      "title": "BackendConfig",
      "type": "object"
    },
    "CarrierEthernetEvcConfig": {
      "description": "This is the CarrierEthernetEvc config.",
      "properties": {
        "service_id": {
          "$ref": "#/$defs/ServiceIdConfig",
          "description": "This is the CarrierEthernetEvc's service id config."
        },
        "backend": {
          "$ref": "#/$defs/BackendConfig",
          "description": "This is the CarrierEthernetEvc's backend config."
        },
        "multi_homing": {
          "$ref": "#/$defs/MultiHomingConfig",
          "description": "This is the CarrierEthernetEvc's multi-homing config."
        },
        "mtu": {
          "default": 1514,
          "description": "This is the mtu value to set for each carrier ethernet evc we deploy.",
          "maximum": 65536,
          "minimum": 576,
          "title": "Mtu",
          "type": "integer"
        }
      },
      "title": "CarrierEthernetEvcConfig",
      "type": "object"
    },
    "CiscoConfig": {
      "description": "This is the cisco specific config",
      "properties": {
        "netconf_retry_count": {
          "default": 5,
          "description": "Number of netconf retries before a failure.",
          "exclusiveMinimum": 0,
          "title": "Netconf Retry Count",
          "type": "integer"
        },
        "netconf_retry_interval": {
          "default": 5,
          "description": "Interval time in seconds between netconf retries.",
          "exclusiveMinimum": 0,
          "title": "Netconf Retry Interval",
          "type": "integer"
        },
        "xconnect": {
          "$ref": "#/$defs/CiscoXconnectConfig",
          "description": "Configuration of xconnect services on cisco routers."
        }
      },
      "title": "CiscoConfig",
      "type": "object"
    },
    "CiscoQosInputConfig": {
      "description": "Configuration related to input policy maps configuration on cisco routers.",
      "properties": {
        "policy_class": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "class-default",
          "description": "Name of the qos policy class, or a template generating it (a string). Template context: instance (the CiscoEndPointProvider), config (the ConnectConfig).",
          "title": "Policy Class"
        },
        "policy_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "template://connect/cisco/input_policy_name.j2",
          "description": "Name of the input qos policy, or a template generating it (a string). Template context: instance (the CiscoEndPointProvider), config (the ConnectConfig).",
          "title": "Policy Name"
        },
        "traffic_class": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "integer"
            }
          ],
          "default": 2,
          "description": "Traffic class of the input policy, or a template generating it (an integer). Template context: instance (the CiscoEndPointProvider), config (the ConnectConfig).",
          "title": "Traffic Class"
        }
      },
      "title": "CiscoQosInputConfig",
      "type": "object"
    },
    "CiscoQosOutputConfig": {
      "description": "Configuration related to output policy maps configuration on cisco routers.",
      "properties": {
        "policy_class": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "class-default",
          "description": "Name of the qos policy class, or a template generating it (a string). Template context: instance (the CiscoEndPointProvider), config (the ConnectConfig).",
          "title": "Policy Class"
        },
        "policy_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "template://connect/cisco/output_policy_name.j2",
          "description": "Name of the output qos policy, or a template generating it (a string). Template context: instance (the CiscoEndPointProvider), config (the ConnectConfig).",
          "title": "Policy Name"
        }
      },
      "title": "CiscoQosOutputConfig",
      "type": "object"
    },
    "CiscoXconnectConfig": {
      "description": "This is configuration specific to xconnect services on cisco\nrouters.",
      "properties": {
        "service_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "template://connect/cisco/xconnect_service_name.j2",
          "description": "Xconnect service name, or a template generating it (a string). Template context: instance (the CiscoEndPointProvider), config (the ConnectConfig), vcid (the service id of the epipe, as an integer).",
          "title": "Service Name"
        },
        "group_name": {
          "default": "evpn-vpws",
          "description": "Xconnect group name.",
          "title": "Group Name",
          "type": "string"
        },
        "l2_interface_name": {
          "default": "template://connect/cisco/l2_interface_name.j2",
          "description": "Template generating the l2 interface name (a string). Template context: instance (the CiscoEndPointProvider), config (the ConnectConfig), port (the name of a port).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "L2 Interface Name",
          "type": "string"
        },
        "l2_interface_description": {
          "default": "template://connect/cisco/l2_interface_description.j2",
          "description": "Template generating the l2 interface description (a string). Template context: instance (the CiscoEndPointProvider), config (the ConnectConfig).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "L2 Interface Description",
          "type": "string"
        },
        "qos_input": {
          "$ref": "#/$defs/CiscoQosInputConfig",
          "description": "Configuration of the qos policies to limit the input traffic."
        },
        "qos_output": {
          "$ref": "#/$defs/CiscoQosOutputConfig",
          "description": "Configuration of the qos policies to limit the output traffic."
        }
      },
      "title": "CiscoXconnectConfig",
      "type": "object"
    },
    "DirectInternetAccess": {
      "properties": {
        "service_entity_name": {
          "default": "DirectInternetAccess",
          "description": "Name of the lsm service entity exposed in the service catalog.",
          "title": "Service Entity Name",
          "type": "string"
        },
        "lifecycle": {
          "description": "Lifecycle configuration of the service.",
          "oneOf": [
            {
              "$ref": "#/$defs/ServiceLifecycleConfig"
            },
            {
              "$ref": "#/$defs/ExternalLifecycleConfig"
            }
          ],
          "title": "Lifecycle"
        },
        "p2p_networks": {
          "description": "Pool of IP networks for P2P /31 connections.",
          "items": {
            "format": "ipv4network",
            "type": "string"
          },
          "title": "P2P Networks",
          "type": "array"
        },
        "link_local_p2p": {
          "default": false,
          "description": "If P2P networks are treated as link-local, they are not leaked into default VRF.  Additionally, traffic from P2P address is filtered on ingress of customer-facing interface.",
          "title": "Link Local P2P",
          "type": "boolean"
        },
        "vrf_name": {
          "default": "template://connect/dia/vrf_name.j2",
          "description": "Template for VRF name.",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Vrf Name",
          "type": "string"
        },
        "service_id": {
          "$ref": "#/$defs/ServiceIdConfig",
          "description": "The allowed range of allocation for the vprn service_id."
        },
        "documentation_template": {
          "default": "template://connect/dia_documentation.md.j2",
          "description": "Template rendering the content of the dia service documentation tab.",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Documentation Template",
          "type": "string"
        }
      },
      "title": "DirectInternetAccess",
      "type": "object"
    },
    "EthernetCFMConfig": {
      "description": "This is the ethernet cfm quality of service config",
      "properties": {
        "enabled": {
          "default": false,
          "description": "Controls the creation of eth-cfm.",
          "title": "Enabled",
          "type": "boolean"
        },
        "level": {
          "default": 0,
          "description": "The value of the EVC Available MEG Level Service Attribute, an integer from 0 to 7.",
          "maximum": 7,
          "minimum": 0,
          "title": "Level",
          "type": "integer"
        },
        "domain_name": {
          "default": "Network_Domain",
          "description": "The eth cfm domain name.",
          "title": "Domain Name",
          "type": "string"
        },
        "mep_direction": {
          "default": "up",
          "description": "The eth cfm mep direction.",
          "enum": [
            "up",
            "down"
          ],
          "title": "Mep Direction",
          "type": "string"
        },
        "mep_id": {
          "default": "template://connect/eth_cfm/mep_id.j2",
          "description": "Template generating the mep id (an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig), port_id (the id of the port this is attached to).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Mep Id",
          "type": "string"
        },
        "mep_mac_address": {
          "default": "template://connect/eth_cfm/mep_mac_address.j2",
          "description": "Template generating the mep mac address (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig), port_id (the id of the port this is attached to).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Mep Mac Address",
          "type": "string"
        },
        "check_interval": {
          "default": "1s",
          "description": "The eth cfm check interval.",
          "enum": [
            "10ms",
            "100ms",
            "1s",
            "10s",
            "60s",
            "600s"
          ],
          "title": "Check Interval",
          "type": "string"
        },
        "md_admin_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "64512",
          "description": "The eth cfm md admin name, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Md Admin Name"
        },
        "eth_tag": {
          "default": "template://connect/eth_cfm/eth_tag.j2",
          "description": "Template generating the eth-tag/acid to configure on each side of the evpn (an integer).  Template context: instance (the CarrierEthernetEvcEndPoint), service_id (the evi for the service), side_tag (an integer uniquely designating this side).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Eth Tag",
          "type": "string"
        },
        "eth_test": {
          "default": true,
          "description": "Whether to enable eth test, this only works if eth cfm is enabled.",
          "title": "Eth Test",
          "type": "boolean"
        }
      },
      "title": "EthernetCFMConfig",
      "type": "object"
    },
    "EviPoolConfig": {
      "description": "Evi pool config used by allocators",
      "properties": {
        "start": {
          "default": 1,
          "description": "Start of the evi range.  (Value included in the range)",
          "exclusiveMinimum": 0,
          "title": "Start",
          "type": "integer"
        },
        "end": {
          "default": 100,
          "description": "End of the evi range.  (Value included in the range)",
          "exclusiveMaximum": 16777215,
          "exclusiveMinimum": 0,
          "title": "End",
          "type": "integer"
        }
      },
      "title": "EviPoolConfig",
      "type": "object"
    },
    "ExternalLifecycleConfig": {
      "description": "Select a lifecycle defined outside of the connect module, and registered\nby name through ``connect::fsm::NamedLifecycle``.  The module registering\nthe lifecycle must also provide an implementation assigning the ``state``\nand ``deploy_mode`` of the service builders using it (see\n``connect::fsm::StatefulServiceBuilder``).",
      "properties": {
        "type": {
          "const": "external",
          "description": "Discriminator selecting a lifecycle registered outside of the connect module through ``connect::fsm::NamedLifecycle``.",
          "title": "Type",
          "type": "string"
        },
        "name": {
          "description": "Name under which the external lifecycle was registered.",
          "title": "Name",
          "type": "string"
        }
      },
      "required": [
        "type",
        "name"
      ],
      "title": "ExternalLifecycleConfig",
      "type": "object"
    },
    "FntInventory": {
      "properties": {
        "agent_name": {
          "default": "fntcloud",
          "description": "Name of the agent handling the FNT inventory.",
          "title": "Agent Name",
          "type": "string"
        },
        "base_url": {
          "description": "Base URL of the FNT API.",
          "pattern": "^https?://[^/]+?(:\\d+)?/?$",
          "title": "Base Url",
          "type": "string"
        },
        "auth_base_url": {
          "description": "Base URL of the FNT authentication endpoint.",
          "pattern": "^https?://[^/]+?(:\\d+)?/?$",
          "title": "Auth Base Url",
          "type": "string"
        },
        "auth_method": {
          "description": "Authentication method to use against the FNT API.",
          "title": "Auth Method",
          "type": "string"
        },
        "mandator_id": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Id of the FNT mandator to use.",
          "title": "Mandator Id"
        },
        "mandator_group_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Name of the FNT mandator group to use.",
          "title": "Mandator Group Name"
        },
        "username_env_var": {
          "default": "FNT_USERNAME",
          "description": "Environment variable holding the FNT username.",
          "title": "Username Env Var",
          "type": "string"
        },
        "password_env_var": {
          "default": "FNT_PASSWORD",
          "description": "Environment variable holding the FNT password.",
          "title": "Password Env Var",
          "type": "string"
        }
      },
      "required": [
        "base_url",
        "auth_base_url",
        "auth_method"
      ],
      "title": "FntInventory",
      "type": "object"
    },
    "GemportIdConfig": {
      "description": "Range from which the lightspan gem-port / t-cont allocation id is picked.\nThe id used to be derived from the vlan (``1024 + vlan``), which both\ncollided when two services reused the same vlan and shuffled the id on a\nvlan update.  It is now allocated from this range instead.",
      "properties": {
        "start": {
          "default": 1024,
          "description": "Start of the gem-port id range.  (Value included in the range)",
          "exclusiveMinimum": 0,
          "title": "Start",
          "type": "integer"
        },
        "end": {
          "default": 65535,
          "description": "End of the gem-port id range.  (Value included in the range)",
          "exclusiveMinimum": 0,
          "title": "End",
          "type": "integer"
        }
      },
      "title": "GemportIdConfig",
      "type": "object"
    },
    "InmantaInventory": {
      "properties": {
        "path": {
          "anyOf": [
            {
              "pattern": "^source:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "pattern": "^file:\\/\\/(\\/[^\\/]+)+?$",
              "type": "string"
            }
          ],
          "default": "source:///connect-inventory.yaml",
          "description": "The path to the inventory file, on the orchestrator machine.  The path should start with a prefix, specifying how to resolve it.  The supported prefixes are: `file://`, where the rest of the string is the absolute path to the file, and `source://`, where the rest of the string is a path to a file in an inmanta files folder.  If the `source://` path starts with `/`, the path is in the project's files folder (e.g. `source:///example/inventory.yaml` points to `files/example/inventory.yaml` at the root of the project using this module).  Otherwise, the part before the first `/` is the name of the module in the files of which the inventory is located (e.g. `source://example/inventory.yaml` points to `files/inventory.yaml` at the root of the module named example).",
          "title": "Path"
        }
      },
      "title": "InmantaInventory",
      "type": "object"
    },
    "InventoryConfig": {
      "description": "Container for different inventory types",
      "properties": {
        "netbox": {
          "anyOf": [
            {
              "$ref": "#/$defs/NetboxInventory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Netbox inventory config."
        },
        "inmanta": {
          "anyOf": [
            {
              "$ref": "#/$defs/InmantaInventory"
            },
            {
              "type": "null"
            }
          ],
          "description": "Inmanta inventory config."
        },
        "fnt": {
          "anyOf": [
            {
              "$ref": "#/$defs/FntInventory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Fnt inventory config."
        },
        "default_inventory": {
          "default": "inmanta",
          "description": "The default inventory to use if no prefix is specified in the inventory reference.",
          "title": "Default Inventory",
          "type": "string"
        }
      },
      "title": "InventoryConfig",
      "type": "object"
    },
    "JuniperConfig": {
      "description": "This is the juniper specific config",
      "properties": {
        "netconf_retry_count": {
          "default": 5,
          "description": "Number of netconf retries before a failure.",
          "exclusiveMinimum": 0,
          "title": "Netconf Retry Count",
          "type": "integer"
        },
        "netconf_retry_interval": {
          "default": 5,
          "description": "Interval time in seconds between netconf retries.",
          "exclusiveMinimum": 0,
          "title": "Netconf Retry Interval",
          "type": "integer"
        }
      },
      "title": "JuniperConfig",
      "type": "object"
    },
    "L2connect": {
      "description": "This config the allocation for l2 service",
      "properties": {
        "service_entity_name": {
          "default": "l2Connect",
          "description": "Name of the lsm service entity exposed in the service catalog.",
          "title": "Service Entity Name",
          "type": "string"
        },
        "lifecycle": {
          "description": "Lifecycle configuration of the service.",
          "oneOf": [
            {
              "$ref": "#/$defs/ServiceLifecycleConfig"
            },
            {
              "$ref": "#/$defs/ExternalLifecycleConfig"
            }
          ],
          "title": "Lifecycle"
        },
        "evi_range": {
          "$ref": "#/$defs/EviPoolConfig",
          "description": "Pool of evi Numbers."
        },
        "rd_range": {
          "$ref": "#/$defs/RouteDistinguisherPoolConfig",
          "description": "Pool of Route Distinguisher Numbers."
        },
        "rt_range": {
          "$ref": "#/$defs/RouteTargetPoolConfig",
          "description": "Pool of Route Target Numbers."
        },
        "vlan_ranges": {
          "additionalProperties": {
            "$ref": "#/$defs/VlanIdConfig"
          },
          "description": "The named vlan ranges within which vlans are allocated.  When a vlan needs to be allocated for a node, the `vlan_range_selector` template selects, by name, which of these ranges the vlan should be picked from.  The `default` range is used by the default `vlan_range_selector`.",
          "title": "Vlan Ranges",
          "type": "object"
        },
        "vlan_range_selector": {
          "default": "default",
          "description": "Selects, by name, the vlan range the service's nodes should allocate their vlans from.  Either the name of one of the `vlan_ranges` directly (the default), or an `InmantaTemplatePath` to a template generating that name.  The range is selected once per service: nodes sharing a vlan pool token share a single vlan, so the same range has to apply to the whole service.  Template context: service (the ConnectionService), attributes (the raw service attributes dict, including the `details` decomposition, e.g. `attributes[\"details\"][\"nodes\"]`), config (the ConnectConfig).",
          "title": "Vlan Range Selector",
          "type": "string"
        }
      },
      "title": "L2connect",
      "type": "object"
    },
    "L3VPNConfig": {
      "properties": {
        "service_entity_name": {
          "default": "L3VPN",
          "description": "Name of the lsm service entity exposed in the service catalog.",
          "title": "Service Entity Name",
          "type": "string"
        },
        "lifecycle": {
          "description": "Lifecycle configuration of the service.",
          "oneOf": [
            {
              "$ref": "#/$defs/ServiceLifecycleConfig"
            },
            {
              "$ref": "#/$defs/ExternalLifecycleConfig"
            }
          ],
          "title": "Lifecycle"
        },
        "documentation_template": {
          "default": "template://connect/l3vpn_documentation.md.j2",
          "description": "Template rendering the content of the l3vpn service documentation tab.",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Documentation Template",
          "type": "string"
        },
        "p2p_networks_v4": {
          "description": "Pool of IP networks for P2P /31 connections.",
          "items": {
            "format": "ipv4network",
            "type": "string"
          },
          "title": "P2P Networks V4",
          "type": "array"
        },
        "p2p_networks_v6": {
          "description": "Pool of IP networks for P2P /127 connections.",
          "items": {
            "format": "ipv6network",
            "type": "string"
          },
          "title": "P2P Networks V6",
          "type": "array"
        },
        "rd_range": {
          "$ref": "#/$defs/RouteDistinguisherPoolConfig",
          "description": "Pool of Route Distinguisher Numbers."
        },
        "rt_range": {
          "$ref": "#/$defs/RouteTargetPoolConfig",
          "description": "Pool of Route Targets."
        }
      },
      "title": "L3VPNConfig",
      "type": "object"
    },
    "LabelDistributionProtocolConfig": {
      "description": "This is the LDP config.",
      "properties": {},
      "title": "LabelDistributionProtocolConfig",
      "type": "object"
    },
    "LagIdConfig": {
      "description": "This is the Uni service's lag id config. It determines the range of ids that can be used for the allocation of the lag.",
      "properties": {
        "start": {
          "default": 1,
          "description": "Start of the lag id range.  (Value included in the range)",
          "title": "Start",
          "type": "integer"
        },
        "end": {
          "default": 64,
          "description": "End of the lag id range.  (Value included in the range)",
          "title": "End",
          "type": "integer"
        }
      },
      "title": "LagIdConfig",
      "type": "object"
    },
    "LightspanConfig": {
      "description": "Configuration for the Nokia Lightspan (fiber access / OLT) vendor model.",
      "properties": {
        "verify": {
          "$ref": "#/$defs/LightspanVerifyConfig",
          "description": "Operational-verification thresholds for lightspan services."
        },
        "gemport_id_range": {
          "$ref": "#/$defs/GemportIdConfig",
          "description": "Range from which the gem-port / t-cont allocation id is allocated.  The ids are currently allocated globally (unique across all services), pending finer, per-pon scoping."
        }
      },
      "title": "LightspanConfig",
      "type": "object"
    },
    "LightspanVerifyConfig": {
      "description": "Thresholds for the operational verifications run on lightspan services.  The\nupstream rssi range is per PON technology, since the OLT receiver sensitivity\nand overload points differ between 25GS-PON and XGS-PON.",
      "properties": {
        "rssi_25gspon": {
          "$ref": "#/$defs/OpticalPowerRangeConfig",
          "description": "Accepted OLT-measured upstream rssi range for 25GS-PON ONTs."
        },
        "rssi_xgspon": {
          "$ref": "#/$defs/OpticalPowerRangeConfig",
          "description": "Accepted OLT-measured upstream rssi range for XGS-PON ONTs."
        },
        "ont_rx_power": {
          "$ref": "#/$defs/OpticalPowerRangeConfig",
          "description": "Accepted downstream optical power received at the ONT, read from the ONT through the OLT's emulated-onu mount."
        },
        "max_fiber_distance_m": {
          "default": 20000,
          "description": "Maximum accepted ONT ranging distance, in meters.",
          "exclusiveMinimum": 0,
          "title": "Max Fiber Distance M",
          "type": "integer"
        },
        "max_uncorrectable_fec": {
          "default": 0,
          "description": "Maximum accepted uncorrectable FEC codewords in the ONT's current 15-min performance interval.",
          "minimum": 0,
          "title": "Max Uncorrectable Fec",
          "type": "integer"
        }
      },
      "title": "LightspanVerifyConfig",
      "type": "object"
    },
    "MultiHomingConfig": {
      "description": "This is the MultiHoming config.",
      "properties": {
        "enabled": {
          "default": false,
          "description": "Whether multi homing is enabled (disabled by default).",
          "title": "Enabled",
          "type": "boolean"
        },
        "lag_id": {
          "default": "template://connect/lag_id.j2",
          "description": "Template generating the lag identifier for multi homed unis (an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Lag Id",
          "type": "string"
        },
        "es_id": {
          "default": "template://connect/es_id.j2",
          "description": "Template generating the ethernet segment identifier for multi homing (a string).  Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Es Id",
          "type": "string"
        },
        "es_name": {
          "default": "template://connect/es_name.j2",
          "description": "Template generating the ethernet segment name for multi homing (a string).  Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Es Name",
          "type": "string"
        },
        "create_esi": {
          "default": true,
          "description": "Whether to create the ethernet segment on the router, set it to True if you don't create it yourself.",
          "title": "Create Esi",
          "type": "boolean"
        }
      },
      "title": "MultiHomingConfig",
      "type": "object"
    },
    "NetboxInventory": {
      "properties": {
        "url": {
          "description": "Base URL of NetBox instance.",
          "pattern": "^https?://[^/]+?(:\\d+)?/?$",
          "title": "Url",
          "type": "string"
        },
        "token": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "NetBox API token, takes priority over `token_env`.",
          "title": "Token"
        },
        "token_env": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Environment variable with NetBox API token.",
          "title": "Token Env"
        },
        "agent_autostart": {
          "default": false,
          "description": "Autostart all netbox agents.",
          "title": "Agent Autostart",
          "type": "boolean"
        }
      },
      "required": [
        "url"
      ],
      "title": "NetboxInventory",
      "type": "object"
    },
    "NetworkElementConfig": {
      "description": "Configuration of the NetworkElement service.",
      "properties": {
        "service_entity_name": {
          "default": "NetworkElement",
          "description": "Name of the lsm service entity exposed in the service catalog.",
          "title": "Service Entity Name",
          "type": "string"
        },
        "lifecycle": {
          "description": "Lifecycle configuration of the service.",
          "oneOf": [
            {
              "$ref": "#/$defs/ServiceLifecycleConfig"
            },
            {
              "$ref": "#/$defs/ExternalLifecycleConfig"
            }
          ],
          "title": "Lifecycle"
        },
        "partial_compile_select_all": {
          "default": false,
          "description": "Select all NetworkElement instances in partial compiles, instead of only the ones the compiled services depend on.",
          "title": "Partial Compile Select All",
          "type": "boolean"
        },
        "documentation_template": {
          "default": "template://connect/network_element_documentation.md.j2",
          "description": "Template rendering the content of the network element service documentation tab.",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Documentation Template",
          "type": "string"
        }
      },
      "title": "NetworkElementConfig",
      "type": "object"
    },
    "NniIdConfig": {
      "description": "Range from which the tibit OLT nni-network id is picked.  The id used to be\nderived from the vlan (``vlan % 10``), which collided for vlans congruent\nmodulo 10 and shuffled the id on a vlan update.  It is now allocated,\nuniquely per OLT, from this range instead.",
      "properties": {
        "start": {
          "default": 0,
          "description": "Start of the nni-network id range.  (Value included in the range)",
          "minimum": 0,
          "title": "Start",
          "type": "integer"
        },
        "end": {
          "default": 255,
          "description": "End of the nni-network id range.  (Value included in the range)",
          "exclusiveMinimum": 0,
          "title": "End",
          "type": "integer"
        }
      },
      "title": "NniIdConfig",
      "type": "object"
    },
    "NokiaBGPConfig": {
      "description": "This is Nokia bgp config",
      "properties": {
        "resolution": {
          "default": "any",
          "description": "Resolution method for tunnel selection.",
          "enum": [
            "none",
            "filter",
            "any"
          ],
          "title": "Resolution",
          "type": "string"
        },
        "tagging": {
          "default": true,
          "description": "Enable/disable enforcement of strict tunnel tagging.",
          "title": "Tagging",
          "type": "boolean"
        },
        "filters": {
          "$ref": "#/$defs/NokiaBGPFiltersConfig",
          "description": "Resolution filters for auto-bind-tunnel."
        },
        "local_attachment_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "template://connect/nokia/local_attachment_name.j2",
          "description": "Name of the local attachment circuit, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig), port_id (the id of the port this is attached to).",
          "title": "Local Attachment Name"
        },
        "remote_attachment_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "template://connect/nokia/remote_attachment_name.j2",
          "description": "Name of the remote attachment circuit, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig), port_id (the id of the port this is attached to).",
          "title": "Remote Attachment Name"
        }
      },
      "title": "NokiaBGPConfig",
      "type": "object"
    },
    "NokiaBGPFiltersConfig": {
      "properties": {
        "ldp": {
          "default": false,
          "description": "Enable/disable setting LDP type for auto-bind-tunnel.",
          "title": "Ldp",
          "type": "boolean"
        },
        "rsvp": {
          "default": false,
          "description": "Enable/disable setting RSVP-TE type for auto-bind-tunnel.",
          "title": "Rsvp",
          "type": "boolean"
        },
        "sr_isis": {
          "default": false,
          "description": "Enable/disable setting SR-ISIS type for auto-bind-tunnel.",
          "title": "Sr Isis",
          "type": "boolean"
        },
        "sr_te": {
          "default": false,
          "description": "Enable/disable setting SR-TE type for auto-bind-tunnel.",
          "title": "Sr Te",
          "type": "boolean"
        }
      },
      "title": "NokiaBGPFiltersConfig",
      "type": "object"
    },
    "NokiaConfig": {
      "description": "This is the Nokia config.",
      "properties": {
        "netconf_retry_count": {
          "default": 5,
          "description": "Number of netconf retries before a failure.",
          "exclusiveMinimum": 0,
          "title": "Netconf Retry Count",
          "type": "integer"
        },
        "netconf_retry_interval": {
          "default": 5,
          "description": "Interval time in seconds between netconf retries.",
          "exclusiveMinimum": 0,
          "title": "Netconf Retry Interval",
          "type": "integer"
        },
        "customer_id": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "1",
          "description": "Customer id, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Customer Id"
        },
        "epipe": {
          "$ref": "#/$defs/NokiaEpipeConfig",
          "description": "This is Nokia's epipe configuration."
        },
        "vpls": {
          "$ref": "#/$defs/NokiaVplsConfig",
          "description": "This is Nokia's vpls configuration."
        },
        "uni": {
          "$ref": "#/$defs/NokiaUniConfig",
          "description": "This is Nokia's uni configuration."
        }
      },
      "title": "NokiaConfig",
      "type": "object"
    },
    "NokiaEVPNConfig": {
      "description": "This is Nokia EVPN config",
      "properties": {
        "bgp": {
          "$ref": "#/$defs/NokiaBGPConfig",
          "description": "This is the config for Nokia's bgp."
        }
      },
      "title": "NokiaEVPNConfig",
      "type": "object"
    },
    "NokiaEpipeConfig": {
      "description": "This is the Nokia epipe config",
      "properties": {
        "enable_sdp": {
          "default": true,
          "description": "Controls the creation of E-Pipe with SDP.",
          "title": "Enable Sdp",
          "type": "boolean"
        },
        "service_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "template://connect/nokia/epipe_service_name.j2",
          "description": "Epipe service name, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig), vcid (the service id of the epipe, as an integer).",
          "title": "Service Name"
        },
        "qos_ingress": {
          "$ref": "#/$defs/NokiaEpipeQosIngressConfig",
          "description": "QoS configuration of the epipe (ingress)."
        },
        "qos_egress": {
          "$ref": "#/$defs/NokiaEpipeQosEgressConfig",
          "description": "QoS configuration of the epipe (egress)."
        },
        "evpn": {
          "$ref": "#/$defs/NokiaEVPNConfig",
          "description": "This is the config for Nokia EVPN."
        },
        "sap_id": {
          "default": "template://connect/nokia/sap_id.j2",
          "description": "Template generating the SAP interface name (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig), port (the name of a port).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Sap Id",
          "type": "string"
        },
        "sap_description": {
          "default": "template://connect/nokia/sap_description.j2",
          "description": "Template generating the SAP description (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Sap Description",
          "type": "string"
        },
        "esi_port_id": {
          "default": "template://connect/nokia/port_esi.j2",
          "description": "Template generating the interface name for esi (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig), port_id (the id of the port this is attached to).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Esi Port Id",
          "type": "string"
        }
      },
      "title": "NokiaEpipeConfig",
      "type": "object"
    },
    "NokiaEpipeQosEgressConfig": {
      "properties": {
        "cbs": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "auto",
          "description": "Epipe cbs, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Cbs"
        },
        "mbs": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "auto",
          "description": "Epipe mbs, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Mbs"
        },
        "pir": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "max",
          "description": "Epipe pir, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Pir"
        },
        "policy_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "default-policy",
          "description": "Epipe policy name, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Policy Name"
        },
        "queue_id": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "integer"
            }
          ],
          "default": 3,
          "description": "Epipe queue id, or a template generating it (an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Queue Id"
        }
      },
      "title": "NokiaEpipeQosEgressConfig",
      "type": "object"
    },
    "NokiaEpipeQosIngressConfig": {
      "properties": {
        "cbs": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "auto",
          "description": "Epipe cbs, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Cbs"
        },
        "mbs": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "auto",
          "description": "Epipe mbs, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Mbs"
        },
        "pir": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "max",
          "description": "Epipe pir, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Pir"
        },
        "policy_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "default-policy",
          "description": "Epipe policy name, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Policy Name"
        },
        "policer_id": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "integer"
            }
          ],
          "default": 3,
          "description": "Epipe policer id, or a template generating it (an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Policer Id"
        }
      },
      "title": "NokiaEpipeQosIngressConfig",
      "type": "object"
    },
    "NokiaUniConfig": {
      "description": "This is the Nokia user network interface config.",
      "properties": {
        "netconf_retry_count": {
          "default": 5,
          "description": "Number of netconf retries before a failure.",
          "exclusiveMinimum": 0,
          "title": "Netconf Retry Count",
          "type": "integer"
        },
        "netconf_retry_interval": {
          "default": 5,
          "description": "Interval time in seconds between netconf retries.",
          "exclusiveMinimum": 0,
          "title": "Netconf Retry Interval",
          "type": "integer"
        },
        "port_mode": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "enum": [
                "access",
                "network",
                "hybrid"
              ],
              "type": "string"
            }
          ],
          "default": "template://connect/nokia/port_mode.j2",
          "description": "Operation mode for the Ethernet port, or a template generating it (one of access, network, hybrid).  Template context: instance (the user network interface), port (the port using this ethernet mode).",
          "title": "Port Mode"
        }
      },
      "title": "NokiaUniConfig",
      "type": "object"
    },
    "NokiaVplsConfig": {
      "description": "This is the Nokia vpls config",
      "properties": {
        "service_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "template://connect/nokia/vpls_service_name.j2",
          "description": "Vpls service name, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig), vcid (the service id of the epipe, as an integer).",
          "title": "Service Name"
        },
        "qos_ingress": {
          "$ref": "#/$defs/NokiaVplsQosIngressConfig",
          "description": "QoS configuration of the vpls (ingress)."
        },
        "qos_egress": {
          "$ref": "#/$defs/NokiaVplsQosEgressConfig",
          "description": "QoS configuration of the vpls (egress)."
        },
        "evpn": {
          "$ref": "#/$defs/NokiaEVPNConfig",
          "description": "This is the config for Nokia EVPN."
        },
        "fdb": {
          "$ref": "#/$defs/NokiaVplsFdbConfig",
          "description": "Forwarding database (FDB) config."
        },
        "proxy_arp": {
          "$ref": "#/$defs/NokiaVplsProxyArpConfig",
          "description": "ARP Proxy config."
        },
        "sap_id": {
          "default": "template://connect/nokia/sap_id.j2",
          "description": "Template generating the SAP interface name (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig), port (the name of a port).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Sap Id",
          "type": "string"
        },
        "sap_description": {
          "default": "template://connect/nokia/sap_description.j2",
          "description": "Template generating the SAP description (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Sap Description",
          "type": "string"
        },
        "sap_dist_cpu_protection": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Name of dist-cpu-protection policy, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Sap Dist Cpu Protection"
        }
      },
      "title": "NokiaVplsConfig",
      "type": "object"
    },
    "NokiaVplsFdbConfig": {
      "description": "Forwarding database (FDB) config",
      "properties": {
        "table_high_wmark": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "integer"
            }
          ],
          "default": 80,
          "description": "FDB high_wmark parameter, or a template generating it (an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Table High Wmark"
        },
        "table_low_wmark": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "integer"
            }
          ],
          "default": 60,
          "description": "FDB low_wmark parameter, or a template generating it (an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Table Low Wmark"
        },
        "table_size": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "integer"
            }
          ],
          "default": 2500,
          "description": "FDB table size parameter, or a template generating it (an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Table Size"
        }
      },
      "title": "NokiaVplsFdbConfig",
      "type": "object"
    },
    "NokiaVplsProxyArpConfig": {
      "description": "ARP Proxy config",
      "properties": {
        "age_time": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "900",
          "description": "ARP Proxy age_time parameter, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Age Time"
        },
        "send_refresh": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "300",
          "description": "ARP Proxy send_refresh parameter, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Send Refresh"
        },
        "table_size": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "integer"
            }
          ],
          "default": 2500,
          "description": "ARP Proxy table size parameter, or a template generating it (an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Table Size"
        }
      },
      "title": "NokiaVplsProxyArpConfig",
      "type": "object"
    },
    "NokiaVplsQosEgressConfig": {
      "description": "VPLS QoS Egress config",
      "properties": {
        "cbs": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "auto",
          "description": "Epipe cbs, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Cbs"
        },
        "mbs": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "auto",
          "description": "Epipe mbs, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Mbs"
        },
        "pir": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "max",
          "description": "Epipe pir, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Pir"
        },
        "policy_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "default-policy",
          "description": "Epipe policy name, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Policy Name"
        },
        "queue_id": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "integer"
            }
          ],
          "default": 1,
          "description": "Queue id, or a template generating it (an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Queue Id"
        }
      },
      "title": "NokiaVplsQosEgressConfig",
      "type": "object"
    },
    "NokiaVplsQosIngressConfig": {
      "description": "VPLS QoS Ingress config",
      "properties": {
        "cbs": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "auto",
          "description": "Epipe cbs, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Cbs"
        },
        "mbs": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "auto",
          "description": "Epipe mbs, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Mbs"
        },
        "pir": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": "max",
          "description": "Epipe pir, or a template generating it (a string or an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Pir"
        },
        "policy_name": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "string"
            }
          ],
          "default": "default-policy",
          "description": "Epipe policy name, or a template generating it (a string). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Policy Name"
        },
        "queue_id": {
          "anyOf": [
            {
              "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
              "type": "string"
            },
            {
              "type": "integer"
            }
          ],
          "default": 1,
          "description": "Queue id, or a template generating it (an integer). Template context: instance (the CarrierEthernetEvcEndPoint), config (the ConnectConfig).",
          "title": "Queue Id"
        }
      },
      "title": "NokiaVplsQosIngressConfig",
      "type": "object"
    },
    "OpticalPowerRangeConfig": {
      "description": "Accepted optical power range (min/max) in 0.1 dBm, e.g. -280 == -28.0 dBm.\nUsed by the lightspan operational verifications.",
      "properties": {
        "min": {
          "default": -280,
          "description": "Lower bound.  A value below this fails the verification (too weak: at the receiver sensitivity floor, not ranged, or fiber degraded).",
          "title": "Min",
          "type": "integer"
        },
        "max": {
          "default": -80,
          "description": "Upper bound.  A value above this fails the verification (too strong: receiver overload, e.g. the drop is too short).",
          "title": "Max",
          "type": "integer"
        }
      },
      "title": "OpticalPowerRangeConfig",
      "type": "object"
    },
    "RouteDistinguisherPoolConfig": {
      "description": "Route Distinguisher pool config used by allocators",
      "properties": {
        "start": {
          "default": 1,
          "description": "Start of the RD range.  (Value included in the range)",
          "exclusiveMinimum": 0,
          "title": "Start",
          "type": "integer"
        },
        "end": {
          "default": 100,
          "description": "End of the RD range.  (Value included in the range)",
          "exclusiveMaximum": 65536,
          "exclusiveMinimum": 0,
          "title": "End",
          "type": "integer"
        }
      },
      "title": "RouteDistinguisherPoolConfig",
      "type": "object"
    },
    "RouteTargetPoolConfig": {
      "description": "Route Target pool config used by allocators",
      "properties": {
        "start": {
          "default": 1,
          "description": "Start of the RT range.  (Value included in the range)",
          "exclusiveMinimum": 0,
          "title": "Start",
          "type": "integer"
        },
        "end": {
          "default": 100,
          "description": "End of the RT range.  (Value included in the range)",
          "exclusiveMaximum": 65536,
          "exclusiveMinimum": 0,
          "title": "End",
          "type": "integer"
        }
      },
      "title": "RouteTargetPoolConfig",
      "type": "object"
    },
    "ServiceIdConfig": {
      "description": "This is the CarrierEthernetEvc's service id config.  It determines from which range and\nusing which strategy, service ids allocated to CarrierEthernetEvcs should be picked.",
      "properties": {
        "start": {
          "default": 1,
          "description": "Start of the service id range.  (Value included in the range)",
          "exclusiveMinimum": 0,
          "title": "Start",
          "type": "integer"
        },
        "end": {
          "default": 100,
          "description": "End of the service id range.  (Value included in the range)",
          "exclusiveMinimum": 0,
          "title": "End",
          "type": "integer"
        },
        "strategy": {
          "default": "next",
          "description": "Strategy to use to determine the next service_id to allocate: `next` takes the first available id in the range, `any` takes any available id in the range.",
          "enum": [
            "next",
            "any"
          ],
          "title": "Strategy",
          "type": "string"
        }
      },
      "title": "ServiceIdConfig",
      "type": "object"
    },
    "ServiceLifecycleConfig": {
      "description": "Configure the lifecycle of a service, built by the connect lifecycle\nfactory (``connect::fsm::LifecycleFactory``).",
      "properties": {
        "type": {
          "const": "factory",
          "default": "factory",
          "description": "Discriminator selecting a lifecycle built by the connect lifecycle factory from the flags below.  This is the default when the field is omitted.",
          "title": "Type",
          "type": "string"
        },
        "name": {
          "description": "Name of this lifecycle configuration.",
          "title": "Name",
          "type": "string"
        },
        "with_deletion_validation": {
          "description": "Run a validation compile before accepting the deletion of a service instance.",
          "title": "With Deletion Validation",
          "type": "boolean"
        },
        "with_forced_deletion": {
          "description": "Add states allowing to force the deletion of a service instance, skipping the removal of its resources.",
          "title": "With Forced Deletion",
          "type": "boolean"
        },
        "with_update": {
          "default": true,
          "description": "Allow service instances to be updated after creation.",
          "title": "With Update",
          "type": "boolean"
        },
        "with_update_dryrun": {
          "default": false,
          "description": "Perform a dryrun during updates, requiring the operator to review it.",
          "title": "With Update Dryrun",
          "type": "boolean"
        },
        "with_update_rollback": {
          "default": false,
          "description": "Allow a started update to be rolled back to the previous attributes.",
          "title": "With Update Rollback",
          "type": "boolean"
        },
        "with_update_confirmation": {
          "default": false,
          "description": "Require an operator confirmation before completing an update.",
          "title": "With Update Confirmation",
          "type": "boolean"
        },
        "with_maintenance": {
          "description": "Add states allowing to put a service instance in maintenance mode.",
          "title": "With Maintenance",
          "type": "boolean"
        },
        "with_repair": {
          "description": "Add states allowing to trigger a repair of a service instance.",
          "title": "With Repair",
          "type": "boolean"
        },
        "with_onboarding": {
          "default": false,
          "description": "Add states allowing to onboard existing services into the orchestrator.",
          "title": "With Onboarding",
          "type": "boolean"
        }
      },
      "required": [
        "name",
        "with_deletion_validation",
        "with_forced_deletion",
        "with_maintenance",
        "with_repair"
      ],
      "title": "ServiceLifecycleConfig",
      "type": "object"
    },
    "TibitConfig": {
      "description": "Configuration for the Tibit (pon / OLT) vendor model.",
      "properties": {
        "nni_id_range": {
          "$ref": "#/$defs/NniIdConfig",
          "description": "Range from which the OLT nni-network id is allocated, uniquely per OLT."
        }
      },
      "title": "TibitConfig",
      "type": "object"
    },
    "UniConfig": {
      "properties": {
        "service_entity_name": {
          "default": "UserNetworkInterface",
          "description": "Name of the lsm service entity exposed in the service catalog.",
          "title": "Service Entity Name",
          "type": "string"
        },
        "lifecycle": {
          "description": "Lifecycle configuration of the service.",
          "oneOf": [
            {
              "$ref": "#/$defs/ServiceLifecycleConfig"
            },
            {
              "$ref": "#/$defs/ExternalLifecycleConfig"
            }
          ],
          "title": "Lifecycle"
        },
        "lag_id_range": {
          "$ref": "#/$defs/LagIdConfig",
          "description": "The range of possible lag ids when using multi-homing."
        },
        "documentation_template": {
          "default": "template://connect/uni_documentation.md.j2",
          "description": "Template rendering the content of the uni service documentation tab.",
          "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
          "title": "Documentation Template",
          "type": "string"
        }
      },
      "title": "UniConfig",
      "type": "object"
    },
    "VlanIdConfig": {
      "description": "A named vlan range.  It determines from which range, and using which strategy,\nvlans allocated by the l2Connect service should be picked.",
      "properties": {
        "start": {
          "default": 1,
          "description": "Start of the vlan range.  (Value included in the range)",
          "exclusiveMinimum": 0,
          "title": "Start",
          "type": "integer"
        },
        "end": {
          "default": 100,
          "description": "End of the vlan range.  (Value included in the range)",
          "exclusiveMinimum": 0,
          "title": "End",
          "type": "integer"
        },
        "strategy": {
          "default": "next",
          "description": "Strategy to use to determine the next vlan to allocate: `next` takes the first available id in the range, `any` takes any available id in the range.",
          "enum": [
            "next",
            "any"
          ],
          "title": "Strategy",
          "type": "string"
        }
      },
      "title": "VlanIdConfig",
      "type": "object"
    }
  },
  "description": "This is the root of the configuration.\nEach entry in the configuration file should correspond to one of the embedded Config objects.",
  "properties": {
    "inventory": {
      "$ref": "#/$defs/InventoryConfig",
      "description": "This is the main config, it contains elements transient to the whole module usage."
    },
    "carrier_ethernet_evc": {
      "$ref": "#/$defs/CarrierEthernetEvcConfig",
      "description": "This is the CarrierEthernetEvc config for the whole module."
    },
    "direct_internet_access": {
      "$ref": "#/$defs/DirectInternetAccess",
      "description": "This is the DirectInternetAccess service config for the whole module."
    },
    "l2connect": {
      "$ref": "#/$defs/L2connect",
      "description": "This is the l2Connect service config for the whole module."
    },
    "l3vpn": {
      "$ref": "#/$defs/L3VPNConfig",
      "description": "This is the L3VPN service config for the whole module."
    },
    "label_distribution_protocol": {
      "$ref": "#/$defs/LabelDistributionProtocolConfig",
      "description": "This is the LDP config for the whole module."
    },
    "nokia": {
      "$ref": "#/$defs/NokiaConfig",
      "description": "This is the Nokia config for the whole module."
    },
    "cisco": {
      "$ref": "#/$defs/CiscoConfig",
      "description": "This is the Cisco config for the whole module."
    },
    "juniper": {
      "$ref": "#/$defs/JuniperConfig",
      "description": "This is the Juniper config for the whole module."
    },
    "lightspan": {
      "$ref": "#/$defs/LightspanConfig",
      "description": "This is the Nokia Lightspan (fiber access / OLT) config for the whole module."
    },
    "tibit": {
      "$ref": "#/$defs/TibitConfig",
      "description": "This is the Tibit (pon / OLT) config for the whole module."
    },
    "eth_cfm": {
      "$ref": "#/$defs/EthernetCFMConfig",
      "description": "This is the ethernet cfm config for the whole module."
    },
    "uni": {
      "$ref": "#/$defs/UniConfig",
      "description": "This is the uni service config for the whole module."
    },
    "network_element": {
      "$ref": "#/$defs/NetworkElementConfig",
      "description": "This is the network element service config for the whole module."
    },
    "asn": {
      "default": 1,
      "description": "AS number for the system we manage.",
      "title": "Asn",
      "type": "integer"
    },
    "documentation_template": {
      "default": "template://connect/l2_connect_documentation.md.j2",
      "description": "Template rendering the content of the l2Connect service documentation tab.",
      "pattern": "^template:\\/\\/([^\\/]+)?(\\/[^\\/]+)+$",
      "title": "Documentation Template",
      "type": "string"
    },
    "web_console_suggestions": {
      "default": true,
      "description": "Whether to publish suggested values (e.g. the available network element names) to the web console during validation compiles.  Enabled by default; disable it in environments where the parameter api is not reachable, such as the mocked lsm tests.",
      "title": "Web Console Suggestions",
      "type": "boolean"
    }
  },
  "title": "ConnectConfig",
  "type": "object"
}
