{
  "description": "Cluster is the Schema for the clusters API.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "ClusterSpec defines the desired state of Cluster.",
      "properties": {
        "bundlesRef": {
          "description": "BundlesRef contains a reference to the Bundles containing the desired dependencies for the cluster",
          "properties": {
            "apiVersion": {
              "description": "APIVersion refers to the Bundles APIVersion",
              "type": "string"
            },
            "name": {
              "description": "Name refers to the name of the Bundles object in the cluster",
              "type": "string"
            },
            "namespace": {
              "description": "Namespace refers to the Bundles's namespace",
              "type": "string"
            }
          },
          "required": [
            "apiVersion",
            "name",
            "namespace"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "clusterNetwork": {
          "properties": {
            "cni": {
              "description": "Deprecated. Use CNIConfig",
              "type": "string"
            },
            "cniConfig": {
              "description": "CNIConfig specifies the CNI plugin to be installed in the cluster",
              "properties": {
                "cilium": {
                  "properties": {
                    "policyEnforcementMode": {
                      "description": "PolicyEnforcementMode determines communication allowed between pods. Accepted values are default, always, never.",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "kindnetd": {
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "dns": {
              "properties": {
                "resolvConf": {
                  "description": "ResolvConf refers to the DNS resolver configuration",
                  "properties": {
                    "path": {
                      "description": "Path defines the path to the file that contains the DNS resolver configuration",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "nodes": {
              "properties": {
                "cidrMaskSize": {
                  "description": "CIDRMaskSize defines the mask size for node cidr in the cluster, default for ipv4 is 24. This is an optional field",
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "pods": {
              "description": "Comma-separated list of CIDR blocks to use for pod and service subnets. Defaults to 192.168.0.0/16 for pod subnet.",
              "properties": {
                "cidrBlocks": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "services": {
              "properties": {
                "cidrBlocks": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "controlPlaneConfiguration": {
          "properties": {
            "count": {
              "description": "Count defines the number of desired control plane nodes. Defaults to 1.",
              "type": "integer"
            },
            "endpoint": {
              "description": "Endpoint defines the host ip and port to use for the control plane.",
              "properties": {
                "host": {
                  "description": "Host defines the ip that you want to use to connect to the control plane",
                  "type": "string"
                }
              },
              "required": [
                "host"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "labels": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Labels define the labels to assign to the node",
              "type": "object"
            },
            "machineGroupRef": {
              "description": "MachineGroupRef defines the machine group configuration for the control plane.",
              "properties": {
                "kind": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "taints": {
              "description": "Taints define the set of taints to be applied on control plane nodes",
              "items": {
                "description": "The node this Taint is attached to has the \"effect\" on any pod that does not tolerate the Taint.",
                "properties": {
                  "effect": {
                    "description": "Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.",
                    "type": "string"
                  },
                  "key": {
                    "description": "Required. The taint key to be applied to a node.",
                    "type": "string"
                  },
                  "timeAdded": {
                    "description": "TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "value": {
                    "description": "The taint value corresponding to the taint key.",
                    "type": "string"
                  }
                },
                "required": [
                  "effect",
                  "key"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "upgradeRolloutStrategy": {
              "description": "UpgradeRolloutStrategy determines the rollout strategy to use for rolling upgrades and related parameters/knobs",
              "properties": {
                "rollingUpdate": {
                  "description": "ControlPlaneRollingUpdateParams is API for rolling update strategy knobs.",
                  "properties": {
                    "maxSurge": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "maxSurge"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "type": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "datacenterRef": {
          "properties": {
            "kind": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "externalEtcdConfiguration": {
          "description": "ExternalEtcdConfiguration defines the configuration options for using unstacked etcd topology.",
          "properties": {
            "count": {
              "type": "integer"
            },
            "machineGroupRef": {
              "description": "MachineGroupRef defines the machine group configuration for the etcd machines.",
              "properties": {
                "kind": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "gitOpsRef": {
          "properties": {
            "kind": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "identityProviderRefs": {
          "items": {
            "properties": {
              "kind": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "kubernetesVersion": {
          "type": "string"
        },
        "managementCluster": {
          "properties": {
            "name": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "podIamConfig": {
          "properties": {
            "serviceAccountIssuer": {
              "type": "string"
            }
          },
          "required": [
            "serviceAccountIssuer"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "proxyConfiguration": {
          "properties": {
            "httpProxy": {
              "type": "string"
            },
            "httpsProxy": {
              "type": "string"
            },
            "noProxy": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "registryMirrorConfiguration": {
          "description": "RegistryMirrorConfiguration defines the settings for image registry mirror.",
          "properties": {
            "authenticate": {
              "description": "Authenticate defines if registry requires authentication",
              "type": "boolean"
            },
            "caCertContent": {
              "description": "CACertContent defines the contents registry mirror CA certificate",
              "type": "string"
            },
            "endpoint": {
              "description": "Endpoint defines the registry mirror endpoint to use for pulling images",
              "type": "string"
            },
            "insecureSkipVerify": {
              "description": "InsecureSkipVerify skips the registry certificate verification. Only use this solution for isolated testing or in a tightly controlled, air-gapped environment. Currently only supported for snow provider",
              "type": "boolean"
            },
            "ociNamespaces": {
              "description": "OCINamespaces defines the mapping from an upstream registry to a local namespace where upstream artifacts are placed into",
              "items": {
                "description": "OCINamespace represents an entity in a local reigstry to group related images.",
                "properties": {
                  "namespace": {
                    "description": "Namespace refers to the name of a namespace in the local registry",
                    "type": "string"
                  },
                  "registry": {
                    "description": "Name refers to the name of the upstream registry",
                    "type": "string"
                  }
                },
                "required": [
                  "namespace",
                  "registry"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "port": {
              "description": "Port defines the port exposed for registry mirror endpoint",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "workerNodeGroupConfigurations": {
          "items": {
            "properties": {
              "autoscalingConfiguration": {
                "description": "AutoScalingConfiguration defines the auto scaling configuration",
                "properties": {
                  "maxCount": {
                    "description": "MaxCount defines the maximum number of nodes for the associated resource group.",
                    "type": "integer"
                  },
                  "minCount": {
                    "description": "MinCount defines the minimum number of nodes for the associated resource group.",
                    "type": "integer"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "count": {
                "description": "Count defines the number of desired worker nodes. Defaults to 1.",
                "type": "integer"
              },
              "labels": {
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Labels define the labels to assign to the node",
                "type": "object"
              },
              "machineGroupRef": {
                "description": "MachineGroupRef defines the machine group configuration for the worker nodes.",
                "properties": {
                  "kind": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "name": {
                "description": "Name refers to the name of the worker node group",
                "type": "string"
              },
              "taints": {
                "description": "Taints define the set of taints to be applied on worker nodes",
                "items": {
                  "description": "The node this Taint is attached to has the \"effect\" on any pod that does not tolerate the Taint.",
                  "properties": {
                    "effect": {
                      "description": "Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.",
                      "type": "string"
                    },
                    "key": {
                      "description": "Required. The taint key to be applied to a node.",
                      "type": "string"
                    },
                    "timeAdded": {
                      "description": "TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.",
                      "format": "date-time",
                      "type": "string"
                    },
                    "value": {
                      "description": "The taint value corresponding to the taint key.",
                      "type": "string"
                    }
                  },
                  "required": [
                    "effect",
                    "key"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "upgradeRolloutStrategy": {
                "description": "UpgradeRolloutStrategy determines the rollout strategy to use for rolling upgrades and related parameters/knobs",
                "properties": {
                  "rollingUpdate": {
                    "description": "WorkerNodesRollingUpdateParams is API for rolling update strategy knobs.",
                    "properties": {
                      "maxSurge": {
                        "type": "integer"
                      },
                      "maxUnavailable": {
                        "type": "integer"
                      }
                    },
                    "required": [
                      "maxSurge",
                      "maxUnavailable"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "ClusterStatus defines the observed state of Cluster.",
      "properties": {
        "conditions": {
          "items": {
            "description": "Condition defines an observation of a Cluster API resource operational state.",
            "properties": {
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A human readable message indicating details about the transition. This field may be empty.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition in CamelCase. The specific API may choose whether or not this field is considered a guaranteed API. This field may not be empty.",
                "type": "string"
              },
              "severity": {
                "description": "Severity provides an explicit classification of Reason code, so the users or machines can immediately understand the current situation and act accordingly. The Severity field MUST be set only when Status=False.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type of condition in CamelCase or in foo.example.com/CamelCase. Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important.",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "eksdReleaseRef": {
          "description": "EksdReleaseRef defines the properties of the EKS-D object on the cluster",
          "properties": {
            "apiVersion": {
              "description": "ApiVersion refers to the EKS-D API version",
              "type": "string"
            },
            "kind": {
              "description": "Kind refers to the Release kind for the EKS-D object",
              "type": "string"
            },
            "name": {
              "description": "Name refers to the name of the EKS-D object on the cluster",
              "type": "string"
            },
            "namespace": {
              "description": "Namespace refers to the namespace for the EKS-D release resources",
              "type": "string"
            }
          },
          "required": [
            "apiVersion",
            "kind",
            "name",
            "namespace"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "failureMessage": {
          "description": "Descriptive message about a fatal problem while reconciling a cluster",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
