{
  "description": "Cluster is the Schema for the provisioning API.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore 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.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "Spec is the desired state of the cluster.",
      "properties": {
        "agentEnvVars": {
          "description": "AgentEnvVars is a list of environment variables that will be set on\nthe cluster agent deployment and system agent service.",
          "items": {
            "description": "EnvVar represents a key value pair for an environment variable.",
            "properties": {
              "name": {
                "description": "Name is the name of the environment variable.",
                "type": "string"
              },
              "value": {
                "description": "Value is the value of the environment variable.",
                "nullable": true,
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "nullable": true,
          "type": "array"
        },
        "cloudCredentialSecretName": {
          "description": "CloudCredentialSecretName is the id of the secret used to provision\nthe cluster.\nThis field must be in the format of \"namespace:name\".",
          "maxLength": 317,
          "nullable": true,
          "type": "string"
        },
        "clusterAPIConfig": {
          "description": "ClusterAPIConfig is unused.\nDeprecated: this field is unused and will be removed in a future\nversion.",
          "nullable": true,
          "properties": {
            "clusterName": {
              "description": "ClusterName is unused.\nDeprecated: this field is unused and will be removed in a future\nversion.",
              "nullable": true,
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "clusterAgentDeploymentCustomization": {
          "description": "ClusterAgentDeploymentCustomization is the customization configuration\nto apply to the cluster agent deployment.",
          "nullable": true,
          "properties": {
            "appendTolerations": {
              "description": "AppendTolerations is a list of tolerations that will be appended to\nthe agent deployment.",
              "items": {
                "description": "The pod this Toleration is attached to tolerates any taint that matches\nthe triple <key,value,effect> using the matching operator <operator>.",
                "properties": {
                  "effect": {
                    "description": "Effect indicates the taint effect to match. Empty means match all taint effects.\nWhen specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.",
                    "type": "string"
                  },
                  "key": {
                    "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys.\nIf the key is empty, operator must be Exists; this combination means to match all values and all keys.",
                    "type": "string"
                  },
                  "operator": {
                    "description": "Operator represents a key's relationship to the value.\nValid operators are Exists and Equal. Defaults to Equal.\nExists is equivalent to wildcard for value, so that a pod can\ntolerate all taints of a particular category.",
                    "type": "string"
                  },
                  "tolerationSeconds": {
                    "description": "TolerationSeconds represents the period of time the toleration (which must be\nof effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,\nit is not set, which means tolerate the taint forever (do not evict). Zero and\nnegative values will be treated as 0 (evict immediately) by the system.",
                    "format": "int64",
                    "type": "integer"
                  },
                  "value": {
                    "description": "Value is the taint value the toleration matches to.\nIf the operator is Exists, the value should be empty, otherwise just a regular string.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "nullable": true,
              "type": "array"
            },
            "overrideAffinity": {
              "description": "OverrideAffinity is an affinity that will be used to override the\nagent deployment's affinity.",
              "nullable": true,
              "properties": {
                "nodeAffinity": {
                  "description": "Describes node affinity scheduling rules for the pod.",
                  "properties": {
                    "preferredDuringSchedulingIgnoredDuringExecution": {
                      "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node matches the corresponding matchExpressions; the\nnode(s) with the highest sum are the most preferred.",
                      "items": {
                        "description": "An empty preferred scheduling term matches all objects with implicit weight 0\n(i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).",
                        "properties": {
                          "preference": {
                            "description": "A node selector term, associated with the corresponding weight.",
                            "properties": {
                              "matchExpressions": {
                                "description": "A list of node selector requirements by node's labels.",
                                "items": {
                                  "description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "The label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "Represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchFields": {
                                "description": "A list of node selector requirements by node's fields.",
                                "items": {
                                  "description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "The label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "Represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "weight": {
                            "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.",
                            "format": "int32",
                            "type": "integer"
                          }
                        },
                        "required": [
                          "preference",
                          "weight"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    },
                    "requiredDuringSchedulingIgnoredDuringExecution": {
                      "description": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to an update), the system\nmay or may not try to eventually evict the pod from its node.",
                      "properties": {
                        "nodeSelectorTerms": {
                          "description": "Required. A list of node selector terms. The terms are ORed.",
                          "items": {
                            "description": "A null or empty node selector term matches no objects. The requirements of\nthem are ANDed.\nThe TopologySelectorTerm type implements a subset of the NodeSelectorTerm.",
                            "properties": {
                              "matchExpressions": {
                                "description": "A list of node selector requirements by node's labels.",
                                "items": {
                                  "description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "The label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "Represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchFields": {
                                "description": "A list of node selector requirements by node's fields.",
                                "items": {
                                  "description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "The label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "Represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "type": "array",
                          "x-kubernetes-list-type": "atomic"
                        }
                      },
                      "required": [
                        "nodeSelectorTerms"
                      ],
                      "type": "object",
                      "x-kubernetes-map-type": "atomic",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "podAffinity": {
                  "description": "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).",
                  "properties": {
                    "preferredDuringSchedulingIgnoredDuringExecution": {
                      "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.",
                      "items": {
                        "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)",
                        "properties": {
                          "podAffinityTerm": {
                            "description": "Required. A pod affinity term, associated with the corresponding weight.",
                            "properties": {
                              "labelSelector": {
                                "description": "A label query over a set of resources, in this case pods.\nIf it's null, this PodAffinityTerm matches with no Pods.",
                                "properties": {
                                  "matchExpressions": {
                                    "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                    "items": {
                                      "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                      "properties": {
                                        "key": {
                                          "description": "key is the label key that the selector applies to.",
                                          "type": "string"
                                        },
                                        "operator": {
                                          "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                          "type": "string"
                                        },
                                        "values": {
                                          "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "matchLabelKeys": {
                                "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "mismatchLabelKeys": {
                                "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "namespaceSelector": {
                                "description": "A label query over the set of namespaces that the term applies to.\nThe term is applied to the union of the namespaces selected by this field\nand the ones listed in the namespaces field.\nnull selector and null or empty namespaces list means \"this pod's namespace\".\nAn empty selector ({}) matches all namespaces.",
                                "properties": {
                                  "matchExpressions": {
                                    "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                    "items": {
                                      "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                      "properties": {
                                        "key": {
                                          "description": "key is the label key that the selector applies to.",
                                          "type": "string"
                                        },
                                        "operator": {
                                          "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                          "type": "string"
                                        },
                                        "values": {
                                          "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "namespaces": {
                                "description": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "topologyKey": {
                                "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching\nthe labelSelector in the specified namespaces, where co-located is defined as running on a node\nwhose value of the label with key topologyKey matches that of any node on which any of the\nselected pods is running.\nEmpty topologyKey is not allowed.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "topologyKey"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "weight": {
                            "description": "weight associated with matching the corresponding podAffinityTerm,\nin the range 1-100.",
                            "format": "int32",
                            "type": "integer"
                          }
                        },
                        "required": [
                          "podAffinityTerm",
                          "weight"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    },
                    "requiredDuringSchedulingIgnoredDuringExecution": {
                      "description": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.",
                      "items": {
                        "description": "Defines a set of pods (namely those matching the labelSelector\nrelative to the given namespace(s)) that this pod should be\nco-located (affinity) or not co-located (anti-affinity) with,\nwhere co-located is defined as running on a node whose value of\nthe label with key <topologyKey> matches that of any node on which\na pod of the set of pods is running",
                        "properties": {
                          "labelSelector": {
                            "description": "A label query over a set of resources, in this case pods.\nIf it's null, this PodAffinityTerm matches with no Pods.",
                            "properties": {
                              "matchExpressions": {
                                "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                "items": {
                                  "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "key is the label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "matchLabelKeys": {
                            "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "mismatchLabelKeys": {
                            "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "namespaceSelector": {
                            "description": "A label query over the set of namespaces that the term applies to.\nThe term is applied to the union of the namespaces selected by this field\nand the ones listed in the namespaces field.\nnull selector and null or empty namespaces list means \"this pod's namespace\".\nAn empty selector ({}) matches all namespaces.",
                            "properties": {
                              "matchExpressions": {
                                "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                "items": {
                                  "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "key is the label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "namespaces": {
                            "description": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "topologyKey": {
                            "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching\nthe labelSelector in the specified namespaces, where co-located is defined as running on a node\nwhose value of the label with key topologyKey matches that of any node on which any of the\nselected pods is running.\nEmpty topologyKey is not allowed.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "topologyKey"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "podAntiAffinity": {
                  "description": "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).",
                  "properties": {
                    "preferredDuringSchedulingIgnoredDuringExecution": {
                      "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe anti-affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling anti-affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and subtracting\n\"weight\" from the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.",
                      "items": {
                        "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)",
                        "properties": {
                          "podAffinityTerm": {
                            "description": "Required. A pod affinity term, associated with the corresponding weight.",
                            "properties": {
                              "labelSelector": {
                                "description": "A label query over a set of resources, in this case pods.\nIf it's null, this PodAffinityTerm matches with no Pods.",
                                "properties": {
                                  "matchExpressions": {
                                    "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                    "items": {
                                      "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                      "properties": {
                                        "key": {
                                          "description": "key is the label key that the selector applies to.",
                                          "type": "string"
                                        },
                                        "operator": {
                                          "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                          "type": "string"
                                        },
                                        "values": {
                                          "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "matchLabelKeys": {
                                "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "mismatchLabelKeys": {
                                "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "namespaceSelector": {
                                "description": "A label query over the set of namespaces that the term applies to.\nThe term is applied to the union of the namespaces selected by this field\nand the ones listed in the namespaces field.\nnull selector and null or empty namespaces list means \"this pod's namespace\".\nAn empty selector ({}) matches all namespaces.",
                                "properties": {
                                  "matchExpressions": {
                                    "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                    "items": {
                                      "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                      "properties": {
                                        "key": {
                                          "description": "key is the label key that the selector applies to.",
                                          "type": "string"
                                        },
                                        "operator": {
                                          "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                          "type": "string"
                                        },
                                        "values": {
                                          "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "namespaces": {
                                "description": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "topologyKey": {
                                "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching\nthe labelSelector in the specified namespaces, where co-located is defined as running on a node\nwhose value of the label with key topologyKey matches that of any node on which any of the\nselected pods is running.\nEmpty topologyKey is not allowed.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "topologyKey"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "weight": {
                            "description": "weight associated with matching the corresponding podAffinityTerm,\nin the range 1-100.",
                            "format": "int32",
                            "type": "integer"
                          }
                        },
                        "required": [
                          "podAffinityTerm",
                          "weight"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    },
                    "requiredDuringSchedulingIgnoredDuringExecution": {
                      "description": "If the anti-affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the anti-affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.",
                      "items": {
                        "description": "Defines a set of pods (namely those matching the labelSelector\nrelative to the given namespace(s)) that this pod should be\nco-located (affinity) or not co-located (anti-affinity) with,\nwhere co-located is defined as running on a node whose value of\nthe label with key <topologyKey> matches that of any node on which\na pod of the set of pods is running",
                        "properties": {
                          "labelSelector": {
                            "description": "A label query over a set of resources, in this case pods.\nIf it's null, this PodAffinityTerm matches with no Pods.",
                            "properties": {
                              "matchExpressions": {
                                "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                "items": {
                                  "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "key is the label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "matchLabelKeys": {
                            "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "mismatchLabelKeys": {
                            "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "namespaceSelector": {
                            "description": "A label query over the set of namespaces that the term applies to.\nThe term is applied to the union of the namespaces selected by this field\nand the ones listed in the namespaces field.\nnull selector and null or empty namespaces list means \"this pod's namespace\".\nAn empty selector ({}) matches all namespaces.",
                            "properties": {
                              "matchExpressions": {
                                "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                "items": {
                                  "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "key is the label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "namespaces": {
                            "description": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "topologyKey": {
                            "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching\nthe labelSelector in the specified namespaces, where co-located is defined as running on a node\nwhose value of the label with key topologyKey matches that of any node on which any of the\nselected pods is running.\nEmpty topologyKey is not allowed.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "topologyKey"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "overrideResourceRequirements": {
              "description": "OverrideResourceRequirements defines the limits, requests, and\nclaims of compute resources for a given container.",
              "nullable": true,
              "properties": {
                "claims": {
                  "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\n\nThis field depends on the\nDynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.",
                  "items": {
                    "description": "ResourceClaim references one entry in PodSpec.ResourceClaims.",
                    "properties": {
                      "name": {
                        "description": "Name must match the name of one entry in pod.spec.resourceClaims of\nthe Pod where this field is used. It makes that resource available\ninside a container.",
                        "type": "string"
                      },
                      "request": {
                        "description": "Request is the name chosen for a request in the referenced claim.\nIf empty, everything from the claim is made available, otherwise\nonly the result of this request.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array",
                  "x-kubernetes-list-map-keys": [
                    "name"
                  ],
                  "x-kubernetes-list-type": "map"
                },
                "limits": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ],
                    "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                    "x-kubernetes-int-or-string": true
                  },
                  "description": "Limits describes the maximum amount of compute resources allowed.\nMore info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
                  "type": "object"
                },
                "requests": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ],
                    "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                    "x-kubernetes-int-or-string": true
                  },
                  "description": "Requests describes the minimum amount of compute resources required.\nIf Requests is omitted for a container, it defaults to Limits if that is explicitly specified,\notherwise to an implementation-defined value. Requests cannot exceed Limits.\nMore info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "schedulingCustomization": {
              "description": "SchedulingCustomization is an optional configuration that will be\nused to override the agent deployment's scheduling customization.",
              "nullable": true,
              "properties": {
                "podDisruptionBudget": {
                  "description": "PodDisruptionBudget is the configuration for the pod disruption budget\nassociated with the agent deployment.",
                  "nullable": true,
                  "properties": {
                    "maxUnavailable": {
                      "description": "An eviction is allowed if at most \"maxUnavailable\" pods are\nunavailable after the eviction, i.e. even in the absence of the\nevicted pod.\nOne can prevent all voluntary evictions by specifying 0.\nThis is a mutually exclusive setting with \"minAvailable\".",
                      "maxLength": 10,
                      "nullable": true,
                      "pattern": "^((([1-9]|[1-9][0-9]|100)%)|([1-9][0-9]*|0)|)$",
                      "type": "string"
                    },
                    "minAvailable": {
                      "description": "An eviction is allowed if at least \"minAvailable\" will still be\navailable after the eviction, i.e. even in the absence of the evicted\npod.\nOne can prevent all voluntary evictions by specifying \"100%\".",
                      "maxLength": 10,
                      "nullable": true,
                      "pattern": "^((([1-9]|[1-9][0-9]|100)%)|([1-9][0-9]*|0)|)$",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "priorityClass": {
                  "description": "PriorityClass is the configuration for the priority class associated\nwith the agent deployment.",
                  "nullable": true,
                  "properties": {
                    "preemptionPolicy": {
                      "description": "PreemptionPolicy describes a policy for if/when to preempt a pod.",
                      "nullable": true,
                      "type": "string"
                    },
                    "value": {
                      "description": "Value represents the integer value of this priority class.\nThis is the actual priority value that pods receive when their\nassociated deployment specifies the name of this class in the spec.",
                      "maximum": 1000000000,
                      "minimum": -1000000000,
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "defaultClusterRoleForProjectMembers": {
          "description": "DefaultClusterRoleForProjectMembers is unused.\nDeprecated: this field is unused and will be removed in a future\nversion.",
          "nullable": true,
          "type": "string"
        },
        "defaultPodSecurityAdmissionConfigurationTemplateName": {
          "description": "DefaultPodSecurityAdmissionConfigurationTemplateName is the name of\nthe default psact to use when generating a pod security admissions\nconfig file for the cluster.\nThe rancher-webhook will generate a secret containing the rendered\nAdmissionConfiguration resource as yaml, and create a\nmachineSelectorFile at /etc/rancher/k3s/config/rancher-psact.yaml or\n/etc/rancher/rke2/config/rancher-psact.yaml for K3s and RKE2\nrespectively.",
          "nullable": true,
          "type": "string"
        },
        "enableNetworkPolicy": {
          "description": "EnableNetworkPolicy defines whether project network isolation is\nenabled, preventing inter-project communication.\nIt can be used with any network plugin that supports Kubernetes\nNetworkPolicy enforcement (e.g. canal, calico, cilium).\nHost network policies are only configured for RKE2 clusters using\nCalico; other CNIs apply host network policies using pod CIDRs.",
          "nullable": true,
          "type": "boolean"
        },
        "fleetAgentDeploymentCustomization": {
          "description": "FleetAgentDeploymentCustomization is the customization configuration\nto apply to the fleet agent deployment.",
          "nullable": true,
          "properties": {
            "appendTolerations": {
              "description": "AppendTolerations is a list of tolerations that will be appended to\nthe agent deployment.",
              "items": {
                "description": "The pod this Toleration is attached to tolerates any taint that matches\nthe triple <key,value,effect> using the matching operator <operator>.",
                "properties": {
                  "effect": {
                    "description": "Effect indicates the taint effect to match. Empty means match all taint effects.\nWhen specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.",
                    "type": "string"
                  },
                  "key": {
                    "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys.\nIf the key is empty, operator must be Exists; this combination means to match all values and all keys.",
                    "type": "string"
                  },
                  "operator": {
                    "description": "Operator represents a key's relationship to the value.\nValid operators are Exists and Equal. Defaults to Equal.\nExists is equivalent to wildcard for value, so that a pod can\ntolerate all taints of a particular category.",
                    "type": "string"
                  },
                  "tolerationSeconds": {
                    "description": "TolerationSeconds represents the period of time the toleration (which must be\nof effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,\nit is not set, which means tolerate the taint forever (do not evict). Zero and\nnegative values will be treated as 0 (evict immediately) by the system.",
                    "format": "int64",
                    "type": "integer"
                  },
                  "value": {
                    "description": "Value is the taint value the toleration matches to.\nIf the operator is Exists, the value should be empty, otherwise just a regular string.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "nullable": true,
              "type": "array"
            },
            "overrideAffinity": {
              "description": "OverrideAffinity is an affinity that will be used to override the\nagent deployment's affinity.",
              "nullable": true,
              "properties": {
                "nodeAffinity": {
                  "description": "Describes node affinity scheduling rules for the pod.",
                  "properties": {
                    "preferredDuringSchedulingIgnoredDuringExecution": {
                      "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node matches the corresponding matchExpressions; the\nnode(s) with the highest sum are the most preferred.",
                      "items": {
                        "description": "An empty preferred scheduling term matches all objects with implicit weight 0\n(i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).",
                        "properties": {
                          "preference": {
                            "description": "A node selector term, associated with the corresponding weight.",
                            "properties": {
                              "matchExpressions": {
                                "description": "A list of node selector requirements by node's labels.",
                                "items": {
                                  "description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "The label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "Represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchFields": {
                                "description": "A list of node selector requirements by node's fields.",
                                "items": {
                                  "description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "The label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "Represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "weight": {
                            "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.",
                            "format": "int32",
                            "type": "integer"
                          }
                        },
                        "required": [
                          "preference",
                          "weight"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    },
                    "requiredDuringSchedulingIgnoredDuringExecution": {
                      "description": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to an update), the system\nmay or may not try to eventually evict the pod from its node.",
                      "properties": {
                        "nodeSelectorTerms": {
                          "description": "Required. A list of node selector terms. The terms are ORed.",
                          "items": {
                            "description": "A null or empty node selector term matches no objects. The requirements of\nthem are ANDed.\nThe TopologySelectorTerm type implements a subset of the NodeSelectorTerm.",
                            "properties": {
                              "matchExpressions": {
                                "description": "A list of node selector requirements by node's labels.",
                                "items": {
                                  "description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "The label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "Represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchFields": {
                                "description": "A list of node selector requirements by node's fields.",
                                "items": {
                                  "description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "The label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "Represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "type": "array",
                          "x-kubernetes-list-type": "atomic"
                        }
                      },
                      "required": [
                        "nodeSelectorTerms"
                      ],
                      "type": "object",
                      "x-kubernetes-map-type": "atomic",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "podAffinity": {
                  "description": "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).",
                  "properties": {
                    "preferredDuringSchedulingIgnoredDuringExecution": {
                      "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.",
                      "items": {
                        "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)",
                        "properties": {
                          "podAffinityTerm": {
                            "description": "Required. A pod affinity term, associated with the corresponding weight.",
                            "properties": {
                              "labelSelector": {
                                "description": "A label query over a set of resources, in this case pods.\nIf it's null, this PodAffinityTerm matches with no Pods.",
                                "properties": {
                                  "matchExpressions": {
                                    "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                    "items": {
                                      "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                      "properties": {
                                        "key": {
                                          "description": "key is the label key that the selector applies to.",
                                          "type": "string"
                                        },
                                        "operator": {
                                          "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                          "type": "string"
                                        },
                                        "values": {
                                          "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "matchLabelKeys": {
                                "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "mismatchLabelKeys": {
                                "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "namespaceSelector": {
                                "description": "A label query over the set of namespaces that the term applies to.\nThe term is applied to the union of the namespaces selected by this field\nand the ones listed in the namespaces field.\nnull selector and null or empty namespaces list means \"this pod's namespace\".\nAn empty selector ({}) matches all namespaces.",
                                "properties": {
                                  "matchExpressions": {
                                    "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                    "items": {
                                      "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                      "properties": {
                                        "key": {
                                          "description": "key is the label key that the selector applies to.",
                                          "type": "string"
                                        },
                                        "operator": {
                                          "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                          "type": "string"
                                        },
                                        "values": {
                                          "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "namespaces": {
                                "description": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "topologyKey": {
                                "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching\nthe labelSelector in the specified namespaces, where co-located is defined as running on a node\nwhose value of the label with key topologyKey matches that of any node on which any of the\nselected pods is running.\nEmpty topologyKey is not allowed.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "topologyKey"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "weight": {
                            "description": "weight associated with matching the corresponding podAffinityTerm,\nin the range 1-100.",
                            "format": "int32",
                            "type": "integer"
                          }
                        },
                        "required": [
                          "podAffinityTerm",
                          "weight"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    },
                    "requiredDuringSchedulingIgnoredDuringExecution": {
                      "description": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.",
                      "items": {
                        "description": "Defines a set of pods (namely those matching the labelSelector\nrelative to the given namespace(s)) that this pod should be\nco-located (affinity) or not co-located (anti-affinity) with,\nwhere co-located is defined as running on a node whose value of\nthe label with key <topologyKey> matches that of any node on which\na pod of the set of pods is running",
                        "properties": {
                          "labelSelector": {
                            "description": "A label query over a set of resources, in this case pods.\nIf it's null, this PodAffinityTerm matches with no Pods.",
                            "properties": {
                              "matchExpressions": {
                                "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                "items": {
                                  "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "key is the label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "matchLabelKeys": {
                            "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "mismatchLabelKeys": {
                            "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "namespaceSelector": {
                            "description": "A label query over the set of namespaces that the term applies to.\nThe term is applied to the union of the namespaces selected by this field\nand the ones listed in the namespaces field.\nnull selector and null or empty namespaces list means \"this pod's namespace\".\nAn empty selector ({}) matches all namespaces.",
                            "properties": {
                              "matchExpressions": {
                                "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                "items": {
                                  "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "key is the label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "namespaces": {
                            "description": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "topologyKey": {
                            "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching\nthe labelSelector in the specified namespaces, where co-located is defined as running on a node\nwhose value of the label with key topologyKey matches that of any node on which any of the\nselected pods is running.\nEmpty topologyKey is not allowed.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "topologyKey"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "podAntiAffinity": {
                  "description": "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).",
                  "properties": {
                    "preferredDuringSchedulingIgnoredDuringExecution": {
                      "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe anti-affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling anti-affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and subtracting\n\"weight\" from the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.",
                      "items": {
                        "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)",
                        "properties": {
                          "podAffinityTerm": {
                            "description": "Required. A pod affinity term, associated with the corresponding weight.",
                            "properties": {
                              "labelSelector": {
                                "description": "A label query over a set of resources, in this case pods.\nIf it's null, this PodAffinityTerm matches with no Pods.",
                                "properties": {
                                  "matchExpressions": {
                                    "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                    "items": {
                                      "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                      "properties": {
                                        "key": {
                                          "description": "key is the label key that the selector applies to.",
                                          "type": "string"
                                        },
                                        "operator": {
                                          "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                          "type": "string"
                                        },
                                        "values": {
                                          "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "matchLabelKeys": {
                                "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "mismatchLabelKeys": {
                                "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "namespaceSelector": {
                                "description": "A label query over the set of namespaces that the term applies to.\nThe term is applied to the union of the namespaces selected by this field\nand the ones listed in the namespaces field.\nnull selector and null or empty namespaces list means \"this pod's namespace\".\nAn empty selector ({}) matches all namespaces.",
                                "properties": {
                                  "matchExpressions": {
                                    "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                    "items": {
                                      "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                      "properties": {
                                        "key": {
                                          "description": "key is the label key that the selector applies to.",
                                          "type": "string"
                                        },
                                        "operator": {
                                          "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                          "type": "string"
                                        },
                                        "values": {
                                          "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "namespaces": {
                                "description": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "topologyKey": {
                                "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching\nthe labelSelector in the specified namespaces, where co-located is defined as running on a node\nwhose value of the label with key topologyKey matches that of any node on which any of the\nselected pods is running.\nEmpty topologyKey is not allowed.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "topologyKey"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "weight": {
                            "description": "weight associated with matching the corresponding podAffinityTerm,\nin the range 1-100.",
                            "format": "int32",
                            "type": "integer"
                          }
                        },
                        "required": [
                          "podAffinityTerm",
                          "weight"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    },
                    "requiredDuringSchedulingIgnoredDuringExecution": {
                      "description": "If the anti-affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the anti-affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.",
                      "items": {
                        "description": "Defines a set of pods (namely those matching the labelSelector\nrelative to the given namespace(s)) that this pod should be\nco-located (affinity) or not co-located (anti-affinity) with,\nwhere co-located is defined as running on a node whose value of\nthe label with key <topologyKey> matches that of any node on which\na pod of the set of pods is running",
                        "properties": {
                          "labelSelector": {
                            "description": "A label query over a set of resources, in this case pods.\nIf it's null, this PodAffinityTerm matches with no Pods.",
                            "properties": {
                              "matchExpressions": {
                                "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                "items": {
                                  "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "key is the label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "matchLabelKeys": {
                            "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "mismatchLabelKeys": {
                            "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "namespaceSelector": {
                            "description": "A label query over the set of namespaces that the term applies to.\nThe term is applied to the union of the namespaces selected by this field\nand the ones listed in the namespaces field.\nnull selector and null or empty namespaces list means \"this pod's namespace\".\nAn empty selector ({}) matches all namespaces.",
                            "properties": {
                              "matchExpressions": {
                                "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                                "items": {
                                  "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                                  "properties": {
                                    "key": {
                                      "description": "key is the label key that the selector applies to.",
                                      "type": "string"
                                    },
                                    "operator": {
                                      "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                                      "type": "string"
                                    },
                                    "values": {
                                      "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "namespaces": {
                            "description": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "topologyKey": {
                            "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching\nthe labelSelector in the specified namespaces, where co-located is defined as running on a node\nwhose value of the label with key topologyKey matches that of any node on which any of the\nselected pods is running.\nEmpty topologyKey is not allowed.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "topologyKey"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "overrideResourceRequirements": {
              "description": "OverrideResourceRequirements defines the limits, requests, and\nclaims of compute resources for a given container.",
              "nullable": true,
              "properties": {
                "claims": {
                  "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\n\nThis field depends on the\nDynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.",
                  "items": {
                    "description": "ResourceClaim references one entry in PodSpec.ResourceClaims.",
                    "properties": {
                      "name": {
                        "description": "Name must match the name of one entry in pod.spec.resourceClaims of\nthe Pod where this field is used. It makes that resource available\ninside a container.",
                        "type": "string"
                      },
                      "request": {
                        "description": "Request is the name chosen for a request in the referenced claim.\nIf empty, everything from the claim is made available, otherwise\nonly the result of this request.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array",
                  "x-kubernetes-list-map-keys": [
                    "name"
                  ],
                  "x-kubernetes-list-type": "map"
                },
                "limits": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ],
                    "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                    "x-kubernetes-int-or-string": true
                  },
                  "description": "Limits describes the maximum amount of compute resources allowed.\nMore info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
                  "type": "object"
                },
                "requests": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ],
                    "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                    "x-kubernetes-int-or-string": true
                  },
                  "description": "Requests describes the minimum amount of compute resources required.\nIf Requests is omitted for a container, it defaults to Limits if that is explicitly specified,\notherwise to an implementation-defined value. Requests cannot exceed Limits.\nMore info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "schedulingCustomization": {
              "description": "SchedulingCustomization is an optional configuration that will be\nused to override the agent deployment's scheduling customization.",
              "nullable": true,
              "properties": {
                "podDisruptionBudget": {
                  "description": "PodDisruptionBudget is the configuration for the pod disruption budget\nassociated with the agent deployment.",
                  "nullable": true,
                  "properties": {
                    "maxUnavailable": {
                      "description": "An eviction is allowed if at most \"maxUnavailable\" pods are\nunavailable after the eviction, i.e. even in the absence of the\nevicted pod.\nOne can prevent all voluntary evictions by specifying 0.\nThis is a mutually exclusive setting with \"minAvailable\".",
                      "maxLength": 10,
                      "nullable": true,
                      "pattern": "^((([1-9]|[1-9][0-9]|100)%)|([1-9][0-9]*|0)|)$",
                      "type": "string"
                    },
                    "minAvailable": {
                      "description": "An eviction is allowed if at least \"minAvailable\" will still be\navailable after the eviction, i.e. even in the absence of the evicted\npod.\nOne can prevent all voluntary evictions by specifying \"100%\".",
                      "maxLength": 10,
                      "nullable": true,
                      "pattern": "^((([1-9]|[1-9][0-9]|100)%)|([1-9][0-9]*|0)|)$",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "priorityClass": {
                  "description": "PriorityClass is the configuration for the priority class associated\nwith the agent deployment.",
                  "nullable": true,
                  "properties": {
                    "preemptionPolicy": {
                      "description": "PreemptionPolicy describes a policy for if/when to preempt a pod.",
                      "nullable": true,
                      "type": "string"
                    },
                    "value": {
                      "description": "Value represents the integer value of this priority class.\nThis is the actual priority value that pods receive when their\nassociated deployment specifies the name of this class in the spec.",
                      "maximum": 1000000000,
                      "minimum": -1000000000,
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "kubernetesVersion": {
          "description": "KubernetesVersion is the desired version of RKE2/K3s for the cluster.\nThis field is only populated for provisioned and custom clusters.",
          "nullable": true,
          "type": "string"
        },
        "localClusterAuthEndpoint": {
          "description": "LocalClusterAuthEndpoint is the configuration for the local cluster\nauth endpoint.",
          "properties": {
            "caCerts": {
              "description": "CACerts is the CA certificate for the local cluster auth endpoint.",
              "nullable": true,
              "type": "string"
            },
            "enabled": {
              "description": "Enabled indicates whether the local cluster auth endpoint should be\nenabled.",
              "type": "boolean"
            },
            "fqdn": {
              "description": "FQDN is the fully qualified domain name of the local cluster auth\nendpoint.",
              "nullable": true,
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "redeploySystemAgentGeneration": {
          "description": "RedeploySystemAgentGeneration is used to force the redeployment of the\nsystem agent via the system-upgrade controller's system-agent-upgrader\nplan.\nNOTE: The cluster-agent must be connected to the Rancher server so the\nRancher server can update the system-upgrade-controller plan.",
          "format": "int64",
          "type": "integer"
        },
        "rkeConfig": {
          "description": "RKEConfig represents the desired state for machine configuration and\nday 2 operations.\nNOTE: This is only populated for provisioned and custom clusters.",
          "nullable": true,
          "properties": {
            "additionalManifest": {
              "description": "AdditionalManifest is a string containing a yaml blob to insert in the\n/var/lib/rancher/<rke2/k3s>/server/manifests/rancher/addons.yaml file.\nThe distro will automatically create these resources.\nResources created as additional manifests will be deleted if removed\nfrom additional manifests.",
              "nullable": true,
              "type": "string"
            },
            "chartValues": {
              "description": "ChartValues is a map whose keys correspond to charts to be installed\nby the distro, with values corresponding to the helm values\nconfigurable in the chart.",
              "nullable": true,
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "dataDirectories": {
              "description": "DataDirectories contains the configuration for the data directories\ntypically stored within /var/lib/rancher. The data directories must be\nconfigured via the provisioning cluster object and are immutable once\nset.",
              "properties": {
                "k8sDistro": {
                  "description": "K8sDistro is the data directory for the k8s distro, i.e. the data-dir\narg.",
                  "nullable": true,
                  "type": "string"
                },
                "provisioning": {
                  "description": "Provisioning is the data directory for provisioning related files\n(e.g. idempotency).",
                  "nullable": true,
                  "type": "string"
                },
                "systemAgent": {
                  "description": "SystemAgent is the data directory for the system-agent connection info\nand plans.",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "etcd": {
              "description": "ETCD contains the etcd snapshot configuration for the cluster.",
              "nullable": true,
              "properties": {
                "disableSnapshots": {
                  "description": "DisableSnapshots disables the creation of snapshots for the cluster.",
                  "type": "boolean"
                },
                "s3": {
                  "description": "S3 defines the S3 configuration for the cluster if enabled.",
                  "nullable": true,
                  "properties": {
                    "bucket": {
                      "description": "Bucket is the name of the S3 bucket used for snapshot operations.\nIf this field is not explicitly set, the 'defaultBucket' value from the referenced CloudCredential will be used.\nAn empty bucket name will cause a 'failed to initialize S3 client: s3 bucket name was not set' error.",
                      "maxLength": 63,
                      "nullable": true,
                      "type": "string"
                    },
                    "cloudCredentialName": {
                      "description": "CloudCredentialName is the name of the secret containing the\ncredentials used to access the S3 bucket.\nThe secret is expected to have the following keys:\n- accessKey [required]\n- secretKey [required]\n- defaultRegion\n- defaultEndpoint\n- defaultEndpointCA\n- defaultSkipSSLVerify\n- defaultBucket\n- defaultFolder\nFields set directly in this spec (`ETCDSnapshotS3`) take precedence over the corresponding\nvalues from the CloudCredential secret. This field must be in the format of \"namespace:name\".",
                      "nullable": true,
                      "type": "string"
                    },
                    "endpoint": {
                      "description": "Endpoint is the S3 endpoint used for snapshot operations.\nIf this field is not explicitly set, the 'defaultEndpoint' value from the referenced CloudCredential will be used.",
                      "nullable": true,
                      "type": "string"
                    },
                    "endpointCA": {
                      "description": "EndpointCA is the CA certificate for validating the S3 endpoint.\nThis can be either a file path (e.g., \"/etc/ssl/certs/my-ca.crt\")\nor the CA certificate content, in base64-encoded or plain PEM format.\nIf this field is not explicitly set, the 'defaultEndpointCA' value from the referenced CloudCredential will be used.",
                      "nullable": true,
                      "type": "string"
                    },
                    "folder": {
                      "description": "Folder is the name of the S3 folder used for snapshot operations.\nIf this field is not explicitly set, the folder from the referenced CloudCredential will be used.",
                      "nullable": true,
                      "type": "string"
                    },
                    "region": {
                      "description": "Region is the S3 region used for snapshot operations. (e.g., \"us-east-1\").\nIf this field is not explicitly set, the 'defaultRegion' value from the referenced CloudCredential will be used.",
                      "nullable": true,
                      "type": "string"
                    },
                    "skipSSLVerify": {
                      "description": "SkipSSLVerify defines whether TLS certificate verification is disabled.\nIf this field is not explicitly set, the 'defaultSkipSSLVerify' value\nfrom the referenced CloudCredential will be used.",
                      "type": "boolean"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "snapshotRetention": {
                  "description": "SnapshotRetention is the number of snapshots the downstream cluster\nshould retain per snapshot generation.",
                  "type": "integer"
                },
                "snapshotScheduleCron": {
                  "description": "SnapshotScheduleCron is the cron schedule for the snapshot creation.",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "etcdSnapshotCreate": {
              "description": "ETCDSnapshotCreate is the configuration for the etcd snapshot creation\noperation.",
              "nullable": true,
              "properties": {
                "generation": {
                  "description": "Generation is the current generation for which an etcd snapshot\ncreation operation has been requested.\nChanging the Generation is the only thing required to create a\nsnapshot.",
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "etcdSnapshotRestore": {
              "description": "ETCDSnapshotRestore is the configuration for the etcd snapshot restore\noperation.",
              "nullable": true,
              "properties": {
                "generation": {
                  "description": "Generation is the current generation for which an etcd snapshot\nrestore operation has been requested.\nChanging the Generation is the only thing required to initiate a\nsnapshot restore.",
                  "type": "integer"
                },
                "name": {
                  "description": "Name refers to the name of the associated etcdsnapshot object.",
                  "nullable": true,
                  "type": "string"
                },
                "restoreRKEConfig": {
                  "description": "Set to either none (or empty string), all, or kubernetesVersion",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "infrastructureRef": {
              "description": "InfrastructureRef is a reference to the infrastructure cluster object\nthat is required when provisioning a CAPI cluster.\nNOTE: in practice this will always be a rkecluster.rke.cattle.io.",
              "nullable": true,
              "properties": {
                "apiVersion": {
                  "description": "API version of the referent.",
                  "type": "string"
                },
                "fieldPath": {
                  "description": "If referring to a piece of an object instead of an entire object, this string\nshould contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].\nFor example, if the object reference is to a container within a pod, this would take on a value like:\n\"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered\nthe event) or if no container name is specified \"spec.containers[2]\" (container with\nindex 2 in this pod). This syntax is chosen only to have some well-defined way of\nreferencing a part of an object.",
                  "type": "string"
                },
                "kind": {
                  "description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
                  "type": "string"
                },
                "name": {
                  "description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                  "type": "string"
                },
                "namespace": {
                  "description": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
                  "type": "string"
                },
                "resourceVersion": {
                  "description": "Specific resourceVersion to which this reference is made, if any.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency",
                  "type": "string"
                },
                "uid": {
                  "description": "UID of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids",
                  "type": "string"
                }
              },
              "type": "object",
              "x-kubernetes-map-type": "atomic",
              "additionalProperties": false
            },
            "machineGlobalConfig": {
              "description": "MachineGlobalConfig is a list of distro arguments which will be copied\nto /etc/rancher/<rke2/k3s>/config.yaml.d/50-rancher.yaml for all\nmachines.",
              "nullable": true,
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "machinePoolDefaults": {
              "description": "MachinePoolDefaults is the default configuration for machine pools.\nThis configuration will be applied to all machine pools unless\noverridden by the machine pool configuration.",
              "properties": {
                "hostnameLengthLimit": {
                  "description": "HostnameLengthLimit defines the maximum length of the hostname for\nmachines in this pool.\nFor Windows nodes utilizing NETBIOS authentication, a maximum of 15\nshould be set to ensure all nodes adhere to the protocol's naming\nrequirements.",
                  "maximum": 63,
                  "minimum": 10,
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "machinePools": {
              "description": "MachinePools is a list of machine pools to be created in the\nprovisioning cluster.",
              "items": {
                "description": "RKEMachinePool is the configuration for a RKE2/K3s machine pool within a provisioning cluster.",
                "properties": {
                  "autoscalingMaxSize": {
                    "description": "AutoscalingMaxSize is the autoscaler max node size, this maps\nto the autoscaling annotations which are mapped to the CAPI machineDeployment object",
                    "format": "int32",
                    "nullable": true,
                    "type": "integer"
                  },
                  "autoscalingMinSize": {
                    "description": "AutoscalingMinSize is the autoscaler min node size, this maps\nto the autoscaling annotations which are mapped to the CAPI machineDeployment object",
                    "format": "int32",
                    "nullable": true,
                    "type": "integer"
                  },
                  "cloudCredentialSecretName": {
                    "description": "CloudCredentialSecretName is the id of the secret used to provision\nthe cluster.\nThis field must be in the format of \"namespace:name\".\nNOTE: this field overrides the field of the same name on the cluster\nspec, allowing individual machine pools to use separate credentials.",
                    "maxLength": 317,
                    "nullable": true,
                    "type": "string"
                  },
                  "controlPlaneRole": {
                    "description": "ControlPlaneRole defines whether the machines provisioned by this pool\nshould be controlplane nodes.",
                    "type": "boolean"
                  },
                  "displayName": {
                    "description": "DisplayName is the display name for the generated CAPI\nmachinedeployment object.\nDeprecated: this field is currently unused and will be removed in a\nfuture version.",
                    "nullable": true,
                    "type": "string"
                  },
                  "drainBeforeDelete": {
                    "description": "DrainBeforeDelete defines whether the machines provisioned by this\npool should be drained prior to deletion.",
                    "type": "boolean"
                  },
                  "drainBeforeDeleteTimeout": {
                    "description": "DrainBeforeDeleteTimeout defines the timeout for draining the machines\nprovisioned by this pool before deletion.",
                    "nullable": true,
                    "type": "string"
                  },
                  "dynamicSchemaSpec": {
                    "description": "DynamicSchemaSpec is a copy of the dynamic schema object's spec field\nat the time the machine pool was created.\nSince rancher-machine based MachineTemplates are not api-versioned,\nthis field is used to drop new fields added to the driver if it has\nbeen upgraded since initial provisioning.\nThis allows node drivers to be upgraded without triggering a\nreconciliation of the provisioning cluster.\nNOTE: This field can only be removed if the\n\"provisioning.cattle.io/allow-dynamic-schema-drop\" annotation is\npresent on the provisioning cluster object, otherwise it will be\nreinserted.",
                    "nullable": true,
                    "type": "string"
                  },
                  "etcdRole": {
                    "description": "EtcdRole defines whether the machines provisioned by this pool should\nbe etcd nodes.",
                    "type": "boolean"
                  },
                  "hostnameLengthLimit": {
                    "description": "HostnameLengthLimit defines the maximum length of the hostname for\nmachines in this pool.\nFor Windows nodes utilizing NETBIOS authentication, a maximum of 15\nshould be set to ensure all nodes adhere to the protocol's naming\nrequirements.",
                    "maximum": 63,
                    "minimum": 10,
                    "type": "integer"
                  },
                  "labels": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "Labels is a list of labels to apply to the machines created by the CAPI machine deployment.",
                    "nullable": true,
                    "type": "object"
                  },
                  "machineConfigRef": {
                    "description": "NodeConfig is a reference to a MachineConfig object that will be used\nto configure the machines provisioned by this pool.\nThe NodeConfig object will, in turn, be used to create a corresponding\nMachineTemplate object for the generated machine deployment.",
                    "nullable": true,
                    "properties": {
                      "apiVersion": {
                        "description": "API version of the referent.",
                        "type": "string"
                      },
                      "fieldPath": {
                        "description": "If referring to a piece of an object instead of an entire object, this string\nshould contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].\nFor example, if the object reference is to a container within a pod, this would take on a value like:\n\"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered\nthe event) or if no container name is specified \"spec.containers[2]\" (container with\nindex 2 in this pod). This syntax is chosen only to have some well-defined way of\nreferencing a part of an object.",
                        "type": "string"
                      },
                      "kind": {
                        "description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
                        "type": "string"
                      },
                      "name": {
                        "description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                        "type": "string"
                      },
                      "namespace": {
                        "description": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
                        "type": "string"
                      },
                      "resourceVersion": {
                        "description": "Specific resourceVersion to which this reference is made, if any.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency",
                        "type": "string"
                      },
                      "uid": {
                        "description": "UID of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids",
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "x-kubernetes-map-type": "atomic",
                    "additionalProperties": false
                  },
                  "machineDeploymentAnnotations": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "MachineDeploymentAnnotations are the annotations to add to the\ngenerated machine deployment.",
                    "nullable": true,
                    "type": "object"
                  },
                  "machineDeploymentLabels": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "MachineDeploymentLabels are the labels to add to the generated\nmachine deployment.",
                    "nullable": true,
                    "type": "object"
                  },
                  "machineOS": {
                    "description": "MachineOS is the operating system of the machines provisioned by this\npool.\nThis is only used to designate linux versus windows nodes.",
                    "nullable": true,
                    "type": "string"
                  },
                  "maxUnhealthy": {
                    "description": "MaxUnhealthy specifies the minimum number of unhealthy machines that a\nMachineHealthCheck can tolerate before remediating unhealthy machines.",
                    "nullable": true,
                    "type": "string"
                  },
                  "name": {
                    "description": "Name is the internal name of the machine pool.\nThe generated CAPI machine deployment will be a concatenation of the\ncluster name and the machine pool name which, if over 63 characters is\ntruncated to 54 with a sha256sum appended.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "nodeStartupTimeout": {
                    "description": "NodeStartupTimeout allows setting the maximum time for\nMachineHealthCheck to consider a Machine unhealthy if a corresponding\nNode isn't associated through a `Spec.ProviderID` field.\n\nThe duration set in this field is compared to the greatest of:\n- Cluster's infrastructure ready condition timestamp (if available)\n- Control Plane's initialized condition timestamp (if available)\n- Machine's infrastructure ready condition timestamp (if available)\n- Machine's metadata creation timestamp\n\nDefaults to 10 minutes.\nIf you wish to disable this feature, set the value explicitly to 0.",
                    "nullable": true,
                    "type": "string"
                  },
                  "paused": {
                    "description": "Paused indicates that the machine pool is paused, preventing CAPI\ncontrollers from reconciling it.\nNOTE: this only applies to the corresponding generated machine\ndeployment object, not the generated machines\nthemselves.",
                    "type": "boolean"
                  },
                  "quantity": {
                    "description": "Quantity is the desired number of machines in the machine pool.",
                    "format": "int32",
                    "minimum": 0,
                    "nullable": true,
                    "type": "integer"
                  },
                  "rollingUpdate": {
                    "description": "RollingUpdate is the configuration for the rolling update of the\ngenerated machine deployment.",
                    "nullable": true,
                    "properties": {
                      "maxSurge": {
                        "anyOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "string"
                          }
                        ],
                        "description": "MaxSurge is the maximum number of machines that can be scheduled above\nthe desired number of machines.\nValue can be an absolute number (ex: 5) or a percentage of desired\nmachines (ex: 10%).\nThis can not be 0 if MaxUnavailable is 0.\nAbsolute number is calculated from percentage by rounding up.\nDefaults to 1.\nExample: when this is set to 30%, the new MachineSet can be scaled\nup immediately when the rolling update starts, such that the total\nnumber of old and new machines do not exceed 130% of desired\nmachines. Once old machines have been killed, new MachineSet can\nbe scaled up further, ensuring that total number of machines running\nat any time during the update is at most 130% of desired machines.",
                        "nullable": true,
                        "x-kubernetes-int-or-string": true
                      },
                      "maxUnavailable": {
                        "anyOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "string"
                          }
                        ],
                        "description": "MaxUnavailable is the maximum number of machines that can be\nunavailable during the update.\nValue can be an absolute number (ex: 5) or a percentage of desired\nmachines (ex: 10%).\nAbsolute number is calculated from percentage by rounding down.\nThis can not be 0 if MaxSurge is 0.\nDefaults to 0.\nExample: when this is set to 30%, the old MachineSet can be scaled\ndown to 70% of desired machines immediately when the rolling update\nstarts. Once new machines are ready, old MachineSet can be scaled\ndown further, followed by scaling up the new MachineSet, ensuring\nthat the total number of machines available at all times\nduring the update is at least 70% of desired machines.",
                        "nullable": true,
                        "x-kubernetes-int-or-string": true
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "taints": {
                    "description": "Taints is a list of taints to apply to the machines created by the CAPI machine deployment.",
                    "items": {
                      "description": "The node this Taint is attached to has the \"effect\" on\nany pod that does not tolerate the Taint.",
                      "properties": {
                        "effect": {
                          "description": "Required. The effect of the taint on pods\nthat do not tolerate the taint.\nValid 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.",
                          "format": "date-time",
                          "type": "string"
                        },
                        "value": {
                          "description": "The taint value corresponding to the taint key.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "effect",
                        "key"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "nullable": true,
                    "type": "array"
                  },
                  "unhealthyNodeTimeout": {
                    "description": "UnhealthyNodeTimeout specifies the maximum duration a generated\nMachineHealthCheck should wait before marking a not ready machine as\nunhealthy.",
                    "nullable": true,
                    "type": "string"
                  },
                  "unhealthyRange": {
                    "description": "UnhealthyRange specifies the number of unhealthy machines in which a\nMachineHealthCheck is allowed to remediate.",
                    "nullable": true,
                    "type": "string"
                  },
                  "workerRole": {
                    "description": "WorkerRole defines whether the machines provisioned by this pool\nshould be worker nodes.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "machineConfigRef",
                  "name"
                ],
                "type": "object",
                "x-kubernetes-validations": [
                  {
                    "message": "AutoscalingMinSize must be greater than 0 when ControlPlaneRole is true",
                    "rule": "!has(self.controlPlaneRole) || !self.controlPlaneRole || !has(self.autoscalingMinSize) || self.autoscalingMinSize > 0"
                  },
                  {
                    "message": "AutoscalingMinSize must be greater than 0 when EtcdRole is true",
                    "rule": "!has(self.etcdRole) || !self.etcdRole || !has(self.autoscalingMinSize) || self.autoscalingMinSize > 0"
                  },
                  {
                    "message": "AutoscalingMinSize must be less than or equal to AutoscalingMaxSize when both are non-nil",
                    "rule": "!has(self.autoscalingMaxSize) || !has(self.autoscalingMinSize) || self.autoscalingMinSize <= self.autoscalingMaxSize"
                  },
                  {
                    "message": "AutoscalingMinSize and AutoscalingMaxSize must both be set if enabling cluster-autoscaling",
                    "rule": "(has(self.autoscalingMinSize) && has(self.autoscalingMaxSize)) || (!has(self.autoscalingMinSize) && !has(self.autoscalingMaxSize))"
                  }
                ],
                "additionalProperties": false
              },
              "maxItems": 1000,
              "nullable": true,
              "type": "array",
              "x-kubernetes-list-map-keys": [
                "name"
              ],
              "x-kubernetes-list-type": "map"
            },
            "machineSelectorConfig": {
              "description": "MachineSelectorConfig is a list of distro arguments which will be\ncopied to /etc/rancher/<rke2/k3s>/config.yaml.d/50-rancher.yaml if the\nmachine matches the label selector.",
              "items": {
                "properties": {
                  "config": {
                    "description": "Config is a map of distro arguments which will be copied to\n/etc/rancher/<rke2/k3s>/config.yaml.d/50-rancher.yaml if the machine\nmatches the label selector.",
                    "nullable": true,
                    "type": "object",
                    "x-kubernetes-preserve-unknown-fields": true
                  },
                  "machineLabelSelector": {
                    "description": "MachineLabelSelector is a label selector used to match machines.\nAn empty/null label selector matches all machines.",
                    "nullable": true,
                    "properties": {
                      "matchExpressions": {
                        "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                        "items": {
                          "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                          "properties": {
                            "key": {
                              "description": "key is the label key that the selector applies to.",
                              "type": "string"
                            },
                            "operator": {
                              "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                              "type": "string"
                            },
                            "values": {
                              "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                              "items": {
                                "type": "string"
                              },
                              "type": "array",
                              "x-kubernetes-list-type": "atomic"
                            }
                          },
                          "required": [
                            "key",
                            "operator"
                          ],
                          "type": "object",
                          "additionalProperties": false
                        },
                        "type": "array",
                        "x-kubernetes-list-type": "atomic"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                        "type": "object"
                      }
                    },
                    "type": "object",
                    "x-kubernetes-map-type": "atomic",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "nullable": true,
              "type": "array"
            },
            "machineSelectorFiles": {
              "description": "MachineSelectorFiles is a list of files which will be copied to the\nmachine if the machine matches the label selector.",
              "items": {
                "properties": {
                  "fileSources": {
                    "description": "FileSources is a list of file sources that will be copied to the\nmachine if the machine matches the label selector.",
                    "items": {
                      "properties": {
                        "configMap": {
                          "description": "ConfigMap is the configuration for mapping a configmap containing\narbitrary data to a series of files on the system-agent host.",
                          "properties": {
                            "defaultPermissions": {
                              "description": "DefaultPermissions provides a fallback value for all files within the\nconfigmap/secret.",
                              "nullable": true,
                              "type": "string"
                            },
                            "items": {
                              "description": "Items is a list of mappings from the keys within the resource to the\nfiles to create on the downstream machine.",
                              "items": {
                                "properties": {
                                  "dynamic": {
                                    "description": "Dynamic indicates whether the rendered file should be included when\ncalculating the restart stamp i.e. whether changes to this resource\nshould trigger draining when reconciling.",
                                    "type": "boolean"
                                  },
                                  "hash": {
                                    "description": "Hash is used to ensure that the data within the configmap or secret\nmatches the expected sha256sum of the value at the provided key.",
                                    "nullable": true,
                                    "type": "string"
                                  },
                                  "key": {
                                    "description": "Key is the key used to index the associated configmap or secret.",
                                    "nullable": true,
                                    "type": "string"
                                  },
                                  "path": {
                                    "description": "Path is the absolute path the data within the configmap or secret\nshould be written to by the system-agent.",
                                    "nullable": true,
                                    "type": "string"
                                  },
                                  "permissions": {
                                    "description": "Permissions specifies the desired permissions for this file on the\nmachine's filesystem.",
                                    "nullable": true,
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "key",
                                  "path"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "nullable": true,
                              "type": "array"
                            },
                            "name": {
                              "description": "Name is the name of the resource.\nThe namespace is required to be the same as the related\nRKEControlPlane object.",
                              "maxLength": 253,
                              "nullable": true,
                              "type": "string"
                            }
                          },
                          "required": [
                            "name"
                          ],
                          "type": "object",
                          "additionalProperties": false
                        },
                        "secret": {
                          "description": "Secret is the configuration for mapping a secret containing arbitrary\ndata to a series of files on the system-agent host.",
                          "properties": {
                            "defaultPermissions": {
                              "description": "DefaultPermissions provides a fallback value for all files within the\nconfigmap/secret.",
                              "nullable": true,
                              "type": "string"
                            },
                            "items": {
                              "description": "Items is a list of mappings from the keys within the resource to the\nfiles to create on the downstream machine.",
                              "items": {
                                "properties": {
                                  "dynamic": {
                                    "description": "Dynamic indicates whether the rendered file should be included when\ncalculating the restart stamp i.e. whether changes to this resource\nshould trigger draining when reconciling.",
                                    "type": "boolean"
                                  },
                                  "hash": {
                                    "description": "Hash is used to ensure that the data within the configmap or secret\nmatches the expected sha256sum of the value at the provided key.",
                                    "nullable": true,
                                    "type": "string"
                                  },
                                  "key": {
                                    "description": "Key is the key used to index the associated configmap or secret.",
                                    "nullable": true,
                                    "type": "string"
                                  },
                                  "path": {
                                    "description": "Path is the absolute path the data within the configmap or secret\nshould be written to by the system-agent.",
                                    "nullable": true,
                                    "type": "string"
                                  },
                                  "permissions": {
                                    "description": "Permissions specifies the desired permissions for this file on the\nmachine's filesystem.",
                                    "nullable": true,
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "key",
                                  "path"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "nullable": true,
                              "type": "array"
                            },
                            "name": {
                              "description": "Name is the name of the resource.\nThe namespace is required to be the same as the related\nRKEControlPlane object.",
                              "maxLength": 253,
                              "nullable": true,
                              "type": "string"
                            }
                          },
                          "required": [
                            "name"
                          ],
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "nullable": true,
                    "type": "array"
                  },
                  "machineLabelSelector": {
                    "description": "MachineLabelSelector is a label selector used to match machines.\nAn empty/null label selector matches all machines.",
                    "nullable": true,
                    "properties": {
                      "matchExpressions": {
                        "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
                        "items": {
                          "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                          "properties": {
                            "key": {
                              "description": "key is the label key that the selector applies to.",
                              "type": "string"
                            },
                            "operator": {
                              "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                              "type": "string"
                            },
                            "values": {
                              "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                              "items": {
                                "type": "string"
                              },
                              "type": "array",
                              "x-kubernetes-list-type": "atomic"
                            }
                          },
                          "required": [
                            "key",
                            "operator"
                          ],
                          "type": "object",
                          "additionalProperties": false
                        },
                        "type": "array",
                        "x-kubernetes-list-type": "atomic"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                        "type": "object"
                      }
                    },
                    "type": "object",
                    "x-kubernetes-map-type": "atomic",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "nullable": true,
              "type": "array"
            },
            "networking": {
              "description": "Networking contains information regarding the desired networking stack\nof the cluster.",
              "nullable": true,
              "properties": {
                "stackPreference": {
                  "description": "StackPreference specifies which networking stack to prefer for\nexternal cluster communication.\nIn practice, this is used by the planner to render the various probes\nto force IPv4, IPv6, or default to localhost.\nThere is currently no sanitization or validation as cluster\nconfiguration can be specified with machineGlobalConfig and\nmachineSelectorConfig, which although easy to instrument to determine\na potential interface, user defined configuration can be specified in\nthe `/etc/rancher/<rke2/k3s>/config.yaml.d` directory either manually\nor via cloud-init, and there is currently no mechanism to extract the\ncompletely rendered configuration via the planner nor various engines\nthemselves.",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "provisionGeneration": {
              "description": "ProvisionGeneration is used to force the planner to reconcile the\ncluster, regardless of whether a reconciliation is required.",
              "type": "integer"
            },
            "registries": {
              "description": "Registries is the list of mirrors and configurations for the cluster's\ncontainer registries.",
              "nullable": true,
              "properties": {
                "configs": {
                  "additionalProperties": {
                    "description": "RegistryConfig contains configuration used to communicate with the registry.",
                    "properties": {
                      "authConfigSecretName": {
                        "description": "AuthConfigSecretName contains information to authenticate to the\nregistry.\nThe accepted keys are as follows:\n- username\n- password\n- auth\n- identityToken",
                        "maxLength": 253,
                        "nullable": true,
                        "type": "string"
                      },
                      "caBundle": {
                        "description": "CABundle is the CA chain used when communicating with the image\nregistry.",
                        "format": "byte",
                        "nullable": true,
                        "type": "string"
                      },
                      "insecureSkipVerify": {
                        "description": "InsecureSkipVerify indicates whether validation of the server's\ncertificate should be skipped.",
                        "type": "boolean"
                      },
                      "tlsSecretName": {
                        "description": "TLSSecretName is the name of the secret residing within the same\nnamespace as the RKEControlPlane object that contains the keys \"Cert\"\nand \"Key\" which are used when creating the transport that communicates\nwith the registry.",
                        "maxLength": 253,
                        "nullable": true,
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "description": "Configs are configs for each registry.\nThe key is the FDQN or IP of the registry.",
                  "nullable": true,
                  "type": "object"
                },
                "mirrors": {
                  "additionalProperties": {
                    "description": "Mirror contains the config related to the registry mirror",
                    "properties": {
                      "endpoint": {
                        "description": "Endpoints are endpoints for a namespace. CRI plugin will try the\nendpoints one by one until a working one is found.\nThe endpoint must be a valid url with host specified.\nThe scheme, host, and path from the endpoint URL will be used.",
                        "items": {
                          "type": "string"
                        },
                        "nullable": true,
                        "type": "array"
                      },
                      "rewrite": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "Rewrites are repository rewrite rules for a Mirror.\nWhen fetching image resources from a registry, a regular expression\ncan be used to match the image name and modify it using\nthe corresponding value from the map in the resource request.",
                        "nullable": true,
                        "type": "object"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "description": "Mirrors are namespace to mirror mapping for all namespaces.",
                  "nullable": true,
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "rotateCertificates": {
              "description": "RotateCertificates is the configuration for the certificate rotation\noperation.",
              "nullable": true,
              "properties": {
                "generation": {
                  "description": "Generation is the current generation for which a certificate rotation\noperation has been requested.\nChanging the Generation is the only thing required to initiate a\ncertificate rotation.",
                  "format": "int64",
                  "type": "integer"
                },
                "services": {
                  "description": "Services is a list of services to rotate certificates for.\nIf the list is empty, all services will be rotated.",
                  "items": {
                    "type": "string"
                  },
                  "nullable": true,
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "rotateEncryptionKeys": {
              "description": "RotateEncryptionKeys is the configuration for the encryption key\nrotation operation.",
              "nullable": true,
              "properties": {
                "generation": {
                  "description": "Generation is the current generation for which an encryption key\nrotation operation has been requested.\nChanging the Generation is the only thing required to rotate\nencryption keys.",
                  "format": "int64",
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "upgradeStrategy": {
              "description": "UpgradeStrategy contains the concurrency and drain configuration to be\nused when upgrading machine pools of servers and agents.",
              "properties": {
                "controlPlaneConcurrency": {
                  "description": "ControlPlaneConcurrency is the number of server nodes that should be\nupgraded at a time.\nThe default value is 1, a 0 value is infinite.\nPercentages are also accepted.",
                  "maxLength": 10,
                  "nullable": true,
                  "pattern": "^((([1-9]|[1-9][0-9]|100)%)|([1-9][0-9]*|0)|)$",
                  "type": "string"
                },
                "controlPlaneDrainOptions": {
                  "description": "ControlPlaneDrainOptions is the drain configuration to be used when\ndraining controlplane nodes, during both upgrades and machine\nrollouts.",
                  "properties": {
                    "deleteEmptyDirData": {
                      "description": "DeleteEmptyDirData instructs the drain operation to proceed even if\nthere are pods using emptyDir.",
                      "type": "boolean"
                    },
                    "disableEviction": {
                      "description": "DisableEviction forces drain to use delete rather than evict.",
                      "type": "boolean"
                    },
                    "enabled": {
                      "description": "Enabled specifies whether draining is required for the machine pool\nbefore upgrading.",
                      "type": "boolean"
                    },
                    "force": {
                      "description": "Force specifies whether to drain the node even if there are pods not\nmanaged by a ReplicationController, Job, or DaemonSet.\nDrain will not proceed without Force set to true if there are such\npods.",
                      "type": "boolean"
                    },
                    "gracePeriod": {
                      "description": "GracePeriod is the period of time in seconds given to each pod to\nterminate gracefully.\nIf negative, the default value specified in the pod will be used.",
                      "type": "integer"
                    },
                    "ignoreDaemonSets": {
                      "description": "IgnoreDaemonSets specifies whether to ignore DaemonSet-managed pods.\nIf there are DaemonSet-managed pods, drain will not proceed without\nIgnoreDaemonSets set to true (even when set to true, kubectl won't\ndelete pods - so an unset value will default to true).",
                      "nullable": true,
                      "type": "boolean"
                    },
                    "ignoreErrors": {
                      "description": "IgnoreErrors Ignore errors occurred between drain nodes in group\nNOTE: currently unimplemented",
                      "type": "boolean"
                    },
                    "postDrainHooks": {
                      "description": "PostDrainHooks is a list of hooks to run after draining and updating\na node.",
                      "items": {
                        "properties": {
                          "annotation": {
                            "description": "Annotation that will need to be populated on the machine-plan secret\nwith the value from the annotation \"rke.cattle.io/pre-drain\" before\nthe planner will continue to drain the specific node.\nThe annotation \"rke.cattle.io/pre-drain\" is used for pre-drain and\n\"rke.cattle.io/post-drain\" is used for post-drain.",
                            "maxLength": 317,
                            "nullable": true,
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "nullable": true,
                      "type": "array"
                    },
                    "preDrainHooks": {
                      "description": "PreDrainHooks is a list of hooks to run before draining a node.",
                      "items": {
                        "properties": {
                          "annotation": {
                            "description": "Annotation that will need to be populated on the machine-plan secret\nwith the value from the annotation \"rke.cattle.io/pre-drain\" before\nthe planner will continue to drain the specific node.\nThe annotation \"rke.cattle.io/pre-drain\" is used for pre-drain and\n\"rke.cattle.io/post-drain\" is used for post-drain.",
                            "maxLength": 317,
                            "nullable": true,
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "nullable": true,
                      "type": "array"
                    },
                    "skipWaitForDeleteTimeoutSeconds": {
                      "description": "SkipWaitForDeleteTimeoutSeconds defines how long the draining\noperation should wait for a given to be removed after deletion.\nIf the pod's DeletionTimestamp is older than N seconds, the drain\noperation will move on.\nSeconds must be greater than 0 to skip.",
                      "type": "integer"
                    },
                    "timeout": {
                      "description": "Timeout is the time to wait (in seconds) before giving up for one try.",
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "workerConcurrency": {
                  "description": "WorkerConcurrency is the number of worker nodes that should be\nupgraded at a time.\nThe default value is 1, a 0 value is infinite.\nPercentages are also accepted.",
                  "maxLength": 10,
                  "nullable": true,
                  "pattern": "^((([1-9]|[1-9][0-9]|100)%)|([1-9][0-9]*|0)|)$",
                  "type": "string"
                },
                "workerDrainOptions": {
                  "description": "WorkerDrainOptions is the drain configuration to be used when draining\nworker nodes, during both upgrades and machine rollouts.",
                  "properties": {
                    "deleteEmptyDirData": {
                      "description": "DeleteEmptyDirData instructs the drain operation to proceed even if\nthere are pods using emptyDir.",
                      "type": "boolean"
                    },
                    "disableEviction": {
                      "description": "DisableEviction forces drain to use delete rather than evict.",
                      "type": "boolean"
                    },
                    "enabled": {
                      "description": "Enabled specifies whether draining is required for the machine pool\nbefore upgrading.",
                      "type": "boolean"
                    },
                    "force": {
                      "description": "Force specifies whether to drain the node even if there are pods not\nmanaged by a ReplicationController, Job, or DaemonSet.\nDrain will not proceed without Force set to true if there are such\npods.",
                      "type": "boolean"
                    },
                    "gracePeriod": {
                      "description": "GracePeriod is the period of time in seconds given to each pod to\nterminate gracefully.\nIf negative, the default value specified in the pod will be used.",
                      "type": "integer"
                    },
                    "ignoreDaemonSets": {
                      "description": "IgnoreDaemonSets specifies whether to ignore DaemonSet-managed pods.\nIf there are DaemonSet-managed pods, drain will not proceed without\nIgnoreDaemonSets set to true (even when set to true, kubectl won't\ndelete pods - so an unset value will default to true).",
                      "nullable": true,
                      "type": "boolean"
                    },
                    "ignoreErrors": {
                      "description": "IgnoreErrors Ignore errors occurred between drain nodes in group\nNOTE: currently unimplemented",
                      "type": "boolean"
                    },
                    "postDrainHooks": {
                      "description": "PostDrainHooks is a list of hooks to run after draining and updating\na node.",
                      "items": {
                        "properties": {
                          "annotation": {
                            "description": "Annotation that will need to be populated on the machine-plan secret\nwith the value from the annotation \"rke.cattle.io/pre-drain\" before\nthe planner will continue to drain the specific node.\nThe annotation \"rke.cattle.io/pre-drain\" is used for pre-drain and\n\"rke.cattle.io/post-drain\" is used for post-drain.",
                            "maxLength": 317,
                            "nullable": true,
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "nullable": true,
                      "type": "array"
                    },
                    "preDrainHooks": {
                      "description": "PreDrainHooks is a list of hooks to run before draining a node.",
                      "items": {
                        "properties": {
                          "annotation": {
                            "description": "Annotation that will need to be populated on the machine-plan secret\nwith the value from the annotation \"rke.cattle.io/pre-drain\" before\nthe planner will continue to drain the specific node.\nThe annotation \"rke.cattle.io/pre-drain\" is used for pre-drain and\n\"rke.cattle.io/post-drain\" is used for post-drain.",
                            "maxLength": 317,
                            "nullable": true,
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "nullable": true,
                      "type": "array"
                    },
                    "skipWaitForDeleteTimeoutSeconds": {
                      "description": "SkipWaitForDeleteTimeoutSeconds defines how long the draining\noperation should wait for a given to be removed after deletion.\nIf the pod's DeletionTimestamp is older than N seconds, the drain\noperation will move on.\nSeconds must be greater than 0 to skip.",
                      "type": "integer"
                    },
                    "timeout": {
                      "description": "Timeout is the time to wait (in seconds) before giving up for one try.",
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "Status is the observed state of the cluster.",
      "properties": {
        "agentDeployed": {
          "description": "AgentDeployed reflects whether the cluster agent has been deployed\nsuccessfully.",
          "type": "boolean"
        },
        "clientSecretName": {
          "description": "ClientSecretName is the name of the kubeconfig secret that is used to\nconnect to the cluster.\nThis secret is typically named \"<cluster-name>-kubeconfig\" and lives\nin the namespace of the cluster object.",
          "maxLength": 253,
          "type": "string"
        },
        "clusterName": {
          "description": "Name of the cluster.management.cattle.io object that relates to this\ncluster.",
          "type": "string"
        },
        "conditions": {
          "description": "Conditions is a representation of the Cluster's current state.",
          "items": {
            "properties": {
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.",
                "type": "string"
              },
              "lastUpdateTime": {
                "description": "The last time this condition was updated.",
                "type": "string"
              },
              "message": {
                "description": "Human-readable message indicating details about last transition",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type of cluster condition.",
                "type": "string"
              }
            },
            "required": [
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array",
          "x-kubernetes-list-map-keys": [
            "type"
          ],
          "x-kubernetes-list-type": "map"
        },
        "fleetWorkspaceName": {
          "description": "FleetWorkspaceName is the name of the fleet workspace that the cluster\nbelongs to.\nDefaults to the namespace of the cluster object, which is usually\n\"fleet-default\".\nIf the provisioningv2-fleet-workspace-back-population feature is\nenabled and the cluster has the\n\"provisioning.cattle.io/fleet-workspace-name\" annotation, this will be\nset to the value of the annotation.",
          "maxLength": 63,
          "type": "string"
        },
        "observedGeneration": {
          "description": "ObservedGeneration is the most recent generation for which the\nmanagement cluster object was generated for the corresponding\nprovisioning cluster spec.",
          "format": "int64",
          "type": "integer"
        },
        "ready": {
          "description": "Ready reflects whether the cluster's ready state has previously been\nreported as true.",
          "type": "boolean"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
