{ "$id": "https://containerlab.dev/clab.schema.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Containerlab topology definition file", "definitions": { "env": { "type": "object", "description": "environment variables", "markdownDescription": "[environment variables](https://containerlab.dev/manual/nodes/#env)", "patternProperties": { ".+": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" } ] } } }, "node-config": { "type": "object", "description": "topology node configuration container", "markdownDescription": "topology [node](https://containerlab.dev/manual/nodes/) configuration container", "properties": { "image": { "type": "string", "description": "container image to use for this node", "markdownDescription": "container [image](https://containerlab.dev/manual/nodes/#image) to use for this node" }, "image-pull-policy": { "type": "string", "description": "policy for pulling the referenced container image", "markdownDescription": "container [image-pull-policy](https://containerlab.dev/manual/nodes/#image-pull-policy) to use for this node", "enum": [ "always", "Always", "never", "Never", "ifnotpresent", "IfNotPresent" ] }, "restart-policy": { "type": "string", "description": "restart policy for the referenced container image", "markdownDescription": "container [restart-policy](https://containerlab.dev/manual/nodes/#restart-policy) to use for this node", "enum": [ "no", "No", "on-failure", "On-failure", "Always", "always", "unless-stopped", "Unless-stopped" ] }, "kind": { "type": "string", "description": "kind of this node", "markdownDescription": "[kind](https://containerlab.dev/manual/nodes/#kind) of this node", "enum": [ "nokia_srlinux", "arista_ceos", "juniper_crpd", "sonic-vs", "sonic-vm", "nokia_sros", "nokia_srsim", "juniper_vmx", "juniper_vqfx", "juniper_vsrx", "juniper_vjunosrouter", "juniper_vjunosswitch", "juniper_vjunosevolved", "cisco_xrv", "cisco_xrv9k", "arista_veos", "cisco_csr1000v", "paloalto_panos", "mikrotik_ros", "6wind_vsr", "cisco_n9kv", "cisco_ftdv", "dell_ftosv", "dell_sonic", "aruba_aoscx", "linux", "bridge", "ovs-bridge", "border0", "host", "keysight_ixia-c-one", "ipinfusion_ocnos", "checkpoint_cloudguard", "ext-container", "rare", "cisco_xrd", "cisco_c8000", "cisco_c8000v", "cisco_cat9kv", "cisco_iol", "cisco_asav", "cisco_vios", "cumulus_cvx", "huawei_vrp", "openbsd", "freebsd", "generic_vm", "fortinet_fortigate", "k8s-kind", "fdio_vpp", "vyosnetworks_vyos", "juniper_cjunosevolved", "arrcus_arcos", "f5_bigip-ve", "cisco_sdwan", "openwrt", "spirent_stc", "veesix_osvbng", "ostinato" ] }, "license": { "type": "string", "description": "path to a license file", "markdownDescription": "path to a [license](https://containerlab.dev/manual/nodes/#license) file" }, "type": { "type": "string", "description": "type is a per-node property that can select a special type of a node", "markdownDescription": "node's [type](https://containerlab.dev/manual/nodes/#type) file" }, "group": { "type": "string", "description": "grouping parameter of a node. A free form string that is mainly used in sorting elements when graphing", "markdownDescription": "path to a [license](https://containerlab.dev/manual/nodes/#group) file" }, "startup-config": { "type": "string", "description": "path to a startup config file (if supported by the kind)", "markdownDescription": "path to a startup [config file](https://containerlab.dev/manual/nodes/#startup-config) (if supported by the kind)" }, "startup-delay": { "type": "integer", "description": "Optional startup delay (seconds) to apply", "markdownDescription": "Optional [startup delay](https://containerlab.dev/manual/nodes/#startup-delay) in seconds" }, "enforce-startup-config": { "type": "boolean", "description": "Set to `true` to make the node to boot with a startup-config even if the config file is present in the lab directory", "markdownDescription": "Set to `true` to [make the node to boot with a startup-config](https://containerlab.dev/manual/nodes/#enforce-startup-config) even if the config file is present in the lab directory" }, "suppress-startup-config": { "type": "boolean", "description": "Set to `true` to prevent a startup-config file from being created (in a Zero-Touch Provisioning lab, for example)", "markdownDescription": "Set to `true` to [prevent a startup-config file from being created](https://containerlab.dev/manual/nodes/#suppress-startup-config) By default, containerlab will create a startup-config when initially creating a lab." }, "auto-remove": { "type": "boolean", "description": "Set to `true` to remove the node automatically, instead of auto-restarting", "markdownDescription": "Set to `true` to [remove the node/container automatically](https://containerlab.dev/manual/nodes/#auto-remove), instead of auto-restarting it" }, "exec": { "type": "array", "description": "list of commands to execute post deploy", "markdownDescription": "list of [commands to execute](https://containerlab.dev/manual/nodes/#exec) post deploy", "minItems": 1, "items": { "type": "string" } }, "binds": { "type": "array", "description": "list of file/directory bindings", "markdownDescription": "list of file/directory [bindings](https://containerlab.dev/manual/nodes/#binds)", "minItems": 1, "items": { "type": "string" }, "uniqueItems": true }, "ports": { "type": "array", "description": "list of port mappings", "markdownDescription": "list of [port](https://containerlab.dev/manual/nodes/#ports) mappings", "minItems": 0, "items": { "type": "string", "pattern": "^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\\p{N}\\p{L}]+)?:([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]):([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$|^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\\p{N}\\p{L}]+)?:([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]):([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])+(/tcp|/udp|/sctp)$|^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]):([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$|^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]):([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])+(/tcp|/udp|/sctp)$|^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$|^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])-([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]):([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])+(/tcp|/udp|/sctp)?$" }, "uniqueItems": true }, "env": { "type": "object", "$ref": "#/definitions/env" }, "env-files": { "type": "array", "description": "list of external files containing environment variables", "markdownDescription": "list of external files containing [environment variables](https://containerlab.dev/manual/nodes/#env-files)", "minItems": 1, "items": { "type": "string" }, "uniqueItems": true }, "user": { "description": "user to use within the container", "markdownDescription": "[user](https://containerlab.dev/manual/nodes/#user) to use within the container", "anyOf": [ { "type": "string", "minLength": 1 }, { "type": "number", "minimum": 0 } ] }, "entrypoint": { "type": "string", "description": "container's entrypoint", "markdownDescription": "container's [entrypoint](https://containerlab.dev/manual/nodes/#entrypoint)" }, "cmd": { "type": "string", "description": "command to launch container with", "markdownDescription": "[command](https://containerlab.dev/manual/nodes/#cmd) to launch container with" }, "labels": { "$ref": "#/definitions/labels" }, "runtime": { "type": "string", "description": "Runtime used to launch the container node", "markdownDescription": "[Runtime](https://containerlab.dev/manual/nodes/#runtime) for the node", "enum": [ "docker", "podman" ] }, "mgmt-ipv4": { "description": "IPv4 management address of the node (e.g. 172.10.10.11)", "markdownDescription": "[IPv4 management address](https://containerlab.dev/manual/nodes/#mgmt-ipv4) of the node (e.g. 172.10.10.11)", "$ref": "#/definitions/ipv4-addr" }, "mgmt-ipv6": { "description": "IPv6 management address of the node (e.g. 172.10.10.11)", "markdownDescription": "[IPv6 management address](https://containerlab.dev/manual/nodes/#mgmt-ipv6) of the node (e.g. 172.10.10.11)", "$ref": "#/definitions/ipv6-addr" }, "network-mode": { "type": "string", "description": "node network mode (can only be set host, defaults to bridge)", "markdownDescription": "node [network mode](https://containerlab.dev/manual/nodes/#network-mode) (can only be set host, defaults to bridge)", "pattern": "^(host)|(container:\\S+)|(none)$" }, "cpu": { "type": "number", "description": "number of vcpu to allocate for this node/container", "markdownDescription": "Allowed [CPU](https://containerlab.dev/manual/nodes/#cpu) usage by the node/container", "minimum": 0 }, "memory": { "type": "string", "description": "memory limit for this node/container", "markdownDescription": "Allowed [Memory](https://containerlab.dev/manual/nodes/#memory) usage by the node/container" }, "cpu-set": { "type": "string", "description": "CPU cores to use by this node/container", "markdownDescription": "[CPU cores](https://containerlab.dev/manual/nodes/#cpu-set) to be used by the node/container" }, "extras": { "type": "object", "$ref": "#/definitions/extras-config" }, "config": { "$ref": "#/definitions/config-config" }, "stages": { "type": "object", "$ref": "#/definitions/stages-config" }, "dns": { "type": "object", "$ref": "#/definitions/dns-config" }, "certificate": { "type": "object", "$ref": "#/definitions/certificate-config" }, "healthcheck": { "type": "object", "$ref": "#/definitions/healthcheck-config" }, "components": { "type": "array", "items": { "type": "object", "properties": { "slot": { "description": "Set component physical position on a distributed chassis", "anyOf": [ { "type": "string", "pattern": "^[ABab]$" }, { "type": "integer", "minimum": 1 } ] }, "type": { "description": "Set component type" }, "sfm": { "description": "Set SFM type (SR OS specific).", "$ref": "#/definitions/sros-sfm-types" }, "xiom": { "type": "array", "description": "Define list of XIOMs (SR OS Specific). Each XIOM must have values of 'slot' and 'type'. MDAs must be defined under the XIOM.", "items": { "type": "object", "properties": { "slot": { "type": "integer", "minimum": 1 }, "type": { "$ref": "#/definitions/sros-xiom-types" }, "mda": { "type": "array", "description": "Define list of MDAs under this XIOM. Each defined MDA must have values of 'slot' and 'type'", "items": { "type": "object", "properties": { "slot": { "type": "integer", "minimum": 1 }, "type": { "$ref": "#/definitions/sros-xiom-mda-types" } }, "required": [ "slot", "type" ], "additionalProperties": false } } }, "required": [ "slot", "type" ], "additionalProperties": false }, "uniqueItems": true }, "mda": { "type": "array", "description": "Define list of MDAs (SR OS Specific). Each defined MDA must have values of 'slot' and 'type'", "items": { "type": "object", "properties": { "slot": { "type": "integer", "minimum": 1 }, "type": { "description": "Set MDA type (SR OS specific)", "$ref": "#/definitions/sros-mda-types" } }, "required": [ "slot", "type" ], "additionalProperties": false } }, "env": { "type": "object", "$ref": "#/definitions/env" } }, "additionalProperties": false, "allOf": [ { "if": { "properties": { "slot": { "type": "string" } } }, "then": { "properties": { "type": { "$ref": "#/definitions/sros-cpm-types" } } }, "else": { "properties": { "type": { "$ref": "#/definitions/sros-card-types" } } } } ] }, "uniqueItems": true, "description": "List of node components, used for multicontainer systems", "markdownDescription": "Dependency list for Components" }, "aliases": { "type": "array", "description": "list of additional network aliases for the node", "markdownDescription": "list of [aliases](https://containerlab.dev/manual/nodes/#aliases) for the node", "items": { "type": "string" }, "uniqueItems": true }, "shm-size": { "type": "string", "description": "shared memory size limit allocated to the container. Supported memory suffixes (case insensitive): b, kib, kb, mib, mb, gib, gb", "markdownDescription": "[shared memory size limit](https://containerlab.dev/manual/nodes/#shm-size) allocated to the container (e.g. 256MB). Supported memory suffixes (case insensitive): b, kib, kb, mib, mb, gib, gb", "pattern": "^[0-9]+(\\.?[0-9]*)?\\s*([bB]|[kK][iI]?[bB]|[mM][iI]?[bB]|[gG][iI]?[bB])?$" }, "cap-add": { "type": "array", "description": "list of capabilities to add to the container", "markdownDescription": "list of [capabilities](https://containerlab.dev/manual/nodes/#cap-add) to add to the container", "items": { "type": "string" }, "uniqueItems": true }, "sysctls": { "type": "object", "description": "sysctl kernel parameters to set in the container", "markdownDescription": "[sysctl kernel parameters](https://containerlab.dev/manual/nodes/#sysctls) to set in the container", "patternProperties": { ".+": { "anyOf": [ { "type": "string" }, { "type": "number" } ] } } }, "devices": { "type": "array", "description": "list of host devices to add to the container", "markdownDescription": "list of [host devices](https://containerlab.dev/manual/nodes/#devices) to add to the container", "items": { "type": "string" }, "uniqueItems": true } }, "allOf": [ { "properties": { "type": { "type": "string", "description": "type of a node", "markdownDescription": "node [type](https://containerlab.dev/manual/nodes/#type)" } } }, { "if": { "properties": { "kind": { "pattern": "(nokia_srlinux)" } }, "required": [ "kind" ] }, "then": { "properties": { "type": { "type": "string", "enum": [ "ixsa1", "ixs-a1", "ixrd1", "ixr-d1", "ixrd2", "ixr-d2", "ixrd3", "ixr-d3", "ixrd2l", "ixr-d2l", "ixrd3l", "ixr-d3l", "ixrd4", "ixr-d4", "ixrd5", "ixr-d5", "ixrh2", "ixr-h2", "ixrh3", "ixr-h3", "ixrh4", "ixr-h4", "ixrh432d", "ixr-h4-32d", "ixrh5", "ixr-h5", "ixrh564d", "ixr-h5-64d", "ixrh564o", "ixr-h5-64o", "ixr6", "ixr-6", "ixr6e", "ixr-6e", "ixr10", "ixr-10", "ixr10e", "ixr-10e", "ixr18e", "ixr-18e", "sxr1x44s", "sxr-1x-44s", "sxr1d32d", "sxr-1d-32d", "sxr-1-32d", "ixrx1b", "ixr-x1b", "ixrx3b", "ixr-x3b", "ixr-x4" ] } } } }, { "if": { "properties": { "kind": { "pattern": "(nokia_sros)" } }, "required": [ "kind" ] }, "then": { "properties": { "type": { "type": "string", "anyOf": [ { "enum": [ "sr-1", "sr-1-24d", "sr-1e", "sr-1e-sec", "sr-1s", "sr-1s-macsec", "sr-2s", "sr-7s", "sr-7s-fp4", "sr-14s", "sr-a4", "ixr-e-small", "ixr-e-big", "ixr-e2", "ixr-ec", "ixr-r6", "ixr-s" ] }, { "pattern": "^\\s*(?:(?:cp|lc):\\s+)?(?:(?:(?:min_)?(?:cpu|ram|max_nics)=\\d+|slot=[A-Za-z0-9]+|chassis=[^\\s_][^\\s]*|card=[^\\s_][^\\s]*|mda/\\d+=[^\\s]+)(?:\\s+|$))+(?:\\s*___\\s*(?:(?:cp|lc):\\s+)?(?:(?:(?:min_)?(?:cpu|ram|max_nics)=\\d+|slot=[A-Za-z0-9]+|chassis=[^\\s_][^\\s]*|card=[^\\s_][^\\s]*|mda/\\d+=[^\\s]+)(?:\\s+|$))+)*\\s*$" } ] } } } }, { "if": { "properties": { "kind": { "pattern": "(nokia_srsim)" } }, "required": [ "kind" ] }, "then": { "properties": { "type": { "type": "string", "anyOf": [ { "enum": [ "dms-1-24d", "ixr-10", "ixr-6", "ixr-e2c", "ixr-e2", "ixr-e2n", "ixr-ec", "ixr-e", "ixr-r4", "ixr-r6dl", "ixr-r6d", "ixr-r6", "ixr-s", "ixr-x3", "ixr-x", "sar-1", "sar-hm", "sar-hmc", "sr-1-24d", "sr-12e", "sr-12", "sr-1-46s", "sr-14s", "sr-1-92s", "sr-1e", "sr-1se", "sr-1s", "sr-1-48d", "sr-1x-48d", "sr-1x-92s", "sr-1", "sr-2e", "sr-2se", "sr-2s", "sr-3e", "sr-7s", "sr-7", "sr-a4", "sr-a8", "vsr-i", "xrs-20e", "xrs-20", "ess-7", "ess-12" ] } ] } } } }, { "if": { "properties": { "kind": { "pattern": "(cisco_iol)" } }, "required": [ "kind" ] }, "then": { "properties": { "type": { "type": "string", "enum": [ "iol", "l2" ] } } } } ], "additionalProperties": false }, "link-config-short": { "type": "object", "description": "link configuration container", "markdownDescription": "link configuration container", "properties": { "endpoints": { "type": "array", "description": "endpoints list", "markdownDescription": "[endpoints](http://localhost:8000/manual/topo-def-file/#links) list", "minItems": 2, "items": { "type": "string", "pattern": "^\\S+:\\S+$" }, "uniqueItems": true }, "mtu": { "$ref": "#/definitions/mtu" }, "ipv4": { "description": "Assign IPv4 per endpoint in brief links. Accepts ordered list of IPv4 prefixes as strings", "type": "array", "minItems": 1, "maxItems": 2, "items": { "type": "string", "pattern": "^(?:$|(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])/(?:[0-9]|[12][0-9]|3[0-2]))$" }, "uniqueItems": true }, "ipv6": { "description": "Assign IPv6 per endpoint in brief links. Accepts ordered list of IPv6 prefixes as strings", "type": "array", "minItems": 1, "maxItems": 2, "items": { "type": "string", "pattern": "^(?:$|(?:(?:[A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}|(?:[A-Fa-f0-9]{1,4}:){1,7}:|(?:[A-Fa-f0-9]{1,4}:){1,6}:[A-Fa-f0-9]{1,4}|(?:[A-Fa-f0-9]{1,4}:){1,5}(?::[A-Fa-f0-9]{1,4}){1,2}|(?:[A-Fa-f0-9]{1,4}:){1,4}(?::[A-Fa-f0-9]{1,4}){1,3}|(?:[A-Fa-f0-9]{1,4}:){1,3}(?::[A-Fa-f0-9]{1,4}){1,4}|(?:[A-Fa-f0-9]{1,4}:){1,2}(?::[A-Fa-f0-9]{1,4}){1,5}|[A-Fa-f0-9]{1,4}:(?::[A-Fa-f0-9]{1,4}){1,6}|:(?:(?::[A-Fa-f0-9]{1,4}){1,7}|:))/(?:[0-9]|[1-9][0-9]|1[01][0-9]|12[0-8]))$" }, "uniqueItems": true }, "vars": { "$ref": "#/definitions/link-vars" } }, "additionalProperties": false }, "link-type-veth": { "type": "object", "description": "Link definition to support the veth interfaces", "markdownDescription": "Link definition to support the veth interfaces", "properties": { "type": { "type": "string", "const": "veth" }, "endpoints": { "type": "array", "description": "Endpoints for the links", "minItems": 2, "maxItems": 2, "items": { "$ref": "#/definitions/link-endpoint" } }, "mtu": { "$ref": "#/definitions/mtu" }, "ipv4": { "description": "Assign IPv4 per endpoint. Accepts ordered list of IPv4 prefixes as strings", "type": "array", "minItems": 1, "maxItems": 2, "items": { "type": "string", "pattern": "^(?:$|(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])/(?:[0-9]|[12][0-9]|3[0-2]))$" }, "uniqueItems": true }, "ipv6": { "description": "Assign IPv6 per endpoint. Accepts ordered list of IPv6 prefixes as strings", "type": "array", "minItems": 1, "maxItems": 2, "items": { "type": "string", "pattern": "^(?:$|(?:(?:[A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}|(?:[A-Fa-f0-9]{1,4}:){1,7}:|(?:[A-Fa-f0-9]{1,4}:){1,6}:[A-Fa-f0-9]{1,4}|(?:[A-Fa-f0-9]{1,4}:){1,5}(?::[A-Fa-f0-9]{1,4}){1,2}|(?:[A-Fa-f0-9]{1,4}:){1,4}(?::[A-Fa-f0-9]{1,4}){1,3}|(?:[A-Fa-f0-9]{1,4}:){1,3}(?::[A-Fa-f0-9]{1,4}){1,4}|(?:[A-Fa-f0-9]{1,4}:){1,2}(?::[A-Fa-f0-9]{1,4}){1,5}|[A-Fa-f0-9]{1,4}:(?::[A-Fa-f0-9]{1,4}){1,6}|:(?:(?::[A-Fa-f0-9]{1,4}){1,7}|:))/(?:[0-9]|[1-9][0-9]|1[01][0-9]|12[0-8]))$" }, "uniqueItems": true }, "vars": { "$ref": "#/definitions/link-vars" }, "labels": { "$ref": "#/definitions/labels" } }, "required": [ "type", "endpoints" ], "additionalItems": false }, "link-type-mgmt-net": { "type": "object", "description": "Link definition for management network interfaces", "properties": { "type": { "type": "string", "const": "mgmt-net" }, "endpoint": { "$ref": "#/definitions/link-endpoint" }, "host-interface": { "$ref": "#/definitions/link-host-interface" }, "mtu": { "$ref": "#/definitions/mtu" }, "vars": { "$ref": "#/definitions/link-vars" }, "labels": { "$ref": "#/definitions/labels" } }, "required": [ "type", "endpoint", "host-interface" ], "additionalProperties": false }, "link-type-macvlan": { "type": "object", "description": "Link definition describing a macvlan link endpoint configuration", "properties": { "type": { "type": "string", "const": "macvlan" }, "endpoint": { "$ref": "#/definitions/link-endpoint" }, "host-interface": { "$ref": "#/definitions/link-host-interface" }, "mode": { "$ref": "#/definitions/link-macvlan-mode" }, "mtu": { "$ref": "#/definitions/mtu" }, "vars": { "$ref": "#/definitions/link-vars" }, "labels": { "$ref": "#/definitions/labels" } }, "required": [ "type", "endpoint", "host-interface" ], "additionalProperties": false }, "link-type-host": { "type": "object", "description": "", "properties": { "type": { "type": "string", "const": "host" }, "endpoint": { "$ref": "#/definitions/link-endpoint" }, "host-interface": { "$ref": "#/definitions/link-host-interface" }, "mtu": { "$ref": "#/definitions/mtu" }, "vars": { "$ref": "#/definitions/link-vars" }, "labels": { "$ref": "#/definitions/labels" } }, "required": [ "type", "endpoint", "host-interface" ], "additionalProperties": false }, "link-type-vxlan": { "type": "object", "description": "", "properties": { "type": { "type": "string", "const": "vxlan" }, "endpoint": { "$ref": "#/definitions/link-endpoint" }, "remote": { "$ref": "#/definitions/link-vxlan-remote" }, "vni": { "$ref": "#/definitions/link-vxlan-vni" }, "dst-port": { "$ref": "#/definitions/link-vxlan-dstport" }, "src-port": { "$ref": "#/definitions/link-vxlan-srcport" }, "mtu": { "$ref": "#/definitions/mtu" }, "vars": { "$ref": "#/definitions/link-vars" }, "labels": { "$ref": "#/definitions/labels" } }, "required": [ "type", "endpoint", "remote", "vni", "dst-port" ], "additionalProperties": false }, "link-type-vxlan-stitched": { "type": "object", "description": "", "properties": { "type": { "type": "string", "const": "vxlan-stitch" }, "endpoint": { "$ref": "#/definitions/link-endpoint" }, "remote": { "$ref": "#/definitions/link-vxlan-remote" }, "vni": { "$ref": "#/definitions/link-vxlan-vni" }, "dst-port": { "$ref": "#/definitions/link-vxlan-dstport" }, "src-port": { "$ref": "#/definitions/link-vxlan-srcport" }, "mtu": { "$ref": "#/definitions/mtu" }, "vars": { "$ref": "#/definitions/link-vars" }, "labels": { "$ref": "#/definitions/labels" } }, "required": [ "type", "endpoint", "remote", "vni", "dst-port" ], "additionalProperties": false }, "link-type-dummy": { "type": "object", "description": "", "properties": { "type": { "type": "string", "const": "dummy" }, "endpoint": { "$ref": "#/definitions/link-endpoint" }, "mtu": { "$ref": "#/definitions/mtu" }, "vars": { "$ref": "#/definitions/link-vars" }, "labels": { "$ref": "#/definitions/labels" } }, "required": [ "type", "endpoint" ], "additionalProperties": false }, "link-endpoint": { "type": "object", "description": "Common link endpoint object for extended link configs", "properties": { "node": { "type": "string", "description": "" }, "interface": { "type": "string", "description": "" }, "mac": { "type": "string", "description": "", "pattern": "^(?:[0-9A-Fa-f]{2}[:-]){5}(?:[0-9A-Fa-f]{2})" }, "ipv4": { "$ref": "#/definitions/ipv4-prefix", "description": "IPv4 address (in CIDR notation) to configure on this interface", "markdownDescription": "Interface IPv4 address in CIDR notation, e.g. 10.0.0.1/24" }, "ipv6": { "$ref": "#/definitions/ipv6-prefix", "description": "IPv6 address (in CIDR notation) to configure on this interface", "markdownDescription": "Interface IPv6 address in CIDR notation, e.g. 2001:db8::1/64" }, "vars": { "$ref": "#/definitions/endpoint-vars" } }, "required": [ "node", "interface" ], "additionalProperties": false }, "endpoint-vars": { "type": "object", "description": "per-endpoint variables", "additionalProperties": true }, "link-vxlan-remote": { "anyOf": [ { "$ref": "#/definitions/ipv4-addr" }, { "$ref": "#/definitions/ipv6-addr" } ] }, "link-vxlan-vni": { "type": "integer", "description": "VXLAN VNI", "minimum": 1, "maximum": 16777215 }, "link-vxlan-dstport": { "type": "integer", "description": "Destination UDP port", "minimum": 1, "maximum": 65535 }, "link-vxlan-srcport": { "type": "integer", "description": "Source UDP port", "minimum": 1, "maximum": 65535 }, "link-vars": { "type": "object", "description": "link-scoped variables used by config engine", "markdownDescription": "link-scoped variables used by config engine", "additionalProperties": true }, "labels": { "type": "object", "description": "container labels", "markdownDescription": "container [labels](https://containerlab.dev/manual/nodes/#labels)", "patternProperties": { ".+": { "anyOf": [ { "type": "string", "minLength": 1 }, { "type": "number", "minimum": 0 } ] } } }, "link-host-interface": { "type": "string", "description": "Name of the host interface", "markdownDescription": "Name of the host interface" }, "link-macvlan-mode": { "type": "string", "description": "MACVLAN operating mode", "markdownDescription": "MACVLAN operating mode", "enum": [ "private", "vepa", "bridge", "passthru", "source" ] }, "extras-config": { "type": "object", "description": "node's extra configurations", "properties": { "ceos-copy-to-flash": { "type": "array", "description": "list of cEOS-specific configuration or override files to be copied to the flash directory and evaluated on startup", "markdownDescription": "list of [cEOS-specific configuration or override files](https://containerlab.dev/manual/kinds/ceos/#copy-to-flash) to be copied to the flash directory and evaluated on startup", "minItems": 1, "items": { "type": "string" }, "uniqueItems": true } }, "additionalProperties": false }, "config-config": { "type": "object", "description": "containerlab config engine parameters", "properties": { "vars": { "type": "object", "description": "config variables passed to config engine", "markdownDescription": "config variables passed to config engine" } }, "additionalProperties": false }, "certificate-config": { "type": "object", "description": "Node's Certificate configuration option", "markdownDescription": "Node's [Certificate configuration options](https://containerlab.dev/manual/nodes/#certificate)", "properties": { "issue": { "description": "Set to `true` to generate a TLS certificate for the node", "markdownDescription": "Set to `true` to [generate a TLS certificate for the node](https://containerlab.dev/manual/nodes/#certificate)" }, "sans": { "type": "array", "description": "list of subject alternative names (SAN) to use for this node", "markdownDescription": "list of [subject alternative names](https://containerlab.dev/manual/nodes/#subject-alternative-names) to use for this node", "items": { "type": "string" }, "uniqueItems": true }, "key-size": { "type": "integer", "description": "size of the to be generated key", "markdownDescription": "size of the to be generated key" }, "validity-duration": { "type": "string", "description": "Duration for how long the certificate issued by the CA will be valid.", "markdownDescription": "Duration for how long the certificate issued by the CA will be valid." } }, "additionalProperties": false }, "healthcheck-config": { "type": "object", "description": "Node's Healthcheck configuration option", "markdownDescription": "Node's [Healthcheck configuration options](https://containerlab.dev/manual/nodes/#healthcheck)", "properties": { "test": { "type": "array", "description": "test command", "items": { "type": "string" } }, "interval": { "type": "integer", "description": "test execution interval", "markdownDescription": "test execution interval" }, "retries": { "type": "integer", "description": "test execution retries", "markdownDescription": "test execution retries" }, "timeout": { "type": "integer", "description": "test execution timeout in seconds", "markdownDescription": "test execution timeout in seconds" }, "start-period": { "type": "integer", "description": "time in seconds to wait before starting the healthcheck" } }, "additionalProperties": false }, "dns-config": { "type": "object", "description": "Node's DNS configuration option", "markdownDescription": "Node's [DNS configuration options](https://containerlab.dev/manual/nodes/#dns)", "properties": { "servers": { "type": "array", "description": "DNS server addresses", "items": { "type": "string" }, "uniqueItems": true }, "search": { "type": "array", "description": "DNS search domains", "items": { "type": "string" }, "uniqueItems": true }, "options": { "type": "array", "description": "DNS options", "items": { "type": "string" }, "uniqueItems": true } }, "additionalProperties": false }, "certificate-authority-config": { "type": "object", "description": "Certificate Authority", "markdownDescription": "", "properties": { "cert": { "type": "string", "description": "Path to the CA certificate file. If set, it is expected that the CA certificate already exists by that path" }, "key": { "type": "string", "description": "Path to the CA key file. If set, it is expected that the CA certificate already exists by that path" }, "key-size": { "type": "integer", "description": "Key size. Can only be set if the external CA certificate is not provided" }, "validity-duration": { "type": "string", "description": "CA certificate validity duration. Can only be set if the external CA certificate is not provided" } }, "additionalProperties": false, "oneOf": [ { "required": [ "cert", "key" ], "not": { "anyOf": [ { "required": [ "key-size" ] }, { "required": [ "validity-duration" ] } ] } }, { "anyOf": [ { "required": [ "key-size" ] }, { "required": [ "validity-duration" ] } ], "not": { "anyOf": [ { "required": [ "cert" ] }, { "required": [ "key" ] } ] } } ] }, "stages-config": { "type": "object", "description": "node's stages configurations", "markdownDescription": "node's [stages](https://containerlab.dev/manual/nodes/#stages) configurations", "properties": { "create": { "type": "object", "description": "create stage configuration", "properties": { "wait-for": { "$ref": "#/definitions/wait-for-config" }, "exec": { "$ref": "#/definitions/stage-exec" } }, "additionalProperties": false }, "create-links": { "type": "object", "description": "create stage configuration", "properties": { "wait-for": { "$ref": "#/definitions/wait-for-config" }, "exec": { "$ref": "#/definitions/stage-exec" } }, "additionalProperties": false }, "configure": { "type": "object", "description": "create stage configuration", "properties": { "wait-for": { "$ref": "#/definitions/wait-for-config" }, "exec": { "$ref": "#/definitions/stage-exec" } }, "additionalProperties": false }, "healthy": { "type": "object", "description": "create stage configuration", "properties": { "wait-for": { "$ref": "#/definitions/wait-for-config" }, "exec": { "$ref": "#/definitions/stage-exec" } }, "additionalProperties": false }, "exit": { "type": "object", "description": "create stage configuration", "properties": { "wait-for": { "$ref": "#/definitions/wait-for-config" }, "exec": { "$ref": "#/definitions/stage-exec" } }, "additionalProperties": false } }, "additionalProperties": false }, "wait-for-config": { "type": "array", "items": { "type": "object", "properties": { "node": { "type": "string", "description": "node name to wait for" }, "stage": { "type": "string", "description": "phase to wait for", "$ref": "#/definitions/stages-enum" } }, "additionalProperties": false }, "uniqueItems": true, "description": "Dependency list for the node", "markdownDescription": "Dependency list for the node" }, "stages-enum": { "type": "string", "enum": [ "create", "create-links", "configure", "healthy", "exit" ] }, "stage-exec": { "description": "per-stage exec configuration", "oneOf": [ { "type": "object", "properties": { "on-enter": { "$ref": "#/definitions/stage-exec-list" }, "on-exit": { "$ref": "#/definitions/stage-exec-list" } }, "additionalProperties": false }, { "type": "array", "description": "List of exec commands as objects, each containing `command`, `target`, and `phase`", "items": { "type": "object", "additionalProperties": false, "properties": { "command": { "type": "string", "description": "Shell command to execute" }, "target": { "type": "string", "description": "Location to run the command (e.g. 'container', 'host')", "default": "container" }, "phase": { "type": "string", "enum": [ "on-enter", "on-exit" ], "description": "Phase to execute this command (on-enter or on-exit)" } }, "required": [ "command", "phase" ] } } ] }, "stage-exec-list": { "type": "array", "description": "list of commands to execute", "markdownDescription": "list of [commands to execute](https://containerlab.dev/manual/nodes/#exec)", "minItems": 1, "items": { "type": "string" } }, "mtu": { "description": "MTU for the custom network", "markdownDescription": "[MTU](https://containerlab.dev/manual/network/#mtu) in Bytes for the custom management network", "type": "number", "maximum": 65535, "minimum": 1, "default": 1500 }, "ipv4-addr": { "description": "IPv4 address", "markdownDescription": "IPv4 address", "type": "string", "pattern": "^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\\p{N}\\p{L}]+)?$" }, "ipv6-addr": { "description": "IPv6 address", "markdownDescription": "IPv6 address", "type": "string", "pattern": "^((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(%[\\p{N}\\p{L}]+)?$" }, "ipv4-prefix": { "description": "IPv4 address in CIDR notation", "markdownDescription": "IPv4 address in CIDR notation, e.g. 10.0.0.1/24", "type": "string", "pattern": "^(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])/(?:[0-9]|[12][0-9]|3[0-2])$" }, "ipv6-prefix": { "description": "IPv6 address in CIDR notation", "markdownDescription": "IPv6 address in CIDR notation, e.g. 2001:db8::1/64", "type": "string", "pattern": "^(?:(?:[A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}|(?:[A-Fa-f0-9]{1,4}:){1,7}:|(?:[A-Fa-f0-9]{1,4}:){1,6}:[A-Fa-f0-9]{1,4}|(?:[A-Fa-f0-9]{1,4}:){1,5}(?::[A-Fa-f0-9]{1,4}){1,2}|(?:[A-Fa-f0-9]{1,4}:){1,4}(?::[A-Fa-f0-9]{1,4}){1,3}|(?:[A-Fa-f0-9]{1,4}:){1,3}(?::[A-Fa-f0-9]{1,4}){1,4}|(?:[A-Fa-f0-9]{1,4}:){1,2}(?::[A-Fa-f0-9]{1,4}){1,5}|[A-Fa-f0-9]{1,4}:(?::[A-Fa-f0-9]{1,4}){1,6}|:(?:(?::[A-Fa-f0-9]{1,4}){1,7}|:))/(?:[0-9]|[1-9][0-9]|1[01][0-9]|12[0-8])$" }, "sros-card-types": { "type": "string", "description": "Card types for SR OS", "enum": [ "cpm-1se/imm36-800g-qsfpdd", "cpm-1x/dms24-800g-qsfpdd-1", "cpm-1x/i24-800g-qsfpdd-1", "cpm-1x/i40-200g-sfpdd+6-800g-qsfpdd-1", "cpm-1x/i48-400g-qsfpdd-1", "cpm-1x/i48-800g-qsfpdd-1x", "cpm-1x/i80-200g-sfpdd+12-400g-qsfpdd-1", "cpm-1x/i80-200g-sfpdd+12-800g-qsfpdd-1x", "cpm-ixr-e-gnss/imm14-10g-sfp++4-1g-tx", "cpm-ixr-e-gnss/imm24-sfp++8-sfp28+2-qsfp28", "cpm-ixr-e/imm14-10g-sfp++4-1g-tx", "cpm-ixr-e/imm24-sfp++8-sfp28+2-qsfp28", "cpm-ixr-e2", "cpm-ixr-e2c", "cpm-ixr-e2n/imm4-sfp+4-sfp+", "cpm-ixr-e3c/imm4-qsfp28+16-sfp28+8-sfp56", "cpm-ixr-e3x/imm16-sfp112+15-sfp56+6-qsfpdd", "cpm-ixr-ec", "cpm-ixr-s/imm48-sfp++6-qsfp28", "cpm-ixr-x/imm32-qsfp28+4-qsfpdd", "cpm-ixr-x/imm6-qsfpdd+48-sfp56", "cpm-sar-hm", "cpm-sar-hmc", "dms24-800g-qsfpdd-1", "i24-800g-qsfpdd-1", "i40-200g-sfpdd+6-800g-qsfpdd-1", "i48-400g-qsfpdd-1", "i48-800g-qsfpdd-1x", "i80-200g-sfpdd+12-400g-qsfpdd-1", "i80-200g-sfpdd+12-800g-qsfpdd-1x", "imm-2pac-fp3", "imm12-sfp28+2-qsfp28", "imm14-10g-sfp++4-1g-tx", "imm2-qsfpdd+2-qsfp28+24-sfp28", "imm24-sfp++8-sfp28+2-qsfp28", "imm32-qsfp28+4-qsfpdd", "imm36-100g-qsfp28", "imm36-800g-qsfpdd", "imm36-qsfpdd", "imm4-100gb-cfp4", "imm4-100gb-cxp", "imm4-1g-tx+20-1g-sfp+6-10g-sfp+", "imm40-10gb-sfp", "imm40-10gb-sfp-ptp", "imm48-1gb-sfp-c", "imm48-sfp++6-qsfp28", "imm48-sfp+2-qsfp28", "imm6-qsfpdd+48-sfp56", "iom-1", "iom-a", "iom-e", "iom-ixr-r4", "iom-ixr-r6", "iom-ixr-r6d", "iom-sar", "iom-sar-hm", "iom-sar-hmc", "iom-v", "iom4-e", "iom4-e-b", "iom4-e-hs", "iom5-e", "xcm-14s", "xcm-14s-b", "xcm-1s", "xcm-2s", "xcm-2se", "xcm-7s", "xcm-7s-b", "xcm-x20", "xcm2-14s", "xcm2-7s", "xcm2-x20", "xcmc-2se" ] }, "sros-cpm-types": { "type": "string", "description": "CPM card types for SR OS", "enum": [ "cpiom-ixr-r6", "cpiom-ixr-r6d", "cpm-1", "cpm-1s", "cpm-1se", "cpm-1se/imm36-800g-qsfpdd", "cpm-1x", "cpm-1x/dms24-800g-qsfpdd-1", "cpm-1x/i24-800g-qsfpdd-1", "cpm-1x/i40-200g-sfpdd+6-800g-qsfpdd-1", "cpm-1x/i48-400g-qsfpdd-1", "cpm-1x/i48-800g-qsfpdd-1x", "cpm-1x/i80-200g-sfpdd+12-400g-qsfpdd-1", "cpm-1x/i80-200g-sfpdd+12-800g-qsfpdd-1x", "cpm-2s", "cpm-2se", "cpm-a", "cpm-e", "cpm-ixr", "cpm-ixr-e", "cpm-ixr-e-gnss", "cpm-ixr-e-gnss/imm14-10g-sfp++4-1g-tx", "cpm-ixr-e-gnss/imm24-sfp++8-sfp28+2-qsfp28", "cpm-ixr-e/imm14-10g-sfp++4-1g-tx", "cpm-ixr-e/imm24-sfp++8-sfp28+2-qsfp28", "cpm-ixr-e2", "cpm-ixr-e2c", "cpm-ixr-e2n/imm4-sfp+4-sfp+", "cpm-ixr-e3c/imm4-qsfp28+16-sfp28+8-sfp56", "cpm-ixr-e3x/imm16-sfp112+15-sfp56+6-qsfpdd", "cpm-ixr-ec", "cpm-ixr-r4", "cpm-ixr-s", "cpm-ixr-s/imm48-sfp++6-qsfp28", "cpm-ixr-x", "cpm-ixr-x/imm32-qsfp28+4-qsfpdd", "cpm-ixr-x/imm6-qsfpdd+48-sfp56", "cpm-s", "cpm-sar", "cpm-sar-hm", "cpm-sar-hmc", "cpm-v", "cpm-v/iom-v", "cpm-x20", "cpm2-s", "cpm2-x20", "cpm5", "iom-sar" ] }, "sros-mda-types": { "type": "string", "description": "MDA types for SR OS", "enum": [ "a32-chds1v2", "d24-800g-qsfpdd-1", "i1-wlan", "i2-cellular", "i2-sdi", "i3-10/100eth-tx", "i6-10/100eth-tx", "isa-aa-v", "isa-bb-v", "isa-ms-v", "isa-tunnel-v", "isa2-aa", "isa2-bb", "isa2-tunnel", "isa2-video", "m1-400g-qsfpdd+1-100g-qsfp28", "m10-10g-sfp+", "m10-1g-sfp+2-10g-sfp+", "m10-50g-sfp56", "m10-sfp++6-sfp", "m12-sfp28+2-qsfp28", "m14-10g-sfp++4-1g-tx", "m18-25g-sfp28", "m2-100g-qsfp28+16-10g-sfp+", "m2-cfp2", "m2-qsfpdd+2-qsfp28+24-sfp28", "m20-10g-sfp+", "m20-1g-csfp", "m20-v", "m24-800g-qsfpdd-1", "m24-sfp++8-sfp28+2-qsfp28", "m32-1g-csfp", "m32-qsfp28+4-qsfpdd", "m36-100g-qsfp28", "m36-qsfpdd", "m4-100g-cfp4", "m4-10g-sfp++1-100g-cfp2", "m4-1g-tx+20-1g-sfp+6-10g-sfp+", "m40-10g-sfp", "m40-10g-sfp-ptp", "m40-200g-sfpdd+6-800g-qsfpdd-1", "m46-10g-sfp+", "m48-400g-qsfpdd-1", "m48-800g-qsfpdd-1x", "m48-sfp++6-qsfp28", "m48-sfp+2-qsfp28", "m5-100g-qsfp28", "m5e2-100g-qsfp28+2-800g-qdd", "m5e8-100g-sfp112+2-800g-qdd", "m6-10g-sfp++1-100g-qsfp28", "m6-10g-sfp++4-25g-sfp28", "m6-qsfpdd+48-sfp56", "m80-1g-csfp", "m80-200g-sfpdd+12-400g-qsfpdd-1", "m80-200g-sfpdd+12-800g-qsfpdd-1x", "ma2-10gb-sfp+12-1gb-sfp", "ma20-1gb-tx", "ma4-10gb-sfp+", "ma44-1gb-csfp", "maxp1-100gb-cfp", "maxp1-100gb-cfp2", "maxp1-100gb-cfp4", "maxp10-10/1gb-msec-sfp+", "maxp10-10gb-sfp+", "me-isa2-ms", "me-isa2-ms-e", "me1-100gb-cfp2", "me10-10gb-sfp+", "me12-10/1gb-sfp+", "me12-100gb-qsfp28", "me16-25gb-sfp28+2-100gb-qsfp-b", "me16-25gb-sfp28+2-100gb-qsfp28", "me2-100gb-ms-qsfp28", "me2-100gb-qsfp28", "me3-200gb-cfp2-dco", "me3-400gb-qsfpdd", "me40-1gb-csfp", "me6-100gb-qsfp28", "me6-10gb-sfp+", "me6-400gb-qsfpdd", "me8-10/25gb-sfp28", "ms36-800g-qsfpdd", "p-isa2-ms", "p-isa2-ms-e", "p1-100g-cfp", "p10-10g-sfp", "p20-1gb-sfp", "p6-10g-sfp", "s18-100gb-qsfp28", "s36-100gb-qsfp28", "s36-100gb-qsfp28-3.6t", "s36-400gb-qsfpdd", "x12-400g-qsfpdd", "x2-s36-800g-qsfpdd-12.0t", "x2-s36-800g-qsfpdd-18.0t", "x24-100g-qsfp28", "x4-100g-cfp2", "x40-10g-sfp", "x40-10g-sfp-ptp", "x6-200g-cfp2-dco", "x6-400g-cfp8" ] }, "sros-xiom-types": { "type": "string", "description": "XIOM types for SR OS", "enum": [ "iom-s-1.5t", "iom-s-3.0t", "iom2-s-3.0t", "iom2-s-6.0t", "iom2-se-3.0t", "iom2-se-6.0t", "x2-s36-400g-qsfp112-3.0t", "x2-s36-800g-qsfpdd-6.0t" ] }, "sros-xiom-mda-types": { "type": "string", "description": "XIOM MDA types for SR OS", "enum": [ "ms6-200gb-cfp2-dco", "ms3-200gb-cfp2-dco", "ms16-100gb-sfpdd+4-100gb-qsfp28", "ms18-100gb-qsfp28", "ms4-400gb-qsfpdd+4-100gb-qsfp28", "ms24-10/100gb-sfpdd", "ms2-400gb-qsfpdd+2-100gb-qsfp28", "ms8-100gb-sfpdd+2-100gb-qsfp28", "ms16-sdd+4-qsfp28-b", "ms8-sdd+2-qsfp28-b", "mse24-200g-sfpdd", "mse6-800g-cfp2-dco", "mse14-800g+4-400g", "m36-800g-qsfpdd", "mse6-800g-qsfpdd", "m36-400g-qsfp112", "ms2-100g-qsfp28+2-800g-qsfpdd", "ms8-100g-sfp112+2-800g-qsfpdd", "ms4-400g-qsfpdd+4-100g-qsfp28" ] }, "sros-sfm-types": { "type": "string", "description": "SFM types for SR OS", "enum": [ "m-sfm5-12", "m-sfm5-12e", "m-sfm5-7", "m-sfm6-12e", "m-sfm6-7/12", "sfm-2s", "sfm-2se", "sfm-ixr-10", "sfm-ixr-6", "sfm-s", "sfm-x20", "sfm-x20-b", "sfm-x20s-b", "sfm2-s", "sfm2-x20s" ] } }, "type": "object", "properties": { "name": { "description": "topology name", "type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-._]*$" }, "prefix": { "description": "lab prefix", "type": "string", "pattern": "^$|^__lab-name$|^[a-zA-Z0-9][a-zA-Z0-9-._]*$", "markdownDescription": "[lab prefix](https://containerlab.dev/manual/topo-def-file/#prefix)" }, "mgmt": { "description": "configuration container for management network", "markdownDescription": "configuration container for [management network](https://containerlab.dev/manual/network/#management-network)", "type": "object", "properties": { "network": { "description": "management network name", "markdownDescription": "[management network name](https://containerlab.dev/manual/network/#network-name)", "type": "string" }, "bridge": { "description": "Set bridge to use for the management network (instead of the default generated bridge).", "markdownDescription": "Set [bridge](https://containerlab.dev/manual/network/#bridge-name) to use for the management network (instead of the default generated bridge).", "type": "string" }, "ipv4-subnet": { "description": "IPv4 subnet to use for the custom management network. e.g. 172.100.100.0/24", "markdownDescription": "[IPv4 subnet](https://containerlab.dev/manual/network/#user-defined-addresses) to use for the custom management network. e.g. 172.100.100.0/24", "type": "string", "pattern": "(^.+/[0-9]{1,2}$)|(auto)" }, "ipv6-subnet": { "description": "IPv6 subnet to use for the custom management network. e.g. 3fff:172:100:100::/64", "markdownDescription": "[IPv6 subnet](https://containerlab.dev/manual/network/#user-defined-addresses) to be used for the custom management network. e.g. 3fff:172:100:100::/64", "type": "string", "pattern": "(^.+/[0-9]{1,3}$)|(auto)" }, "ipv4-gw": { "description": "IPv4 gateway address that will be set on a bridge used for the management network. Will be set to the first available IP address by default", "markdownDescription": "IPv4 gateway address that will be set on a bridge used for the management network. Will be set to the first available IP address by default", "$ref": "#/definitions/ipv4-addr" }, "ipv6-gw": { "description": "IPv6 gateway address that will be set on a bridge used for the management network. Will be set to the first available IP address by default", "markdownDescription": "IPv6 gateway address that will be set on a bridge used for the management network. Will be set to the first available IP address by default", "type": "string", "$ref": "#/definitions/ipv6-addr" }, "ipv4-range": { "description": "IPv4 range out of the ipv4-subnet to use for the custom management network. e.g. 172.100.100.128/25", "markdownDescription": "[IPv4 range](https://containerlab.dev/manual/network/#ip-range) out of the ipv4-subnet to use for the custom management network. e.g. 172.100.100.128/25", "type": "string", "pattern": "^.+/[0-9]{1,2}$" }, "ipv6-range": { "description": "IPv6 range out of the ipv6-subnet to use for the custom management network. e.g. 3fff:172:100:100:8000::/65", "markdownDescription": "[IPv6 range](https://containerlab.dev/manual/network/#ip-range) out of the ipv6-subnet to use for the custom management network. e.g. 3fff:172:100:100:8000::/65", "type": "string", "pattern": "^((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(%[\\p{N}\\p{L}]+)?$" }, "mtu": { "description": "MTU for the custom network", "markdownDescription": "[MTU](https://containerlab.dev/manual/network/#mtu) in Bytes for the custom management network", "$ref": "#/definitions/mtu" }, "external-access": { "type": "boolean", "description": "controls whether the management network has external access or not", "markdownDescription": "controls whether the [management network has external access](https://containerlab.dev/manual/network/#external-access) or not" }, "driver-opts": { "type": "object", "description": "overrides for container runtime network driver options", "markdownDescription": "[driver-opts](https://containerlab.dev/manual/network/#bridge-network-driver-options) lets you set overrides for the network driver of the container runtime", "patternProperties": { ".+": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" } ] } } } }, "minProperties": 1, "additionalProperties": false }, "topology": { "description": "topology configuration container", "markdownDescription": "[topology](https://containerlab.dev/manual/topo-def-file/) configuration container", "type": "object", "properties": { "nodes": { "description": "topology nodes configuration container", "markdownDescription": "topology [nodes](https://containerlab.dev/manual/nodes/) configuration container", "type": "object", "patternProperties": { "^[a-zA-Z0-9][a-zA-Z0-9-._|]*$": { "oneOf": [ { "type": "null" }, { "$ref": "#/definitions/node-config" } ] } }, "additionalProperties": false }, "groups": { "description": "topology groups configuration container", "markdownDescription": "topology [groups](https://containerlab.dev/manual/topo-def-file/#groups) configuration container", "type": "object", "patternProperties": { ".*": { "$ref": "#/definitions/node-config" } } }, "kinds": { "description": "topology kinds configuration container", "markdownDescription": "topology [kinds](https://containerlab.dev/manual/topo-def-file/#kinds) configuration container", "type": "object", "properties": { "nokia_srlinux": { "$ref": "#/definitions/node-config" }, "nokia_srsim": { "$ref": "#/definitions/node-config" }, "nokia_sros": { "$ref": "#/definitions/node-config" }, "arista_ceos": { "$ref": "#/definitions/node-config" }, "vyosnetworks_vyos": { "$ref": "#/definitions/node-config" }, "juniper_crpd": { "$ref": "#/definitions/node-config" }, "sonic-vs": { "$ref": "#/definitions/node-config" }, "sonic-vm": { "$ref": "#/definitions/node-config" }, "dell_ftosv": { "$ref": "#/definitions/node-config" }, "dell_sonic": { "$ref": "#/definitions/node-config" }, "juniper_vmx": { "$ref": "#/definitions/node-config" }, "juniper_vsrx": { "$ref": "#/definitions/node-config" }, "juniper_vjunosrouter": { "$ref": "#/definitions/node-config" }, "juniper_vjunosswitch": { "$ref": "#/definitions/node-config" }, "juniper_vjunosevolved": { "$ref": "#/definitions/node-config" }, "cjunosevolved": { "$ref": "#/definitions/node-config" }, "juniper_cjunosevolved": { "$ref": "#/definitions/node-config" }, "aruba_aoscx": { "$ref": "#/definitions/node-config" }, "cisco_xrd": { "$ref": "#/definitions/node-config" }, "cisco_xrv": { "$ref": "#/definitions/node-config" }, "cisco_xrv9k": { "$ref": "#/definitions/node-config" }, "cisco_nxos": { "$ref": "#/definitions/node-config" }, "cisco_n9kv": { "$ref": "#/definitions/node-config" }, "cisco_csr": { "$ref": "#/definitions/node-config" }, "cisco_cat9kv": { "$ref": "#/definitions/node-config" }, "cisco_ftdv": { "$ref": "#/definitions/node-config" }, "cisco_iol": { "$ref": "#/definitions/node-config" }, "cisco_c8000": { "$ref": "#/definitions/node-config" }, "cisco_c8000v": { "$ref": "#/definitions/node-config" }, "cisco_sdwan": { "$ref": "#/definitions/node-config" }, "cisco_asav": { "$ref": "#/definitions/node-config" }, "linux": { "$ref": "#/definitions/node-config" }, "bridge": { "$ref": "#/definitions/node-config" }, "ovs-bridge": { "$ref": "#/definitions/node-config" }, "host": { "$ref": "#/definitions/node-config" }, "ipinfusion_ocnos": { "$ref": "#/definitions/node-config" }, "keysight_ixia-c-one": { "$ref": "#/definitions/node-config" }, "checkpoint_cloudguard": { "$ref": "#/definitions/node-config" }, "ext-container": { "$ref": "#/definitions/node-config" }, "rare": { "$ref": "#/definitions/node-config" }, "cumulus_cvx": { "$ref": "#/definitions/node-config" }, "openbsd": { "$ref": "#/definitions/node-config" }, "freebsd": { "$ref": "#/definitions/node-config" }, "openwrt": { "$ref": "#/definitions/node-config" }, "huawei_vrp": { "$ref": "#/definitions/node-config" }, "generic_vm": { "$ref": "#/definitions/node-config" }, "fdio_vpp": { "$ref": "#/definitions/node-config" }, "arrcus_arcos": { "$ref": "#/definitions/node-config" }, "mikrotik_ros": { "$ref": "#/definitions/node-config" }, "6wind_vsr": { "$ref": "#/definitions/node-config" }, "spirent_stc": { "$ref": "#/definitions/node-config" }, "veesix_osvbng": { "$ref": "#/definitions/node-config" }, "ostinato": { "$ref": "#/definitions/node-config" } }, "additionalProperties": false }, "defaults": { "$ref": "#/definitions/node-config" }, "links": { "type": "array", "description": "topology links section", "markdownDescription": "[topology links](https://containerlab.dev/manual/topo-def-file/#links)", "minItems": 1, "items": { "anyOf": [ { "$ref": "#/definitions/link-config-short" }, { "$ref": "#/definitions/link-type-veth" }, { "$ref": "#/definitions/link-type-mgmt-net" }, { "$ref": "#/definitions/link-type-macvlan" }, { "$ref": "#/definitions/link-type-host" }, { "$ref": "#/definitions/link-type-vxlan" }, { "$ref": "#/definitions/link-type-vxlan-stitched" }, { "$ref": "#/definitions/link-type-dummy" } ] } } }, "additionalProperties": false, "required": [ "nodes" ] }, "settings": { "description": "Global containerlab settings", "markdownDescription": "Global [containerlab settings]()", "type": "object", "properties": { "certificate-authority": { "$ref": "#/definitions/certificate-authority-config" } }, "additionalProperties": false } }, "additionalProperties": false, "required": [ "name", "topology" ] }