{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/talhelper/latest.json",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/budimanjojo/talhelper/master/pkg/config/schemas/talconfig.json",
    "sourceSha256": "46f84f89e6894e2f0734ca2c7a87a2b158f8e1b02fd2fa31648e6d3d676b1750",
    "fileMatch": [
      "talconfig.yaml",
      "talconfig.yml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "$ref": "#/$defs/TalhelperConfig",
  "$defs": {
    "Bond": {
      "properties": {
        "interfaces": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "deviceSelectors": {
          "items": {
            "$ref": "#/$defs/NetworkDeviceSelector"
          },
          "type": "array"
        },
        "arpIPTarget": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "mode": {
          "type": "string"
        },
        "xmitHashPolicy": {
          "type": "string"
        },
        "lacpRate": {
          "type": "string"
        },
        "adActorSystem": {
          "type": "string"
        },
        "arpValidate": {
          "type": "string"
        },
        "arpAllTargets": {
          "type": "string"
        },
        "primary": {
          "type": "string"
        },
        "primaryReselect": {
          "type": "string"
        },
        "failOverMac": {
          "type": "string"
        },
        "adSelect": {
          "type": "string"
        },
        "miimon": {
          "type": "integer"
        },
        "updelay": {
          "type": "integer"
        },
        "downdelay": {
          "type": "integer"
        },
        "arpInterval": {
          "type": "integer"
        },
        "resendIgmp": {
          "type": "integer"
        },
        "minLinks": {
          "type": "integer"
        },
        "lpInterval": {
          "type": "integer"
        },
        "packetsPerSlave": {
          "type": "integer"
        },
        "numPeerNotif": {
          "type": "integer"
        },
        "tlbDynamicLb": {
          "type": "integer"
        },
        "allSlavesActive": {
          "type": "integer"
        },
        "useCarrier": {
          "type": "boolean"
        },
        "adActorSysPrio": {
          "type": "integer"
        },
        "adUserPortKey": {
          "type": "integer"
        },
        "peerNotifyDelay": {
          "type": "integer"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "Bridge": {
      "properties": {
        "interfaces": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "stp": {
          "$ref": "#/$defs/STP"
        },
        "vlan": {
          "$ref": "#/$defs/BridgeVLAN"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "BridgePort": {
      "properties": {
        "master": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "BridgeVLAN": {
      "properties": {
        "vlanFiltering": {
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "CNIConfig": {
      "properties": {
        "name": {
          "type": "string"
        },
        "urls": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "flannel": {
          "$ref": "#/$defs/FlannelCNIConfig"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "ClusterInlineManifest": {
      "properties": {
        "name": {
          "type": "string"
        },
        "contents": {
          "type": "string"
        },
        "skipEnvsubst": {
          "type": "boolean",
          "description": "Whether to skip envsubst to the contents (only for contents in another file)"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "ClusterInlineManifests": {
      "items": {
        "$ref": "#/$defs/ClusterInlineManifest"
      },
      "type": "array"
    },
    "ConfigFile": {
      "properties": {
        "content": {
          "type": "string"
        },
        "mountPath": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "ConfigFileList": {
      "items": {
        "$ref": "#/$defs/ConfigFile"
      },
      "type": "array"
    },
    "Customization": {
      "properties": {
        "extraKernelArgs": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "meta": {
          "items": {
            "$ref": "#/$defs/MetaValue"
          },
          "type": "array"
        },
        "systemExtensions": {
          "$ref": "#/$defs/SystemExtensions"
        },
        "bootloader": {
          "type": "integer"
        },
        "secureboot": {
          "$ref": "#/$defs/SecureBootCustomization"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "CustomizationWrapper": {
      "properties": {
        "extraKernelArgs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Extra kernel arguments to be passed to the kernel"
        },
        "meta": {
          "$ref": "#/$defs/MetaValue"
        },
        "systemExtensions": {
          "$ref": "#/$defs/SystemExtensions",
          "description": "Talos system extensions to be installed"
        },
        "bootloader": {
          "type": "string",
          "enum": [
            "sd-boot",
            "grub",
            "dual-boot"
          ],
          "description": "The bootloader to be used in the image"
        },
        "secureboot": {
          "$ref": "#/$defs/SecureBootCustomization",
          "description": "The secure boot options for the image"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "DHCPOptions": {
      "properties": {
        "routeMetric": {
          "type": "integer"
        },
        "ipv4": {
          "type": "boolean"
        },
        "ipv6": {
          "type": "boolean"
        },
        "duidv6": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "Device": {
      "properties": {
        "interface": {
          "type": "string"
        },
        "deviceSelector": {
          "$ref": "#/$defs/NetworkDeviceSelector"
        },
        "addresses": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "cidr": {
          "type": "string"
        },
        "routes": {
          "items": {
            "$ref": "#/$defs/Route"
          },
          "type": "array"
        },
        "bond": {
          "$ref": "#/$defs/Bond"
        },
        "bridge": {
          "$ref": "#/$defs/Bridge"
        },
        "bridgePort": {
          "$ref": "#/$defs/BridgePort"
        },
        "vlans": {
          "$ref": "#/$defs/VlanList"
        },
        "mtu": {
          "type": "integer"
        },
        "dhcp": {
          "type": "boolean"
        },
        "ignore": {
          "type": "boolean"
        },
        "dummy": {
          "type": "boolean"
        },
        "dhcpOptions": {
          "$ref": "#/$defs/DHCPOptions"
        },
        "wireguard": {
          "$ref": "#/$defs/DeviceWireguardConfig"
        },
        "vip": {
          "$ref": "#/$defs/DeviceVIPConfig"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "DeviceVIPConfig": {
      "properties": {
        "ip": {
          "type": "string"
        },
        "equinixMetal": {
          "$ref": "#/$defs/VIPEquinixMetalConfig"
        },
        "hcloud": {
          "$ref": "#/$defs/VIPHCloudConfig"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "DeviceWireguardConfig": {
      "properties": {
        "privateKey": {
          "type": "string"
        },
        "listenPort": {
          "type": "integer"
        },
        "firewallMark": {
          "type": "integer"
        },
        "peers": {
          "items": {
            "$ref": "#/$defs/DeviceWireguardPeer"
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "DeviceWireguardPeer": {
      "properties": {
        "publicKey": {
          "type": "string"
        },
        "endpoint": {
          "type": "string"
        },
        "persistentKeepaliveInterval": {
          "type": "integer"
        },
        "allowedIPs": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "DiskPartition": {
      "properties": {
        "size": {
          "type": "integer"
        },
        "mountpoint": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "DiskSelectorWrapper": {
      "properties": {
        "match": {
          "type": "string",
          "description": "The Common Expression Language (CEL) expression to match the disk"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "EncryptionKey": {
      "properties": {
        "slot": {
          "type": "integer"
        },
        "static": {
          "$ref": "#/$defs/EncryptionKeyStatic"
        },
        "nodeID": {
          "$ref": "#/$defs/EncryptionKeyNodeID"
        },
        "kms": {
          "$ref": "#/$defs/EncryptionKeyKMS"
        },
        "tpm": {
          "$ref": "#/$defs/EncryptionKeyTPM"
        },
        "lockToState": {
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "EncryptionKeyKMS": {
      "properties": {
        "endpoint": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "EncryptionKeyNodeID": {
      "properties": {},
      "type": "object",
      "additionalProperties": false
    },
    "EncryptionKeyStatic": {
      "properties": {
        "passphrase": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "EncryptionKeyTPM": {
      "properties": {
        "options": {
          "$ref": "#/$defs/EncryptionKeyTPMOptions"
        },
        "checkSecurebootStatusOnEnroll": {
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "EncryptionKeyTPMOptions": {
      "properties": {
        "pcrs": {
          "items": {
            "type": "integer"
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "EncryptionSpec": {
      "properties": {
        "provider": {
          "type": "integer"
        },
        "keys": {
          "items": {
            "$ref": "#/$defs/EncryptionKey"
          },
          "type": "array"
        },
        "cipher": {
          "type": "string"
        },
        "keySize": {
          "type": "integer"
        },
        "blockSize": {
          "type": "integer"
        },
        "options": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "ExtensionService": {
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the extension service config"
        },
        "configFiles": {
          "$ref": "#/$defs/ConfigFileList",
          "description": "The config files for the extension service"
        },
        "environment": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "The environment for the extension service"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "FilesystemSpecWrapper": {
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "ext4",
            "xfs"
          ],
          "description": "Filesystem type",
          "default": "xfs"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "FlannelCNIConfig": {
      "properties": {
        "extraArgs": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "ImageFactory": {
      "properties": {
        "registryURL": {
          "type": "string",
          "description": "Registry url or the image",
          "default": "factory.talos.dev"
        },
        "schematicEndpoint": {
          "type": "string",
          "default": "/schematics"
        },
        "protocol": {
          "type": "string",
          "description": "Protocol of the registry(https or http)",
          "default": "https"
        },
        "installerURLTmpl": {
          "type": "string",
          "description": "Template for installer image URL",
          "default": "{{.RegistryURL}}/installer{{if .Secureboot}}-secureboot{{end}}/{{.ID}}:{{.Version}}"
        },
        "ISOURLTmpl": {
          "type": "string",
          "description": "Template for image URL",
          "default": "{{.Protocol}}://{{.RegistryURL}}/image/{{.ID}}/{{.Version}}/{{.Mode}}-{{.Arch}}{{if .Secureboot}}-secureboot{{end}}{{if and .Secureboot .UseUKI}}-uki.efi{{else}}{{.Suffix}}{{end}}"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "IngressConfigWrapper": {
      "properties": {
        "subnet": {
          "type": "string",
          "description": "Source subnet"
        },
        "except": {
          "type": "string",
          "description": "Source subnet to exclude from the subnet"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "IngressFirewallWrapper": {
      "properties": {
        "defaultAction": {
          "type": "string",
          "description": "Default action for all not explicitly configured traffic",
          "default": "block"
        },
        "rules": {
          "items": {
            "$ref": "#/$defs/NetworkRuleWrapper"
          },
          "type": "array",
          "description": "List of matching network rules to allow or block against the defaultAction"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "InstallDiskSelectorWrapper": {
      "properties": {
        "size": {
          "type": "string",
          "description": "Disk size",
          "examples": [
            "4GB"
          ]
        },
        "name": {
          "type": "string"
        },
        "model": {
          "type": "string"
        },
        "serial": {
          "type": "string"
        },
        "modalias": {
          "type": "string"
        },
        "uuid": {
          "type": "string"
        },
        "wwid": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "examples": [
            "ssd"
          ]
        },
        "busPath": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "KernelModuleConfig": {
      "properties": {
        "name": {
          "type": "string"
        },
        "parameters": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "MachineDisk": {
      "properties": {
        "device": {
          "type": "string"
        },
        "partitions": {
          "items": {
            "$ref": "#/$defs/DiskPartition"
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "MachineFile": {
      "properties": {
        "content": {
          "type": "string"
        },
        "permissions": {
          "type": "integer"
        },
        "path": {
          "type": "string"
        },
        "op": {
          "type": "string"
        },
        "skipEnvsubst": {
          "type": "boolean",
          "description": "Whether to skip envsubst to the contents (only for contents in another file)"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "MachineFiles": {
      "items": {
        "$ref": "#/$defs/MachineFile"
      },
      "type": "array"
    },
    "MachineSpec": {
      "properties": {
        "mode": {
          "type": "string",
          "description": "Machine mode (e.g: metal)",
          "default": "metal"
        },
        "arch": {
          "type": "string",
          "description": "Machine architecture (e.g: amd64",
          "default": "amd64"
        },
        "secureboot": {
          "type": "boolean",
          "description": "Whether to enable Secure Boot",
          "default": false
        },
        "useUKI": {
          "type": "boolean",
          "description": "Whether to use UKI if Secure Boot is enabled",
          "default": false
        },
        "bootMethod": {
          "type": "string",
          "description": "Boot method of the node (can be disk-image",
          "default": "iso"
        },
        "imageSuffix": {
          "type": "string",
          "description": "The image file extension (will be automatically determined by specified bootMethod) (e.g: raw.xz"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "MetaValue": {
      "properties": {
        "key": {
          "type": "integer"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "NetworkDeviceSelector": {
      "properties": {
        "busPath": {
          "type": "string"
        },
        "hardwareAddr": {
          "type": "string"
        },
        "permanentAddr": {
          "type": "string"
        },
        "pciID": {
          "type": "string"
        },
        "driver": {
          "type": "string"
        },
        "physical": {
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "NetworkRuleWrapper": {
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the rule"
        },
        "portSelector": {
          "$ref": "#/$defs/PortSelectorWrapper",
          "description": "Ports and protocols on the host affected by the rule"
        },
        "ingress": {
          "items": {
            "$ref": "#/$defs/IngressConfigWrapper"
          },
          "type": "array",
          "description": "List of source subnets allowed to access the host ports/protocols"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "Node": {
      "oneOf": [
        {
          "required": [
            "installDisk"
          ],
          "title": "installDiskSelector"
        },
        {
          "required": [
            "installDiskSelector"
          ],
          "title": "installDisk"
        }
      ],
      "properties": {
        "hostname": {
          "type": "string",
          "description": "Hostname of the node"
        },
        "ipAddress": {
          "type": "string",
          "description": "IP address where the node can be reached",
          "examples": [
            "192.168.200.11"
          ]
        },
        "controlPlane": {
          "type": "boolean",
          "description": "Whether the node is a controlplane"
        },
        "installDisk": {
          "type": "string",
          "description": "The disk used for installation"
        },
        "installDiskSelector": {
          "$ref": "#/$defs/InstallDiskSelectorWrapper",
          "description": "Look up disk used for installation"
        },
        "ignoreHostname": {
          "type": "boolean",
          "description": "Whether to set \"machine.network.hostname\" to the generated config file"
        },
        "overridePatches": {
          "type": "boolean",
          "description": "Whether \"patches\" defined here should override the one defined in node group"
        },
        "overrideExtraManifests": {
          "type": "boolean",
          "description": "Whether \"extraManifests\" defined here should override the one defined in node group"
        },
        "overrideMachineCertSANs": {
          "type": "boolean",
          "description": "Whether \"certSANs\" defined here should override the one defined in node group"
        },
        "nodeLabels": {
          "description": "Labels to be added to the node",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "nodeAnnotations": {
          "description": "Annotations to be added to the node",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "nodeTaints": {
          "description": "Node taints for the node. Effect is optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "machineDisks": {
          "items": {
            "$ref": "#/$defs/MachineDisk"
          },
          "type": "array",
          "description": "DEPRECATED: user \"userVolumes\" instead"
        },
        "machineFiles": {
          "$ref": "#/$defs/MachineFiles",
          "description": "List of files to create inside the node"
        },
        "disableSearchDomain": {
          "type": "boolean",
          "description": "Whether to disable generating default search domain"
        },
        "kernelModules": {
          "items": {
            "$ref": "#/$defs/KernelModuleConfig"
          },
          "type": "array",
          "description": "List of additional kernel modules to load inside the node"
        },
        "nameservers": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "List of nameservers for the node"
        },
        "networkInterfaces": {
          "items": {
            "$ref": "#/$defs/Device"
          },
          "type": "array",
          "description": "List of network interface configuration for the node"
        },
        "extraManifests": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "DEPRECATED: Use \"patches\" instead"
        },
        "certSANs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Additional certificate SANs to add to the machine certificate"
        },
        "patches": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Patches to be applied to the node"
        },
        "talosImageURL": {
          "type": "string",
          "description": "Talos installer image url for the node",
          "examples": [
            "factory.talos.dev/installer/e9c7ef96884d4fbc8c0a1304ccca4bb0287d766a8b4125997cb9dbe84262144e"
          ]
        },
        "noSchematicValidate": {
          "type": "boolean",
          "description": "Whether to skip schematic validation"
        },
        "schematic": {
          "$ref": "#/$defs/SchematicWrapper",
          "description": "Talos image customization to be used in the installer image"
        },
        "imageSchematic": {
          "$ref": "#/$defs/Schematic",
          "description": "Talos image customization to be used for ISO or boot image"
        },
        "machineSpec": {
          "$ref": "#/$defs/MachineSpec",
          "description": "Machine hardware specification"
        },
        "ingressFirewall": {
          "$ref": "#/$defs/IngressFirewallWrapper",
          "description": "Machine firewall specification"
        },
        "extensionServices": {
          "items": {
            "$ref": "#/$defs/ExtensionService"
          },
          "type": "array",
          "description": "Machine extension services specification"
        },
        "volumes": {
          "items": {
            "$ref": "#/$defs/Volume"
          },
          "type": "array",
          "description": "Machine volume configs specification"
        },
        "userVolumes": {
          "items": {
            "$ref": "#/$defs/UserVolume"
          },
          "type": "array",
          "description": "Machine user volume configs specification"
        },
        "filenameTmpl": {
          "type": "string",
          "description": "Template for the generated filename",
          "default": "{{.ClusterName}}-{{Hostname}}.yaml"
        }
      },
      "required": [
        "hostname",
        "ipAddress"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "NodeConfigs": {
      "properties": {
        "nodeLabels": {
          "description": "Labels to be added to the node",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "nodeAnnotations": {
          "description": "Annotations to be added to the node",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "nodeTaints": {
          "description": "Node taints for the node. Effect is optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "machineDisks": {
          "items": {
            "$ref": "#/$defs/MachineDisk"
          },
          "type": "array",
          "description": "DEPRECATED: user \"userVolumes\" instead"
        },
        "machineFiles": {
          "$ref": "#/$defs/MachineFiles",
          "description": "List of files to create inside the node"
        },
        "disableSearchDomain": {
          "type": "boolean",
          "description": "Whether to disable generating default search domain"
        },
        "kernelModules": {
          "items": {
            "$ref": "#/$defs/KernelModuleConfig"
          },
          "type": "array",
          "description": "List of additional kernel modules to load inside the node"
        },
        "nameservers": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "List of nameservers for the node"
        },
        "networkInterfaces": {
          "items": {
            "$ref": "#/$defs/Device"
          },
          "type": "array",
          "description": "List of network interface configuration for the node"
        },
        "extraManifests": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "DEPRECATED: Use \"patches\" instead"
        },
        "certSANs": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Additional certificate SANs to add to the machine certificate"
        },
        "patches": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Patches to be applied to the node"
        },
        "talosImageURL": {
          "type": "string",
          "description": "Talos installer image url for the node",
          "examples": [
            "factory.talos.dev/installer/e9c7ef96884d4fbc8c0a1304ccca4bb0287d766a8b4125997cb9dbe84262144e"
          ]
        },
        "noSchematicValidate": {
          "type": "boolean",
          "description": "Whether to skip schematic validation"
        },
        "schematic": {
          "$ref": "#/$defs/SchematicWrapper",
          "description": "Talos image customization to be used in the installer image"
        },
        "imageSchematic": {
          "$ref": "#/$defs/Schematic",
          "description": "Talos image customization to be used for ISO or boot image"
        },
        "machineSpec": {
          "$ref": "#/$defs/MachineSpec",
          "description": "Machine hardware specification"
        },
        "ingressFirewall": {
          "$ref": "#/$defs/IngressFirewallWrapper",
          "description": "Machine firewall specification"
        },
        "extensionServices": {
          "items": {
            "$ref": "#/$defs/ExtensionService"
          },
          "type": "array",
          "description": "Machine extension services specification"
        },
        "volumes": {
          "items": {
            "$ref": "#/$defs/Volume"
          },
          "type": "array",
          "description": "Machine volume configs specification"
        },
        "userVolumes": {
          "items": {
            "$ref": "#/$defs/UserVolume"
          },
          "type": "array",
          "description": "Machine user volume configs specification"
        },
        "filenameTmpl": {
          "type": "string",
          "description": "Template for the generated filename",
          "default": "{{.ClusterName}}-{{Hostname}}.yaml"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "Overlay": {
      "properties": {
        "image": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "options": {
          "type": "object"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "PortSelectorWrapper": {
      "properties": {
        "ports": {
          "items": true,
          "type": "array",
          "description": "List of ports or port ranges"
        },
        "protocol": {
          "type": "string",
          "description": "Protocol (can be tcp or udp)"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "ProvisioningSpecWrapper": {
      "properties": {
        "diskSelector": {
          "$ref": "#/$defs/DiskSelectorWrapper",
          "description": "The disk selector expression"
        },
        "grow": {
          "type": "boolean",
          "description": "Should the volume grow to the size of the disk (if possible)"
        },
        "minSize": {
          "type": "string",
          "description": "The minimum size of the volume",
          "examples": [
            "2.5GiB"
          ]
        },
        "maxSize": {
          "type": "string",
          "description": "The maximum size of the volume",
          "examples": [
            "50GiB"
          ]
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "Route": {
      "properties": {
        "network": {
          "type": "string"
        },
        "gateway": {
          "type": "string"
        },
        "source": {
          "type": "string"
        },
        "metric": {
          "type": "integer"
        },
        "mtu": {
          "type": "integer"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "STP": {
      "properties": {
        "enabled": {
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "Schematic": {
      "properties": {
        "overlay": {
          "$ref": "#/$defs/Overlay"
        },
        "customization": {
          "$ref": "#/$defs/Customization"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "SchematicWrapper": {
      "properties": {
        "overlay": {
          "$ref": "#/$defs/Overlay",
          "description": "The overlay options for image generation"
        },
        "customization": {
          "$ref": "#/$defs/CustomizationWrapper",
          "description": "Talos image customization"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "SecureBootCustomization": {
      "properties": {
        "includeWellKnownCertificates": {
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "SystemExtensions": {
      "properties": {
        "officialExtensions": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "TalhelperConfig": {
      "properties": {
        "clusterName": {
          "type": "string",
          "description": "Name of the cluster"
        },
        "talosVersion": {
          "type": "string",
          "description": "Talos version to perform installation",
          "examples": [
            "v1.5.4"
          ]
        },
        "kubernetesVersion": {
          "type": "string",
          "description": "Kubernetes version to use",
          "examples": [
            "v1.27.0"
          ]
        },
        "endpoint": {
          "type": "string",
          "description": "Cluster's controlplane endpoint",
          "examples": [
            "https://192.168.200.10:6443"
          ]
        },
        "domain": {
          "type": "string",
          "description": "The domain to be used by Kubernetes DNS",
          "examples": [
            "cluster.local"
          ]
        },
        "allowSchedulingOnMasters": {
          "type": "boolean",
          "description": "Whether to allow running workload on controlplane nodes"
        },
        "allowSchedulingOnControlPlanes": {
          "type": "boolean",
          "description": "Whether to allow running workload on controlplane nodes. It is an alias to \"AllowSchedulingOnMasters\""
        },
        "additionalMachineCertSans": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "DEPRECATED Use node/node groups extraMachineCertSans ! Extra certificate SANs for the machine's certificate"
        },
        "additionalApiServerCertSans": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Extra certificate SANs for the API server's certificate"
        },
        "inlineManifests": {
          "$ref": "#/$defs/ClusterInlineManifests",
          "description": "A list of inline Kubernetes manifests for the cluster"
        },
        "clusterPodNets": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "The pod subnet CIDR list"
        },
        "clusterSvcNets": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "The service subnet CIDR list"
        },
        "cniConfig": {
          "$ref": "#/$defs/CNIConfig",
          "description": "The CNI to be used for the cluster's network"
        },
        "patches": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Patches to be applied to all nodes"
        },
        "nodes": {
          "items": {
            "$ref": "#/$defs/Node"
          },
          "type": "array",
          "description": "List of configurations for Node"
        },
        "imageFactory": {
          "$ref": "#/$defs/ImageFactory"
        },
        "controlPlane": {
          "$ref": "#/$defs/NodeConfigs",
          "description": "Configurations targetted for all controlplane nodes"
        },
        "worker": {
          "$ref": "#/$defs/NodeConfigs",
          "description": "Configurations targetted for all worker nodes"
        }
      },
      "required": [
        "clusterName",
        "endpoint",
        "nodes"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "UserVolume": {
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of user volume config"
        },
        "volumeType": {
          "type": "integer",
          "description": "Volume type of user volume config"
        },
        "provisioning": {
          "$ref": "#/$defs/ProvisioningSpecWrapper",
          "description": "Provisioning spec of the user volume config"
        },
        "filesystem": {
          "$ref": "#/$defs/FilesystemSpecWrapper",
          "description": "Filesystem spec of the user volume config"
        },
        "encryption": {
          "$ref": "#/$defs/EncryptionSpec",
          "description": "Encryption spec of the user volume config"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "VIPEquinixMetalConfig": {
      "properties": {
        "apiToken": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "VIPHCloudConfig": {
      "properties": {
        "apiToken": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "Vlan": {
      "properties": {
        "addresses": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "cidr": {
          "type": "string"
        },
        "routes": {
          "items": {
            "$ref": "#/$defs/Route"
          },
          "type": "array"
        },
        "dhcp": {
          "type": "boolean"
        },
        "vlanId": {
          "type": "integer"
        },
        "mtu": {
          "type": "integer"
        },
        "vip": {
          "$ref": "#/$defs/DeviceVIPConfig"
        },
        "dhcpOptions": {
          "$ref": "#/$defs/DHCPOptions"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "VlanList": {
      "items": {
        "$ref": "#/$defs/Vlan"
      },
      "type": "array"
    },
    "Volume": {
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the volume config"
        },
        "provisioning": {
          "$ref": "#/$defs/ProvisioningSpecWrapper",
          "description": "Provisioning spec of the volume config"
        },
        "encryption": {
          "$ref": "#/$defs/EncryptionSpec",
          "description": "Encryption spec of the volume config"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  }
}
