From 868f6f535a3cd0fdccb03c10a0bec5b391166f7a Mon Sep 17 00:00:00 2001 From: Claus Holbech Date: Fri, 11 Aug 2023 02:07:56 +0200 Subject: [PATCH] Feat(eos_designs): Validation of structured_config (#3077) --- .../inventory/host_vars/invalid-schema.yml | 2 +- .../plugin_utils/schema/avd_meta_schema.json | 14 +- .../avdtodocumentationschemaconverter.py | 36 +- .../eos_cli_config_gen.jsonschema.json | 556 +- .../schemas/eos_cli_config_gen.schema.yml | 93 +- .../schema_fragments/access_lists.schema.yml | 2 - .../schema_fragments/bgp_groups.schema.yml | 1 - .../community_lists.schema.yml | 1 - .../daemon_terminattr.schema.yml | 1 - .../schema_fragments/daemons.schema.yml | 1 - .../defs_interface_ip_nat.schema.yml | 4 +- .../ethernet_interfaces.schema.yml | 7 +- .../schema_fragments/hardware.schema.yml | 1 - .../interface_groups.schema.yml | 1 - .../interface_profiles.schema.yml | 1 - .../ip_access_lists.schema.yml | 1 - .../ip_community_lists.schema.yml | 1 - .../ip_domain_lookup.schema.yml | 1 - .../ip_extcommunity_lists.schema.yml | 1 - .../ip_extcommunity_lists_regexp.schema.yml | 1 - .../ip_igmp_snooping.schema.yml | 1 - .../ipv6_access_lists.schema.yml | 2 - .../ipv6_prefix_lists.schema.yml | 2 - .../ipv6_standard_access_lists.schema.yml | 2 - .../l2_protocol_forwarding.schema.yml | 2 - .../link_tracking_groups.schema.yml | 1 - .../schema_fragments/local_users.schema.yml | 1 - .../schema_fragments/logging.schema.yml | 3 - .../loopback_interfaces.schema.yml | 1 - .../mac_access_lists.schema.yml | 1 - .../schema_fragments/mac_security.schema.yml | 1 - .../schema_fragments/maintenance.schema.yml | 4 - .../management_api_http.schema.yml | 1 - .../management_interfaces.schema.yml | 1 - .../management_ssh.schema.yml | 1 - .../match_list_input.schema.yml | 2 - .../schema_fragments/patch_panel.schema.yml | 2 - .../schema_fragments/peer_filters.schema.yml | 2 - .../port_channel_interfaces.schema.yml | 5 +- .../schema_fragments/prefix_lists.schema.yml | 2 - .../schema_fragments/qos_profiles.schema.yml | 4 - .../schema_fragments/route_maps.schema.yml | 2 - .../router_general.schema.yml | 1 - .../schema_fragments/router_msdp.schema.yml | 7 - .../router_pim_sparse_mode.schema.yml | 4 - .../schema_fragments/snmp_server.schema.yml | 1 - .../standard_access_lists.schema.yml | 2 - .../schema_fragments/tcam_profile.schema.yml | 1 - .../schema_fragments/trackers.schema.yml | 1 - .../tunnel_interfaces.schema.yml | 1 - .../vlan_interfaces.schema.yml | 4 +- .../vmtracer_sessions.schema.yml | 1 - .../vxlan_interface.schema.yml | 2 - .../eos_designs/docs/tables/bgp-settings.md | 14 +- .../docs/tables/connected-endpoints.md | 4 +- .../docs/tables/core-interfaces.md | 4 +- .../roles/eos_designs/docs/tables/l3-edge.md | 4 +- .../eos_designs/docs/tables/network-ports.md | 4 +- .../network-services-l2vlans-settings.md | 2 +- ...rk-services-vrfs-l3-interfaces-settings.md | 2 +- .../tables/network-services-vrfs-settings.md | 2 +- .../network-services-vrfs-svis-settings.md | 8 +- .../tables/node-type-l2-mlag-configuration.md | 24 +- .../tables/node-type-uplink-configuration.md | 8 +- .../eos_designs/docs/tables/port-profiles.md | 4 +- .../docs/tables/role-input-validation.md | 34 + .../eos_designs/docs/tables/svi-profiles.md | 8 +- .../schemas/eos_designs.jsonschema.json | 21301 ++++++++++++---- .../schemas/eos_designs.schema.yml | 119 +- .../bgp_peer_groups.schema.yml | 35 +- .../default_node_types.schema.yml | 1 - .../defs_adapter_config.schema.yml | 10 +- .../defs_connected_endpoints.schema.yml | 1 - .../schema_fragments/defs_l3_edge.schema.yml | 2 - .../defs_network_services.schema.yml | 21 +- .../defs_node_type.schema.yml | 24 +- .../defs_p2p_links.schema.yml | 9 +- .../defs_svi_settings.schema.yml | 10 +- .../underlay_multicast_rps.schema.yml | 1 - .../merge/access_lists.schema.yml | 2 - .../schema/access_lists.schema.yml | 2 - .../plugin_utils/schema/combined.schema.yml | 4 - .../ipv6_standard_access_lists.schema.yml | 2 - 83 files changed, 17055 insertions(+), 5405 deletions(-) diff --git a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/invalid-schema.yml b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/invalid-schema.yml index 70f9b391d1d..c520ff9f573 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/invalid-schema.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/invalid-schema.yml @@ -12,4 +12,4 @@ l3leaf: id: 1 expected_error_message: >- - 1 errors raised during conversion of input vars. 3 errors found during schema validation of input vars. + 1 errors raised during conversion of input vars. 2 errors found during schema validation of input vars. diff --git a/ansible_collections/arista/avd/plugins/plugin_utils/schema/avd_meta_schema.json b/ansible_collections/arista/avd/plugins/plugin_utils/schema/avd_meta_schema.json index 61887a7e774..7fdeae4a2af 100644 --- a/ansible_collections/arista/avd/plugins/plugin_utils/schema/avd_meta_schema.json +++ b/ansible_collections/arista/avd/plugins/plugin_utils/schema/avd_meta_schema.json @@ -265,7 +265,7 @@ "required": { "$ref": "#/$defs/required" }, "deprecation": { "$ref": "#/$defs/deprecation" }, "$ref": { "$ref": "#/$defs/$ref" }, - "documentation_options": { "$ref": "#/$defs/documentation_options" }, + "documentation_options": { "$ref": "#/$defs/documentation_options_dict" }, "$schema": { "type": "string" }, "$id": { "type": "string" }, "$defs": { "$ref": "#/$defs/$defs" } @@ -315,6 +315,18 @@ }, "additionalProperties": false }, + "documentation_options_dict": { + "type": "object", + "description": "Special options used for generating documentation", + "properties": { + "table": { "$ref": "#/$defs/documentation_options/properties/table" }, + "hide_keys": { + "type": "boolean", + "description": "Prevent keys of the dict from being displayed in the generated documentation.\nThis is used for structured_config where we wish to avoid displaying the full eos_cli_config_gen schema everywhere." + } + }, + "additionalProperties": false + }, "$defs": { "type": "object", "description": "Storage for reusable schema fragments", diff --git a/ansible_collections/arista/avd/plugins/plugin_utils/schema/avdtodocumentationschemaconverter.py b/ansible_collections/arista/avd/plugins/plugin_utils/schema/avdtodocumentationschemaconverter.py index 8684fe4aadd..9cc60a75a7d 100644 --- a/ansible_collections/arista/avd/plugins/plugin_utils/schema/avdtodocumentationschemaconverter.py +++ b/ansible_collections/arista/avd/plugins/plugin_utils/schema/avdtodocumentationschemaconverter.py @@ -134,13 +134,28 @@ def build_table(self, table: str, schema: dict): if table not in self._get_tables(childschema): # Skip key if none of the underlying keys have the relevant table continue - built_table["table"].extend(self.build_table_row(var_name=key, schema=childschema, indentation=0, var_path=[], table=table)) + built_table["table"].extend( + self.build_table_row( + var_name=key, + schema=childschema, + indentation=0, + var_path=[], + table=table, + ) + ) built_table["yaml"].extend(self.build_yaml_row(var_name=key, schema=childschema, indentation=0, table=table)) return built_table def build_table_row( - self, var_name: str, schema: dict, indentation: int, var_path: list, table: str, parent_schema: dict = None, first_list_item_key: bool = False + self, + var_name: str, + schema: dict, + indentation: int, + var_path: list, + table: str, + parent_schema: dict = None, + first_list_item_key: bool = False, ): output = [] @@ -183,7 +198,14 @@ def build_table_row( return output - def build_yaml_row(self, var_name: str, schema: dict, indentation: int, table: str, first_list_item_key: bool = False): + def build_yaml_row( + self, + var_name: str, + schema: dict, + indentation: int, + table: str, + first_list_item_key: bool = False, + ): output = [] deprecation_label = get_deprecation(schema)[0] @@ -198,7 +220,7 @@ def build_yaml_row(self, var_name: str, schema: dict, indentation: int, table: s row = f"{row_indentation}{var_name}:" var_type = schema.get("type") - if var_type == "dict" and (schema_keys := self._get_keys(schema)): + if var_type == "dict" and (schema_keys := self._get_keys(schema)) and not schema.get("documentation_options", {}).get("hide_keys"): output.append(row) for key, childschema in schema_keys.items(): if table not in self._get_tables(childschema): @@ -287,6 +309,12 @@ def type(self, schema: dict): def keys(self, schema: dict, indentation: int, var_path: list, table: str): output = [] + + if schema.get("documentation_options", {}).get("hide_keys"): + # Skip documenting the keys. + # Used for not including all of eos_cli_config_gen for structured_config keys. + return output + schema_keys = self._get_keys(schema) for key, childschema in schema_keys.items(): diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json index c3c058d6477..0515288bc26 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json @@ -547,8 +547,8 @@ } }, "required": [ - "sequence", - "action" + "action", + "sequence" ], "additionalProperties": false, "patternProperties": { @@ -559,8 +559,8 @@ } }, "required": [ - "name", - "sequence_numbers" + "sequence_numbers", + "name" ], "additionalProperties": false, "patternProperties": { @@ -829,13 +829,13 @@ "title": "BGP Maintenance Profiles" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "BGP Groups" }, @@ -1013,8 +1013,8 @@ } }, "required": [ - "name", - "action" + "action", + "name" ], "additionalProperties": false, "patternProperties": { @@ -1230,13 +1230,13 @@ "title": "Cvvrf" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Clusters" }, @@ -1411,8 +1411,8 @@ } }, "required": [ - "name", - "exec" + "exec", + "name" ], "additionalProperties": false, "patternProperties": { @@ -2168,13 +2168,13 @@ "title": "VRF" } }, - "required": [ - "ip_helper" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "ip_helper" + ] }, "title": "IP Helpers" }, @@ -2492,13 +2492,13 @@ "title": "No Autoconfig Flag" } }, - "required": [ - "ipv6_prefix" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "ipv6_prefix" + ] }, "title": "IPv6 ND Prefixes" }, @@ -2532,13 +2532,13 @@ "title": "Link Address" } }, - "required": [ - "address" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "address" + ] }, "title": "IPv6 DHCP Relay Destinations" }, @@ -2703,13 +2703,13 @@ "title": "Key" } }, - "required": [ - "id" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "id" + ] }, "title": "OSPF Message Digest Keys" }, @@ -3847,13 +3847,13 @@ "title": "EOS CLI" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Ethernet Interfaces" }, @@ -4141,13 +4141,13 @@ "title": "Serdes" } }, - "required": [ - "speed_group" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "speed_group" + ] }, "title": "Speed Groups" } @@ -4324,13 +4324,13 @@ "title": "Interface Maintenance Profiles" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] } }, "interface_profiles": { @@ -4353,8 +4353,8 @@ } }, "required": [ - "name", - "commands" + "commands", + "name" ], "additionalProperties": false, "patternProperties": { @@ -4542,13 +4542,13 @@ "title": "Entries" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] } }, "ip_access_lists_max_entries": { @@ -4607,8 +4607,8 @@ } }, "required": [ - "name", - "entries" + "entries", + "name" ], "additionalProperties": false, "patternProperties": { @@ -4649,13 +4649,13 @@ "title": "VRF" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Source Interfaces" } @@ -4709,8 +4709,8 @@ } }, "required": [ - "name", - "entries" + "entries", + "name" ], "additionalProperties": false, "patternProperties": { @@ -4761,8 +4761,8 @@ } }, "required": [ - "name", - "entries" + "entries", + "name" ], "additionalProperties": false, "patternProperties": { @@ -4995,13 +4995,13 @@ "title": "Proxy" } }, - "required": [ - "id" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "id" + ] }, "title": "VLANs" } @@ -5444,8 +5444,8 @@ } }, "required": [ - "sequence", - "action" + "action", + "sequence" ], "additionalProperties": false, "patternProperties": { @@ -5456,8 +5456,8 @@ } }, "required": [ - "name", - "sequence_numbers" + "sequence_numbers", + "name" ], "additionalProperties": false, "patternProperties": { @@ -5541,8 +5541,8 @@ } }, "required": [ - "sequence", - "action" + "action", + "sequence" ], "additionalProperties": false, "patternProperties": { @@ -5553,8 +5553,8 @@ } }, "required": [ - "name", - "sequence_numbers" + "sequence_numbers", + "name" ], "additionalProperties": false, "patternProperties": { @@ -5594,8 +5594,8 @@ } }, "required": [ - "sequence", - "action" + "action", + "sequence" ], "additionalProperties": false, "patternProperties": { @@ -5606,8 +5606,8 @@ } }, "required": [ - "name", - "sequence_numbers" + "sequence_numbers", + "name" ], "additionalProperties": false, "patternProperties": { @@ -5723,24 +5723,24 @@ "title": "Untagged Forward" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Protocols" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Forwarding Profiles" } @@ -5838,13 +5838,13 @@ "title": "Recovery Delay" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Link Tracking Groups" }, @@ -5990,13 +5990,13 @@ "title": "Shell" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Local Users" }, @@ -6226,24 +6226,24 @@ "title": "Ports" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Hosts" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "VRFs" }, @@ -6271,13 +6271,13 @@ "title": "Action" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Match Lists" } @@ -6461,13 +6461,13 @@ "title": "EOS CLI" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Loopback Interfaces" }, @@ -6507,13 +6507,13 @@ "title": "Entries" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "MAC Access Lists" }, @@ -6736,13 +6736,13 @@ "title": "L2 Protocols" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Profiles" } @@ -6820,13 +6820,13 @@ "title": "Shutdown" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Interface Profiles" }, @@ -6856,13 +6856,13 @@ "title": "Initiator" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "BGP Profiles" }, @@ -6894,13 +6894,13 @@ "title": "On Boot" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Unit Profiles" }, @@ -6950,13 +6950,13 @@ "title": "Groups" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Units" } @@ -7249,13 +7249,13 @@ "title": "IPv6 Access Group" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Enable VRFs" }, @@ -7487,13 +7487,13 @@ "title": "EOS CLI" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Management Interfaces" }, @@ -7887,13 +7887,13 @@ "title": "Enable" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "VRFs" }, @@ -8006,8 +8006,8 @@ } }, "required": [ - "sequence", - "match_regex" + "match_regex", + "sequence" ], "additionalProperties": false, "patternProperties": { @@ -8018,8 +8018,8 @@ } }, "required": [ - "name", - "sequence_numbers" + "sequence_numbers", + "name" ], "additionalProperties": false, "patternProperties": { @@ -8741,9 +8741,9 @@ } }, "required": [ - "id", "type", - "endpoint" + "endpoint", + "id" ], "additionalProperties": false, "patternProperties": { @@ -8753,13 +8753,13 @@ "title": "Connectors" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Patches" } @@ -8797,8 +8797,8 @@ } }, "required": [ - "sequence", - "match" + "match", + "sequence" ], "additionalProperties": false, "patternProperties": { @@ -8809,8 +8809,8 @@ } }, "required": [ - "name", - "sequence_numbers" + "sequence_numbers", + "name" ], "additionalProperties": false, "patternProperties": { @@ -10350,13 +10350,13 @@ "title": "No Autoconfig Flag" } }, - "required": [ - "ipv6_prefix" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "ipv6_prefix" + ] }, "title": "IPv6 ND Prefixes" }, @@ -10477,13 +10477,13 @@ "title": "Key" } }, - "required": [ - "id" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "id" + ] }, "title": "OSPF Message Digest Keys" }, @@ -10570,13 +10570,13 @@ "title": "EOS CLI" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Port Channel Interfaces" }, @@ -10607,8 +10607,8 @@ } }, "required": [ - "sequence", - "action" + "action", + "sequence" ], "additionalProperties": false, "patternProperties": { @@ -10618,13 +10618,13 @@ "title": "Sequence Numbers" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Prefix Lists" }, @@ -11033,13 +11033,13 @@ "title": "Comment" } }, - "required": [ - "id" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "id" + ] }, "title": "TX Queues" }, @@ -11090,13 +11090,13 @@ "title": "Comment" } }, - "required": [ - "id" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "id" + ] }, "title": "Uc TX Queues" }, @@ -11147,24 +11147,24 @@ "title": "Comment" } }, - "required": [ - "id" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "id" + ] }, "title": "Mc TX Queues" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "QOS Profiles" }, @@ -11547,8 +11547,8 @@ } }, "required": [ - "sequence", - "type" + "type", + "sequence" ], "additionalProperties": false, "patternProperties": { @@ -11559,8 +11559,8 @@ } }, "required": [ - "name", - "sequence_numbers" + "sequence_numbers", + "name" ], "additionalProperties": false, "patternProperties": { @@ -15875,13 +15875,13 @@ "title": "Routes" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "VRFs" } @@ -16358,8 +16358,8 @@ } }, "required": [ - "source_prefix", - "limit" + "limit", + "source_prefix" ], "additionalProperties": false, "patternProperties": { @@ -16428,13 +16428,13 @@ "title": "Name" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Mesh Groups" }, @@ -16486,13 +16486,13 @@ "title": "Sa Filter" } }, - "required": [ - "ipv4_address" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "ipv4_address" + ] }, "title": "Peers" }, @@ -16547,8 +16547,8 @@ } }, "required": [ - "source_prefix", - "limit" + "limit", + "source_prefix" ], "additionalProperties": false, "patternProperties": { @@ -16617,13 +16617,13 @@ "title": "Name" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Mesh Groups" }, @@ -16675,24 +16675,24 @@ "title": "Sa Filter" } }, - "required": [ - "ipv4_address" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "ipv4_address" + ] }, "title": "Peers" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "VRFs" } @@ -17435,13 +17435,13 @@ "title": "Override" } }, - "required": [ - "address" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "address" + ] }, "title": "RP Addresses" }, @@ -17470,24 +17470,24 @@ "title": "Register Count" } }, - "required": [ - "address" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "address" + ] }, "title": "Other Anycast RP Addresses" } }, - "required": [ - "address" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "address" + ] }, "title": "Anycast RPs" } @@ -17575,13 +17575,13 @@ "title": "IPv4" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "VRFs" } @@ -18193,13 +18193,13 @@ "title": "VRF" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Local Interfaces" }, @@ -18694,8 +18694,8 @@ } }, "required": [ - "sequence", - "action" + "action", + "sequence" ], "additionalProperties": false, "patternProperties": { @@ -18706,8 +18706,8 @@ } }, "required": [ - "name", - "sequence_numbers" + "sequence_numbers", + "name" ], "additionalProperties": false, "patternProperties": { @@ -19128,13 +19128,13 @@ "title": "Source" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Profiles" } @@ -19189,8 +19189,8 @@ } }, "required": [ - "name", - "interface" + "interface", + "name" ], "additionalProperties": false, "patternProperties": { @@ -19724,13 +19724,13 @@ "title": "EOS CLI" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "Tunnel Interfaces" }, @@ -20274,13 +20274,13 @@ "title": "Link Address" } }, - "required": [ - "address" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "address" + ] }, "title": "IPv6 DHCP Relay Destinations" }, @@ -20885,13 +20885,13 @@ "title": "EOS CLI" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "VLAN Interfaces" }, @@ -21047,13 +21047,13 @@ "title": "Source Interface" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "VMTracer Sessions" }, @@ -21226,13 +21226,13 @@ "title": "Flood Vteps" } }, - "required": [ - "id" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "id" + ] }, "title": "VLANs" }, @@ -21256,13 +21256,13 @@ "title": "Multicast Group" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "VRFs" }, diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml index fe234247cbb..a393efb67b0 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml @@ -320,7 +320,6 @@ keys: keys: name: type: str - required: true description: Access-list Name counters_per_entry: type: bool @@ -335,7 +334,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str @@ -517,7 +515,6 @@ keys: keys: name: type: str - required: true description: Group Name vrf: type: str @@ -621,7 +618,6 @@ keys: keys: name: type: str - required: true description: Community-list Name action: type: str @@ -723,7 +719,6 @@ keys: keys: name: type: str - required: true description: Cluster Name cvaddrs: type: list @@ -990,7 +985,6 @@ keys: keys: name: type: str - required: true description: Daemon Name exec: type: str @@ -1176,7 +1170,6 @@ keys: keys: name: type: str - required: true description: type: str shutdown: @@ -1465,7 +1458,6 @@ keys: keys: ip_helper: type: str - required: true source_interface: type: str description: Source interface name @@ -1475,7 +1467,7 @@ keys: convert_types: - int ip_nat: - $ref: '#/$defs/interface_ip_nat' + $ref: eos_cli_config_gen#/$defs/interface_ip_nat ipv6_enable: type: bool ipv6_address: @@ -1497,7 +1489,6 @@ keys: keys: ipv6_prefix: type: str - required: true valid_lifetime: type: str convert_types: @@ -1519,7 +1510,6 @@ keys: address: type: str description: DHCP server's IPv6 address - required: true vrf: type: str convert_types: @@ -1618,7 +1608,6 @@ keys: type: int convert_types: - str - required: true hash_algorithm: type: str valid_values: @@ -2487,7 +2476,6 @@ keys: type: int convert_types: - str - required: true serdes: type: str description: Serdes speed like "10g" or "25g" @@ -2627,7 +2615,6 @@ keys: keys: name: type: str - required: true description: Interface-Group name interfaces: type: list @@ -2654,7 +2641,6 @@ keys: keys: name: type: str - required: true description: Interface-Profile Name commands: type: list @@ -2675,7 +2661,6 @@ keys: keys: name: type: str - required: true description: Access-list Name counters_per_entry: type: bool @@ -2844,7 +2829,6 @@ keys: keys: name: type: str - required: true description: IP Community-list Name entries: type: list @@ -2905,7 +2889,6 @@ keys: keys: name: type: str - required: true description: 'Source Interface ' @@ -2925,7 +2908,6 @@ keys: keys: name: type: str - required: true description: Community-list Name entries: type: list @@ -2957,7 +2939,6 @@ keys: keys: name: type: str - required: true description: Community-list Name entries: type: list @@ -3078,7 +3059,6 @@ keys: type: int convert_types: - str - required: true description: VLAN ID enabled: type: bool @@ -3380,7 +3360,6 @@ keys: keys: name: type: str - required: true description: IPv6 Access-list Name counters_per_entry: type: bool @@ -3395,7 +3374,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str @@ -3433,7 +3411,6 @@ keys: keys: name: type: str - required: true description: Prefix-list Name sequence_numbers: type: list @@ -3446,7 +3423,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str @@ -3466,7 +3442,6 @@ keys: keys: name: type: str - required: true description: Access-list Name counters_per_entry: type: bool @@ -3481,7 +3456,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str @@ -3545,7 +3519,6 @@ keys: keys: name: type: str - required: true protocols: type: list primary_key: name @@ -3554,7 +3527,6 @@ keys: keys: name: type: str - required: true valid_values: - bfd per-link rfc-7130 - e-lmi @@ -3609,7 +3581,6 @@ keys: keys: name: type: str - required: true links_minimum: type: int min: 1 @@ -3680,7 +3651,6 @@ keys: name: description: Username type: str - required: true disabled: type: bool description: 'If true, the user will be removed and all other settings are @@ -3889,7 +3859,6 @@ keys: type: str convert_types: - int - required: true description: VRF name source_interface: type: str @@ -3904,7 +3873,6 @@ keys: keys: name: type: str - required: true description: Syslog server name protocol: type: str @@ -3934,7 +3902,6 @@ keys: keys: name: type: str - required: true description: Match list action: type: str @@ -3969,7 +3936,6 @@ keys: name: type: str description: Loopback interface name e.g. "Loopback0" - required: true description: type: str shutdown: @@ -4042,7 +4008,6 @@ keys: keys: name: type: str - required: true description: MAC Access-list Name counters_per_entry: type: bool @@ -4112,7 +4077,6 @@ keys: keys: name: type: str - required: true description: Profile-Name cipher: type: str @@ -4206,7 +4170,6 @@ keys: keys: name: type: str - required: true rate_monitoring: type: dict keys: @@ -4244,7 +4207,6 @@ keys: keys: name: type: str - required: true description: BGP Profile Name initiator: type: dict @@ -4262,7 +4224,6 @@ keys: keys: name: type: str - required: true description: Unit Profile Name on_boot: type: dict @@ -4286,7 +4247,6 @@ keys: keys: name: type: str - required: true description: Unit Name quiesce: type: bool @@ -4487,7 +4447,6 @@ keys: name: description: VRF Name type: str - required: true convert_types: - int access_group: @@ -4576,7 +4535,6 @@ keys: keys: name: type: str - required: true description: Management Interface Name description: type: str @@ -4850,7 +4808,6 @@ keys: keys: name: type: str - required: true description: VRF Name convert_types: - int @@ -4903,7 +4860,6 @@ keys: keys: name: type: str - required: true description: Match-list Name sequence_numbers: type: list @@ -4916,7 +4872,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str @@ -5321,7 +5276,6 @@ keys: keys: name: type: str - required: true enabled: type: bool connectors: @@ -5340,7 +5294,6 @@ keys: type: str convert_types: - int - required: true type: type: str valid_values: @@ -5373,7 +5326,6 @@ keys: keys: name: type: str - required: true description: Peer-filter Name sequence_numbers: type: list @@ -5386,7 +5338,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str @@ -5573,7 +5524,6 @@ keys: keys: name: type: str - required: true description: type: str logging: @@ -6164,7 +6114,7 @@ keys: type: str description: IPv4 address/mask ip_nat: - $ref: '#/$defs/interface_ip_nat' + $ref: eos_cli_config_gen#/$defs/interface_ip_nat ipv6_enable: type: bool ipv6_address: @@ -6187,7 +6137,6 @@ keys: keys: ipv6_prefix: type: str - required: true valid_lifetime: type: str convert_types: @@ -6266,7 +6215,6 @@ keys: type: int convert_types: - str - required: true hash_algorithm: type: str valid_values: @@ -6325,7 +6273,6 @@ keys: keys: name: type: str - required: true description: Prefix-list Name sequence_numbers: type: list @@ -6337,7 +6284,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str @@ -6537,7 +6483,6 @@ keys: keys: name: type: str - required: true description: Profile-Name trust: type: str @@ -6584,7 +6529,6 @@ keys: type: int convert_types: - str - required: true description: TX-Queue ID bandwidth_percent: type: int @@ -6626,7 +6570,6 @@ keys: type: int convert_types: - str - required: true description: UC TX queue ID bandwidth_percent: type: int @@ -6668,7 +6611,6 @@ keys: type: int convert_types: - str - required: true description: MC TX queue ID bandwidth_percent: type: int @@ -6886,7 +6828,6 @@ keys: keys: name: type: str - required: true description: Route-map Name sequence_numbers: type: list @@ -6899,7 +6840,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str @@ -9247,7 +9187,6 @@ keys: keys: name: type: str - required: true description: Destination-VRF convert_types: - int @@ -9527,7 +9466,6 @@ keys: source_prefix: type: str description: Source address prefix - required: true limit: type: int convert_types: @@ -9544,7 +9482,6 @@ keys: keys: ipv4_address: type: str - required: true description: Peer IP Address default_peer: type: dict @@ -9576,7 +9513,6 @@ keys: keys: name: type: str - required: true description: Mesh group name keepalive: type: dict @@ -9613,7 +9549,6 @@ keys: keys: name: type: str - required: true description: VRF name convert_types: - int @@ -9644,7 +9579,6 @@ keys: source_prefix: type: str description: Source address prefix - required: true limit: type: int convert_types: @@ -9661,7 +9595,6 @@ keys: keys: ipv4_address: type: str - required: true description: Peer IP Address default_peer: type: dict @@ -9693,7 +9626,6 @@ keys: keys: name: type: str - required: true description: Mesh group name keepalive: type: dict @@ -10129,7 +10061,6 @@ keys: keys: address: type: str - required: true description: RP Address groups: type: list @@ -10161,7 +10092,6 @@ keys: keys: address: type: str - required: true description: Anycast RP Address other_anycast_rp_addresses: type: list @@ -10173,7 +10103,6 @@ keys: keys: address: type: str - required: true description: Other Anycast RP Address register_count: type: int @@ -10188,7 +10117,6 @@ keys: name: type: str description: VRF Name - required: true convert_types: - int ipv4: @@ -10570,7 +10498,6 @@ keys: keys: name: type: str - required: true description: Interface name vrf: type: str @@ -10887,7 +10814,6 @@ keys: keys: name: type: str - required: true description: Access-list Name counters_per_entry: type: bool @@ -10902,7 +10828,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str @@ -11149,7 +11074,6 @@ keys: keys: name: type: str - required: true description: Tcam-Profile Name config: type: str @@ -11186,7 +11110,6 @@ keys: name: type: str description: Name of tracker object - required: true interface: type: str description: Name of tracked interface @@ -11429,7 +11352,6 @@ keys: keys: name: type: str - required: true description: Tunnel Interface Name description: type: str @@ -11533,7 +11455,6 @@ keys: keys: name: type: str - required: true description: VLAN interface name like "Vlan123" description: type: str @@ -11615,7 +11536,7 @@ keys: convert_types: - int ip_nat: - $ref: '#/$defs/interface_ip_nat' + $ref: eos_cli_config_gen#/$defs/interface_ip_nat ipv6_enable: type: bool ipv6_address: @@ -11696,7 +11617,6 @@ keys: address: type: str description: DHCP server's IPv6 address - required: true vrf: type: str convert_types: @@ -12132,7 +12052,6 @@ keys: keys: name: type: str - required: true description: Vmtracer Session Name url: type: str @@ -12255,7 +12174,6 @@ keys: type: int convert_types: - str - required: true description: VLAN ID vni: type: int @@ -12279,7 +12197,6 @@ keys: keys: name: type: str - required: true description: VRF Name convert_types: - int @@ -12328,7 +12245,7 @@ $defs: min: 0 max: 4294967295 static: - $ref: '#/$defs/interface_ip_nat_static' + $ref: eos_cli_config_gen#/$defs/interface_ip_nat_static source: type: dict keys: @@ -12365,7 +12282,7 @@ $defs: min: 0 max: 4294967295 static: - $ref: '#/$defs/interface_ip_nat_static' + $ref: eos_cli_config_gen#/$defs/interface_ip_nat_static interface_ip_nat_static: type: list primary_key: original_ip diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/access_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/access_lists.schema.yml index 3dc119f8b92..f126bdb2794 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/access_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/access_lists.schema.yml @@ -14,7 +14,6 @@ keys: keys: name: type: str - required: true description: Access-list Name counters_per_entry: type: bool @@ -29,7 +28,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/bgp_groups.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/bgp_groups.schema.yml index 516fa4631ee..7f75141fc21 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/bgp_groups.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/bgp_groups.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: Group Name vrf: type: str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/community_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/community_lists.schema.yml index 8c2c5555e47..bf9ed5ca457 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/community_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/community_lists.schema.yml @@ -14,7 +14,6 @@ keys: keys: name: type: str - required: true description: Community-list Name action: type: str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/daemon_terminattr.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/daemon_terminattr.schema.yml index bf2c0920802..5ae75760050 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/daemon_terminattr.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/daemon_terminattr.schema.yml @@ -34,7 +34,6 @@ keys: keys: name: type: str - required: true description: Cluster Name cvaddrs: type: list diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/daemons.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/daemons.schema.yml index 7394edd123d..2f633fb102b 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/daemons.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/daemons.schema.yml @@ -15,7 +15,6 @@ keys: keys: name: type: str - required: true description: Daemon Name exec: type: str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/defs_interface_ip_nat.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/defs_interface_ip_nat.schema.yml index c1bc220cbf1..ff889b601de 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/defs_interface_ip_nat.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/defs_interface_ip_nat.schema.yml @@ -29,7 +29,7 @@ $defs: min: 0 max: 4294967295 static: - $ref: "#/$defs/interface_ip_nat_static" + $ref: "eos_cli_config_gen#/$defs/interface_ip_nat_static" source: type: dict keys: @@ -63,4 +63,4 @@ $defs: min: 0 max: 4294967295 static: - $ref: "#/$defs/interface_ip_nat_static" + $ref: "eos_cli_config_gen#/$defs/interface_ip_nat_static" diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ethernet_interfaces.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ethernet_interfaces.schema.yml index bdbca806725..32c6d43c281 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ethernet_interfaces.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ethernet_interfaces.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: type: str shutdown: @@ -268,7 +267,6 @@ keys: keys: ip_helper: type: str - required: true source_interface: type: str description: Source interface name @@ -278,7 +276,7 @@ keys: convert_types: - int ip_nat: - $ref: "#/$defs/interface_ip_nat" + $ref: "eos_cli_config_gen#/$defs/interface_ip_nat" ipv6_enable: type: bool ipv6_address: @@ -300,7 +298,6 @@ keys: keys: ipv6_prefix: type: str - required: true valid_lifetime: type: str convert_types: @@ -322,7 +319,6 @@ keys: address: type: str description: DHCP server's IPv6 address - required: true vrf: type: str convert_types: @@ -414,7 +410,6 @@ keys: type: int convert_types: - str - required: true hash_algorithm: type: str valid_values: ["md5", "sha1", "sha256", "sha384", "sha512"] diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/hardware.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/hardware.schema.yml index fda6b0aab01..ed94dccc0ce 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/hardware.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/hardware.schema.yml @@ -24,7 +24,6 @@ keys: type: int convert_types: - str - required: true serdes: type: str description: Serdes speed like "10g" or "25g" diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/interface_groups.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/interface_groups.schema.yml index 7cd2dda1b7c..27b4a299abc 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/interface_groups.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/interface_groups.schema.yml @@ -14,7 +14,6 @@ keys: keys: name: type: str - required: true description: Interface-Group name interfaces: type: list diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/interface_profiles.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/interface_profiles.schema.yml index 16c35562db5..3db307aa519 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/interface_profiles.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/interface_profiles.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: Interface-Profile Name commands: type: list diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_access_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_access_lists.schema.yml index a3958cb5123..17705ac018b 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_access_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_access_lists.schema.yml @@ -14,7 +14,6 @@ keys: keys: name: type: str - required: true description: Access-list Name counters_per_entry: type: bool diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_community_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_community_lists.schema.yml index c1f7ce7fd23..342514a969a 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_community_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_community_lists.schema.yml @@ -17,7 +17,6 @@ keys: keys: name: type: str - required: true description: IP Community-list Name entries: type: list diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_domain_lookup.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_domain_lookup.schema.yml index 050371c9f72..6d8b3019a8c 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_domain_lookup.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_domain_lookup.schema.yml @@ -16,7 +16,6 @@ keys: keys: name: type: str - required: true description: | Source Interface vrf: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_extcommunity_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_extcommunity_lists.schema.yml index 699aa54fd65..6c3300617b7 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_extcommunity_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_extcommunity_lists.schema.yml @@ -15,7 +15,6 @@ keys: keys: name: type: str - required: true description: Community-list Name entries: type: list diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_extcommunity_lists_regexp.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_extcommunity_lists_regexp.schema.yml index 046bd87c472..a50a20d540f 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_extcommunity_lists_regexp.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_extcommunity_lists_regexp.schema.yml @@ -15,7 +15,6 @@ keys: keys: name: type: str - required: true description: Community-list Name entries: type: list diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_igmp_snooping.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_igmp_snooping.schema.yml index aad408817b6..826d497fed3 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_igmp_snooping.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ip_igmp_snooping.schema.yml @@ -74,7 +74,6 @@ keys: type: int convert_types: - str - required: true description: VLAN ID enabled: type: bool diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_access_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_access_lists.schema.yml index bb79b305c86..c9850af4f0e 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_access_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_access_lists.schema.yml @@ -14,7 +14,6 @@ keys: keys: name: type: str - required: true description: IPv6 Access-list Name counters_per_entry: type: bool @@ -29,7 +28,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_prefix_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_prefix_lists.schema.yml index d3ced3fba4c..ddb58dd43c6 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_prefix_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_prefix_lists.schema.yml @@ -14,7 +14,6 @@ keys: keys: name: type: str - required: true description: Prefix-list Name sequence_numbers: type: list @@ -27,7 +26,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_standard_access_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_standard_access_lists.schema.yml index 1cbc392894f..8dd46107a01 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_standard_access_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/ipv6_standard_access_lists.schema.yml @@ -14,7 +14,6 @@ keys: keys: name: type: str - required: true description: Access-list Name counters_per_entry: type: bool @@ -29,7 +28,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/l2_protocol_forwarding.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/l2_protocol_forwarding.schema.yml index bac3e435a0a..877dc55e9c1 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/l2_protocol_forwarding.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/l2_protocol_forwarding.schema.yml @@ -14,7 +14,6 @@ keys: keys: name: type: str - required: true protocols: type: list primary_key: name @@ -23,7 +22,6 @@ keys: keys: name: type: str - required: true valid_values: ["bfd per-link rfc-7130", "e-lmi", "isis", "lacp", "lldp", "macsec", "pause", "stp"] forward: type: bool diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/link_tracking_groups.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/link_tracking_groups.schema.yml index d47fda22db6..b044e73d6dd 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/link_tracking_groups.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/link_tracking_groups.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true links_minimum: type: int min: 1 diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/local_users.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/local_users.schema.yml index f0186db66c5..d81030c0264 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/local_users.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/local_users.schema.yml @@ -14,7 +14,6 @@ keys: name: description: Username type: str - required: true disabled: type: bool description: | diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/logging.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/logging.schema.yml index d95473649ed..abf1b5f43e6 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/logging.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/logging.schema.yml @@ -79,7 +79,6 @@ keys: type: str convert_types: - int - required: true description: VRF name source_interface: type: str @@ -94,7 +93,6 @@ keys: keys: name: type: str - required: true description: Syslog server name protocol: type: str @@ -122,7 +120,6 @@ keys: keys: name: type: str - required: true description: Match list action: type: str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/loopback_interfaces.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/loopback_interfaces.schema.yml index 7d06204e590..48fede9076e 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/loopback_interfaces.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/loopback_interfaces.schema.yml @@ -14,7 +14,6 @@ keys: name: type: str description: Loopback interface name e.g. "Loopback0" - required: true description: type: str shutdown: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/mac_access_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/mac_access_lists.schema.yml index a95a4986f15..59ebde65326 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/mac_access_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/mac_access_lists.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: MAC Access-list Name counters_per_entry: type: bool diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/mac_security.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/mac_security.schema.yml index 641094bba56..2d58491615d 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/mac_security.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/mac_security.schema.yml @@ -30,7 +30,6 @@ keys: keys: name: type: str - required: true description: Profile-Name cipher: type: str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/maintenance.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/maintenance.schema.yml index d505138207b..6189dda192b 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/maintenance.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/maintenance.schema.yml @@ -30,7 +30,6 @@ keys: keys: name: type: str - required: true rate_monitoring: type: dict keys: @@ -65,7 +64,6 @@ keys: keys: name: type: str - required: true description: BGP Profile Name initiator: type: dict @@ -83,7 +81,6 @@ keys: keys: name: type: str - required: true description: Unit Profile Name on_boot: type: dict @@ -106,7 +103,6 @@ keys: keys: name: type: str - required: true description: Unit Name quiesce: type: bool diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_api_http.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_api_http.schema.yml index 9c574e8b341..52783e59651 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_api_http.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_api_http.schema.yml @@ -27,7 +27,6 @@ keys: name: description: VRF Name type: str - required: true convert_types: - int access_group: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_interfaces.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_interfaces.schema.yml index 6aed5b9113f..237e542fbc7 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_interfaces.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_interfaces.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: Management Interface Name description: type: str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_ssh.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_ssh.schema.yml index 46a49f10afb..978a699d186 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_ssh.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/management_ssh.schema.yml @@ -93,7 +93,6 @@ keys: keys: name: type: str - required: true description: VRF Name convert_types: - int diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/match_list_input.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/match_list_input.schema.yml index 41cbbcc6da2..de9cdce645b 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/match_list_input.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/match_list_input.schema.yml @@ -17,7 +17,6 @@ keys: keys: name: type: str - required: true description: Match-list Name sequence_numbers: type: list @@ -30,7 +29,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/patch_panel.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/patch_panel.schema.yml index 7a2274e53ea..2bca9bbe5f9 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/patch_panel.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/patch_panel.schema.yml @@ -16,7 +16,6 @@ keys: keys: name: type: str - required: true enabled: type: bool connectors: @@ -34,7 +33,6 @@ keys: type: str convert_types: - int - required: true type: type: str valid_values: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/peer_filters.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/peer_filters.schema.yml index 9043caf6830..0b142cf5cf8 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/peer_filters.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/peer_filters.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: Peer-filter Name sequence_numbers: type: list @@ -26,7 +25,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/port_channel_interfaces.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/port_channel_interfaces.schema.yml index d7c60aef148..c55260f06d9 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/port_channel_interfaces.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/port_channel_interfaces.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: type: str logging: @@ -567,7 +566,7 @@ keys: type: str description: IPv4 address/mask ip_nat: - $ref: "#/$defs/interface_ip_nat" + $ref: "eos_cli_config_gen#/$defs/interface_ip_nat" ipv6_enable: type: bool ipv6_address: @@ -590,7 +589,6 @@ keys: keys: ipv6_prefix: type: str - required: true valid_lifetime: type: str convert_types: @@ -669,7 +667,6 @@ keys: type: int convert_types: - str - required: true hash_algorithm: type: str valid_values: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/prefix_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/prefix_lists.schema.yml index ff84371e28a..64b397c3dae 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/prefix_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/prefix_lists.schema.yml @@ -14,7 +14,6 @@ keys: keys: name: type: str - required: true description: Prefix-list Name sequence_numbers: type: list @@ -26,7 +25,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/qos_profiles.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/qos_profiles.schema.yml index 9a5be3ecbc4..63b86312d3c 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/qos_profiles.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/qos_profiles.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: Profile-Name trust: type: str @@ -55,7 +54,6 @@ keys: type: int convert_types: - str - required: true description: TX-Queue ID bandwidth_percent: type: int @@ -92,7 +90,6 @@ keys: type: int convert_types: - str - required: true description: UC TX queue ID bandwidth_percent: type: int @@ -129,7 +126,6 @@ keys: type: int convert_types: - str - required: true description: MC TX queue ID bandwidth_percent: type: int diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/route_maps.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/route_maps.schema.yml index 654618392c7..4de67088edc 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/route_maps.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/route_maps.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: Route-map Name sequence_numbers: type: list @@ -26,7 +25,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_general.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_general.schema.yml index b382dd478e8..6b9a43e2f47 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_general.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_general.schema.yml @@ -29,7 +29,6 @@ keys: keys: name: type: str - required: true description: Destination-VRF convert_types: - int diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_msdp.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_msdp.schema.yml index d57753c9d13..233e48a7214 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_msdp.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_msdp.schema.yml @@ -33,7 +33,6 @@ keys: source_prefix: type: str description: Source address prefix - required: true limit: type: int convert_types: @@ -50,7 +49,6 @@ keys: keys: ipv4_address: type: str - required: true description: Peer IP Address default_peer: type: dict @@ -82,7 +80,6 @@ keys: keys: name: type: str - required: true description: Mesh group name keepalive: type: dict @@ -119,7 +116,6 @@ keys: keys: name: type: str - required: true description: VRF name convert_types: - int @@ -150,7 +146,6 @@ keys: source_prefix: type: str description: Source address prefix - required: true limit: type: int convert_types: @@ -167,7 +162,6 @@ keys: keys: ipv4_address: type: str - required: true description: Peer IP Address default_peer: type: dict @@ -199,7 +193,6 @@ keys: keys: name: type: str - required: true description: Mesh group name keepalive: type: dict diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_pim_sparse_mode.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_pim_sparse_mode.schema.yml index 349e6dd89a7..5a5e9c639cf 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_pim_sparse_mode.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_pim_sparse_mode.schema.yml @@ -29,7 +29,6 @@ keys: keys: address: type: str - required: true description: RP Address groups: type: list @@ -61,7 +60,6 @@ keys: keys: address: type: str - required: true description: Anycast RP Address other_anycast_rp_addresses: type: list @@ -73,7 +71,6 @@ keys: keys: address: type: str - required: true description: Other Anycast RP Address register_count: type: int @@ -88,7 +85,6 @@ keys: name: type: str description: VRF Name - required: true convert_types: - int ipv4: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/snmp_server.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/snmp_server.schema.yml index 39689ebf842..3015e510ff4 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/snmp_server.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/snmp_server.schema.yml @@ -103,7 +103,6 @@ keys: keys: name: type: str - required: true description: Interface name vrf: type: str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/standard_access_lists.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/standard_access_lists.schema.yml index 8301d60aa5d..b8d3a1045b5 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/standard_access_lists.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/standard_access_lists.schema.yml @@ -14,7 +14,6 @@ keys: keys: name: type: str - required: true description: Access-list Name counters_per_entry: type: bool @@ -29,7 +28,6 @@ keys: keys: sequence: type: int - required: true description: Sequence ID convert_types: - str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/tcam_profile.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/tcam_profile.schema.yml index 979c18cbe35..6980aab6e9a 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/tcam_profile.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/tcam_profile.schema.yml @@ -22,7 +22,6 @@ keys: keys: name: type: str - required: true description: Tcam-Profile Name config: type: str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/trackers.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/trackers.schema.yml index 922e43c6f95..7eabd3d8405 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/trackers.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/trackers.schema.yml @@ -12,7 +12,6 @@ keys: name: type: str description: Name of tracker object - required: true interface: type: str description: Name of tracked interface diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/tunnel_interfaces.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/tunnel_interfaces.schema.yml index 5f9084937f5..a56038b9334 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/tunnel_interfaces.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/tunnel_interfaces.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: Tunnel Interface Name description: type: str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vlan_interfaces.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vlan_interfaces.schema.yml index 554541a7bae..d6b0210e665 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vlan_interfaces.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vlan_interfaces.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: VLAN interface name like "Vlan123" description: type: str @@ -95,7 +94,7 @@ keys: convert_types: - int ip_nat: - $ref: "#/$defs/interface_ip_nat" + $ref: "eos_cli_config_gen#/$defs/interface_ip_nat" ipv6_enable: type: bool ipv6_address: @@ -170,7 +169,6 @@ keys: address: type: str description: DHCP server's IPv6 address - required: true vrf: type: str convert_types: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vmtracer_sessions.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vmtracer_sessions.schema.yml index 02a61cc2b6e..e1cbfa14616 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vmtracer_sessions.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vmtracer_sessions.schema.yml @@ -13,7 +13,6 @@ keys: keys: name: type: str - required: true description: Vmtracer Session Name url: type: str diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vxlan_interface.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vxlan_interface.schema.yml index 1b5f42d68f0..cca391f6f9a 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vxlan_interface.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/vxlan_interface.schema.yml @@ -78,7 +78,6 @@ keys: type: int convert_types: - str - required: true description: VLAN ID vni: type: int @@ -102,7 +101,6 @@ keys: keys: name: type: str - required: true description: VRF Name convert_types: - int diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/bgp-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/bgp-settings.md index d7ac4002980..f248ea4c90f 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/bgp-settings.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/bgp-settings.md @@ -18,37 +18,37 @@ | [    name](## "bgp_peer_groups.ipv4_underlay_peers.name") | String | | `IPv4-UNDERLAY-PEERS` | | Name of peer group. | | [    password](## "bgp_peer_groups.ipv4_underlay_peers.password") | String | | | | Type 7 encrypted password. | | [    bfd](## "bgp_peer_groups.ipv4_underlay_peers.bfd") | Boolean | | `False` | | | - | [    structured_config](## "bgp_peer_groups.ipv4_underlay_peers.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. | + | [    structured_config](## "bgp_peer_groups.ipv4_underlay_peers.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. | | [  mlag_ipv4_underlay_peer](## "bgp_peer_groups.mlag_ipv4_underlay_peer") | Dictionary | | | | | | [    name](## "bgp_peer_groups.mlag_ipv4_underlay_peer.name") | String | | `MLAG-IPv4-UNDERLAY-PEER` | | Name of peer group. | | [    password](## "bgp_peer_groups.mlag_ipv4_underlay_peer.password") | String | | | | Type 7 encrypted password. | | [    bfd](## "bgp_peer_groups.mlag_ipv4_underlay_peer.bfd") | Boolean | | `False` | | | - | [    structured_config](## "bgp_peer_groups.mlag_ipv4_underlay_peer.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. | + | [    structured_config](## "bgp_peer_groups.mlag_ipv4_underlay_peer.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. | | [  evpn_overlay_peers](## "bgp_peer_groups.evpn_overlay_peers") | Dictionary | | | | | | [    name](## "bgp_peer_groups.evpn_overlay_peers.name") | String | | `EVPN-OVERLAY-PEERS` | | Name of peer group. | | [    password](## "bgp_peer_groups.evpn_overlay_peers.password") | String | | | | Type 7 encrypted password. | | [    bfd](## "bgp_peer_groups.evpn_overlay_peers.bfd") | Boolean | | `True` | | | - | [    structured_config](## "bgp_peer_groups.evpn_overlay_peers.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. | + | [    structured_config](## "bgp_peer_groups.evpn_overlay_peers.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. | | [  evpn_overlay_core](## "bgp_peer_groups.evpn_overlay_core") | Dictionary | | | | | | [    name](## "bgp_peer_groups.evpn_overlay_core.name") | String | | `EVPN-OVERLAY-CORE` | | Name of peer group. | | [    password](## "bgp_peer_groups.evpn_overlay_core.password") | String | | | | Type 7 encrypted password. | | [    bfd](## "bgp_peer_groups.evpn_overlay_core.bfd") | Boolean | | `True` | | | - | [    structured_config](## "bgp_peer_groups.evpn_overlay_core.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. | + | [    structured_config](## "bgp_peer_groups.evpn_overlay_core.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. | | [  mpls_overlay_peers](## "bgp_peer_groups.mpls_overlay_peers") | Dictionary | | | | | | [    name](## "bgp_peer_groups.mpls_overlay_peers.name") | String | | `MPLS-OVERLAY-PEERS` | | Name of peer group. | | [    password](## "bgp_peer_groups.mpls_overlay_peers.password") | String | | | | Type 7 encrypted password. | | [    bfd](## "bgp_peer_groups.mpls_overlay_peers.bfd") | Boolean | | `True` | | | - | [    structured_config](## "bgp_peer_groups.mpls_overlay_peers.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. | + | [    structured_config](## "bgp_peer_groups.mpls_overlay_peers.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. | | [  rr_overlay_peers](## "bgp_peer_groups.rr_overlay_peers") | Dictionary | | | | | | [    name](## "bgp_peer_groups.rr_overlay_peers.name") | String | | `RR-OVERLAY-PEERS` | | Name of peer group. | | [    password](## "bgp_peer_groups.rr_overlay_peers.password") | String | | | | Type 7 encrypted password. | | [    bfd](## "bgp_peer_groups.rr_overlay_peers.bfd") | Boolean | | `True` | | | - | [    structured_config](## "bgp_peer_groups.rr_overlay_peers.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. | + | [    structured_config](## "bgp_peer_groups.rr_overlay_peers.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. | | [  ipvpn_gateway_peers](## "bgp_peer_groups.ipvpn_gateway_peers") | Dictionary | | | | | | [    name](## "bgp_peer_groups.ipvpn_gateway_peers.name") | String | | `IPVPN-GATEWAY-PEERS` | | Name of peer group. | | [    password](## "bgp_peer_groups.ipvpn_gateway_peers.password") | String | | | | Type 7 encrypted password. | | [    bfd](## "bgp_peer_groups.ipvpn_gateway_peers.bfd") | Boolean | | `True` | | | - | [    structured_config](## "bgp_peer_groups.ipvpn_gateway_peers.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. | + | [    structured_config](## "bgp_peer_groups.ipvpn_gateway_peers.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. | | [  IPv4_UNDERLAY_PEERS](## "bgp_peer_groups.IPv4_UNDERLAY_PEERS") removed | Dictionary | | | | This key was removed. Support was removed in AVD version 4.0.0. Use bgp_peer_groups.ipv4_underlay_peers instead. | | [  MLAG_IPv4_UNDERLAY_PEER](## "bgp_peer_groups.MLAG_IPv4_UNDERLAY_PEER") removed | Dictionary | | | | This key was removed. Support was removed in AVD version 4.0.0. Use bgp_peer_groups.mlag_ipv4_underlay_peer instead. | | [  EVPN_OVERLAY_PEERS](## "bgp_peer_groups.EVPN_OVERLAY_PEERS") removed | Dictionary | | | | This key was removed. Support was removed in AVD version 4.0.0. Use bgp_peer_groups.evpn_overlay_peers instead. | diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md index 6b5d1db9af6..52b33380669 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md @@ -140,9 +140,9 @@ | [              encapsulation_vlan](## "<connected_endpoints_keys.key>.[].adapters.[].port_channel.subinterfaces.[].encapsulation_vlan") | Dictionary | | | | Client VLAN ID encapsulation.
Default is subinterface number.
| | [                client_dot1q](## "<connected_endpoints_keys.key>.[].adapters.[].port_channel.subinterfaces.[].encapsulation_vlan.client_dot1q") | Integer | | | Min: 1
Max: 4094 | | | [          raw_eos_cli](## "<connected_endpoints_keys.key>.[].adapters.[].port_channel.raw_eos_cli") | String | | | | EOS CLI rendered directly on the port-channel interface in the final EOS configuration. | - | [          structured_config](## "<connected_endpoints_keys.key>.[].adapters.[].port_channel.structured_config") | Dictionary | | | | Custom structured config added under port_channel_interfaces. for eos_cli_config_gen. | + | [          structured_config](## "<connected_endpoints_keys.key>.[].adapters.[].port_channel.structured_config") | Dictionary | | | | Custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen. | | [        raw_eos_cli](## "<connected_endpoints_keys.key>.[].adapters.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the ethernet interface in the final EOS configuration. | - | [        structured_config](## "<connected_endpoints_keys.key>.[].adapters.[].structured_config") | Dictionary | | | | Custom structured config added under ethernet_interfaces. for eos_cli_config_gen. | + | [        structured_config](## "<connected_endpoints_keys.key>.[].adapters.[].structured_config") | Dictionary | | | | Custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen. | === "YAML" diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md index 1c31448601e..9b0acf97a56 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md @@ -46,7 +46,7 @@ | [            interfaces](## "core_interfaces.p2p_links_profiles.[].port_channel.nodes_child_interfaces.[].interfaces") | List, items: String | | | | List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ]. | | [              - <str>](## "core_interfaces.p2p_links_profiles.[].port_channel.nodes_child_interfaces.[].interfaces.[].<str>") | String | | | | | | [      raw_eos_cli](## "core_interfaces.p2p_links_profiles.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the point-to-point interface in the final EOS configuration. | - | [      structured_config](## "core_interfaces.p2p_links_profiles.[].structured_config") | Dictionary | | | | Custom structured config for interfaces | + | [      structured_config](## "core_interfaces.p2p_links_profiles.[].structured_config") | Dictionary | | | | Custom structured config for interfaces
Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces. | | [  p2p_links](## "core_interfaces.p2p_links") | List, items: Dictionary | | | | | | [    - nodes](## "core_interfaces.p2p_links.[].nodes") | List, items: String | Required | | | Nodes where this link should be configured. | | [        - <str>](## "core_interfaces.p2p_links.[].nodes.[].<str>") | String | | | | The values can be < node_a >, < node_b >.
ex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].
| @@ -86,7 +86,7 @@ | [            interfaces](## "core_interfaces.p2p_links.[].port_channel.nodes_child_interfaces.[].interfaces") | List, items: String | | | | List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ]. | | [              - <str>](## "core_interfaces.p2p_links.[].port_channel.nodes_child_interfaces.[].interfaces.[].<str>") | String | | | | | | [      raw_eos_cli](## "core_interfaces.p2p_links.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the point-to-point interface in the final EOS configuration. | - | [      structured_config](## "core_interfaces.p2p_links.[].structured_config") | Dictionary | | | | Custom structured config for interfaces | + | [      structured_config](## "core_interfaces.p2p_links.[].structured_config") | Dictionary | | | | Custom structured config for interfaces
Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces. | === "YAML" diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md index 31259eadbe7..d9f9d70803d 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md @@ -46,7 +46,7 @@ | [            interfaces](## "l3_edge.p2p_links_profiles.[].port_channel.nodes_child_interfaces.[].interfaces") | List, items: String | | | | List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ]. | | [              - <str>](## "l3_edge.p2p_links_profiles.[].port_channel.nodes_child_interfaces.[].interfaces.[].<str>") | String | | | | | | [      raw_eos_cli](## "l3_edge.p2p_links_profiles.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the point-to-point interface in the final EOS configuration. | - | [      structured_config](## "l3_edge.p2p_links_profiles.[].structured_config") | Dictionary | | | | Custom structured config for interfaces | + | [      structured_config](## "l3_edge.p2p_links_profiles.[].structured_config") | Dictionary | | | | Custom structured config for interfaces
Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces. | | [  p2p_links](## "l3_edge.p2p_links") | List, items: Dictionary | | | | | | [    - nodes](## "l3_edge.p2p_links.[].nodes") | List, items: String | Required | | | Nodes where this link should be configured. | | [        - <str>](## "l3_edge.p2p_links.[].nodes.[].<str>") | String | | | | The values can be < node_a >, < node_b >.
ex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].
| @@ -86,7 +86,7 @@ | [            interfaces](## "l3_edge.p2p_links.[].port_channel.nodes_child_interfaces.[].interfaces") | List, items: String | | | | List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ]. | | [              - <str>](## "l3_edge.p2p_links.[].port_channel.nodes_child_interfaces.[].interfaces.[].<str>") | String | | | | | | [      raw_eos_cli](## "l3_edge.p2p_links.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the point-to-point interface in the final EOS configuration. | - | [      structured_config](## "l3_edge.p2p_links.[].structured_config") | Dictionary | | | | Custom structured config for interfaces | + | [      structured_config](## "l3_edge.p2p_links.[].structured_config") | Dictionary | | | | Custom structured config for interfaces
Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces. | === "YAML" diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md index a11b4757c01..f6a29532e61 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md @@ -133,9 +133,9 @@ | [          encapsulation_vlan](## "network_ports.[].port_channel.subinterfaces.[].encapsulation_vlan") | Dictionary | | | | Client VLAN ID encapsulation.
Default is subinterface number.
| | [            client_dot1q](## "network_ports.[].port_channel.subinterfaces.[].encapsulation_vlan.client_dot1q") | Integer | | | Min: 1
Max: 4094 | | | [      raw_eos_cli](## "network_ports.[].port_channel.raw_eos_cli") | String | | | | EOS CLI rendered directly on the port-channel interface in the final EOS configuration. | - | [      structured_config](## "network_ports.[].port_channel.structured_config") | Dictionary | | | | Custom structured config added under port_channel_interfaces. for eos_cli_config_gen. | + | [      structured_config](## "network_ports.[].port_channel.structured_config") | Dictionary | | | | Custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen. | | [    raw_eos_cli](## "network_ports.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the ethernet interface in the final EOS configuration. | - | [    structured_config](## "network_ports.[].structured_config") | Dictionary | | | | Custom structured config added under ethernet_interfaces. for eos_cli_config_gen. | + | [    structured_config](## "network_ports.[].structured_config") | Dictionary | | | | Custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen. | === "YAML" diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-l2vlans-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-l2vlans-settings.md index 45af33a2b47..28b19785aeb 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-l2vlans-settings.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-l2vlans-settings.md @@ -16,7 +16,7 @@ | [        trunk_groups](## "<network_services_keys.name>.[].l2vlans.[].trunk_groups") | List, items: String | | | | | | [          - <str>](## "<network_services_keys.name>.[].l2vlans.[].trunk_groups.[].<str>") | String | | | | Trunk groups are used for limiting vlans to trunk ports assigned to the same trunk group.
Requires enable_trunk_groups: true.
| | [        bgp](## "<network_services_keys.name>.[].l2vlans.[].bgp") | Dictionary | | | | | - | [          structured_config](## "<network_services_keys.name>.[].l2vlans.[].bgp.structured_config") | Dictionary | | | | Structured configuration for eos_cli_config_gen rendered on router_bgp.vlans.
This configuration will not be applied to vlan aware bundles.
| + | [          structured_config](## "<network_services_keys.name>.[].l2vlans.[].bgp.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.vlans.[id=] for eos_cli_config_gen.
This configuration will not be applied to vlan aware bundles.
| | [          raw_eos_cli](## "<network_services_keys.name>.[].l2vlans.[].bgp.raw_eos_cli") | String | | | | EOS cli commands rendered on router_bgp.vlans.
This configuration will not be applied to vlan aware bundles.
| === "YAML" diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-l3-interfaces-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-l3-interfaces-settings.md index 88be302be55..600e5071052 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-l3-interfaces-settings.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-l3-interfaces-settings.md @@ -33,7 +33,7 @@ | [                  key](## "<network_services_keys.name>.[].vrfs.[].l3_interfaces.[].ospf.message_digest_keys.[].key") | String | | | | Key password. | | [            pim](## "<network_services_keys.name>.[].vrfs.[].l3_interfaces.[].pim") | Dictionary | | | | Enable PIM sparse-mode on the interface; requires "evpn_l3_multicast" to be enabled on the VRF/Tenant
Enabling this implicitly makes the device a PIM External Gateway (PEG) in EVPN designs only.
At least one RP address must be configured for EVPN PEG to be configured.
| | [              enabled](## "<network_services_keys.name>.[].vrfs.[].l3_interfaces.[].pim.enabled") | Boolean | | | | | - | [            structured_config](## "<network_services_keys.name>.[].vrfs.[].l3_interfaces.[].structured_config") | Dictionary | | | | Custom structured config added under ethernet_interfaces. for eos_cli_config_gen.
| + | [            structured_config](## "<network_services_keys.name>.[].vrfs.[].l3_interfaces.[].structured_config") | Dictionary | | | | Custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen. | | [            raw_eos_cli](## "<network_services_keys.name>.[].vrfs.[].l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the Ethernet interface in the final EOS configuration.
| === "YAML" diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-settings.md index e8e8ebbc6bd..a2af087bb1c 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-settings.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-settings.md @@ -53,7 +53,7 @@ | [        redistribute_static](## "<network_services_keys.name>.[].vrfs.[].redistribute_static") | Boolean | | | | Non-selectively enabling or disabling redistribute static inside the VRF. | | [        bgp](## "<network_services_keys.name>.[].vrfs.[].bgp") | Dictionary | | | | | | [          raw_eos_cli](## "<network_services_keys.name>.[].vrfs.[].bgp.raw_eos_cli") | String | | | | EOS CLI rendered directly on the Router BGP, VRF definition in the final EOS configuration.
| - | [          structured_config](## "<network_services_keys.name>.[].vrfs.[].bgp.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.vrfs. for eos_cli_config_gen.
| + | [          structured_config](## "<network_services_keys.name>.[].vrfs.[].bgp.structured_config") | Dictionary | | | | Custom structured config added under router_bgp.vrfs.[name=] for eos_cli_config_gen. | | [        additional_route_targets](## "<network_services_keys.name>.[].vrfs.[].additional_route_targets") | List, items: Dictionary | | | | Configuration of extra route-targets for this VRF. Useful for route-leaking or gateway between address families. | | [          - type](## "<network_services_keys.name>.[].vrfs.[].additional_route_targets.[].type") | String | | | Valid Values:
- import
- export | | | [            address_family](## "<network_services_keys.name>.[].vrfs.[].additional_route_targets.[].address_family") | String | | | | | diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-svis-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-svis-settings.md index e6c39bfc704..8ba81613f2f 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-svis-settings.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-svis-settings.md @@ -42,10 +42,10 @@ | [                vxlan](## "<network_services_keys.name>.[].vrfs.[].svis.[].nodes.[].vxlan") | Boolean | | `True` | | Extend this SVI over VXLAN. | | [                mtu](## "<network_services_keys.name>.[].vrfs.[].svis.[].nodes.[].mtu") | Integer | | | | Interface MTU. | | [                bgp](## "<network_services_keys.name>.[].vrfs.[].svis.[].nodes.[].bgp") | Dictionary | | | | | - | [                  structured_config](## "<network_services_keys.name>.[].vrfs.[].svis.[].nodes.[].bgp.structured_config") | Dictionary | | | | Structured configuration and EOS CLI commands rendered on router_bgp.vlans.
This configuration will not be applied to vlan aware bundles
| + | [                  structured_config](## "<network_services_keys.name>.[].vrfs.[].svis.[].nodes.[].bgp.structured_config") | Dictionary | | | | Structured configuration and EOS CLI commands rendered on router_bgp.vlans.[id=]
This configuration will not be applied to vlan aware bundles
| | [                  raw_eos_cli](## "<network_services_keys.name>.[].vrfs.[].svis.[].nodes.[].bgp.raw_eos_cli") | String | | | | EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration.
| | [                raw_eos_cli](## "<network_services_keys.name>.[].vrfs.[].svis.[].nodes.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the VLAN interface in the final EOS configuration.
| - | [                structured_config](## "<network_services_keys.name>.[].vrfs.[].svis.[].nodes.[].structured_config") | Dictionary | | | | Custom structured config added under vlan_interfaces. for eos_cli_config_gen. | + | [                structured_config](## "<network_services_keys.name>.[].vrfs.[].svis.[].nodes.[].structured_config") | Dictionary | | | | Custom structured config added under vlan_interfaces.[name=] for eos_cli_config_gen.
| | [            enabled](## "<network_services_keys.name>.[].vrfs.[].svis.[].enabled") | Boolean | | | | Enable or disable interface | | [            description](## "<network_services_keys.name>.[].vrfs.[].svis.[].description") | String | | | | SVI description. By default set to VLAN name.
| | [            ip_address](## "<network_services_keys.name>.[].vrfs.[].svis.[].ip_address") | String | | | | IPv4_address/Mask. Usually set under "nodes" to have unique IPv4 addresses per node. | @@ -75,10 +75,10 @@ | [            vxlan](## "<network_services_keys.name>.[].vrfs.[].svis.[].vxlan") | Boolean | | `True` | | Extend this SVI over VXLAN. | | [            mtu](## "<network_services_keys.name>.[].vrfs.[].svis.[].mtu") | Integer | | | | Interface MTU. | | [            bgp](## "<network_services_keys.name>.[].vrfs.[].svis.[].bgp") | Dictionary | | | | | - | [              structured_config](## "<network_services_keys.name>.[].vrfs.[].svis.[].bgp.structured_config") | Dictionary | | | | Structured configuration and EOS CLI commands rendered on router_bgp.vlans.
This configuration will not be applied to vlan aware bundles
| + | [              structured_config](## "<network_services_keys.name>.[].vrfs.[].svis.[].bgp.structured_config") | Dictionary | | | | Structured configuration and EOS CLI commands rendered on router_bgp.vlans.[id=]
This configuration will not be applied to vlan aware bundles
| | [              raw_eos_cli](## "<network_services_keys.name>.[].vrfs.[].svis.[].bgp.raw_eos_cli") | String | | | | EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration.
| | [            raw_eos_cli](## "<network_services_keys.name>.[].vrfs.[].svis.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the VLAN interface in the final EOS configuration.
| - | [            structured_config](## "<network_services_keys.name>.[].vrfs.[].svis.[].structured_config") | Dictionary | | | | Custom structured config added under vlan_interfaces. for eos_cli_config_gen. | + | [            structured_config](## "<network_services_keys.name>.[].vrfs.[].svis.[].structured_config") | Dictionary | | | | Custom structured config added under vlan_interfaces.[name=] for eos_cli_config_gen.
| === "YAML" diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l2-mlag-configuration.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l2-mlag-configuration.md index c4e6b475d1c..f9388c242ef 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l2-mlag-configuration.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l2-mlag-configuration.md @@ -4,9 +4,9 @@ | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [<node_type_keys.key>](## "<node_type_keys.key>") | Dictionary | | | | | | [  defaults](## "<node_type_keys.key>.defaults") | Dictionary | | | | Define variables for all nodes of this type. | - | [    mlag_port_channel_structured_config](## "<node_type_keys.key>.defaults.mlag_port_channel_structured_config") | Dictionary | | | | Custom structured config applied to MLAG peer link port-channel id.
Added under port_channel_interfaces. for eos_cli_config_gen.
Overrides the settings on the port-channel interface level.
"mlag_port_channel_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| - | [    mlag_peer_vlan_structured_config](## "<node_type_keys.key>.defaults.mlag_peer_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG Peer Link (control link) SVI interface id.
Added under vlan_interfaces. for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| - | [    mlag_peer_l3_vlan_structured_config](## "<node_type_keys.key>.defaults.mlag_peer_l3_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG underlay L3 peering SVI interface id.
Added under vlan_interfaces. for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_l3_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [    mlag_port_channel_structured_config](## "<node_type_keys.key>.defaults.mlag_port_channel_structured_config") | Dictionary | | | | Custom structured config applied to MLAG peer link port-channel id.
Added under port_channel_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the port-channel interface level.
"mlag_port_channel_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [    mlag_peer_vlan_structured_config](## "<node_type_keys.key>.defaults.mlag_peer_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG Peer Link (control link) SVI interface id.
Added under vlan_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [    mlag_peer_l3_vlan_structured_config](## "<node_type_keys.key>.defaults.mlag_peer_l3_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG underlay L3 peering SVI interface id.
Added under vlan_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_l3_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| | [    mlag](## "<node_type_keys.key>.defaults.mlag") | Boolean | | `True` | | Enable / Disable auto MLAG, when two nodes are defined in node group. | | [    mlag_dual_primary_detection](## "<node_type_keys.key>.defaults.mlag_dual_primary_detection") | Boolean | | `False` | | Enable / Disable MLAG dual primary detection. | | [    mlag_ibgp_origin_incomplete](## "<node_type_keys.key>.defaults.mlag_ibgp_origin_incomplete") | Boolean | | `True` | | Set origin of routes received from MLAG iBGP peer to incomplete.
The purpose is to optimize routing for leaf loopbacks from spine perspective and
avoid suboptimal routing via peerlink for control plane traffic.
| @@ -28,9 +28,9 @@ | [    - group](## "<node_type_keys.key>.node_groups.[].group") | String | Required, Unique | | | The Node Group Name is used for MLAG domain unless set with 'mlag_domain_id'.
The Node Group Name is also used for peer description on downstream switches' uplinks.
| | [      nodes](## "<node_type_keys.key>.node_groups.[].nodes") | List, items: Dictionary | | | | Define variables per node. | | [        - name](## "<node_type_keys.key>.node_groups.[].nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | - | [          mlag_port_channel_structured_config](## "<node_type_keys.key>.node_groups.[].nodes.[].mlag_port_channel_structured_config") | Dictionary | | | | Custom structured config applied to MLAG peer link port-channel id.
Added under port_channel_interfaces. for eos_cli_config_gen.
Overrides the settings on the port-channel interface level.
"mlag_port_channel_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| - | [          mlag_peer_vlan_structured_config](## "<node_type_keys.key>.node_groups.[].nodes.[].mlag_peer_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG Peer Link (control link) SVI interface id.
Added under vlan_interfaces. for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| - | [          mlag_peer_l3_vlan_structured_config](## "<node_type_keys.key>.node_groups.[].nodes.[].mlag_peer_l3_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG underlay L3 peering SVI interface id.
Added under vlan_interfaces. for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_l3_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [          mlag_port_channel_structured_config](## "<node_type_keys.key>.node_groups.[].nodes.[].mlag_port_channel_structured_config") | Dictionary | | | | Custom structured config applied to MLAG peer link port-channel id.
Added under port_channel_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the port-channel interface level.
"mlag_port_channel_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [          mlag_peer_vlan_structured_config](## "<node_type_keys.key>.node_groups.[].nodes.[].mlag_peer_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG Peer Link (control link) SVI interface id.
Added under vlan_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [          mlag_peer_l3_vlan_structured_config](## "<node_type_keys.key>.node_groups.[].nodes.[].mlag_peer_l3_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG underlay L3 peering SVI interface id.
Added under vlan_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_l3_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| | [          mlag](## "<node_type_keys.key>.node_groups.[].nodes.[].mlag") | Boolean | | `True` | | Enable / Disable auto MLAG, when two nodes are defined in node group. | | [          mlag_dual_primary_detection](## "<node_type_keys.key>.node_groups.[].nodes.[].mlag_dual_primary_detection") | Boolean | | `False` | | Enable / Disable MLAG dual primary detection. | | [          mlag_ibgp_origin_incomplete](## "<node_type_keys.key>.node_groups.[].nodes.[].mlag_ibgp_origin_incomplete") | Boolean | | `True` | | Set origin of routes received from MLAG iBGP peer to incomplete.
The purpose is to optimize routing for leaf loopbacks from spine perspective and
avoid suboptimal routing via peerlink for control plane traffic.
| @@ -48,9 +48,9 @@ | [          spanning_tree_priority](## "<node_type_keys.key>.node_groups.[].nodes.[].spanning_tree_priority") | Integer | | `32768` | | | | [          spanning_tree_root_super](## "<node_type_keys.key>.node_groups.[].nodes.[].spanning_tree_root_super") | Boolean | | `False` | | | | [          virtual_router_mac_address](## "<node_type_keys.key>.node_groups.[].nodes.[].virtual_router_mac_address") | String | | | Format: mac | Virtual router mac address for anycast gateway. | - | [      mlag_port_channel_structured_config](## "<node_type_keys.key>.node_groups.[].mlag_port_channel_structured_config") | Dictionary | | | | Custom structured config applied to MLAG peer link port-channel id.
Added under port_channel_interfaces. for eos_cli_config_gen.
Overrides the settings on the port-channel interface level.
"mlag_port_channel_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| - | [      mlag_peer_vlan_structured_config](## "<node_type_keys.key>.node_groups.[].mlag_peer_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG Peer Link (control link) SVI interface id.
Added under vlan_interfaces. for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| - | [      mlag_peer_l3_vlan_structured_config](## "<node_type_keys.key>.node_groups.[].mlag_peer_l3_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG underlay L3 peering SVI interface id.
Added under vlan_interfaces. for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_l3_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [      mlag_port_channel_structured_config](## "<node_type_keys.key>.node_groups.[].mlag_port_channel_structured_config") | Dictionary | | | | Custom structured config applied to MLAG peer link port-channel id.
Added under port_channel_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the port-channel interface level.
"mlag_port_channel_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [      mlag_peer_vlan_structured_config](## "<node_type_keys.key>.node_groups.[].mlag_peer_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG Peer Link (control link) SVI interface id.
Added under vlan_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [      mlag_peer_l3_vlan_structured_config](## "<node_type_keys.key>.node_groups.[].mlag_peer_l3_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG underlay L3 peering SVI interface id.
Added under vlan_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_l3_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| | [      mlag](## "<node_type_keys.key>.node_groups.[].mlag") | Boolean | | `True` | | Enable / Disable auto MLAG, when two nodes are defined in node group. | | [      mlag_dual_primary_detection](## "<node_type_keys.key>.node_groups.[].mlag_dual_primary_detection") | Boolean | | `False` | | Enable / Disable MLAG dual primary detection. | | [      mlag_ibgp_origin_incomplete](## "<node_type_keys.key>.node_groups.[].mlag_ibgp_origin_incomplete") | Boolean | | `True` | | Set origin of routes received from MLAG iBGP peer to incomplete.
The purpose is to optimize routing for leaf loopbacks from spine perspective and
avoid suboptimal routing via peerlink for control plane traffic.
| @@ -70,9 +70,9 @@ | [      virtual_router_mac_address](## "<node_type_keys.key>.node_groups.[].virtual_router_mac_address") | String | | | Format: mac | Virtual router mac address for anycast gateway. | | [  nodes](## "<node_type_keys.key>.nodes") | List, items: Dictionary | | | | Define variables per node. | | [    - name](## "<node_type_keys.key>.nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | - | [      mlag_port_channel_structured_config](## "<node_type_keys.key>.nodes.[].mlag_port_channel_structured_config") | Dictionary | | | | Custom structured config applied to MLAG peer link port-channel id.
Added under port_channel_interfaces. for eos_cli_config_gen.
Overrides the settings on the port-channel interface level.
"mlag_port_channel_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| - | [      mlag_peer_vlan_structured_config](## "<node_type_keys.key>.nodes.[].mlag_peer_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG Peer Link (control link) SVI interface id.
Added under vlan_interfaces. for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| - | [      mlag_peer_l3_vlan_structured_config](## "<node_type_keys.key>.nodes.[].mlag_peer_l3_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG underlay L3 peering SVI interface id.
Added under vlan_interfaces. for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_l3_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [      mlag_port_channel_structured_config](## "<node_type_keys.key>.nodes.[].mlag_port_channel_structured_config") | Dictionary | | | | Custom structured config applied to MLAG peer link port-channel id.
Added under port_channel_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the port-channel interface level.
"mlag_port_channel_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [      mlag_peer_vlan_structured_config](## "<node_type_keys.key>.nodes.[].mlag_peer_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG Peer Link (control link) SVI interface id.
Added under vlan_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [      mlag_peer_l3_vlan_structured_config](## "<node_type_keys.key>.nodes.[].mlag_peer_l3_vlan_structured_config") | Dictionary | | | | Custom structured config applied to MLAG underlay L3 peering SVI interface id.
Added under vlan_interfaces.[name=] for eos_cli_config_gen.
Overrides the settings on the vlan interface level.
"mlag_peer_l3_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| | [      mlag](## "<node_type_keys.key>.nodes.[].mlag") | Boolean | | `True` | | Enable / Disable auto MLAG, when two nodes are defined in node group. | | [      mlag_dual_primary_detection](## "<node_type_keys.key>.nodes.[].mlag_dual_primary_detection") | Boolean | | `False` | | Enable / Disable MLAG dual primary detection. | | [      mlag_ibgp_origin_incomplete](## "<node_type_keys.key>.nodes.[].mlag_ibgp_origin_incomplete") | Boolean | | `True` | | Set origin of routes received from MLAG iBGP peer to incomplete.
The purpose is to optimize routing for leaf loopbacks from spine perspective and
avoid suboptimal routing via peerlink for control plane traffic.
| diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-uplink-configuration.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-uplink-configuration.md index b7a0af6abb0..41d9d85f23a 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-uplink-configuration.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-uplink-configuration.md @@ -26,7 +26,7 @@ | [      enable](## "<node_type_keys.key>.defaults.uplink_ptp.enable") | Boolean | | `False` | | | | [    uplink_macsec](## "<node_type_keys.key>.defaults.uplink_macsec") | Dictionary | | | | Enable MacSec on all uplinks. | | [      profile](## "<node_type_keys.key>.defaults.uplink_macsec.profile") | String | | | | | - | [    uplink_structured_config](## "<node_type_keys.key>.defaults.uplink_structured_config") | Dictionary | | | | Custom structured config applied to "uplink_interfaces", and "uplink_switch_interfaces".
When uplink_type == "p2p", custom structured config added under ethernet_interfaces. for eos_cli_config_gen overrides the settings on the ethernet interface level.
When uplink_type == "port-channel", custom structured config added under port_channel_interfaces. for eos_cli_config_gen overrides the settings on the port-channel interface level.
"uplink_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [    uplink_structured_config](## "<node_type_keys.key>.defaults.uplink_structured_config") | Dictionary | | | | Custom structured config applied to "uplink_interfaces", and "uplink_switch_interfaces".
When uplink_type == "p2p", custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen overrides the settings on the ethernet interface level.
When uplink_type == "port-channel", custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen overrides the settings on the port-channel interface level.
"uplink_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.
| | [    short_esi](## "<node_type_keys.key>.defaults.short_esi") | String | | | | short_esi only valid for l2leaf devices using port-channel uplink.
Setting short_esi to "auto" generates the short_esi automatically using a hash of configuration elements.
< 0000:0000:0000 | auto >.
| | [  node_groups](## "<node_type_keys.key>.node_groups") | List, items: Dictionary | | | | Define variables related to all nodes part of this group. | | [    - group](## "<node_type_keys.key>.node_groups.[].group") | String | Required, Unique | | | The Node Group Name is used for MLAG domain unless set with 'mlag_domain_id'.
The Node Group Name is also used for peer description on downstream switches' uplinks.
| @@ -54,7 +54,7 @@ | [            enable](## "<node_type_keys.key>.node_groups.[].nodes.[].uplink_ptp.enable") | Boolean | | `False` | | | | [          uplink_macsec](## "<node_type_keys.key>.node_groups.[].nodes.[].uplink_macsec") | Dictionary | | | | Enable MacSec on all uplinks. | | [            profile](## "<node_type_keys.key>.node_groups.[].nodes.[].uplink_macsec.profile") | String | | | | | - | [          uplink_structured_config](## "<node_type_keys.key>.node_groups.[].nodes.[].uplink_structured_config") | Dictionary | | | | Custom structured config applied to "uplink_interfaces", and "uplink_switch_interfaces".
When uplink_type == "p2p", custom structured config added under ethernet_interfaces. for eos_cli_config_gen overrides the settings on the ethernet interface level.
When uplink_type == "port-channel", custom structured config added under port_channel_interfaces. for eos_cli_config_gen overrides the settings on the port-channel interface level.
"uplink_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [          uplink_structured_config](## "<node_type_keys.key>.node_groups.[].nodes.[].uplink_structured_config") | Dictionary | | | | Custom structured config applied to "uplink_interfaces", and "uplink_switch_interfaces".
When uplink_type == "p2p", custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen overrides the settings on the ethernet interface level.
When uplink_type == "port-channel", custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen overrides the settings on the port-channel interface level.
"uplink_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.
| | [          short_esi](## "<node_type_keys.key>.node_groups.[].nodes.[].short_esi") | String | | | | short_esi only valid for l2leaf devices using port-channel uplink.
Setting short_esi to "auto" generates the short_esi automatically using a hash of configuration elements.
< 0000:0000:0000 | auto >.
| | [      link_tracking](## "<node_type_keys.key>.node_groups.[].link_tracking") | Dictionary | | | | This configures the Link Tracking Group on a switch as well as adds the p2p-uplinks of the switch as the upstream interfaces.
Useful in EVPN multhoming designs.
| | [        enabled](## "<node_type_keys.key>.node_groups.[].link_tracking.enabled") | Boolean | | `False` | | | @@ -78,7 +78,7 @@ | [        enable](## "<node_type_keys.key>.node_groups.[].uplink_ptp.enable") | Boolean | | `False` | | | | [      uplink_macsec](## "<node_type_keys.key>.node_groups.[].uplink_macsec") | Dictionary | | | | Enable MacSec on all uplinks. | | [        profile](## "<node_type_keys.key>.node_groups.[].uplink_macsec.profile") | String | | | | | - | [      uplink_structured_config](## "<node_type_keys.key>.node_groups.[].uplink_structured_config") | Dictionary | | | | Custom structured config applied to "uplink_interfaces", and "uplink_switch_interfaces".
When uplink_type == "p2p", custom structured config added under ethernet_interfaces. for eos_cli_config_gen overrides the settings on the ethernet interface level.
When uplink_type == "port-channel", custom structured config added under port_channel_interfaces. for eos_cli_config_gen overrides the settings on the port-channel interface level.
"uplink_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [      uplink_structured_config](## "<node_type_keys.key>.node_groups.[].uplink_structured_config") | Dictionary | | | | Custom structured config applied to "uplink_interfaces", and "uplink_switch_interfaces".
When uplink_type == "p2p", custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen overrides the settings on the ethernet interface level.
When uplink_type == "port-channel", custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen overrides the settings on the port-channel interface level.
"uplink_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.
| | [      short_esi](## "<node_type_keys.key>.node_groups.[].short_esi") | String | | | | short_esi only valid for l2leaf devices using port-channel uplink.
Setting short_esi to "auto" generates the short_esi automatically using a hash of configuration elements.
< 0000:0000:0000 | auto >.
| | [  nodes](## "<node_type_keys.key>.nodes") | List, items: Dictionary | | | | Define variables per node. | | [    - name](## "<node_type_keys.key>.nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | @@ -104,7 +104,7 @@ | [        enable](## "<node_type_keys.key>.nodes.[].uplink_ptp.enable") | Boolean | | `False` | | | | [      uplink_macsec](## "<node_type_keys.key>.nodes.[].uplink_macsec") | Dictionary | | | | Enable MacSec on all uplinks. | | [        profile](## "<node_type_keys.key>.nodes.[].uplink_macsec.profile") | String | | | | | - | [      uplink_structured_config](## "<node_type_keys.key>.nodes.[].uplink_structured_config") | Dictionary | | | | Custom structured config applied to "uplink_interfaces", and "uplink_switch_interfaces".
When uplink_type == "p2p", custom structured config added under ethernet_interfaces. for eos_cli_config_gen overrides the settings on the ethernet interface level.
When uplink_type == "port-channel", custom structured config added under port_channel_interfaces. for eos_cli_config_gen overrides the settings on the port-channel interface level.
"uplink_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
| + | [      uplink_structured_config](## "<node_type_keys.key>.nodes.[].uplink_structured_config") | Dictionary | | | | Custom structured config applied to "uplink_interfaces", and "uplink_switch_interfaces".
When uplink_type == "p2p", custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen overrides the settings on the ethernet interface level.
When uplink_type == "port-channel", custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen overrides the settings on the port-channel interface level.
"uplink_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level.
Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.
| | [      short_esi](## "<node_type_keys.key>.nodes.[].short_esi") | String | | | | short_esi only valid for l2leaf devices using port-channel uplink.
Setting short_esi to "auto" generates the short_esi automatically using a hash of configuration elements.
< 0000:0000:0000 | auto >.
| === "YAML" diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md index 35b18f07bfd..d61415cfcf3 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md @@ -130,9 +130,9 @@ | [          encapsulation_vlan](## "port_profiles.[].port_channel.subinterfaces.[].encapsulation_vlan") | Dictionary | | | | Client VLAN ID encapsulation.
Default is subinterface number.
| | [            client_dot1q](## "port_profiles.[].port_channel.subinterfaces.[].encapsulation_vlan.client_dot1q") | Integer | | | Min: 1
Max: 4094 | | | [      raw_eos_cli](## "port_profiles.[].port_channel.raw_eos_cli") | String | | | | EOS CLI rendered directly on the port-channel interface in the final EOS configuration. | - | [      structured_config](## "port_profiles.[].port_channel.structured_config") | Dictionary | | | | Custom structured config added under port_channel_interfaces. for eos_cli_config_gen. | + | [      structured_config](## "port_profiles.[].port_channel.structured_config") | Dictionary | | | | Custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen. | | [    raw_eos_cli](## "port_profiles.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the ethernet interface in the final EOS configuration. | - | [    structured_config](## "port_profiles.[].structured_config") | Dictionary | | | | Custom structured config added under ethernet_interfaces. for eos_cli_config_gen. | + | [    structured_config](## "port_profiles.[].structured_config") | Dictionary | | | | Custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen. | === "YAML" diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/role-input-validation.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/role-input-validation.md index ec57dc0a449..e7dde79a21d 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/role-input-validation.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/role-input-validation.md @@ -4,10 +4,44 @@ | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [avd_data_conversion_mode](## "avd_data_conversion_mode") | String | | `debug` | Valid Values:
- disabled
- error
- warning
- info
- debug
- quiet | Conversion Mode for AVD input data conversion.
Input data conversion will perform type conversion of input variables as defined in the schema.
The type conversion is intended to help the user to identify minor issues with the input data, while still allowing the data to be validated.
During conversion, messages will generated with information about the host(s) and key(s) which required conversion.
"disabled" means that conversion will not run - avoid this since conversion is also handling data deprecation and upgrade.
"error" will produce error messages and fail the task.
"warning" will produce warning messages.
"info" will produce regular log messages.
"debug" will produce hidden debug messages viewable with -v.
"quiet" will not produce any messages | | [avd_data_validation_mode](## "avd_data_validation_mode") | String | | `warning` | Valid Values:
- disabled
- error
- warning
- info
- debug | Validation Mode for AVD input data validation.
Input data validation will validate the input variables according to the schema.
During validation, messages will generated with information about the host(s) and key(s) which failed validation.
"disabled" means that validation will not run.
"error" will produce error messages and fail the task.
"warning" will produce warning messages.
"info" will produce regular log messages.
"debug" will produce hidden debug messages viewable with -v. | + | [<network_services_keys.name>](## "<network_services_keys.name>") | List, items: Dictionary | | | | | + | [  - name](## "<network_services_keys.name>.[].name") | String | Required, Unique | | | Specify a tenant name.
Tenant provide a construct to group L3 VRFs and L2 VLANs.
Networks services can be filtered by tenant name.
| + | [    vrfs](## "<network_services_keys.name>.[].vrfs") | List, items: Dictionary | | | | VRFs will only be configured on a node if any of the underlying objects like `svis` or `l3_interfaces` apply to the node.

It is recommended to only define a VRF in one Tenant. If the same VRF name is used across multiple tenants and those tenants
are accepted by `filter.tenants` on the node, any object set under the duplicate VRFs must either be unique or be an exact match.

VRF "default" is partially supported under network-services. Currently the supported options for "default" vrf are route-target,
route-distinguisher settings, structured_config, raw_eos_cli in bgp and SVIs are the only supported interface type.
Vlan-aware-bundles are supported as well inside default vrf. OSPF is not supported currently.
| + | [      - name](## "<network_services_keys.name>.[].vrfs.[].name") | String | Required, Unique | | | | + | [        structured_config](## "<network_services_keys.name>.[].vrfs.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | + | [<node_type_keys.key>](## "<node_type_keys.key>") | Dictionary | | | | | + | [  defaults](## "<node_type_keys.key>.defaults") | Dictionary | | | | Define variables for all nodes of this type. | + | [    structured_config](## "<node_type_keys.key>.defaults.structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | + | [  node_groups](## "<node_type_keys.key>.node_groups") | List, items: Dictionary | | | | Define variables related to all nodes part of this group. | + | [    - group](## "<node_type_keys.key>.node_groups.[].group") | String | Required, Unique | | | The Node Group Name is used for MLAG domain unless set with 'mlag_domain_id'.
The Node Group Name is also used for peer description on downstream switches' uplinks.
| + | [      nodes](## "<node_type_keys.key>.node_groups.[].nodes") | List, items: Dictionary | | | | Define variables per node. | + | [        - name](## "<node_type_keys.key>.node_groups.[].nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | + | [          structured_config](## "<node_type_keys.key>.node_groups.[].nodes.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | + | [      structured_config](## "<node_type_keys.key>.node_groups.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | + | [  nodes](## "<node_type_keys.key>.nodes") | List, items: Dictionary | | | | Define variables per node. | + | [    - name](## "<node_type_keys.key>.nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | + | [      structured_config](## "<node_type_keys.key>.nodes.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | === "YAML" ```yaml avd_data_conversion_mode: avd_data_validation_mode: + : + - name: + vrfs: + - name: + structured_config: + : + defaults: + structured_config: + node_groups: + - group: + nodes: + - name: + structured_config: + structured_config: + nodes: + - name: + structured_config: ``` diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/svi-profiles.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/svi-profiles.md index 06789966b13..81323c1c7e8 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/svi-profiles.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/svi-profiles.md @@ -37,10 +37,10 @@ | [        vxlan](## "svi_profiles.[].nodes.[].vxlan") | Boolean | | `True` | | Extend this SVI over VXLAN. | | [        mtu](## "svi_profiles.[].nodes.[].mtu") | Integer | | | | Interface MTU. | | [        bgp](## "svi_profiles.[].nodes.[].bgp") | Dictionary | | | | | - | [          structured_config](## "svi_profiles.[].nodes.[].bgp.structured_config") | Dictionary | | | | Structured configuration and EOS CLI commands rendered on router_bgp.vlans.
This configuration will not be applied to vlan aware bundles
| + | [          structured_config](## "svi_profiles.[].nodes.[].bgp.structured_config") | Dictionary | | | | Structured configuration and EOS CLI commands rendered on router_bgp.vlans.[id=]
This configuration will not be applied to vlan aware bundles
| | [          raw_eos_cli](## "svi_profiles.[].nodes.[].bgp.raw_eos_cli") | String | | | | EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration.
| | [        raw_eos_cli](## "svi_profiles.[].nodes.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the VLAN interface in the final EOS configuration.
| - | [        structured_config](## "svi_profiles.[].nodes.[].structured_config") | Dictionary | | | | Custom structured config added under vlan_interfaces. for eos_cli_config_gen. | + | [        structured_config](## "svi_profiles.[].nodes.[].structured_config") | Dictionary | | | | Custom structured config added under vlan_interfaces.[name=] for eos_cli_config_gen.
| | [    name](## "svi_profiles.[].name") | String | | | | VLAN name | | [    enabled](## "svi_profiles.[].enabled") | Boolean | | | | Enable or disable interface | | [    description](## "svi_profiles.[].description") | String | | | | SVI description. By default set to VLAN name.
| @@ -71,10 +71,10 @@ | [    vxlan](## "svi_profiles.[].vxlan") | Boolean | | `True` | | Extend this SVI over VXLAN. | | [    mtu](## "svi_profiles.[].mtu") | Integer | | | | Interface MTU. | | [    bgp](## "svi_profiles.[].bgp") | Dictionary | | | | | - | [      structured_config](## "svi_profiles.[].bgp.structured_config") | Dictionary | | | | Structured configuration and EOS CLI commands rendered on router_bgp.vlans.
This configuration will not be applied to vlan aware bundles
| + | [      structured_config](## "svi_profiles.[].bgp.structured_config") | Dictionary | | | | Structured configuration and EOS CLI commands rendered on router_bgp.vlans.[id=]
This configuration will not be applied to vlan aware bundles
| | [      raw_eos_cli](## "svi_profiles.[].bgp.raw_eos_cli") | String | | | | EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration.
| | [    raw_eos_cli](## "svi_profiles.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the VLAN interface in the final EOS configuration.
| - | [    structured_config](## "svi_profiles.[].structured_config") | Dictionary | | | | Custom structured config added under vlan_interfaces. for eos_cli_config_gen. | + | [    structured_config](## "svi_profiles.[].structured_config") | Dictionary | | | | Custom structured config added under vlan_interfaces.[name=] for eos_cli_config_gen.
| === "YAML" diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json index cecb9ffdf29..a18ff0d06e3 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json @@ -184,7 +184,278 @@ }, "structured_config": { "type": "object", - "description": "Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen.", + "description": "Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen.", + "properties": { + "name": { + "type": "string", + "description": "Peer-group name", + "title": "Name" + }, + "type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Type" + }, + "remote_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Remote As" + }, + "local_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Local As" + }, + "description": { + "type": "string", + "title": "Description" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "as_path": { + "type": "object", + "description": "BGP AS-PATH options", + "properties": { + "remote_as_replace_out": { + "type": "boolean", + "description": "Replace AS number with local AS number", + "title": "Remote As Replace Out" + }, + "prepend_own_disabled": { + "type": "boolean", + "description": "Disable prepending own AS number to AS path", + "title": "Prepend Own Disabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "As Path" + }, + "remove_private_as": { + "type": "object", + "description": "Remove private AS numbers in outbound AS path", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As" + }, + "remove_private_as_ingress": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As Ingress" + }, + "peer_filter": { + "type": "string", + "description": "Peer-filter name\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "Peer Filter" + }, + "next_hop_unchanged": { + "type": "boolean", + "title": "Next Hop Unchanged" + }, + "update_source": { + "type": "string", + "description": "IP address or interface name", + "title": "Update Source" + }, + "route_reflector_client": { + "type": "boolean", + "title": "Route Reflector Client" + }, + "bfd": { + "type": "boolean", + "title": "BFD" + }, + "ebgp_multihop": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "description": "Time-to-live in range of hops", + "title": "Ebgp Multihop" + }, + "next_hop_self": { + "type": "boolean", + "title": "Next Hop Self" + }, + "password": { + "type": "string", + "title": "Password" + }, + "passive": { + "type": "boolean", + "title": "Passive" + }, + "default_originate": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "route_map": { + "type": "string", + "description": "Route-map name", + "title": "Route Map" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Default Originate" + }, + "send_community": { + "type": "string", + "description": "'all' or a combination of 'standard', 'extended', 'large' and 'link-bandwidth (w/options)'", + "title": "Send Community" + }, + "maximum_routes": { + "type": "integer", + "description": "Maximum number of routes (0 means unlimited)", + "minimum": 0, + "maximum": 4294967294, + "title": "Maximum Routes" + }, + "maximum_routes_warning_limit": { + "type": "string", + "description": "Maximum number of routes after which a warning is issued (0 means never warn) or\nPercentage of maximum number of routes at which to warn (\"<1-100> percent\")\n", + "title": "Maximum Routes Warning Limit" + }, + "maximum_routes_warning_only": { + "type": "boolean", + "title": "Maximum Routes Warning Only" + }, + "link_bandwidth": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "default": { + "type": "string", + "description": "nn.nn(K|M|G) link speed in bits/second", + "title": "Default" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Bandwidth" + }, + "allowas_in": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "times": { + "type": "integer", + "description": "Number of local ASNs allowed in a BGP update", + "minimum": 1, + "maximum": 10, + "title": "Times" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Allowas In" + }, + "weight": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "Weight" + }, + "timers": { + "type": "string", + "description": "BGP Keepalive and Hold Timer values in seconds as string \"<0-3600> <0-3600>\"", + "title": "Timers" + }, + "rib_in_pre_policy_retain": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Rib In Pre Policy Retain" + }, + "route_map_in": { + "type": "string", + "description": "Inbound route-map name", + "title": "Route Map In" + }, + "route_map_out": { + "type": "string", + "description": "Outbound route-map name", + "title": "Route Map Out" + }, + "bgp_listen_range_prefix": { + "type": "string", + "description": "IP prefix range\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "BGP Listen Range Prefix" + }, + "session_tracker": { + "type": "string", + "title": "Session Tracker" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, "title": "Structured Config" } }, @@ -215,131 +486,278 @@ }, "structured_config": { "type": "object", - "description": "Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen.", - "title": "Structured Config" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MLAG IPv4 Underlay Peer" - }, - "evpn_overlay_peers": { - "type": "object", - "properties": { - "name": { - "type": "string", - "default": "EVPN-OVERLAY-PEERS", - "description": "Name of peer group.", - "title": "Name" - }, - "password": { - "type": "string", - "description": "Type 7 encrypted password.", - "title": "Password" - }, - "bfd": { - "type": "boolean", - "default": true, - "title": "BFD" - }, - "structured_config": { - "type": "object", - "description": "Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen.", - "title": "Structured Config" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EVPN Overlay Peers" - }, - "evpn_overlay_core": { - "type": "object", - "properties": { - "name": { - "type": "string", - "default": "EVPN-OVERLAY-CORE", - "description": "Name of peer group.", - "title": "Name" - }, - "password": { - "type": "string", - "description": "Type 7 encrypted password.", - "title": "Password" - }, - "bfd": { - "type": "boolean", - "default": true, - "title": "BFD" - }, - "structured_config": { - "type": "object", - "description": "Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen.", - "title": "Structured Config" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EVPN Overlay Core" - }, - "mpls_overlay_peers": { - "type": "object", - "properties": { - "name": { - "type": "string", - "default": "MPLS-OVERLAY-PEERS", - "description": "Name of peer group.", - "title": "Name" - }, - "password": { - "type": "string", - "description": "Type 7 encrypted password.", - "title": "Password" - }, - "bfd": { - "type": "boolean", - "default": true, - "title": "BFD" - }, - "structured_config": { - "type": "object", - "description": "Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen.", - "title": "Structured Config" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MPLS Overlay Peers" - }, - "rr_overlay_peers": { - "type": "object", - "properties": { - "name": { - "type": "string", - "default": "RR-OVERLAY-PEERS", - "description": "Name of peer group.", - "title": "Name" - }, - "password": { - "type": "string", - "description": "Type 7 encrypted password.", - "title": "Password" - }, - "bfd": { - "type": "boolean", - "default": true, - "title": "BFD" - }, - "structured_config": { - "type": "object", - "description": "Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen.", + "description": "Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen.", + "properties": { + "name": { + "type": "string", + "description": "Peer-group name", + "title": "Name" + }, + "type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Type" + }, + "remote_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Remote As" + }, + "local_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Local As" + }, + "description": { + "type": "string", + "title": "Description" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "as_path": { + "type": "object", + "description": "BGP AS-PATH options", + "properties": { + "remote_as_replace_out": { + "type": "boolean", + "description": "Replace AS number with local AS number", + "title": "Remote As Replace Out" + }, + "prepend_own_disabled": { + "type": "boolean", + "description": "Disable prepending own AS number to AS path", + "title": "Prepend Own Disabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "As Path" + }, + "remove_private_as": { + "type": "object", + "description": "Remove private AS numbers in outbound AS path", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As" + }, + "remove_private_as_ingress": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As Ingress" + }, + "peer_filter": { + "type": "string", + "description": "Peer-filter name\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "Peer Filter" + }, + "next_hop_unchanged": { + "type": "boolean", + "title": "Next Hop Unchanged" + }, + "update_source": { + "type": "string", + "description": "IP address or interface name", + "title": "Update Source" + }, + "route_reflector_client": { + "type": "boolean", + "title": "Route Reflector Client" + }, + "bfd": { + "type": "boolean", + "title": "BFD" + }, + "ebgp_multihop": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "description": "Time-to-live in range of hops", + "title": "Ebgp Multihop" + }, + "next_hop_self": { + "type": "boolean", + "title": "Next Hop Self" + }, + "password": { + "type": "string", + "title": "Password" + }, + "passive": { + "type": "boolean", + "title": "Passive" + }, + "default_originate": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "route_map": { + "type": "string", + "description": "Route-map name", + "title": "Route Map" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Default Originate" + }, + "send_community": { + "type": "string", + "description": "'all' or a combination of 'standard', 'extended', 'large' and 'link-bandwidth (w/options)'", + "title": "Send Community" + }, + "maximum_routes": { + "type": "integer", + "description": "Maximum number of routes (0 means unlimited)", + "minimum": 0, + "maximum": 4294967294, + "title": "Maximum Routes" + }, + "maximum_routes_warning_limit": { + "type": "string", + "description": "Maximum number of routes after which a warning is issued (0 means never warn) or\nPercentage of maximum number of routes at which to warn (\"<1-100> percent\")\n", + "title": "Maximum Routes Warning Limit" + }, + "maximum_routes_warning_only": { + "type": "boolean", + "title": "Maximum Routes Warning Only" + }, + "link_bandwidth": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "default": { + "type": "string", + "description": "nn.nn(K|M|G) link speed in bits/second", + "title": "Default" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Bandwidth" + }, + "allowas_in": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "times": { + "type": "integer", + "description": "Number of local ASNs allowed in a BGP update", + "minimum": 1, + "maximum": 10, + "title": "Times" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Allowas In" + }, + "weight": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "Weight" + }, + "timers": { + "type": "string", + "description": "BGP Keepalive and Hold Timer values in seconds as string \"<0-3600> <0-3600>\"", + "title": "Timers" + }, + "rib_in_pre_policy_retain": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Rib In Pre Policy Retain" + }, + "route_map_in": { + "type": "string", + "description": "Inbound route-map name", + "title": "Route Map In" + }, + "route_map_out": { + "type": "string", + "description": "Outbound route-map name", + "title": "Route Map Out" + }, + "bgp_listen_range_prefix": { + "type": "string", + "description": "IP prefix range\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "BGP Listen Range Prefix" + }, + "session_tracker": { + "type": "string", + "title": "Session Tracker" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, "title": "Structured Config" } }, @@ -347,14 +765,14 @@ "patternProperties": { "^_.+$": {} }, - "title": "Rr Overlay Peers" + "title": "MLAG IPv4 Underlay Peer" }, - "ipvpn_gateway_peers": { + "evpn_overlay_peers": { "type": "object", "properties": { "name": { "type": "string", - "default": "IPVPN-GATEWAY-PEERS", + "default": "EVPN-OVERLAY-PEERS", "description": "Name of peer group.", "title": "Name" }, @@ -370,1358 +788,1641 @@ }, "structured_config": { "type": "object", - "description": "Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen.", - "title": "Structured Config" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Ipvpn Gateway Peers" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "BGP Peer Groups" - }, - "bgp_update_wait_install": { - "type": "boolean", - "description": "Do not advertise reachability to a prefix until that prefix has been installed in hardware.\nThis will eliminate any temporary black holes due to a BGP speaker advertising reachability to a prefix that may not yet be installed into the forwarding plane.\n", - "title": "BGP Update Wait Install" - }, - "bgp_update_wait_for_convergence": { - "type": "boolean", - "description": "Disables FIB updates and route advertisement when the BGP instance is initiated until the BGP convergence state is reached.\n", - "title": "BGP Update Wait For Convergence" - }, - "connected_endpoints_keys": { - "description": "Endpoints connecting to the fabric can be grouped by using separate keys.\nThe keys can be customized to provide a better better organization or grouping of your data.\n`connected_endpoints_keys` should be defined in the top level group_vars for the fabric.\nThe default values will be overridden if defining this key, so it is recommended to copy the defaults and modify them.\n", - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "title": "Key" - }, - "type": { - "type": "string", - "description": "Type used for documentation.", - "title": "Type" - }, - "description": { - "type": "string", - "description": "Description used for documentation.", - "title": "Description" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "key" - ] - }, - "default": [ - { - "key": "servers", - "type": "server", - "description": "Server" - }, - { - "key": "firewalls", - "type": "firewall", - "description": "Firewall" - }, - { - "key": "routers", - "type": "router", - "description": "Router" - }, - { - "key": "load_balancers", - "type": "load_balancer", - "description": "Load Balancer" - }, - { - "key": "storage_arrays", - "type": "storage_array", - "description": "Storage Array" - }, - { - "key": "cpes", - "type": "cpe", - "description": "CPE" - }, - { - "key": "workstations", - "type": "workstation", - "description": "Workstation" - }, - { - "key": "access_points", - "type": "access_point", - "description": "Access Point" - }, - { - "key": "phones", - "type": "phone", - "description": "Phone" - }, - { - "key": "printers", - "type": "printer", - "description": "Printer" - }, - { - "key": "cameras", - "type": "camera", - "description": "Camera" - }, - { - "key": "generic_devices", - "type": "generic_device", - "description": "Generic Device" - } - ], - "title": "Connected Endpoints Keys" - }, - "core_interfaces": { - "type": "object", - "properties": { - "p2p_links_ip_pools": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "P2P pool name.", - "title": "Name" - }, - "ipv4_pool": { - "type": "string", - "description": "IPv4 address/Mask.", - "title": "IPv4 Pool" - }, - "prefix_size": { - "type": "integer", - "description": "Subnet mask size.", - "default": 31, - "minimum": 8, - "maximum": 31, - "title": "Prefix Size" - } - }, - "required": [ - "name" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "P2P Links IP Pools" - }, - "p2p_links_profiles": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "P2P profile name. Any variable supported under p2p_links can be inherited from a profile.", - "title": "Name" - }, - "id": { - "type": "integer", - "description": "Unique id per subnet_summary. Used to calculate ip addresses.\nRequired with ip_pool. ID starting from 1.\n", - "title": "ID" - }, - "speed": { - "type": "string", - "description": "The values can be speed or auto speed or forced speed.", - "title": "Speed" - }, - "ip_pool": { - "type": "string", - "description": "P2P pool name. IP Pool defined under p2p_links_ip_pools. A /31 will be taken from the pool per P2P link.", - "title": "IP Pool" - }, - "subnet": { - "type": "string", - "description": "IPv4 address/Mask. Subnet used on this P2P link.", - "title": "Subnet" - }, - "ip": { - "type": "array", - "description": "Specific IP addresses used on this P2P link.", - "items": { + "description": "Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen.", + "properties": { + "name": { "type": "string", - "description": "Node IPv4 address/Mask." + "description": "Peer-group name", + "title": "Name" }, - "title": "IP" - }, - "ipv6_enable": { - "type": "boolean", - "default": false, - "description": "Allows turning on ipv6 for the link or profile (also autodetected based on underlay_rfc5549 and include_in_underlay_protocol).", - "title": "IPv6 Enable" - }, - "nodes": { - "type": "array", - "description": "Nodes where this link should be configured.", - "items": { + "type": { "type": "string", - "description": "The values can be < node_a >, < node_b >.\nex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].\n" + "description": "Key only used for documentation or validation purposes", + "title": "Type" }, - "title": "Nodes" - }, - "interfaces": { - "type": "array", - "description": "Interfaces where this link should be configured and Required unless using port-channels.", - "items": { + "remote_as": { "type": "string", - "description": "The value can be like < node_a_interface >, < node_b_interface >.\nex. - [ Ethernet2, Ethernet2 ].\n" + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Remote As" }, - "title": "Interfaces" - }, - "as": { - "type": "array", - "description": "AS numbers for BGP.\nRequired with bgp peering.\n", - "items": { + "local_as": { "type": "string", - "description": "The values can be like [\"node_a_as\", \"node_b_as\"]." - }, - "title": "As" - }, - "descriptions": { - "type": "array", - "description": "Interface description.", - "items": { - "type": "string" + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Local As" }, - "title": "Descriptions" - }, - "include_in_underlay_protocol": { - "type": "boolean", - "default": true, - "description": "Add this interface to underlay routing protocol.", - "title": "Include In Underlay Protocol" - }, - "isis_hello_padding": { - "type": "boolean", - "default": false, - "title": "ISIS Hello Padding" - }, - "isis_metric": { - "type": "integer", - "title": "ISIS Metric" - }, - "isis_circuit_type": { - "type": "string", - "enum": [ - "level-1", - "level-2", - "level-1-2" - ], - "title": "ISIS Circuit Type" - }, - "isis_authentication_mode": { - "type": "string", - "enum": [ - "md5", - "text" - ], - "title": "ISIS Authentication Mode" - }, - "isis_authentication_key": { - "type": "string", - "description": "Type-7 encrypted password.", - "title": "ISIS Authentication Key" - }, - "mpls_ip": { - "type": "boolean", - "description": "MPLS parameters. Default value is true if switch.mpls_lsr is true.", - "title": "MPLS IP" - }, - "mpls_ldp": { - "type": "boolean", - "description": "MPLS parameters. Default value is true for ldp underlay variants, otherwise false.", - "title": "MPLS LDP" - }, - "mtu": { - "type": "integer", - "description": "MTU for this P2P link. Default value same as p2p_uplinks_mtu.", - "title": "MTU" - }, - "bfd": { - "type": "boolean", - "default": false, - "description": "Enable BFD (only considered for BGP).", - "title": "BFD" - }, - "ptp": { - "description": "PTP parameters.", - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": false, - "description": "Enable PTP.", - "title": "Enabled" - } + "description": { + "type": "string", + "title": "Description" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "shutdown": { + "type": "boolean", + "title": "Shutdown" }, - "title": "PTP" - }, - "sflow": { - "type": "boolean", - "description": "Enable sFlow. Overrides `fabric_sflow` setting.", - "title": "Sflow" - }, - "qos_profile": { - "type": "string", - "description": "QOS service profile.", - "title": "QOS Profile" - }, - "macsec_profile": { - "type": "string", - "description": "MAC security profile.", - "title": "Macsec Profile" - }, - "port_channel": { - "description": "Port-channel parameters.", - "type": "object", - "properties": { - "mode": { - "type": "string", - "default": "active", - "title": "Mode" + "as_path": { + "type": "object", + "description": "BGP AS-PATH options", + "properties": { + "remote_as_replace_out": { + "type": "boolean", + "description": "Replace AS number with local AS number", + "title": "Remote As Replace Out" + }, + "prepend_own_disabled": { + "type": "boolean", + "description": "Disable prepending own AS number to AS path", + "title": "Prepend Own Disabled" + } }, - "nodes_child_interfaces": { - "type": "array", - "items": { - "type": "object", - "properties": { - "node": { - "type": "string", - "title": "Node" - }, - "interfaces": { - "type": "array", - "description": "List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ].", - "items": { - "type": "string" - }, - "title": "Interfaces" - } - }, - "required": [ - "node" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "As Path" + }, + "remove_private_as": { + "type": "object", + "description": "Remove private AS numbers in outbound AS path", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" }, - "title": "Nodes Child Interfaces" - } + "all": { + "type": "boolean", + "title": "All" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "remove_private_as_ingress": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As Ingress" }, - "title": "Port Channel" - }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the point-to-point interface in the final EOS configuration.", - "title": "Raw EOS CLI" - }, - "structured_config": { - "type": "object", - "description": "Custom structured config for interfaces", - "title": "Structured Config" - } - }, - "required": [ - "name" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "P2P Links Profiles" - }, - "p2p_links": { - "type": "array", - "items": { - "type": "object", - "properties": { - "nodes": { - "type": "array", - "description": "Nodes where this link should be configured.", - "items": { + "peer_filter": { "type": "string", - "description": "The values can be < node_a >, < node_b >.\nex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].\n" + "description": "Peer-filter name\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "Peer Filter" }, - "title": "Nodes" - }, - "profile": { - "type": "string", - "description": "P2P profile name. Profile defined under p2p_profiles.", - "title": "Profile" - }, - "id": { - "type": "integer", - "description": "Unique id per subnet_summary. Used to calculate ip addresses.\nRequired with ip_pool. ID starting from 1.\n", - "title": "ID" - }, - "speed": { - "type": "string", - "description": "The values can be speed or auto speed or forced speed.", - "title": "Speed" - }, - "ip_pool": { - "type": "string", - "description": "P2P pool name. IP Pool defined under p2p_links_ip_pools. A /31 will be taken from the pool per P2P link.", - "title": "IP Pool" - }, - "subnet": { - "type": "string", - "description": "IPv4 address/Mask. Subnet used on this P2P link.", - "title": "Subnet" - }, - "ip": { - "type": "array", - "description": "Specific IP addresses used on this P2P link.", - "items": { + "next_hop_unchanged": { + "type": "boolean", + "title": "Next Hop Unchanged" + }, + "update_source": { "type": "string", - "description": "Node IPv4 address/Mask." + "description": "IP address or interface name", + "title": "Update Source" }, - "title": "IP" - }, - "ipv6_enable": { - "type": "boolean", - "default": false, - "description": "Allows turning on ipv6 for the link or profile (also autodetected based on underlay_rfc5549 and include_in_underlay_protocol).", - "title": "IPv6 Enable" - }, - "interfaces": { - "type": "array", - "description": "Interfaces where this link should be configured and Required unless using port-channels.", - "items": { + "route_reflector_client": { + "type": "boolean", + "title": "Route Reflector Client" + }, + "bfd": { + "type": "boolean", + "title": "BFD" + }, + "ebgp_multihop": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "description": "Time-to-live in range of hops", + "title": "Ebgp Multihop" + }, + "next_hop_self": { + "type": "boolean", + "title": "Next Hop Self" + }, + "password": { "type": "string", - "description": "The value can be like < node_a_interface >, < node_b_interface >.\nex. - [ Ethernet2, Ethernet2 ].\n" + "title": "Password" }, - "title": "Interfaces" - }, - "as": { - "type": "array", - "description": "AS numbers for BGP.\nRequired with bgp peering.\n", - "items": { + "passive": { + "type": "boolean", + "title": "Passive" + }, + "default_originate": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "route_map": { + "type": "string", + "description": "Route-map name", + "title": "Route Map" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Default Originate" + }, + "send_community": { "type": "string", - "description": "The values can be like [\"node_a_as\", \"node_b_as\"]." + "description": "'all' or a combination of 'standard', 'extended', 'large' and 'link-bandwidth (w/options)'", + "title": "Send Community" }, - "title": "As" - }, - "descriptions": { - "type": "array", - "description": "Interface description.", - "items": { - "type": "string" + "maximum_routes": { + "type": "integer", + "description": "Maximum number of routes (0 means unlimited)", + "minimum": 0, + "maximum": 4294967294, + "title": "Maximum Routes" }, - "title": "Descriptions" - }, - "include_in_underlay_protocol": { - "type": "boolean", - "default": true, - "description": "Add this interface to underlay routing protocol.", - "title": "Include In Underlay Protocol" - }, - "isis_hello_padding": { - "type": "boolean", - "default": false, - "title": "ISIS Hello Padding" - }, - "isis_metric": { - "type": "integer", - "title": "ISIS Metric" - }, - "isis_circuit_type": { - "type": "string", - "enum": [ - "level-1", - "level-2", - "level-1-2" - ], - "title": "ISIS Circuit Type" - }, - "isis_authentication_mode": { - "type": "string", - "enum": [ - "md5", - "text" - ], - "title": "ISIS Authentication Mode" - }, - "isis_authentication_key": { - "type": "string", - "description": "Type-7 encrypted password.", - "title": "ISIS Authentication Key" - }, - "mpls_ip": { - "type": "boolean", - "description": "MPLS parameters. Default value is true if switch.mpls_lsr is true.", - "title": "MPLS IP" - }, - "mpls_ldp": { - "type": "boolean", - "description": "MPLS parameters. Default value is true for ldp underlay variants, otherwise false.", - "title": "MPLS LDP" - }, - "mtu": { - "type": "integer", - "description": "MTU for this P2P link. Default value same as p2p_uplinks_mtu.", - "title": "MTU" - }, - "bfd": { - "type": "boolean", - "default": false, - "description": "Enable BFD (only considered for BGP).", - "title": "BFD" - }, - "ptp": { - "description": "PTP parameters.", - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": false, - "description": "Enable PTP.", - "title": "Enabled" - } + "maximum_routes_warning_limit": { + "type": "string", + "description": "Maximum number of routes after which a warning is issued (0 means never warn) or\nPercentage of maximum number of routes at which to warn (\"<1-100> percent\")\n", + "title": "Maximum Routes Warning Limit" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "maximum_routes_warning_only": { + "type": "boolean", + "title": "Maximum Routes Warning Only" }, - "title": "PTP" - }, - "sflow": { - "type": "boolean", - "description": "Enable sFlow. Overrides `fabric_sflow` setting.", - "title": "Sflow" - }, - "qos_profile": { - "type": "string", - "description": "QOS service profile.", - "title": "QOS Profile" - }, - "macsec_profile": { - "type": "string", - "description": "MAC security profile.", - "title": "Macsec Profile" - }, - "port_channel": { - "description": "Port-channel parameters.", - "type": "object", - "properties": { - "mode": { - "type": "string", - "default": "active", - "title": "Mode" + "link_bandwidth": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "default": { + "type": "string", + "description": "nn.nn(K|M|G) link speed in bits/second", + "title": "Default" + } }, - "nodes_child_interfaces": { - "type": "array", - "items": { - "type": "object", - "properties": { - "node": { - "type": "string", - "title": "Node" - }, - "interfaces": { - "type": "array", - "description": "List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ].", - "items": { - "type": "string" - }, - "title": "Interfaces" - } - }, - "required": [ - "node" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Bandwidth" + }, + "allowas_in": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" }, - "title": "Nodes Child Interfaces" - } + "times": { + "type": "integer", + "description": "Number of local ASNs allowed in a BGP update", + "minimum": 1, + "maximum": 10, + "title": "Times" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Allowas In" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "weight": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "Weight" }, - "title": "Port Channel" + "timers": { + "type": "string", + "description": "BGP Keepalive and Hold Timer values in seconds as string \"<0-3600> <0-3600>\"", + "title": "Timers" + }, + "rib_in_pre_policy_retain": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Rib In Pre Policy Retain" + }, + "route_map_in": { + "type": "string", + "description": "Inbound route-map name", + "title": "Route Map In" + }, + "route_map_out": { + "type": "string", + "description": "Outbound route-map name", + "title": "Route Map Out" + }, + "bgp_listen_range_prefix": { + "type": "string", + "description": "IP prefix range\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "BGP Listen Range Prefix" + }, + "session_tracker": { + "type": "string", + "title": "Session Tracker" + } }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the point-to-point interface in the final EOS configuration.", - "title": "Raw EOS CLI" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "structured_config": { - "type": "object", - "description": "Custom structured config for interfaces", - "title": "Structured Config" - } - }, - "required": [ - "nodes" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "title": "Structured Config" } }, - "title": "P2P Links" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Core Interfaces" - }, - "custom_structured_configuration_list_merge": { - "type": "string", - "description": "The List-merge strategy used when merging custom structured configurations.\n\nThis applies to all vars prefixed by prefixes in `custom_structured_configuration_prefix`\nand all data under the various `structured_config` options.\n\nThe available list merge strategies:\n- `replace`:\n - Any list will be replaced with the list defined in custom structured configurations.\n- `append`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New items will be appended to the existing list (including duplicates).\n- `keep`:\n - Only set list if there is no existing list or existing list is `None`.\n- `prepend`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New items will be prepended to the existing list (including duplicates).\n- `append_rp`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be appended to the existing list.\n- `prepend_rp`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be prepended to the existing list.\n", - "enum": [ - "replace", - "append", - "keep", - "prepend", - "append_rp", - "prepend_rp" - ], - "default": "append_rp", - "title": "Custom Structured Configuration List Merge" - }, - "custom_structured_configuration_prefix": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Custom EOS Structured Configuration keys can be set on any group or host_var level using the name\nof the corresponding `eos_cli_config_gen` key prefixed with content of `custom_structured_configuration_prefix`.\n\nThe content of Custom Structured Configuration variables will be merged with the structured config generated by the eos_designs role.\n\nThe merge is done recursively, so it is possible to update a sub-key of a variable set by `eos_designs` role already.\n\nThe merge follow these recursive merge strategies:\n- New keys will be added for all types.\n- Existing keys of type \"List\" with a \"Primary key\" set in the schema:\n - Strategy can be changed with `custom_structured_configuration_list_merge`. Default strategy:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be appended to the existing list\n- Other keys of type \"List\" will have new unique items appended the the existing list.\n- Existing keys of type \"Dictionary\" will recursively merge\n- Other existing keys will be replaced.\n", - "default": [ - "custom_structured_configuration_" - ], - "title": "Custom Structured Configuration Prefix" - }, - "cvp_ingestauth_key": { - "type": "string", - "description": "On-premise CVP ingest auth key. If set, TerminAttr will be configured with key-based authentication for on-premise CVP.\nIf not set, TerminAttr will be configured with certificate based authentication:\n- On-premise using token onboarding. Default token path is '/tmp/token'.\n- CVaaS using token-secure onboarding. Default token path is '/tmp/cv-onboarding-token'.\nToken must be copied to the device first.", - "title": "CVP Ingestauth Key" - }, - "cvp_instance_ip": { - "type": "string", - "description": "IPv4 address or DNS name for CloudVision.\nThis variable only supports an on-premise single-node cluster or the DNS name of a CloudVision as a Service instance.\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use cvp_instance_ips instead.", - "deprecated": true, - "title": "CVP Instance IP" - }, - "cvp_instance_ips": { - "type": "array", - "description": "List of IPv4 addresses or DNS names for CloudVision.\nFor on-premise CloudVision enter all the nodes of the cluster.\nFor CloudVision as a Service enter the DNS name of the instance.\n`eos_designs` only supports one CloudVision cluster.\n", - "items": { - "type": "string", - "description": "IPv4 address or DNS name for CloudVision" - }, - "title": "CVP Instance Ips" - }, - "cvp_token_file": { - "type": "string", - "description": "cvp_token_file is the path to the token file on the switch.\nIf not set the default locations for on-premise or CVaaS will be used.\nSee cvp_ingestauth_key for details.", - "title": "CVP Token File" - }, - "dc_name": { - "description": "POD Name is used in:\n- Fabric Documentation (Optional, falls back to fabric_name)\n- SNMP Location: `snmp_settings.location` (Optional)\n- HER Overlay DC scoped flood lists: `overlay_her_flood_list_scope: dc` (Required)\n", - "type": "string", - "title": "DC Name" - }, - "default_igmp_snooping_enabled": { - "description": "When set to false, disables IGMP snooping at fabric level and overrides per vlan settings.\n", - "type": "boolean", - "default": true, - "title": "Default IGMP Snooping Enabled" - }, - "default_interfaces": { - "type": "array", - "description": "Default uplink, downlink, and MLAG interfaces, which will be used if these interfaces are not defined on a device (either directly or through inheritance).\n", - "items": { - "type": "object", - "properties": { - "types": { - "type": "array", - "description": "List of node type keys.", - "items": { - "type": "string" - }, - "title": "Types" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "platforms": { - "type": "array", - "description": "List of platform families.\nThis is defined as a Python regular expression that matches the full platform type.\n", - "items": { + "title": "EVPN Overlay Peers" + }, + "evpn_overlay_core": { + "type": "object", + "properties": { + "name": { "type": "string", - "description": "Arista platform family regular expression." + "default": "EVPN-OVERLAY-CORE", + "description": "Name of peer group.", + "title": "Name" }, - "title": "Platforms" - }, - "uplink_interfaces": { - "type": "array", - "description": "List of uplink interfaces or uplink interface ranges.", - "items": { + "password": { "type": "string", - "description": "Interface range or interface." + "description": "Type 7 encrypted password.", + "title": "Password" }, - "title": "Uplink Interfaces" - }, - "mlag_interfaces": { - "type": "array", - "description": "List of MLAG interfaces or MLAG interface ranges.", - "items": { - "type": "string", - "description": "Interface range or interface." + "bfd": { + "type": "boolean", + "default": true, + "title": "BFD" }, - "title": "MLAG Interfaces" + "structured_config": { + "type": "object", + "description": "Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen.", + "properties": { + "name": { + "type": "string", + "description": "Peer-group name", + "title": "Name" + }, + "type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Type" + }, + "remote_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Remote As" + }, + "local_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Local As" + }, + "description": { + "type": "string", + "title": "Description" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "as_path": { + "type": "object", + "description": "BGP AS-PATH options", + "properties": { + "remote_as_replace_out": { + "type": "boolean", + "description": "Replace AS number with local AS number", + "title": "Remote As Replace Out" + }, + "prepend_own_disabled": { + "type": "boolean", + "description": "Disable prepending own AS number to AS path", + "title": "Prepend Own Disabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "As Path" + }, + "remove_private_as": { + "type": "object", + "description": "Remove private AS numbers in outbound AS path", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As" + }, + "remove_private_as_ingress": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As Ingress" + }, + "peer_filter": { + "type": "string", + "description": "Peer-filter name\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "Peer Filter" + }, + "next_hop_unchanged": { + "type": "boolean", + "title": "Next Hop Unchanged" + }, + "update_source": { + "type": "string", + "description": "IP address or interface name", + "title": "Update Source" + }, + "route_reflector_client": { + "type": "boolean", + "title": "Route Reflector Client" + }, + "bfd": { + "type": "boolean", + "title": "BFD" + }, + "ebgp_multihop": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "description": "Time-to-live in range of hops", + "title": "Ebgp Multihop" + }, + "next_hop_self": { + "type": "boolean", + "title": "Next Hop Self" + }, + "password": { + "type": "string", + "title": "Password" + }, + "passive": { + "type": "boolean", + "title": "Passive" + }, + "default_originate": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "route_map": { + "type": "string", + "description": "Route-map name", + "title": "Route Map" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Default Originate" + }, + "send_community": { + "type": "string", + "description": "'all' or a combination of 'standard', 'extended', 'large' and 'link-bandwidth (w/options)'", + "title": "Send Community" + }, + "maximum_routes": { + "type": "integer", + "description": "Maximum number of routes (0 means unlimited)", + "minimum": 0, + "maximum": 4294967294, + "title": "Maximum Routes" + }, + "maximum_routes_warning_limit": { + "type": "string", + "description": "Maximum number of routes after which a warning is issued (0 means never warn) or\nPercentage of maximum number of routes at which to warn (\"<1-100> percent\")\n", + "title": "Maximum Routes Warning Limit" + }, + "maximum_routes_warning_only": { + "type": "boolean", + "title": "Maximum Routes Warning Only" + }, + "link_bandwidth": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "default": { + "type": "string", + "description": "nn.nn(K|M|G) link speed in bits/second", + "title": "Default" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Bandwidth" + }, + "allowas_in": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "times": { + "type": "integer", + "description": "Number of local ASNs allowed in a BGP update", + "minimum": 1, + "maximum": 10, + "title": "Times" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Allowas In" + }, + "weight": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "Weight" + }, + "timers": { + "type": "string", + "description": "BGP Keepalive and Hold Timer values in seconds as string \"<0-3600> <0-3600>\"", + "title": "Timers" + }, + "rib_in_pre_policy_retain": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Rib In Pre Policy Retain" + }, + "route_map_in": { + "type": "string", + "description": "Inbound route-map name", + "title": "Route Map In" + }, + "route_map_out": { + "type": "string", + "description": "Outbound route-map name", + "title": "Route Map Out" + }, + "bgp_listen_range_prefix": { + "type": "string", + "description": "IP prefix range\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "BGP Listen Range Prefix" + }, + "session_tracker": { + "type": "string", + "title": "Session Tracker" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Structured Config" + } }, - "downlink_interfaces": { - "type": "array", - "description": "List of downlink interfaces or downlink interface ranges.", - "items": { + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN Overlay Core" + }, + "mpls_overlay_peers": { + "type": "object", + "properties": { + "name": { "type": "string", - "description": "Interface range or interface." + "default": "MPLS-OVERLAY-PEERS", + "description": "Name of peer group.", + "title": "Name" }, - "title": "Downlink Interfaces" - } - }, - "required": [ - "types", - "platforms" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Default Interfaces" - }, - "default_node_types": { - "type": "array", - "description": "Uses hostname matches against a regular expression to determine the node type.", - "items": { - "type": "object", - "properties": { - "node_type": { - "type": "string", - "description": "Resulting node type when regex matches.", - "title": "Node Type" - }, - "match_hostnames": { - "type": "array", - "description": "Regular expressions to match against hostnames.", - "items": { + "password": { "type": "string", - "description": "Regex needs to match full hostname (i.e. is bounded by ^ and $ elements)." + "description": "Type 7 encrypted password.", + "title": "Password" }, - "title": "Match Hostnames" - } - }, - "required": [ - "node_type", - "match_hostnames" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Default Node Types" - }, - "design": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "By setting the design.type variable, the default node-types and templates described in these documents will be used.\n", - "enum": [ - "l3ls-evpn", - "mpls", - "l2ls" - ], - "default": "l3ls-evpn", - "title": "Type" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Design" - }, - "enable_trunk_groups": { - "type": "boolean", - "description": "Enable Trunk Group support across eos_designs.\nWarning: Because of the nature of the EOS Trunk Group feature, enabling this is \"all or nothing\".\n*All* vlans and *all* trunks towards connected endpoints must be using trunk groups as well.\nIf trunk groups are not assigned to a trunk, no vlans will be enabled on that trunk.\nSee \"Details on enable_trunk_groups\" below before enabling this feature.\n", - "default": false, - "title": "Enable Trunk Groups" - }, - "eos_designs_custom_templates": { - "type": "array", - "items": { - "type": "object", - "properties": { - "template": { - "type": "string", - "description": "Template file.", - "title": "Template" - }, - "options": { - "description": "Template options.", - "type": "object", - "properties": { - "list_merge": { - "type": "string", - "description": "Merge strategy for lists.", - "default": "append_rp", - "title": "List Merge" + "bfd": { + "type": "boolean", + "default": true, + "title": "BFD" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen.", + "properties": { + "name": { + "type": "string", + "description": "Peer-group name", + "title": "Name" + }, + "type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Type" + }, + "remote_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Remote As" + }, + "local_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Local As" + }, + "description": { + "type": "string", + "title": "Description" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "as_path": { + "type": "object", + "description": "BGP AS-PATH options", + "properties": { + "remote_as_replace_out": { + "type": "boolean", + "description": "Replace AS number with local AS number", + "title": "Remote As Replace Out" + }, + "prepend_own_disabled": { + "type": "boolean", + "description": "Disable prepending own AS number to AS path", + "title": "Prepend Own Disabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "As Path" + }, + "remove_private_as": { + "type": "object", + "description": "Remove private AS numbers in outbound AS path", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As" + }, + "remove_private_as_ingress": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As Ingress" + }, + "peer_filter": { + "type": "string", + "description": "Peer-filter name\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "Peer Filter" + }, + "next_hop_unchanged": { + "type": "boolean", + "title": "Next Hop Unchanged" + }, + "update_source": { + "type": "string", + "description": "IP address or interface name", + "title": "Update Source" + }, + "route_reflector_client": { + "type": "boolean", + "title": "Route Reflector Client" + }, + "bfd": { + "type": "boolean", + "title": "BFD" + }, + "ebgp_multihop": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "description": "Time-to-live in range of hops", + "title": "Ebgp Multihop" + }, + "next_hop_self": { + "type": "boolean", + "title": "Next Hop Self" + }, + "password": { + "type": "string", + "title": "Password" + }, + "passive": { + "type": "boolean", + "title": "Passive" + }, + "default_originate": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "route_map": { + "type": "string", + "description": "Route-map name", + "title": "Route Map" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Default Originate" + }, + "send_community": { + "type": "string", + "description": "'all' or a combination of 'standard', 'extended', 'large' and 'link-bandwidth (w/options)'", + "title": "Send Community" + }, + "maximum_routes": { + "type": "integer", + "description": "Maximum number of routes (0 means unlimited)", + "minimum": 0, + "maximum": 4294967294, + "title": "Maximum Routes" + }, + "maximum_routes_warning_limit": { + "type": "string", + "description": "Maximum number of routes after which a warning is issued (0 means never warn) or\nPercentage of maximum number of routes at which to warn (\"<1-100> percent\")\n", + "title": "Maximum Routes Warning Limit" + }, + "maximum_routes_warning_only": { + "type": "boolean", + "title": "Maximum Routes Warning Only" + }, + "link_bandwidth": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "default": { + "type": "string", + "description": "nn.nn(K|M|G) link speed in bits/second", + "title": "Default" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Bandwidth" + }, + "allowas_in": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "times": { + "type": "integer", + "description": "Number of local ASNs allowed in a BGP update", + "minimum": 1, + "maximum": 10, + "title": "Times" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Allowas In" + }, + "weight": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "Weight" + }, + "timers": { + "type": "string", + "description": "BGP Keepalive and Hold Timer values in seconds as string \"<0-3600> <0-3600>\"", + "title": "Timers" + }, + "rib_in_pre_policy_retain": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Rib In Pre Policy Retain" + }, + "route_map_in": { + "type": "string", + "description": "Inbound route-map name", + "title": "Route Map In" + }, + "route_map_out": { + "type": "string", + "description": "Outbound route-map name", + "title": "Route Map Out" + }, + "bgp_listen_range_prefix": { + "type": "string", + "description": "IP prefix range\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "BGP Listen Range Prefix" + }, + "session_tracker": { + "type": "string", + "title": "Session Tracker" + } }, - "strip_empty_keys": { - "type": "boolean", - "description": "Filter out keys from the generated output if value is null/none/undefined.", - "default": true, - "title": "Strip Empty Keys" - } + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Structured Config" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MPLS Overlay Peers" + }, + "rr_overlay_peers": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "RR-OVERLAY-PEERS", + "description": "Name of peer group.", + "title": "Name" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "password": { + "type": "string", + "description": "Type 7 encrypted password.", + "title": "Password" }, - "title": "Options" - } - }, - "required": [ - "template" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "EOS Designs Custom Templates" - }, - "eos_designs_documentation": { - "description": "Control fabric documentation generation.\n", - "type": "object", - "properties": { - "connected_endpoints": { - "description": "Generate fabric-wide documentation for connected endpoints.\n", - "type": "boolean", - "default": false, - "title": "Connected Endpoints" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EOS Designs Documentation" - }, - "event_handlers": { - "type": "array", - "description": "Gives the ability to monitor and react to Syslog messages.\nEvent Handlers provide a powerful and flexible tool that can be used to apply self-healing actions,\ncustomize the system behavior, and implement workarounds to problems discovered in the field.\n", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Event Handler Name", - "title": "Name" - }, - "action_type": { - "type": "string", - "enum": [ - "bash", - "increment", - "log" - ], - "title": "Action Type" - }, - "action": { - "type": "string", - "description": "Command to execute\n", - "title": "Action" - }, - "delay": { - "type": "integer", - "description": "Event-handler delay in seconds\n", - "title": "Delay" - }, - "trigger": { - "type": "string", - "description": "Configure event trigger condition.\n", - "enum": [ - "on-logging", - "on-startup-config" - ], - "title": "Trigger" + "bfd": { + "type": "boolean", + "default": true, + "title": "BFD" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen.", + "properties": { + "name": { + "type": "string", + "description": "Peer-group name", + "title": "Name" + }, + "type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Type" + }, + "remote_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Remote As" + }, + "local_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Local As" + }, + "description": { + "type": "string", + "title": "Description" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "as_path": { + "type": "object", + "description": "BGP AS-PATH options", + "properties": { + "remote_as_replace_out": { + "type": "boolean", + "description": "Replace AS number with local AS number", + "title": "Remote As Replace Out" + }, + "prepend_own_disabled": { + "type": "boolean", + "description": "Disable prepending own AS number to AS path", + "title": "Prepend Own Disabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "As Path" + }, + "remove_private_as": { + "type": "object", + "description": "Remove private AS numbers in outbound AS path", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As" + }, + "remove_private_as_ingress": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As Ingress" + }, + "peer_filter": { + "type": "string", + "description": "Peer-filter name\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "Peer Filter" + }, + "next_hop_unchanged": { + "type": "boolean", + "title": "Next Hop Unchanged" + }, + "update_source": { + "type": "string", + "description": "IP address or interface name", + "title": "Update Source" + }, + "route_reflector_client": { + "type": "boolean", + "title": "Route Reflector Client" + }, + "bfd": { + "type": "boolean", + "title": "BFD" + }, + "ebgp_multihop": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "description": "Time-to-live in range of hops", + "title": "Ebgp Multihop" + }, + "next_hop_self": { + "type": "boolean", + "title": "Next Hop Self" + }, + "password": { + "type": "string", + "title": "Password" + }, + "passive": { + "type": "boolean", + "title": "Passive" + }, + "default_originate": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "route_map": { + "type": "string", + "description": "Route-map name", + "title": "Route Map" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Default Originate" + }, + "send_community": { + "type": "string", + "description": "'all' or a combination of 'standard', 'extended', 'large' and 'link-bandwidth (w/options)'", + "title": "Send Community" + }, + "maximum_routes": { + "type": "integer", + "description": "Maximum number of routes (0 means unlimited)", + "minimum": 0, + "maximum": 4294967294, + "title": "Maximum Routes" + }, + "maximum_routes_warning_limit": { + "type": "string", + "description": "Maximum number of routes after which a warning is issued (0 means never warn) or\nPercentage of maximum number of routes at which to warn (\"<1-100> percent\")\n", + "title": "Maximum Routes Warning Limit" + }, + "maximum_routes_warning_only": { + "type": "boolean", + "title": "Maximum Routes Warning Only" + }, + "link_bandwidth": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "default": { + "type": "string", + "description": "nn.nn(K|M|G) link speed in bits/second", + "title": "Default" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Bandwidth" + }, + "allowas_in": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "times": { + "type": "integer", + "description": "Number of local ASNs allowed in a BGP update", + "minimum": 1, + "maximum": 10, + "title": "Times" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Allowas In" + }, + "weight": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "Weight" + }, + "timers": { + "type": "string", + "description": "BGP Keepalive and Hold Timer values in seconds as string \"<0-3600> <0-3600>\"", + "title": "Timers" + }, + "rib_in_pre_policy_retain": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Rib In Pre Policy Retain" + }, + "route_map_in": { + "type": "string", + "description": "Inbound route-map name", + "title": "Route Map In" + }, + "route_map_out": { + "type": "string", + "description": "Outbound route-map name", + "title": "Route Map Out" + }, + "bgp_listen_range_prefix": { + "type": "string", + "description": "IP prefix range\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "BGP Listen Range Prefix" + }, + "session_tracker": { + "type": "string", + "title": "Session Tracker" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Structured Config" + } }, - "regex": { - "type": "string", - "description": "Regular expression to use for searching log messages. Required for on-logging trigger\n", - "title": "Regex" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "asynchronous": { - "type": "boolean", - "default": false, - "description": "Set the action to be non-blocking.", - "title": "Asynchronous" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "title": "Rr Overlay Peers" }, - "required": [ - "name" - ] - }, - "title": "Event Handlers" - }, - "evpn_ebgp_gateway_inter_domain": { - "type": "boolean", - "title": "EVPN Ebgp Gateway Inter Domain" - }, - "evpn_ebgp_gateway_multihop": { - "description": "Default of 15, considering a large value to avoid BGP reachability issues in very complex DCI networks.\nAdapt the value for your specific topology.\n", - "type": "integer", - "default": 15, - "title": "EVPN Ebgp Gateway Multihop" - }, - "evpn_ebgp_multihop": { - "description": "Default of 3, the recommended value for a 3 stage spine and leaf topology.\nSet to a higher value to allow for very large and complex topologies.\n", - "type": "integer", - "default": 3, - "title": "EVPN Ebgp Multihop" - }, - "evpn_hostflap_detection": { - "type": "object", - "properties": { - "enabled": { - "description": "If set to false it will disable EVPN host-flap detection.", - "type": "boolean", - "default": true, - "title": "Enabled" - }, - "threshold": { - "description": "Minimum number of MAC moves that indicate a MAC duplication issue.", - "type": "integer", - "default": 5, - "title": "Threshold" - }, - "window": { - "description": "Time (in seconds) to detect a MAC duplication issue.", - "type": "integer", - "default": 180, - "title": "Window" - }, - "expiry_timeout": { - "description": "Time (in seconds) to purge a MAC duplication issue.", - "type": "integer", - "title": "Expiry Timeout" + "ipvpn_gateway_peers": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "IPVPN-GATEWAY-PEERS", + "description": "Name of peer group.", + "title": "Name" + }, + "password": { + "type": "string", + "description": "Type 7 encrypted password.", + "title": "Password" + }, + "bfd": { + "type": "boolean", + "default": true, + "title": "BFD" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen.", + "properties": { + "name": { + "type": "string", + "description": "Peer-group name", + "title": "Name" + }, + "type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Type" + }, + "remote_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Remote As" + }, + "local_as": { + "type": "string", + "description": "BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535>", + "title": "Local As" + }, + "description": { + "type": "string", + "title": "Description" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "as_path": { + "type": "object", + "description": "BGP AS-PATH options", + "properties": { + "remote_as_replace_out": { + "type": "boolean", + "description": "Replace AS number with local AS number", + "title": "Remote As Replace Out" + }, + "prepend_own_disabled": { + "type": "boolean", + "description": "Disable prepending own AS number to AS path", + "title": "Prepend Own Disabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "As Path" + }, + "remove_private_as": { + "type": "object", + "description": "Remove private AS numbers in outbound AS path", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As" + }, + "remove_private_as_ingress": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "replace_as": { + "type": "boolean", + "title": "Replace As" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Remove Private As Ingress" + }, + "peer_filter": { + "type": "string", + "description": "Peer-filter name\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "Peer Filter" + }, + "next_hop_unchanged": { + "type": "boolean", + "title": "Next Hop Unchanged" + }, + "update_source": { + "type": "string", + "description": "IP address or interface name", + "title": "Update Source" + }, + "route_reflector_client": { + "type": "boolean", + "title": "Route Reflector Client" + }, + "bfd": { + "type": "boolean", + "title": "BFD" + }, + "ebgp_multihop": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "description": "Time-to-live in range of hops", + "title": "Ebgp Multihop" + }, + "next_hop_self": { + "type": "boolean", + "title": "Next Hop Self" + }, + "password": { + "type": "string", + "title": "Password" + }, + "passive": { + "type": "boolean", + "title": "Passive" + }, + "default_originate": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "route_map": { + "type": "string", + "description": "Route-map name", + "title": "Route Map" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Default Originate" + }, + "send_community": { + "type": "string", + "description": "'all' or a combination of 'standard', 'extended', 'large' and 'link-bandwidth (w/options)'", + "title": "Send Community" + }, + "maximum_routes": { + "type": "integer", + "description": "Maximum number of routes (0 means unlimited)", + "minimum": 0, + "maximum": 4294967294, + "title": "Maximum Routes" + }, + "maximum_routes_warning_limit": { + "type": "string", + "description": "Maximum number of routes after which a warning is issued (0 means never warn) or\nPercentage of maximum number of routes at which to warn (\"<1-100> percent\")\n", + "title": "Maximum Routes Warning Limit" + }, + "maximum_routes_warning_only": { + "type": "boolean", + "title": "Maximum Routes Warning Only" + }, + "link_bandwidth": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "default": { + "type": "string", + "description": "nn.nn(K|M|G) link speed in bits/second", + "title": "Default" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Bandwidth" + }, + "allowas_in": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "times": { + "type": "integer", + "description": "Number of local ASNs allowed in a BGP update", + "minimum": 1, + "maximum": 10, + "title": "Times" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Allowas In" + }, + "weight": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "Weight" + }, + "timers": { + "type": "string", + "description": "BGP Keepalive and Hold Timer values in seconds as string \"<0-3600> <0-3600>\"", + "title": "Timers" + }, + "rib_in_pre_policy_retain": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "all": { + "type": "boolean", + "title": "All" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Rib In Pre Policy Retain" + }, + "route_map_in": { + "type": "string", + "description": "Inbound route-map name", + "title": "Route Map In" + }, + "route_map_out": { + "type": "string", + "description": "Outbound route-map name", + "title": "Route Map Out" + }, + "bgp_listen_range_prefix": { + "type": "string", + "description": "IP prefix range\nnote: `bgp_listen_range_prefix` and `peer_filter` should not be mixed with\nthe new `listen_ranges` key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use listen_ranges instead.", + "deprecated": true, + "title": "BGP Listen Range Prefix" + }, + "session_tracker": { + "type": "string", + "title": "Session Tracker" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Structured Config" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Ipvpn Gateway Peers" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "EVPN Hostflap Detection" - }, - "evpn_import_pruning": { - "description": "Enable VPN import pruning (Min. EOS 4.24.2F).\nThe Route Target extended communities carried by incoming VPN paths will be examined.\nIf none of those Route Targets have been configured for import, the path will be immediately discarded.\n", - "type": "boolean", - "default": false, - "title": "EVPN Import Pruning" - }, - "evpn_multicast": { - "type": "boolean", - "description": "General Configuration required for EVPN Multicast. \"evpn_l2_multicast\" or \"evpn_l3_multicast\" must also be configured under the Network Services (tenants).\nRequires \"underlay_multicast: true\" and IGMP snooping enabled globally (default).\nFor MLAG devices Route Distinguisher must be unique since this feature will create multi-vtep configuration.\nWarning !!! For Trident3 based platforms i.e 7050X3, 7300X3, 720XP and 722XP\n The Following default platform setting will be configured: \"platform trident forwarding-table partition flexible exact-match 16384 l2-shared 98304 l3-shared 131072\"\n All forwarding agents will be restarted when this configuration is applied.\n You can tune the settings by overridding the default variable: \"platform_settings[platforms].trident_forwarding_table_partition:\"\n Please contact an Arista representative for help with determining the appropriate values for your environment.\n", - "default": false, - "title": "EVPN Multicast" + "title": "BGP Peer Groups" }, - "evpn_overlay_bgp_rtc": { - "description": "Enable Route Target Membership Constraint Address Family on EVPN overlay BGP peerings (Min. EOS 4.25.1F).\nRequires use eBGP as overlay protocol.\n", + "bgp_update_wait_install": { "type": "boolean", - "default": false, - "title": "EVPN Overlay BGP Rtc" + "description": "Do not advertise reachability to a prefix until that prefix has been installed in hardware.\nThis will eliminate any temporary black holes due to a BGP speaker advertising reachability to a prefix that may not yet be installed into the forwarding plane.\n", + "title": "BGP Update Wait Install" }, - "evpn_prevent_readvertise_to_server": { - "description": "Configure route-map on eBGP sessions towards route-servers, where prefixes with the peer's ASN in the AS Path are filtered away.\nThis is very useful in large-scale networks, where convergence will be quicker by not returning all updates received\nfrom Route-server-1 to Router-server-2 just for Route-server-2 to throw them away because of AS Path loop detection.\n", + "bgp_update_wait_for_convergence": { "type": "boolean", - "default": false, - "title": "EVPN Prevent Readvertise To Server" + "description": "Disables FIB updates and route advertisement when the BGP instance is initiated until the BGP convergence state is reached.\n", + "title": "BGP Update Wait For Convergence" }, - "evpn_short_esi_prefix": { - "description": "Configure prefix for \"short_esi\" values.", - "type": "string", - "default": "0000:0000:", - "title": "EVPN Short Esi Prefix" - }, - "evpn_vlan_aware_bundles": { - "description": "Enable vlan aware bundles for EVPN MAC-VRF.", - "type": "boolean", - "default": false, - "title": "EVPN VLAN Aware Bundles" - }, - "fabric_evpn_encapsulation": { - "description": "Should be set to mpls for evpn-mpls scenario.", - "enum": [ - "vxlan", - "mpls" - ], - "default": "vxlan", - "type": "string", - "title": "Fabric EVPN Encapsulation" - }, - "fabric_ip_addressing": { - "type": "object", - "properties": { - "mlag": { - "type": "object", - "properties": { - "algorithm": { - "type": "string", - "default": "first_id", - "description": "This variable defines the Multi-chassis Link Aggregation (MLAG) algorithm used.\nEach MLAG link will have a /31 subnet with each subnet allocated from the relevant MLAG pool via a calculated offset.\nThe offset is calculated using one of the following algorithms:\n - first_id: `(mlag_primary_id - 1) * 2` where `mlag_primary_id` is the ID of the first node defined under the node_group.\n This allocation method will skip every other /31 subnet making it less space efficient than `odd_id`.\n - odd_id: `(odd_id - 1) / 2`. Requires the node_group to have a node with an odd ID and a node with an even ID.\n - same_subnet: the offset will always be zero.\n This allocation method will cause every MLAG link to be addressed with the same /31 subnet.\n", - "enum": [ - "first_id", - "odd_id", - "same_subnet" - ], - "title": "Algorithm" - } + "connected_endpoints_keys": { + "description": "Endpoints connecting to the fabric can be grouped by using separate keys.\nThe keys can be customized to provide a better better organization or grouping of your data.\n`connected_endpoints_keys` should be defined in the top level group_vars for the fabric.\nThe default values will be overridden if defining this key, so it is recommended to copy the defaults and modify them.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "title": "Key" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "type": { + "type": "string", + "description": "Type used for documentation.", + "title": "Type" }, - "title": "MLAG" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "description": { + "type": "string", + "description": "Description used for documentation.", + "title": "Description" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "key" + ] }, - "title": "Fabric IP Addressing" - }, - "fabric_name": { - "description": "Fabric Name, required to match Ansible Group name covering all devices in the Fabric, **must** be an inventory group name.", - "type": "string", - "title": "Fabric Name" + "default": [ + { + "key": "servers", + "type": "server", + "description": "Server" + }, + { + "key": "firewalls", + "type": "firewall", + "description": "Firewall" + }, + { + "key": "routers", + "type": "router", + "description": "Router" + }, + { + "key": "load_balancers", + "type": "load_balancer", + "description": "Load Balancer" + }, + { + "key": "storage_arrays", + "type": "storage_array", + "description": "Storage Array" + }, + { + "key": "cpes", + "type": "cpe", + "description": "CPE" + }, + { + "key": "workstations", + "type": "workstation", + "description": "Workstation" + }, + { + "key": "access_points", + "type": "access_point", + "description": "Access Point" + }, + { + "key": "phones", + "type": "phone", + "description": "Phone" + }, + { + "key": "printers", + "type": "printer", + "description": "Printer" + }, + { + "key": "cameras", + "type": "camera", + "description": "Camera" + }, + { + "key": "generic_devices", + "type": "generic_device", + "description": "Generic Device" + } + ], + "title": "Connected Endpoints Keys" }, - "hardware_counters": { + "core_interfaces": { "type": "object", "properties": { - "features": { + "p2p_links_ip_pools": { "type": "array", - "description": "This data model allows to configure the list of hardware counters feature\navailable on Arista platforms.\n\nThe `name` key accepts a list of valid_values which MUST be updated to support\nnew feature as they are released in EOS.\n\nThe available values of the different keys like 'direction' or 'address_type'\nare feature and hardware dependent and this model DOES NOT validate that the\ncombinations are valid. It is the responsability of the user of this data model\nto make sure that the rendered CLI is accepted by the targeted device.\n\nExamples:\n\n * Use:\n ```yaml\n hardware_counters:\n features:\n - name: ip\n direction: out\n layer3: true\n units_packets: true\n ```\n\n to render:\n ```eos\n hardware counter feature ip out layer3 units packets\n ```\n * Use:\n ```yaml\n hardware_counters:\n features:\n - name: route\n address_type: ipv4\n vrf: test\n prefix: 192.168.0.0/24\n ```\n\n to render:\n ```eos\n hardware counter feature route ipv4 vrf test 192.168.0.0/24\n ```\n", "items": { "type": "object", "properties": { "name": { "type": "string", - "enum": [ - "acl", - "decap-group", - "directflow", - "ecn", - "flow-spec", - "gre tunnel interface", - "ip", - "mpls interface", - "mpls lfib", - "mpls tunnel", - "multicast", - "nexthop", - "pbr", - "pdp", - "policing interface", - "qos", - "qos dual-rate-policer", - "route", - "routed-port", - "subinterface", - "tapagg", - "traffic-class", - "traffic-policy", - "vlan", - "vlan-interface", - "vni decap", - "vni encap", - "vtep decap", - "vtep encap" - ], + "description": "P2P pool name.", "title": "Name" }, - "direction": { - "type": "string", - "enum": [ - "in", - "out", - "cpu" - ], - "description": "Most features support only 'in' and 'out'. Some like traffic-policy support 'cpu'.\nSome features DO NOT have any direction.\nThis validation IS NOT made by the schemas.\n", - "title": "Direction" - }, - "address_type": { - "type": "string", - "enum": [ - "ipv4", - "ipv6", - "mac" - ], - "description": "Supported only for the following features:\n- acl: [ipv4, ipv6, mac] if direction is 'out'\n- multicast: [ipv4, ipv6]\n- route: [ipv4, ipv6]\nThis validation IS NOT made by the schemas.\n", - "title": "Address Type" - }, - "layer3": { - "type": "boolean", - "description": "Supported only for the 'ip' feature\n", - "title": "Layer3" - }, - "vrf": { - "type": "string", - "description": "Supported only for the 'route' feature.\nThis validation IS NOT made by the schemas.\n", - "title": "VRF" - }, - "prefix": { + "ipv4_pool": { "type": "string", - "description": "Supported only for the 'route' feature.\nMandatory for the 'route' feature.\nThis validation IS NOT made by the schemas.\n", - "title": "Prefix" + "description": "IPv4 address/Mask.", + "title": "IPv4 Pool" }, - "units_packets": { - "type": "boolean", - "title": "Units Packets" + "prefix_size": { + "type": "integer", + "description": "Subnet mask size.", + "default": 31, + "minimum": 8, + "maximum": 31, + "title": "Prefix Size" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, - "title": "Features" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Hardware Counters" - }, - "internal_vlan_order": { - "type": "object", - "description": "Internal vlan allocation order and range.", - "properties": { - "allocation": { - "type": "string", - "enum": [ - "ascending", - "descending" - ], - "title": "Allocation" - }, - "range": { - "type": "object", - "properties": { - "beginning": { - "type": "integer", - "description": "First VLAN ID.", - "minimum": 2, - "maximum": 4094, - "title": "Beginning" - }, - "ending": { - "type": "integer", - "description": "Last VLAN ID.", - "minimum": 2, - "maximum": 4094, - "title": "Ending" - } - }, - "required": [ - "beginning", - "ending" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Range" - } - }, - "required": [ - "allocation" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "default": { - "allocation": "ascending", - "range": { - "beginning": 1006, - "ending": 1199 - } - }, - "title": "Internal VLAN Order" - }, - "ipv6_mgmt_destination_networks": { - "description": "List of IPv6 prefixes to configure as static routes towards the OOB IPv6 Management interface gateway.\nReplaces the default route.\n", - "type": "array", - "items": { - "type": "string", - "description": "IPv6_network/Mask." - }, - "title": "IPv6 Management Destination Networks" - }, - "ipv6_mgmt_gateway": { - "type": "string", - "format": "ipv6", - "description": "OOB Management interface gateway in IPv6 format.\nUsed as next-hop for default gateway or static routes defined under 'ipv6_mgmt_destination_networks'.", - "title": "IPv6 Management Gateway" - }, - "is_deployed": { - "description": "Is device already deployed in the fabric.\nWhen set to false, interfaces toward this device may be shutdown depending on the `shutdown_interfaces_towards_undeployed_peers` setting.\nFurthermore `eos_config_deploy_cvp` will not attempt to move or apply configurations to the device.\n", - "type": "boolean", - "default": true, - "title": "IS Deployed" - }, - "isis_advertise_passive_only": { - "type": "boolean", - "default": false, - "title": "ISIS Advertise Passive Only" - }, - "isis_area_id": { - "type": "string", - "default": "49.0001", - "title": "ISIS Area ID" - }, - "isis_default_circuit_type": { - "type": "string", - "enum": [ - "level-1-2", - "level-1", - "level-2" - ], - "default": "level-2", - "description": "These fabric level parameters can be used with core_interfaces running ISIS, and may be overridden on link profile or link level.", - "title": "ISIS Default Circuit Type" - }, - "isis_default_is_type": { - "type": "string", - "enum": [ - "level-1-2", - "level-1", - "level-2" - ], - "default": "level-2", - "title": "ISIS Default IS Type" - }, - "isis_default_metric": { - "type": "integer", - "default": 50, - "description": "These fabric level parameters can be used with core_interfaces running ISIS, and may be overridden at link profile or link level.", - "title": "ISIS Default Metric" - }, - "isis_maximum_paths": { - "description": "Number of path to configure in ECMP for ISIS.", - "type": "integer", - "title": "ISIS Maximum Paths" - }, - "isis_ti_lfa": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": false, - "title": "Enabled" - }, - "protection": { - "type": "string", - "enum": [ - "link", - "node" - ], - "title": "Protection" - }, - "local_convergence_delay": { - "description": "Local convergence delay in milliseconds.", - "type": "integer", - "default": 10000, - "title": "Local Convergence Delay" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "ISIS TI LFA" - }, - "l3_edge": { - "type": "object", - "properties": { - "p2p_links_ip_pools": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "P2P pool name.", - "title": "Name" - }, - "ipv4_pool": { - "type": "string", - "description": "IPv4 address/Mask.", - "title": "IPv4 Pool" - }, - "prefix_size": { - "type": "integer", - "description": "Subnet mask size.", - "default": 31, - "minimum": 8, - "maximum": 31, - "title": "Prefix Size" - } - }, - "required": [ - "name" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "P2P Links IP Pools" + "title": "P2P Links IP Pools" }, "p2p_links_profiles": { "type": "array", @@ -1920,13 +2621,13 @@ "title": "Interfaces" } }, - "required": [ - "node" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "node" + ] }, "title": "Nodes Child Interfaces" } @@ -1944,17 +2645,17 @@ }, "structured_config": { "type": "object", - "description": "Custom structured config for interfaces", + "description": "Custom structured config for interfaces\nNote! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.", "title": "Structured Config" } }, - "required": [ - "name" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "name" + ] }, "title": "P2P Links Profiles" }, @@ -2155,13 +2856,13 @@ "title": "Interfaces" } }, - "required": [ - "node" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "node" + ] }, "title": "Nodes Child Interfaces" } @@ -2179,7 +2880,7 @@ }, "structured_config": { "type": "object", - "description": "Custom structured config for interfaces", + "description": "Custom structured config for interfaces\nNote! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.", "title": "Structured Config" } }, @@ -2198,1131 +2899,949 @@ "patternProperties": { "^_.+$": {} }, - "title": "L3 Edge" + "title": "Core Interfaces" }, - "local_users": { + "custom_structured_configuration_list_merge": { + "type": "string", + "description": "The List-merge strategy used when merging custom structured configurations.\n\nThis applies to all vars prefixed by prefixes in `custom_structured_configuration_prefix`\nand all data under the various `structured_config` options.\n\nThe available list merge strategies:\n- `replace`:\n - Any list will be replaced with the list defined in custom structured configurations.\n- `append`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New items will be appended to the existing list (including duplicates).\n- `keep`:\n - Only set list if there is no existing list or existing list is `None`.\n- `prepend`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New items will be prepended to the existing list (including duplicates).\n- `append_rp`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be appended to the existing list.\n- `prepend_rp`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be prepended to the existing list.\n", + "enum": [ + "replace", + "append", + "keep", + "prepend", + "append_rp", + "prepend_rp" + ], + "default": "append_rp", + "title": "Custom Structured Configuration List Merge" + }, + "custom_structured_configuration_prefix": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Custom EOS Structured Configuration keys can be set on any group or host_var level using the name\nof the corresponding `eos_cli_config_gen` key prefixed with content of `custom_structured_configuration_prefix`.\n\nThe content of Custom Structured Configuration variables will be merged with the structured config generated by the eos_designs role.\n\nThe merge is done recursively, so it is possible to update a sub-key of a variable set by `eos_designs` role already.\n\nThe merge follow these recursive merge strategies:\n- New keys will be added for all types.\n- Existing keys of type \"List\" with a \"Primary key\" set in the schema:\n - Strategy can be changed with `custom_structured_configuration_list_merge`. Default strategy:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be appended to the existing list\n- Other keys of type \"List\" will have new unique items appended the the existing list.\n- Existing keys of type \"Dictionary\" will recursively merge\n- Other existing keys will be replaced.\n", + "default": [ + "custom_structured_configuration_" + ], + "title": "Custom Structured Configuration Prefix" + }, + "cvp_ingestauth_key": { + "type": "string", + "description": "On-premise CVP ingest auth key. If set, TerminAttr will be configured with key-based authentication for on-premise CVP.\nIf not set, TerminAttr will be configured with certificate based authentication:\n- On-premise using token onboarding. Default token path is '/tmp/token'.\n- CVaaS using token-secure onboarding. Default token path is '/tmp/cv-onboarding-token'.\nToken must be copied to the device first.", + "title": "CVP Ingestauth Key" + }, + "cvp_instance_ip": { + "type": "string", + "description": "IPv4 address or DNS name for CloudVision.\nThis variable only supports an on-premise single-node cluster or the DNS name of a CloudVision as a Service instance.\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use cvp_instance_ips instead.", + "deprecated": true, + "title": "CVP Instance IP" + }, + "cvp_instance_ips": { + "type": "array", + "description": "List of IPv4 addresses or DNS names for CloudVision.\nFor on-premise CloudVision enter all the nodes of the cluster.\nFor CloudVision as a Service enter the DNS name of the instance.\n`eos_designs` only supports one CloudVision cluster.\n", + "items": { + "type": "string", + "description": "IPv4 address or DNS name for CloudVision" + }, + "title": "CVP Instance Ips" + }, + "cvp_token_file": { + "type": "string", + "description": "cvp_token_file is the path to the token file on the switch.\nIf not set the default locations for on-premise or CVaaS will be used.\nSee cvp_ingestauth_key for details.", + "title": "CVP Token File" + }, + "dc_name": { + "description": "POD Name is used in:\n- Fabric Documentation (Optional, falls back to fabric_name)\n- SNMP Location: `snmp_settings.location` (Optional)\n- HER Overlay DC scoped flood lists: `overlay_her_flood_list_scope: dc` (Required)\n", + "type": "string", + "title": "DC Name" + }, + "default_igmp_snooping_enabled": { + "description": "When set to false, disables IGMP snooping at fabric level and overrides per vlan settings.\n", + "type": "boolean", + "default": true, + "title": "Default IGMP Snooping Enabled" + }, + "default_interfaces": { "type": "array", + "description": "Default uplink, downlink, and MLAG interfaces, which will be used if these interfaces are not defined on a device (either directly or through inheritance).\n", "items": { "type": "object", "properties": { - "name": { - "description": "Username", - "type": "string", - "title": "Name" - }, - "disabled": { - "type": "boolean", - "description": "If true, the user will be removed and all other settings are ignored.\nUseful for removing the default \"admin\" user.\n", - "title": "Disabled" - }, - "privilege": { - "type": "integer", - "minimum": 0, - "maximum": 15, - "description": "Initial privilege level with local EXEC authorization.\n", - "title": "Privilege" - }, - "role": { - "type": "string", - "description": "EOS RBAC Role to be assigned to the user such as \"network-admin\" or \"network-operator\"\n", - "title": "Role" + "types": { + "type": "array", + "description": "List of node type keys.", + "items": { + "type": "string" + }, + "title": "Types" }, - "sha512_password": { - "type": "string", - "description": "SHA512 Hash of Password\nMust be the hash of the password. By default EOS salts the password with the username, so the simplest is to generate the hash on an EOS device using the same username.\n", - "title": "SHA512 Password" + "platforms": { + "type": "array", + "description": "List of platform families.\nThis is defined as a Python regular expression that matches the full platform type.\n", + "items": { + "type": "string", + "description": "Arista platform family regular expression." + }, + "title": "Platforms" }, - "no_password": { - "type": "boolean", - "description": "If set a password will not be configured for this user. \"sha512_password\" MUST not be defined for this user.\n", - "title": "No Password" + "uplink_interfaces": { + "type": "array", + "description": "List of uplink interfaces or uplink interface ranges.", + "items": { + "type": "string", + "description": "Interface range or interface." + }, + "title": "Uplink Interfaces" }, - "ssh_key": { - "type": "string", - "title": "SSH Key" + "mlag_interfaces": { + "type": "array", + "description": "List of MLAG interfaces or MLAG interface ranges.", + "items": { + "type": "string", + "description": "Interface range or interface." + }, + "title": "MLAG Interfaces" }, - "shell": { - "type": "string", - "description": "Specify shell for the user\n", - "enum": [ - "/bin/bash", - "/bin/sh", - "/sbin/nologin" - ], - "title": "Shell" + "downlink_interfaces": { + "type": "array", + "description": "List of downlink interfaces or downlink interface ranges.", + "items": { + "type": "string", + "description": "Interface range or interface." + }, + "title": "Downlink Interfaces" } }, "required": [ - "name" + "types", + "platforms" ], "additionalProperties": false, "patternProperties": { "^_.+$": {} } }, - "title": "Local Users" + "title": "Default Interfaces" }, - "mac_address_table": { - "type": "object", - "description": "MAC address-table aging time.\nUse to change the EOS default of 300.\n", - "properties": { - "aging_time": { - "type": "integer", - "description": "Aging time in seconds 10-1000000.\nEnter 0 to disable aging.\n", - "minimum": 0, - "maximum": 1000000, - "title": "Aging Time" + "default_node_types": { + "type": "array", + "description": "Uses hostname matches against a regular expression to determine the node type.", + "items": { + "type": "object", + "properties": { + "node_type": { + "type": "string", + "description": "Resulting node type when regex matches.", + "title": "Node Type" + }, + "match_hostnames": { + "type": "array", + "description": "Regular expressions to match against hostnames.", + "items": { + "type": "string", + "description": "Regex needs to match full hostname (i.e. is bounded by ^ and $ elements)." + }, + "title": "Match Hostnames" + } + }, + "required": [ + "match_hostnames", + "node_type" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} } }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MAC Address Table" + "title": "Default Node Types" }, - "management_eapi": { - "description": "Default is HTTPS management eAPI enabled.\nThe VRF is set to < mgmt_interface_vrf >.\n", + "design": { "type": "object", "properties": { - "enable_http": { - "type": "boolean", - "default": false, - "title": "Enable HTTP" - }, - "enable_https": { - "type": "boolean", - "default": true, - "title": "Enable Https" - }, - "default_services": { - "type": "boolean", - "title": "Default Services" + "type": { + "type": "string", + "description": "By setting the design.type variable, the default node-types and templates described in these documents will be used.\n", + "enum": [ + "l3ls-evpn", + "mpls", + "l2ls" + ], + "default": "l3ls-evpn", + "title": "Type" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Management Eapi" + "title": "Design" }, - "mgmt_destination_networks": { + "enable_trunk_groups": { + "type": "boolean", + "description": "Enable Trunk Group support across eos_designs.\nWarning: Because of the nature of the EOS Trunk Group feature, enabling this is \"all or nothing\".\n*All* vlans and *all* trunks towards connected endpoints must be using trunk groups as well.\nIf trunk groups are not assigned to a trunk, no vlans will be enabled on that trunk.\nSee \"Details on enable_trunk_groups\" below before enabling this feature.\n", + "default": false, + "title": "Enable Trunk Groups" + }, + "eos_designs_custom_templates": { "type": "array", - "description": "List of IPv4 prefixes to configure as static routes towards the OOB Management interface gateway.\nReplaces the default route.", "items": { - "type": "string", - "description": "IPv4_address/Mask." + "type": "object", + "properties": { + "template": { + "type": "string", + "description": "Template file.", + "title": "Template" + }, + "options": { + "description": "Template options.", + "type": "object", + "properties": { + "list_merge": { + "type": "string", + "description": "Merge strategy for lists.", + "default": "append_rp", + "title": "List Merge" + }, + "strip_empty_keys": { + "type": "boolean", + "description": "Filter out keys from the generated output if value is null/none/undefined.", + "default": true, + "title": "Strip Empty Keys" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Options" + } + }, + "required": [ + "template" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } }, - "title": "Management Destination Networks" - }, - "mgmt_gateway": { - "type": "string", - "description": "OOB Management interface gateway in IPv4 format.\nUsed as next-hop for default gateway or static routes defined under 'mgmt_destination_networks'.", - "title": "Management Gateway" - }, - "mgmt_interface": { - "type": "string", - "default": "Management1", - "description": "OOB Management interface.", - "title": "Management Interface" - }, - "mgmt_interface_description": { - "type": "string", - "description": "Management interface description.\n", - "default": "oob_management", - "title": "Management Interface Description" - }, - "mgmt_interface_vrf": { - "type": "string", - "default": "MGMT", - "description": "OOB Management VRF.", - "title": "Management Interface VRF" - }, - "mgmt_vrf_routing": { - "type": "boolean", - "default": false, - "description": "Configure IP routing for the OOB Management VRF.", - "title": "Management VRF Routing" + "title": "EOS Designs Custom Templates" }, - "mlag_ibgp_peering_vrfs": { + "eos_designs_documentation": { + "description": "Control fabric documentation generation.\n", "type": "object", - "description": "On mlag leafs, an SVI interface is defined per vrf, to establish iBGP peering (required when there are MLAG leafs in topology).\nThe SVI id will be derived from the base vlan defined: mlag_ibgp_peering_vrfs.base_vlan + (vrf_id or vrf_vni) - 1.\nDepending on the values of vrf_id / vrf_vni it may be required to adjust the base_vlan to avoid overlaps or invalid vlan ids.\nThe SVI ip address derived from mlag_l3_peer_ipv4_pool is re-used across all iBGP peerings.\n", "properties": { - "base_vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4093, - "default": 3000, - "title": "Base VLAN" + "connected_endpoints": { + "description": "Generate fabric-wide documentation for connected endpoints.\n", + "type": "boolean", + "default": false, + "title": "Connected Endpoints" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "MLAG Ibgp Peering VRFs" + "title": "EOS Designs Documentation" }, - "name_servers": { - "type": "array", - "description": "List of DNS servers. The VRF is set to < mgmt_interface_vrf >.", - "items": { - "type": "string", - "description": "IPv4 address" - }, - "title": "Name Servers" - }, - "network_ports": { + "event_handlers": { "type": "array", + "description": "Gives the ability to monitor and react to Syslog messages.\nEvent Handlers provide a powerful and flexible tool that can be used to apply self-healing actions,\ncustomize the system behavior, and implement workarounds to problems discovered in the field.\n", "items": { "type": "object", "properties": { - "switches": { - "type": "array", - "description": "Regex matching the full hostname of one or more switches.\nThe regular expression must match the full hostname.\n", - "items": { - "type": "string" - }, - "title": "Switches" - }, - "switch_ports": { - "type": "array", - "description": "List of ranges using AVD range_expand syntax.\nFor example:\n\nswitch_ports:\n - Ethernet1\n - Ethernet2-48\n\nAll switch_ports ranges are expanded into individual port configurations.\n\nFor more details and examples of the `range_expand` syntax, see the [arista.avd.range_expand documentation](../../../plugins/README.md#range_expand-filter)\n", - "items": { - "type": "string" - }, - "title": "Switch Ports" - }, - "description": { - "type": "string", - "description": "Description to be used on all ports.", - "title": "Description" - }, - "speed": { - "type": "string", - "description": "Set adapter speed: `< interface_speed >`, `forced < interface_speed >`, `auto < interface_speed >`.\nIf not specified will be auto.\n", - "title": "Speed" - }, - "profile": { + "name": { "type": "string", - "description": "Port-profile name to inherit configuration.", - "title": "Profile" - }, - "enabled": { - "type": "boolean", - "description": "Administrative state, setting to false will set the port to 'shutdown' in the intended configuration.\n", - "default": true, - "title": "Enabled" + "description": "Event Handler Name", + "title": "Name" }, - "mode": { + "action_type": { "type": "string", "enum": [ - "access", - "dot1q-tunnel", - "trunk", - "trunk phone" + "bash", + "increment", + "log" ], - "description": "Interface mode.", - "title": "Mode" - }, - "mtu": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "title": "MTU" - }, - "l2_mtu": { - "type": "integer", - "minimum": 68, - "maximum": 9416, - "description": "This should only be defined for platforms supporting the \"l2 mtu\" CLI command.", - "title": "L2 MTU" - }, - "native_vlan": { - "type": "integer", - "description": "Native VLAN for a trunk port.\nIf both `native_vlan` and `native_vlan_tag`, `native_vlan_tag` takes precedence.\n", - "minimum": 1, - "maximum": 4094, - "title": "Native VLAN" - }, - "native_vlan_tag": { - "type": "boolean", - "default": false, - "description": "If both `native_vlan` and `native_vlan_tag`, `native_vlan_tag` takes precedence.", - "title": "Native VLAN Tag" - }, - "trunk_groups": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Required with `enable_trunk_groups: true`.\nTrunk Groups are used for limiting VLANs on trunk ports to VLANs with the same Trunk Group.\n", - "title": "Trunk Groups" - }, - "vlans": { - "type": "string", - "description": "Interface VLANs - if not set, the EOS default is that all VLANs are allowed for trunk ports, and VLAN 1 will be used for access ports.", - "title": "VLANs" + "title": "Action Type" }, - "spanning_tree_portfast": { + "action": { "type": "string", - "enum": [ - "edge", - "network" - ], - "title": "Spanning Tree Portfast" + "description": "Command to execute\n", + "title": "Action" }, - "spanning_tree_bpdufilter": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpdufilter" + "delay": { + "type": "integer", + "description": "Event-handler delay in seconds\n", + "title": "Delay" }, - "spanning_tree_bpduguard": { + "trigger": { "type": "string", + "description": "Configure event trigger condition.\n", "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" + "on-logging", + "on-startup-config" ], - "title": "Spanning Tree Bpduguard" - }, - "flowcontrol": { - "type": "object", - "properties": { - "received": { - "type": "string", - "enum": [ - "received", - "send", - "on" - ], - "title": "Received" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Flowcontrol" + "title": "Trigger" }, - "qos_profile": { + "regex": { "type": "string", - "description": "QOS profile name", - "title": "QOS Profile" - }, - "ptp": { - "type": "object", - "description": "The global PTP profile parameters will be applied to all connected endpoints where `ptp` is manually enabled.\n`ptp role master` is set to ensure control over the PTP topology.\n", - "properties": { - "enabled": { - "type": "boolean", - "default": false, - "title": "Enabled" - }, - "endpoint_role": { - "type": "string", - "default": "follower", - "enum": [ - "bmca", - "default", - "follower" - ], - "title": "Endpoint Role" - }, - "profile": { - "type": "string", - "default": "aes67-r16-2016", - "enum": [ - "aes67", - "aes67-r16-2016", - "smpte2059-2" - ], - "title": "Profile" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PTP" + "description": "Regular expression to use for searching log messages. Required for on-logging trigger\n", + "title": "Regex" }, - "sflow": { + "asynchronous": { "type": "boolean", - "description": "Configures sFlow on the interface. Overrides `fabric_sflow` setting.\n", - "title": "Sflow" - }, - "link_tracking": { - "type": "object", - "description": "Configure the downstream interfaces of a respective Link Tracking Group.\nIf `port_channel` is defined in an adapter, then the port-channel interface is configured to be the downstream.\nElse all the ethernet interfaces will be configured as downstream -> to configure single-active EVPN multihomed networks.\n", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "name": { - "type": "string", - "description": "Tracking group name.\nThe default group name is taken from fabric variable of the switch, `link_tracking.groups[0].name` with default value being \"LT_GROUP1\".\nOptional if default link_tracking settings are configured on the node.\n", - "title": "Name" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Link Tracking" - }, - "dot1x": { - "type": "object", - "description": "802.1x", - "properties": { - "port_control": { - "type": "string", - "enum": [ - "auto", - "force-authorized", - "force-unauthorized" - ], - "title": "Port Control" - }, - "port_control_force_authorized_phone": { - "type": "boolean", - "title": "Port Control Force Authorized Phone" - }, - "reauthentication": { - "type": "boolean", - "title": "Reauthentication" - }, - "pae": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "authenticator" - ], - "title": "Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PAE" + "default": false, + "description": "Set the action to be non-blocking.", + "title": "Asynchronous" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "Event Handlers" + }, + "evpn_ebgp_gateway_inter_domain": { + "type": "boolean", + "title": "EVPN Ebgp Gateway Inter Domain" + }, + "evpn_ebgp_gateway_multihop": { + "description": "Default of 15, considering a large value to avoid BGP reachability issues in very complex DCI networks.\nAdapt the value for your specific topology.\n", + "type": "integer", + "default": 15, + "title": "EVPN Ebgp Gateway Multihop" + }, + "evpn_ebgp_multihop": { + "description": "Default of 3, the recommended value for a 3 stage spine and leaf topology.\nSet to a higher value to allow for very large and complex topologies.\n", + "type": "integer", + "default": 3, + "title": "EVPN Ebgp Multihop" + }, + "evpn_hostflap_detection": { + "type": "object", + "properties": { + "enabled": { + "description": "If set to false it will disable EVPN host-flap detection.", + "type": "boolean", + "default": true, + "title": "Enabled" + }, + "threshold": { + "description": "Minimum number of MAC moves that indicate a MAC duplication issue.", + "type": "integer", + "default": 5, + "title": "Threshold" + }, + "window": { + "description": "Time (in seconds) to detect a MAC duplication issue.", + "type": "integer", + "default": 180, + "title": "Window" + }, + "expiry_timeout": { + "description": "Time (in seconds) to purge a MAC duplication issue.", + "type": "integer", + "title": "Expiry Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN Hostflap Detection" + }, + "evpn_import_pruning": { + "description": "Enable VPN import pruning (Min. EOS 4.24.2F).\nThe Route Target extended communities carried by incoming VPN paths will be examined.\nIf none of those Route Targets have been configured for import, the path will be immediately discarded.\n", + "type": "boolean", + "default": false, + "title": "EVPN Import Pruning" + }, + "evpn_multicast": { + "type": "boolean", + "description": "General Configuration required for EVPN Multicast. \"evpn_l2_multicast\" or \"evpn_l3_multicast\" must also be configured under the Network Services (tenants).\nRequires \"underlay_multicast: true\" and IGMP snooping enabled globally (default).\nFor MLAG devices Route Distinguisher must be unique since this feature will create multi-vtep configuration.\nWarning !!! For Trident3 based platforms i.e 7050X3, 7300X3, 720XP and 722XP\n The Following default platform setting will be configured: \"platform trident forwarding-table partition flexible exact-match 16384 l2-shared 98304 l3-shared 131072\"\n All forwarding agents will be restarted when this configuration is applied.\n You can tune the settings by overridding the default variable: \"platform_settings[platforms].trident_forwarding_table_partition:\"\n Please contact an Arista representative for help with determining the appropriate values for your environment.\n", + "default": false, + "title": "EVPN Multicast" + }, + "evpn_overlay_bgp_rtc": { + "description": "Enable Route Target Membership Constraint Address Family on EVPN overlay BGP peerings (Min. EOS 4.25.1F).\nRequires use eBGP as overlay protocol.\n", + "type": "boolean", + "default": false, + "title": "EVPN Overlay BGP Rtc" + }, + "evpn_prevent_readvertise_to_server": { + "description": "Configure route-map on eBGP sessions towards route-servers, where prefixes with the peer's ASN in the AS Path are filtered away.\nThis is very useful in large-scale networks, where convergence will be quicker by not returning all updates received\nfrom Route-server-1 to Router-server-2 just for Route-server-2 to throw them away because of AS Path loop detection.\n", + "type": "boolean", + "default": false, + "title": "EVPN Prevent Readvertise To Server" + }, + "evpn_short_esi_prefix": { + "description": "Configure prefix for \"short_esi\" values.", + "type": "string", + "default": "0000:0000:", + "title": "EVPN Short Esi Prefix" + }, + "evpn_vlan_aware_bundles": { + "description": "Enable vlan aware bundles for EVPN MAC-VRF.", + "type": "boolean", + "default": false, + "title": "EVPN VLAN Aware Bundles" + }, + "fabric_evpn_encapsulation": { + "description": "Should be set to mpls for evpn-mpls scenario.", + "enum": [ + "vxlan", + "mpls" + ], + "default": "vxlan", + "type": "string", + "title": "Fabric EVPN Encapsulation" + }, + "fabric_ip_addressing": { + "type": "object", + "properties": { + "mlag": { + "type": "object", + "properties": { + "algorithm": { + "type": "string", + "default": "first_id", + "description": "This variable defines the Multi-chassis Link Aggregation (MLAG) algorithm used.\nEach MLAG link will have a /31 subnet with each subnet allocated from the relevant MLAG pool via a calculated offset.\nThe offset is calculated using one of the following algorithms:\n - first_id: `(mlag_primary_id - 1) * 2` where `mlag_primary_id` is the ID of the first node defined under the node_group.\n This allocation method will skip every other /31 subnet making it less space efficient than `odd_id`.\n - odd_id: `(odd_id - 1) / 2`. Requires the node_group to have a node with an odd ID and a node with an even ID.\n - same_subnet: the offset will always be zero.\n This allocation method will cause every MLAG link to be addressed with the same /31 subnet.\n", + "enum": [ + "first_id", + "odd_id", + "same_subnet" + ], + "title": "Algorithm" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MLAG" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Fabric IP Addressing" + }, + "fabric_name": { + "description": "Fabric Name, required to match Ansible Group name covering all devices in the Fabric, **must** be an inventory group name.", + "type": "string", + "title": "Fabric Name" + }, + "hardware_counters": { + "type": "object", + "properties": { + "features": { + "type": "array", + "description": "This data model allows to configure the list of hardware counters feature\navailable on Arista platforms.\n\nThe `name` key accepts a list of valid_values which MUST be updated to support\nnew feature as they are released in EOS.\n\nThe available values of the different keys like 'direction' or 'address_type'\nare feature and hardware dependent and this model DOES NOT validate that the\ncombinations are valid. It is the responsability of the user of this data model\nto make sure that the rendered CLI is accepted by the targeted device.\n\nExamples:\n\n * Use:\n ```yaml\n hardware_counters:\n features:\n - name: ip\n direction: out\n layer3: true\n units_packets: true\n ```\n\n to render:\n ```eos\n hardware counter feature ip out layer3 units packets\n ```\n * Use:\n ```yaml\n hardware_counters:\n features:\n - name: route\n address_type: ipv4\n vrf: test\n prefix: 192.168.0.0/24\n ```\n\n to render:\n ```eos\n hardware counter feature route ipv4 vrf test 192.168.0.0/24\n ```\n", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "acl", + "decap-group", + "directflow", + "ecn", + "flow-spec", + "gre tunnel interface", + "ip", + "mpls interface", + "mpls lfib", + "mpls tunnel", + "multicast", + "nexthop", + "pbr", + "pdp", + "policing interface", + "qos", + "qos dual-rate-policer", + "route", + "routed-port", + "subinterface", + "tapagg", + "traffic-class", + "traffic-policy", + "vlan", + "vlan-interface", + "vni decap", + "vni encap", + "vtep decap", + "vtep encap" + ], + "title": "Name" }, - "authentication_failure": { - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "allow", - "drop" - ], - "title": "Action" - }, - "allow_vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "Allow VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Authentication Failure" + "direction": { + "type": "string", + "enum": [ + "in", + "out", + "cpu" + ], + "description": "Most features support only 'in' and 'out'. Some like traffic-policy support 'cpu'.\nSome features DO NOT have any direction.\nThis validation IS NOT made by the schemas.\n", + "title": "Direction" }, - "host_mode": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "multi-host", - "single-host" - ], - "title": "Mode" - }, - "multi_host_authenticated": { - "type": "boolean", - "title": "Multi Host Authenticated" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Host Mode" + "address_type": { + "type": "string", + "enum": [ + "ipv4", + "ipv6", + "mac" + ], + "description": "Supported only for the following features:\n- acl: [ipv4, ipv6, mac] if direction is 'out'\n- multicast: [ipv4, ipv6]\n- route: [ipv4, ipv6]\nThis validation IS NOT made by the schemas.\n", + "title": "Address Type" }, - "mac_based_authentication": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "always": { - "type": "boolean", - "title": "Always" - }, - "host_mode_common": { - "type": "boolean", - "title": "Host Mode Common" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MAC Based Authentication" - }, - "timeout": { - "type": "object", - "properties": { - "idle_host": { - "type": "integer", - "minimum": 10, - "maximum": 65535, - "title": "Idle Host" - }, - "quiet_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Quiet Period" - }, - "reauth_period": { - "type": "string", - "description": "Range 60-4294967295 or \"server\".", - "title": "Reauth Period" - }, - "reauth_timeout_ignore": { - "type": "boolean", - "title": "Reauth Timeout Ignore" - }, - "tx_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "TX Period" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Timeout" - }, - "reauthorization_request_limit": { - "type": "integer", - "minimum": 1, - "maximum": 10, - "title": "Reauthorization Request Limit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "dot1x" - }, - "poe": { - "type": "object", - "description": "Power Over Ethernet settings applied on port. Only configured if platform supports PoE.", - "properties": { - "disabled": { + "layer3": { "type": "boolean", - "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", - "default": false, - "title": "Disabled" + "description": "Supported only for the 'ip' feature\n", + "title": "Layer3" }, - "priority": { + "vrf": { "type": "string", - "enum": [ - "critical", - "high", - "medium", - "low" - ], - "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", - "title": "Priority" - }, - "reboot": { - "description": "Set the PoE power behavior for a PoE port when the system is rebooted", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Reboot" - }, - "link_down": { - "description": "Set the PoE power behavior for a PoE port when the port goes down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - }, - "power_off_delay": { - "type": "integer", - "minimum": 1, - "maximum": 86400, - "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", - "title": "Power Off Delay" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Link Down" - }, - "shutdown": { - "description": "Set the PoE power behavior for a PoE port when the port is admin down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Shutdown" - }, - "limit": { - "type": "object", - "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", - "properties": { - "class": { - "type": "integer", - "minimum": 0, - "maximum": 8, - "title": "Class" - }, - "watts": { - "type": "string", - "title": "Watts" - }, - "fixed": { - "type": "boolean", - "description": "Set to ignore hardware classification", - "title": "Fixed" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Limit" + "description": "Supported only for the 'route' feature.\nThis validation IS NOT made by the schemas.\n", + "title": "VRF" }, - "negotiation_lldp": { - "type": "boolean", - "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", - "title": "Negotiation LLDP" + "prefix": { + "type": "string", + "description": "Supported only for the 'route' feature.\nMandatory for the 'route' feature.\nThis validation IS NOT made by the schemas.\n", + "title": "Prefix" }, - "legacy_detect": { + "units_packets": { "type": "boolean", - "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", - "title": "Legacy Detect" + "title": "Units Packets" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} + } + }, + "title": "Features" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Hardware Counters" + }, + "internal_vlan_order": { + "type": "object", + "description": "Internal vlan allocation order and range.", + "properties": { + "allocation": { + "type": "string", + "enum": [ + "ascending", + "descending" + ], + "title": "Allocation" + }, + "range": { + "type": "object", + "properties": { + "beginning": { + "type": "integer", + "description": "First VLAN ID.", + "minimum": 2, + "maximum": 4094, + "title": "Beginning" }, - "title": "PoE" + "ending": { + "type": "integer", + "description": "Last VLAN ID.", + "minimum": 2, + "maximum": 4094, + "title": "Ending" + } }, - "storm_control": { - "type": "object", - "description": "Storm control settings applied on port toward the endpoint.", - "properties": { - "all": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level.", - "title": "Level" - }, - "unit": { - "type": "string", - "enum": [ - "percent", - "pps" - ], - "default": "percent", - "description": "Optional variable and is hardware dependent.", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "All" - }, - "broadcast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level.", - "title": "Level" - }, - "unit": { - "type": "string", - "enum": [ - "percent", - "pps" - ], - "default": "percent", - "description": "Optional variable and is hardware dependent.", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Broadcast" + "required": [ + "beginning", + "ending" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Range" + } + }, + "required": [ + "allocation" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "default": { + "allocation": "ascending", + "range": { + "beginning": 1006, + "ending": 1199 + } + }, + "title": "Internal VLAN Order" + }, + "ipv6_mgmt_destination_networks": { + "description": "List of IPv6 prefixes to configure as static routes towards the OOB IPv6 Management interface gateway.\nReplaces the default route.\n", + "type": "array", + "items": { + "type": "string", + "description": "IPv6_network/Mask." + }, + "title": "IPv6 Management Destination Networks" + }, + "ipv6_mgmt_gateway": { + "type": "string", + "format": "ipv6", + "description": "OOB Management interface gateway in IPv6 format.\nUsed as next-hop for default gateway or static routes defined under 'ipv6_mgmt_destination_networks'.", + "title": "IPv6 Management Gateway" + }, + "is_deployed": { + "description": "Is device already deployed in the fabric.\nWhen set to false, interfaces toward this device may be shutdown depending on the `shutdown_interfaces_towards_undeployed_peers` setting.\nFurthermore `eos_config_deploy_cvp` will not attempt to move or apply configurations to the device.\n", + "type": "boolean", + "default": true, + "title": "IS Deployed" + }, + "isis_advertise_passive_only": { + "type": "boolean", + "default": false, + "title": "ISIS Advertise Passive Only" + }, + "isis_area_id": { + "type": "string", + "default": "49.0001", + "title": "ISIS Area ID" + }, + "isis_default_circuit_type": { + "type": "string", + "enum": [ + "level-1-2", + "level-1", + "level-2" + ], + "default": "level-2", + "description": "These fabric level parameters can be used with core_interfaces running ISIS, and may be overridden on link profile or link level.", + "title": "ISIS Default Circuit Type" + }, + "isis_default_is_type": { + "type": "string", + "enum": [ + "level-1-2", + "level-1", + "level-2" + ], + "default": "level-2", + "title": "ISIS Default IS Type" + }, + "isis_default_metric": { + "type": "integer", + "default": 50, + "description": "These fabric level parameters can be used with core_interfaces running ISIS, and may be overridden at link profile or link level.", + "title": "ISIS Default Metric" + }, + "isis_maximum_paths": { + "description": "Number of path to configure in ECMP for ISIS.", + "type": "integer", + "title": "ISIS Maximum Paths" + }, + "isis_ti_lfa": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": false, + "title": "Enabled" + }, + "protection": { + "type": "string", + "enum": [ + "link", + "node" + ], + "title": "Protection" + }, + "local_convergence_delay": { + "description": "Local convergence delay in milliseconds.", + "type": "integer", + "default": 10000, + "title": "Local Convergence Delay" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "ISIS TI LFA" + }, + "l3_edge": { + "type": "object", + "properties": { + "p2p_links_ip_pools": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "P2P pool name.", + "title": "Name" }, - "multicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level.", - "title": "Level" - }, - "unit": { - "type": "string", - "enum": [ - "percent", - "pps" - ], - "default": "percent", - "description": "Optional variable and is hardware dependent.", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Multicast" + "ipv4_pool": { + "type": "string", + "description": "IPv4 address/Mask.", + "title": "IPv4 Pool" }, - "unknown_unicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level.", - "title": "Level" - }, - "unit": { - "type": "string", - "enum": [ - "percent", - "pps" - ], - "default": "percent", - "description": "Optional variable and is hardware dependent.", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Unknown Unicast" + "prefix_size": { + "type": "integer", + "description": "Subnet mask size.", + "default": 31, + "minimum": 8, + "maximum": 31, + "title": "Prefix Size" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Storm Control" + "required": [ + "name" + ] }, - "monitor_sessions": { - "type": "array", - "description": "Used to define switchports as source or destination for monitoring sessions.", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Session name.", - "title": "Name" - }, - "role": { - "type": "string", - "enum": [ - "source", - "destination" - ], - "title": "Role" - }, - "source_settings": { - "type": "object", - "properties": { - "direction": { - "type": "string", - "enum": [ - "rx", - "tx", - "both" - ], - "title": "Direction" - }, - "access_group": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip", - "ipv6", - "mac" - ], - "title": "Type" - }, - "name": { - "description": "ACL name.", - "type": "string", - "title": "Name" - }, - "priority": { - "type": "integer", - "title": "Priority" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Access Group" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Source Settings" - }, - "session_settings": { - "type": "object", - "description": "Session settings are defined per session name.\nDifferent session_settings for the same session name will be combined/merged.\n", - "properties": { - "encapsulation_gre_metadata_tx": { - "type": "boolean", - "title": "Encapsulation Gre Metadata TX" - }, - "header_remove_size": { - "type": "integer", - "description": "Number of bytes to remove from header.", - "title": "Header Remove Size" - }, - "access_group": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip", - "ipv6", - "mac" - ], - "title": "Type" - }, - "name": { - "description": "ACL name.", - "type": "string", - "title": "Name" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Access Group" - }, - "rate_limit_per_ingress_chip": { - "type": "string", - "description": "Ratelimit and unit as string.\nExamples:\n \"100000 bps\"\n \"100 kbps\"\n \"10 mbps\"\n", - "title": "Rate Limit Per Ingress Chip" - }, - "rate_limit_per_egress_chip": { - "type": "string", - "description": "Ratelimit and unit as string.\nExamples:\n \"100000 bps\"\n \"100 kbps\"\n \"10 mbps\"\n", - "title": "Rate Limit Per Egress Chip" - }, - "sample": { - "type": "integer", - "title": "Sample" - }, - "truncate": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "size": { - "type": "integer", - "description": "Size in bytes", - "title": "Size" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Truncate" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Session Settings" - } - }, - "required": [ - "name" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Monitor Sessions" - }, - "ethernet_segment": { + "title": "P2P Links IP Pools" + }, + "p2p_links_profiles": { + "type": "array", + "items": { "type": "object", - "description": "Settings for all or single-active EVPN multihoming.", "properties": { - "short_esi": { + "name": { "type": "string", - "description": "In format xxxx:xxxx:xxxx or \"auto\".\nDefine a manual short-esi (be careful using this on profiles) or set the value to \"auto\" to automatically generate the value.\nPlease see the notes under \"EVPN A/A ESI dual and single-attached endpoint scenarios\" before setting `short_esi: auto`.\n", - "title": "Short Esi" + "description": "P2P profile name. Any variable supported under p2p_links can be inherited from a profile.", + "title": "Name" }, - "redundancy": { + "id": { + "type": "integer", + "description": "Unique id per subnet_summary. Used to calculate ip addresses.\nRequired with ip_pool. ID starting from 1.\n", + "title": "ID" + }, + "speed": { "type": "string", - "enum": [ - "all-active", - "single-active" - ], - "description": "If omitted, Port-Channels use the EOS default of all-active.\nIf omitted, Ethernet interfaces are configured as single-active.\n", - "title": "Redundancy" + "description": "The values can be speed or auto speed or forced speed.", + "title": "Speed" }, - "designated_forwarder_algorithm": { + "ip_pool": { "type": "string", - "enum": [ - "auto", - "modulus", - "preference" - ], - "description": "Configure DF algorithm and preferences.\n- auto: Use preference-based algorithm and assign preference based on position of device in the 'switches' list,\n e.g., assuming a list of three switches, this would assign a preference of 200 to the first switch, 100 to the 2nd, and 0 to the third.\n- preference: Set preference for each switch manually using designated_forwarder_preferences key.\n- modulus: Use the default modulus-based algorithm.\nIf omitted, Port-Channels use the EOS default of modulus.\nIf omitted, Ethernet interfaces default to the 'auto' mechanism detailed above.\n", - "title": "Designated Forwarder Algorithm" + "description": "P2P pool name. IP Pool defined under p2p_links_ip_pools. A /31 will be taken from the pool per P2P link.", + "title": "IP Pool" }, - "designated_forwarder_preferences": { + "subnet": { + "type": "string", + "description": "IPv4 address/Mask. Subnet used on this P2P link.", + "title": "Subnet" + }, + "ip": { "type": "array", - "description": "Manual preference as described above, required only for preference algorithm.", + "description": "Specific IP addresses used on this P2P link.", "items": { - "type": "string" + "type": "string", + "description": "Node IPv4 address/Mask." }, - "title": "Designated Forwarder Preferences" + "title": "IP" }, - "dont_preempt": { + "ipv6_enable": { "type": "boolean", - "description": "Disable preemption for single-active forwarding when auto/manual DF preference is configured.", - "title": "Dont Preempt" - } - }, - "required": [ - "short_esi" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Ethernet Segment" - }, - "port_channel": { - "type": "object", - "description": "Used for port-channel adapter.", - "properties": { - "mode": { - "type": "string", - "description": "Port-Channel Mode.", - "enum": [ - "active", - "passive", - "on" - ], - "title": "Mode" + "default": false, + "description": "Allows turning on ipv6 for the link or profile (also autodetected based on underlay_rfc5549 and include_in_underlay_protocol).", + "title": "IPv6 Enable" }, - "channel_id": { - "type": "integer", - "description": "Port-Channel ID.\nIf no channel_id is specified, an id is generated from the first switch port in the port channel.\n", - "title": "Channel ID" + "nodes": { + "type": "array", + "description": "Nodes where this link should be configured.", + "items": { + "type": "string", + "description": "The values can be < node_a >, < node_b >.\nex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].\n" + }, + "title": "Nodes" }, - "description": { - "type": "string", - "description": "By default the description is built leveraging `` name or `adapter.description` when defined.\nWhen this key is defined, it will append its content to the physical port description.\n", - "title": "Description" + "interfaces": { + "type": "array", + "description": "Interfaces where this link should be configured and Required unless using port-channels.", + "items": { + "type": "string", + "description": "The value can be like < node_a_interface >, < node_b_interface >.\nex. - [ Ethernet2, Ethernet2 ].\n" + }, + "title": "Interfaces" }, - "enabled": { + "as": { + "type": "array", + "description": "AS numbers for BGP.\nRequired with bgp peering.\n", + "items": { + "type": "string", + "description": "The values can be like [\"node_a_as\", \"node_b_as\"]." + }, + "title": "As" + }, + "descriptions": { + "type": "array", + "description": "Interface description.", + "items": { + "type": "string" + }, + "title": "Descriptions" + }, + "include_in_underlay_protocol": { "type": "boolean", "default": true, - "description": "Port-Channel administrative state.\nSetting to false will set port to 'shutdown' in intended configuration.\n", - "title": "Enabled" + "description": "Add this interface to underlay routing protocol.", + "title": "Include In Underlay Protocol" }, - "short_esi": { + "isis_hello_padding": { + "type": "boolean", + "default": false, + "title": "ISIS Hello Padding" + }, + "isis_metric": { + "type": "integer", + "title": "ISIS Metric" + }, + "isis_circuit_type": { "type": "string", - "description": "In format xxxx:xxxx:xxxx or \"auto\".\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ethernet_segment.short_esi instead.", - "deprecated": true, - "title": "Short Esi" + "enum": [ + "level-1", + "level-2", + "level-1-2" + ], + "title": "ISIS Circuit Type" }, - "lacp_fallback": { + "isis_authentication_mode": { + "type": "string", + "enum": [ + "md5", + "text" + ], + "title": "ISIS Authentication Mode" + }, + "isis_authentication_key": { + "type": "string", + "description": "Type-7 encrypted password.", + "title": "ISIS Authentication Key" + }, + "mpls_ip": { + "type": "boolean", + "description": "MPLS parameters. Default value is true if switch.mpls_lsr is true.", + "title": "MPLS IP" + }, + "mpls_ldp": { + "type": "boolean", + "description": "MPLS parameters. Default value is true for ldp underlay variants, otherwise false.", + "title": "MPLS LDP" + }, + "mtu": { + "type": "integer", + "description": "MTU for this P2P link. Default value same as p2p_uplinks_mtu.", + "title": "MTU" + }, + "bfd": { + "type": "boolean", + "default": false, + "description": "Enable BFD (only considered for BGP).", + "title": "BFD" + }, + "ptp": { + "description": "PTP parameters.", "type": "object", - "description": "LACP fallback configuration.", "properties": { - "mode": { - "type": "string", - "enum": [ - "static" - ], - "description": "Currently only static mode is supported.", - "title": "Mode" - }, - "timeout": { - "type": "integer", - "description": "Timeout in seconds. EOS default is 90 seconds.", - "title": "Timeout" + "enabled": { + "type": "boolean", + "default": false, + "description": "Enable PTP.", + "title": "Enabled" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "LACP Fallback" + "title": "PTP" }, - "lacp_timer": { + "sflow": { + "type": "boolean", + "description": "Enable sFlow. Overrides `fabric_sflow` setting.", + "title": "Sflow" + }, + "qos_profile": { + "type": "string", + "description": "QOS service profile.", + "title": "QOS Profile" + }, + "macsec_profile": { + "type": "string", + "description": "MAC security profile.", + "title": "Macsec Profile" + }, + "port_channel": { + "description": "Port-channel parameters.", "type": "object", - "description": "LACP timer configuration. Applies only when Port-channel mode is not \"on\".", "properties": { "mode": { "type": "string", - "enum": [ - "normal", - "fast" - ], - "description": "LACP mode for interface members.", + "default": "active", "title": "Mode" }, - "multiplier": { - "type": "integer", - "description": "Number of LACP BPDUs lost before deeming the peer down. EOS default is 3.", - "title": "Multiplier" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LACP Timer" - }, - "subinterfaces": { - "type": "array", - "description": "Port-Channel L2 Subinterfaces\nSubinterfaces are only supported on routed port-channels, which means they cannot be configured on MLAG port-channels.\nSetting short_esi: auto generates the short_esi automatically using a hash of configuration elements.\nPlease see the notes under \"EVPN A/A ESI dual-attached endpoint scenario\" before setting short_esi: auto.\n", - "items": { - "type": "object", - "properties": { - "number": { - "type": "integer", - "description": "Subinterface number", - "title": "Number" - }, - "short_esi": { - "type": "string", - "description": "In format xxxx:xxxx:xxxx or \"auto\"\nRequired for multihomed port-channels with subinterfaces\n", - "title": "Short Esi" - }, - "vlan_id": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "description": "VLAN ID to bridge.\nDefault is subinterface number.\n", - "title": "VLAN ID" - }, - "encapsulation_vlan": { + "nodes_child_interfaces": { + "type": "array", + "items": { "type": "object", - "description": "Client VLAN ID encapsulation.\nDefault is subinterface number.\n", "properties": { - "client_dot1q": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "Client Dot1Q" + "node": { + "type": "string", + "title": "Node" + }, + "interfaces": { + "type": "array", + "description": "List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ].", + "items": { + "type": "string" + }, + "title": "Interfaces" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Encapsulation VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "required": [ + "node" + ] + }, + "title": "Nodes Child Interfaces" } }, - "title": "Subinterfaces" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Port Channel" }, "raw_eos_cli": { "type": "string", - "description": "EOS CLI rendered directly on the port-channel interface in the final EOS configuration.", + "description": "EOS CLI rendered directly on the point-to-point interface in the final EOS configuration.", "title": "Raw EOS CLI" }, "structured_config": { "type": "object", - "description": "Custom structured config added under port_channel_interfaces. for eos_cli_config_gen.", + "description": "Custom structured config for interfaces\nNote! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.", "title": "Structured Config" } }, @@ -3330,358 +3849,304 @@ "patternProperties": { "^_.+$": {} }, - "title": "Port Channel" - }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the ethernet interface in the final EOS configuration.", - "title": "Raw EOS CLI" + "required": [ + "name" + ] }, - "structured_config": { - "type": "object", - "description": "Custom structured config added under ethernet_interfaces. for eos_cli_config_gen.", - "title": "Structured Config" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Network Ports" - }, - "network_services_keys": { - "type": "array", - "description": "Network Services can be grouped by using separate keys.\nThe keys can be customized to provide a better better organization or grouping of your data.\n`network_services_keys` should be defined in the top level group_vars for the fabric.\nThe default values will be overridden if defining this key, so it is recommended to copy the defaults and modify them.\n", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Name" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "title": "P2P Links Profiles" }, - "required": [ - "name" - ] - }, - "default": [ - { - "name": "tenants" - } - ], - "title": "Network Services Keys" - }, - "node_type_keys": { - "type": "array", - "description": "Define Node Type Keys, to specify the properties of each node type in the fabric.\nThis allows for complete customization of the fabric layout and functionality.\n`node_type_keys` should be defined in top level group_var for the fabric.\nThe default values will be overridden if defining this key, so it is recommended to copy the defaults and modify them.\n", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "title": "Key" - }, - "type": { - "type": "string", - "description": "Type value matching this node_type_key.", - "title": "Type" - }, - "connected_endpoints": { - "type": "boolean", - "default": false, - "description": "Are endpoints connected to this node type.", - "title": "Connected Endpoints" - }, - "default_evpn_role": { - "type": "string", - "enum": [ - "none", - "client", - "server" - ], - "default": "none", - "description": "Default evpn_role. Can be overridden in topology vars.", - "title": "Default EVPN Role" - }, - "default_ptp_priority1": { - "type": "integer", - "minimum": 0, - "maximum": 255, - "default": 127, - "description": "Default PTP priority 1", - "title": "Default PTP Priority1" - }, - "default_underlay_routing_protocol": { - "type": "string", - "default": "ebgp", - "enum": [ - "ebgp", - "ibgp", - "ospf", - "ospf-ldp", - "isis", - "isis-sr", - "isis-ldp", - "isis-sr-ldp", - "none" - ], - "description": "Set the default underlay routing_protocol.\nCan be overridden by setting \"underlay_routing_protocol\" host/group_vars.\n", - "title": "Default Underlay Routing Protocol" - }, - "default_overlay_routing_protocol": { - "type": "string", - "default": "ebgp", - "enum": [ - "ebgp", - "ibgp", - "her", - "cvx", - "none" - ], - "description": "Set the default overlay routing_protocol.\nCan be overridden by setting \"overlay_routing_protocol\" host/group_vars.\n", - "title": "Default Overlay Routing Protocol" - }, - "default_mpls_overlay_role": { - "type": "string", - "enum": [ - "client", - "server", - "none" - ], - "description": "Set the default mpls overlay role.\nActing role in overlay control plane.\n", - "title": "Default MPLS Overlay Role" - }, - "default_overlay_address_families": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "evpn", - "vpn-ipv4", - "vpn-ipv6" - ] - }, - "description": "Set the default overlay address families.\n", - "title": "Default Overlay Address Families" - }, - "default_evpn_encapsulation": { - "type": "string", - "enum": [ - "mpls", - "vxlan" - ], - "description": "Set the default evpn encapsulation.\n", - "title": "Default EVPN Encapsulation" - }, - "mlag_support": { - "type": "boolean", - "default": false, - "description": "Can this node type support mlag.", - "title": "MLAG Support" - }, - "network_services": { - "description": "Will network services be deployed on this node type.", + "p2p_links": { + "type": "array", + "items": { "type": "object", "properties": { - "l1": { - "type": "boolean", - "default": false, - "description": "??", - "title": "L1" - }, - "l2": { - "type": "boolean", - "default": false, - "description": "Vlans", - "title": "L2" + "nodes": { + "type": "array", + "description": "Nodes where this link should be configured.", + "items": { + "type": "string", + "description": "The values can be < node_a >, < node_b >.\nex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].\n" + }, + "title": "Nodes" }, - "l3": { - "type": "boolean", - "default": false, - "description": "VRFs, SVIs (if l2 is true).\nOnly supported with underlay_router.\n", - "title": "L3" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Network Services" - }, - "underlay_router": { - "type": "boolean", - "default": true, - "description": "Is this node type a L3 device.", - "title": "Underlay Router" - }, - "uplink_type": { - "type": "string", - "enum": [ - "p2p", - "port-channel" - ], - "default": "p2p", - "description": "Uplinks must be p2p if \"vtep\" or \"underlay_router\" is true.", - "title": "Uplink Type" - }, - "vtep": { - "type": "boolean", - "default": false, - "description": "Is this switch an EVPN VTEP.", - "title": "Vtep" - }, - "mpls_lsr": { - "type": "boolean", - "default": false, - "description": "Is this switch an MPLS LSR.", - "title": "MPLS Lsr" - }, - "ip_addressing": { - "type": "object", - "description": "Override ip_addressing templates.", - "properties": { - "python_module": { + "profile": { "type": "string", - "description": "Custom Python Module to import for IP addressing.", - "title": "Python Module" + "description": "P2P profile name. Profile defined under p2p_profiles.", + "title": "Profile" }, - "python_class_name": { - "type": "string", - "description": "Name of Custom Python Class to import for IP addressing.", - "title": "Python Class Name" + "id": { + "type": "integer", + "description": "Unique id per subnet_summary. Used to calculate ip addresses.\nRequired with ip_pool. ID starting from 1.\n", + "title": "ID" }, - "router_id": { + "speed": { "type": "string", - "description": "Path to Custom J2 template.", - "title": "Router ID" + "description": "The values can be speed or auto speed or forced speed.", + "title": "Speed" }, - "router_id_ipv6": { + "ip_pool": { "type": "string", - "description": "Path to Custom J2 template.", - "title": "Router ID IPv6" + "description": "P2P pool name. IP Pool defined under p2p_links_ip_pools. A /31 will be taken from the pool per P2P link.", + "title": "IP Pool" }, - "mlag_ip_primary": { + "subnet": { "type": "string", - "description": "Path to Custom J2 template.", - "title": "MLAG IP Primary" + "description": "IPv4 address/Mask. Subnet used on this P2P link.", + "title": "Subnet" }, - "mlag_ip_secondary": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "MLAG IP Secondary" + "ip": { + "type": "array", + "description": "Specific IP addresses used on this P2P link.", + "items": { + "type": "string", + "description": "Node IPv4 address/Mask." + }, + "title": "IP" }, - "mlag_l3_ip_primary": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "MLAG L3 IP Primary" + "ipv6_enable": { + "type": "boolean", + "default": false, + "description": "Allows turning on ipv6 for the link or profile (also autodetected based on underlay_rfc5549 and include_in_underlay_protocol).", + "title": "IPv6 Enable" }, - "mlag_l3_ip_secondary": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "MLAG L3 IP Secondary" + "interfaces": { + "type": "array", + "description": "Interfaces where this link should be configured and Required unless using port-channels.", + "items": { + "type": "string", + "description": "The value can be like < node_a_interface >, < node_b_interface >.\nex. - [ Ethernet2, Ethernet2 ].\n" + }, + "title": "Interfaces" }, - "mlag_ibgp_peering_ip_primary": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "MLAG Ibgp Peering IP Primary" + "as": { + "type": "array", + "description": "AS numbers for BGP.\nRequired with bgp peering.\n", + "items": { + "type": "string", + "description": "The values can be like [\"node_a_as\", \"node_b_as\"]." + }, + "title": "As" }, - "mlag_ibgp_peering_ip_secondary": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "MLAG Ibgp Peering IP Secondary" + "descriptions": { + "type": "array", + "description": "Interface description.", + "items": { + "type": "string" + }, + "title": "Descriptions" }, - "p2p_uplinks_ip": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "P2P Uplinks IP" + "include_in_underlay_protocol": { + "type": "boolean", + "default": true, + "description": "Add this interface to underlay routing protocol.", + "title": "Include In Underlay Protocol" }, - "p2p_uplinks_peer_ip": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "P2P Uplinks Peer IP" + "isis_hello_padding": { + "type": "boolean", + "default": false, + "title": "ISIS Hello Padding" }, - "vtep_ip_mlag": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "Vtep IP MLAG" + "isis_metric": { + "type": "integer", + "title": "ISIS Metric" }, - "vtep_ip": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "Vtep IP" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IP Addressing" - }, - "interface_descriptions": { - "type": "object", - "description": "Override interface_descriptions templates\nIf description templates use Jinja2, they have to strip whitespaces using {%- -%} on any code blocks.\n", - "properties": { - "python_module": { + "isis_circuit_type": { "type": "string", - "description": "Custom Python Module to import for interface descriptions.", - "title": "Python Module" + "enum": [ + "level-1", + "level-2", + "level-1-2" + ], + "title": "ISIS Circuit Type" }, - "python_class_name": { + "isis_authentication_mode": { "type": "string", - "description": "Name of Custom Python Class to import for interface descriptions.", - "title": "Python Class Name" + "enum": [ + "md5", + "text" + ], + "title": "ISIS Authentication Mode" }, - "underlay_ethernet_interfaces": { + "isis_authentication_key": { "type": "string", - "description": "Path to Custom J2 template.", - "title": "Underlay Ethernet Interfaces" + "description": "Type-7 encrypted password.", + "title": "ISIS Authentication Key" }, - "underlay_port_channel_interfaces": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "Underlay Port Channel Interfaces" + "mpls_ip": { + "type": "boolean", + "description": "MPLS parameters. Default value is true if switch.mpls_lsr is true.", + "title": "MPLS IP" }, - "mlag_ethernet_interfaces": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "MLAG Ethernet Interfaces" + "mpls_ldp": { + "type": "boolean", + "description": "MPLS parameters. Default value is true for ldp underlay variants, otherwise false.", + "title": "MPLS LDP" }, - "mlag_port_channel_interfaces": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "MLAG Port Channel Interfaces" + "mtu": { + "type": "integer", + "description": "MTU for this P2P link. Default value same as p2p_uplinks_mtu.", + "title": "MTU" }, - "connected_endpoints_ethernet_interfaces": { - "type": "string", - "description": "Path to Custom J2 template.", - "title": "Connected Endpoints Ethernet Interfaces" + "bfd": { + "type": "boolean", + "default": false, + "description": "Enable BFD (only considered for BGP).", + "title": "BFD" }, - "connected_endpoints_port_channel_interfaces": { + "ptp": { + "description": "PTP parameters.", + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": false, + "description": "Enable PTP.", + "title": "Enabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PTP" + }, + "sflow": { + "type": "boolean", + "description": "Enable sFlow. Overrides `fabric_sflow` setting.", + "title": "Sflow" + }, + "qos_profile": { "type": "string", - "description": "Path to Custom J2 template.", - "title": "Connected Endpoints Port Channel Interfaces" + "description": "QOS service profile.", + "title": "QOS Profile" }, - "overlay_loopback_interface": { + "macsec_profile": { "type": "string", - "description": "Path to Custom J2 template.", - "title": "Overlay Loopback Interface" + "description": "MAC security profile.", + "title": "Macsec Profile" }, - "vtep_loopback_interface": { + "port_channel": { + "description": "Port-channel parameters.", + "type": "object", + "properties": { + "mode": { + "type": "string", + "default": "active", + "title": "Mode" + }, + "nodes_child_interfaces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "node": { + "type": "string", + "title": "Node" + }, + "interfaces": { + "type": "array", + "description": "List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ].", + "items": { + "type": "string" + }, + "title": "Interfaces" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "node" + ] + }, + "title": "Nodes Child Interfaces" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Port Channel" + }, + "raw_eos_cli": { "type": "string", - "description": "Path to Custom J2 template.", - "title": "Vtep Loopback Interface" + "description": "EOS CLI rendered directly on the point-to-point interface in the final EOS configuration.", + "title": "Raw EOS CLI" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config for interfaces\nNote! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.", + "title": "Structured Config" } }, + "required": [ + "nodes" + ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - }, - "title": "Interface Descriptions" + } + }, + "title": "P2P Links" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "L3 Edge" + }, + "local_users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "description": "Username", + "type": "string", + "title": "Name" + }, + "disabled": { + "type": "boolean", + "description": "If true, the user will be removed and all other settings are ignored.\nUseful for removing the default \"admin\" user.\n", + "title": "Disabled" + }, + "privilege": { + "type": "integer", + "minimum": 0, + "maximum": 15, + "description": "Initial privilege level with local EXEC authorization.\n", + "title": "Privilege" + }, + "role": { + "type": "string", + "description": "EOS RBAC Role to be assigned to the user such as \"network-admin\" or \"network-operator\"\n", + "title": "Role" + }, + "sha512_password": { + "type": "string", + "description": "SHA512 Hash of Password\nMust be the hash of the password. By default EOS salts the password with the username, so the simplest is to generate the hash on an EOS device using the same username.\n", + "title": "SHA512 Password" + }, + "no_password": { + "type": "boolean", + "description": "If set a password will not be configured for this user. \"sha512_password\" MUST not be defined for this user.\n", + "title": "No Password" + }, + "ssh_key": { + "type": "string", + "title": "SSH Key" + }, + "shell": { + "type": "string", + "description": "Specify shell for the user\n", + "enum": [ + "/bin/bash", + "/bin/sh", + "/sbin/nologin" + ], + "title": "Shell" } }, "additionalProperties": false, @@ -3689,439 +4154,10015 @@ "^_.+$": {} }, "required": [ - "key" + "name" ] }, - "title": "Node Type Keys" - }, - "only_local_vlan_trunk_groups": { - "type": "boolean", - "description": "A vlan can have many trunk_groups assigned.\nTo avoid unneeded configuration changes on all leaf switches when a new trunk group is added,\nthis feature will only configure the vlan trunk groups matched with local connected_endpoints.\nSee \"Details on only_local_vlan_trunk_groups\" below.\nRequires \"enable_trunk_groups: true\".\n", - "default": false, - "title": "Only Local VLAN Trunk Groups" + "title": "Local Users" }, - "overlay_cvx_servers": { - "description": "List of CVX vxlan overlay controllers.\nRequired if overlay_routing_protocol == CVX.\nCVX servers (VMs) are peering using their management interface, so mgmt_ip must be set for all CVX servers.\n", - "type": "array", - "items": { - "type": "string", - "description": "'inventory_hostname' of CVX server" + "mac_address_table": { + "type": "object", + "description": "MAC address-table aging time.\nUse to change the EOS default of 300.\n", + "properties": { + "aging_time": { + "type": "integer", + "description": "Aging time in seconds 10-1000000.\nEnter 0 to disable aging.\n", + "minimum": 0, + "maximum": 1000000, + "title": "Aging Time" + } }, - "title": "Overlay CVX Servers" - }, - "overlay_her_flood_list_per_vni": { - "type": "boolean", - "description": "When using Head-End Replication, configure flood-lists per VNI.\nBy default HER will be configured with a common flood-list containing all VTEPs.\nThis behavior can be changed to per-VNI flood-lists by setting `overlay_her_flood_list_per_vni: true`.\nThis will make `eos_designs` consider configured VLANs per VTEP, and only include the relevant VTEPs to each VNI's flood-list.\n", - "default": false, - "title": "Overlay Her Flood List Per Vni" - }, - "overlay_her_flood_list_scope": { - "type": "string", - "description": "When using Head-End Replication, set the scope of flood-lists to Fabric or DC.\nBy default all VTEPs in the Fabric (part of the inventory group referenced by \"fabric_name\") are added to the flood-lists.\nThis can be changed to all VTEPs in the DC (sharing the same \"dc_name\" value).\nThis is useful if Border Leaf switches are dividing the VXLAN overlay into separate domains.\n", - "enum": [ - "fabric", - "dc" - ], - "default": "fabric", - "title": "Overlay Her Flood List Scope" - }, - "overlay_loopback_description": { - "description": "Customize the description on overlay interface Loopback0.", - "type": "string", - "title": "Overlay Loopback Description" - }, - "overlay_mlag_rfc5549": { - "description": "IPv6 Unnumbered for MLAG iBGP connections.\nRequires \"underlay_rfc5549: true\".\n", - "type": "boolean", - "default": false, - "title": "Overlay MLAG Rfc5549" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MAC Address Table" }, - "overlay_rd_type": { + "management_eapi": { + "description": "Default is HTTPS management eAPI enabled.\nThe VRF is set to < mgmt_interface_vrf >.\n", "type": "object", - "description": "Configuration options for the Administrator subfield (first part of RD) and the Assigned Number subfield (second part of RD).\n\nBy default Route Distinguishers (RD) are set to:\n- `:` for VLANs and VLAN-Aware Bundles with L2 vlans.\n- `:` for VLAN-Aware Bundles with SVIs.\n- `:` for VRFs.\n\nNote:\nRD is a 48-bit value which is split into <16-bit>:<32-bit> or <32-bit>:<16-bit>.\nWhen using loopback or 32-bit ASN/number the assigned number can only be a 16-bit number. This may be a problem with large VNIs.\nFor 16-bit ASN/number the assigned number can be a 32-bit number.\n", "properties": { - "admin_subfield": { - "type": "string", - "description": "The method for deriving RD Administrator subfield (first part of RD):\n- 'overlay_loopback_ip' means the IP address of Loopback0.\n- 'vtep_loopback' means the IP address of the VTEP loopback interface.\n- 'bgp_as' means the AS number of the device.\n- 'switch_id' means the 'id' value of the device.\n- Any without mask.\n- Integer between <0-65535>.\n- Integer between <0-4294967295>.\n", - "default": "overlay_loopback_ip", - "title": "Admin Subfield" - }, - "admin_subfield_offset": { - "type": "string", - "description": "Offset can only be used if admin_subfield is an integer between <0-4294967295> or 'switch_id'.\nTotal value of admin_subfield + admin_subfield_offset must be <= 4294967295.\n", - "title": "Admin Subfield Offset" - }, - "vrf_admin_subfield": { - "type": "string", - "description": "The method for deriving RD Administrator subfield (first part of RD) for VRF services:\n- 'overlay_loopback_ip' means the IP address of Loopback0.\n- 'vtep_loopback' means the IP address of the VTEP loopback interface.\n- 'bgp_as' means the AS number of the device.\n- 'switch_id' means the 'id' value of the device.\n- Any without mask.\n- Integer between <0-65535>.\n- Integer between <0-4294967295>.\n\n'vrf_admin_subfield' takes precedence for VRF RDs if set. Otherwise the 'admin_subfield' value will be used.\n", - "title": "VRF Admin Subfield" + "enable_http": { + "type": "boolean", + "default": false, + "title": "Enable HTTP" }, - "vrf_admin_subfield_offset": { - "type": "string", - "description": "Offset can only be used if 'vrf_admin_subfield' is an integer between <0-4294967295> or 'switch_id'.\nTotal value of 'vrf_admin_subfield' + 'vrf_admin_subfield_offset' must be <= 4294967295.\n", - "title": "VRF Admin Subfield Offset" + "enable_https": { + "type": "boolean", + "default": true, + "title": "Enable Https" }, - "vlan_assigned_number_subfield": { - "type": "string", - "enum": [ - "mac_vrf_id", - "mac_vrf_vni", - "vlan_id" - ], - "default": "mac_vrf_id", - "description": "The method for deriving RD Assigned Number subfield for VLAN services (second part of RD):\n- 'mac_vrf_id' means `(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id`.\n- 'mac_vrf_vni' means `(mac_vrf_vni_base or mac_vrf_id_base) + vlan_id`.\n- 'vlan_id' will only use the 'vlan_id' and ignores all base values.\n\nThese methods can be overridden per VLAN if either 'rd_override', 'rt_override' or 'vni_override' is set (preferred in this order).", - "title": "VLAN Assigned Number Subfield" + "default_services": { + "type": "boolean", + "title": "Default Services" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Overlay Rd Type" + "title": "Management Eapi" }, - "overlay_routing_protocol": { - "description": "- The following overlay routing protocols are supported:\n - eBGP: Configures fabric with eBGP, default for l3ls-evpn design.\n - iBGP: Configured fabric with iBGP, only supported with OSPF or ISIS variants in underlay, default for mpls design.\n - CVX: Configures fabric to leverage CloudVision eXchange as the overlay controller.\n - HER: Configures fabric with Head-End Replication, configures static VXLAN flood-lists instead of using a dynamic overlay protocol.\n - none: No overlay configuration will be generated, default for l2ls design.\n", + "mgmt_destination_networks": { + "type": "array", + "description": "List of IPv4 prefixes to configure as static routes towards the OOB Management interface gateway.\nReplaces the default route.", + "items": { + "type": "string", + "description": "IPv4_address/Mask." + }, + "title": "Management Destination Networks" + }, + "mgmt_gateway": { "type": "string", - "enum": [ - "ebgp", - "ibgp", - "cvx", - "her", - "none" - ], - "default": "ebgp", - "title": "Overlay Routing Protocol" + "description": "OOB Management interface gateway in IPv4 format.\nUsed as next-hop for default gateway or static routes defined under 'mgmt_destination_networks'.", + "title": "Management Gateway" }, - "overlay_routing_protocol_address_family": { + "mgmt_interface": { "type": "string", - "description": "When set to `ipv6`, enable overlay EVPN peering with IPv6 addresses.\nThis feature depends on underlay_ipv6 variable. As of today, only RFC5549 is capable to transport IPv6 in the underlay.\n", - "enum": [ - "ipv4", - "ipv6" - ], - "default": "ipv4", - "title": "Overlay Routing Protocol Address Family" + "default": "Management1", + "description": "OOB Management interface.", + "title": "Management Interface" }, - "overlay_rt_type": { + "mgmt_interface_description": { + "type": "string", + "description": "Management interface description.\n", + "default": "oob_management", + "title": "Management Interface Description" + }, + "mgmt_interface_vrf": { + "type": "string", + "default": "MGMT", + "description": "OOB Management VRF.", + "title": "Management Interface VRF" + }, + "mgmt_vrf_routing": { + "type": "boolean", + "default": false, + "description": "Configure IP routing for the OOB Management VRF.", + "title": "Management VRF Routing" + }, + "mlag_ibgp_peering_vrfs": { "type": "object", - "description": "Configuration options for the Administrator subfield (first part of RT) and the Assigned Number subfield (second part of RT).\n\nBy default Route Targets (RT) are set to:\n- `<(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id>:<(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id>` for VLANs and VLAN-Aware Bundles with L2 vlans.\n- `:` for VLAN-Aware Bundles with SVIs.\n- `:` for VRFs.\n\nNotes:\nRT is a 48-bit value which is split into <16-bit>:<32-bit> or <32-bit>:<16-bit>.\nWhen using 32-bit ASN/number the VNI can only be a 16-bit number. Alternatively use vlan_id/vrf_id as assigned number.\nFor 16-bit ASN/number the assigned number can be a 32-bit number.\n", + "description": "On mlag leafs, an SVI interface is defined per vrf, to establish iBGP peering (required when there are MLAG leafs in topology).\nThe SVI id will be derived from the base vlan defined: mlag_ibgp_peering_vrfs.base_vlan + (vrf_id or vrf_vni) - 1.\nDepending on the values of vrf_id / vrf_vni it may be required to adjust the base_vlan to avoid overlaps or invalid vlan ids.\nThe SVI ip address derived from mlag_l3_peer_ipv4_pool is re-used across all iBGP peerings.\n", "properties": { - "admin_subfield": { - "type": "string", - "description": "The method for deriving RT Administrator subfield (first part of RT):\n- 'vrf_id' means `(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id` for VLANs and `(vrf_id or vrf_vni)` for VRFs.\n- 'vrf_vni' means `(mac_vrf_vni_base or mac_vrf_id_base) + vlan_id` for VLANs and `(vrf_vni or vrf_id)` for VRFs.\n- 'id' means `vlan_id` for VLANs and `(vrf_id or vrf_vni)` for VRFs.\n- 'bgp_as' means the AS number of the device.\n- Integer between <0-65535>.\n- Integer between <0-4294967295>.\n\nThe 'vrf_id' and 'vrf_vni' methods can be overridden per VLAN if either 'rt_override' or 'vni_override' is set (preferred in this order).\n", - "default": "vrf_id", - "title": "Admin Subfield" - }, - "vrf_admin_subfield": { - "type": "string", - "description": "The method for deriving RT Administrator subfield (first part of RT) for VRF services:\n- 'id' means `(vrf_id or vrf_vni)`.\n- 'vrf_id' means `(vrf_id or vrf_vni)`.\n- 'vrf_vni' means `(vrf_vni or vrf_id)`.\n- 'bgp_as' means the AS number of the device.\n- Integer between <0-65535>.\n- Integer between <0-4294967295>.\n\n'vrf_admin_subfield' takes precedence for VRF RDs if set. Otherwise the 'admin_subfield' value will be used.\n", - "default": "vrf_id", - "title": "VRF Admin Subfield" - }, - "vlan_assigned_number_subfield": { - "type": "string", - "enum": [ - "mac_vrf_id", - "mac_vrf_vni", - "vlan_id" - ], - "default": "mac_vrf_id", - "description": "The method for deriving RT Assigned Number subfield for VLAN services (second part of RT):\n- 'mac_vrf_id' means `(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id`.\n- 'mac_vrf_vni' means `(mac_vrf_vni_base or mac_vrf_id_base) + vlan_id`.\n- 'vlan_id' will only use the 'vlan_id' and ignores all base values.\n\nThese methods can be overridden per VLAN if either 'rt_override' or 'vni_override' is set (preferred in this order).", - "title": "VLAN Assigned Number Subfield" + "base_vlan": { + "type": "integer", + "minimum": 1, + "maximum": 4093, + "default": 3000, + "title": "Base VLAN" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Overlay Rt Type" - }, - "p2p_uplinks_mtu": { - "description": "Point to Point Links MTU.", - "type": "integer", - "minimum": 68, - "maximum": 65535, - "default": 9214, - "title": "P2P Uplinks MTU" + "title": "MLAG Ibgp Peering VRFs" }, - "p2p_uplinks_qos_profile": { - "description": "QOS Profile assigned on all infrastructure links.", - "type": "string", - "title": "P2P Uplinks QOS Profile" + "name_servers": { + "type": "array", + "description": "List of DNS servers. The VRF is set to < mgmt_interface_vrf >.", + "items": { + "type": "string", + "description": "IPv4 address" + }, + "title": "Name Servers" }, - "platform_settings": { + "network_ports": { "type": "array", "items": { "type": "object", "properties": { - "platforms": { + "switches": { "type": "array", + "description": "Regex matching the full hostname of one or more switches.\nThe regular expression must match the full hostname.\n", "items": { "type": "string" }, - "title": "Platforms" + "title": "Switches" }, - "trident_forwarding_table_partition": { + "switch_ports": { + "type": "array", + "description": "List of ranges using AVD range_expand syntax.\nFor example:\n\nswitch_ports:\n - Ethernet1\n - Ethernet2-48\n\nAll switch_ports ranges are expanded into individual port configurations.\n\nFor more details and examples of the `range_expand` syntax, see the [arista.avd.range_expand documentation](../../../plugins/README.md#range_expand-filter)\n", + "items": { + "type": "string" + }, + "title": "Switch Ports" + }, + "description": { "type": "string", - "description": "Only applied when evpn_multicast is true.", - "title": "Trident Forwarding Table Partition" + "description": "Description to be used on all ports.", + "title": "Description" }, - "reload_delay": { - "type": "object", - "properties": { - "mlag": { - "type": "integer", - "minimum": 0, - "maximum": 86400, - "description": "In seconds.", - "title": "MLAG" - }, - "non_mlag": { - "type": "integer", - "minimum": 0, - "maximum": 86400, - "description": "In seconds.", - "title": "Non MLAG" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Reload Delay" + "speed": { + "type": "string", + "description": "Set adapter speed: `< interface_speed >`, `forced < interface_speed >`, `auto < interface_speed >`.\nIf not specified will be auto.\n", + "title": "Speed" }, - "tcam_profile": { + "profile": { "type": "string", - "title": "TCAM Profile" + "description": "Port-profile name to inherit configuration.", + "title": "Profile" }, - "lag_hardware_only": { + "enabled": { "type": "boolean", - "title": "LAG Hardware Only" + "description": "Administrative state, setting to false will set the port to 'shutdown' in the intended configuration.\n", + "default": true, + "title": "Enabled" }, - "feature_support": { - "type": "object", - "properties": { - "queue_monitor_length_notify": { - "type": "boolean", - "default": true, - "title": "Queue Monitor Length Notify" - }, - "interface_storm_control": { - "type": "boolean", - "default": true, - "title": "Interface Storm Control" - }, - "poe": { + "mode": { + "type": "string", + "enum": [ + "access", + "dot1q-tunnel", + "trunk", + "trunk phone" + ], + "description": "Interface mode.", + "title": "Mode" + }, + "mtu": { + "type": "integer", + "minimum": 68, + "maximum": 65535, + "title": "MTU" + }, + "l2_mtu": { + "type": "integer", + "minimum": 68, + "maximum": 9416, + "description": "This should only be defined for platforms supporting the \"l2 mtu\" CLI command.", + "title": "L2 MTU" + }, + "native_vlan": { + "type": "integer", + "description": "Native VLAN for a trunk port.\nIf both `native_vlan` and `native_vlan_tag`, `native_vlan_tag` takes precedence.\n", + "minimum": 1, + "maximum": 4094, + "title": "Native VLAN" + }, + "native_vlan_tag": { + "type": "boolean", + "default": false, + "description": "If both `native_vlan` and `native_vlan_tag`, `native_vlan_tag` takes precedence.", + "title": "Native VLAN Tag" + }, + "trunk_groups": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Required with `enable_trunk_groups: true`.\nTrunk Groups are used for limiting VLANs on trunk ports to VLANs with the same Trunk Group.\n", + "title": "Trunk Groups" + }, + "vlans": { + "type": "string", + "description": "Interface VLANs - if not set, the EOS default is that all VLANs are allowed for trunk ports, and VLAN 1 will be used for access ports.", + "title": "VLANs" + }, + "spanning_tree_portfast": { + "type": "string", + "enum": [ + "edge", + "network" + ], + "title": "Spanning Tree Portfast" + }, + "spanning_tree_bpdufilter": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpdufilter" + }, + "spanning_tree_bpduguard": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpduguard" + }, + "flowcontrol": { + "type": "object", + "properties": { + "received": { + "type": "string", + "enum": [ + "received", + "send", + "on" + ], + "title": "Received" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Flowcontrol" + }, + "qos_profile": { + "type": "string", + "description": "QOS profile name", + "title": "QOS Profile" + }, + "ptp": { + "type": "object", + "description": "The global PTP profile parameters will be applied to all connected endpoints where `ptp` is manually enabled.\n`ptp role master` is set to ensure control over the PTP topology.\n", + "properties": { + "enabled": { "type": "boolean", "default": false, - "title": "PoE" + "title": "Enabled" }, - "bgp_update_wait_install": { - "type": "boolean", - "default": true, - "description": "Disables FIB updates and route advertisement when the BGP instance is initiated until the BGP convergence state is reached.\nCan be overridden by setting \"bgp_update_wait_install\" host/group_vars.\n", - "title": "BGP Update Wait Install" + "endpoint_role": { + "type": "string", + "default": "follower", + "enum": [ + "bmca", + "default", + "follower" + ], + "title": "Endpoint Role" }, - "bgp_update_wait_for_convergence": { - "type": "boolean", - "default": true, - "description": "Do not advertise reachability to a prefix until that prefix has been installed in hardware.\nThis will eliminate any temporary black holes due to a BGP speaker advertising reachability to a prefix that may not yet be installed into the forwarding plane.\nCan be overridden by setting \"bgp_update_wait_for_convergence\" host/group_vars.\n", - "title": "BGP Update Wait For Convergence" + "profile": { + "type": "string", + "default": "aes67-r16-2016", + "enum": [ + "aes67", + "aes67-r16-2016", + "smpte2059-2" + ], + "title": "Profile" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Feature Support" - }, - "management_interface": { - "type": "string", - "default": "Management1", - "title": "Management Interface" - }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the root level of the final EOS configuration.", - "title": "Raw EOS CLI" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "default": [ - { - "platforms": [ - "default" - ], - "feature_support": { - "queue_monitor_length_notify": false - }, - "reload_delay": { - "mlag": 300, - "non_mlag": 330 - } - }, - { - "platforms": [ - "7050X3", - "720XP", - "722XP" - ], - "feature_support": { - "queue_monitor_length_notify": false - }, - "reload_delay": { - "mlag": 300, - "non_mlag": 330 + "title": "PTP" }, - "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072" - }, - { - "platforms": [ - "7280R", - "7280R2", - "7020R" - ], - "lag_hardware_only": true, - "reload_delay": { - "mlag": 900, - "non_mlag": 1020 + "sflow": { + "type": "boolean", + "description": "Configures sFlow on the interface. Overrides `fabric_sflow` setting.\n", + "title": "Sflow" }, - "tcam_profile": "vxlan-routing" - }, - { - "platforms": [ - "7280R3" - ], - "reload_delay": { - "mlag": 900, - "non_mlag": 1020 - } - }, - { - "platforms": [ - "7500R", - "7500R2" - ], - "lag_hardware_only": true, - "management_interface": "Management0", - "reload_delay": { - "mlag": 900, - "non_mlag": 1020 + "link_tracking": { + "type": "object", + "description": "Configure the downstream interfaces of a respective Link Tracking Group.\nIf `port_channel` is defined in an adapter, then the port-channel interface is configured to be the downstream.\nElse all the ethernet interfaces will be configured as downstream -> to configure single-active EVPN multihomed networks.\n", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "name": { + "type": "string", + "description": "Tracking group name.\nThe default group name is taken from fabric variable of the switch, `link_tracking.groups[0].name` with default value being \"LT_GROUP1\".\nOptional if default link_tracking settings are configured on the node.\n", + "title": "Name" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Tracking" }, - "tcam_profile": "vxlan-routing" - }, - { - "platforms": [ - "7500R3", - "7800R3" - ], - "management_interface": "Management0", - "reload_delay": { - "mlag": 900, - "non_mlag": 1020 - } - }, - { - "platforms": [ - "7368X4" - ], - "management_interface": "Management0", - "reload_delay": { - "mlag": 300, - "non_mlag": 330 - } - }, - { - "platforms": [ - "7300X3" - ], - "management_interface": "Management0", - "reload_delay": { - "mlag": 1200, - "non_mlag": 1320 - }, - "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072" - }, - { - "platforms": [ - "VEOS", - "VEOS-LAB", - "vEOS", - "vEOS-lab" - ], - "feature_support": { - "bgp_update_wait_for_convergence": false, - "bgp_update_wait_install": false, - "interface_storm_control": false, - "queue_monitor_length_notify": false - }, - "reload_delay": { - "mlag": 300, - "non_mlag": 330 - } - }, - { - "platforms": [ - "CEOS", - "cEOS", - "ceos", - "cEOSLab" - ], - "feature_support": { - "bgp_update_wait_for_convergence": false, - "bgp_update_wait_install": false, - "interface_storm_control": false, - "queue_monitor_length_notify": false - }, - "management_interface": "Management0", - "reload_delay": { - "mlag": 300, - "non_mlag": 330 - } - } - ], - "title": "Platform Settings" - }, - "platform_speed_groups": { - "type": "array", - "description": "Set Hardware Speed Groups per Platform.", - "items": { - "type": "object", - "properties": { - "platform": { - "type": "string", - "title": "Platform" + "dot1x": { + "type": "object", + "description": "802.1x", + "properties": { + "port_control": { + "type": "string", + "enum": [ + "auto", + "force-authorized", + "force-unauthorized" + ], + "title": "Port Control" + }, + "port_control_force_authorized_phone": { + "type": "boolean", + "title": "Port Control Force Authorized Phone" + }, + "reauthentication": { + "type": "boolean", + "title": "Reauthentication" + }, + "pae": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "authenticator" + ], + "title": "Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PAE" + }, + "authentication_failure": { + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "allow", + "drop" + ], + "title": "Action" + }, + "allow_vlan": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "Allow VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Authentication Failure" + }, + "host_mode": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "multi-host", + "single-host" + ], + "title": "Mode" + }, + "multi_host_authenticated": { + "type": "boolean", + "title": "Multi Host Authenticated" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Host Mode" + }, + "mac_based_authentication": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "host_mode_common": { + "type": "boolean", + "title": "Host Mode Common" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MAC Based Authentication" + }, + "timeout": { + "type": "object", + "properties": { + "idle_host": { + "type": "integer", + "minimum": 10, + "maximum": 65535, + "title": "Idle Host" + }, + "quiet_period": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Quiet Period" + }, + "reauth_period": { + "type": "string", + "description": "Range 60-4294967295 or \"server\".", + "title": "Reauth Period" + }, + "reauth_timeout_ignore": { + "type": "boolean", + "title": "Reauth Timeout Ignore" + }, + "tx_period": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "TX Period" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Timeout" + }, + "reauthorization_request_limit": { + "type": "integer", + "minimum": 1, + "maximum": 10, + "title": "Reauthorization Request Limit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "dot1x" }, - "speeds": { - "type": "array", - "items": { - "type": "object", - "properties": { - "speed": { - "type": "string", - "title": "Speed" + "poe": { + "type": "object", + "description": "Power Over Ethernet settings applied on port. Only configured if platform supports PoE.", + "properties": { + "disabled": { + "type": "boolean", + "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", + "default": false, + "title": "Disabled" + }, + "priority": { + "type": "string", + "enum": [ + "critical", + "high", + "medium", + "low" + ], + "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", + "title": "Priority" + }, + "reboot": { + "description": "Set the PoE power behavior for a PoE port when the system is rebooted", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Reboot" + }, + "link_down": { + "description": "Set the PoE power behavior for a PoE port when the port goes down", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + }, + "power_off_delay": { + "type": "integer", + "minimum": 1, + "maximum": 86400, + "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", + "title": "Power Off Delay" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Down" + }, + "shutdown": { + "description": "Set the PoE power behavior for a PoE port when the port is admin down", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Shutdown" + }, + "limit": { + "type": "object", + "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", + "properties": { + "class": { + "type": "integer", + "minimum": 0, + "maximum": 8, + "title": "Class" + }, + "watts": { + "type": "string", + "title": "Watts" + }, + "fixed": { + "type": "boolean", + "description": "Set to ignore hardware classification", + "title": "Fixed" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Limit" + }, + "negotiation_lldp": { + "type": "boolean", + "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", + "title": "Negotiation LLDP" + }, + "legacy_detect": { + "type": "boolean", + "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", + "title": "Legacy Detect" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PoE" + }, + "storm_control": { + "type": "object", + "description": "Storm control settings applied on port toward the endpoint.", + "properties": { + "all": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level.", + "title": "Level" + }, + "unit": { + "type": "string", + "enum": [ + "percent", + "pps" + ], + "default": "percent", + "description": "Optional variable and is hardware dependent.", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "All" + }, + "broadcast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level.", + "title": "Level" + }, + "unit": { + "type": "string", + "enum": [ + "percent", + "pps" + ], + "default": "percent", + "description": "Optional variable and is hardware dependent.", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Broadcast" + }, + "multicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level.", + "title": "Level" + }, + "unit": { + "type": "string", + "enum": [ + "percent", + "pps" + ], + "default": "percent", + "description": "Optional variable and is hardware dependent.", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "unknown_unicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level.", + "title": "Level" + }, + "unit": { + "type": "string", + "enum": [ + "percent", + "pps" + ], + "default": "percent", + "description": "Optional variable and is hardware dependent.", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Unknown Unicast" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Storm Control" + }, + "monitor_sessions": { + "type": "array", + "description": "Used to define switchports as source or destination for monitoring sessions.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Session name.", + "title": "Name" + }, + "role": { + "type": "string", + "enum": [ + "source", + "destination" + ], + "title": "Role" + }, + "source_settings": { + "type": "object", + "properties": { + "direction": { + "type": "string", + "enum": [ + "rx", + "tx", + "both" + ], + "title": "Direction" + }, + "access_group": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ip", + "ipv6", + "mac" + ], + "title": "Type" + }, + "name": { + "description": "ACL name.", + "type": "string", + "title": "Name" + }, + "priority": { + "type": "integer", + "title": "Priority" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Access Group" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source Settings" + }, + "session_settings": { + "type": "object", + "description": "Session settings are defined per session name.\nDifferent session_settings for the same session name will be combined/merged.\n", + "properties": { + "encapsulation_gre_metadata_tx": { + "type": "boolean", + "title": "Encapsulation Gre Metadata TX" + }, + "header_remove_size": { + "type": "integer", + "description": "Number of bytes to remove from header.", + "title": "Header Remove Size" + }, + "access_group": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ip", + "ipv6", + "mac" + ], + "title": "Type" + }, + "name": { + "description": "ACL name.", + "type": "string", + "title": "Name" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Access Group" + }, + "rate_limit_per_ingress_chip": { + "type": "string", + "description": "Ratelimit and unit as string.\nExamples:\n \"100000 bps\"\n \"100 kbps\"\n \"10 mbps\"\n", + "title": "Rate Limit Per Ingress Chip" + }, + "rate_limit_per_egress_chip": { + "type": "string", + "description": "Ratelimit and unit as string.\nExamples:\n \"100000 bps\"\n \"100 kbps\"\n \"10 mbps\"\n", + "title": "Rate Limit Per Egress Chip" + }, + "sample": { + "type": "integer", + "title": "Sample" + }, + "truncate": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "size": { + "type": "integer", + "description": "Size in bytes", + "title": "Size" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Truncate" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Session Settings" + } + }, + "required": [ + "name" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Monitor Sessions" + }, + "ethernet_segment": { + "type": "object", + "description": "Settings for all or single-active EVPN multihoming.", + "properties": { + "short_esi": { + "type": "string", + "description": "In format xxxx:xxxx:xxxx or \"auto\".\nDefine a manual short-esi (be careful using this on profiles) or set the value to \"auto\" to automatically generate the value.\nPlease see the notes under \"EVPN A/A ESI dual and single-attached endpoint scenarios\" before setting `short_esi: auto`.\n", + "title": "Short Esi" + }, + "redundancy": { + "type": "string", + "enum": [ + "all-active", + "single-active" + ], + "description": "If omitted, Port-Channels use the EOS default of all-active.\nIf omitted, Ethernet interfaces are configured as single-active.\n", + "title": "Redundancy" + }, + "designated_forwarder_algorithm": { + "type": "string", + "enum": [ + "auto", + "modulus", + "preference" + ], + "description": "Configure DF algorithm and preferences.\n- auto: Use preference-based algorithm and assign preference based on position of device in the 'switches' list,\n e.g., assuming a list of three switches, this would assign a preference of 200 to the first switch, 100 to the 2nd, and 0 to the third.\n- preference: Set preference for each switch manually using designated_forwarder_preferences key.\n- modulus: Use the default modulus-based algorithm.\nIf omitted, Port-Channels use the EOS default of modulus.\nIf omitted, Ethernet interfaces default to the 'auto' mechanism detailed above.\n", + "title": "Designated Forwarder Algorithm" + }, + "designated_forwarder_preferences": { + "type": "array", + "description": "Manual preference as described above, required only for preference algorithm.", + "items": { + "type": "string" + }, + "title": "Designated Forwarder Preferences" + }, + "dont_preempt": { + "type": "boolean", + "description": "Disable preemption for single-active forwarding when auto/manual DF preference is configured.", + "title": "Dont Preempt" + } + }, + "required": [ + "short_esi" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Ethernet Segment" + }, + "port_channel": { + "type": "object", + "description": "Used for port-channel adapter.", + "properties": { + "mode": { + "type": "string", + "description": "Port-Channel Mode.", + "enum": [ + "active", + "passive", + "on" + ], + "title": "Mode" + }, + "channel_id": { + "type": "integer", + "description": "Port-Channel ID.\nIf no channel_id is specified, an id is generated from the first switch port in the port channel.\n", + "title": "Channel ID" + }, + "description": { + "type": "string", + "description": "By default the description is built leveraging `` name or `adapter.description` when defined.\nWhen this key is defined, it will append its content to the physical port description.\n", + "title": "Description" + }, + "enabled": { + "type": "boolean", + "default": true, + "description": "Port-Channel administrative state.\nSetting to false will set port to 'shutdown' in intended configuration.\n", + "title": "Enabled" + }, + "short_esi": { + "type": "string", + "description": "In format xxxx:xxxx:xxxx or \"auto\".\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ethernet_segment.short_esi instead.", + "deprecated": true, + "title": "Short Esi" + }, + "lacp_fallback": { + "type": "object", + "description": "LACP fallback configuration.", + "properties": { + "mode": { + "type": "string", + "enum": [ + "static" + ], + "description": "Currently only static mode is supported.", + "title": "Mode" + }, + "timeout": { + "type": "integer", + "description": "Timeout in seconds. EOS default is 90 seconds.", + "title": "Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LACP Fallback" + }, + "lacp_timer": { + "type": "object", + "description": "LACP timer configuration. Applies only when Port-channel mode is not \"on\".", + "properties": { + "mode": { + "type": "string", + "enum": [ + "normal", + "fast" + ], + "description": "LACP mode for interface members.", + "title": "Mode" + }, + "multiplier": { + "type": "integer", + "description": "Number of LACP BPDUs lost before deeming the peer down. EOS default is 3.", + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LACP Timer" + }, + "subinterfaces": { + "type": "array", + "description": "Port-Channel L2 Subinterfaces\nSubinterfaces are only supported on routed port-channels, which means they cannot be configured on MLAG port-channels.\nSetting short_esi: auto generates the short_esi automatically using a hash of configuration elements.\nPlease see the notes under \"EVPN A/A ESI dual-attached endpoint scenario\" before setting short_esi: auto.\n", + "items": { + "type": "object", + "properties": { + "number": { + "type": "integer", + "description": "Subinterface number", + "title": "Number" + }, + "short_esi": { + "type": "string", + "description": "In format xxxx:xxxx:xxxx or \"auto\"\nRequired for multihomed port-channels with subinterfaces\n", + "title": "Short Esi" + }, + "vlan_id": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "description": "VLAN ID to bridge.\nDefault is subinterface number.\n", + "title": "VLAN ID" + }, + "encapsulation_vlan": { + "type": "object", + "description": "Client VLAN ID encapsulation.\nDefault is subinterface number.\n", + "properties": { + "client_dot1q": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "Client Dot1Q" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Encapsulation VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Subinterfaces" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the port-channel interface in the final EOS configuration.", + "title": "Raw EOS CLI" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen.", + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "description": { + "type": "string", + "title": "Description" + }, + "logging": { + "type": "object", + "properties": { + "event": { + "type": "object", + "properties": { + "link_status": { + "type": "boolean", + "title": "Link Status" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Event" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Logging" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "l2_mtu": { + "type": "integer", + "description": "\"l2_mtu\" should only be defined for platforms supporting the \"l2 mtu\" CLI\n", + "title": "L2 MTU" + }, + "vlans": { + "type": "string", + "description": "List of switchport vlans as string\nFor a trunk port this would be a range like \"1-200,300\"\nFor an access port this would be a single vlan \"123\"\n", + "title": "VLANs" + }, + "snmp_trap_link_change": { + "type": "boolean", + "title": "Snmp Trap Link Change" + }, + "type": { + "type": "string", + "enum": [ + "routed", + "switched", + "l3dot1q", + "l2dot1q" + ], + "description": "l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.\nInterface will not be listed in device documentation, unless \"type\" is set.\n", + "title": "Type" + }, + "encapsulation_dot1q_vlan": { + "type": "integer", + "description": "VLAN tag to configure on sub-interface", + "title": "Encapsulation Dot1Q VLAN" + }, + "vrf": { + "type": "string", + "description": "VRF name", + "title": "VRF" + }, + "encapsulation_vlan": { + "type": "object", + "properties": { + "client": { + "type": "object", + "properties": { + "dot1q": { + "type": "object", + "properties": { + "vlan": { + "type": "integer", + "description": "Client VLAN ID", + "title": "VLAN" + }, + "outer": { + "type": "integer", + "description": "Client Outer VLAN ID", + "title": "Outer" + }, + "inner": { + "type": "integer", + "description": "Client Inner VLAN ID", + "title": "Inner" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Dot1Q" + }, + "unmatched": { + "type": "boolean", + "title": "Unmatched" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Client" + }, + "network": { + "type": "object", + "description": "Network encapsulation are all optional, and skipped if using client unmatched", + "properties": { + "dot1q": { + "type": "object", + "properties": { + "vlan": { + "type": "integer", + "description": "Network VLAN ID", + "title": "VLAN" + }, + "outer": { + "type": "integer", + "description": "Network Outer VLAN ID", + "title": "Outer" + }, + "inner": { + "type": "integer", + "description": "Network Inner VLAN ID", + "title": "Inner" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Dot1Q" + }, + "client": { + "type": "boolean", + "title": "Client" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Network" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Encapsulation VLAN" + }, + "vlan_id": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "VLAN ID" + }, + "mode": { + "type": "string", + "enum": [ + "access", + "dot1q-tunnel", + "trunk", + "trunk phone" + ], + "title": "Mode" + }, + "native_vlan": { + "type": "integer", + "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", + "title": "Native VLAN" + }, + "native_vlan_tag": { + "type": "boolean", + "default": false, + "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", + "title": "Native VLAN Tag" + }, + "link_tracking_groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Group name", + "title": "Name" + }, + "direction": { + "type": "string", + "enum": [ + "upstream", + "downstream" + ], + "title": "Direction" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "Link Tracking Groups" + }, + "phone": { + "type": "object", + "properties": { + "trunk": { + "type": "string", + "enum": [ + "tagged", + "untagged" + ], + "title": "Trunk" + }, + "vlan": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Phone" + }, + "l2_protocol": { + "type": "object", + "properties": { + "encapsulation_dot1q_vlan": { + "type": "integer", + "description": "Vlan tag to configure on sub-interface", + "title": "Encapsulation Dot1Q VLAN" + }, + "forwarding_profile": { + "type": "string", + "description": "L2 protocol forwarding profile", + "title": "Forwarding Profile" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "L2 Protocol" + }, + "mtu": { + "type": "integer", + "title": "MTU" + }, + "mlag": { + "type": "integer", + "description": "MLAG ID", + "minimum": 1, + "maximum": 2000, + "title": "MLAG" + }, + "trunk_groups": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Trunk Groups" + }, + "lacp_fallback_timeout": { + "type": "integer", + "description": "Timeout in seconds", + "default": 90, + "minimum": 0, + "maximum": 300, + "title": "LACP Fallback Timeout" + }, + "lacp_fallback_mode": { + "type": "string", + "enum": [ + "individual", + "static" + ], + "title": "LACP Fallback Mode" + }, + "qos": { + "type": "object", + "properties": { + "trust": { + "type": "string", + "enum": [ + "dscp", + "cos", + "disabled" + ], + "title": "Trust" + }, + "dscp": { + "type": "integer", + "description": "DSCP value", + "title": "DSCP" + }, + "cos": { + "type": "integer", + "description": "COS value", + "title": "COS" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "QOS" + }, + "bfd": { + "type": "object", + "properties": { + "echo": { + "type": "boolean", + "title": "Echo" + }, + "interval": { + "type": "integer", + "description": "Interval in milliseconds", + "title": "Interval" + }, + "min_rx": { + "type": "integer", + "description": "Rate in milliseconds", + "title": "Min RX" + }, + "multiplier": { + "type": "integer", + "minimum": 3, + "maximum": 50, + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BFD" + }, + "service_policy": { + "type": "object", + "properties": { + "pbr": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Policy Based Routing Policy-map name", + "title": "Input" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PBR" + }, + "qos": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Quality of Service Policy-map name", + "title": "Input" + } + }, + "required": [ + "input" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "QOS" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Service Policy" + }, + "mpls": { + "type": "object", + "properties": { + "ip": { + "type": "boolean", + "title": "IP" + }, + "ldp": { + "type": "object", + "properties": { + "interface": { + "type": "boolean", + "title": "Interface" + }, + "igp_sync": { + "type": "boolean", + "title": "IGP Sync" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LDP" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MPLS" + }, + "trunk_private_vlan_secondary": { + "type": "boolean", + "title": "Trunk Private VLAN Secondary" + }, + "pvlan_mapping": { + "type": "string", + "description": "List of vlans as string", + "title": "PVLAN Mapping" + }, + "vlan_translations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "List of vlans as string (only one vlan if direction is \"both\")", + "title": "From" + }, + "to": { + "type": "integer", + "description": "VLAN ID", + "title": "To" + }, + "direction": { + "type": "string", + "enum": [ + "in", + "out", + "both" + ], + "default": "both", + "title": "Direction" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "VLAN Translations" + }, + "shape": { + "type": "object", + "properties": { + "rate": { + "type": "string", + "description": "Rate in kbps, pps or percent\nSupported options are platform dependent\nExamples:\n- \"5000 kbps\"\n- \"1000 pps\"\n- \"20 percent\"\n", + "title": "Rate" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Shape" + }, + "storm_control": { + "type": "object", + "properties": { + "all": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "All" + }, + "broadcast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Broadcast" + }, + "multicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "unknown_unicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Unknown Unicast" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Storm Control" + }, + "ip_proxy_arp": { + "type": "boolean", + "title": "IP Proxy ARP" + }, + "isis_enable": { + "type": "string", + "description": "ISIS instance", + "title": "ISIS Enable" + }, + "isis_passive": { + "type": "boolean", + "title": "ISIS Passive" + }, + "isis_metric": { + "type": "integer", + "title": "ISIS Metric" + }, + "isis_network_point_to_point": { + "type": "boolean", + "title": "ISIS Network Point To Point" + }, + "isis_circuit_type": { + "type": "string", + "enum": [ + "level-1-2", + "level-1", + "level-2" + ], + "title": "ISIS Circuit Type" + }, + "isis_hello_padding": { + "type": "boolean", + "title": "ISIS Hello Padding" + }, + "isis_authentication_mode": { + "type": "string", + "enum": [ + "text", + "md5" + ], + "title": "ISIS Authentication Mode" + }, + "isis_authentication_key": { + "type": "string", + "description": "Type-7 encrypted password", + "title": "ISIS Authentication Key" + }, + "traffic_policy": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Ingress traffic policy", + "title": "Input" + }, + "output": { + "type": "string", + "description": "Egress traffic policy", + "title": "Output" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Traffic Policy" + }, + "evpn_ethernet_segment": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "description": "EVPN Ethernet Segment Identifier (Type 1 format)", + "title": "Identifier" + }, + "redundancy": { + "type": "string", + "enum": [ + "all-active", + "single-active" + ], + "title": "Redundancy" + }, + "designated_forwarder_election": { + "type": "object", + "properties": { + "algorithm": { + "type": "string", + "enum": [ + "modulus", + "preference" + ], + "title": "Algorithm" + }, + "preference_value": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "description": "Preference_value is only used when \"algorithm\" is \"preference\"", + "title": "Preference Value" + }, + "dont_preempt": { + "type": "boolean", + "description": "Dont_preempt is only used when \"algorithm\" is \"preference\"", + "default": false, + "title": "Dont Preempt" + }, + "hold_time": { + "type": "integer", + "title": "Hold Time" + }, + "subsequent_hold_time": { + "type": "integer", + "title": "Subsequent Hold Time" + }, + "candidate_reachability_required": { + "type": "boolean", + "title": "Candidate Reachability Required" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Designated Forwarder Election" + }, + "mpls": { + "type": "object", + "properties": { + "shared_index": { + "type": "integer", + "minimum": 1, + "maximum": 1024, + "title": "Shared Index" + }, + "tunnel_flood_filter_time": { + "type": "integer", + "title": "Tunnel Flood Filter Time" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MPLS" + }, + "route_target": { + "type": "string", + "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN Ethernet Segment" + }, + "esi": { + "type": "string", + "description": "EVPN Ethernet Segment Identifier (Type 1 format)\nIf both \"esi\" and \"evpn_ethernet_segment.identifier\" are defined, the new variable takes precedence\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use evpn_ethernet_segment.identifier instead.", + "deprecated": true, + "title": "Esi" + }, + "rt": { + "type": "string", + "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx\nIf both \"rt\" and \"evpn_ethernet_segment.route_target\" are defined, the new variable takes precedence\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use evpn_ethernet_segment.route_target instead.", + "deprecated": true, + "title": "Rt" + }, + "lacp_id": { + "type": "string", + "description": "LACP ID with format xxxx.xxxx.xxxx", + "title": "LACP ID" + }, + "spanning_tree_bpdufilter": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpdufilter" + }, + "spanning_tree_bpduguard": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpduguard" + }, + "spanning_tree_guard": { + "type": "string", + "enum": [ + "loop", + "root", + "disabled" + ], + "title": "Spanning Tree Guard" + }, + "spanning_tree_portfast": { + "type": "string", + "enum": [ + "edge", + "network" + ], + "title": "Spanning Tree Portfast" + }, + "vmtracer": { + "type": "boolean", + "title": "VMTracer" + }, + "ptp": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "announce": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "title": "Interval" + }, + "timeout": { + "type": "integer", + "title": "Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Announce" + }, + "delay_req": { + "type": "integer", + "title": "Delay Req" + }, + "delay_mechanism": { + "type": "string", + "enum": [ + "e2e", + "p2p" + ], + "title": "Delay Mechanism" + }, + "sync_message": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "title": "Interval" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Sync Message" + }, + "role": { + "type": "string", + "enum": [ + "master", + "dynamic" + ], + "title": "Role" + }, + "vlan": { + "type": "string", + "description": "VLAN can be 'all' or list of vlans as string", + "title": "VLAN" + }, + "transport": { + "type": "string", + "enum": [ + "ipv4", + "ipv6", + "layer2" + ], + "title": "Transport" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PTP" + }, + "ip_address": { + "type": "string", + "description": "IPv4 address/mask", + "title": "IP Address" + }, + "ip_nat": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "pool_name": { + "type": "string", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "pool_name", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Destination" + }, + "source": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "nat_type": { + "type": "string", + "enum": [ + "overload", + "pool", + "pool-address-only", + "pool-full-cone" + ], + "title": "Nat Type" + }, + "pool_name": { + "type": "string", + "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "nat_type", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IP Nat" + }, + "ipv6_enable": { + "type": "boolean", + "title": "IPv6 Enable" + }, + "ipv6_address": { + "type": "string", + "description": "IPv6 address/mask", + "title": "IPv6 Address" + }, + "ipv6_address_link_local": { + "type": "string", + "description": "Link local IPv6 address/mask", + "title": "IPv6 Address Link Local" + }, + "ipv6_nd_ra_disabled": { + "type": "boolean", + "title": "IPv6 ND RA Disabled" + }, + "ipv6_nd_managed_config_flag": { + "type": "boolean", + "title": "IPv6 ND Managed Config Flag" + }, + "ipv6_nd_prefixes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ipv6_prefix": { + "type": "string", + "title": "IPv6 Prefix" + }, + "valid_lifetime": { + "type": "string", + "description": "Infinite or lifetime in seconds", + "title": "Valid Lifetime" + }, + "preferred_lifetime": { + "type": "string", + "description": "Infinite or lifetime in seconds", + "title": "Preferred Lifetime" + }, + "no_autoconfig_flag": { + "type": "boolean", + "title": "No Autoconfig Flag" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "ipv6_prefix" + ] + }, + "title": "IPv6 ND Prefixes" + }, + "access_group_in": { + "type": "string", + "description": "Access list name", + "title": "Access Group In" + }, + "access_group_out": { + "type": "string", + "description": "Access list name", + "title": "Access Group Out" + }, + "ipv6_access_group_in": { + "type": "string", + "description": "IPv6 access list name", + "title": "IPv6 Access Group In" + }, + "ipv6_access_group_out": { + "type": "string", + "description": "IPv6 access list name", + "title": "IPv6 Access Group Out" + }, + "mac_access_group_in": { + "type": "string", + "description": "MAC access list name", + "title": "MAC Access Group In" + }, + "mac_access_group_out": { + "type": "string", + "description": "MAC access list name", + "title": "MAC Access Group Out" + }, + "pim": { + "type": "object", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "dr_priority": { + "type": "integer", + "minimum": 0, + "maximum": 429467295, + "title": "DR Priority" + }, + "sparse_mode": { + "type": "boolean", + "title": "Sparse Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PIM" + }, + "service_profile": { + "type": "string", + "description": "QOS profile", + "title": "Service Profile" + }, + "ospf_network_point_to_point": { + "type": "boolean", + "title": "OSPF Network Point To Point" + }, + "ospf_area": { + "type": "string", + "title": "OSPF Area" + }, + "ospf_cost": { + "type": "integer", + "title": "OSPF Cost" + }, + "ospf_authentication": { + "type": "string", + "enum": [ + "none", + "simple", + "message-digest" + ], + "title": "OSPF Authentication" + }, + "ospf_authentication_key": { + "type": "string", + "description": "Encrypted password", + "title": "OSPF Authentication Key" + }, + "ospf_message_digest_keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "hash_algorithm": { + "type": "string", + "enum": [ + "md5", + "sha1", + "sha256", + "sha384", + "sha512" + ], + "title": "Hash Algorithm" + }, + "key": { + "type": "string", + "description": "Encrypted password", + "title": "Key" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "id" + ] + }, + "title": "OSPF Message Digest Keys" + }, + "flow_tracker": { + "type": "object", + "properties": { + "sampled": { + "type": "string", + "description": "Flow tracker name", + "title": "Sampled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Flow Tracker" + }, + "bgp": { + "type": "object", + "properties": { + "session_tracker": { + "type": "string", + "description": "Name of session tracker", + "title": "Session Tracker" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, + "peer": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer" + }, + "peer_interface": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer Interface" + }, + "peer_type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer Type" + }, + "sflow": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "egress": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "unmodified_enable": { + "type": "boolean", + "title": "Unmodified Enable" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Egress" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Sflow" + }, + "eos_cli": { + "type": "string", + "description": "Multiline EOS CLI rendered directly on the port-channel interface in the final EOS configuration", + "title": "EOS CLI" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Structured Config" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Port Channel" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the ethernet interface in the final EOS configuration.", + "title": "Raw EOS CLI" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen.", + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "description": { + "type": "string", + "title": "Description" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "load_interval": { + "type": "integer", + "minimum": 0, + "maximum": 600, + "description": "Interval in seconds for updating interface counters\"", + "title": "Load Interval" + }, + "speed": { + "type": "string", + "description": "Speed can be interface_speed or forced interface_speed or auto interface_speed", + "title": "Speed" + }, + "mtu": { + "type": "integer", + "title": "MTU" + }, + "l2_mtu": { + "type": "integer", + "description": "\"l2_mtu\" should only be defined for platforms supporting the \"l2 mtu\" CLI\n", + "title": "L2 MTU" + }, + "vlans": { + "type": "string", + "description": "List of switchport vlans as string\nFor a trunk port this would be a range like \"1-200,300\"\nFor an access port this would be a single vlan \"123\"\n", + "title": "VLANs" + }, + "native_vlan": { + "type": "integer", + "title": "Native VLAN" + }, + "native_vlan_tag": { + "type": "boolean", + "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", + "title": "Native VLAN Tag" + }, + "mode": { + "type": "string", + "enum": [ + "access", + "dot1q-tunnel", + "trunk", + "trunk phone" + ], + "title": "Mode" + }, + "phone": { + "type": "object", + "properties": { + "trunk": { + "type": "string", + "enum": [ + "tagged", + "tagged phone", + "untagged", + "untagged phone" + ], + "title": "Trunk" + }, + "vlan": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Phone" + }, + "l2_protocol": { + "type": "object", + "properties": { + "encapsulation_dot1q_vlan": { + "type": "integer", + "description": "Vlan tag to configure on sub-interface", + "title": "Encapsulation Dot1Q VLAN" + }, + "forwarding_profile": { + "type": "string", + "description": "L2 protocol forwarding profile", + "title": "Forwarding Profile" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "L2 Protocol" + }, + "trunk_groups": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Trunk Groups" + }, + "type": { + "type": "string", + "enum": [ + "routed", + "switched", + "l3dot1q", + "l2dot1q", + "port-channel-member" + ], + "description": "l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.\nInterface will not be listed in device documentation, unless \"type\" is set.\n", + "title": "Type" + }, + "snmp_trap_link_change": { + "type": "boolean", + "title": "Snmp Trap Link Change" + }, + "address_locking": { + "type": "object", + "properties": { + "ipv4": { + "type": "boolean", + "description": "Enable address locking for IPv4", + "title": "IPv4" + }, + "ipv6": { + "type": "boolean", + "description": "Enable address locking for IPv6", + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Address Locking" + }, + "flowcontrol": { + "type": "object", + "properties": { + "received": { + "type": "string", + "enum": [ + "desired", + "on", + "off" + ], + "title": "Received" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Flowcontrol" + }, + "vrf": { + "type": "string", + "description": "VRF name", + "title": "VRF" + }, + "flow_tracker": { + "type": "object", + "properties": { + "sampled": { + "type": "string", + "description": "Flow tracker name", + "title": "Sampled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Flow Tracker" + }, + "error_correction_encoding": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": true, + "title": "Enabled" + }, + "fire_code": { + "type": "boolean", + "title": "Fire Code" + }, + "reed_solomon": { + "type": "boolean", + "title": "Reed Solomon" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Error Correction Encoding" + }, + "link_tracking_groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Group name", + "title": "Name" + }, + "direction": { + "type": "string", + "enum": [ + "upstream", + "downstream" + ], + "title": "Direction" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "Link Tracking Groups" + }, + "evpn_ethernet_segment": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "description": "EVPN Ethernet Segment Identifier (Type 1 format)", + "title": "Identifier" + }, + "redundancy": { + "type": "string", + "enum": [ + "all-active", + "single-active" + ], + "title": "Redundancy" + }, + "designated_forwarder_election": { + "type": "object", + "properties": { + "algorithm": { + "type": "string", + "enum": [ + "modulus", + "preference" + ], + "title": "Algorithm" + }, + "preference_value": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "description": "Preference_value is only used when \"algorithm\" is \"preference\"", + "title": "Preference Value" + }, + "dont_preempt": { + "type": "boolean", + "description": "Dont_preempt is only used when \"algorithm\" is \"preference\"", + "title": "Dont Preempt" + }, + "hold_time": { + "type": "integer", + "title": "Hold Time" + }, + "subsequent_hold_time": { + "type": "integer", + "title": "Subsequent Hold Time" + }, + "candidate_reachability_required": { + "type": "boolean", + "title": "Candidate Reachability Required" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Designated Forwarder Election" + }, + "mpls": { + "type": "object", + "properties": { + "shared_index": { + "type": "integer", + "minimum": 1, + "maximum": 1024, + "title": "Shared Index" + }, + "tunnel_flood_filter_time": { + "type": "integer", + "title": "Tunnel Flood Filter Time" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MPLS" + }, + "route_target": { + "type": "string", + "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN Ethernet Segment" + }, + "encapsulation_dot1q_vlan": { + "type": "integer", + "description": "VLAN tag to configure on sub-interface", + "title": "Encapsulation Dot1Q VLAN" + }, + "encapsulation_vlan": { + "type": "object", + "properties": { + "client": { + "type": "object", + "properties": { + "dot1q": { + "type": "object", + "properties": { + "vlan": { + "type": "integer", + "description": "Client VLAN ID", + "title": "VLAN" + }, + "outer": { + "type": "integer", + "description": "Client Outer VLAN ID", + "title": "Outer" + }, + "inner": { + "type": "integer", + "description": "Client Inner VLAN ID", + "title": "Inner" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Dot1Q" + }, + "unmatched": { + "type": "boolean", + "title": "Unmatched" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Client" + }, + "network": { + "type": "object", + "description": "Network encapsulations are all optional and skipped if using client unmatched", + "properties": { + "dot1q": { + "type": "object", + "properties": { + "vlan": { + "type": "integer", + "description": "Network VLAN ID", + "title": "VLAN" + }, + "outer": { + "type": "integer", + "description": "Network outer VLAN ID", + "title": "Outer" + }, + "inner": { + "type": "integer", + "description": "Network inner VLAN ID", + "title": "Inner" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Dot1Q" + }, + "client": { + "type": "boolean", + "title": "Client" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Network" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Encapsulation VLAN" + }, + "vlan_id": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "VLAN ID" + }, + "ip_address": { + "type": "string", + "description": "IPv4 address/mask", + "title": "IP Address" + }, + "ip_address_secondaries": { + "type": "array", + "items": { + "type": "string" + }, + "title": "IP Address Secondaries" + }, + "ip_helpers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ip_helper": { + "type": "string", + "title": "IP Helper" + }, + "source_interface": { + "type": "string", + "description": "Source interface name", + "title": "Source Interface" + }, + "vrf": { + "type": "string", + "description": "VRF name", + "title": "VRF" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "ip_helper" + ] + }, + "title": "IP Helpers" + }, + "ip_nat": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "pool_name": { + "type": "string", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "pool_name", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Destination" + }, + "source": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "nat_type": { + "type": "string", + "enum": [ + "overload", + "pool", + "pool-address-only", + "pool-full-cone" + ], + "title": "Nat Type" + }, + "pool_name": { + "type": "string", + "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "nat_type", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IP Nat" + }, + "ipv6_enable": { + "type": "boolean", + "title": "IPv6 Enable" + }, + "ipv6_address": { + "type": "string", + "title": "IPv6 Address" + }, + "ipv6_address_link_local": { + "type": "string", + "description": "Link local IPv6 address/mask", + "title": "IPv6 Address Link Local" + }, + "ipv6_nd_ra_disabled": { + "type": "boolean", + "title": "IPv6 ND RA Disabled" + }, + "ipv6_nd_managed_config_flag": { + "type": "boolean", + "title": "IPv6 ND Managed Config Flag" + }, + "ipv6_nd_prefixes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ipv6_prefix": { + "type": "string", + "title": "IPv6 Prefix" + }, + "valid_lifetime": { + "type": "string", + "description": "Infinite or lifetime in seconds", + "title": "Valid Lifetime" + }, + "preferred_lifetime": { + "type": "string", + "description": "Infinite or lifetime in seconds", + "title": "Preferred Lifetime" + }, + "no_autoconfig_flag": { + "type": "boolean", + "title": "No Autoconfig Flag" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "ipv6_prefix" + ] + }, + "title": "IPv6 ND Prefixes" + }, + "ipv6_dhcp_relay_destinations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "DHCP server's IPv6 address", + "title": "Address" + }, + "vrf": { + "type": "string", + "title": "VRF" + }, + "local_interface": { + "type": "string", + "description": "Local interface to communicate with DHCP server - mutually exclusive to source_address", + "title": "Local Interface" + }, + "source_address": { + "type": "string", + "description": "Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface", + "title": "Source Address" + }, + "link_address": { + "type": "string", + "description": "Override the default link address specified in the relayed DHCP packet", + "title": "Link Address" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "address" + ] + }, + "title": "IPv6 DHCP Relay Destinations" + }, + "access_group_in": { + "type": "string", + "description": "Access list name", + "title": "Access Group In" + }, + "access_group_out": { + "type": "string", + "description": "Access list name", + "title": "Access Group Out" + }, + "ipv6_access_group_in": { + "type": "string", + "description": "IPv6 access list name", + "title": "IPv6 Access Group In" + }, + "ipv6_access_group_out": { + "type": "string", + "description": "IPv6 access list name", + "title": "IPv6 Access Group Out" + }, + "mac_access_group_in": { + "type": "string", + "description": "MAC access list name", + "title": "MAC Access Group In" + }, + "mac_access_group_out": { + "type": "string", + "description": "MAC access list name", + "title": "MAC Access Group Out" + }, + "multicast": { + "type": "object", + "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "boundaries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "boundary": { + "type": "string", + "description": "ACL name or multicast IP subnet", + "title": "Boundary" + }, + "out": { + "type": "boolean", + "title": "Out" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Boundaries" + }, + "static": { + "type": "boolean", + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + }, + "ipv6": { + "type": "object", + "properties": { + "boundaries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "boundary": { + "type": "string", + "description": "ACL name or multicast IP subnet", + "title": "Boundary" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Boundaries" + }, + "static": { + "type": "boolean", + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "ospf_network_point_to_point": { + "type": "boolean", + "title": "OSPF Network Point To Point" + }, + "ospf_area": { + "type": "string", + "title": "OSPF Area" + }, + "ospf_cost": { + "type": "integer", + "title": "OSPF Cost" + }, + "ospf_authentication": { + "type": "string", + "enum": [ + "none", + "simple", + "message-digest" + ], + "title": "OSPF Authentication" + }, + "ospf_authentication_key": { + "type": "string", + "description": "Encrypted password - only type 7 supported", + "title": "OSPF Authentication Key" + }, + "ospf_message_digest_keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "hash_algorithm": { + "type": "string", + "enum": [ + "md5", + "sha1", + "sha256", + "sha384", + "sha512" + ], + "title": "Hash Algorithm" + }, + "key": { + "type": "string", + "description": "Encrypted password - only type 7 supported", + "title": "Key" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "id" + ] + }, + "title": "OSPF Message Digest Keys" + }, + "pim": { + "type": "object", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "dr_priority": { + "type": "integer", + "minimum": 0, + "maximum": 429467295, + "title": "DR Priority" + }, + "sparse_mode": { + "type": "boolean", + "title": "Sparse Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PIM" + }, + "mac_security": { + "type": "object", + "properties": { + "profile": { + "type": "string", + "title": "Profile" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MAC Security" + }, + "channel_group": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "mode": { + "type": "string", + "enum": [ + "on", + "active", + "passive" + ], + "title": "Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Channel Group" + }, + "isis_enable": { + "type": "string", + "description": "ISIS instance", + "title": "ISIS Enable" + }, + "isis_passive": { + "type": "boolean", + "title": "ISIS Passive" + }, + "isis_metric": { + "type": "integer", + "title": "ISIS Metric" + }, + "isis_network_point_to_point": { + "type": "boolean", + "title": "ISIS Network Point To Point" + }, + "isis_circuit_type": { + "type": "string", + "enum": [ + "level-1-2", + "level-1", + "level-2" + ], + "title": "ISIS Circuit Type" + }, + "isis_hello_padding": { + "type": "boolean", + "title": "ISIS Hello Padding" + }, + "isis_authentication_mode": { + "type": "string", + "enum": [ + "text", + "md5" + ], + "title": "ISIS Authentication Mode" + }, + "isis_authentication_key": { + "type": "string", + "description": "Type-7 encrypted password", + "title": "ISIS Authentication Key" + }, + "poe": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", + "default": false, + "title": "Disabled" + }, + "priority": { + "type": "string", + "enum": [ + "critical", + "high", + "medium", + "low" + ], + "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", + "title": "Priority" + }, + "reboot": { + "description": "Set the PoE power behavior for a PoE port when the system is rebooted", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Reboot" + }, + "link_down": { + "description": "Set the PoE power behavior for a PoE port when the port goes down", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + }, + "power_off_delay": { + "type": "integer", + "minimum": 1, + "maximum": 86400, + "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", + "title": "Power Off Delay" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Down" + }, + "shutdown": { + "description": "Set the PoE power behavior for a PoE port when the port is admin down", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Shutdown" + }, + "limit": { + "type": "object", + "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", + "properties": { + "class": { + "type": "integer", + "minimum": 0, + "maximum": 8, + "title": "Class" + }, + "watts": { + "type": "string", + "title": "Watts" + }, + "fixed": { + "type": "boolean", + "description": "Set to ignore hardware classification", + "title": "Fixed" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Limit" + }, + "negotiation_lldp": { + "type": "boolean", + "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", + "title": "Negotiation LLDP" + }, + "legacy_detect": { + "type": "boolean", + "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", + "title": "Legacy Detect" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PoE" + }, + "ptp": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "announce": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "title": "Interval" + }, + "timeout": { + "type": "integer", + "title": "Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Announce" + }, + "delay_req": { + "type": "integer", + "title": "Delay Req" + }, + "delay_mechanism": { + "type": "string", + "enum": [ + "e2e", + "p2p" + ], + "title": "Delay Mechanism" + }, + "sync_message": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "title": "Interval" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Sync Message" + }, + "role": { + "type": "string", + "enum": [ + "master", + "dynamic" + ], + "title": "Role" + }, + "vlan": { + "type": "string", + "description": "VLAN can be 'all' or list of vlans as string", + "title": "VLAN" + }, + "transport": { + "type": "string", + "enum": [ + "ipv4", + "ipv6", + "layer2" + ], + "title": "Transport" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PTP" + }, + "profile": { + "type": "string", + "description": "Interface profile", + "title": "Profile" + }, + "storm_control": { + "type": "object", + "properties": { + "all": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "All" + }, + "broadcast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Broadcast" + }, + "multicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "unknown_unicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Unknown Unicast" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Storm Control" + }, + "logging": { + "type": "object", + "properties": { + "event": { + "type": "object", + "properties": { + "link_status": { + "type": "boolean", + "title": "Link Status" + }, + "congestion_drops": { + "type": "boolean", + "title": "Congestion Drops" + }, + "spanning_tree": { + "type": "boolean", + "title": "Spanning Tree" + }, + "storm_control": { + "type": "boolean", + "title": "Storm Control" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Event" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Logging" + }, + "lldp": { + "type": "object", + "properties": { + "transmit": { + "type": "boolean", + "title": "Transmit" + }, + "receive": { + "type": "boolean", + "title": "Receive" + }, + "ztp_vlan": { + "type": "integer", + "description": "ZTP vlan number", + "title": "ZTP VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LLDP" + }, + "trunk_private_vlan_secondary": { + "type": "boolean", + "title": "Trunk Private VLAN Secondary" + }, + "pvlan_mapping": { + "type": "string", + "description": "List of vlans as string", + "title": "PVLAN Mapping" + }, + "vlan_translations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "List of vlans as string (only one vlan if direction is \"both\")", + "title": "From" + }, + "to": { + "type": "integer", + "description": "VLAN ID", + "title": "To" + }, + "direction": { + "type": "string", + "enum": [ + "in", + "out", + "both" + ], + "default": "both", + "title": "Direction" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "VLAN Translations" + }, + "dot1x": { + "type": "object", + "properties": { + "port_control": { + "type": "string", + "enum": [ + "auto", + "force-authorized", + "force-unauthorized" + ], + "title": "Port Control" + }, + "port_control_force_authorized_phone": { + "type": "boolean", + "title": "Port Control Force Authorized Phone" + }, + "reauthentication": { + "type": "boolean", + "title": "Reauthentication" + }, + "pae": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "authenticator" + ], + "title": "Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PAE" + }, + "authentication_failure": { + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "allow", + "drop" + ], + "title": "Action" + }, + "allow_vlan": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "Allow VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Authentication Failure" + }, + "host_mode": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "multi-host", + "single-host" + ], + "title": "Mode" + }, + "multi_host_authenticated": { + "type": "boolean", + "title": "Multi Host Authenticated" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Host Mode" + }, + "mac_based_authentication": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "host_mode_common": { + "type": "boolean", + "title": "Host Mode Common" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MAC Based Authentication" + }, + "timeout": { + "type": "object", + "properties": { + "idle_host": { + "type": "integer", + "minimum": 10, + "maximum": 65535, + "title": "Idle Host" + }, + "quiet_period": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Quiet Period" + }, + "reauth_period": { + "type": "string", + "description": "Value can be 60-4294967295 or 'server'", + "title": "Reauth Period" + }, + "reauth_timeout_ignore": { + "type": "boolean", + "title": "Reauth Timeout Ignore" + }, + "tx_period": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "TX Period" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Timeout" + }, + "reauthorization_request_limit": { + "type": "integer", + "minimum": 1, + "maximum": 10, + "title": "Reauthorization Request Limit" + }, + "unauthorized": { + "type": "object", + "properties": { + "access_vlan_membership_egress": { + "type": "boolean", + "title": "Access VLAN Membership Egress" + }, + "native_vlan_membership_egress": { + "type": "boolean", + "title": "Native VLAN Membership Egress" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Unauthorized" + }, + "eapol": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "title": "Disabled" + }, + "authentication_failure_fallback_mba": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "timeout": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Authentication Failure Fallback Mba" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Eapol" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "dot1x" + }, + "service_profile": { + "type": "string", + "description": "QOS profile", + "title": "Service Profile" + }, + "shape": { + "type": "object", + "properties": { + "rate": { + "type": "string", + "description": "Rate in kbps, pps or percent\nSupported options are platform dependent\nExamples:\n- \"5000 kbps\"\n- \"1000 pps\"\n- \"20 percent\"\n", + "title": "Rate" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Shape" + }, + "qos": { + "type": "object", + "properties": { + "trust": { + "type": "string", + "enum": [ + "dscp", + "cos", + "disabled" + ], + "title": "Trust" + }, + "dscp": { + "type": "integer", + "description": "DSCP value", + "title": "DSCP" + }, + "cos": { + "type": "integer", + "description": "COS value", + "title": "COS" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "QOS" + }, + "spanning_tree_bpdufilter": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpdufilter" + }, + "spanning_tree_bpduguard": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpduguard" + }, + "spanning_tree_guard": { + "type": "string", + "enum": [ + "loop", + "root", + "disabled" + ], + "title": "Spanning Tree Guard" + }, + "spanning_tree_portfast": { + "type": "string", + "enum": [ + "edge", + "network" + ], + "title": "Spanning Tree Portfast" + }, + "vmtracer": { + "type": "boolean", + "title": "VMTracer" + }, + "priority_flow_control": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "priorities": { + "type": "array", + "items": { + "type": "object", + "properties": { + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 7, + "title": "Priority" + }, + "no_drop": { + "type": "boolean", + "title": "No Drop" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "priority" + ] + }, + "title": "Priorities" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Priority Flow Control" + }, + "bfd": { + "type": "object", + "properties": { + "echo": { + "type": "boolean", + "title": "Echo" + }, + "interval": { + "type": "integer", + "description": "Interval in milliseconds", + "title": "Interval" + }, + "min_rx": { + "type": "integer", + "description": "Rate in milliseconds", + "title": "Min RX" + }, + "multiplier": { + "type": "integer", + "minimum": 3, + "maximum": 50, + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BFD" + }, + "service_policy": { + "type": "object", + "properties": { + "pbr": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Policy Based Routing Policy-map name", + "title": "Input" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PBR" + }, + "qos": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Quality of Service Policy-map name", + "title": "Input" + } + }, + "required": [ + "input" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "QOS" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Service Policy" + }, + "mpls": { + "type": "object", + "properties": { + "ip": { + "type": "boolean", + "title": "IP" + }, + "ldp": { + "type": "object", + "properties": { + "interface": { + "type": "boolean", + "title": "Interface" + }, + "igp_sync": { + "type": "boolean", + "title": "IGP Sync" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LDP" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MPLS" + }, + "lacp_timer": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "fast", + "normal" + ], + "title": "Mode" + }, + "multiplier": { + "type": "integer", + "minimum": 3, + "maximum": 3000, + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LACP Timer" + }, + "lacp_port_priority": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "LACP Port Priority" + }, + "transceiver": { + "type": "object", + "properties": { + "media": { + "type": "object", + "properties": { + "override": { + "type": "string", + "description": "Transceiver type", + "title": "Override" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Media" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Transceiver" + }, + "ip_proxy_arp": { + "type": "boolean", + "title": "IP Proxy ARP" + }, + "traffic_policy": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Ingress traffic policy", + "title": "Input" + }, + "output": { + "type": "string", + "description": "Egress traffic policy", + "title": "Output" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Traffic Policy" + }, + "bgp": { + "type": "object", + "properties": { + "session_tracker": { + "type": "string", + "description": "Name of session tracker", + "title": "Session Tracker" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, + "peer": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer" + }, + "peer_interface": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer Interface" + }, + "peer_type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer Type" + }, + "sflow": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "egress": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "unmodified_enable": { + "type": "boolean", + "title": "Unmodified Enable" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Egress" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Sflow" + }, + "port_profile": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Port Profile" + }, + "eos_cli": { + "type": "string", + "description": "Multiline EOS CLI rendered directly on the ethernet interface in the final EOS configuration", + "title": "EOS CLI" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Structured Config" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Network Ports" + }, + "network_services_keys": { + "type": "array", + "description": "Network Services can be grouped by using separate keys.\nThe keys can be customized to provide a better better organization or grouping of your data.\n`network_services_keys` should be defined in the top level group_vars for the fabric.\nThe default values will be overridden if defining this key, so it is recommended to copy the defaults and modify them.\n", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Name" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "default": [ + { + "name": "tenants" + } + ], + "title": "Network Services Keys" + }, + "node_type_keys": { + "type": "array", + "description": "Define Node Type Keys, to specify the properties of each node type in the fabric.\nThis allows for complete customization of the fabric layout and functionality.\n`node_type_keys` should be defined in top level group_var for the fabric.\nThe default values will be overridden if defining this key, so it is recommended to copy the defaults and modify them.\n", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "title": "Key" + }, + "type": { + "type": "string", + "description": "Type value matching this node_type_key.", + "title": "Type" + }, + "connected_endpoints": { + "type": "boolean", + "default": false, + "description": "Are endpoints connected to this node type.", + "title": "Connected Endpoints" + }, + "default_evpn_role": { + "type": "string", + "enum": [ + "none", + "client", + "server" + ], + "default": "none", + "description": "Default evpn_role. Can be overridden in topology vars.", + "title": "Default EVPN Role" + }, + "default_ptp_priority1": { + "type": "integer", + "minimum": 0, + "maximum": 255, + "default": 127, + "description": "Default PTP priority 1", + "title": "Default PTP Priority1" + }, + "default_underlay_routing_protocol": { + "type": "string", + "default": "ebgp", + "enum": [ + "ebgp", + "ibgp", + "ospf", + "ospf-ldp", + "isis", + "isis-sr", + "isis-ldp", + "isis-sr-ldp", + "none" + ], + "description": "Set the default underlay routing_protocol.\nCan be overridden by setting \"underlay_routing_protocol\" host/group_vars.\n", + "title": "Default Underlay Routing Protocol" + }, + "default_overlay_routing_protocol": { + "type": "string", + "default": "ebgp", + "enum": [ + "ebgp", + "ibgp", + "her", + "cvx", + "none" + ], + "description": "Set the default overlay routing_protocol.\nCan be overridden by setting \"overlay_routing_protocol\" host/group_vars.\n", + "title": "Default Overlay Routing Protocol" + }, + "default_mpls_overlay_role": { + "type": "string", + "enum": [ + "client", + "server", + "none" + ], + "description": "Set the default mpls overlay role.\nActing role in overlay control plane.\n", + "title": "Default MPLS Overlay Role" + }, + "default_overlay_address_families": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "evpn", + "vpn-ipv4", + "vpn-ipv6" + ] + }, + "description": "Set the default overlay address families.\n", + "title": "Default Overlay Address Families" + }, + "default_evpn_encapsulation": { + "type": "string", + "enum": [ + "mpls", + "vxlan" + ], + "description": "Set the default evpn encapsulation.\n", + "title": "Default EVPN Encapsulation" + }, + "mlag_support": { + "type": "boolean", + "default": false, + "description": "Can this node type support mlag.", + "title": "MLAG Support" + }, + "network_services": { + "description": "Will network services be deployed on this node type.", + "type": "object", + "properties": { + "l1": { + "type": "boolean", + "default": false, + "description": "??", + "title": "L1" + }, + "l2": { + "type": "boolean", + "default": false, + "description": "Vlans", + "title": "L2" + }, + "l3": { + "type": "boolean", + "default": false, + "description": "VRFs, SVIs (if l2 is true).\nOnly supported with underlay_router.\n", + "title": "L3" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Network Services" + }, + "underlay_router": { + "type": "boolean", + "default": true, + "description": "Is this node type a L3 device.", + "title": "Underlay Router" + }, + "uplink_type": { + "type": "string", + "enum": [ + "p2p", + "port-channel" + ], + "default": "p2p", + "description": "Uplinks must be p2p if \"vtep\" or \"underlay_router\" is true.", + "title": "Uplink Type" + }, + "vtep": { + "type": "boolean", + "default": false, + "description": "Is this switch an EVPN VTEP.", + "title": "Vtep" + }, + "mpls_lsr": { + "type": "boolean", + "default": false, + "description": "Is this switch an MPLS LSR.", + "title": "MPLS Lsr" + }, + "ip_addressing": { + "type": "object", + "description": "Override ip_addressing templates.", + "properties": { + "python_module": { + "type": "string", + "description": "Custom Python Module to import for IP addressing.", + "title": "Python Module" + }, + "python_class_name": { + "type": "string", + "description": "Name of Custom Python Class to import for IP addressing.", + "title": "Python Class Name" + }, + "router_id": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "Router ID" + }, + "router_id_ipv6": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "Router ID IPv6" + }, + "mlag_ip_primary": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "MLAG IP Primary" + }, + "mlag_ip_secondary": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "MLAG IP Secondary" + }, + "mlag_l3_ip_primary": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "MLAG L3 IP Primary" + }, + "mlag_l3_ip_secondary": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "MLAG L3 IP Secondary" + }, + "mlag_ibgp_peering_ip_primary": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "MLAG Ibgp Peering IP Primary" + }, + "mlag_ibgp_peering_ip_secondary": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "MLAG Ibgp Peering IP Secondary" + }, + "p2p_uplinks_ip": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "P2P Uplinks IP" + }, + "p2p_uplinks_peer_ip": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "P2P Uplinks Peer IP" + }, + "vtep_ip_mlag": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "Vtep IP MLAG" + }, + "vtep_ip": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "Vtep IP" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IP Addressing" + }, + "interface_descriptions": { + "type": "object", + "description": "Override interface_descriptions templates\nIf description templates use Jinja2, they have to strip whitespaces using {%- -%} on any code blocks.\n", + "properties": { + "python_module": { + "type": "string", + "description": "Custom Python Module to import for interface descriptions.", + "title": "Python Module" + }, + "python_class_name": { + "type": "string", + "description": "Name of Custom Python Class to import for interface descriptions.", + "title": "Python Class Name" + }, + "underlay_ethernet_interfaces": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "Underlay Ethernet Interfaces" + }, + "underlay_port_channel_interfaces": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "Underlay Port Channel Interfaces" + }, + "mlag_ethernet_interfaces": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "MLAG Ethernet Interfaces" + }, + "mlag_port_channel_interfaces": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "MLAG Port Channel Interfaces" + }, + "connected_endpoints_ethernet_interfaces": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "Connected Endpoints Ethernet Interfaces" + }, + "connected_endpoints_port_channel_interfaces": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "Connected Endpoints Port Channel Interfaces" + }, + "overlay_loopback_interface": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "Overlay Loopback Interface" + }, + "vtep_loopback_interface": { + "type": "string", + "description": "Path to Custom J2 template.", + "title": "Vtep Loopback Interface" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Interface Descriptions" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "key" + ] + }, + "title": "Node Type Keys" + }, + "only_local_vlan_trunk_groups": { + "type": "boolean", + "description": "A vlan can have many trunk_groups assigned.\nTo avoid unneeded configuration changes on all leaf switches when a new trunk group is added,\nthis feature will only configure the vlan trunk groups matched with local connected_endpoints.\nSee \"Details on only_local_vlan_trunk_groups\" below.\nRequires \"enable_trunk_groups: true\".\n", + "default": false, + "title": "Only Local VLAN Trunk Groups" + }, + "overlay_cvx_servers": { + "description": "List of CVX vxlan overlay controllers.\nRequired if overlay_routing_protocol == CVX.\nCVX servers (VMs) are peering using their management interface, so mgmt_ip must be set for all CVX servers.\n", + "type": "array", + "items": { + "type": "string", + "description": "'inventory_hostname' of CVX server" + }, + "title": "Overlay CVX Servers" + }, + "overlay_her_flood_list_per_vni": { + "type": "boolean", + "description": "When using Head-End Replication, configure flood-lists per VNI.\nBy default HER will be configured with a common flood-list containing all VTEPs.\nThis behavior can be changed to per-VNI flood-lists by setting `overlay_her_flood_list_per_vni: true`.\nThis will make `eos_designs` consider configured VLANs per VTEP, and only include the relevant VTEPs to each VNI's flood-list.\n", + "default": false, + "title": "Overlay Her Flood List Per Vni" + }, + "overlay_her_flood_list_scope": { + "type": "string", + "description": "When using Head-End Replication, set the scope of flood-lists to Fabric or DC.\nBy default all VTEPs in the Fabric (part of the inventory group referenced by \"fabric_name\") are added to the flood-lists.\nThis can be changed to all VTEPs in the DC (sharing the same \"dc_name\" value).\nThis is useful if Border Leaf switches are dividing the VXLAN overlay into separate domains.\n", + "enum": [ + "fabric", + "dc" + ], + "default": "fabric", + "title": "Overlay Her Flood List Scope" + }, + "overlay_loopback_description": { + "description": "Customize the description on overlay interface Loopback0.", + "type": "string", + "title": "Overlay Loopback Description" + }, + "overlay_mlag_rfc5549": { + "description": "IPv6 Unnumbered for MLAG iBGP connections.\nRequires \"underlay_rfc5549: true\".\n", + "type": "boolean", + "default": false, + "title": "Overlay MLAG Rfc5549" + }, + "overlay_rd_type": { + "type": "object", + "description": "Configuration options for the Administrator subfield (first part of RD) and the Assigned Number subfield (second part of RD).\n\nBy default Route Distinguishers (RD) are set to:\n- `:` for VLANs and VLAN-Aware Bundles with L2 vlans.\n- `:` for VLAN-Aware Bundles with SVIs.\n- `:` for VRFs.\n\nNote:\nRD is a 48-bit value which is split into <16-bit>:<32-bit> or <32-bit>:<16-bit>.\nWhen using loopback or 32-bit ASN/number the assigned number can only be a 16-bit number. This may be a problem with large VNIs.\nFor 16-bit ASN/number the assigned number can be a 32-bit number.\n", + "properties": { + "admin_subfield": { + "type": "string", + "description": "The method for deriving RD Administrator subfield (first part of RD):\n- 'overlay_loopback_ip' means the IP address of Loopback0.\n- 'vtep_loopback' means the IP address of the VTEP loopback interface.\n- 'bgp_as' means the AS number of the device.\n- 'switch_id' means the 'id' value of the device.\n- Any without mask.\n- Integer between <0-65535>.\n- Integer between <0-4294967295>.\n", + "default": "overlay_loopback_ip", + "title": "Admin Subfield" + }, + "admin_subfield_offset": { + "type": "string", + "description": "Offset can only be used if admin_subfield is an integer between <0-4294967295> or 'switch_id'.\nTotal value of admin_subfield + admin_subfield_offset must be <= 4294967295.\n", + "title": "Admin Subfield Offset" + }, + "vrf_admin_subfield": { + "type": "string", + "description": "The method for deriving RD Administrator subfield (first part of RD) for VRF services:\n- 'overlay_loopback_ip' means the IP address of Loopback0.\n- 'vtep_loopback' means the IP address of the VTEP loopback interface.\n- 'bgp_as' means the AS number of the device.\n- 'switch_id' means the 'id' value of the device.\n- Any without mask.\n- Integer between <0-65535>.\n- Integer between <0-4294967295>.\n\n'vrf_admin_subfield' takes precedence for VRF RDs if set. Otherwise the 'admin_subfield' value will be used.\n", + "title": "VRF Admin Subfield" + }, + "vrf_admin_subfield_offset": { + "type": "string", + "description": "Offset can only be used if 'vrf_admin_subfield' is an integer between <0-4294967295> or 'switch_id'.\nTotal value of 'vrf_admin_subfield' + 'vrf_admin_subfield_offset' must be <= 4294967295.\n", + "title": "VRF Admin Subfield Offset" + }, + "vlan_assigned_number_subfield": { + "type": "string", + "enum": [ + "mac_vrf_id", + "mac_vrf_vni", + "vlan_id" + ], + "default": "mac_vrf_id", + "description": "The method for deriving RD Assigned Number subfield for VLAN services (second part of RD):\n- 'mac_vrf_id' means `(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id`.\n- 'mac_vrf_vni' means `(mac_vrf_vni_base or mac_vrf_id_base) + vlan_id`.\n- 'vlan_id' will only use the 'vlan_id' and ignores all base values.\n\nThese methods can be overridden per VLAN if either 'rd_override', 'rt_override' or 'vni_override' is set (preferred in this order).", + "title": "VLAN Assigned Number Subfield" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Overlay Rd Type" + }, + "overlay_routing_protocol": { + "description": "- The following overlay routing protocols are supported:\n - eBGP: Configures fabric with eBGP, default for l3ls-evpn design.\n - iBGP: Configured fabric with iBGP, only supported with OSPF or ISIS variants in underlay, default for mpls design.\n - CVX: Configures fabric to leverage CloudVision eXchange as the overlay controller.\n - HER: Configures fabric with Head-End Replication, configures static VXLAN flood-lists instead of using a dynamic overlay protocol.\n - none: No overlay configuration will be generated, default for l2ls design.\n", + "type": "string", + "enum": [ + "ebgp", + "ibgp", + "cvx", + "her", + "none" + ], + "default": "ebgp", + "title": "Overlay Routing Protocol" + }, + "overlay_routing_protocol_address_family": { + "type": "string", + "description": "When set to `ipv6`, enable overlay EVPN peering with IPv6 addresses.\nThis feature depends on underlay_ipv6 variable. As of today, only RFC5549 is capable to transport IPv6 in the underlay.\n", + "enum": [ + "ipv4", + "ipv6" + ], + "default": "ipv4", + "title": "Overlay Routing Protocol Address Family" + }, + "overlay_rt_type": { + "type": "object", + "description": "Configuration options for the Administrator subfield (first part of RT) and the Assigned Number subfield (second part of RT).\n\nBy default Route Targets (RT) are set to:\n- `<(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id>:<(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id>` for VLANs and VLAN-Aware Bundles with L2 vlans.\n- `:` for VLAN-Aware Bundles with SVIs.\n- `:` for VRFs.\n\nNotes:\nRT is a 48-bit value which is split into <16-bit>:<32-bit> or <32-bit>:<16-bit>.\nWhen using 32-bit ASN/number the VNI can only be a 16-bit number. Alternatively use vlan_id/vrf_id as assigned number.\nFor 16-bit ASN/number the assigned number can be a 32-bit number.\n", + "properties": { + "admin_subfield": { + "type": "string", + "description": "The method for deriving RT Administrator subfield (first part of RT):\n- 'vrf_id' means `(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id` for VLANs and `(vrf_id or vrf_vni)` for VRFs.\n- 'vrf_vni' means `(mac_vrf_vni_base or mac_vrf_id_base) + vlan_id` for VLANs and `(vrf_vni or vrf_id)` for VRFs.\n- 'id' means `vlan_id` for VLANs and `(vrf_id or vrf_vni)` for VRFs.\n- 'bgp_as' means the AS number of the device.\n- Integer between <0-65535>.\n- Integer between <0-4294967295>.\n\nThe 'vrf_id' and 'vrf_vni' methods can be overridden per VLAN if either 'rt_override' or 'vni_override' is set (preferred in this order).\n", + "default": "vrf_id", + "title": "Admin Subfield" + }, + "vrf_admin_subfield": { + "type": "string", + "description": "The method for deriving RT Administrator subfield (first part of RT) for VRF services:\n- 'id' means `(vrf_id or vrf_vni)`.\n- 'vrf_id' means `(vrf_id or vrf_vni)`.\n- 'vrf_vni' means `(vrf_vni or vrf_id)`.\n- 'bgp_as' means the AS number of the device.\n- Integer between <0-65535>.\n- Integer between <0-4294967295>.\n\n'vrf_admin_subfield' takes precedence for VRF RDs if set. Otherwise the 'admin_subfield' value will be used.\n", + "default": "vrf_id", + "title": "VRF Admin Subfield" + }, + "vlan_assigned_number_subfield": { + "type": "string", + "enum": [ + "mac_vrf_id", + "mac_vrf_vni", + "vlan_id" + ], + "default": "mac_vrf_id", + "description": "The method for deriving RT Assigned Number subfield for VLAN services (second part of RT):\n- 'mac_vrf_id' means `(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id`.\n- 'mac_vrf_vni' means `(mac_vrf_vni_base or mac_vrf_id_base) + vlan_id`.\n- 'vlan_id' will only use the 'vlan_id' and ignores all base values.\n\nThese methods can be overridden per VLAN if either 'rt_override' or 'vni_override' is set (preferred in this order).", + "title": "VLAN Assigned Number Subfield" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Overlay Rt Type" + }, + "p2p_uplinks_mtu": { + "description": "Point to Point Links MTU.", + "type": "integer", + "minimum": 68, + "maximum": 65535, + "default": 9214, + "title": "P2P Uplinks MTU" + }, + "p2p_uplinks_qos_profile": { + "description": "QOS Profile assigned on all infrastructure links.", + "type": "string", + "title": "P2P Uplinks QOS Profile" + }, + "platform_settings": { + "type": "array", + "items": { + "type": "object", + "properties": { + "platforms": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Platforms" + }, + "trident_forwarding_table_partition": { + "type": "string", + "description": "Only applied when evpn_multicast is true.", + "title": "Trident Forwarding Table Partition" + }, + "reload_delay": { + "type": "object", + "properties": { + "mlag": { + "type": "integer", + "minimum": 0, + "maximum": 86400, + "description": "In seconds.", + "title": "MLAG" + }, + "non_mlag": { + "type": "integer", + "minimum": 0, + "maximum": 86400, + "description": "In seconds.", + "title": "Non MLAG" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Reload Delay" + }, + "tcam_profile": { + "type": "string", + "title": "TCAM Profile" + }, + "lag_hardware_only": { + "type": "boolean", + "title": "LAG Hardware Only" + }, + "feature_support": { + "type": "object", + "properties": { + "queue_monitor_length_notify": { + "type": "boolean", + "default": true, + "title": "Queue Monitor Length Notify" + }, + "interface_storm_control": { + "type": "boolean", + "default": true, + "title": "Interface Storm Control" + }, + "poe": { + "type": "boolean", + "default": false, + "title": "PoE" + }, + "bgp_update_wait_install": { + "type": "boolean", + "default": true, + "description": "Disables FIB updates and route advertisement when the BGP instance is initiated until the BGP convergence state is reached.\nCan be overridden by setting \"bgp_update_wait_install\" host/group_vars.\n", + "title": "BGP Update Wait Install" + }, + "bgp_update_wait_for_convergence": { + "type": "boolean", + "default": true, + "description": "Do not advertise reachability to a prefix until that prefix has been installed in hardware.\nThis will eliminate any temporary black holes due to a BGP speaker advertising reachability to a prefix that may not yet be installed into the forwarding plane.\nCan be overridden by setting \"bgp_update_wait_for_convergence\" host/group_vars.\n", + "title": "BGP Update Wait For Convergence" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Feature Support" + }, + "management_interface": { + "type": "string", + "default": "Management1", + "title": "Management Interface" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the root level of the final EOS configuration.", + "title": "Raw EOS CLI" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "default": [ + { + "platforms": [ + "default" + ], + "feature_support": { + "queue_monitor_length_notify": false + }, + "reload_delay": { + "mlag": 300, + "non_mlag": 330 + } + }, + { + "platforms": [ + "7050X3", + "720XP", + "722XP" + ], + "feature_support": { + "queue_monitor_length_notify": false + }, + "reload_delay": { + "mlag": 300, + "non_mlag": 330 + }, + "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072" + }, + { + "platforms": [ + "7280R", + "7280R2", + "7020R" + ], + "lag_hardware_only": true, + "reload_delay": { + "mlag": 900, + "non_mlag": 1020 + }, + "tcam_profile": "vxlan-routing" + }, + { + "platforms": [ + "7280R3" + ], + "reload_delay": { + "mlag": 900, + "non_mlag": 1020 + } + }, + { + "platforms": [ + "7500R", + "7500R2" + ], + "lag_hardware_only": true, + "management_interface": "Management0", + "reload_delay": { + "mlag": 900, + "non_mlag": 1020 + }, + "tcam_profile": "vxlan-routing" + }, + { + "platforms": [ + "7500R3", + "7800R3" + ], + "management_interface": "Management0", + "reload_delay": { + "mlag": 900, + "non_mlag": 1020 + } + }, + { + "platforms": [ + "7368X4" + ], + "management_interface": "Management0", + "reload_delay": { + "mlag": 300, + "non_mlag": 330 + } + }, + { + "platforms": [ + "7300X3" + ], + "management_interface": "Management0", + "reload_delay": { + "mlag": 1200, + "non_mlag": 1320 + }, + "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072" + }, + { + "platforms": [ + "VEOS", + "VEOS-LAB", + "vEOS", + "vEOS-lab" + ], + "feature_support": { + "bgp_update_wait_for_convergence": false, + "bgp_update_wait_install": false, + "interface_storm_control": false, + "queue_monitor_length_notify": false + }, + "reload_delay": { + "mlag": 300, + "non_mlag": 330 + } + }, + { + "platforms": [ + "CEOS", + "cEOS", + "ceos", + "cEOSLab" + ], + "feature_support": { + "bgp_update_wait_for_convergence": false, + "bgp_update_wait_install": false, + "interface_storm_control": false, + "queue_monitor_length_notify": false + }, + "management_interface": "Management0", + "reload_delay": { + "mlag": 300, + "non_mlag": 330 + } + } + ], + "title": "Platform Settings" + }, + "platform_speed_groups": { + "type": "array", + "description": "Set Hardware Speed Groups per Platform.", + "items": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "title": "Platform" + }, + "speeds": { + "type": "array", + "items": { + "type": "object", + "properties": { + "speed": { + "type": "string", + "title": "Speed" + }, + "speed_groups": { + "type": "array", + "items": { + "type": "integer" + }, + "title": "Speed Groups" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "speed" + ] + }, + "title": "Speeds" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "platform" + ] + }, + "title": "Platform Speed Groups" + }, + "pod_name": { + "description": "POD Name is used in:\n- Fabric Documentation (Optional, falls back to dc_name and then to fabric_name)\n- SNMP Location: `snmp_settings.location` (Optional)\n- VRF Loopbacks: `vtep_diagnostic.loopback_ip_pools.pod` (Required)\n\nRecommended to be common between Spines and Leafs within a POD (One l3ls topology).\n", + "type": "string", + "title": "Pod Name" + }, + "port_profiles": { + "type": "array", + "description": "Optional profiles to share common settings for connected_endpoints and/or network_ports.\nKeys are the same used under endpoints adapters. Keys defined under endpoints adapters take precedence.\n", + "items": { + "type": "object", + "properties": { + "profile": { + "type": "string", + "description": "Port profile name.", + "title": "Profile" + }, + "parent_profile": { + "type": "string", + "description": "Parent profile is optional.\nPort_profiles can refer to another port_profile to inherit settings in up to two levels (adapter->profile->parent_profile).", + "title": "Parent Profile" + }, + "speed": { + "type": "string", + "description": "Set adapter speed: `< interface_speed >`, `forced < interface_speed >`, `auto < interface_speed >`.\nIf not specified will be auto.\n", + "title": "Speed" + }, + "description": { + "type": "string", + "description": "By default the description is built leveraging `_`.\nWhen set this key will overide the default value on the physical ports.\n", + "title": "Description" + }, + "enabled": { + "type": "boolean", + "description": "Administrative state, setting to false will set the port to 'shutdown' in the intended configuration.\n", + "default": true, + "title": "Enabled" + }, + "mode": { + "type": "string", + "enum": [ + "access", + "dot1q-tunnel", + "trunk", + "trunk phone" + ], + "description": "Interface mode.", + "title": "Mode" + }, + "mtu": { + "type": "integer", + "minimum": 68, + "maximum": 65535, + "title": "MTU" + }, + "l2_mtu": { + "type": "integer", + "minimum": 68, + "maximum": 9416, + "description": "This should only be defined for platforms supporting the \"l2 mtu\" CLI command.", + "title": "L2 MTU" + }, + "native_vlan": { + "type": "integer", + "description": "Native VLAN for a trunk port.\nIf both `native_vlan` and `native_vlan_tag`, `native_vlan_tag` takes precedence.\n", + "minimum": 1, + "maximum": 4094, + "title": "Native VLAN" + }, + "native_vlan_tag": { + "type": "boolean", + "default": false, + "description": "If both `native_vlan` and `native_vlan_tag`, `native_vlan_tag` takes precedence.", + "title": "Native VLAN Tag" + }, + "trunk_groups": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Required with `enable_trunk_groups: true`.\nTrunk Groups are used for limiting VLANs on trunk ports to VLANs with the same Trunk Group.\n", + "title": "Trunk Groups" + }, + "vlans": { + "type": "string", + "description": "Interface VLANs - if not set, the EOS default is that all VLANs are allowed for trunk ports, and VLAN 1 will be used for access ports.", + "title": "VLANs" + }, + "spanning_tree_portfast": { + "type": "string", + "enum": [ + "edge", + "network" + ], + "title": "Spanning Tree Portfast" + }, + "spanning_tree_bpdufilter": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpdufilter" + }, + "spanning_tree_bpduguard": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpduguard" + }, + "flowcontrol": { + "type": "object", + "properties": { + "received": { + "type": "string", + "enum": [ + "received", + "send", + "on" + ], + "title": "Received" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Flowcontrol" + }, + "qos_profile": { + "type": "string", + "description": "QOS profile name", + "title": "QOS Profile" + }, + "ptp": { + "type": "object", + "description": "The global PTP profile parameters will be applied to all connected endpoints where `ptp` is manually enabled.\n`ptp role master` is set to ensure control over the PTP topology.\n", + "properties": { + "enabled": { + "type": "boolean", + "default": false, + "title": "Enabled" + }, + "endpoint_role": { + "type": "string", + "default": "follower", + "enum": [ + "bmca", + "default", + "follower" + ], + "title": "Endpoint Role" + }, + "profile": { + "type": "string", + "default": "aes67-r16-2016", + "enum": [ + "aes67", + "aes67-r16-2016", + "smpte2059-2" + ], + "title": "Profile" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PTP" + }, + "sflow": { + "type": "boolean", + "description": "Configures sFlow on the interface. Overrides `fabric_sflow` setting.\n", + "title": "Sflow" + }, + "link_tracking": { + "type": "object", + "description": "Configure the downstream interfaces of a respective Link Tracking Group.\nIf `port_channel` is defined in an adapter, then the port-channel interface is configured to be the downstream.\nElse all the ethernet interfaces will be configured as downstream -> to configure single-active EVPN multihomed networks.\n", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "name": { + "type": "string", + "description": "Tracking group name.\nThe default group name is taken from fabric variable of the switch, `link_tracking.groups[0].name` with default value being \"LT_GROUP1\".\nOptional if default link_tracking settings are configured on the node.\n", + "title": "Name" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Tracking" + }, + "dot1x": { + "type": "object", + "description": "802.1x", + "properties": { + "port_control": { + "type": "string", + "enum": [ + "auto", + "force-authorized", + "force-unauthorized" + ], + "title": "Port Control" + }, + "port_control_force_authorized_phone": { + "type": "boolean", + "title": "Port Control Force Authorized Phone" + }, + "reauthentication": { + "type": "boolean", + "title": "Reauthentication" + }, + "pae": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "authenticator" + ], + "title": "Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PAE" + }, + "authentication_failure": { + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "allow", + "drop" + ], + "title": "Action" + }, + "allow_vlan": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "Allow VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Authentication Failure" + }, + "host_mode": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "multi-host", + "single-host" + ], + "title": "Mode" + }, + "multi_host_authenticated": { + "type": "boolean", + "title": "Multi Host Authenticated" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Host Mode" + }, + "mac_based_authentication": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "host_mode_common": { + "type": "boolean", + "title": "Host Mode Common" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MAC Based Authentication" + }, + "timeout": { + "type": "object", + "properties": { + "idle_host": { + "type": "integer", + "minimum": 10, + "maximum": 65535, + "title": "Idle Host" + }, + "quiet_period": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Quiet Period" + }, + "reauth_period": { + "type": "string", + "description": "Range 60-4294967295 or \"server\".", + "title": "Reauth Period" + }, + "reauth_timeout_ignore": { + "type": "boolean", + "title": "Reauth Timeout Ignore" + }, + "tx_period": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "TX Period" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Timeout" + }, + "reauthorization_request_limit": { + "type": "integer", + "minimum": 1, + "maximum": 10, + "title": "Reauthorization Request Limit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "dot1x" + }, + "poe": { + "type": "object", + "description": "Power Over Ethernet settings applied on port. Only configured if platform supports PoE.", + "properties": { + "disabled": { + "type": "boolean", + "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", + "default": false, + "title": "Disabled" + }, + "priority": { + "type": "string", + "enum": [ + "critical", + "high", + "medium", + "low" + ], + "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", + "title": "Priority" + }, + "reboot": { + "description": "Set the PoE power behavior for a PoE port when the system is rebooted", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Reboot" + }, + "link_down": { + "description": "Set the PoE power behavior for a PoE port when the port goes down", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + }, + "power_off_delay": { + "type": "integer", + "minimum": 1, + "maximum": 86400, + "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", + "title": "Power Off Delay" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Down" + }, + "shutdown": { + "description": "Set the PoE power behavior for a PoE port when the port is admin down", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Shutdown" + }, + "limit": { + "type": "object", + "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", + "properties": { + "class": { + "type": "integer", + "minimum": 0, + "maximum": 8, + "title": "Class" + }, + "watts": { + "type": "string", + "title": "Watts" + }, + "fixed": { + "type": "boolean", + "description": "Set to ignore hardware classification", + "title": "Fixed" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Limit" + }, + "negotiation_lldp": { + "type": "boolean", + "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", + "title": "Negotiation LLDP" + }, + "legacy_detect": { + "type": "boolean", + "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", + "title": "Legacy Detect" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PoE" + }, + "storm_control": { + "type": "object", + "description": "Storm control settings applied on port toward the endpoint.", + "properties": { + "all": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level.", + "title": "Level" + }, + "unit": { + "type": "string", + "enum": [ + "percent", + "pps" + ], + "default": "percent", + "description": "Optional variable and is hardware dependent.", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "All" + }, + "broadcast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level.", + "title": "Level" + }, + "unit": { + "type": "string", + "enum": [ + "percent", + "pps" + ], + "default": "percent", + "description": "Optional variable and is hardware dependent.", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Broadcast" + }, + "multicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level.", + "title": "Level" + }, + "unit": { + "type": "string", + "enum": [ + "percent", + "pps" + ], + "default": "percent", + "description": "Optional variable and is hardware dependent.", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "unknown_unicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level.", + "title": "Level" + }, + "unit": { + "type": "string", + "enum": [ + "percent", + "pps" + ], + "default": "percent", + "description": "Optional variable and is hardware dependent.", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Unknown Unicast" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Storm Control" + }, + "monitor_sessions": { + "type": "array", + "description": "Used to define switchports as source or destination for monitoring sessions.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Session name.", + "title": "Name" + }, + "role": { + "type": "string", + "enum": [ + "source", + "destination" + ], + "title": "Role" + }, + "source_settings": { + "type": "object", + "properties": { + "direction": { + "type": "string", + "enum": [ + "rx", + "tx", + "both" + ], + "title": "Direction" + }, + "access_group": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ip", + "ipv6", + "mac" + ], + "title": "Type" + }, + "name": { + "description": "ACL name.", + "type": "string", + "title": "Name" + }, + "priority": { + "type": "integer", + "title": "Priority" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Access Group" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source Settings" + }, + "session_settings": { + "type": "object", + "description": "Session settings are defined per session name.\nDifferent session_settings for the same session name will be combined/merged.\n", + "properties": { + "encapsulation_gre_metadata_tx": { + "type": "boolean", + "title": "Encapsulation Gre Metadata TX" + }, + "header_remove_size": { + "type": "integer", + "description": "Number of bytes to remove from header.", + "title": "Header Remove Size" + }, + "access_group": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ip", + "ipv6", + "mac" + ], + "title": "Type" + }, + "name": { + "description": "ACL name.", + "type": "string", + "title": "Name" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Access Group" + }, + "rate_limit_per_ingress_chip": { + "type": "string", + "description": "Ratelimit and unit as string.\nExamples:\n \"100000 bps\"\n \"100 kbps\"\n \"10 mbps\"\n", + "title": "Rate Limit Per Ingress Chip" + }, + "rate_limit_per_egress_chip": { + "type": "string", + "description": "Ratelimit and unit as string.\nExamples:\n \"100000 bps\"\n \"100 kbps\"\n \"10 mbps\"\n", + "title": "Rate Limit Per Egress Chip" + }, + "sample": { + "type": "integer", + "title": "Sample" + }, + "truncate": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "size": { + "type": "integer", + "description": "Size in bytes", + "title": "Size" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Truncate" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Session Settings" + } + }, + "required": [ + "name" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Monitor Sessions" + }, + "ethernet_segment": { + "type": "object", + "description": "Settings for all or single-active EVPN multihoming.", + "properties": { + "short_esi": { + "type": "string", + "description": "In format xxxx:xxxx:xxxx or \"auto\".\nDefine a manual short-esi (be careful using this on profiles) or set the value to \"auto\" to automatically generate the value.\nPlease see the notes under \"EVPN A/A ESI dual and single-attached endpoint scenarios\" before setting `short_esi: auto`.\n", + "title": "Short Esi" + }, + "redundancy": { + "type": "string", + "enum": [ + "all-active", + "single-active" + ], + "description": "If omitted, Port-Channels use the EOS default of all-active.\nIf omitted, Ethernet interfaces are configured as single-active.\n", + "title": "Redundancy" + }, + "designated_forwarder_algorithm": { + "type": "string", + "enum": [ + "auto", + "modulus", + "preference" + ], + "description": "Configure DF algorithm and preferences.\n- auto: Use preference-based algorithm and assign preference based on position of device in the 'switches' list,\n e.g., assuming a list of three switches, this would assign a preference of 200 to the first switch, 100 to the 2nd, and 0 to the third.\n- preference: Set preference for each switch manually using designated_forwarder_preferences key.\n- modulus: Use the default modulus-based algorithm.\nIf omitted, Port-Channels use the EOS default of modulus.\nIf omitted, Ethernet interfaces default to the 'auto' mechanism detailed above.\n", + "title": "Designated Forwarder Algorithm" + }, + "designated_forwarder_preferences": { + "type": "array", + "description": "Manual preference as described above, required only for preference algorithm.", + "items": { + "type": "string" + }, + "title": "Designated Forwarder Preferences" + }, + "dont_preempt": { + "type": "boolean", + "description": "Disable preemption for single-active forwarding when auto/manual DF preference is configured.", + "title": "Dont Preempt" + } + }, + "required": [ + "short_esi" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Ethernet Segment" + }, + "port_channel": { + "type": "object", + "description": "Used for port-channel adapter.", + "properties": { + "mode": { + "type": "string", + "description": "Port-Channel Mode.", + "enum": [ + "active", + "passive", + "on" + ], + "title": "Mode" + }, + "channel_id": { + "type": "integer", + "description": "Port-Channel ID.\nIf no channel_id is specified, an id is generated from the first switch port in the port channel.\n", + "title": "Channel ID" + }, + "description": { + "type": "string", + "description": "By default the description is built leveraging `` name or `adapter.description` when defined.\nWhen this key is defined, it will append its content to the physical port description.\n", + "title": "Description" + }, + "enabled": { + "type": "boolean", + "default": true, + "description": "Port-Channel administrative state.\nSetting to false will set port to 'shutdown' in intended configuration.\n", + "title": "Enabled" + }, + "short_esi": { + "type": "string", + "description": "In format xxxx:xxxx:xxxx or \"auto\".\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ethernet_segment.short_esi instead.", + "deprecated": true, + "title": "Short Esi" + }, + "lacp_fallback": { + "type": "object", + "description": "LACP fallback configuration.", + "properties": { + "mode": { + "type": "string", + "enum": [ + "static" + ], + "description": "Currently only static mode is supported.", + "title": "Mode" + }, + "timeout": { + "type": "integer", + "description": "Timeout in seconds. EOS default is 90 seconds.", + "title": "Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LACP Fallback" + }, + "lacp_timer": { + "type": "object", + "description": "LACP timer configuration. Applies only when Port-channel mode is not \"on\".", + "properties": { + "mode": { + "type": "string", + "enum": [ + "normal", + "fast" + ], + "description": "LACP mode for interface members.", + "title": "Mode" + }, + "multiplier": { + "type": "integer", + "description": "Number of LACP BPDUs lost before deeming the peer down. EOS default is 3.", + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LACP Timer" + }, + "subinterfaces": { + "type": "array", + "description": "Port-Channel L2 Subinterfaces\nSubinterfaces are only supported on routed port-channels, which means they cannot be configured on MLAG port-channels.\nSetting short_esi: auto generates the short_esi automatically using a hash of configuration elements.\nPlease see the notes under \"EVPN A/A ESI dual-attached endpoint scenario\" before setting short_esi: auto.\n", + "items": { + "type": "object", + "properties": { + "number": { + "type": "integer", + "description": "Subinterface number", + "title": "Number" + }, + "short_esi": { + "type": "string", + "description": "In format xxxx:xxxx:xxxx or \"auto\"\nRequired for multihomed port-channels with subinterfaces\n", + "title": "Short Esi" + }, + "vlan_id": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "description": "VLAN ID to bridge.\nDefault is subinterface number.\n", + "title": "VLAN ID" + }, + "encapsulation_vlan": { + "type": "object", + "description": "Client VLAN ID encapsulation.\nDefault is subinterface number.\n", + "properties": { + "client_dot1q": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "Client Dot1Q" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Encapsulation VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Subinterfaces" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the port-channel interface in the final EOS configuration.", + "title": "Raw EOS CLI" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen.", + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "description": { + "type": "string", + "title": "Description" + }, + "logging": { + "type": "object", + "properties": { + "event": { + "type": "object", + "properties": { + "link_status": { + "type": "boolean", + "title": "Link Status" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Event" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Logging" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "l2_mtu": { + "type": "integer", + "description": "\"l2_mtu\" should only be defined for platforms supporting the \"l2 mtu\" CLI\n", + "title": "L2 MTU" + }, + "vlans": { + "type": "string", + "description": "List of switchport vlans as string\nFor a trunk port this would be a range like \"1-200,300\"\nFor an access port this would be a single vlan \"123\"\n", + "title": "VLANs" + }, + "snmp_trap_link_change": { + "type": "boolean", + "title": "Snmp Trap Link Change" + }, + "type": { + "type": "string", + "enum": [ + "routed", + "switched", + "l3dot1q", + "l2dot1q" + ], + "description": "l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.\nInterface will not be listed in device documentation, unless \"type\" is set.\n", + "title": "Type" + }, + "encapsulation_dot1q_vlan": { + "type": "integer", + "description": "VLAN tag to configure on sub-interface", + "title": "Encapsulation Dot1Q VLAN" + }, + "vrf": { + "type": "string", + "description": "VRF name", + "title": "VRF" + }, + "encapsulation_vlan": { + "type": "object", + "properties": { + "client": { + "type": "object", + "properties": { + "dot1q": { + "type": "object", + "properties": { + "vlan": { + "type": "integer", + "description": "Client VLAN ID", + "title": "VLAN" + }, + "outer": { + "type": "integer", + "description": "Client Outer VLAN ID", + "title": "Outer" + }, + "inner": { + "type": "integer", + "description": "Client Inner VLAN ID", + "title": "Inner" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Dot1Q" + }, + "unmatched": { + "type": "boolean", + "title": "Unmatched" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Client" + }, + "network": { + "type": "object", + "description": "Network encapsulation are all optional, and skipped if using client unmatched", + "properties": { + "dot1q": { + "type": "object", + "properties": { + "vlan": { + "type": "integer", + "description": "Network VLAN ID", + "title": "VLAN" + }, + "outer": { + "type": "integer", + "description": "Network Outer VLAN ID", + "title": "Outer" + }, + "inner": { + "type": "integer", + "description": "Network Inner VLAN ID", + "title": "Inner" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Dot1Q" + }, + "client": { + "type": "boolean", + "title": "Client" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Network" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Encapsulation VLAN" + }, + "vlan_id": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "VLAN ID" + }, + "mode": { + "type": "string", + "enum": [ + "access", + "dot1q-tunnel", + "trunk", + "trunk phone" + ], + "title": "Mode" + }, + "native_vlan": { + "type": "integer", + "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", + "title": "Native VLAN" + }, + "native_vlan_tag": { + "type": "boolean", + "default": false, + "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", + "title": "Native VLAN Tag" + }, + "link_tracking_groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Group name", + "title": "Name" + }, + "direction": { + "type": "string", + "enum": [ + "upstream", + "downstream" + ], + "title": "Direction" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "Link Tracking Groups" + }, + "phone": { + "type": "object", + "properties": { + "trunk": { + "type": "string", + "enum": [ + "tagged", + "untagged" + ], + "title": "Trunk" + }, + "vlan": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Phone" + }, + "l2_protocol": { + "type": "object", + "properties": { + "encapsulation_dot1q_vlan": { + "type": "integer", + "description": "Vlan tag to configure on sub-interface", + "title": "Encapsulation Dot1Q VLAN" + }, + "forwarding_profile": { + "type": "string", + "description": "L2 protocol forwarding profile", + "title": "Forwarding Profile" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "L2 Protocol" + }, + "mtu": { + "type": "integer", + "title": "MTU" + }, + "mlag": { + "type": "integer", + "description": "MLAG ID", + "minimum": 1, + "maximum": 2000, + "title": "MLAG" + }, + "trunk_groups": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Trunk Groups" + }, + "lacp_fallback_timeout": { + "type": "integer", + "description": "Timeout in seconds", + "default": 90, + "minimum": 0, + "maximum": 300, + "title": "LACP Fallback Timeout" + }, + "lacp_fallback_mode": { + "type": "string", + "enum": [ + "individual", + "static" + ], + "title": "LACP Fallback Mode" + }, + "qos": { + "type": "object", + "properties": { + "trust": { + "type": "string", + "enum": [ + "dscp", + "cos", + "disabled" + ], + "title": "Trust" + }, + "dscp": { + "type": "integer", + "description": "DSCP value", + "title": "DSCP" + }, + "cos": { + "type": "integer", + "description": "COS value", + "title": "COS" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "QOS" + }, + "bfd": { + "type": "object", + "properties": { + "echo": { + "type": "boolean", + "title": "Echo" + }, + "interval": { + "type": "integer", + "description": "Interval in milliseconds", + "title": "Interval" + }, + "min_rx": { + "type": "integer", + "description": "Rate in milliseconds", + "title": "Min RX" + }, + "multiplier": { + "type": "integer", + "minimum": 3, + "maximum": 50, + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BFD" + }, + "service_policy": { + "type": "object", + "properties": { + "pbr": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Policy Based Routing Policy-map name", + "title": "Input" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PBR" + }, + "qos": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Quality of Service Policy-map name", + "title": "Input" + } + }, + "required": [ + "input" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "QOS" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Service Policy" + }, + "mpls": { + "type": "object", + "properties": { + "ip": { + "type": "boolean", + "title": "IP" + }, + "ldp": { + "type": "object", + "properties": { + "interface": { + "type": "boolean", + "title": "Interface" + }, + "igp_sync": { + "type": "boolean", + "title": "IGP Sync" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LDP" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MPLS" + }, + "trunk_private_vlan_secondary": { + "type": "boolean", + "title": "Trunk Private VLAN Secondary" + }, + "pvlan_mapping": { + "type": "string", + "description": "List of vlans as string", + "title": "PVLAN Mapping" + }, + "vlan_translations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "List of vlans as string (only one vlan if direction is \"both\")", + "title": "From" + }, + "to": { + "type": "integer", + "description": "VLAN ID", + "title": "To" + }, + "direction": { + "type": "string", + "enum": [ + "in", + "out", + "both" + ], + "default": "both", + "title": "Direction" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "VLAN Translations" + }, + "shape": { + "type": "object", + "properties": { + "rate": { + "type": "string", + "description": "Rate in kbps, pps or percent\nSupported options are platform dependent\nExamples:\n- \"5000 kbps\"\n- \"1000 pps\"\n- \"20 percent\"\n", + "title": "Rate" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Shape" + }, + "storm_control": { + "type": "object", + "properties": { + "all": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "All" + }, + "broadcast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Broadcast" + }, + "multicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "unknown_unicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Unknown Unicast" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Storm Control" + }, + "ip_proxy_arp": { + "type": "boolean", + "title": "IP Proxy ARP" + }, + "isis_enable": { + "type": "string", + "description": "ISIS instance", + "title": "ISIS Enable" + }, + "isis_passive": { + "type": "boolean", + "title": "ISIS Passive" + }, + "isis_metric": { + "type": "integer", + "title": "ISIS Metric" + }, + "isis_network_point_to_point": { + "type": "boolean", + "title": "ISIS Network Point To Point" + }, + "isis_circuit_type": { + "type": "string", + "enum": [ + "level-1-2", + "level-1", + "level-2" + ], + "title": "ISIS Circuit Type" + }, + "isis_hello_padding": { + "type": "boolean", + "title": "ISIS Hello Padding" + }, + "isis_authentication_mode": { + "type": "string", + "enum": [ + "text", + "md5" + ], + "title": "ISIS Authentication Mode" + }, + "isis_authentication_key": { + "type": "string", + "description": "Type-7 encrypted password", + "title": "ISIS Authentication Key" + }, + "traffic_policy": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Ingress traffic policy", + "title": "Input" + }, + "output": { + "type": "string", + "description": "Egress traffic policy", + "title": "Output" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Traffic Policy" + }, + "evpn_ethernet_segment": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "description": "EVPN Ethernet Segment Identifier (Type 1 format)", + "title": "Identifier" + }, + "redundancy": { + "type": "string", + "enum": [ + "all-active", + "single-active" + ], + "title": "Redundancy" + }, + "designated_forwarder_election": { + "type": "object", + "properties": { + "algorithm": { + "type": "string", + "enum": [ + "modulus", + "preference" + ], + "title": "Algorithm" + }, + "preference_value": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "description": "Preference_value is only used when \"algorithm\" is \"preference\"", + "title": "Preference Value" + }, + "dont_preempt": { + "type": "boolean", + "description": "Dont_preempt is only used when \"algorithm\" is \"preference\"", + "default": false, + "title": "Dont Preempt" + }, + "hold_time": { + "type": "integer", + "title": "Hold Time" + }, + "subsequent_hold_time": { + "type": "integer", + "title": "Subsequent Hold Time" + }, + "candidate_reachability_required": { + "type": "boolean", + "title": "Candidate Reachability Required" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Designated Forwarder Election" + }, + "mpls": { + "type": "object", + "properties": { + "shared_index": { + "type": "integer", + "minimum": 1, + "maximum": 1024, + "title": "Shared Index" + }, + "tunnel_flood_filter_time": { + "type": "integer", + "title": "Tunnel Flood Filter Time" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MPLS" + }, + "route_target": { + "type": "string", + "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN Ethernet Segment" + }, + "esi": { + "type": "string", + "description": "EVPN Ethernet Segment Identifier (Type 1 format)\nIf both \"esi\" and \"evpn_ethernet_segment.identifier\" are defined, the new variable takes precedence\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use evpn_ethernet_segment.identifier instead.", + "deprecated": true, + "title": "Esi" + }, + "rt": { + "type": "string", + "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx\nIf both \"rt\" and \"evpn_ethernet_segment.route_target\" are defined, the new variable takes precedence\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use evpn_ethernet_segment.route_target instead.", + "deprecated": true, + "title": "Rt" + }, + "lacp_id": { + "type": "string", + "description": "LACP ID with format xxxx.xxxx.xxxx", + "title": "LACP ID" + }, + "spanning_tree_bpdufilter": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpdufilter" + }, + "spanning_tree_bpduguard": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpduguard" + }, + "spanning_tree_guard": { + "type": "string", + "enum": [ + "loop", + "root", + "disabled" + ], + "title": "Spanning Tree Guard" + }, + "spanning_tree_portfast": { + "type": "string", + "enum": [ + "edge", + "network" + ], + "title": "Spanning Tree Portfast" + }, + "vmtracer": { + "type": "boolean", + "title": "VMTracer" + }, + "ptp": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "announce": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "title": "Interval" + }, + "timeout": { + "type": "integer", + "title": "Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Announce" + }, + "delay_req": { + "type": "integer", + "title": "Delay Req" + }, + "delay_mechanism": { + "type": "string", + "enum": [ + "e2e", + "p2p" + ], + "title": "Delay Mechanism" + }, + "sync_message": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "title": "Interval" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Sync Message" + }, + "role": { + "type": "string", + "enum": [ + "master", + "dynamic" + ], + "title": "Role" + }, + "vlan": { + "type": "string", + "description": "VLAN can be 'all' or list of vlans as string", + "title": "VLAN" + }, + "transport": { + "type": "string", + "enum": [ + "ipv4", + "ipv6", + "layer2" + ], + "title": "Transport" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PTP" + }, + "ip_address": { + "type": "string", + "description": "IPv4 address/mask", + "title": "IP Address" + }, + "ip_nat": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "pool_name": { + "type": "string", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "pool_name", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Destination" + }, + "source": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "nat_type": { + "type": "string", + "enum": [ + "overload", + "pool", + "pool-address-only", + "pool-full-cone" + ], + "title": "Nat Type" + }, + "pool_name": { + "type": "string", + "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "nat_type", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IP Nat" + }, + "ipv6_enable": { + "type": "boolean", + "title": "IPv6 Enable" + }, + "ipv6_address": { + "type": "string", + "description": "IPv6 address/mask", + "title": "IPv6 Address" + }, + "ipv6_address_link_local": { + "type": "string", + "description": "Link local IPv6 address/mask", + "title": "IPv6 Address Link Local" + }, + "ipv6_nd_ra_disabled": { + "type": "boolean", + "title": "IPv6 ND RA Disabled" + }, + "ipv6_nd_managed_config_flag": { + "type": "boolean", + "title": "IPv6 ND Managed Config Flag" + }, + "ipv6_nd_prefixes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ipv6_prefix": { + "type": "string", + "title": "IPv6 Prefix" + }, + "valid_lifetime": { + "type": "string", + "description": "Infinite or lifetime in seconds", + "title": "Valid Lifetime" + }, + "preferred_lifetime": { + "type": "string", + "description": "Infinite or lifetime in seconds", + "title": "Preferred Lifetime" + }, + "no_autoconfig_flag": { + "type": "boolean", + "title": "No Autoconfig Flag" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "ipv6_prefix" + ] + }, + "title": "IPv6 ND Prefixes" + }, + "access_group_in": { + "type": "string", + "description": "Access list name", + "title": "Access Group In" + }, + "access_group_out": { + "type": "string", + "description": "Access list name", + "title": "Access Group Out" + }, + "ipv6_access_group_in": { + "type": "string", + "description": "IPv6 access list name", + "title": "IPv6 Access Group In" + }, + "ipv6_access_group_out": { + "type": "string", + "description": "IPv6 access list name", + "title": "IPv6 Access Group Out" + }, + "mac_access_group_in": { + "type": "string", + "description": "MAC access list name", + "title": "MAC Access Group In" + }, + "mac_access_group_out": { + "type": "string", + "description": "MAC access list name", + "title": "MAC Access Group Out" + }, + "pim": { + "type": "object", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "dr_priority": { + "type": "integer", + "minimum": 0, + "maximum": 429467295, + "title": "DR Priority" + }, + "sparse_mode": { + "type": "boolean", + "title": "Sparse Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PIM" + }, + "service_profile": { + "type": "string", + "description": "QOS profile", + "title": "Service Profile" + }, + "ospf_network_point_to_point": { + "type": "boolean", + "title": "OSPF Network Point To Point" + }, + "ospf_area": { + "type": "string", + "title": "OSPF Area" + }, + "ospf_cost": { + "type": "integer", + "title": "OSPF Cost" + }, + "ospf_authentication": { + "type": "string", + "enum": [ + "none", + "simple", + "message-digest" + ], + "title": "OSPF Authentication" + }, + "ospf_authentication_key": { + "type": "string", + "description": "Encrypted password", + "title": "OSPF Authentication Key" + }, + "ospf_message_digest_keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "hash_algorithm": { + "type": "string", + "enum": [ + "md5", + "sha1", + "sha256", + "sha384", + "sha512" + ], + "title": "Hash Algorithm" + }, + "key": { + "type": "string", + "description": "Encrypted password", + "title": "Key" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "id" + ] + }, + "title": "OSPF Message Digest Keys" + }, + "flow_tracker": { + "type": "object", + "properties": { + "sampled": { + "type": "string", + "description": "Flow tracker name", + "title": "Sampled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Flow Tracker" + }, + "bgp": { + "type": "object", + "properties": { + "session_tracker": { + "type": "string", + "description": "Name of session tracker", + "title": "Session Tracker" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, + "peer": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer" + }, + "peer_interface": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer Interface" + }, + "peer_type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer Type" + }, + "sflow": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "egress": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "unmodified_enable": { + "type": "boolean", + "title": "Unmodified Enable" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Egress" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Sflow" + }, + "eos_cli": { + "type": "string", + "description": "Multiline EOS CLI rendered directly on the port-channel interface in the final EOS configuration", + "title": "EOS CLI" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Structured Config" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Port Channel" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the ethernet interface in the final EOS configuration.", + "title": "Raw EOS CLI" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen.", + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "description": { + "type": "string", + "title": "Description" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "load_interval": { + "type": "integer", + "minimum": 0, + "maximum": 600, + "description": "Interval in seconds for updating interface counters\"", + "title": "Load Interval" + }, + "speed": { + "type": "string", + "description": "Speed can be interface_speed or forced interface_speed or auto interface_speed", + "title": "Speed" + }, + "mtu": { + "type": "integer", + "title": "MTU" + }, + "l2_mtu": { + "type": "integer", + "description": "\"l2_mtu\" should only be defined for platforms supporting the \"l2 mtu\" CLI\n", + "title": "L2 MTU" + }, + "vlans": { + "type": "string", + "description": "List of switchport vlans as string\nFor a trunk port this would be a range like \"1-200,300\"\nFor an access port this would be a single vlan \"123\"\n", + "title": "VLANs" + }, + "native_vlan": { + "type": "integer", + "title": "Native VLAN" + }, + "native_vlan_tag": { + "type": "boolean", + "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", + "title": "Native VLAN Tag" + }, + "mode": { + "type": "string", + "enum": [ + "access", + "dot1q-tunnel", + "trunk", + "trunk phone" + ], + "title": "Mode" + }, + "phone": { + "type": "object", + "properties": { + "trunk": { + "type": "string", + "enum": [ + "tagged", + "tagged phone", + "untagged", + "untagged phone" + ], + "title": "Trunk" + }, + "vlan": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Phone" + }, + "l2_protocol": { + "type": "object", + "properties": { + "encapsulation_dot1q_vlan": { + "type": "integer", + "description": "Vlan tag to configure on sub-interface", + "title": "Encapsulation Dot1Q VLAN" + }, + "forwarding_profile": { + "type": "string", + "description": "L2 protocol forwarding profile", + "title": "Forwarding Profile" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "L2 Protocol" + }, + "trunk_groups": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Trunk Groups" + }, + "type": { + "type": "string", + "enum": [ + "routed", + "switched", + "l3dot1q", + "l2dot1q", + "port-channel-member" + ], + "description": "l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.\nInterface will not be listed in device documentation, unless \"type\" is set.\n", + "title": "Type" + }, + "snmp_trap_link_change": { + "type": "boolean", + "title": "Snmp Trap Link Change" + }, + "address_locking": { + "type": "object", + "properties": { + "ipv4": { + "type": "boolean", + "description": "Enable address locking for IPv4", + "title": "IPv4" + }, + "ipv6": { + "type": "boolean", + "description": "Enable address locking for IPv6", + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Address Locking" + }, + "flowcontrol": { + "type": "object", + "properties": { + "received": { + "type": "string", + "enum": [ + "desired", + "on", + "off" + ], + "title": "Received" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Flowcontrol" + }, + "vrf": { + "type": "string", + "description": "VRF name", + "title": "VRF" + }, + "flow_tracker": { + "type": "object", + "properties": { + "sampled": { + "type": "string", + "description": "Flow tracker name", + "title": "Sampled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Flow Tracker" + }, + "error_correction_encoding": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": true, + "title": "Enabled" + }, + "fire_code": { + "type": "boolean", + "title": "Fire Code" + }, + "reed_solomon": { + "type": "boolean", + "title": "Reed Solomon" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Error Correction Encoding" + }, + "link_tracking_groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Group name", + "title": "Name" + }, + "direction": { + "type": "string", + "enum": [ + "upstream", + "downstream" + ], + "title": "Direction" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "Link Tracking Groups" + }, + "evpn_ethernet_segment": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "description": "EVPN Ethernet Segment Identifier (Type 1 format)", + "title": "Identifier" + }, + "redundancy": { + "type": "string", + "enum": [ + "all-active", + "single-active" + ], + "title": "Redundancy" + }, + "designated_forwarder_election": { + "type": "object", + "properties": { + "algorithm": { + "type": "string", + "enum": [ + "modulus", + "preference" + ], + "title": "Algorithm" + }, + "preference_value": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "description": "Preference_value is only used when \"algorithm\" is \"preference\"", + "title": "Preference Value" + }, + "dont_preempt": { + "type": "boolean", + "description": "Dont_preempt is only used when \"algorithm\" is \"preference\"", + "title": "Dont Preempt" + }, + "hold_time": { + "type": "integer", + "title": "Hold Time" + }, + "subsequent_hold_time": { + "type": "integer", + "title": "Subsequent Hold Time" + }, + "candidate_reachability_required": { + "type": "boolean", + "title": "Candidate Reachability Required" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Designated Forwarder Election" + }, + "mpls": { + "type": "object", + "properties": { + "shared_index": { + "type": "integer", + "minimum": 1, + "maximum": 1024, + "title": "Shared Index" + }, + "tunnel_flood_filter_time": { + "type": "integer", + "title": "Tunnel Flood Filter Time" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MPLS" + }, + "route_target": { + "type": "string", + "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN Ethernet Segment" + }, + "encapsulation_dot1q_vlan": { + "type": "integer", + "description": "VLAN tag to configure on sub-interface", + "title": "Encapsulation Dot1Q VLAN" + }, + "encapsulation_vlan": { + "type": "object", + "properties": { + "client": { + "type": "object", + "properties": { + "dot1q": { + "type": "object", + "properties": { + "vlan": { + "type": "integer", + "description": "Client VLAN ID", + "title": "VLAN" + }, + "outer": { + "type": "integer", + "description": "Client Outer VLAN ID", + "title": "Outer" + }, + "inner": { + "type": "integer", + "description": "Client Inner VLAN ID", + "title": "Inner" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Dot1Q" + }, + "unmatched": { + "type": "boolean", + "title": "Unmatched" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Client" + }, + "network": { + "type": "object", + "description": "Network encapsulations are all optional and skipped if using client unmatched", + "properties": { + "dot1q": { + "type": "object", + "properties": { + "vlan": { + "type": "integer", + "description": "Network VLAN ID", + "title": "VLAN" + }, + "outer": { + "type": "integer", + "description": "Network outer VLAN ID", + "title": "Outer" + }, + "inner": { + "type": "integer", + "description": "Network inner VLAN ID", + "title": "Inner" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Dot1Q" + }, + "client": { + "type": "boolean", + "title": "Client" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Network" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Encapsulation VLAN" + }, + "vlan_id": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "VLAN ID" + }, + "ip_address": { + "type": "string", + "description": "IPv4 address/mask", + "title": "IP Address" + }, + "ip_address_secondaries": { + "type": "array", + "items": { + "type": "string" + }, + "title": "IP Address Secondaries" + }, + "ip_helpers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ip_helper": { + "type": "string", + "title": "IP Helper" + }, + "source_interface": { + "type": "string", + "description": "Source interface name", + "title": "Source Interface" + }, + "vrf": { + "type": "string", + "description": "VRF name", + "title": "VRF" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "ip_helper" + ] + }, + "title": "IP Helpers" + }, + "ip_nat": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "pool_name": { + "type": "string", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "pool_name", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Destination" + }, + "source": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "nat_type": { + "type": "string", + "enum": [ + "overload", + "pool", + "pool-address-only", + "pool-full-cone" + ], + "title": "Nat Type" + }, + "pool_name": { + "type": "string", + "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "nat_type", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IP Nat" + }, + "ipv6_enable": { + "type": "boolean", + "title": "IPv6 Enable" + }, + "ipv6_address": { + "type": "string", + "title": "IPv6 Address" + }, + "ipv6_address_link_local": { + "type": "string", + "description": "Link local IPv6 address/mask", + "title": "IPv6 Address Link Local" + }, + "ipv6_nd_ra_disabled": { + "type": "boolean", + "title": "IPv6 ND RA Disabled" + }, + "ipv6_nd_managed_config_flag": { + "type": "boolean", + "title": "IPv6 ND Managed Config Flag" + }, + "ipv6_nd_prefixes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ipv6_prefix": { + "type": "string", + "title": "IPv6 Prefix" + }, + "valid_lifetime": { + "type": "string", + "description": "Infinite or lifetime in seconds", + "title": "Valid Lifetime" + }, + "preferred_lifetime": { + "type": "string", + "description": "Infinite or lifetime in seconds", + "title": "Preferred Lifetime" + }, + "no_autoconfig_flag": { + "type": "boolean", + "title": "No Autoconfig Flag" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "ipv6_prefix" + ] + }, + "title": "IPv6 ND Prefixes" + }, + "ipv6_dhcp_relay_destinations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "DHCP server's IPv6 address", + "title": "Address" + }, + "vrf": { + "type": "string", + "title": "VRF" + }, + "local_interface": { + "type": "string", + "description": "Local interface to communicate with DHCP server - mutually exclusive to source_address", + "title": "Local Interface" + }, + "source_address": { + "type": "string", + "description": "Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface", + "title": "Source Address" + }, + "link_address": { + "type": "string", + "description": "Override the default link address specified in the relayed DHCP packet", + "title": "Link Address" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "address" + ] + }, + "title": "IPv6 DHCP Relay Destinations" + }, + "access_group_in": { + "type": "string", + "description": "Access list name", + "title": "Access Group In" + }, + "access_group_out": { + "type": "string", + "description": "Access list name", + "title": "Access Group Out" + }, + "ipv6_access_group_in": { + "type": "string", + "description": "IPv6 access list name", + "title": "IPv6 Access Group In" + }, + "ipv6_access_group_out": { + "type": "string", + "description": "IPv6 access list name", + "title": "IPv6 Access Group Out" + }, + "mac_access_group_in": { + "type": "string", + "description": "MAC access list name", + "title": "MAC Access Group In" + }, + "mac_access_group_out": { + "type": "string", + "description": "MAC access list name", + "title": "MAC Access Group Out" + }, + "multicast": { + "type": "object", + "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "boundaries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "boundary": { + "type": "string", + "description": "ACL name or multicast IP subnet", + "title": "Boundary" + }, + "out": { + "type": "boolean", + "title": "Out" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Boundaries" + }, + "static": { + "type": "boolean", + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + }, + "ipv6": { + "type": "object", + "properties": { + "boundaries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "boundary": { + "type": "string", + "description": "ACL name or multicast IP subnet", + "title": "Boundary" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Boundaries" + }, + "static": { + "type": "boolean", + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "ospf_network_point_to_point": { + "type": "boolean", + "title": "OSPF Network Point To Point" + }, + "ospf_area": { + "type": "string", + "title": "OSPF Area" + }, + "ospf_cost": { + "type": "integer", + "title": "OSPF Cost" + }, + "ospf_authentication": { + "type": "string", + "enum": [ + "none", + "simple", + "message-digest" + ], + "title": "OSPF Authentication" + }, + "ospf_authentication_key": { + "type": "string", + "description": "Encrypted password - only type 7 supported", + "title": "OSPF Authentication Key" + }, + "ospf_message_digest_keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "hash_algorithm": { + "type": "string", + "enum": [ + "md5", + "sha1", + "sha256", + "sha384", + "sha512" + ], + "title": "Hash Algorithm" + }, + "key": { + "type": "string", + "description": "Encrypted password - only type 7 supported", + "title": "Key" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "id" + ] + }, + "title": "OSPF Message Digest Keys" + }, + "pim": { + "type": "object", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "dr_priority": { + "type": "integer", + "minimum": 0, + "maximum": 429467295, + "title": "DR Priority" + }, + "sparse_mode": { + "type": "boolean", + "title": "Sparse Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PIM" + }, + "mac_security": { + "type": "object", + "properties": { + "profile": { + "type": "string", + "title": "Profile" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MAC Security" + }, + "channel_group": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "mode": { + "type": "string", + "enum": [ + "on", + "active", + "passive" + ], + "title": "Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Channel Group" + }, + "isis_enable": { + "type": "string", + "description": "ISIS instance", + "title": "ISIS Enable" + }, + "isis_passive": { + "type": "boolean", + "title": "ISIS Passive" + }, + "isis_metric": { + "type": "integer", + "title": "ISIS Metric" + }, + "isis_network_point_to_point": { + "type": "boolean", + "title": "ISIS Network Point To Point" + }, + "isis_circuit_type": { + "type": "string", + "enum": [ + "level-1-2", + "level-1", + "level-2" + ], + "title": "ISIS Circuit Type" + }, + "isis_hello_padding": { + "type": "boolean", + "title": "ISIS Hello Padding" + }, + "isis_authentication_mode": { + "type": "string", + "enum": [ + "text", + "md5" + ], + "title": "ISIS Authentication Mode" + }, + "isis_authentication_key": { + "type": "string", + "description": "Type-7 encrypted password", + "title": "ISIS Authentication Key" + }, + "poe": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", + "default": false, + "title": "Disabled" + }, + "priority": { + "type": "string", + "enum": [ + "critical", + "high", + "medium", + "low" + ], + "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", + "title": "Priority" + }, + "reboot": { + "description": "Set the PoE power behavior for a PoE port when the system is rebooted", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Reboot" + }, + "link_down": { + "description": "Set the PoE power behavior for a PoE port when the port goes down", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + }, + "power_off_delay": { + "type": "integer", + "minimum": 1, + "maximum": 86400, + "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", + "title": "Power Off Delay" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Link Down" + }, + "shutdown": { + "description": "Set the PoE power behavior for a PoE port when the port is admin down", + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Shutdown" + }, + "limit": { + "type": "object", + "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", + "properties": { + "class": { + "type": "integer", + "minimum": 0, + "maximum": 8, + "title": "Class" + }, + "watts": { + "type": "string", + "title": "Watts" + }, + "fixed": { + "type": "boolean", + "description": "Set to ignore hardware classification", + "title": "Fixed" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Limit" + }, + "negotiation_lldp": { + "type": "boolean", + "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", + "title": "Negotiation LLDP" + }, + "legacy_detect": { + "type": "boolean", + "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", + "title": "Legacy Detect" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PoE" + }, + "ptp": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "announce": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "title": "Interval" + }, + "timeout": { + "type": "integer", + "title": "Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Announce" + }, + "delay_req": { + "type": "integer", + "title": "Delay Req" + }, + "delay_mechanism": { + "type": "string", + "enum": [ + "e2e", + "p2p" + ], + "title": "Delay Mechanism" + }, + "sync_message": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "title": "Interval" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Sync Message" + }, + "role": { + "type": "string", + "enum": [ + "master", + "dynamic" + ], + "title": "Role" + }, + "vlan": { + "type": "string", + "description": "VLAN can be 'all' or list of vlans as string", + "title": "VLAN" + }, + "transport": { + "type": "string", + "enum": [ + "ipv4", + "ipv6", + "layer2" + ], + "title": "Transport" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PTP" + }, + "profile": { + "type": "string", + "description": "Interface profile", + "title": "Profile" + }, + "storm_control": { + "type": "object", + "properties": { + "all": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "All" + }, + "broadcast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Broadcast" + }, + "multicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "unknown_unicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependant", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Unknown Unicast" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Storm Control" + }, + "logging": { + "type": "object", + "properties": { + "event": { + "type": "object", + "properties": { + "link_status": { + "type": "boolean", + "title": "Link Status" + }, + "congestion_drops": { + "type": "boolean", + "title": "Congestion Drops" + }, + "spanning_tree": { + "type": "boolean", + "title": "Spanning Tree" + }, + "storm_control": { + "type": "boolean", + "title": "Storm Control" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Event" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Logging" + }, + "lldp": { + "type": "object", + "properties": { + "transmit": { + "type": "boolean", + "title": "Transmit" + }, + "receive": { + "type": "boolean", + "title": "Receive" + }, + "ztp_vlan": { + "type": "integer", + "description": "ZTP vlan number", + "title": "ZTP VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LLDP" + }, + "trunk_private_vlan_secondary": { + "type": "boolean", + "title": "Trunk Private VLAN Secondary" + }, + "pvlan_mapping": { + "type": "string", + "description": "List of vlans as string", + "title": "PVLAN Mapping" + }, + "vlan_translations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "List of vlans as string (only one vlan if direction is \"both\")", + "title": "From" + }, + "to": { + "type": "integer", + "description": "VLAN ID", + "title": "To" + }, + "direction": { + "type": "string", + "enum": [ + "in", + "out", + "both" + ], + "default": "both", + "title": "Direction" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "VLAN Translations" + }, + "dot1x": { + "type": "object", + "properties": { + "port_control": { + "type": "string", + "enum": [ + "auto", + "force-authorized", + "force-unauthorized" + ], + "title": "Port Control" + }, + "port_control_force_authorized_phone": { + "type": "boolean", + "title": "Port Control Force Authorized Phone" + }, + "reauthentication": { + "type": "boolean", + "title": "Reauthentication" + }, + "pae": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "authenticator" + ], + "title": "Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PAE" + }, + "authentication_failure": { + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "allow", + "drop" + ], + "title": "Action" + }, + "allow_vlan": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "Allow VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Authentication Failure" + }, + "host_mode": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "multi-host", + "single-host" + ], + "title": "Mode" + }, + "multi_host_authenticated": { + "type": "boolean", + "title": "Multi Host Authenticated" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Host Mode" + }, + "mac_based_authentication": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "host_mode_common": { + "type": "boolean", + "title": "Host Mode Common" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MAC Based Authentication" + }, + "timeout": { + "type": "object", + "properties": { + "idle_host": { + "type": "integer", + "minimum": 10, + "maximum": 65535, + "title": "Idle Host" + }, + "quiet_period": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Quiet Period" + }, + "reauth_period": { + "type": "string", + "description": "Value can be 60-4294967295 or 'server'", + "title": "Reauth Period" + }, + "reauth_timeout_ignore": { + "type": "boolean", + "title": "Reauth Timeout Ignore" + }, + "tx_period": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "TX Period" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Timeout" + }, + "reauthorization_request_limit": { + "type": "integer", + "minimum": 1, + "maximum": 10, + "title": "Reauthorization Request Limit" + }, + "unauthorized": { + "type": "object", + "properties": { + "access_vlan_membership_egress": { + "type": "boolean", + "title": "Access VLAN Membership Egress" + }, + "native_vlan_membership_egress": { + "type": "boolean", + "title": "Native VLAN Membership Egress" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Unauthorized" + }, + "eapol": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "title": "Disabled" + }, + "authentication_failure_fallback_mba": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "timeout": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Authentication Failure Fallback Mba" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Eapol" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "dot1x" + }, + "service_profile": { + "type": "string", + "description": "QOS profile", + "title": "Service Profile" + }, + "shape": { + "type": "object", + "properties": { + "rate": { + "type": "string", + "description": "Rate in kbps, pps or percent\nSupported options are platform dependent\nExamples:\n- \"5000 kbps\"\n- \"1000 pps\"\n- \"20 percent\"\n", + "title": "Rate" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Shape" + }, + "qos": { + "type": "object", + "properties": { + "trust": { + "type": "string", + "enum": [ + "dscp", + "cos", + "disabled" + ], + "title": "Trust" + }, + "dscp": { + "type": "integer", + "description": "DSCP value", + "title": "DSCP" + }, + "cos": { + "type": "integer", + "description": "COS value", + "title": "COS" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "QOS" + }, + "spanning_tree_bpdufilter": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpdufilter" + }, + "spanning_tree_bpduguard": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpduguard" + }, + "spanning_tree_guard": { + "type": "string", + "enum": [ + "loop", + "root", + "disabled" + ], + "title": "Spanning Tree Guard" + }, + "spanning_tree_portfast": { + "type": "string", + "enum": [ + "edge", + "network" + ], + "title": "Spanning Tree Portfast" + }, + "vmtracer": { + "type": "boolean", + "title": "VMTracer" + }, + "priority_flow_control": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "priorities": { + "type": "array", + "items": { + "type": "object", + "properties": { + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 7, + "title": "Priority" + }, + "no_drop": { + "type": "boolean", + "title": "No Drop" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "priority" + ] + }, + "title": "Priorities" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Priority Flow Control" + }, + "bfd": { + "type": "object", + "properties": { + "echo": { + "type": "boolean", + "title": "Echo" + }, + "interval": { + "type": "integer", + "description": "Interval in milliseconds", + "title": "Interval" + }, + "min_rx": { + "type": "integer", + "description": "Rate in milliseconds", + "title": "Min RX" + }, + "multiplier": { + "type": "integer", + "minimum": 3, + "maximum": 50, + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BFD" + }, + "service_policy": { + "type": "object", + "properties": { + "pbr": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Policy Based Routing Policy-map name", + "title": "Input" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PBR" + }, + "qos": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Quality of Service Policy-map name", + "title": "Input" + } + }, + "required": [ + "input" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "QOS" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Service Policy" + }, + "mpls": { + "type": "object", + "properties": { + "ip": { + "type": "boolean", + "title": "IP" + }, + "ldp": { + "type": "object", + "properties": { + "interface": { + "type": "boolean", + "title": "Interface" + }, + "igp_sync": { + "type": "boolean", + "title": "IGP Sync" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LDP" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "speed_groups": { - "type": "array", - "items": { - "type": "integer" + "title": "MPLS" + }, + "lacp_timer": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "fast", + "normal" + ], + "title": "Mode" }, - "title": "Speed Groups" - } + "multiplier": { + "type": "integer", + "minimum": 3, + "maximum": 3000, + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LACP Timer" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "lacp_port_priority": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "LACP Port Priority" }, - "required": [ - "speed" - ] + "transceiver": { + "type": "object", + "properties": { + "media": { + "type": "object", + "properties": { + "override": { + "type": "string", + "description": "Transceiver type", + "title": "Override" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Media" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Transceiver" + }, + "ip_proxy_arp": { + "type": "boolean", + "title": "IP Proxy ARP" + }, + "traffic_policy": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Ingress traffic policy", + "title": "Input" + }, + "output": { + "type": "string", + "description": "Egress traffic policy", + "title": "Output" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Traffic Policy" + }, + "bgp": { + "type": "object", + "properties": { + "session_tracker": { + "type": "string", + "description": "Name of session tracker", + "title": "Session Tracker" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, + "peer": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer" + }, + "peer_interface": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer Interface" + }, + "peer_type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer Type" + }, + "sflow": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "egress": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "unmodified_enable": { + "type": "boolean", + "title": "Unmodified Enable" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Egress" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Sflow" + }, + "port_profile": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Port Profile" + }, + "eos_cli": { + "type": "string", + "description": "Multiline EOS CLI rendered directly on the ethernet interface in the final EOS configuration", + "title": "EOS CLI" + } }, - "title": "Speeds" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Structured Config" } }, "additionalProperties": false, @@ -4129,1980 +14170,3231 @@ "^_.+$": {} }, "required": [ - "platform" + "profile" ] }, - "title": "Platform Speed Groups" + "title": "Port Profiles" }, - "pod_name": { - "description": "POD Name is used in:\n- Fabric Documentation (Optional, falls back to dc_name and then to fabric_name)\n- SNMP Location: `snmp_settings.location` (Optional)\n- VRF Loopbacks: `vtep_diagnostic.loopback_ip_pools.pod` (Required)\n\nRecommended to be common between Spines and Leafs within a POD (One l3ls topology).\n", - "type": "string", - "title": "Pod Name" + "ptp": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "profile": { + "type": "string", + "enum": [ + "aes67", + "smpte2059-2", + "aes67-r16-2016" + ], + "default": "aes67-r16-2016", + "title": "Profile" + }, + "domain": { + "type": "integer", + "minimum": 0, + "maximum": 255, + "title": "Domain" + }, + "auto_clock_identity": { + "type": "boolean", + "default": true, + "title": "Auto Clock Identity" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PTP" }, - "port_profiles": { + "ptp_profiles": { "type": "array", - "description": "Optional profiles to share common settings for connected_endpoints and/or network_ports.\nKeys are the same used under endpoints adapters. Keys defined under endpoints adapters take precedence.\n", "items": { "type": "object", "properties": { "profile": { "type": "string", - "description": "Port profile name.", + "description": "PTP profile.", "title": "Profile" }, - "parent_profile": { - "type": "string", - "description": "Parent profile is optional.\nPort_profiles can refer to another port_profile to inherit settings in up to two levels (adapter->profile->parent_profile).", - "title": "Parent Profile" - }, - "speed": { - "type": "string", - "description": "Set adapter speed: `< interface_speed >`, `forced < interface_speed >`, `auto < interface_speed >`.\nIf not specified will be auto.\n", - "title": "Speed" - }, - "description": { - "type": "string", - "description": "By default the description is built leveraging `_`.\nWhen set this key will overide the default value on the physical ports.\n", - "title": "Description" - }, - "enabled": { - "type": "boolean", - "description": "Administrative state, setting to false will set the port to 'shutdown' in the intended configuration.\n", - "default": true, - "title": "Enabled" - }, - "mode": { - "type": "string", - "enum": [ - "access", - "dot1q-tunnel", - "trunk", - "trunk phone" - ], - "description": "Interface mode.", - "title": "Mode" - }, - "mtu": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "title": "MTU" - }, - "l2_mtu": { - "type": "integer", - "minimum": 68, - "maximum": 9416, - "description": "This should only be defined for platforms supporting the \"l2 mtu\" CLI command.", - "title": "L2 MTU" - }, - "native_vlan": { - "type": "integer", - "description": "Native VLAN for a trunk port.\nIf both `native_vlan` and `native_vlan_tag`, `native_vlan_tag` takes precedence.\n", - "minimum": 1, - "maximum": 4094, - "title": "Native VLAN" - }, - "native_vlan_tag": { - "type": "boolean", - "default": false, - "description": "If both `native_vlan` and `native_vlan_tag`, `native_vlan_tag` takes precedence.", - "title": "Native VLAN Tag" - }, - "trunk_groups": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Required with `enable_trunk_groups: true`.\nTrunk Groups are used for limiting VLANs on trunk ports to VLANs with the same Trunk Group.\n", - "title": "Trunk Groups" - }, - "vlans": { - "type": "string", - "description": "Interface VLANs - if not set, the EOS default is that all VLANs are allowed for trunk ports, and VLAN 1 will be used for access ports.", - "title": "VLANs" - }, - "spanning_tree_portfast": { - "type": "string", - "enum": [ - "edge", - "network" - ], - "title": "Spanning Tree Portfast" - }, - "spanning_tree_bpdufilter": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpdufilter" + "announce": { + "type": "object", + "description": "PTP announce interval.", + "properties": { + "interval": { + "type": "integer", + "minimum": -7, + "maximum": 4, + "title": "Interval" + }, + "timeout": { + "type": "integer", + "minimum": 2, + "maximum": 255, + "title": "Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Announce" }, - "spanning_tree_bpduguard": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpduguard" + "delay_req": { + "type": "integer", + "minimum": -7, + "maximum": 8, + "title": "Delay Req" }, - "flowcontrol": { + "sync_message": { "type": "object", + "description": "PTP sync message interval.", "properties": { - "received": { - "type": "string", - "enum": [ - "received", - "send", - "on" - ], - "title": "Received" + "interval": { + "type": "integer", + "minimum": -7, + "maximum": 3, + "title": "Interval" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Flowcontrol" + "title": "Sync Message" }, - "qos_profile": { + "transport": { "type": "string", - "description": "QOS profile name", - "title": "QOS Profile" + "enum": [ + "ipv4" + ], + "title": "Transport" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "default": [ + { + "announce": { + "interval": 0, + "timeout": 3 }, - "ptp": { + "delay_req": -3, + "profile": "aes67-r16-2016", + "sync_message": { + "interval": -3 + }, + "transport": "ipv4" + }, + { + "announce": { + "interval": -2, + "timeout": 3 + }, + "delay_req": -4, + "profile": "smpte2059-2", + "sync_message": { + "interval": -4 + }, + "transport": "ipv4" + }, + { + "announce": { + "interval": 2, + "timeout": 3 + }, + "delay_req": 0, + "profile": "aes67", + "sync_message": { + "interval": 0 + }, + "transport": "ipv4" + } + ], + "title": "PTP Profiles" + }, + "queue_monitor_length": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "notifying": { + "type": "boolean", + "description": "If True, `eos_designs` will configure `queue-monitor length notifying` according to the\n`platform_settings.[].feature_support.queue_monitor_length_notify` setting.", + "title": "Notifying" + }, + "default_thresholds": { + "type": "object", + "properties": { + "high": { + "type": "integer", + "description": "Default high threshold for Ethernet Interfaces.\n", + "title": "High" + }, + "low": { + "type": "integer", + "description": "Default low threshold for Ethernet Interfaces.\nLow threshold support is platform dependent.\n", + "title": "Low" + } + }, + "required": [ + "high" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Default Thresholds" + }, + "log": { + "type": "integer", + "description": "Logging interval in seconds", + "title": "Log" + }, + "cpu": { + "type": "object", + "properties": { + "thresholds": { + "type": "object", + "properties": { + "high": { + "type": "integer", + "title": "High" + }, + "low": { + "type": "integer", + "title": "Low" + } + }, + "required": [ + "high" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Thresholds" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "CPU" + } + }, + "required": [ + "enabled" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Queue Monitor Length" + }, + "redundancy": { + "type": "object", + "description": "Redundancy for chassis platforms with dual supervisors | Optional.", + "properties": { + "protocol": { + "type": "string", + "enum": [ + "sso", + "rpr" + ], + "title": "Protocol" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Redundancy" + }, + "serial_number": { + "description": "Serial Number of the device.\nUsed for documentation purpose in the fabric documentation as can also be used by the 'eos_config_deploy_cvp' role.\n\"serial_number\" can also be set directly under node type settings.\nIf both are set, the value under node type settings takes precedence.\n", + "type": "string", + "title": "Serial Number" + }, + "shutdown_interfaces_towards_undeployed_peers": { + "type": "boolean", + "default": false, + "description": "- It is possible to provision configurations for a complete topology but flag devices as undeployed using the host level variable `is_deployed: false`.\n\n```yaml\n# Use at the host level\nis_deployed: < true or false or default -> true >\n```\n\n- By default, this will have no impact within the `eos_designs` role. Configs will still be generated by the `eos_cli_config_gen` role and will still be pushed by the `eos_config_deploy_eapi` directly to devices if used.\n- However, if the `eos_config_deploy_cvp` role is used to push configurations, CloudVision will ignore the devices flagged as `is_deployed: false` and not attempt to configure them.\n- If the device is not present in the network due to CloudVision not configuring the device, `eos_validate_state` role will fail tests on peers of the undeployed device trying to verify that interfaces are up.\n- To overcome this and shutdown interfaces towards undeployed peers, the variable `shutdown_interfaces_towards_undeployed_peers` can be used, satisfying the `eos_validate_state` role interface tests.\n- Again, this is only an issue if `eos_config_deploy_cvp` is used and the devices are not present in the network.", + "title": "Shutdown Interfaces Towards Undeployed Peers" + }, + "snmp_settings": { + "type": "object", + "description": "Set SNMP settings (optional).", + "properties": { + "contact": { + "type": "string", + "description": "SNMP contact.", + "title": "Contact" + }, + "location": { + "type": "boolean", + "default": false, + "description": "Set SNMP location. Formatted as \" \".", + "title": "Location" + }, + "compute_local_engineid": { + "type": "boolean", + "default": false, + "description": "Generate a local engineId for SNMP using the 'compute_local_engineid_source' method.\n", + "title": "Compute Local Engineid" + }, + "compute_local_engineid_source": { + "type": "string", + "default": "hostname_and_ip", + "description": "`compute_local_engineid_source` supports:\n- `hostname_and_ip` generate a local engineId for SNMP by hashing via SHA1\n the string generated via the concatenation of the hostname plus the management IP.\n {{ inventory_hostname }} + {{ switch.mgmt_ip }}.\n- `system_mac` generate the switch default engine id for AVD usage.\n To use this, `system_mac_address` MUST be set for the device.\n The formula is f5717f + system_mac_address + 00.\n", + "enum": [ + "hostname_and_ip", + "system_mac" + ], + "title": "Compute Local Engineid Source" + }, + "compute_v3_user_localized_key": { + "type": "boolean", + "default": false, + "description": "Requires compute_local_engineid to be `true`.\nIf enabled, the SNMPv3 passphrases for auth and priv are transformed using RFC 2574, matching the value they would take in EOS CLI.\nThe algorithm requires a local engineId, which is unknown to AVD, hence the necessity to generate one beforehand.\n", + "title": "Compute V3 User Localized Key" + }, + "users": { + "type": "array", + "items": { "type": "object", - "description": "The global PTP profile parameters will be applied to all connected endpoints where `ptp` is manually enabled.\n`ptp role master` is set to ensure control over the PTP topology.\n", "properties": { - "enabled": { - "type": "boolean", - "default": false, - "title": "Enabled" + "name": { + "type": "string", + "description": "Username", + "title": "Name" }, - "endpoint_role": { + "group": { + "type": "string", + "description": "Configuration of the SNMP User Groups are currently only possible using `structured_config`.\n", + "title": "Group" + }, + "version": { "type": "string", - "default": "follower", "enum": [ - "bmca", - "default", - "follower" + "v1", + "v2c", + "v3" ], - "title": "Endpoint Role" + "title": "Version" }, - "profile": { + "auth": { "type": "string", - "default": "aes67-r16-2016", "enum": [ - "aes67", - "aes67-r16-2016", - "smpte2059-2" + "md5", + "sha", + "sha256", + "sha384", + "sha512" ], - "title": "Profile" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PTP" - }, - "sflow": { - "type": "boolean", - "description": "Configures sFlow on the interface. Overrides `fabric_sflow` setting.\n", - "title": "Sflow" - }, - "link_tracking": { - "type": "object", - "description": "Configure the downstream interfaces of a respective Link Tracking Group.\nIf `port_channel` is defined in an adapter, then the port-channel interface is configured to be the downstream.\nElse all the ethernet interfaces will be configured as downstream -> to configure single-active EVPN multihomed networks.\n", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" + "title": "Auth" }, - "name": { + "auth_passphrase": { "type": "string", - "description": "Tracking group name.\nThe default group name is taken from fabric variable of the switch, `link_tracking.groups[0].name` with default value being \"LT_GROUP1\".\nOptional if default link_tracking settings are configured on the node.\n", - "title": "Name" + "description": "Cleartext passphrase so the recommendation is to use vault. Requires 'auth' to be set.", + "title": "Auth Passphrase" + }, + "priv": { + "type": "string", + "enum": [ + "des", + "aes", + "aes192", + "aes256" + ], + "title": "Priv" + }, + "priv_passphrase": { + "type": "string", + "description": "Cleartext passphrase so the recommendation is to use vault. Requires 'priv' to be set.", + "title": "Priv Passphrase" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} - }, - "title": "Link Tracking" + } }, - "dot1x": { - "type": "object", - "description": "802.1x", - "properties": { - "port_control": { - "type": "string", - "enum": [ - "auto", - "force-authorized", - "force-unauthorized" - ], - "title": "Port Control" - }, - "port_control_force_authorized_phone": { - "type": "boolean", - "title": "Port Control Force Authorized Phone" - }, - "reauthentication": { - "type": "boolean", - "title": "Reauthentication" - }, - "pae": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "authenticator" - ], - "title": "Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PAE" - }, - "authentication_failure": { - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "allow", - "drop" - ], - "title": "Action" - }, - "allow_vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "Allow VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Authentication Failure" - }, - "host_mode": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "multi-host", - "single-host" - ], - "title": "Mode" - }, - "multi_host_authenticated": { - "type": "boolean", - "title": "Multi Host Authenticated" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Host Mode" - }, - "mac_based_authentication": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "always": { - "type": "boolean", - "title": "Always" - }, - "host_mode_common": { - "type": "boolean", - "title": "Host Mode Common" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "title": "Users" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Snmp Settings" + }, + "svi_profiles": { + "type": "array", + "description": "Profiles to share common settings for SVIs under `.[].vrfs.svis`.\nKeys are the same used under SVIs. Keys defined under SVIs take precedence.\nNote: structured configuration is not merged recursively and will be taken directly from the most specific level in the following order:\n1. svi.nodes[inventory_hostname].structured_config\n2. svi_profile.nodes[inventory_hostname].structured_config\n3. svi_parent_profile.nodes[inventory_hostname].structured_config\n4. svi.structured_config\n5. svi_profile.structured_config\n6. svi_parent_profile.structured_config\n", + "items": { + "type": "object", + "properties": { + "profile": { + "type": "string", + "description": "Profile name", + "title": "Profile" + }, + "parent_profile": { + "type": "string", + "description": "Parent SVI profile name to apply.\nsvi_profiles can refer to another svi_profile to inherit settings in up to two levels (svi -> svi_profile -> svi_parent_profile).", + "title": "Parent Profile" + }, + "nodes": { + "type": "array", + "description": "Define node specific configuration, such as unique IP addresses.\nAny keys set here will be merged onto the SVI config, except `structured_config` keys which will replace the `structured_config` set on SVI level.\n", + "items": { + "type": "object", + "properties": { + "node": { + "type": "string", + "description": "l3_leaf inventory hostname", + "title": "Node" }, - "title": "MAC Based Authentication" - }, - "timeout": { - "type": "object", - "properties": { - "idle_host": { - "type": "integer", - "minimum": 10, - "maximum": 65535, - "title": "Idle Host" - }, - "quiet_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Quiet Period" - }, - "reauth_period": { - "type": "string", - "description": "Range 60-4294967295 or \"server\".", - "title": "Reauth Period" - }, - "reauth_timeout_ignore": { - "type": "boolean", - "title": "Reauth Timeout Ignore" - }, - "tx_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "TX Period" - } + "name": { + "type": "string", + "description": "VLAN name", + "title": "Name" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "enabled": { + "type": "boolean", + "description": "Enable or disable interface", + "title": "Enabled" }, - "title": "Timeout" - }, - "reauthorization_request_limit": { - "type": "integer", - "minimum": 1, - "maximum": 10, - "title": "Reauthorization Request Limit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "dot1x" - }, - "poe": { - "type": "object", - "description": "Power Over Ethernet settings applied on port. Only configured if platform supports PoE.", - "properties": { - "disabled": { - "type": "boolean", - "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", - "default": false, - "title": "Disabled" - }, - "priority": { - "type": "string", - "enum": [ - "critical", - "high", - "medium", - "low" - ], - "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", - "title": "Priority" - }, - "reboot": { - "description": "Set the PoE power behavior for a PoE port when the system is rebooted", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } + "description": { + "type": "string", + "description": "SVI description. By default set to VLAN name.\n", + "title": "Description" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "ip_address": { + "type": "string", + "description": "IPv4_address/Mask. Usually set under \"nodes\" to have unique IPv4 addresses per node.", + "title": "IP Address" }, - "title": "Reboot" - }, - "link_down": { - "description": "Set the PoE power behavior for a PoE port when the port goes down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - }, - "power_off_delay": { - "type": "integer", - "minimum": 1, - "maximum": 86400, - "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", - "title": "Power Off Delay" - } + "ipv6_address": { + "type": "string", + "description": "IPv6_address/Mask. Usually set under \"nodes\" to have unique IPv6 addresses per node.", + "title": "IPv6 Address" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "ipv6_enable": { + "type": "boolean", + "description": "Explicitly enable/disable link-local IPv6 addressing.", + "title": "IPv6 Enable" }, - "title": "Link Down" - }, - "shutdown": { - "description": "Set the PoE power behavior for a PoE port when the port is admin down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } + "ip_address_virtual": { + "type": "string", + "description": "IPv4_address/Mask\nIPv4 VXLAN Anycast IP address\nConserves IP addresses in VXLAN deployments as it doesn't require unique IP addresses on each node.\n", + "title": "IP Address Virtual" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "ipv6_address_virtual": { + "type": "string", + "description": "IPv6_address/Mask\nipv6 address virtuals to configure VXLAN Anycast IP address (Optional)\nIf both \"ipv6_address_virtual\" and \"ipv6_address_virtuals\" are set, all addresses will be configured\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ipv6_address_virtuals instead.", + "deprecated": true, + "title": "IPv6 Address Virtual" }, - "title": "Shutdown" - }, - "limit": { - "type": "object", - "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", - "properties": { - "class": { - "type": "integer", - "minimum": 0, - "maximum": 8, - "title": "Class" - }, - "watts": { + "ipv6_address_virtuals": { + "type": "array", + "description": "IPv6 VXLAN Anycast IP addresses\nConserves IPv6 addresses in VXLAN deployments as it doesn't require unique IPv6 addresses on each node.\n", + "items": { "type": "string", - "title": "Watts" + "description": "IPv6_address/Mask" }, - "fixed": { - "type": "boolean", - "description": "Set to ignore hardware classification", - "title": "Fixed" - } + "title": "IPv6 Address Virtuals" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "ip_address_virtual_secondaries": { + "type": "array", + "description": "Secondary IPv4 VXLAN Anycast IP addresses", + "items": { + "type": "string", + "description": "IPv4_address/Mask" + }, + "title": "IP Address Virtual Secondaries" }, - "title": "Limit" - }, - "negotiation_lldp": { - "type": "boolean", - "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", - "title": "Negotiation LLDP" - }, - "legacy_detect": { - "type": "boolean", - "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", - "title": "Legacy Detect" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PoE" - }, - "storm_control": { - "type": "object", - "description": "Storm control settings applied on port toward the endpoint.", - "properties": { - "all": { - "type": "object", - "properties": { - "level": { + "ip_virtual_router_addresses": { + "type": "array", + "description": "IPv4 VARP addresses.\nRequires an IP address to be configured on the SVI.\nIf ip_address_virtual is also set, ip_virtual_router_addresses will take precedence\n_if_ there is an ip_address configured for the node.\n", + "items": { "type": "string", - "description": "Configure maximum storm-control level.", - "title": "Level" + "description": "IPv4_address/Mask or IPv4_address\nIPv4_address/Mask will also configure a static route to the SVI per best practice.\n" }, - "unit": { + "title": "IP Virtual Router Addresses" + }, + "ipv6_virtual_router_addresses": { + "type": "array", + "description": "IPv6 VARP addresses.\nRequires an IPv6 address to be configured on the SVI.\nIf ipv6_address_virtuals is also set, ipv6_virtual_router_addresses will take precedence\n_if_ there is an ipv6_address configured for the node.\n", + "items": { "type": "string", - "enum": [ - "percent", - "pps" - ], - "default": "percent", - "description": "Optional variable and is hardware dependent.", - "title": "Unit" - } + "description": "IPv6_address" + }, + "title": "IPv6 Virtual Router Addresses" + }, + "ip_helpers": { + "type": "array", + "description": "IP helper for DHCP relay", + "items": { + "type": "object", + "properties": { + "ip_helper": { + "type": "string", + "description": "IPv4 DHCP server IP", + "title": "IP Helper" + }, + "source_interface": { + "type": "string", + "description": "Interface name to originate DHCP relay packets to DHCP server.", + "title": "Source Interface" + }, + "source_vrf": { + "type": "string", + "description": "VRF to originate DHCP relay packets to DHCP server. If not set, EOS uses the VRF on the SVI.", + "title": "Source VRF" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "ip_helper" + ] + }, + "title": "IP Helpers" + }, + "vni_override": { + "type": "integer", + "minimum": 1, + "maximum": 16777215, + "description": "By default the VNI will be derived from \"mac_vrf_vni_base\".\nThe vni_override allows us to override this value and statically define it (optional).\n", + "title": "Vni Override" + }, + "rt_override": { + "type": "string", + "description": "By default the MAC VRF RT will be derived from mac_vrf_id_base + vlan_id.\nThe rt_override allows us to override this value and statically define it.\nrt_override will default to vni_override if set.\n\nrt_override supports two formats:\n - A single number which will be used in the RT fields instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rt_type' for details).\n - A full RT string with colon seperator which will override the full RT.\n", + "title": "Rt Override" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "rd_override": { + "type": "string", + "description": "By default the MAC VRF RD will be derived from mac_vrf_id_base + vlan_id.\nThe rt_override allows us to override this value and statically define it.\nrd_override will default to rt_override or vni_override if set.\n\nrd_override supports two formats:\n - A single number which will be used in the RD assigned number field instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rd_type' for details).\n - A full RD string with colon seperator which will override the full RD.\n", + "title": "Rd Override" }, - "title": "All" - }, - "broadcast": { - "type": "object", - "properties": { - "level": { + "tags": { + "type": "array", + "description": "Tags leveraged for networks services filtering.\nTags are matched against \"filter.tags\" defined under node type settings.\nTags are also matched against the \"node_group\" name under node type settings.\n", + "default": [ + "all" + ], + "items": { "type": "string", - "description": "Configure maximum storm-control level.", - "title": "Level" + "description": "Tag value." }, - "unit": { + "title": "Tags" + }, + "trunk_groups": { + "type": "array", + "items": { "type": "string", - "enum": [ - "percent", - "pps" - ], - "default": "percent", - "description": "Optional variable and is hardware dependent.", - "title": "Unit" - } + "description": "Trunk groups are used for limiting vlans to trunk ports assigned to the same trunk group.\nRequires \"enable_trunk_groups: true\".\n" + }, + "title": "Trunk Groups" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "evpn_l2_multicast": { + "type": "object", + "description": "Explicitly enable or disable evpn_l2_multicast to override setting of `.[].evpn_l2_multicast.enabled`.\nWhen evpn_l2_multicast.enabled is set to true for a vlan or a tenant, \"igmp snooping\" and \"igmp snooping querier\" will always be enabled, overriding those individual settings.\n", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN L2 Multicast" }, - "title": "Broadcast" - }, - "multicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level.", - "title": "Level" + "evpn_l3_multicast": { + "type": "object", + "description": "Explicitly enable or disable evpn_l3_multicast to override setting of `.[].evpn_l3_multicast.enabled` and `.[].vrfs.[].evpn_l3_multicast.enabled`.\n", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + } }, - "unit": { - "type": "string", - "enum": [ - "percent", - "pps" - ], - "default": "percent", - "description": "Optional variable and is hardware dependent.", - "title": "Unit" - } + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN L3 Multicast" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "igmp_snooping_enabled": { + "type": "boolean", + "description": "Enable IGMP Snooping (Enabled by default on EOS).", + "title": "IGMP Snooping Enabled" }, - "title": "Multicast" - }, - "unknown_unicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level.", - "title": "Level" + "igmp_snooping_querier": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Will be enabled automatically if evpn_l2_multicast is enabled.", + "title": "Enabled" + }, + "source_address": { + "type": "string", + "description": "IPv4_address\nIf not set, IP address of \"Loopback0\" will be used.\n", + "title": "Source Address" + }, + "version": { + "type": "integer", + "description": "IGMP Version (By default EOS uses IGMP version 2 for IGMP querier).", + "enum": [ + 1, + 2, + 3 + ], + "title": "Version" + } }, - "unit": { - "type": "string", - "enum": [ - "percent", - "pps" - ], - "default": "percent", - "description": "Optional variable and is hardware dependent.", - "title": "Unit" - } + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IGMP Snooping Querier" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "vxlan": { + "type": "boolean", + "default": true, + "description": "Extend this SVI over VXLAN.", + "title": "VxLAN" }, - "title": "Unknown Unicast" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Storm Control" - }, - "monitor_sessions": { - "type": "array", - "description": "Used to define switchports as source or destination for monitoring sessions.", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Session name.", - "title": "Name" + "mtu": { + "type": "integer", + "description": "Interface MTU.", + "title": "MTU" }, - "role": { - "type": "string", - "enum": [ - "source", - "destination" - ], - "title": "Role" + "ospf": { + "type": "object", + "description": "OSPF interface configuration.", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "point_to_point": { + "type": "boolean", + "default": true, + "title": "Point To Point" + }, + "area": { + "type": "string", + "description": "OSPF area ID.", + "default": "0", + "title": "Area" + }, + "cost": { + "type": "integer", + "description": "OSPF link cost.", + "title": "Cost" + }, + "authentication": { + "type": "string", + "enum": [ + "simple", + "message-digest" + ], + "title": "Authentication" + }, + "simple_auth_key": { + "type": "string", + "description": "Password used with simple authentication.", + "title": "Simple Auth Key" + }, + "message_digest_keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "hash_algorithm": { + "type": "string", + "enum": [ + "md5", + "sha1", + "sha256", + "sha384", + "sha512" + ], + "default": "sha512", + "title": "Hash Algorithm" + }, + "key": { + "type": "string", + "description": "Type 7 encrypted key.", + "title": "Key" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Message Digest Keys" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "OSPF" }, - "source_settings": { + "bgp": { "type": "object", "properties": { - "direction": { - "type": "string", - "enum": [ - "rx", - "tx", - "both" - ], - "title": "Direction" - }, - "access_group": { + "structured_config": { "type": "object", + "description": "Structured configuration and EOS CLI commands rendered on router_bgp.vlans.[id=]\nThis configuration will not be applied to vlan aware bundles\n", "properties": { - "type": { + "id": { + "type": "integer", + "title": "ID" + }, + "tenant": { "type": "string", - "enum": [ - "ip", - "ipv6", - "mac" - ], - "title": "Type" + "description": "Key only used for documentation or validation purposes", + "title": "Tenant" }, - "name": { - "description": "ACL name.", + "rd": { + "description": "Route distinguisher", "type": "string", - "title": "Name" + "title": "Rd" }, - "priority": { - "type": "integer", - "title": "Priority" + "rd_evpn_domain": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "enum": [ + "remote", + "all" + ], + "title": "Domain" + }, + "rd": { + "type": "string", + "description": "Route distinguisher", + "title": "Rd" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Rd EVPN Domain" + }, + "eos_cli": { + "type": "string", + "description": "Multiline EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration", + "title": "EOS CLI" + }, + "route_targets": { + "type": "object", + "properties": { + "both": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Both" + }, + "import": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Import" + }, + "export": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Export" + }, + "import_evpn_domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "enum": [ + "remote", + "all" + ], + "title": "Domain" + }, + "route_target": { + "type": "string", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Import EVPN Domains" + }, + "export_evpn_domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "enum": [ + "remote", + "all" + ], + "title": "Domain" + }, + "route_target": { + "type": "string", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Export EVPN Domains" + }, + "import_export_evpn_domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "enum": [ + "remote", + "all" + ], + "title": "Domain" + }, + "route_target": { + "type": "string", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Import Export EVPN Domains" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Route Targets" + }, + "redistribute_routes": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Redistribute Routes" + }, + "no_redistribute_routes": { + "type": "array", + "items": { + "type": "string" + }, + "title": "No Redistribute Routes" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Access Group" + "title": "Structured Config" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration.\n", + "title": "Raw EOS CLI" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Source Settings" + "title": "BGP" }, - "session_settings": { + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the VLAN interface in the final EOS configuration.\n", + "title": "Raw EOS CLI" + }, + "structured_config": { "type": "object", - "description": "Session settings are defined per session name.\nDifferent session_settings for the same session name will be combined/merged.\n", + "description": "Custom structured config added under vlan_interfaces.[name=] for eos_cli_config_gen.\n", "properties": { - "encapsulation_gre_metadata_tx": { + "name": { + "type": "string", + "description": "VLAN interface name like \"Vlan123\"", + "title": "Name" + }, + "description": { + "type": "string", + "title": "Description" + }, + "shutdown": { "type": "boolean", - "title": "Encapsulation Gre Metadata TX" + "title": "Shutdown" }, - "header_remove_size": { + "vrf": { + "type": "string", + "description": "VRF name", + "title": "VRF" + }, + "arp_aging_timeout": { "type": "integer", - "description": "Number of bytes to remove from header.", - "title": "Header Remove Size" + "description": "In seconds", + "minimum": 1, + "maximum": 65535, + "title": "ARP Aging Timeout" + }, + "arp_cache_dynamic_capacity": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "ARP Cache Dynamic Capacity" + }, + "arp_gratuitous_accept": { + "type": "boolean", + "title": "ARP Gratuitous Accept" + }, + "arp_monitor_mac_address": { + "type": "boolean", + "title": "ARP Monitor MAC Address" + }, + "ip_proxy_arp": { + "type": "boolean", + "title": "IP Proxy ARP" + }, + "ip_directed_broadcast": { + "type": "boolean", + "title": "IP Directed Broadcast" + }, + "ip_address": { + "type": "string", + "description": "IPv4_address/Mask", + "title": "IP Address" + }, + "ip_address_secondaries": { + "type": "array", + "items": { + "type": "string", + "description": "IPv4_address/Mask" + }, + "title": "IP Address Secondaries" + }, + "ip_virtual_router_addresses": { + "type": "array", + "items": { + "type": "string", + "description": "IPv4 address or IPv4_address/Mask" + }, + "title": "IP Virtual Router Addresses" + }, + "ip_address_virtual": { + "type": "string", + "description": "IPv4_address/Mask", + "title": "IP Address Virtual" + }, + "ip_address_virtual_secondaries": { + "type": "array", + "items": { + "type": "string", + "description": "IPv4_address/Mask" + }, + "title": "IP Address Virtual Secondaries" + }, + "ip_igmp": { + "type": "boolean", + "title": "IP IGMP" + }, + "ip_igmp_version": { + "type": "integer", + "minimum": 1, + "maximum": 3, + "title": "IP IGMP Version" + }, + "ip_helpers": { + "type": "array", + "description": "List of DHCP servers", + "items": { + "type": "object", + "properties": { + "ip_helper": { + "type": "string", + "description": "IP address or hostname of DHCP server", + "title": "IP Helper" + }, + "source_interface": { + "type": "string", + "description": "Interface used as source for forwarded DHCP packets", + "title": "Source Interface" + }, + "vrf": { + "type": "string", + "description": "VRF where DHCP server can be reached", + "title": "VRF" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "ip_helper" + ] + }, + "title": "IP Helpers" + }, + "ip_nat": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "pool_name": { + "type": "string", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "pool_name", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Destination" + }, + "source": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "nat_type": { + "type": "string", + "enum": [ + "overload", + "pool", + "pool-address-only", + "pool-full-cone" + ], + "title": "Nat Type" + }, + "pool_name": { + "type": "string", + "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "nat_type", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IP Nat" + }, + "ipv6_enable": { + "type": "boolean", + "title": "IPv6 Enable" + }, + "ipv6_address": { + "type": "string", + "description": "IPv6_address/Mask", + "title": "IPv6 Address" + }, + "ipv6_address_virtual": { + "type": "string", + "description": "IPv6_address/Mask\nIf both \"ipv6_address_virtual\" and \"ipv6_address_virtuals\" are set, all addresses will be configured\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ipv6_address_virtuals instead.", + "deprecated": true, + "title": "IPv6 Address Virtual" + }, + "ipv6_address_virtuals": { + "type": "array", + "description": "The new \"ipv6_address_virtuals\" key support multiple virtual ipv6 addresses.", + "items": { + "type": "string", + "description": "IPv6_address/Mask" + }, + "title": "IPv6 Address Virtuals" + }, + "ipv6_address_link_local": { + "type": "string", + "description": "IPv6_address/Mask", + "title": "IPv6 Address Link Local" + }, + "ipv6_virtual_router_address": { + "type": "string", + "description": "\"ipv6_virtual_router_address\" should not be mixed with\nthe new \"ipv6_virtual_router_addresses\" key below to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ipv6_virtual_router_addresses instead.", + "deprecated": true, + "title": "IPv6 Virtual Router Address" + }, + "ipv6_virtual_router_addresses": { + "type": "array", + "description": "Improved \"VARPv6\" data model to support multiple VARPv6 addresses.", + "items": { + "type": "string", + "description": "IPv6 address or IPv6_address/Mask" + }, + "title": "IPv6 Virtual Router Addresses" + }, + "ipv6_nd_ra_disabled": { + "type": "boolean", + "title": "IPv6 ND RA Disabled" + }, + "ipv6_nd_managed_config_flag": { + "type": "boolean", + "title": "IPv6 ND Managed Config Flag" + }, + "ipv6_nd_prefixes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ipv6_prefix": { + "type": "string", + "description": "IPv6_address/Mask", + "title": "IPv6 Prefix" + }, + "valid_lifetime": { + "type": "string", + "description": "In seconds <0-4294967295> or infinite", + "title": "Valid Lifetime" + }, + "preferred_lifetime": { + "type": "string", + "description": "In seconds <0-4294967295> or infinite", + "title": "Preferred Lifetime" + }, + "no_autoconfig_flag": { + "type": "boolean", + "title": "No Autoconfig Flag" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "ipv6_prefix" + ] + }, + "title": "IPv6 ND Prefixes" + }, + "ipv6_dhcp_relay_destinations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "DHCP server's IPv6 address", + "title": "Address" + }, + "vrf": { + "type": "string", + "title": "VRF" + }, + "local_interface": { + "type": "string", + "description": "Local interface to communicate with DHCP server - mutually exclusive to source_address", + "title": "Local Interface" + }, + "source_address": { + "type": "string", + "description": "Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface", + "title": "Source Address" + }, + "link_address": { + "type": "string", + "description": "Override the default link address specified in the relayed DHCP packet", + "title": "Link Address" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "address" + ] + }, + "title": "IPv6 DHCP Relay Destinations" + }, + "access_group_in": { + "type": "string", + "description": "IPv4 access-list name", + "title": "Access Group In" + }, + "access_group_out": { + "type": "string", + "description": "IPv4 access-list name", + "title": "Access Group Out" + }, + "ipv6_access_group_in": { + "type": "string", + "description": "IPv6 access-list name", + "title": "IPv6 Access Group In" + }, + "ipv6_access_group_out": { + "type": "string", + "description": "IPv6 access-list name", + "title": "IPv6 Access Group Out" + }, + "multicast": { + "type": "object", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "boundaries": { + "type": "array", + "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", + "items": { + "type": "object", + "properties": { + "boundary": { + "type": "string", + "description": "IPv4 access-list name or IPv4 multicast group prefix with mask", + "title": "Boundary" + }, + "out": { + "type": "boolean", + "title": "Out" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "boundary" + ] + }, + "title": "Boundaries" + }, + "source_route_export": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "administrative_distance": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "title": "Administrative Distance" + } + }, + "required": [ + "enabled" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source Route Export" + }, + "static": { + "type": "boolean", + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + }, + "ipv6": { + "type": "object", + "properties": { + "boundaries": { + "type": "array", + "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", + "items": { + "type": "object", + "properties": { + "boundary": { + "type": "string", + "description": "IPv6 access-list name or IPv6 multicast group prefix with mask", + "title": "Boundary" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "boundary" + ] + }, + "title": "Boundaries" + }, + "source_route_export": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "administrative_distance": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "title": "Administrative Distance" + } + }, + "required": [ + "enabled" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source Route Export" + }, + "static": { + "type": "boolean", + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "ospf_network_point_to_point": { + "type": "boolean", + "title": "OSPF Network Point To Point" + }, + "ospf_area": { + "type": "string", + "title": "OSPF Area" + }, + "ospf_cost": { + "type": "integer", + "title": "OSPF Cost" + }, + "ospf_authentication": { + "type": "string", + "enum": [ + "none", + "simple", + "message-digest" + ], + "title": "OSPF Authentication" + }, + "ospf_authentication_key": { + "type": "string", + "description": "Encrypted password used for simple authentication", + "title": "OSPF Authentication Key" + }, + "ospf_message_digest_keys": { + "type": "array", + "description": "Keys used for message-digest authentication", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "hash_algorithm": { + "type": "string", + "enum": [ + "md5", + "sha1", + "sha256", + "sha384", + "sha512" + ], + "title": "Hash Algorithm" + }, + "key": { + "type": "string", + "description": "Encrypted password", + "title": "Key" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "id" + ] + }, + "title": "OSPF Message Digest Keys" }, - "access_group": { + "pim": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ip", - "ipv6", - "mac" - ], - "title": "Type" - }, - "name": { - "description": "ACL name.", - "type": "string", - "title": "Name" + "ipv4": { + "type": "object", + "properties": { + "dr_priority": { + "type": "integer", + "minimum": 0, + "maximum": 429467295, + "title": "DR Priority" + }, + "sparse_mode": { + "type": "boolean", + "title": "Sparse Mode" + }, + "local_interface": { + "type": "string", + "title": "Local Interface" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Access Group" + "title": "PIM" }, - "rate_limit_per_ingress_chip": { + "isis_enable": { "type": "string", - "description": "Ratelimit and unit as string.\nExamples:\n \"100000 bps\"\n \"100 kbps\"\n \"10 mbps\"\n", - "title": "Rate Limit Per Ingress Chip" + "description": "ISIS instance name", + "title": "ISIS Enable" }, - "rate_limit_per_egress_chip": { - "type": "string", - "description": "Ratelimit and unit as string.\nExamples:\n \"100000 bps\"\n \"100 kbps\"\n \"10 mbps\"\n", - "title": "Rate Limit Per Egress Chip" + "isis_passive": { + "type": "boolean", + "title": "ISIS Passive" }, - "sample": { + "isis_metric": { "type": "integer", - "title": "Sample" + "title": "ISIS Metric" }, - "truncate": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "size": { - "type": "integer", - "description": "Size in bytes", - "title": "Size" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Truncate" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Session Settings" - } - }, - "required": [ - "name" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Monitor Sessions" - }, - "ethernet_segment": { - "type": "object", - "description": "Settings for all or single-active EVPN multihoming.", - "properties": { - "short_esi": { - "type": "string", - "description": "In format xxxx:xxxx:xxxx or \"auto\".\nDefine a manual short-esi (be careful using this on profiles) or set the value to \"auto\" to automatically generate the value.\nPlease see the notes under \"EVPN A/A ESI dual and single-attached endpoint scenarios\" before setting `short_esi: auto`.\n", - "title": "Short Esi" - }, - "redundancy": { - "type": "string", - "enum": [ - "all-active", - "single-active" - ], - "description": "If omitted, Port-Channels use the EOS default of all-active.\nIf omitted, Ethernet interfaces are configured as single-active.\n", - "title": "Redundancy" - }, - "designated_forwarder_algorithm": { - "type": "string", - "enum": [ - "auto", - "modulus", - "preference" - ], - "description": "Configure DF algorithm and preferences.\n- auto: Use preference-based algorithm and assign preference based on position of device in the 'switches' list,\n e.g., assuming a list of three switches, this would assign a preference of 200 to the first switch, 100 to the 2nd, and 0 to the third.\n- preference: Set preference for each switch manually using designated_forwarder_preferences key.\n- modulus: Use the default modulus-based algorithm.\nIf omitted, Port-Channels use the EOS default of modulus.\nIf omitted, Ethernet interfaces default to the 'auto' mechanism detailed above.\n", - "title": "Designated Forwarder Algorithm" - }, - "designated_forwarder_preferences": { - "type": "array", - "description": "Manual preference as described above, required only for preference algorithm.", - "items": { - "type": "string" - }, - "title": "Designated Forwarder Preferences" - }, - "dont_preempt": { - "type": "boolean", - "description": "Disable preemption for single-active forwarding when auto/manual DF preference is configured.", - "title": "Dont Preempt" - } - }, - "required": [ - "short_esi" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Ethernet Segment" - }, - "port_channel": { - "type": "object", - "description": "Used for port-channel adapter.", - "properties": { - "mode": { - "type": "string", - "description": "Port-Channel Mode.", - "enum": [ - "active", - "passive", - "on" - ], - "title": "Mode" - }, - "channel_id": { - "type": "integer", - "description": "Port-Channel ID.\nIf no channel_id is specified, an id is generated from the first switch port in the port channel.\n", - "title": "Channel ID" - }, - "description": { - "type": "string", - "description": "By default the description is built leveraging `` name or `adapter.description` when defined.\nWhen this key is defined, it will append its content to the physical port description.\n", - "title": "Description" - }, - "enabled": { - "type": "boolean", - "default": true, - "description": "Port-Channel administrative state.\nSetting to false will set port to 'shutdown' in intended configuration.\n", - "title": "Enabled" - }, - "short_esi": { - "type": "string", - "description": "In format xxxx:xxxx:xxxx or \"auto\".\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ethernet_segment.short_esi instead.", - "deprecated": true, - "title": "Short Esi" - }, - "lacp_fallback": { - "type": "object", - "description": "LACP fallback configuration.", - "properties": { - "mode": { - "type": "string", - "enum": [ - "static" - ], - "description": "Currently only static mode is supported.", - "title": "Mode" - }, - "timeout": { - "type": "integer", - "description": "Timeout in seconds. EOS default is 90 seconds.", - "title": "Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LACP Fallback" - }, - "lacp_timer": { - "type": "object", - "description": "LACP timer configuration. Applies only when Port-channel mode is not \"on\".", - "properties": { - "mode": { - "type": "string", - "enum": [ - "normal", - "fast" - ], - "description": "LACP mode for interface members.", - "title": "Mode" - }, - "multiplier": { - "type": "integer", - "description": "Number of LACP BPDUs lost before deeming the peer down. EOS default is 3.", - "title": "Multiplier" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LACP Timer" - }, - "subinterfaces": { - "type": "array", - "description": "Port-Channel L2 Subinterfaces\nSubinterfaces are only supported on routed port-channels, which means they cannot be configured on MLAG port-channels.\nSetting short_esi: auto generates the short_esi automatically using a hash of configuration elements.\nPlease see the notes under \"EVPN A/A ESI dual-attached endpoint scenario\" before setting short_esi: auto.\n", - "items": { - "type": "object", - "properties": { - "number": { + "isis_network_point_to_point": { + "type": "boolean", + "title": "ISIS Network Point To Point" + }, + "mtu": { "type": "integer", - "description": "Subinterface number", - "title": "Number" + "title": "MTU" }, - "short_esi": { - "type": "string", - "description": "In format xxxx:xxxx:xxxx or \"auto\"\nRequired for multihomed port-channels with subinterfaces\n", - "title": "Short Esi" + "no_autostate": { + "type": "boolean", + "title": "No Autostate" + }, + "vrrp_ids": { + "type": "array", + "description": "Improved \"vrrp\" data model to support multiple VRRP IDs", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "VRID", + "title": "ID" + }, + "priority_level": { + "type": "integer", + "description": "Instance priority", + "title": "Priority Level" + }, + "advertisement": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "description": "Interval in seconds", + "title": "Interval" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Advertisement" + }, + "preempt": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "delay": { + "type": "object", + "properties": { + "minimum": { + "type": "integer", + "description": "Minimum preempt delay in seconds", + "title": "Minimum" + }, + "reload": { + "type": "integer", + "description": "Reload preempt delay in seconds", + "title": "Reload" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Delay" + } + }, + "required": [ + "enabled" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Preempt" + }, + "timers": { + "type": "object", + "properties": { + "delay": { + "type": "object", + "properties": { + "reload": { + "type": "integer", + "description": "Delay after reload in seconds.", + "title": "Reload" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Delay" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Timers" + }, + "tracked_object": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Tracked object name", + "title": "Name" + }, + "decrement": { + "type": "integer", + "minimum": 1, + "maximum": 254, + "description": "Decrement VRRP priority by 1-254", + "title": "Decrement" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "Tracked Object" + }, + "ipv4": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Virtual IPv4 address", + "title": "Address" + }, + "version": { + "type": "integer", + "enum": [ + 2, + 3 + ], + "title": "Version" + } + }, + "required": [ + "address" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + }, + "ipv6": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Virtual IPv6 address", + "title": "Address" + } + }, + "required": [ + "address" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "id" + ] + }, + "title": "VRRP IDs" }, - "vlan_id": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "description": "VLAN ID to bridge.\nDefault is subinterface number.\n", - "title": "VLAN ID" + "vrrp": { + "type": "object", + "description": "\"vrrp\" should not be mixed with the new \"vrrp_ids\" key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use vrrp_ids instead.", + "deprecated": true, + "properties": { + "virtual_router": { + "type": "string", + "description": "Virtual Router ID", + "title": "Virtual Router" + }, + "priority": { + "type": "integer", + "description": "Instance priority", + "title": "Priority" + }, + "advertisement_interval": { + "type": "integer", + "title": "Advertisement Interval" + }, + "preempt_delay_minimum": { + "type": "integer", + "title": "Preempt Delay Minimum" + }, + "ipv4": { + "type": "string", + "description": "Virtual IPv4 address", + "title": "IPv4" + }, + "ipv6": { + "type": "string", + "description": "Virtual IPv6 address", + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "VRRP" }, - "encapsulation_vlan": { + "ip_attached_host_route_export": { "type": "object", - "description": "Client VLAN ID encapsulation.\nDefault is subinterface number.\n", "properties": { - "client_dot1q": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "distance": { "type": "integer", "minimum": 1, - "maximum": 4094, - "title": "Client Dot1Q" + "maximum": 255, + "title": "Distance" } }, + "required": [ + "enabled" + ], "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Encapsulation VLAN" + "title": "IP Attached Host Route Export" + }, + "bfd": { + "type": "object", + "properties": { + "echo": { + "type": "boolean", + "title": "Echo" + }, + "interval": { + "type": "integer", + "description": "Rate in milliseconds", + "title": "Interval" + }, + "min_rx": { + "type": "integer", + "description": "Minimum RX hold time in milliseconds", + "title": "Min RX" + }, + "multiplier": { + "type": "integer", + "minimum": 3, + "maximum": 50, + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BFD" + }, + "service_policy": { + "type": "object", + "properties": { + "pbr": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Name of policy-map used for policy based routing", + "title": "Input" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PBR" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Service Policy" + }, + "pvlan_mapping": { + "type": "string", + "description": "List of VLANs as string", + "title": "PVLAN Mapping" + }, + "tenant": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Tenant" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Key only used for documentation or validation purposes", + "title": "Tags" + }, + "type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Type" + }, + "eos_cli": { + "type": "string", + "description": "Multiline EOS CLI rendered directly on the VLAN interface in the final EOS configuration", + "title": "EOS CLI" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} - } - }, - "title": "Subinterfaces" + }, + "title": "Structured Config" + } }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the port-channel interface in the final EOS configuration.", - "title": "Raw EOS CLI" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "structured_config": { - "type": "object", - "description": "Custom structured config added under port_channel_interfaces. for eos_cli_config_gen.", - "title": "Structured Config" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "required": [ + "node" + ] }, - "title": "Port Channel" - }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the ethernet interface in the final EOS configuration.", - "title": "Raw EOS CLI" + "title": "Nodes" }, - "structured_config": { - "type": "object", - "description": "Custom structured config added under ethernet_interfaces. for eos_cli_config_gen.", - "title": "Structured Config" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "profile" - ] - }, - "title": "Port Profiles" - }, - "ptp": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "profile": { - "type": "string", - "enum": [ - "aes67", - "smpte2059-2", - "aes67-r16-2016" - ], - "default": "aes67-r16-2016", - "title": "Profile" - }, - "domain": { - "type": "integer", - "minimum": 0, - "maximum": 255, - "title": "Domain" - }, - "auto_clock_identity": { - "type": "boolean", - "default": true, - "title": "Auto Clock Identity" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PTP" - }, - "ptp_profiles": { - "type": "array", - "items": { - "type": "object", - "properties": { - "profile": { + "name": { "type": "string", - "description": "PTP profile.", - "title": "Profile" + "description": "VLAN name", + "title": "Name" }, - "announce": { - "type": "object", - "description": "PTP announce interval.", - "properties": { - "interval": { - "type": "integer", - "minimum": -7, - "maximum": 4, - "title": "Interval" - }, - "timeout": { - "type": "integer", - "minimum": 2, - "maximum": 255, - "title": "Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Announce" + "enabled": { + "type": "boolean", + "description": "Enable or disable interface", + "title": "Enabled" }, - "delay_req": { - "type": "integer", - "minimum": -7, - "maximum": 8, - "title": "Delay Req" + "description": { + "type": "string", + "description": "SVI description. By default set to VLAN name.\n", + "title": "Description" }, - "sync_message": { - "type": "object", - "description": "PTP sync message interval.", - "properties": { - "interval": { - "type": "integer", - "minimum": -7, - "maximum": 3, - "title": "Interval" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Sync Message" + "ip_address": { + "type": "string", + "description": "IPv4_address/Mask. Usually set under \"nodes\" to have unique IPv4 addresses per node.", + "title": "IP Address" }, - "transport": { + "ipv6_address": { "type": "string", - "enum": [ - "ipv4" - ], - "title": "Transport" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "default": [ - { - "announce": { - "interval": 0, - "timeout": 3 + "description": "IPv6_address/Mask. Usually set under \"nodes\" to have unique IPv6 addresses per node.", + "title": "IPv6 Address" }, - "delay_req": -3, - "profile": "aes67-r16-2016", - "sync_message": { - "interval": -3 + "ipv6_enable": { + "type": "boolean", + "description": "Explicitly enable/disable link-local IPv6 addressing.", + "title": "IPv6 Enable" }, - "transport": "ipv4" - }, - { - "announce": { - "interval": -2, - "timeout": 3 + "ip_address_virtual": { + "type": "string", + "description": "IPv4_address/Mask\nIPv4 VXLAN Anycast IP address\nConserves IP addresses in VXLAN deployments as it doesn't require unique IP addresses on each node.\n", + "title": "IP Address Virtual" }, - "delay_req": -4, - "profile": "smpte2059-2", - "sync_message": { - "interval": -4 + "ipv6_address_virtual": { + "type": "string", + "description": "IPv6_address/Mask\nipv6 address virtuals to configure VXLAN Anycast IP address (Optional)\nIf both \"ipv6_address_virtual\" and \"ipv6_address_virtuals\" are set, all addresses will be configured\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ipv6_address_virtuals instead.", + "deprecated": true, + "title": "IPv6 Address Virtual" }, - "transport": "ipv4" - }, - { - "announce": { - "interval": 2, - "timeout": 3 + "ipv6_address_virtuals": { + "type": "array", + "description": "IPv6 VXLAN Anycast IP addresses\nConserves IPv6 addresses in VXLAN deployments as it doesn't require unique IPv6 addresses on each node.\n", + "items": { + "type": "string", + "description": "IPv6_address/Mask" + }, + "title": "IPv6 Address Virtuals" }, - "delay_req": 0, - "profile": "aes67", - "sync_message": { - "interval": 0 + "ip_address_virtual_secondaries": { + "type": "array", + "description": "Secondary IPv4 VXLAN Anycast IP addresses", + "items": { + "type": "string", + "description": "IPv4_address/Mask" + }, + "title": "IP Address Virtual Secondaries" }, - "transport": "ipv4" - } - ], - "title": "PTP Profiles" - }, - "queue_monitor_length": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "notifying": { - "type": "boolean", - "description": "If True, `eos_designs` will configure `queue-monitor length notifying` according to the\n`platform_settings.[].feature_support.queue_monitor_length_notify` setting.", - "title": "Notifying" - }, - "default_thresholds": { - "type": "object", - "properties": { - "high": { - "type": "integer", - "description": "Default high threshold for Ethernet Interfaces.\n", - "title": "High" + "ip_virtual_router_addresses": { + "type": "array", + "description": "IPv4 VARP addresses.\nRequires an IP address to be configured on the SVI.\nIf ip_address_virtual is also set, ip_virtual_router_addresses will take precedence\n_if_ there is an ip_address configured for the node.\n", + "items": { + "type": "string", + "description": "IPv4_address/Mask or IPv4_address\nIPv4_address/Mask will also configure a static route to the SVI per best practice.\n" }, - "low": { - "type": "integer", - "description": "Default low threshold for Ethernet Interfaces.\nLow threshold support is platform dependent.\n", - "title": "Low" - } + "title": "IP Virtual Router Addresses" }, - "required": [ - "high" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "ipv6_virtual_router_addresses": { + "type": "array", + "description": "IPv6 VARP addresses.\nRequires an IPv6 address to be configured on the SVI.\nIf ipv6_address_virtuals is also set, ipv6_virtual_router_addresses will take precedence\n_if_ there is an ipv6_address configured for the node.\n", + "items": { + "type": "string", + "description": "IPv6_address" + }, + "title": "IPv6 Virtual Router Addresses" }, - "title": "Default Thresholds" - }, - "log": { - "type": "integer", - "description": "Logging interval in seconds", - "title": "Log" - }, - "cpu": { - "type": "object", - "properties": { - "thresholds": { + "ip_helpers": { + "type": "array", + "description": "IP helper for DHCP relay", + "items": { "type": "object", "properties": { - "high": { - "type": "integer", - "title": "High" + "ip_helper": { + "type": "string", + "description": "IPv4 DHCP server IP", + "title": "IP Helper" }, - "low": { - "type": "integer", - "title": "Low" + "source_interface": { + "type": "string", + "description": "Interface name to originate DHCP relay packets to DHCP server.", + "title": "Source Interface" + }, + "source_vrf": { + "type": "string", + "description": "VRF to originate DHCP relay packets to DHCP server. If not set, EOS uses the VRF on the SVI.", + "title": "Source VRF" } }, - "required": [ - "high" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Thresholds" - } + "required": [ + "ip_helper" + ] + }, + "title": "IP Helpers" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "vni_override": { + "type": "integer", + "minimum": 1, + "maximum": 16777215, + "description": "By default the VNI will be derived from \"mac_vrf_vni_base\".\nThe vni_override allows us to override this value and statically define it (optional).\n", + "title": "Vni Override" }, - "title": "CPU" - } - }, - "required": [ - "enabled" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Queue Monitor Length" - }, - "redundancy": { - "type": "object", - "description": "Redundancy for chassis platforms with dual supervisors | Optional.", - "properties": { - "protocol": { - "type": "string", - "enum": [ - "sso", - "rpr" - ], - "title": "Protocol" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Redundancy" - }, - "serial_number": { - "description": "Serial Number of the device.\nUsed for documentation purpose in the fabric documentation as can also be used by the 'eos_config_deploy_cvp' role.\n\"serial_number\" can also be set directly under node type settings.\nIf both are set, the value under node type settings takes precedence.\n", - "type": "string", - "title": "Serial Number" - }, - "shutdown_interfaces_towards_undeployed_peers": { - "type": "boolean", - "default": false, - "description": "- It is possible to provision configurations for a complete topology but flag devices as undeployed using the host level variable `is_deployed: false`.\n\n```yaml\n# Use at the host level\nis_deployed: < true or false or default -> true >\n```\n\n- By default, this will have no impact within the `eos_designs` role. Configs will still be generated by the `eos_cli_config_gen` role and will still be pushed by the `eos_config_deploy_eapi` directly to devices if used.\n- However, if the `eos_config_deploy_cvp` role is used to push configurations, CloudVision will ignore the devices flagged as `is_deployed: false` and not attempt to configure them.\n- If the device is not present in the network due to CloudVision not configuring the device, `eos_validate_state` role will fail tests on peers of the undeployed device trying to verify that interfaces are up.\n- To overcome this and shutdown interfaces towards undeployed peers, the variable `shutdown_interfaces_towards_undeployed_peers` can be used, satisfying the `eos_validate_state` role interface tests.\n- Again, this is only an issue if `eos_config_deploy_cvp` is used and the devices are not present in the network.", - "title": "Shutdown Interfaces Towards Undeployed Peers" - }, - "snmp_settings": { - "type": "object", - "description": "Set SNMP settings (optional).", - "properties": { - "contact": { - "type": "string", - "description": "SNMP contact.", - "title": "Contact" - }, - "location": { - "type": "boolean", - "default": false, - "description": "Set SNMP location. Formatted as \" \".", - "title": "Location" - }, - "compute_local_engineid": { - "type": "boolean", - "default": false, - "description": "Generate a local engineId for SNMP using the 'compute_local_engineid_source' method.\n", - "title": "Compute Local Engineid" - }, - "compute_local_engineid_source": { - "type": "string", - "default": "hostname_and_ip", - "description": "`compute_local_engineid_source` supports:\n- `hostname_and_ip` generate a local engineId for SNMP by hashing via SHA1\n the string generated via the concatenation of the hostname plus the management IP.\n {{ inventory_hostname }} + {{ switch.mgmt_ip }}.\n- `system_mac` generate the switch default engine id for AVD usage.\n To use this, `system_mac_address` MUST be set for the device.\n The formula is f5717f + system_mac_address + 00.\n", - "enum": [ - "hostname_and_ip", - "system_mac" - ], - "title": "Compute Local Engineid Source" - }, - "compute_v3_user_localized_key": { - "type": "boolean", - "default": false, - "description": "Requires compute_local_engineid to be `true`.\nIf enabled, the SNMPv3 passphrases for auth and priv are transformed using RFC 2574, matching the value they would take in EOS CLI.\nThe algorithm requires a local engineId, which is unknown to AVD, hence the necessity to generate one beforehand.\n", - "title": "Compute V3 User Localized Key" - }, - "users": { - "type": "array", - "items": { + "rt_override": { + "type": "string", + "description": "By default the MAC VRF RT will be derived from mac_vrf_id_base + vlan_id.\nThe rt_override allows us to override this value and statically define it.\nrt_override will default to vni_override if set.\n\nrt_override supports two formats:\n - A single number which will be used in the RT fields instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rt_type' for details).\n - A full RT string with colon seperator which will override the full RT.\n", + "title": "Rt Override" + }, + "rd_override": { + "type": "string", + "description": "By default the MAC VRF RD will be derived from mac_vrf_id_base + vlan_id.\nThe rt_override allows us to override this value and statically define it.\nrd_override will default to rt_override or vni_override if set.\n\nrd_override supports two formats:\n - A single number which will be used in the RD assigned number field instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rd_type' for details).\n - A full RD string with colon seperator which will override the full RD.\n", + "title": "Rd Override" + }, + "tags": { + "type": "array", + "description": "Tags leveraged for networks services filtering.\nTags are matched against \"filter.tags\" defined under node type settings.\nTags are also matched against the \"node_group\" name under node type settings.\n", + "default": [ + "all" + ], + "items": { + "type": "string", + "description": "Tag value." + }, + "title": "Tags" + }, + "trunk_groups": { + "type": "array", + "items": { + "type": "string", + "description": "Trunk groups are used for limiting vlans to trunk ports assigned to the same trunk group.\nRequires \"enable_trunk_groups: true\".\n" + }, + "title": "Trunk Groups" + }, + "evpn_l2_multicast": { "type": "object", + "description": "Explicitly enable or disable evpn_l2_multicast to override setting of `.[].evpn_l2_multicast.enabled`.\nWhen evpn_l2_multicast.enabled is set to true for a vlan or a tenant, \"igmp snooping\" and \"igmp snooping querier\" will always be enabled, overriding those individual settings.\n", "properties": { - "name": { - "type": "string", - "description": "Username", - "title": "Name" + "enabled": { + "type": "boolean", + "title": "Enabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN L2 Multicast" + }, + "evpn_l3_multicast": { + "type": "object", + "description": "Explicitly enable or disable evpn_l3_multicast to override setting of `.[].evpn_l3_multicast.enabled` and `.[].vrfs.[].evpn_l3_multicast.enabled`.\n", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN L3 Multicast" + }, + "igmp_snooping_enabled": { + "type": "boolean", + "description": "Enable IGMP Snooping (Enabled by default on EOS).", + "title": "IGMP Snooping Enabled" + }, + "igmp_snooping_querier": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Will be enabled automatically if evpn_l2_multicast is enabled.", + "title": "Enabled" }, - "group": { + "source_address": { "type": "string", - "description": "Configuration of the SNMP User Groups are currently only possible using `structured_config`.\n", - "title": "Group" + "description": "IPv4_address\nIf not set, IP address of \"Loopback0\" will be used.\n", + "title": "Source Address" }, "version": { - "type": "string", + "type": "integer", + "description": "IGMP Version (By default EOS uses IGMP version 2 for IGMP querier).", "enum": [ - "v1", - "v2c", - "v3" + 1, + 2, + 3 ], "title": "Version" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IGMP Snooping Querier" + }, + "vxlan": { + "type": "boolean", + "default": true, + "description": "Extend this SVI over VXLAN.", + "title": "VxLAN" + }, + "mtu": { + "type": "integer", + "description": "Interface MTU.", + "title": "MTU" + }, + "ospf": { + "type": "object", + "description": "OSPF interface configuration.", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" }, - "auth": { - "type": "string", - "enum": [ - "md5", - "sha", - "sha256", - "sha384", - "sha512" - ], - "title": "Auth" + "point_to_point": { + "type": "boolean", + "default": true, + "title": "Point To Point" }, - "auth_passphrase": { + "area": { "type": "string", - "description": "Cleartext passphrase so the recommendation is to use vault. Requires 'auth' to be set.", - "title": "Auth Passphrase" + "description": "OSPF area ID.", + "default": "0", + "title": "Area" }, - "priv": { + "cost": { + "type": "integer", + "description": "OSPF link cost.", + "title": "Cost" + }, + "authentication": { "type": "string", "enum": [ - "des", - "aes", - "aes192", - "aes256" + "simple", + "message-digest" ], - "title": "Priv" + "title": "Authentication" }, - "priv_passphrase": { + "simple_auth_key": { "type": "string", - "description": "Cleartext passphrase so the recommendation is to use vault. Requires 'priv' to be set.", - "title": "Priv Passphrase" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Users" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Snmp Settings" - }, - "svi_profiles": { - "type": "array", - "description": "Profiles to share common settings for SVIs under `.[].vrfs.svis`.\nKeys are the same used under SVIs. Keys defined under SVIs take precedence.\nNote: structured configuration is not merged recursively and will be taken directly from the most specific level in the following order:\n1. svi.nodes[inventory_hostname].structured_config\n2. svi_profile.nodes[inventory_hostname].structured_config\n3. svi_parent_profile.nodes[inventory_hostname].structured_config\n4. svi.structured_config\n5. svi_profile.structured_config\n6. svi_parent_profile.structured_config\n", - "items": { - "type": "object", - "properties": { - "profile": { - "type": "string", - "description": "Profile name", - "title": "Profile" - }, - "parent_profile": { - "type": "string", - "description": "Parent SVI profile name to apply.\nsvi_profiles can refer to another svi_profile to inherit settings in up to two levels (svi -> svi_profile -> svi_parent_profile).", - "title": "Parent Profile" - }, - "nodes": { - "type": "array", - "description": "Define node specific configuration, such as unique IP addresses.\nAny keys set here will be merged onto the SVI config, except `structured_config` keys which will replace the `structured_config` set on SVI level.\n", - "items": { - "type": "object", - "properties": { - "node": { - "type": "string", - "description": "l3_leaf inventory hostname", - "title": "Node" - }, - "name": { - "type": "string", - "description": "VLAN name", - "title": "Name" - }, - "enabled": { - "type": "boolean", - "description": "Enable or disable interface", - "title": "Enabled" - }, - "description": { - "type": "string", - "description": "SVI description. By default set to VLAN name.\n", - "title": "Description" - }, - "ip_address": { - "type": "string", - "description": "IPv4_address/Mask. Usually set under \"nodes\" to have unique IPv4 addresses per node.", - "title": "IP Address" - }, - "ipv6_address": { - "type": "string", - "description": "IPv6_address/Mask. Usually set under \"nodes\" to have unique IPv6 addresses per node.", - "title": "IPv6 Address" - }, - "ipv6_enable": { - "type": "boolean", - "description": "Explicitly enable/disable link-local IPv6 addressing.", - "title": "IPv6 Enable" - }, - "ip_address_virtual": { - "type": "string", - "description": "IPv4_address/Mask\nIPv4 VXLAN Anycast IP address\nConserves IP addresses in VXLAN deployments as it doesn't require unique IP addresses on each node.\n", - "title": "IP Address Virtual" - }, - "ipv6_address_virtual": { - "type": "string", - "description": "IPv6_address/Mask\nipv6 address virtuals to configure VXLAN Anycast IP address (Optional)\nIf both \"ipv6_address_virtual\" and \"ipv6_address_virtuals\" are set, all addresses will be configured\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ipv6_address_virtuals instead.", - "deprecated": true, - "title": "IPv6 Address Virtual" - }, - "ipv6_address_virtuals": { - "type": "array", - "description": "IPv6 VXLAN Anycast IP addresses\nConserves IPv6 addresses in VXLAN deployments as it doesn't require unique IPv6 addresses on each node.\n", - "items": { - "type": "string", - "description": "IPv6_address/Mask" - }, - "title": "IPv6 Address Virtuals" - }, - "ip_address_virtual_secondaries": { - "type": "array", - "description": "Secondary IPv4 VXLAN Anycast IP addresses", - "items": { - "type": "string", - "description": "IPv4_address/Mask" + "description": "Password used with simple authentication.", + "title": "Simple Auth Key" + }, + "message_digest_keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "hash_algorithm": { + "type": "string", + "enum": [ + "md5", + "sha1", + "sha256", + "sha384", + "sha512" + ], + "default": "sha512", + "title": "Hash Algorithm" + }, + "key": { + "type": "string", + "description": "Type 7 encrypted key.", + "title": "Key" + } }, - "title": "IP Address Virtual Secondaries" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } }, - "ip_virtual_router_addresses": { - "type": "array", - "description": "IPv4 VARP addresses.\nRequires an IP address to be configured on the SVI.\nIf ip_address_virtual is also set, ip_virtual_router_addresses will take precedence\n_if_ there is an ip_address configured for the node.\n", - "items": { + "title": "Message Digest Keys" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "OSPF" + }, + "bgp": { + "type": "object", + "properties": { + "structured_config": { + "type": "object", + "description": "Structured configuration and EOS CLI commands rendered on router_bgp.vlans.[id=]\nThis configuration will not be applied to vlan aware bundles\n", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "tenant": { "type": "string", - "description": "IPv4_address/Mask or IPv4_address\nIPv4_address/Mask will also configure a static route to the SVI per best practice.\n" + "description": "Key only used for documentation or validation purposes", + "title": "Tenant" }, - "title": "IP Virtual Router Addresses" - }, - "ipv6_virtual_router_addresses": { - "type": "array", - "description": "IPv6 VARP addresses.\nRequires an IPv6 address to be configured on the SVI.\nIf ipv6_address_virtuals is also set, ipv6_virtual_router_addresses will take precedence\n_if_ there is an ipv6_address configured for the node.\n", - "items": { + "rd": { + "description": "Route distinguisher", "type": "string", - "description": "IPv6_address" + "title": "Rd" }, - "title": "IPv6 Virtual Router Addresses" - }, - "ip_helpers": { - "type": "array", - "description": "IP helper for DHCP relay", - "items": { + "rd_evpn_domain": { "type": "object", "properties": { - "ip_helper": { - "type": "string", - "description": "IPv4 DHCP server IP", - "title": "IP Helper" - }, - "source_interface": { + "domain": { "type": "string", - "description": "Interface name to originate DHCP relay packets to DHCP server.", - "title": "Source Interface" + "enum": [ + "remote", + "all" + ], + "title": "Domain" }, - "source_vrf": { + "rd": { "type": "string", - "description": "VRF to originate DHCP relay packets to DHCP server. If not set, EOS uses the VRF on the SVI.", - "title": "Source VRF" + "description": "Route distinguisher", + "title": "Rd" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "required": [ - "ip_helper" - ] - }, - "title": "IP Helpers" - }, - "vni_override": { - "type": "integer", - "minimum": 1, - "maximum": 16777215, - "description": "By default the VNI will be derived from \"mac_vrf_vni_base\".\nThe vni_override allows us to override this value and statically define it (optional).\n", - "title": "Vni Override" - }, - "rt_override": { - "type": "string", - "description": "By default the MAC VRF RT will be derived from mac_vrf_id_base + vlan_id.\nThe rt_override allows us to override this value and statically define it.\nrt_override will default to vni_override if set.\n\nrt_override supports two formats:\n - A single number which will be used in the RT fields instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rt_type' for details).\n - A full RT string with colon seperator which will override the full RT.\n", - "title": "Rt Override" - }, - "rd_override": { - "type": "string", - "description": "By default the MAC VRF RD will be derived from mac_vrf_id_base + vlan_id.\nThe rt_override allows us to override this value and statically define it.\nrd_override will default to rt_override or vni_override if set.\n\nrd_override supports two formats:\n - A single number which will be used in the RD assigned number field instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rd_type' for details).\n - A full RD string with colon seperator which will override the full RD.\n", - "title": "Rd Override" - }, - "tags": { - "type": "array", - "description": "Tags leveraged for networks services filtering.\nTags are matched against \"filter.tags\" defined under node type settings.\nTags are also matched against the \"node_group\" name under node type settings.\n", - "default": [ - "all" - ], - "items": { - "type": "string", - "description": "Tag value." + "title": "Rd EVPN Domain" }, - "title": "Tags" - }, - "trunk_groups": { - "type": "array", - "items": { + "eos_cli": { "type": "string", - "description": "Trunk groups are used for limiting vlans to trunk ports assigned to the same trunk group.\nRequires \"enable_trunk_groups: true\".\n" - }, - "title": "Trunk Groups" - }, - "evpn_l2_multicast": { - "type": "object", - "description": "Explicitly enable or disable evpn_l2_multicast to override setting of `.[].evpn_l2_multicast.enabled`.\nWhen evpn_l2_multicast.enabled is set to true for a vlan or a tenant, \"igmp snooping\" and \"igmp snooping querier\" will always be enabled, overriding those individual settings.\n", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EVPN L2 Multicast" - }, - "evpn_l3_multicast": { - "type": "object", - "description": "Explicitly enable or disable evpn_l3_multicast to override setting of `.[].evpn_l3_multicast.enabled` and `.[].vrfs.[].evpn_l3_multicast.enabled`.\n", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "description": "Multiline EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration", + "title": "EOS CLI" }, - "title": "EVPN L3 Multicast" - }, - "igmp_snooping_enabled": { - "type": "boolean", - "description": "Enable IGMP Snooping (Enabled by default on EOS).", - "title": "IGMP Snooping Enabled" - }, - "igmp_snooping_querier": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "description": "Will be enabled automatically if evpn_l2_multicast is enabled.", - "title": "Enabled" + "route_targets": { + "type": "object", + "properties": { + "both": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Both" + }, + "import": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Import" + }, + "export": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Export" + }, + "import_evpn_domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "enum": [ + "remote", + "all" + ], + "title": "Domain" + }, + "route_target": { + "type": "string", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Import EVPN Domains" + }, + "export_evpn_domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "enum": [ + "remote", + "all" + ], + "title": "Domain" + }, + "route_target": { + "type": "string", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Export EVPN Domains" + }, + "import_export_evpn_domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "enum": [ + "remote", + "all" + ], + "title": "Domain" + }, + "route_target": { + "type": "string", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Import Export EVPN Domains" + } }, - "source_address": { - "type": "string", - "description": "IPv4_address\nIf not set, IP address of \"Loopback0\" will be used.\n", - "title": "Source Address" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "version": { - "type": "integer", - "description": "IGMP Version (By default EOS uses IGMP version 2 for IGMP querier).", - "enum": [ - 1, - 2, - 3 - ], - "title": "Version" - } + "title": "Route Targets" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "redistribute_routes": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Redistribute Routes" }, - "title": "IGMP Snooping Querier" + "no_redistribute_routes": { + "type": "array", + "items": { + "type": "string" + }, + "title": "No Redistribute Routes" + } }, - "vxlan": { - "type": "boolean", - "default": true, - "description": "Extend this SVI over VXLAN.", - "title": "VxLAN" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "mtu": { - "type": "integer", - "description": "Interface MTU.", - "title": "MTU" + "title": "Structured Config" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration.\n", + "title": "Raw EOS CLI" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the VLAN interface in the final EOS configuration.\n", + "title": "Raw EOS CLI" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config added under vlan_interfaces.[name=] for eos_cli_config_gen.\n", + "properties": { + "name": { + "type": "string", + "description": "VLAN interface name like \"Vlan123\"", + "title": "Name" + }, + "description": { + "type": "string", + "title": "Description" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + }, + "vrf": { + "type": "string", + "description": "VRF name", + "title": "VRF" + }, + "arp_aging_timeout": { + "type": "integer", + "description": "In seconds", + "minimum": 1, + "maximum": 65535, + "title": "ARP Aging Timeout" + }, + "arp_cache_dynamic_capacity": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "ARP Cache Dynamic Capacity" + }, + "arp_gratuitous_accept": { + "type": "boolean", + "title": "ARP Gratuitous Accept" + }, + "arp_monitor_mac_address": { + "type": "boolean", + "title": "ARP Monitor MAC Address" + }, + "ip_proxy_arp": { + "type": "boolean", + "title": "IP Proxy ARP" + }, + "ip_directed_broadcast": { + "type": "boolean", + "title": "IP Directed Broadcast" + }, + "ip_address": { + "type": "string", + "description": "IPv4_address/Mask", + "title": "IP Address" + }, + "ip_address_secondaries": { + "type": "array", + "items": { + "type": "string", + "description": "IPv4_address/Mask" + }, + "title": "IP Address Secondaries" + }, + "ip_virtual_router_addresses": { + "type": "array", + "items": { + "type": "string", + "description": "IPv4 address or IPv4_address/Mask" }, - "ospf": { + "title": "IP Virtual Router Addresses" + }, + "ip_address_virtual": { + "type": "string", + "description": "IPv4_address/Mask", + "title": "IP Address Virtual" + }, + "ip_address_virtual_secondaries": { + "type": "array", + "items": { + "type": "string", + "description": "IPv4_address/Mask" + }, + "title": "IP Address Virtual Secondaries" + }, + "ip_igmp": { + "type": "boolean", + "title": "IP IGMP" + }, + "ip_igmp_version": { + "type": "integer", + "minimum": 1, + "maximum": 3, + "title": "IP IGMP Version" + }, + "ip_helpers": { + "type": "array", + "description": "List of DHCP servers", + "items": { "type": "object", - "description": "OSPF interface configuration.", "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "point_to_point": { - "type": "boolean", - "default": true, - "title": "Point To Point" - }, - "area": { + "ip_helper": { "type": "string", - "description": "OSPF area ID.", - "default": "0", - "title": "Area" - }, - "cost": { - "type": "integer", - "description": "OSPF link cost.", - "title": "Cost" + "description": "IP address or hostname of DHCP server", + "title": "IP Helper" }, - "authentication": { + "source_interface": { "type": "string", - "enum": [ - "simple", - "message-digest" - ], - "title": "Authentication" + "description": "Interface used as source for forwarded DHCP packets", + "title": "Source Interface" }, - "simple_auth_key": { + "vrf": { "type": "string", - "description": "Password used with simple authentication.", - "title": "Simple Auth Key" - }, - "message_digest_keys": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "title": "ID" - }, - "hash_algorithm": { - "type": "string", - "enum": [ - "md5", - "sha1", - "sha256", - "sha384", - "sha512" - ], - "default": "sha512", - "title": "Hash Algorithm" - }, - "key": { - "type": "string", - "description": "Type 7 encrypted key.", - "title": "Key" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Message Digest Keys" + "description": "VRF where DHCP server can be reached", + "title": "VRF" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "OSPF" + "required": [ + "ip_helper" + ] }, - "bgp": { - "type": "object", - "properties": { - "structured_config": { - "type": "object", - "description": "Structured configuration and EOS CLI commands rendered on router_bgp.vlans.\nThis configuration will not be applied to vlan aware bundles\n", - "title": "Structured Config" + "title": "IP Helpers" + }, + "ip_nat": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "pool_name": { + "type": "string", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "pool_name", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration.\n", - "title": "Raw EOS CLI" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Destination" }, - "title": "BGP" + "source": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "nat_type": { + "type": "string", + "enum": [ + "overload", + "pool", + "pool-address-only", + "pool-full-cone" + ], + "title": "Nat Type" + }, + "pool_name": { + "type": "string", + "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "nat_type", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" + }, + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" + ], + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" + }, + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source" + } }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the VLAN interface in the final EOS configuration.\n", - "title": "Raw EOS CLI" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "structured_config": { - "type": "object", - "description": "Custom structured config added under vlan_interfaces. for eos_cli_config_gen.", - "title": "Structured Config" - } + "title": "IP Nat" }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "ipv6_enable": { + "type": "boolean", + "title": "IPv6 Enable" }, - "required": [ - "node" - ] - }, - "title": "Nodes" - }, - "name": { - "type": "string", - "description": "VLAN name", - "title": "Name" - }, - "enabled": { - "type": "boolean", - "description": "Enable or disable interface", - "title": "Enabled" - }, - "description": { - "type": "string", - "description": "SVI description. By default set to VLAN name.\n", - "title": "Description" - }, - "ip_address": { - "type": "string", - "description": "IPv4_address/Mask. Usually set under \"nodes\" to have unique IPv4 addresses per node.", - "title": "IP Address" - }, - "ipv6_address": { - "type": "string", - "description": "IPv6_address/Mask. Usually set under \"nodes\" to have unique IPv6 addresses per node.", - "title": "IPv6 Address" - }, - "ipv6_enable": { - "type": "boolean", - "description": "Explicitly enable/disable link-local IPv6 addressing.", - "title": "IPv6 Enable" - }, - "ip_address_virtual": { - "type": "string", - "description": "IPv4_address/Mask\nIPv4 VXLAN Anycast IP address\nConserves IP addresses in VXLAN deployments as it doesn't require unique IP addresses on each node.\n", - "title": "IP Address Virtual" - }, - "ipv6_address_virtual": { - "type": "string", - "description": "IPv6_address/Mask\nipv6 address virtuals to configure VXLAN Anycast IP address (Optional)\nIf both \"ipv6_address_virtual\" and \"ipv6_address_virtuals\" are set, all addresses will be configured\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ipv6_address_virtuals instead.", - "deprecated": true, - "title": "IPv6 Address Virtual" - }, - "ipv6_address_virtuals": { - "type": "array", - "description": "IPv6 VXLAN Anycast IP addresses\nConserves IPv6 addresses in VXLAN deployments as it doesn't require unique IPv6 addresses on each node.\n", - "items": { - "type": "string", - "description": "IPv6_address/Mask" - }, - "title": "IPv6 Address Virtuals" - }, - "ip_address_virtual_secondaries": { - "type": "array", - "description": "Secondary IPv4 VXLAN Anycast IP addresses", - "items": { - "type": "string", - "description": "IPv4_address/Mask" - }, - "title": "IP Address Virtual Secondaries" - }, - "ip_virtual_router_addresses": { - "type": "array", - "description": "IPv4 VARP addresses.\nRequires an IP address to be configured on the SVI.\nIf ip_address_virtual is also set, ip_virtual_router_addresses will take precedence\n_if_ there is an ip_address configured for the node.\n", - "items": { - "type": "string", - "description": "IPv4_address/Mask or IPv4_address\nIPv4_address/Mask will also configure a static route to the SVI per best practice.\n" - }, - "title": "IP Virtual Router Addresses" - }, - "ipv6_virtual_router_addresses": { - "type": "array", - "description": "IPv6 VARP addresses.\nRequires an IPv6 address to be configured on the SVI.\nIf ipv6_address_virtuals is also set, ipv6_virtual_router_addresses will take precedence\n_if_ there is an ipv6_address configured for the node.\n", - "items": { - "type": "string", - "description": "IPv6_address" - }, - "title": "IPv6 Virtual Router Addresses" - }, - "ip_helpers": { - "type": "array", - "description": "IP helper for DHCP relay", - "items": { - "type": "object", - "properties": { - "ip_helper": { + "ipv6_address": { + "type": "string", + "description": "IPv6_address/Mask", + "title": "IPv6 Address" + }, + "ipv6_address_virtual": { + "type": "string", + "description": "IPv6_address/Mask\nIf both \"ipv6_address_virtual\" and \"ipv6_address_virtuals\" are set, all addresses will be configured\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ipv6_address_virtuals instead.", + "deprecated": true, + "title": "IPv6 Address Virtual" + }, + "ipv6_address_virtuals": { + "type": "array", + "description": "The new \"ipv6_address_virtuals\" key support multiple virtual ipv6 addresses.", + "items": { "type": "string", - "description": "IPv4 DHCP server IP", - "title": "IP Helper" + "description": "IPv6_address/Mask" }, - "source_interface": { + "title": "IPv6 Address Virtuals" + }, + "ipv6_address_link_local": { + "type": "string", + "description": "IPv6_address/Mask", + "title": "IPv6 Address Link Local" + }, + "ipv6_virtual_router_address": { + "type": "string", + "description": "\"ipv6_virtual_router_address\" should not be mixed with\nthe new \"ipv6_virtual_router_addresses\" key below to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use ipv6_virtual_router_addresses instead.", + "deprecated": true, + "title": "IPv6 Virtual Router Address" + }, + "ipv6_virtual_router_addresses": { + "type": "array", + "description": "Improved \"VARPv6\" data model to support multiple VARPv6 addresses.", + "items": { "type": "string", - "description": "Interface name to originate DHCP relay packets to DHCP server.", - "title": "Source Interface" + "description": "IPv6 address or IPv6_address/Mask" }, - "source_vrf": { - "type": "string", - "description": "VRF to originate DHCP relay packets to DHCP server. If not set, EOS uses the VRF on the SVI.", - "title": "Source VRF" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "title": "IPv6 Virtual Router Addresses" }, - "required": [ - "ip_helper" - ] - }, - "title": "IP Helpers" - }, - "vni_override": { - "type": "integer", - "minimum": 1, - "maximum": 16777215, - "description": "By default the VNI will be derived from \"mac_vrf_vni_base\".\nThe vni_override allows us to override this value and statically define it (optional).\n", - "title": "Vni Override" - }, - "rt_override": { - "type": "string", - "description": "By default the MAC VRF RT will be derived from mac_vrf_id_base + vlan_id.\nThe rt_override allows us to override this value and statically define it.\nrt_override will default to vni_override if set.\n\nrt_override supports two formats:\n - A single number which will be used in the RT fields instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rt_type' for details).\n - A full RT string with colon seperator which will override the full RT.\n", - "title": "Rt Override" - }, - "rd_override": { - "type": "string", - "description": "By default the MAC VRF RD will be derived from mac_vrf_id_base + vlan_id.\nThe rt_override allows us to override this value and statically define it.\nrd_override will default to rt_override or vni_override if set.\n\nrd_override supports two formats:\n - A single number which will be used in the RD assigned number field instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rd_type' for details).\n - A full RD string with colon seperator which will override the full RD.\n", - "title": "Rd Override" - }, - "tags": { - "type": "array", - "description": "Tags leveraged for networks services filtering.\nTags are matched against \"filter.tags\" defined under node type settings.\nTags are also matched against the \"node_group\" name under node type settings.\n", - "default": [ - "all" - ], - "items": { - "type": "string", - "description": "Tag value." - }, - "title": "Tags" - }, - "trunk_groups": { - "type": "array", - "items": { - "type": "string", - "description": "Trunk groups are used for limiting vlans to trunk ports assigned to the same trunk group.\nRequires \"enable_trunk_groups: true\".\n" - }, - "title": "Trunk Groups" - }, - "evpn_l2_multicast": { - "type": "object", - "description": "Explicitly enable or disable evpn_l2_multicast to override setting of `.[].evpn_l2_multicast.enabled`.\nWhen evpn_l2_multicast.enabled is set to true for a vlan or a tenant, \"igmp snooping\" and \"igmp snooping querier\" will always be enabled, overriding those individual settings.\n", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EVPN L2 Multicast" - }, - "evpn_l3_multicast": { - "type": "object", - "description": "Explicitly enable or disable evpn_l3_multicast to override setting of `.[].evpn_l3_multicast.enabled` and `.[].vrfs.[].evpn_l3_multicast.enabled`.\n", - "properties": { - "enabled": { + "ipv6_nd_ra_disabled": { "type": "boolean", - "title": "Enabled" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EVPN L3 Multicast" - }, - "igmp_snooping_enabled": { - "type": "boolean", - "description": "Enable IGMP Snooping (Enabled by default on EOS).", - "title": "IGMP Snooping Enabled" - }, - "igmp_snooping_querier": { - "type": "object", - "properties": { - "enabled": { + "title": "IPv6 ND RA Disabled" + }, + "ipv6_nd_managed_config_flag": { "type": "boolean", - "description": "Will be enabled automatically if evpn_l2_multicast is enabled.", - "title": "Enabled" + "title": "IPv6 ND Managed Config Flag" }, - "source_address": { + "ipv6_nd_prefixes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ipv6_prefix": { + "type": "string", + "description": "IPv6_address/Mask", + "title": "IPv6 Prefix" + }, + "valid_lifetime": { + "type": "string", + "description": "In seconds <0-4294967295> or infinite", + "title": "Valid Lifetime" + }, + "preferred_lifetime": { + "type": "string", + "description": "In seconds <0-4294967295> or infinite", + "title": "Preferred Lifetime" + }, + "no_autoconfig_flag": { + "type": "boolean", + "title": "No Autoconfig Flag" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "ipv6_prefix" + ] + }, + "title": "IPv6 ND Prefixes" + }, + "ipv6_dhcp_relay_destinations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "DHCP server's IPv6 address", + "title": "Address" + }, + "vrf": { + "type": "string", + "title": "VRF" + }, + "local_interface": { + "type": "string", + "description": "Local interface to communicate with DHCP server - mutually exclusive to source_address", + "title": "Local Interface" + }, + "source_address": { + "type": "string", + "description": "Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface", + "title": "Source Address" + }, + "link_address": { + "type": "string", + "description": "Override the default link address specified in the relayed DHCP packet", + "title": "Link Address" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "address" + ] + }, + "title": "IPv6 DHCP Relay Destinations" + }, + "access_group_in": { "type": "string", - "description": "IPv4_address\nIf not set, IP address of \"Loopback0\" will be used.\n", - "title": "Source Address" + "description": "IPv4 access-list name", + "title": "Access Group In" }, - "version": { - "type": "integer", - "description": "IGMP Version (By default EOS uses IGMP version 2 for IGMP querier).", - "enum": [ - 1, - 2, - 3 - ], - "title": "Version" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IGMP Snooping Querier" - }, - "vxlan": { - "type": "boolean", - "default": true, - "description": "Extend this SVI over VXLAN.", - "title": "VxLAN" - }, - "mtu": { - "type": "integer", - "description": "Interface MTU.", - "title": "MTU" - }, - "ospf": { - "type": "object", - "description": "OSPF interface configuration.", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" + "access_group_out": { + "type": "string", + "description": "IPv4 access-list name", + "title": "Access Group Out" }, - "point_to_point": { + "ipv6_access_group_in": { + "type": "string", + "description": "IPv6 access-list name", + "title": "IPv6 Access Group In" + }, + "ipv6_access_group_out": { + "type": "string", + "description": "IPv6 access-list name", + "title": "IPv6 Access Group Out" + }, + "multicast": { + "type": "object", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "boundaries": { + "type": "array", + "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", + "items": { + "type": "object", + "properties": { + "boundary": { + "type": "string", + "description": "IPv4 access-list name or IPv4 multicast group prefix with mask", + "title": "Boundary" + }, + "out": { + "type": "boolean", + "title": "Out" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "boundary" + ] + }, + "title": "Boundaries" + }, + "source_route_export": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "administrative_distance": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "title": "Administrative Distance" + } + }, + "required": [ + "enabled" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source Route Export" + }, + "static": { + "type": "boolean", + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + }, + "ipv6": { + "type": "object", + "properties": { + "boundaries": { + "type": "array", + "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", + "items": { + "type": "object", + "properties": { + "boundary": { + "type": "string", + "description": "IPv6 access-list name or IPv6 multicast group prefix with mask", + "title": "Boundary" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "boundary" + ] + }, + "title": "Boundaries" + }, + "source_route_export": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "administrative_distance": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "title": "Administrative Distance" + } + }, + "required": [ + "enabled" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Source Route Export" + }, + "static": { + "type": "boolean", + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "ospf_network_point_to_point": { "type": "boolean", - "default": true, - "title": "Point To Point" + "title": "OSPF Network Point To Point" }, - "area": { + "ospf_area": { "type": "string", - "description": "OSPF area ID.", - "default": "0", - "title": "Area" + "title": "OSPF Area" }, - "cost": { + "ospf_cost": { "type": "integer", - "description": "OSPF link cost.", - "title": "Cost" + "title": "OSPF Cost" }, - "authentication": { + "ospf_authentication": { "type": "string", "enum": [ + "none", "simple", "message-digest" ], - "title": "Authentication" + "title": "OSPF Authentication" }, - "simple_auth_key": { + "ospf_authentication_key": { "type": "string", - "description": "Password used with simple authentication.", - "title": "Simple Auth Key" + "description": "Encrypted password used for simple authentication", + "title": "OSPF Authentication Key" }, - "message_digest_keys": { + "ospf_message_digest_keys": { "type": "array", + "description": "Keys used for message-digest authentication", "items": { "type": "object", "properties": { @@ -6119,57 +17411,414 @@ "sha384", "sha512" ], - "default": "sha512", "title": "Hash Algorithm" }, "key": { "type": "string", - "description": "Type 7 encrypted key.", + "description": "Encrypted password", "title": "Key" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} + }, + "required": [ + "id" + ] + }, + "title": "OSPF Message Digest Keys" + }, + "pim": { + "type": "object", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "dr_priority": { + "type": "integer", + "minimum": 0, + "maximum": 429467295, + "title": "DR Priority" + }, + "sparse_mode": { + "type": "boolean", + "title": "Sparse Mode" + }, + "local_interface": { + "type": "string", + "title": "Local Interface" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" } }, - "title": "Message Digest Keys" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "OSPF" - }, - "bgp": { - "type": "object", - "properties": { - "structured_config": { + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PIM" + }, + "isis_enable": { + "type": "string", + "description": "ISIS instance name", + "title": "ISIS Enable" + }, + "isis_passive": { + "type": "boolean", + "title": "ISIS Passive" + }, + "isis_metric": { + "type": "integer", + "title": "ISIS Metric" + }, + "isis_network_point_to_point": { + "type": "boolean", + "title": "ISIS Network Point To Point" + }, + "mtu": { + "type": "integer", + "title": "MTU" + }, + "no_autostate": { + "type": "boolean", + "title": "No Autostate" + }, + "vrrp_ids": { + "type": "array", + "description": "Improved \"vrrp\" data model to support multiple VRRP IDs", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "VRID", + "title": "ID" + }, + "priority_level": { + "type": "integer", + "description": "Instance priority", + "title": "Priority Level" + }, + "advertisement": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "description": "Interval in seconds", + "title": "Interval" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Advertisement" + }, + "preempt": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "delay": { + "type": "object", + "properties": { + "minimum": { + "type": "integer", + "description": "Minimum preempt delay in seconds", + "title": "Minimum" + }, + "reload": { + "type": "integer", + "description": "Reload preempt delay in seconds", + "title": "Reload" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Delay" + } + }, + "required": [ + "enabled" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Preempt" + }, + "timers": { + "type": "object", + "properties": { + "delay": { + "type": "object", + "properties": { + "reload": { + "type": "integer", + "description": "Delay after reload in seconds.", + "title": "Reload" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Delay" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Timers" + }, + "tracked_object": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Tracked object name", + "title": "Name" + }, + "decrement": { + "type": "integer", + "minimum": 1, + "maximum": 254, + "description": "Decrement VRRP priority by 1-254", + "title": "Decrement" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "Tracked Object" + }, + "ipv4": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Virtual IPv4 address", + "title": "Address" + }, + "version": { + "type": "integer", + "enum": [ + 2, + 3 + ], + "title": "Version" + } + }, + "required": [ + "address" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + }, + "ipv6": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Virtual IPv6 address", + "title": "Address" + } + }, + "required": [ + "address" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "id" + ] + }, + "title": "VRRP IDs" + }, + "vrrp": { "type": "object", - "description": "Structured configuration and EOS CLI commands rendered on router_bgp.vlans.\nThis configuration will not be applied to vlan aware bundles\n", - "title": "Structured Config" + "description": "\"vrrp\" should not be mixed with the new \"vrrp_ids\" key above to avoid conflicts.\n\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use vrrp_ids instead.", + "deprecated": true, + "properties": { + "virtual_router": { + "type": "string", + "description": "Virtual Router ID", + "title": "Virtual Router" + }, + "priority": { + "type": "integer", + "description": "Instance priority", + "title": "Priority" + }, + "advertisement_interval": { + "type": "integer", + "title": "Advertisement Interval" + }, + "preempt_delay_minimum": { + "type": "integer", + "title": "Preempt Delay Minimum" + }, + "ipv4": { + "type": "string", + "description": "Virtual IPv4 address", + "title": "IPv4" + }, + "ipv6": { + "type": "string", + "description": "Virtual IPv6 address", + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "VRRP" }, - "raw_eos_cli": { + "ip_attached_host_route_export": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "distance": { + "type": "integer", + "minimum": 1, + "maximum": 255, + "title": "Distance" + } + }, + "required": [ + "enabled" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IP Attached Host Route Export" + }, + "bfd": { + "type": "object", + "properties": { + "echo": { + "type": "boolean", + "title": "Echo" + }, + "interval": { + "type": "integer", + "description": "Rate in milliseconds", + "title": "Interval" + }, + "min_rx": { + "type": "integer", + "description": "Minimum RX hold time in milliseconds", + "title": "Min RX" + }, + "multiplier": { + "type": "integer", + "minimum": 3, + "maximum": 50, + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BFD" + }, + "service_policy": { + "type": "object", + "properties": { + "pbr": { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Name of policy-map used for policy based routing", + "title": "Input" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PBR" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Service Policy" + }, + "pvlan_mapping": { "type": "string", - "description": "EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration.\n", - "title": "Raw EOS CLI" + "description": "List of VLANs as string", + "title": "PVLAN Mapping" + }, + "tenant": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Tenant" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Key only used for documentation or validation purposes", + "title": "Tags" + }, + "type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Type" + }, + "eos_cli": { + "type": "string", + "description": "Multiline EOS CLI rendered directly on the VLAN interface in the final EOS configuration", + "title": "EOS CLI" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "BGP" - }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the VLAN interface in the final EOS configuration.\n", - "title": "Raw EOS CLI" - }, - "structured_config": { - "type": "object", - "description": "Custom structured config added under vlan_interfaces. for eos_cli_config_gen.", "title": "Structured Config" } }, @@ -6385,13 +18034,13 @@ "title": "Access List Name" } }, - "required": [ - "rp" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } + }, + "required": [ + "rp" + ] }, "title": "Underlay Multicast RPs" }, diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml index 6e89000da90..39650e1bbb5 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml @@ -198,8 +198,11 @@ keys: default: false structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/ mlag_ipv4_underlay_peer: type: dict keys: @@ -215,8 +218,11 @@ keys: default: false structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/ evpn_overlay_peers: type: dict keys: @@ -232,8 +238,11 @@ keys: default: true structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/ evpn_overlay_core: type: dict keys: @@ -249,8 +258,11 @@ keys: default: true structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/ mpls_overlay_peers: type: dict keys: @@ -266,8 +278,11 @@ keys: default: true structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/ rr_overlay_peers: type: dict keys: @@ -283,8 +298,11 @@ keys: default: true structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/ ipvpn_gateway_peers: type: dict keys: @@ -300,8 +318,11 @@ keys: default: true structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/ IPv4_UNDERLAY_PEERS: type: dict deprecation: @@ -585,7 +606,6 @@ keys: keys: node_type: type: str - required: true description: Resulting node type when regex matches. match_hostnames: type: list @@ -2495,7 +2515,6 @@ keys: type: dict keys: rp: - required: true type: str description: RP IPv4 address. nodes: @@ -3222,16 +3241,22 @@ $defs: the final EOS configuration. structured_config: type: dict - description: Custom structured config added under port_channel_interfaces. + description: Custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/port_channel_interfaces/items/ raw_eos_cli: type: str description: EOS CLI rendered directly on the ethernet interface in the final EOS configuration. structured_config: type: dict - description: Custom structured config added under ethernet_interfaces. + description: Custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/ethernet_interfaces/items/ connected_endpoints: type: list primary_key: name @@ -3252,7 +3277,6 @@ $defs: name: type: str description: Endpoint name will be used in the switchport description. - required: true rack: type: str description: Rack is used for documentation purposes only. @@ -3325,7 +3349,6 @@ $defs: keys: name: type: str - required: true description: P2P pool name. ipv4_pool: type: str @@ -3349,7 +3372,6 @@ $defs: keys: name: type: str - required: true description: P2P profile name. Any variable supported under p2p_links can be inherited from a profile. p2p_links: @@ -3376,7 +3398,6 @@ $defs: keys: name: type: str - required: true description: 'Specify a tenant name. Tenant provide a construct to group L3 VRFs and L2 VLANs. @@ -4150,10 +4171,11 @@ $defs: type: bool structured_config: type: dict - description: 'Custom structured config added under ethernet_interfaces. + description: Custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen. - - ' + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/ethernet_interfaces/items/ raw_eos_cli: type: str description: 'EOS CLI rendered directly on the Ethernet interface @@ -4401,10 +4423,11 @@ $defs: ' structured_config: type: dict - description: 'Custom structured config added under router_bgp.vrfs. + description: Custom structured config added under router_bgp.vrfs.[name=] for eos_cli_config_gen. - - ' + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/router_bgp/keys/vrfs/items/ bgp_peer_groups: documentation_options: table: network-services-vrfs-bgp-settings @@ -4469,6 +4492,9 @@ $defs: structured_config: type: dict description: Custom structured config for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/ l2vlans: documentation_options: table: network-services-l2vlans-settings @@ -4611,12 +4637,15 @@ $defs: keys: structured_config: type: dict - description: 'Structured configuration for eos_cli_config_gen - rendered on router_bgp.vlans. + description: 'Custom structured config added under router_bgp.vlans.[id=] + for eos_cli_config_gen. This configuration will not be applied to vlan aware bundles. ' + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/router_bgp/keys/vlans/items/ raw_eos_cli: type: str description: 'EOS cli commands rendered on router_bgp.vlans. @@ -4883,8 +4912,10 @@ $defs: structured_config: documentation_options: table: node-type-common-configuration + hide_keys: true description: Custom structured config for eos_cli_config_gen. type: dict + $ref: eos_cli_config_gen#/ uplink_ipv4_pool: documentation_options: table: node-type-uplink-configuration @@ -5014,30 +5045,36 @@ $defs: uplink_structured_config: documentation_options: table: node-type-uplink-configuration + hide_keys: true type: dict description: 'Custom structured config applied to "uplink_interfaces", and "uplink_switch_interfaces". - When uplink_type == "p2p", custom structured config added under ethernet_interfaces. + When uplink_type == "p2p", custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen overrides the settings on the ethernet interface level. When uplink_type == "port-channel", custom structured config added under - port_channel_interfaces. for eos_cli_config_gen overrides + port_channel_interfaces.[name=] for eos_cli_config_gen overrides the settings on the port-channel interface level. "uplink_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level. + Note! The content of this dictionary is _not_ validated by the schema, + since it can be either ethernet_interfaces or port_channel_interfaces. + ' mlag_port_channel_structured_config: + $ref: eos_cli_config_gen#/keys/port_channel_interfaces/items/ documentation_options: table: node-type-l2-mlag-configuration + hide_keys: true type: dict description: 'Custom structured config applied to MLAG peer link port-channel id. - Added under port_channel_interfaces. for eos_cli_config_gen. + Added under port_channel_interfaces.[name=] for eos_cli_config_gen. Overrides the settings on the port-channel interface level. @@ -5046,13 +5083,15 @@ $defs: ' mlag_peer_vlan_structured_config: + $ref: eos_cli_config_gen#/keys/vlan_interfaces/items/ documentation_options: table: node-type-l2-mlag-configuration + hide_keys: true type: dict description: 'Custom structured config applied to MLAG Peer Link (control link) SVI interface id. - Added under vlan_interfaces. for eos_cli_config_gen. + Added under vlan_interfaces.[name=] for eos_cli_config_gen. Overrides the settings on the vlan interface level. @@ -5061,13 +5100,15 @@ $defs: ' mlag_peer_l3_vlan_structured_config: + $ref: eos_cli_config_gen#/keys/vlan_interfaces/items/ documentation_options: table: node-type-l2-mlag-configuration + hide_keys: true type: dict description: 'Custom structured config applied to MLAG underlay L3 peering SVI interface id. - Added under vlan_interfaces. for eos_cli_config_gen. + Added under vlan_interfaces.[name=] for eos_cli_config_gen. Overrides the settings on the vlan interface level. @@ -5971,7 +6012,6 @@ $defs: keys: group: type: str - required: true description: 'The Node Group Name is used for MLAG domain unless set with ''mlag_domain_id''. @@ -5995,7 +6035,6 @@ $defs: keys: name: type: str - required: true description: The Node Name is used as "hostname". p2p_links: type: list @@ -6148,7 +6187,6 @@ $defs: keys: node: type: str - required: true interfaces: type: list description: List of node interfaces. Ex.- [ 'node1 interface1', @@ -6161,7 +6199,12 @@ $defs: the final EOS configuration. structured_config: type: dict - description: Custom structured config for interfaces + documentation_options: + hide_keys: true + description: 'Custom structured config for interfaces + + Note! The content of this dictionary is _not_ validated by the schema, + since it can be either ethernet_interfaces or port_channel_interfaces.' svi: type: dict $ref: '#/$defs/svi_settings' @@ -6488,11 +6531,14 @@ $defs: structured_config: type: dict description: 'Structured configuration and EOS CLI commands rendered on - router_bgp.vlans. + router_bgp.vlans.[id=] This configuration will not be applied to vlan aware bundles ' + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/router_bgp/keys/vlans/items/ raw_eos_cli: type: str description: 'EOS CLI rendered directly on the Router BGP, VLAN definition @@ -6507,5 +6553,10 @@ $defs: ' structured_config: type: dict - description: Custom structured config added under vlan_interfaces. + description: 'Custom structured config added under vlan_interfaces.[name=] for eos_cli_config_gen. + + ' + documentation_options: + hide_keys: true + $ref: eos_cli_config_gen#/keys/vlan_interfaces/items/ diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/bgp_peer_groups.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/bgp_peer_groups.schema.yml index 5059843fa73..4ac047210fd 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/bgp_peer_groups.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/bgp_peer_groups.schema.yml @@ -26,7 +26,10 @@ keys: default: False structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/" mlag_ipv4_underlay_peer: type: dict keys: @@ -42,7 +45,10 @@ keys: default: False structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/" evpn_overlay_peers: type: dict keys: @@ -58,7 +64,10 @@ keys: default: True structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/" evpn_overlay_core: type: dict keys: @@ -74,7 +83,10 @@ keys: default: True structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/" mpls_overlay_peers: type: dict keys: @@ -90,7 +102,10 @@ keys: default: True structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/" rr_overlay_peers: type: dict keys: @@ -106,7 +121,10 @@ keys: default: True structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/" ipvpn_gateway_peers: type: dict keys: @@ -122,7 +140,10 @@ keys: default: True structured_config: type: dict - description: Custom structured config added under router_bgp.peer_groups. for eos_cli_config_gen. + description: Custom structured config added under router_bgp.peer_groups.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/" IPv4_UNDERLAY_PEERS: type: dict deprecation: diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/default_node_types.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/default_node_types.schema.yml index 75cc79ca8ae..37f9fc0e93c 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/default_node_types.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/default_node_types.schema.yml @@ -12,7 +12,6 @@ keys: keys: node_type: type: str - required: true description: Resulting node type when regex matches. match_hostnames: type: list diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_adapter_config.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_adapter_config.schema.yml index d4920e78b53..c20f948c1c4 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_adapter_config.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_adapter_config.schema.yml @@ -521,10 +521,16 @@ $defs: description: EOS CLI rendered directly on the port-channel interface in the final EOS configuration. structured_config: type: dict - description: Custom structured config added under port_channel_interfaces. for eos_cli_config_gen. + description: Custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/port_channel_interfaces/items/" raw_eos_cli: type: str description: EOS CLI rendered directly on the ethernet interface in the final EOS configuration. structured_config: type: dict - description: Custom structured config added under ethernet_interfaces. for eos_cli_config_gen. + description: Custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/ethernet_interfaces/items/" diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_connected_endpoints.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_connected_endpoints.schema.yml index 1cfdec9bf55..46b19b61036 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_connected_endpoints.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_connected_endpoints.schema.yml @@ -18,7 +18,6 @@ $defs: name: type: str description: Endpoint name will be used in the switchport description. - required: true rack: type: str description: Rack is used for documentation purposes only. diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge.schema.yml index 031162b758e..7a2fda4a6f3 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge.schema.yml @@ -17,7 +17,6 @@ $defs: keys: name: type: str - required: true description: P2P pool name. ipv4_pool: type: str @@ -41,7 +40,6 @@ $defs: keys: name: type: str - required: true description: P2P profile name. Any variable supported under p2p_links can be inherited from a profile. p2p_links: type: list diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_network_services.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_network_services.schema.yml index 01ebcb4e412..af96e486288 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_network_services.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_network_services.schema.yml @@ -15,7 +15,6 @@ $defs: keys: name: type: str - required: true description: | Specify a tenant name. Tenant provide a construct to group L3 VRFs and L2 VLANs. @@ -623,8 +622,10 @@ $defs: type: bool structured_config: type: dict - description: | - Custom structured config added under ethernet_interfaces. for eos_cli_config_gen. + description: Custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/ethernet_interfaces/items/" raw_eos_cli: type: str description: | @@ -834,8 +835,10 @@ $defs: EOS CLI rendered directly on the Router BGP, VRF definition in the final EOS configuration. structured_config: type: dict - description: | - Custom structured config added under router_bgp.vrfs. for eos_cli_config_gen. + description: Custom structured config added under router_bgp.vrfs.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/router_bgp/keys/vrfs/items/" bgp_peer_groups: documentation_options: table: network-services-vrfs-bgp-settings @@ -887,6 +890,9 @@ $defs: structured_config: type: dict description: Custom structured config for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/" l2vlans: documentation_options: table: network-services-l2vlans-settings @@ -1009,8 +1015,11 @@ $defs: structured_config: type: dict description: | - Structured configuration for eos_cli_config_gen rendered on router_bgp.vlans. + Custom structured config added under router_bgp.vlans.[id=] for eos_cli_config_gen. This configuration will not be applied to vlan aware bundles. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/router_bgp/keys/vlans/items/" raw_eos_cli: type: str description: | diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type.schema.yml index 6a5edf90e93..8a0311e7ba5 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type.schema.yml @@ -150,8 +150,10 @@ $defs: structured_config: documentation_options: table: node-type-common-configuration + hide_keys: true description: Custom structured config for eos_cli_config_gen. type: dict + $ref: "eos_cli_config_gen#/" uplink_ipv4_pool: documentation_options: table: node-type-uplink-configuration @@ -254,38 +256,48 @@ $defs: uplink_structured_config: documentation_options: table: node-type-uplink-configuration + hide_keys: true #TODO: Add deprecation warning when introducing new keys for specific configuration. type: dict description: | Custom structured config applied to "uplink_interfaces", and "uplink_switch_interfaces". - When uplink_type == "p2p", custom structured config added under ethernet_interfaces. for eos_cli_config_gen overrides the settings on the ethernet interface level. - When uplink_type == "port-channel", custom structured config added under port_channel_interfaces. for eos_cli_config_gen overrides the settings on the port-channel interface level. + When uplink_type == "p2p", custom structured config added under ethernet_interfaces.[name=] for eos_cli_config_gen overrides the settings on the ethernet interface level. + When uplink_type == "port-channel", custom structured config added under port_channel_interfaces.[name=] for eos_cli_config_gen overrides the settings on the port-channel interface level. "uplink_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level. + Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces. + # Schema ref not implemented since we do not know which of the schemas to look at. + # $ref: "eos_cli_config_gen#/keys/ethernet_interfaces/items/" mlag_port_channel_structured_config: + $ref: "eos_cli_config_gen#/keys/port_channel_interfaces/items/" documentation_options: table: node-type-l2-mlag-configuration + hide_keys: true type: dict description: | Custom structured config applied to MLAG peer link port-channel id. - Added under port_channel_interfaces. for eos_cli_config_gen. + Added under port_channel_interfaces.[name=] for eos_cli_config_gen. Overrides the settings on the port-channel interface level. "mlag_port_channel_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level. mlag_peer_vlan_structured_config: + $ref: "eos_cli_config_gen#/keys/vlan_interfaces/items/" documentation_options: table: node-type-l2-mlag-configuration + hide_keys: true type: dict description: | Custom structured config applied to MLAG Peer Link (control link) SVI interface id. - Added under vlan_interfaces. for eos_cli_config_gen. + Added under vlan_interfaces.[name=] for eos_cli_config_gen. Overrides the settings on the vlan interface level. "mlag_peer_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level. mlag_peer_l3_vlan_structured_config: + $ref: "eos_cli_config_gen#/keys/vlan_interfaces/items/" documentation_options: table: node-type-l2-mlag-configuration + hide_keys: true type: dict description: | Custom structured config applied to MLAG underlay L3 peering SVI interface id. - Added under vlan_interfaces. for eos_cli_config_gen. + Added under vlan_interfaces.[name=] for eos_cli_config_gen. Overrides the settings on the vlan interface level. "mlag_peer_l3_vlan_structured_config" is applied after "structured_config", so it can override "structured_config" defined on node-level. short_esi: @@ -1032,7 +1044,6 @@ $defs: keys: group: type: str - required: true description: | The Node Group Name is used for MLAG domain unless set with 'mlag_domain_id'. The Node Group Name is also used for peer description on downstream switches' uplinks. @@ -1052,5 +1063,4 @@ $defs: keys: name: type: str - required: true description: The Node Name is used as "hostname". diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_p2p_links.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_p2p_links.schema.yml index 1640188b996..0ab3fbe7e3a 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_p2p_links.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_p2p_links.schema.yml @@ -140,7 +140,6 @@ $defs: keys: node: type: str - required: true interfaces: type: list description: List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ]. @@ -151,4 +150,10 @@ $defs: description: EOS CLI rendered directly on the point-to-point interface in the final EOS configuration. structured_config: type: dict - description: Custom structured config for interfaces + documentation_options: + hide_keys: true + description: |- + Custom structured config for interfaces + Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces. + # Schema ref not implemented since we do not know which of the schemas to look at. + # $ref: "eos_cli_config_gen#/keys/ethernet_interfaces/items/" diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_svi_settings.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_svi_settings.schema.yml index d4e97fe51aa..e6bbec5619a 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_svi_settings.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_svi_settings.schema.yml @@ -261,8 +261,11 @@ $defs: structured_config: type: dict description: | - Structured configuration and EOS CLI commands rendered on router_bgp.vlans. + Structured configuration and EOS CLI commands rendered on router_bgp.vlans.[id=] This configuration will not be applied to vlan aware bundles + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/router_bgp/keys/vlans/items/" raw_eos_cli: type: str description: | @@ -274,4 +277,7 @@ $defs: structured_config: type: dict description: | - Custom structured config added under vlan_interfaces. for eos_cli_config_gen. + Custom structured config added under vlan_interfaces.[name=] for eos_cli_config_gen. + documentation_options: + hide_keys: true + $ref: "eos_cli_config_gen#/keys/vlan_interfaces/items/" diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/underlay_multicast_rps.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/underlay_multicast_rps.schema.yml index 336f4ac5e63..1a48c536758 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/underlay_multicast_rps.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/underlay_multicast_rps.schema.yml @@ -19,7 +19,6 @@ keys: type: dict keys: rp: - required: true type: str description: RP IPv4 address. nodes: diff --git a/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/merge/access_lists.schema.yml b/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/merge/access_lists.schema.yml index e8037b73560..eebc269522b 100644 --- a/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/merge/access_lists.schema.yml +++ b/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/merge/access_lists.schema.yml @@ -22,7 +22,6 @@ keys: keys: name: type: str - required: true display_name: access_list_name counters_per_entry: type: bool @@ -37,7 +36,6 @@ keys: keys: sequence: type: int - required: true display_name: sequence_id convert_types: - str diff --git a/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/access_lists.schema.yml b/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/access_lists.schema.yml index e8037b73560..eebc269522b 100644 --- a/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/access_lists.schema.yml +++ b/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/access_lists.schema.yml @@ -22,7 +22,6 @@ keys: keys: name: type: str - required: true display_name: access_list_name counters_per_entry: type: bool @@ -37,7 +36,6 @@ keys: keys: sequence: type: int - required: true display_name: sequence_id convert_types: - str diff --git a/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/combined.schema.yml b/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/combined.schema.yml index 55667b08fe7..7e60f0855fe 100644 --- a/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/combined.schema.yml +++ b/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/combined.schema.yml @@ -30,7 +30,6 @@ keys: keys: name: type: str - required: true display_name: access_list_name counters_per_entry: type: bool @@ -45,7 +44,6 @@ keys: keys: sequence: type: int - required: true display_name: sequence_id convert_types: - str @@ -64,7 +62,6 @@ keys: keys: name: type: str - required: true display_name: ipv6_access_list_name counters_per_entry: type: bool @@ -81,7 +78,6 @@ keys: type: int convert_types: - str - required: true display_name: sequence_id action: type: str diff --git a/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/ipv6_standard_access_lists.schema.yml b/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/ipv6_standard_access_lists.schema.yml index 7d92f31a5bf..3fde60e4490 100644 --- a/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/ipv6_standard_access_lists.schema.yml +++ b/ansible_collections/arista/avd/tests/unit/plugins/plugin_utils/schema/ipv6_standard_access_lists.schema.yml @@ -12,7 +12,6 @@ keys: keys: name: type: str - required: true display_name: ipv6_access_list_name counters_per_entry: type: bool @@ -29,7 +28,6 @@ keys: type: int convert_types: - str - required: true display_name: sequence_id action: type: str