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 a6f9309e835..12ee239bad7 100644 --- a/ansible_collections/arista/avd/plugins/plugin_utils/schema/avdtodocumentationschemaconverter.py +++ b/ansible_collections/arista/avd/plugins/plugin_utils/schema/avdtodocumentationschemaconverter.py @@ -304,10 +304,10 @@ def items(self, schema: dict, indentation: int, var_path: list, table: str): def required(self, schema: dict, var_name: str, parent_schema: dict): output = None - if schema.get("required"): + if parent_schema and parent_schema.get("primary_key") == var_name: + output = "Required, Unique" + elif schema.get("required"): output = "Required" - if parent_schema and parent_schema.get("primary_key") == var_name: - output = "Required, Unique" return output def default(self, schema: dict): diff --git a/ansible_collections/arista/avd/plugins/plugin_utils/schema/avdtojsonschemaconverter.py b/ansible_collections/arista/avd/plugins/plugin_utils/schema/avdtojsonschemaconverter.py index 24133e8e9b6..87630902e39 100644 --- a/ansible_collections/arista/avd/plugins/plugin_utils/schema/avdtojsonschemaconverter.py +++ b/ansible_collections/arista/avd/plugins/plugin_utils/schema/avdtojsonschemaconverter.py @@ -137,10 +137,13 @@ def convert_default(self, default, parent_schema: dict) -> dict: return {"default": default} def convert_items(self, items: dict, parent_schema: dict) -> dict: - output = {"items": {}} - output["items"] = self.convert_schema(items) - if (primary_key := parent_schema.get("primary_key")) and output["items"]["type"] == "dict": - output["items"]["keys"][primary_key]["required"] = True + output = { + "items": self.convert_schema(items), + } + if (primary_key := parent_schema.get("primary_key")) and items.get("type") == "dict": + output["items"].setdefault("required", []) + if primary_key not in output["items"]["required"]: + output["items"]["required"].append(primary_key) return output def convert_display_name(self, display_name: str, parent_schema: dict) -> dict: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/Input Variables.md b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/Input Variables.md index 404e3d93d62..e0bd3c5698b 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/Input Variables.md +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/Input Variables.md @@ -364,11 +364,11 @@ boot: | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [class_maps](## "class_maps") | Dictionary | | | | | | [  pbr](## "class_maps.pbr") | List, items: Dictionary | | | | | -| [    - name](## "class_maps.pbr.[].name") | String | | | | Class-Map Name | +| [    - name](## "class_maps.pbr.[].name") | String | Required, Unique | | | Class-Map Name | | [      ip](## "class_maps.pbr.[].ip") | Dictionary | | | | | | [        access_group](## "class_maps.pbr.[].ip.access_group") | String | | | | Standard Access-List Name | | [  qos](## "class_maps.qos") | List, items: Dictionary | | | | | -| [    - name](## "class_maps.qos.[].name") | String | | | | Class-Map Name | +| [    - name](## "class_maps.qos.[].name") | String | Required, Unique | | | Class-Map Name | | [      vlan](## "class_maps.qos.[].vlan") | Integer | | | | VLAN value(s) or range(s) of VLAN values | | [      cos](## "class_maps.qos.[].cos") | Integer | | | | CoS value(s) or range(s) of CoS values | | [      ip](## "class_maps.qos.[].ip") | Dictionary | | | | | @@ -798,7 +798,7 @@ errdisable: | Variable | Type | Required | Default | Value Restrictions | Description | | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [event_handlers](## "event_handlers") | List, items: Dictionary | | | | | -| [  - name](## "event_handlers.[].name") | String | | | | Event Handler Name | +| [  - name](## "event_handlers.[].name") | String | Required, Unique | | | Event Handler Name | | [    action_type](## "event_handlers.[].action_type") | String | | | Valid Values:
- bash
- increment
- log | | | [    action](## "event_handlers.[].action") | String | | | | Command to execute
| | [    delay](## "event_handlers.[].delay") | Integer | | | | Event-handler delay in seconds
| @@ -1584,7 +1584,7 @@ lacp: | [  vrf](## "lldp.vrf") | String | | | | | | [  receive_packet_tagged_drop](## "lldp.receive_packet_tagged_drop") | String | | | | | | [  tlvs](## "lldp.tlvs") | List, items: Dictionary | | | | | -| [    - name](## "lldp.tlvs.[].name") | String | | | Valid Values:
- link-aggregation
- management-address
- max-frame-size
- med
- port-description
- port-vlan
- power-via-mdi
- system-capabilities
- system-description
- system-name
- vlan-name | | +| [    - name](## "lldp.tlvs.[].name") | String | Required, Unique | | Valid Values:
- link-aggregation
- management-address
- max-frame-size
- med
- port-description
- port-vlan
- power-via-mdi
- system-capabilities
- system-description
- system-name
- vlan-name | | | [      transmit](## "lldp.tlvs.[].transmit") | Boolean | | | | | | [  run](## "lldp.run") | Boolean | | | | | @@ -1753,7 +1753,7 @@ mac_access_lists: | [    - name](## "mac_security.profiles.[].name") | String | Required, Unique | | | Profile-Name | | [      cipher](## "mac_security.profiles.[].cipher") | String | | | Valid Values:
- aes128-gcm
- aes128-gcm-xpn
- aes256-gcm
- aes256-gcm-xpn | | | [      connection_keys](## "mac_security.profiles.[].connection_keys") | List, items: Dictionary | | | | | -| [        - id](## "mac_security.profiles.[].connection_keys.[].id") | String | | | | | +| [        - id](## "mac_security.profiles.[].connection_keys.[].id") | String | Required, Unique | | | | | [          encrypted_key](## "mac_security.profiles.[].connection_keys.[].encrypted_key") | String | | | | | | [          fallback](## "mac_security.profiles.[].connection_keys.[].fallback") | Boolean | | | | | | [      mka](## "mac_security.profiles.[].mka") | Dictionary | | | | | @@ -2480,9 +2480,9 @@ platform: | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [policy_maps](## "policy_maps") | Dictionary | | | | | | [  pbr](## "policy_maps.pbr") | List, items: Dictionary | | | | PBR Policy-Maps | -| [    - name](## "policy_maps.pbr.[].name") | String | | | | Policy-Map Name | +| [    - name](## "policy_maps.pbr.[].name") | String | Required, Unique | | | Policy-Map Name | | [      classes](## "policy_maps.pbr.[].classes") | List, items: Dictionary | | | | | -| [        - name](## "policy_maps.pbr.[].classes.[].name") | String | | | | Class Name | +| [        - name](## "policy_maps.pbr.[].classes.[].name") | String | Required, Unique | | | Class Name | | [          index](## "policy_maps.pbr.[].classes.[].index") | Integer | | | | | | [          drop](## "policy_maps.pbr.[].classes.[].drop") | Boolean | | | | 'drop' and 'set' are mutually exclusive | | [          set](## "policy_maps.pbr.[].classes.[].set") | Dictionary | | | | Set Nexthop
'drop' and 'set' are mutually exclusive
| @@ -2490,9 +2490,9 @@ platform: | [              ip_address](## "policy_maps.pbr.[].classes.[].set.nexthop.ip_address") | String | | | | IPv4 or IPv6 Address | | [              recursive](## "policy_maps.pbr.[].classes.[].set.nexthop.recursive") | Boolean | | | | | | [  qos](## "policy_maps.qos") | List, items: Dictionary | | | | QOS Policy-Maps | -| [    - name](## "policy_maps.qos.[].name") | String | | | | Policy-Map Name | +| [    - name](## "policy_maps.qos.[].name") | String | Required, Unique | | | Policy-Map Name | | [      classes](## "policy_maps.qos.[].classes") | List, items: Dictionary | | | | | -| [        - name](## "policy_maps.qos.[].classes.[].name") | String | | | | Class Name | +| [        - name](## "policy_maps.qos.[].classes.[].name") | String | Required, Unique | | | Class Name | | [          set](## "policy_maps.qos.[].classes.[].set") | Dictionary | | | | | | [            cos](## "policy_maps.qos.[].classes.[].set.cos") | Integer | | | | | | [            dscp](## "policy_maps.qos.[].classes.[].set.dscp") | String | | | | | @@ -3108,7 +3108,7 @@ router_multicast: | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [router_ospf](## "router_ospf") | Dictionary | | | | | | [  process_ids](## "router_ospf.process_ids") | List, items: Dictionary | | | | | -| [    - id](## "router_ospf.process_ids.[].id") | Integer | | | | OSPF Process ID | +| [    - id](## "router_ospf.process_ids.[].id") | Integer | Required, Unique | | | OSPF Process ID | | [      vrf](## "router_ospf.process_ids.[].vrf") | String | | | | VRF Name for OSPF Process | | [      passive_interface_default](## "router_ospf.process_ids.[].passive_interface_default") | Boolean | | | | | | [      router_id](## "router_ospf.process_ids.[].router_id") | String | | | | IPv4 Address | @@ -3118,7 +3118,7 @@ router_multicast: | [        intra_area](## "router_ospf.process_ids.[].distance.intra_area") | Integer | | | Min: 1
Max: 255 | | | [      log_adjacency_changes_detail](## "router_ospf.process_ids.[].log_adjacency_changes_detail") | Boolean | | | | | | [      network_prefixes](## "router_ospf.process_ids.[].network_prefixes") | List, items: Dictionary | | | | | -| [        - ipv4_prefix](## "router_ospf.process_ids.[].network_prefixes.[].ipv4_prefix") | String | | | | | +| [        - ipv4_prefix](## "router_ospf.process_ids.[].network_prefixes.[].ipv4_prefix") | String | Required, Unique | | | | | [          area](## "router_ospf.process_ids.[].network_prefixes.[].area") | String | | | | | | [      bfd_enable](## "router_ospf.process_ids.[].bfd_enable") | Boolean | | | | | | [      bfd_adjacency_state_any](## "router_ospf.process_ids.[].bfd_adjacency_state_any") | Boolean | | | | | @@ -3141,7 +3141,7 @@ router_multicast: | [      default_information_originate](## "router_ospf.process_ids.[].default_information_originate") | Dictionary | | | | | | [        always](## "router_ospf.process_ids.[].default_information_originate.always") | Boolean | | | | | | [      summary_addresses](## "router_ospf.process_ids.[].summary_addresses") | List, items: Dictionary | | | | | -| [        - prefix](## "router_ospf.process_ids.[].summary_addresses.[].prefix") | String | | | | Summary Prefix Address | +| [        - prefix](## "router_ospf.process_ids.[].summary_addresses.[].prefix") | String | Required, Unique | | | Summary Prefix Address | | [          tag](## "router_ospf.process_ids.[].summary_addresses.[].tag") | Integer | | | | | | [          attribute_map](## "router_ospf.process_ids.[].summary_addresses.[].attribute_map") | String | | | | | | [          not_advertise](## "router_ospf.process_ids.[].summary_addresses.[].not_advertise") | Boolean | | | | | @@ -3154,7 +3154,7 @@ router_multicast: | [          route_map](## "router_ospf.process_ids.[].redistribute.bgp.route_map") | String | | | | Route Map Name | | [      auto_cost_reference_bandwidth](## "router_ospf.process_ids.[].auto_cost_reference_bandwidth") | Integer | | | | Bandwidth in mbps | | [      areas](## "router_ospf.process_ids.[].areas") | List, items: Dictionary | | | | | -| [        - id](## "router_ospf.process_ids.[].areas.[].id") | String | | | | | +| [        - id](## "router_ospf.process_ids.[].areas.[].id") | String | Required, Unique | | | | | [          filter](## "router_ospf.process_ids.[].areas.[].filter") | Dictionary | | | | | | [            networks](## "router_ospf.process_ids.[].areas.[].filter.networks") | List, items: String | | | | | | [              - <str>](## "router_ospf.process_ids.[].areas.[].filter.networks.[].<str>") | String | | | | IPv4 Prefix | @@ -3340,13 +3340,13 @@ service_routing_protocols_model: | [  sample](## "sflow.sample") | Integer | | | | | | [  dangerous](## "sflow.dangerous") | Boolean | | | | | | [  vrfs](## "sflow.vrfs") | List, items: Dictionary | | | | | -| [    - name](## "sflow.vrfs.[].name") | String | | | | | +| [    - name](## "sflow.vrfs.[].name") | String | Required, Unique | | | | | [      destinations](## "sflow.vrfs.[].destinations") | List, items: Dictionary | | | | | -| [        - destination](## "sflow.vrfs.[].destinations.[].destination") | String | | | | Sflow Destination IP | +| [        - destination](## "sflow.vrfs.[].destinations.[].destination") | String | Required, Unique | | | Sflow Destination IP | | [          port](## "sflow.vrfs.[].destinations.[].port") | Integer | | | | Port Number | | [      source_interface](## "sflow.vrfs.[].source_interface") | String | | | | | | [  destinations](## "sflow.destinations") | List, items: Dictionary | | | | | -| [    - destination](## "sflow.destinations.[].destination") | String | | | | Sflow Destination IP | +| [    - destination](## "sflow.destinations.[].destination") | String | Required, Unique | | | Sflow Destination IP | | [      port](## "sflow.destinations.[].port") | Integer | | | | Port Number | | [  source_interface](## "sflow.source_interface") | String | | | | | | [  interface](## "sflow.interface") | Dictionary | | | | | @@ -3357,7 +3357,7 @@ service_routing_protocols_model: | [    enabled](## "sflow.hardware_acceleration.enabled") | Boolean | | | | | | [    sample](## "sflow.hardware_acceleration.sample") | Integer | | | | | | [    modules](## "sflow.hardware_acceleration.modules") | List, items: Dictionary | | | | | -| [      - name](## "sflow.hardware_acceleration.modules.[].name") | String | | | | | +| [      - name](## "sflow.hardware_acceleration.modules.[].name") | String | Required, Unique | | | | | [        enabled](## "sflow.hardware_acceleration.modules.[].enabled") | Boolean | | True | | | ### YAML @@ -3410,14 +3410,14 @@ sflow: | [      name](## "spanning_tree.mst.configuration.name") | String | | | | | | [      revision](## "spanning_tree.mst.configuration.revision") | Integer | | | | 0-65535 | | [      instances](## "spanning_tree.mst.configuration.instances") | List, items: Dictionary | | | | | -| [        - id](## "spanning_tree.mst.configuration.instances.[].id") | Integer | | | | Instance ID | +| [        - id](## "spanning_tree.mst.configuration.instances.[].id") | Integer | Required, Unique | | | Instance ID | | [          vlans](## "spanning_tree.mst.configuration.instances.[].vlans") | String | | | | "< vlan_id >, < vlan_id >-< vlan_id >"
Example: 15,16,17,18
| | [  mst_instances](## "spanning_tree.mst_instances") | List, items: Dictionary | | | | | -| [    - id](## "spanning_tree.mst_instances.[].id") | String | | | | Instance ID | +| [    - id](## "spanning_tree.mst_instances.[].id") | String | Required, Unique | | | Instance ID | | [      priority](## "spanning_tree.mst_instances.[].priority") | Integer | | | | | | [  no_spanning_tree_vlan](## "spanning_tree.no_spanning_tree_vlan") | String | | | | "< vlan_id >, < vlan_id >-< vlan_id >"
Example: 105,202,505-506
| | [  rapid_pvst_instances](## "spanning_tree.rapid_pvst_instances") | List, items: Dictionary | | | | | -| [    - id](## "spanning_tree.rapid_pvst_instances.[].id") | String | | | | "< vlan_id >, < vlan_id >-< vlan_id >"
Example: 105,202,505-506
| +| [    - id](## "spanning_tree.rapid_pvst_instances.[].id") | String | Required, Unique | | | "< vlan_id >, < vlan_id >-< vlan_id >"
Example: 105,202,505-506
| | [      priority](## "spanning_tree.rapid_pvst_instances.[].priority") | Integer | | | | | ### YAML @@ -3540,10 +3540,10 @@ switchport_default: | [      ipv4](## "system.control_plane.tcp_mss.ipv4") | Integer | | | | Segment size | | [      ipv6](## "system.control_plane.tcp_mss.ipv6") | Integer | | | | Segment size | | [    ipv4_access_groups](## "system.control_plane.ipv4_access_groups") | List, items: Dictionary | | | | | -| [      - acl_name](## "system.control_plane.ipv4_access_groups.[].acl_name") | String | | | | | +| [      - acl_name](## "system.control_plane.ipv4_access_groups.[].acl_name") | String | Required, Unique | | | | | [        vrf](## "system.control_plane.ipv4_access_groups.[].vrf") | String | | | | | | [    ipv6_access_groups](## "system.control_plane.ipv6_access_groups") | List, items: Dictionary | | | | | -| [      - acl_name](## "system.control_plane.ipv6_access_groups.[].acl_name") | String | | | | | +| [      - acl_name](## "system.control_plane.ipv6_access_groups.[].acl_name") | String | Required, Unique | | | | | [        vrf](## "system.control_plane.ipv6_access_groups.[].vrf") | String | | | | | ### YAML @@ -3713,20 +3713,20 @@ trackers: | [    counter_per_interface](## "traffic_policies.options.counter_per_interface") | Boolean | | | | | | [  field_sets](## "traffic_policies.field_sets") | Dictionary | | | | | | [    ipv4](## "traffic_policies.field_sets.ipv4") | List, items: Dictionary | | | | | -| [      - name](## "traffic_policies.field_sets.ipv4.[].name") | String | | | | IPv4 Prefix Field Set Name | +| [      - name](## "traffic_policies.field_sets.ipv4.[].name") | String | Required, Unique | | | IPv4 Prefix Field Set Name | | [        prefixes](## "traffic_policies.field_sets.ipv4.[].prefixes") | List, items: String | | | | | | [          - <str>](## "traffic_policies.field_sets.ipv4.[].prefixes.[].<str>") | String | | | | IPv4 Prefix | | [    ipv6](## "traffic_policies.field_sets.ipv6") | List, items: Dictionary | | | | | -| [      - name](## "traffic_policies.field_sets.ipv6.[].name") | String | | | | IPv6 Prefix Field Set Name | +| [      - name](## "traffic_policies.field_sets.ipv6.[].name") | String | Required, Unique | | | IPv6 Prefix Field Set Name | | [        prefixes](## "traffic_policies.field_sets.ipv6.[].prefixes") | List, items: String | | | | | | [          - <str>](## "traffic_policies.field_sets.ipv6.[].prefixes.[].<str>") | String | | | | IPv6 Prefix | | [    ports](## "traffic_policies.field_sets.ports") | List, items: Dictionary | | | | | -| [      - name](## "traffic_policies.field_sets.ports.[].name") | String | | | | L4 Port Field Set Name | +| [      - name](## "traffic_policies.field_sets.ports.[].name") | String | Required, Unique | | | L4 Port Field Set Name | | [        port_range](## "traffic_policies.field_sets.ports.[].port_range") | String | | | | Example: '10,20,80,440-450' | | [  policies](## "traffic_policies.policies") | List, items: Dictionary | | | | | -| [    - name](## "traffic_policies.policies.[].name") | String | | | | Traffic Policy Name | +| [    - name](## "traffic_policies.policies.[].name") | String | Required, Unique | | | Traffic Policy Name | | [      matches](## "traffic_policies.policies.[].matches") | List, items: Dictionary | | | | | -| [        - name](## "traffic_policies.policies.[].matches.[].name") | String | | | | Traffic Policy Item | +| [        - name](## "traffic_policies.policies.[].matches.[].name") | String | Required, Unique | | | Traffic Policy Item | | [          type](## "traffic_policies.policies.[].matches.[].type") | String | | | Valid Values:
- ipv4
- ipv6 | | | [          source](## "traffic_policies.policies.[].matches.[].source") | Dictionary | | | | | | [            prefixes](## "traffic_policies.policies.[].matches.[].source.prefixes") | List, items: String | | | | | @@ -3742,7 +3742,7 @@ trackers: | [          fragment](## "traffic_policies.policies.[].matches.[].fragment") | Dictionary | | | | The 'fragment' command is not supported when 'source port'
or 'destination port' command is configured
| | [            offset](## "traffic_policies.policies.[].matches.[].fragment.offset") | String | | | | Fragment offset range | | [          protocols](## "traffic_policies.policies.[].matches.[].protocols") | List, items: Dictionary | | | | | -| [            - protocol](## "traffic_policies.policies.[].matches.[].protocols.[].protocol") | String | | | | | +| [            - protocol](## "traffic_policies.policies.[].matches.[].protocols.[].protocol") | String | Required, Unique | | | | | [              src_port](## "traffic_policies.policies.[].matches.[].protocols.[].src_port") | String | | | | Port range | | [              dst_port](## "traffic_policies.policies.[].matches.[].protocols.[].dst_port") | String | | | | Port range | | [              src_field](## "traffic_policies.policies.[].matches.[].protocols.[].src_field") | String | | | | L4 port range field set | @@ -3845,7 +3845,7 @@ traffic_policies: | Variable | Type | Required | Default | Value Restrictions | Description | | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [virtual_source_nat_vrfs](## "virtual_source_nat_vrfs") | List, items: Dictionary | | | | | -| [  - name](## "virtual_source_nat_vrfs.[].name") | String | | | | VRF Name | +| [  - name](## "virtual_source_nat_vrfs.[].name") | String | Required, Unique | | | VRF Name | | [    ip_address](## "virtual_source_nat_vrfs.[].ip_address") | String | | | | IPv4 Address | ### YAML @@ -3885,7 +3885,7 @@ vlan_internal_order: | Variable | Type | Required | Default | Value Restrictions | Description | | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [vlans](## "vlans") | List, items: Dictionary | | | | | -| [  - id](## "vlans.[].id") | Integer | | | | VLAN ID | +| [  - id](## "vlans.[].id") | Integer | Required, Unique | | | VLAN ID | | [    name](## "vlans.[].name") | String | | | | VLAN Name | | [    state](## "vlans.[].state") | String | | | Valid Values:
- active
- suspend | | | [    trunk_groups](## "vlans.[].trunk_groups") | List, items: String | | | | | @@ -3943,7 +3943,7 @@ vmtracer_sessions: | Variable | Type | Required | Default | Value Restrictions | Description | | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [vrfs](## "vrfs") | List, items: Dictionary | | | | | -| [  - name](## "vrfs.[].name") | String | | | | VRF Name | +| [  - name](## "vrfs.[].name") | String | Required, Unique | | | VRF Name | | [    description](## "vrfs.[].description") | String | | | | | | [    ip_routing](## "vrfs.[].ip_routing") | Boolean | | | | | | [    ipv6_routing](## "vrfs.[].ipv6_routing") | Boolean | | | | | 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 0da43cecfe7..7ff603f62ed 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 @@ -631,7 +631,10 @@ "title": "IP" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "PBR" }, @@ -680,7 +683,10 @@ "title": "IPv6" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "QOS" } @@ -1284,7 +1290,10 @@ "title": "Asynchronous" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "Event Handlers" }, @@ -2402,7 +2411,10 @@ "title": "Transmit" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "TLVs" }, @@ -2848,7 +2860,10 @@ "title": "Fallback" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "id" + ] }, "title": "Connection Keys" }, @@ -4328,12 +4343,18 @@ "title": "Set" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "Classes" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "PBR" }, @@ -4382,12 +4403,18 @@ "title": "Set" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "Classes" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "QOS" } @@ -5672,7 +5699,10 @@ "title": "Area" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "ipv4_prefix" + ] }, "title": "Network Prefixes" }, @@ -5818,7 +5848,10 @@ "title": "Not Advertise" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "prefix" + ] }, "title": "Summary Addresses" }, @@ -5941,7 +5974,10 @@ "title": "Default Information Originate" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "id" + ] }, "title": "Areas" }, @@ -6005,7 +6041,10 @@ "title": "MPLS LDP Sync Default" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "id" + ] }, "title": "Process IDs" } @@ -6195,7 +6234,10 @@ "title": "Port" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "destination" + ] }, "title": "Destinations" }, @@ -6204,7 +6246,10 @@ "title": "Source Interface" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "VRFs" }, @@ -6224,7 +6269,10 @@ "title": "Port" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "destination" + ] }, "title": "Destinations" }, @@ -6280,7 +6328,10 @@ "title": "Enabled" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "Modules" } @@ -6379,7 +6430,10 @@ "title": "VLANs" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "id" + ] }, "title": "Instances" } @@ -6406,7 +6460,10 @@ "title": "Priority" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "id" + ] }, "title": "Mst Instances" }, @@ -6430,7 +6487,10 @@ "title": "Priority" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "id" + ] }, "title": "Rapid Pvst Instances" } @@ -6617,7 +6677,10 @@ "title": "VRF" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "acl_name" + ] }, "title": "IPv4 Access Groups" }, @@ -6635,7 +6698,10 @@ "title": "VRF" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "acl_name" + ] }, "title": "IPv6 Access Groups" } @@ -6929,7 +6995,10 @@ "title": "Prefixes" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "IPv4" }, @@ -6952,7 +7021,10 @@ "title": "Prefixes" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "IPv6" }, @@ -6972,7 +7044,10 @@ "title": "Port Range" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "Ports" } @@ -7120,7 +7195,10 @@ "title": "ICMP Type" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "protocol" + ] }, "title": "Protocols" }, @@ -7155,7 +7233,10 @@ "title": "Actions" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "Matches" }, @@ -7227,7 +7308,10 @@ "title": "Default Actions" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "Policies" } @@ -7251,7 +7335,10 @@ "title": "IP Address" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "Virtual Source Nat VRFs" }, @@ -7356,7 +7443,10 @@ "title": "Tenant" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "id" + ] }, "title": "VLANs" }, @@ -7427,7 +7517,10 @@ "title": "Tenant" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "name" + ] }, "title": "VRFs" }