{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "SimpleConfig",
  "type": "object",
  "required": [
    "apiVersion",
    "kind"
  ],
  "properties": {
    "apiVersion": {
      "type": "string",
      "enum": [
        "k3d.io/v1alpha2"
      ],
      "default": "k3d.io/v1alpha2"
    },
    "kind": {
      "type": "string",
      "enum": [
        "Simple"
      ],
      "default": "Simple"
    },
    "name": {
      "description": "Name of the cluster (must be a valid hostname and will be prefixed with 'k3d-'). Example: 'mycluster'.",
			"type": "string",
			"format": "hostname"
    },
    "servers": {
      "type": "number",
      "minimum": 1
    },
    "agents": {
      "type": "number",
      "minimum": 0
    },
    "kubeAPI": {
      "type": "object",
      "properties": {
        "host": {
          "type": "string",
          "format": "hostname"
        },
        "hostIP": {
          "type": "string",
          "format": "ipv4",
          "examples": [
            "0.0.0.0",
            "192.168.178.55"
          ]
        },
        "hostPort": {
          "type":"string",
          "examples": [
            "6443"
          ]
        }
      },
      "additionalProperties": false
    },
    "image": {
      "type": "string",
      "examples": [
        "rancher/k3s:latest"
      ]
    },
    "network": {
      "type": "string"
    },
    "subnet": {
      "type": "string",
      "default": "auto",
      "examples": [
        "172.28.0.0/16",
        "192.162.0.0/16"
      ]
    },
    "token": {
      "type": "string"
    },
    "volumes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "volume": {
            "type": "string"
          },
          "nodeFilters": {  
            "$ref": "#/definitions/nodeFilters"
          }
        },
        "additionalProperties": false
      }
    },
    "ports": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "port": {
            "type": "string"
          },
          "nodeFilters": {  
            "$ref": "#/definitions/nodeFilters"
          }
        },
        "additionalProperties": false
      }
    },
    "labels": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "nodeFilters": {  
            "$ref": "#/definitions/nodeFilters"
          }
        },
        "additionalProperties": false
      }
    },
    "options": {
      "type": "object",
      "properties": {
        "k3d": {
          "type": "object",
          "properties": {
            "wait": {
              "type": "boolean",
              "default": true
            },
            "timeout": {
              "type": "string",
              "examples": [
                "60s",
                "1m",
                "1m30s"
              ]
            },
            "disableLoadbalancer": {
              "type": "boolean",
              "default": false
            },
            "disableImageVolume": {
              "type": "boolean",
              "default": false
            },
            "disableRollback": {
              "type": "boolean",
              "default": false
            },
            "disableHostIPInjection": {
              "type": "boolean",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "k3s": {
          "type": "object",
          "properties": {
            "extraServerArgs": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "extraAgentArgs": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": false
        },
        "kubeconfig": {
          "type": "object",
          "properties": {
            "updateDefaultKubeconfig": {
              "type": "boolean",
              "default": true
            },
            "switchCurrentContext": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "runtime": {
          "type": "object",
          "properties": {
            "gpuRequest": {
              "type": "string"
            },
            "serversMemory": {
              "type": "string"
            },
            "agentsMemory": {
              "type": "string"
            }
          }
        }
      },
      "additionalProperties": false
    },
    "env": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "envVar": {
            "type": "string"
          },
          "nodeFilters": {  
            "$ref": "#/definitions/nodeFilters"
          }
        },
        "additionalProperties": false
      }
    },
    "registries": {
      "type": "object"
    }
  },
  "additionalProperties": false,
  "definitions": {
    "nodeFilters": {  
      "type": "array",
      "items": {
        "type": "string"
      },
      "examples": [
        "loadbalancer",
        "server[*]",
        "server[0]",
        "agent[1]",
        "all"
      ]
    }
  }
}