{
  "description": "Installation configures an installation of Calico or Calico Enterprise. At most one instance\nof this resource is supported. It must be named \"default\". The Installation API installs core networking\nand network policy components, and provides general install-time configuration.",
  "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": "Specification of the desired state for the Calico or Calico Enterprise installation.",
      "properties": {
        "azure": {
          "description": "Azure is used to configure azure provider specific options.",
          "properties": {
            "policyMode": {
              "default": "Default",
              "description": "PolicyMode determines whether the \"control-plane\" label is applied to namespaces. It offers two options: Default and Manual.\nThe Default option adds the \"control-plane\" label to the required namespaces.\nThe Manual option does not apply the \"control-plane\" label to any namespace.\nDefault: Default",
              "enum": [
                "Default",
                "Manual"
              ],
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "calicoKubeControllersDeployment": {
          "description": "CalicoKubeControllersDeployment configures the calico-kube-controllers Deployment. If used in\nconjunction with the deprecated ComponentResources, then these overrides take precedence.",
          "properties": {
            "metadata": {
              "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the Deployment.",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                  "type": "object"
                },
                "labels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "spec": {
              "description": "Spec is the specification of the calico-kube-controllers Deployment.",
              "properties": {
                "minReadySeconds": {
                  "description": "MinReadySeconds is the minimum number of seconds for which a newly created Deployment pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the calico-kube-controllers Deployment.\nIf omitted, the calico-kube-controllers Deployment will use its default value for minReadySeconds.",
                  "format": "int32",
                  "maximum": 2147483647,
                  "minimum": 0,
                  "type": "integer"
                },
                "template": {
                  "description": "Template describes the calico-kube-controllers Deployment pod that will be created.",
                  "properties": {
                    "metadata": {
                      "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                      "properties": {
                        "annotations": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                          "type": "object"
                        },
                        "labels": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                          "type": "object"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "spec": {
                      "description": "Spec is the calico-kube-controllers Deployment's PodSpec.",
                      "properties": {
                        "affinity": {
                          "description": "Affinity is a group of affinity scheduling rules for the calico-kube-controllers pods.\nIf specified, this overrides any affinity that may be set on the calico-kube-controllers Deployment.\nIf omitted, the calico-kube-controllers Deployment will use its default value for affinity.\nWARNING: Please note that this field will override the default calico-kube-controllers Deployment affinity.",
                          "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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
                        },
                        "containers": {
                          "description": "Containers is a list of calico-kube-controllers containers.\nIf specified, this overrides the specified calico-kube-controllers Deployment containers.\nIf omitted, the calico-kube-controllers Deployment will use its default values for its containers.",
                          "items": {
                            "description": "CalicoKubeControllersDeploymentContainer is a calico-kube-controllers Deployment container.",
                            "properties": {
                              "name": {
                                "description": "Name is an enum which identifies the calico-kube-controllers Deployment container by name.\nSupported values are: calico-kube-controllers, es-calico-kube-controllers",
                                "enum": [
                                  "calico-kube-controllers",
                                  "es-calico-kube-controllers"
                                ],
                                "type": "string"
                              },
                              "resources": {
                                "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-kube-controllers Deployment container's resources.\nIf omitted, the calico-kube-controllers Deployment will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                "properties": {
                                  "claims": {
                                    "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "nodeSelector": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "NodeSelector is the calico-kube-controllers pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the calico-kube-controllers Deployment nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf used in conjunction with ControlPlaneNodeSelector, that nodeSelector is set on the calico-kube-controllers Deployment\nand each of this field's key/value pairs are added to the calico-kube-controllers Deployment nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the calico-kube-controllers Deployment will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default calico-kube-controllers Deployment nodeSelector.",
                          "type": "object"
                        },
                        "tolerations": {
                          "description": "Tolerations is the calico-kube-controllers pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the calico-kube-controllers Deployment.\nIf omitted, the calico-kube-controllers Deployment will use its default value for tolerations.\nWARNING: Please note that this field will override the default calico-kube-controllers Deployment tolerations.",
                          "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
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "calicoNetwork": {
          "description": "CalicoNetwork specifies networking configuration options for Calico.",
          "properties": {
            "bgp": {
              "description": "BGP configures whether or not to enable Calico's BGP capabilities.",
              "enum": [
                "Enabled",
                "Disabled"
              ],
              "type": "string"
            },
            "bpfNetworkBootstrap": {
              "description": "BPFNetworkBootstrap manages the initial networking setup required to configure the BPF dataplane.\nWhen enabled, the operator tries to bootstraps access to the Kubernetes API Server\nby using the Kubernetes service and its associated endpoints.\nThis field should be enabled only if linuxDataplane is set to \"BPF\".\nIf another dataplane is selected, this field must be omitted or explicitly set to Disabled.\nWhen disabled and linuxDataplane is BPF, you must manually provide the Kubernetes API Server\ninformation via the \"kubernetes-service-endpoint\" ConfigMap. It is invalid to use both the ConfigMap\nand have this field set to true at the same time.\nDefault: Disabled",
              "enum": [
                "Disabled",
                "Enabled"
              ],
              "type": "string"
            },
            "containerIPForwarding": {
              "description": "ContainerIPForwarding configures whether ip forwarding will be enabled for containers in the CNI configuration.\nDefault: Disabled",
              "enum": [
                "Enabled",
                "Disabled"
              ],
              "type": "string"
            },
            "hostPorts": {
              "description": "HostPorts configures whether or not Calico will support Kubernetes HostPorts. Valid only when using the Calico CNI plugin.\nDefault: Enabled",
              "enum": [
                "Enabled",
                "Disabled"
              ],
              "type": "string"
            },
            "ipPools": {
              "description": "IPPools contains a list of IP pools to manage. If nil, a single IPv4 IP pool\nwill be created by the operator. If an empty list is provided, the operator will not create any IP pools and will instead\nwait for IP pools to be created out-of-band.\nIP pools in this list will be reconciled by the operator and should not be modified out-of-band.",
              "items": {
                "properties": {
                  "allowedUses": {
                    "description": "AllowedUse controls what the IP pool will be used for.  If not specified or empty, defaults to\n[\"Tunnel\", \"Workload\"] for back-compatibility",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "assignmentMode": {
                    "description": "AssignmentMode determines if IP addresses from this pool should be  assigned automatically or on request only",
                    "type": "string"
                  },
                  "blockSize": {
                    "description": "BlockSize specifies the CIDR prefex length to use when allocating per-node IP blocks from\nthe main IP pool CIDR.\nDefault: 26 (IPv4), 122 (IPv6)",
                    "format": "int32",
                    "type": "integer"
                  },
                  "cidr": {
                    "description": "CIDR contains the address range for the IP Pool in classless inter-domain routing format.",
                    "type": "string"
                  },
                  "disableBGPExport": {
                    "default": false,
                    "description": "DisableBGPExport specifies whether routes from this IP pool's CIDR are exported over BGP.\nDefault: false",
                    "type": "boolean"
                  },
                  "disableNewAllocations": {
                    "description": "DisableNewAllocations specifies whether or not new IP allocations are allowed from this pool.\nThis is useful when you want to prevent new pods from receiving IP addresses from this pool, without\nimpacting any existing pods that have already been assigned addresses from this pool.",
                    "type": "boolean"
                  },
                  "encapsulation": {
                    "description": "Encapsulation specifies the encapsulation type that will be used with\nthe IP Pool.\nDefault: IPIP",
                    "enum": [
                      "IPIPCrossSubnet",
                      "IPIP",
                      "VXLAN",
                      "VXLANCrossSubnet",
                      "None"
                    ],
                    "type": "string"
                  },
                  "name": {
                    "description": "Name is the name of the IP pool. If omitted, this will be generated.",
                    "type": "string"
                  },
                  "natOutgoing": {
                    "description": "NATOutgoing specifies if NAT will be enabled or disabled for outgoing traffic.\nDefault: Enabled",
                    "enum": [
                      "Enabled",
                      "Disabled"
                    ],
                    "type": "string"
                  },
                  "nodeSelector": {
                    "description": "NodeSelector specifies the node selector that will be set for the IP Pool.\nDefault: 'all()'",
                    "type": "string"
                  }
                },
                "required": [
                  "cidr"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "maxItems": 25,
              "type": "array"
            },
            "kubeProxyManagement": {
              "description": "KubeProxyManagement controls whether the operator manages the kube-proxy DaemonSet.\nWhen enabled, the operator will manage the DaemonSet by patching it:\nit disables kube-proxy if the dataplane is BPF, or enables it otherwise.\nDefault: Disabled",
              "enum": [
                "Disabled",
                "Enabled"
              ],
              "type": "string"
            },
            "linuxDataplane": {
              "description": "LinuxDataplane is used to select the dataplane used for Linux nodes. In particular, it\ncauses the operator to add required mounts and environment variables for the particular dataplane.\nIf not specified, iptables mode is used.\nDefault: Iptables",
              "enum": [
                "Iptables",
                "BPF",
                "VPP",
                "Nftables"
              ],
              "type": "string"
            },
            "linuxPolicySetupTimeoutSeconds": {
              "description": "LinuxPolicySetupTimeoutSeconds delays new pods from running containers\nuntil their policy has been programmed in the dataplane.\nThe specified delay defines the maximum amount of time\nthat the Calico CNI plugin will wait for policy to be programmed.\nOnly applies to pods created on Linux nodes.\n* A value of 0 disables pod startup delays.\nDefault: 0",
              "format": "int32",
              "type": "integer"
            },
            "mtu": {
              "description": "MTU specifies the maximum transmission unit to use on the pod network.\nIf not specified, Calico will perform MTU auto-detection based on the cluster network.",
              "format": "int32",
              "type": "integer"
            },
            "multiInterfaceMode": {
              "description": "MultiInterfaceMode configures what will configure multiple interface per pod. Only valid for Calico Enterprise installations\nusing the Calico CNI plugin.\nDefault: None",
              "enum": [
                "None",
                "Multus"
              ],
              "type": "string"
            },
            "nodeAddressAutodetectionV4": {
              "description": "NodeAddressAutodetectionV4 specifies an approach to automatically detect node IPv4 addresses. If not specified,\nwill use default auto-detection settings to acquire an IPv4 address for each node.",
              "properties": {
                "canReach": {
                  "description": "CanReach enables IP auto-detection based on which source address on the node is used to reach the\nspecified IP or domain.",
                  "type": "string"
                },
                "cidrs": {
                  "description": "CIDRS enables IP auto-detection based on which addresses on the nodes are within\none of the provided CIDRs.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "firstFound": {
                  "description": "FirstFound uses default interface matching parameters to select an interface, performing best-effort\nfiltering based on well-known interface names.",
                  "type": "boolean"
                },
                "interface": {
                  "description": "Interface enables IP auto-detection based on interfaces that match the given regex.",
                  "type": "string"
                },
                "kubernetes": {
                  "description": "Kubernetes configures Calico to detect node addresses based on the Kubernetes API.",
                  "enum": [
                    "NodeInternalIP"
                  ],
                  "type": "string"
                },
                "skipInterface": {
                  "description": "SkipInterface enables IP auto-detection based on interfaces that do not match\nthe given regex.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "nodeAddressAutodetectionV6": {
              "description": "NodeAddressAutodetectionV6 specifies an approach to automatically detect node IPv6 addresses. If not specified,\nIPv6 addresses will not be auto-detected.",
              "properties": {
                "canReach": {
                  "description": "CanReach enables IP auto-detection based on which source address on the node is used to reach the\nspecified IP or domain.",
                  "type": "string"
                },
                "cidrs": {
                  "description": "CIDRS enables IP auto-detection based on which addresses on the nodes are within\none of the provided CIDRs.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "firstFound": {
                  "description": "FirstFound uses default interface matching parameters to select an interface, performing best-effort\nfiltering based on well-known interface names.",
                  "type": "boolean"
                },
                "interface": {
                  "description": "Interface enables IP auto-detection based on interfaces that match the given regex.",
                  "type": "string"
                },
                "kubernetes": {
                  "description": "Kubernetes configures Calico to detect node addresses based on the Kubernetes API.",
                  "enum": [
                    "NodeInternalIP"
                  ],
                  "type": "string"
                },
                "skipInterface": {
                  "description": "SkipInterface enables IP auto-detection based on interfaces that do not match\nthe given regex.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "sysctl": {
              "description": "Sysctl configures sysctl parameters for tuning plugin",
              "items": {
                "properties": {
                  "key": {
                    "enum": [
                      "net.ipv4.tcp_keepalive_intvl",
                      "net.ipv4.tcp_keepalive_probes",
                      "net.ipv4.tcp_keepalive_time"
                    ],
                    "type": "string"
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "required": [
                  "key",
                  "value"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "windowsDataplane": {
              "description": "WindowsDataplane is used to select the dataplane used for Windows nodes. In particular, it\ncauses the operator to add required mounts and environment variables for the particular dataplane.\nIf not specified, it is disabled and the operator will not render the Calico Windows nodes daemonset.\nDefault: Disabled",
              "enum": [
                "HNS",
                "Disabled"
              ],
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "calicoNodeDaemonSet": {
          "description": "CalicoNodeDaemonSet configures the calico-node DaemonSet. If used in\nconjunction with the deprecated ComponentResources, then these overrides take precedence.",
          "properties": {
            "metadata": {
              "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the DaemonSet.",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                  "type": "object"
                },
                "labels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "spec": {
              "description": "Spec is the specification of the calico-node DaemonSet.",
              "properties": {
                "minReadySeconds": {
                  "description": "MinReadySeconds is the minimum number of seconds for which a newly created DaemonSet pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the calico-node DaemonSet.\nIf omitted, the calico-node DaemonSet will use its default value for minReadySeconds.",
                  "format": "int32",
                  "maximum": 2147483647,
                  "minimum": 0,
                  "type": "integer"
                },
                "template": {
                  "description": "Template describes the calico-node DaemonSet pod that will be created.",
                  "properties": {
                    "metadata": {
                      "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                      "properties": {
                        "annotations": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                          "type": "object"
                        },
                        "labels": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                          "type": "object"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "spec": {
                      "description": "Spec is the calico-node DaemonSet's PodSpec.",
                      "properties": {
                        "affinity": {
                          "description": "Affinity is a group of affinity scheduling rules for the calico-node pods.\nIf specified, this overrides any affinity that may be set on the calico-node DaemonSet.\nIf omitted, the calico-node DaemonSet will use its default value for affinity.\nWARNING: Please note that this field will override the default calico-node DaemonSet affinity.",
                          "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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
                        },
                        "containers": {
                          "description": "Containers is a list of calico-node containers.\nIf specified, this overrides the specified calico-node DaemonSet containers.\nIf omitted, the calico-node DaemonSet will use its default values for its containers.",
                          "items": {
                            "description": "CalicoNodeDaemonSetContainer is a calico-node DaemonSet container.",
                            "properties": {
                              "name": {
                                "description": "Name is an enum which identifies the calico-node DaemonSet container by name.\nSupported values are: calico-node",
                                "enum": [
                                  "calico-node"
                                ],
                                "type": "string"
                              },
                              "resources": {
                                "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-node DaemonSet container's resources.\nIf omitted, the calico-node DaemonSet will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                "properties": {
                                  "claims": {
                                    "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "dnsConfig": {
                          "description": "DNSConfig allows customization of the DNS configuration for the calico-node pods.",
                          "properties": {
                            "nameservers": {
                              "description": "A list of DNS name server IP addresses.\nThis will be appended to the base nameservers generated from DNSPolicy.\nDuplicated nameservers will be removed.",
                              "items": {
                                "type": "string"
                              },
                              "type": "array",
                              "x-kubernetes-list-type": "atomic"
                            },
                            "options": {
                              "description": "A list of DNS resolver options.\nThis will be merged with the base options generated from DNSPolicy.\nDuplicated entries will be removed. Resolution options given in Options\nwill override those that appear in the base DNSPolicy.",
                              "items": {
                                "description": "PodDNSConfigOption defines DNS resolver options of a pod.",
                                "properties": {
                                  "name": {
                                    "description": "Name is this DNS resolver option's name.\nRequired.",
                                    "type": "string"
                                  },
                                  "value": {
                                    "description": "Value is this DNS resolver option's value.",
                                    "type": "string"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array",
                              "x-kubernetes-list-type": "atomic"
                            },
                            "searches": {
                              "description": "A list of DNS search domains for host-name lookup.\nThis will be appended to the base search paths generated from DNSPolicy.\nDuplicated search paths will be removed.",
                              "items": {
                                "type": "string"
                              },
                              "type": "array",
                              "x-kubernetes-list-type": "atomic"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "dnsPolicy": {
                          "description": "DNSPolicy is the DNS policy for the calico-node pods.",
                          "enum": [
                            "",
                            "Default",
                            "ClusterFirst",
                            "ClusterFirstWithHostNet",
                            "None"
                          ],
                          "type": "string"
                        },
                        "initContainers": {
                          "description": "InitContainers is a list of calico-node init containers.\nIf specified, this overrides the specified calico-node DaemonSet init containers.\nIf omitted, the calico-node DaemonSet will use its default values for its init containers.",
                          "items": {
                            "description": "CalicoNodeDaemonSetInitContainer is a calico-node DaemonSet init container.",
                            "properties": {
                              "name": {
                                "description": "Name is an enum which identifies the calico-node DaemonSet init container by name.\nSupported values are: install-cni, hostpath-init, flexvol-driver, ebpf-bootstrap, node-certs-key-cert-provisioner, calico-node-prometheus-server-tls-key-cert-provisioner, mount-bpffs (deprecated, replaced by ebpf-bootstrap)",
                                "enum": [
                                  "install-cni",
                                  "hostpath-init",
                                  "flexvol-driver",
                                  "ebpf-bootstrap",
                                  "node-certs-key-cert-provisioner",
                                  "calico-node-prometheus-server-tls-key-cert-provisioner",
                                  "mount-bpffs"
                                ],
                                "type": "string"
                              },
                              "resources": {
                                "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-node DaemonSet init container's resources.\nIf omitted, the calico-node DaemonSet will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                "properties": {
                                  "claims": {
                                    "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "nodeSelector": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "NodeSelector is the calico-node pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the calico-node DaemonSet nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the calico-node DaemonSet will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default calico-node DaemonSet nodeSelector.",
                          "type": "object"
                        },
                        "tolerations": {
                          "description": "Tolerations is the calico-node pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the calico-node DaemonSet.\nIf omitted, the calico-node DaemonSet will use its default value for tolerations.\nWARNING: Please note that this field will override the default calico-node DaemonSet tolerations.",
                          "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
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "calicoNodeWindowsDaemonSet": {
          "description": "CalicoNodeWindowsDaemonSet configures the calico-node-windows DaemonSet.",
          "properties": {
            "metadata": {
              "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the DaemonSet.",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                  "type": "object"
                },
                "labels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "spec": {
              "description": "Spec is the specification of the calico-node-windows DaemonSet.",
              "properties": {
                "minReadySeconds": {
                  "description": "MinReadySeconds is the minimum number of seconds for which a newly created DaemonSet pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the calico-node-windows DaemonSet.\nIf omitted, the calico-node-windows DaemonSet will use its default value for minReadySeconds.",
                  "format": "int32",
                  "maximum": 2147483647,
                  "minimum": 0,
                  "type": "integer"
                },
                "template": {
                  "description": "Template describes the calico-node-windows DaemonSet pod that will be created.",
                  "properties": {
                    "metadata": {
                      "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                      "properties": {
                        "annotations": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                          "type": "object"
                        },
                        "labels": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                          "type": "object"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "spec": {
                      "description": "Spec is the calico-node-windows DaemonSet's PodSpec.",
                      "properties": {
                        "affinity": {
                          "description": "Affinity is a group of affinity scheduling rules for the calico-node-windows pods.\nIf specified, this overrides any affinity that may be set on the calico-node-windows DaemonSet.\nIf omitted, the calico-node-windows DaemonSet will use its default value for affinity.\nWARNING: Please note that this field will override the default calico-node-windows DaemonSet affinity.",
                          "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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
                        },
                        "containers": {
                          "description": "Containers is a list of calico-node-windows containers.\nIf specified, this overrides the specified calico-node-windows DaemonSet containers.\nIf omitted, the calico-node-windows DaemonSet will use its default values for its containers.",
                          "items": {
                            "description": "CalicoNodeWindowsDaemonSetContainer is a calico-node-windows DaemonSet container.",
                            "properties": {
                              "name": {
                                "description": "Name is an enum which identifies the calico-node-windows DaemonSet container by name.\nSupported values are: calico-node-windows",
                                "enum": [
                                  "calico-node-windows"
                                ],
                                "type": "string"
                              },
                              "resources": {
                                "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-node-windows DaemonSet container's resources.\nIf omitted, the calico-node-windows DaemonSet will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                "properties": {
                                  "claims": {
                                    "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "initContainers": {
                          "description": "InitContainers is a list of calico-node-windows init containers.\nIf specified, this overrides the specified calico-node-windows DaemonSet init containers.\nIf omitted, the calico-node-windows DaemonSet will use its default values for its init containers.",
                          "items": {
                            "description": "CalicoNodeWindowsDaemonSetInitContainer is a calico-node-windows DaemonSet init container.",
                            "properties": {
                              "name": {
                                "description": "Name is an enum which identifies the calico-node-windows DaemonSet init container by name.\nSupported values are: install-cni;hostpath-init, flexvol-driver, node-certs-key-cert-provisioner, calico-node-windows-prometheus-server-tls-key-cert-provisioner",
                                "enum": [
                                  "install-cni",
                                  "hostpath-init",
                                  "flexvol-driver",
                                  "node-certs-key-cert-provisioner",
                                  "calico-node-windows-prometheus-server-tls-key-cert-provisioner"
                                ],
                                "type": "string"
                              },
                              "resources": {
                                "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-node-windows DaemonSet init container's resources.\nIf omitted, the calico-node-windows DaemonSet will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                "properties": {
                                  "claims": {
                                    "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "nodeSelector": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "NodeSelector is the calico-node-windows pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the calico-node-windows DaemonSet nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the calico-node-windows DaemonSet will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default calico-node-windows DaemonSet nodeSelector.",
                          "type": "object"
                        },
                        "tolerations": {
                          "description": "Tolerations is the calico-node-windows pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the calico-node-windows DaemonSet.\nIf omitted, the calico-node-windows DaemonSet will use its default value for tolerations.\nWARNING: Please note that this field will override the default calico-node-windows DaemonSet tolerations.",
                          "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
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "calicoWindowsUpgradeDaemonSet": {
          "description": "Deprecated. The CalicoWindowsUpgradeDaemonSet is deprecated and will be removed from the API in the future.\nCalicoWindowsUpgradeDaemonSet configures the calico-windows-upgrade DaemonSet.",
          "properties": {
            "metadata": {
              "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the Deployment.",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                  "type": "object"
                },
                "labels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "spec": {
              "description": "Spec is the specification of the calico-windows-upgrade DaemonSet.",
              "properties": {
                "minReadySeconds": {
                  "description": "MinReadySeconds is the minimum number of seconds for which a newly created Deployment pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the calico-windows-upgrade DaemonSet.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default value for minReadySeconds.",
                  "format": "int32",
                  "maximum": 2147483647,
                  "minimum": 0,
                  "type": "integer"
                },
                "template": {
                  "description": "Template describes the calico-windows-upgrade DaemonSet pod that will be created.",
                  "properties": {
                    "metadata": {
                      "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                      "properties": {
                        "annotations": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                          "type": "object"
                        },
                        "labels": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                          "type": "object"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "spec": {
                      "description": "Spec is the calico-windows-upgrade DaemonSet's PodSpec.",
                      "properties": {
                        "affinity": {
                          "description": "Affinity is a group of affinity scheduling rules for the calico-windows-upgrade pods.\nIf specified, this overrides any affinity that may be set on the calico-windows-upgrade DaemonSet.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default value for affinity.\nWARNING: Please note that this field will override the default calico-windows-upgrade DaemonSet affinity.",
                          "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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
                        },
                        "containers": {
                          "description": "Containers is a list of calico-windows-upgrade containers.\nIf specified, this overrides the specified calico-windows-upgrade DaemonSet containers.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default values for its containers.",
                          "items": {
                            "description": "CalicoWindowsUpgradeDaemonSetContainer is a calico-windows-upgrade DaemonSet container.",
                            "properties": {
                              "name": {
                                "description": "Name is an enum which identifies the calico-windows-upgrade DaemonSet container by name.",
                                "enum": [
                                  "calico-windows-upgrade"
                                ],
                                "type": "string"
                              },
                              "resources": {
                                "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-windows-upgrade DaemonSet container's resources.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default value for this container's resources.",
                                "properties": {
                                  "claims": {
                                    "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "nodeSelector": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "NodeSelector is the calico-windows-upgrade pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the calico-windows-upgrade DaemonSet nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default calico-windows-upgrade DaemonSet nodeSelector.",
                          "type": "object"
                        },
                        "tolerations": {
                          "description": "Tolerations is the calico-windows-upgrade pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the calico-windows-upgrade DaemonSet.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default value for tolerations.\nWARNING: Please note that this field will override the default calico-windows-upgrade DaemonSet tolerations.",
                          "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
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "certificateManagement": {
          "description": "CertificateManagement configures pods to submit a CertificateSigningRequest to the certificates.k8s.io/v1 API in order\nto obtain TLS certificates. This feature requires that you bring your own CSR signing and approval process, otherwise\npods will be stuck during initialization.",
          "properties": {
            "caCert": {
              "description": "Certificate of the authority that signs the CertificateSigningRequests in PEM format.",
              "format": "byte",
              "type": "string"
            },
            "keyAlgorithm": {
              "description": "Specify the algorithm used by pods to generate a key pair that is associated with the X.509 certificate request.\nDefault: RSAWithSize2048",
              "enum": [
                "",
                "RSAWithSize2048",
                "RSAWithSize4096",
                "RSAWithSize8192",
                "ECDSAWithCurve256",
                "ECDSAWithCurve384",
                "ECDSAWithCurve521"
              ],
              "type": "string"
            },
            "signatureAlgorithm": {
              "description": "Specify the algorithm used for the signature of the X.509 certificate request.\nDefault: SHA256WithRSA",
              "enum": [
                "",
                "SHA256WithRSA",
                "SHA384WithRSA",
                "SHA512WithRSA",
                "ECDSAWithSHA256",
                "ECDSAWithSHA384",
                "ECDSAWithSHA512"
              ],
              "type": "string"
            },
            "signerName": {
              "description": "When a CSR is issued to the certificates.k8s.io API, the signerName is added to the request in order to accommodate for clusters\nwith multiple signers.\nMust be formatted as: `<my-domain>/<my-signername>`.",
              "type": "string"
            }
          },
          "required": [
            "caCert",
            "signerName"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "cni": {
          "description": "CNI specifies the CNI that will be used by this installation.",
          "properties": {
            "binDir": {
              "description": "BinDir is the path to the CNI binaries directory.\nIf you have changed the installation directory for CNI binaries in the container runtime configuration,\nplease ensure that this field points to the same directory as specified in the container runtime settings.\nDefault directory depends on the KubernetesProvider.\n* For KubernetesProvider GKE, this field defaults to \"/home/kubernetes/bin\".\n* For KubernetesProvider OpenShift, this field defaults to \"/var/lib/cni/bin\".\n* Otherwise, this field defaults to \"/opt/cni/bin\".",
              "type": "string"
            },
            "confDir": {
              "description": "ConfDir is the path to the CNI config directory.\nIf you have changed the installation directory for CNI configuration in the container runtime configuration,\nplease ensure that this field points to the same directory as specified in the container runtime settings.\nDefault directory depends on the KubernetesProvider.\n* For KubernetesProvider GKE, this field defaults to \"/etc/cni/net.d\".\n* For KubernetesProvider OpenShift, this field defaults to \"/var/run/multus/cni/net.d\".\n* Otherwise, this field defaults to \"/etc/cni/net.d\".",
              "type": "string"
            },
            "ipam": {
              "description": "IPAM specifies the pod IP address management that will be used in the Calico or\nCalico Enterprise installation.",
              "properties": {
                "type": {
                  "description": "Specifies the IPAM plugin that will be used in the Calico or Calico Enterprise installation.\n* For CNI Plugin Calico, this field defaults to Calico.\n* For CNI Plugin GKE, this field defaults to HostLocal.\n* For CNI Plugin AzureVNET, this field defaults to AzureVNET.\n* For CNI Plugin AmazonVPC, this field defaults to AmazonVPC.\nThe IPAM plugin is installed and configured only if the CNI plugin is set to Calico,\nfor all other values of the CNI plugin the plugin binaries and CNI config is a dependency\nthat is expected to be installed separately.\nDefault: Calico",
                  "enum": [
                    "Calico",
                    "HostLocal",
                    "AmazonVPC",
                    "AzureVNET"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "type": {
              "description": "Specifies the CNI plugin that will be used in the Calico or Calico Enterprise installation.\n* For KubernetesProvider GKE, this field defaults to GKE.\n* For KubernetesProvider AKS, this field defaults to AzureVNET.\n* For KubernetesProvider EKS, this field defaults to AmazonVPC.\n* If aws-node daemonset exists in kube-system when the Installation resource is created, this field defaults to AmazonVPC.\n* For all other cases this field defaults to Calico.\nFor the value Calico, the CNI plugin binaries and CNI config will be installed as part of deployment,\nfor all other values the CNI plugin binaries and CNI config is a dependency that is expected\nto be installed separately.\nDefault: Calico",
              "enum": [
                "Calico",
                "GKE",
                "AmazonVPC",
                "AzureVNET"
              ],
              "type": "string"
            }
          },
          "required": [
            "type"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "componentResources": {
          "description": "Deprecated. Please use CalicoNodeDaemonSet, TyphaDeployment, and KubeControllersDeployment.\nComponentResources can be used to customize the resource requirements for each component.\nNode, Typha, and KubeControllers are supported for installations.",
          "items": {
            "description": "Deprecated. Please use component resource config fields in Installation.Spec instead.\nThe ComponentResource struct associates a ResourceRequirements with a component by name",
            "properties": {
              "componentName": {
                "description": "ComponentName is an enum which identifies the component",
                "enum": [
                  "Node",
                  "Typha",
                  "KubeControllers"
                ],
                "type": "string"
              },
              "resourceRequirements": {
                "description": "ResourceRequirements allows customization of limits and requests for compute resources such as cpu and memory.",
                "properties": {
                  "claims": {
                    "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
              }
            },
            "required": [
              "componentName",
              "resourceRequirements"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "controlPlaneNodeSelector": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "ControlPlaneNodeSelector is used to select control plane nodes on which to run Calico\ncomponents. This is globally applied to all resources created by the operator excluding daemonsets.",
          "type": "object"
        },
        "controlPlaneReplicas": {
          "description": "ControlPlaneReplicas defines how many replicas of the control plane core components will be deployed.\nThis field applies to all control plane components that support High Availability. Defaults to 2.",
          "format": "int32",
          "type": "integer"
        },
        "controlPlaneTolerations": {
          "description": "ControlPlaneTolerations specify tolerations which are then globally applied to all resources\ncreated by the operator.",
          "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
          },
          "type": "array"
        },
        "csiNodeDriverDaemonSet": {
          "description": "CSINodeDriverDaemonSet configures the csi-node-driver DaemonSet.",
          "properties": {
            "metadata": {
              "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the DaemonSet.",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                  "type": "object"
                },
                "labels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "spec": {
              "description": "Spec is the specification of the csi-node-driver DaemonSet.",
              "properties": {
                "minReadySeconds": {
                  "description": "MinReadySeconds is the minimum number of seconds for which a newly created DaemonSet pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the csi-node-driver DaemonSet.\nIf omitted, the csi-node-driver DaemonSet will use its default value for minReadySeconds.",
                  "format": "int32",
                  "maximum": 2147483647,
                  "minimum": 0,
                  "type": "integer"
                },
                "template": {
                  "description": "Template describes the csi-node-driver DaemonSet pod that will be created.",
                  "properties": {
                    "metadata": {
                      "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                      "properties": {
                        "annotations": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                          "type": "object"
                        },
                        "labels": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                          "type": "object"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "spec": {
                      "description": "Spec is the csi-node-driver DaemonSet's PodSpec.",
                      "properties": {
                        "affinity": {
                          "description": "Affinity is a group of affinity scheduling rules for the csi-node-driver pods.\nIf specified, this overrides any affinity that may be set on the csi-node-driver DaemonSet.\nIf omitted, the csi-node-driver DaemonSet will use its default value for affinity.\nWARNING: Please note that this field will override the default csi-node-driver DaemonSet affinity.",
                          "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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
                        },
                        "containers": {
                          "description": "Containers is a list of csi-node-driver containers.\nIf specified, this overrides the specified csi-node-driver DaemonSet containers.\nIf omitted, the csi-node-driver DaemonSet will use its default values for its containers.",
                          "items": {
                            "description": "CSINodeDriverDaemonSetContainer is a csi-node-driver DaemonSet container.",
                            "properties": {
                              "name": {
                                "description": "Name is an enum which identifies the csi-node-driver DaemonSet container by name.\nSupported values are: calico-csi, csi-node-driver-registrar.",
                                "enum": [
                                  "calico-csi",
                                  "csi-node-driver-registrar",
                                  "csi-node-driver"
                                ],
                                "type": "string"
                              },
                              "resources": {
                                "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named csi-node-driver DaemonSet container's resources.\nIf omitted, the csi-node-driver DaemonSet will use its default value for this container's resources.",
                                "properties": {
                                  "claims": {
                                    "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "nodeSelector": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "NodeSelector is the csi-node-driver pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the csi-node-driver DaemonSet nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the csi-node-driver DaemonSet will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default csi-node-driver DaemonSet nodeSelector.",
                          "type": "object"
                        },
                        "tolerations": {
                          "description": "Tolerations is the csi-node-driver pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the csi-node-driver DaemonSet.\nIf omitted, the csi-node-driver DaemonSet will use its default value for tolerations.\nWARNING: Please note that this field will override the default csi-node-driver DaemonSet tolerations.",
                          "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
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "fipsMode": {
          "description": "FIPSMode uses images and features only that are using FIPS 140-2 validated cryptographic modules and standards.\nOnly supported for Variant=Calico.\nDefault: Disabled",
          "enum": [
            "Enabled",
            "Disabled"
          ],
          "type": "string"
        },
        "flexVolumePath": {
          "description": "FlexVolumePath optionally specifies a custom path for FlexVolume. If not specified, FlexVolume will be\nenabled by default. If set to 'None', FlexVolume will be disabled. The default is based on the\nkubernetesProvider.",
          "type": "string"
        },
        "imagePath": {
          "description": "ImagePath allows for the path part of an image to be specified. If specified\nthen the specified value will be used as the image path for each image. If not specified\nor empty, the default for each image will be used.\nA special case value, UseDefault, is supported to explicitly specify the default\nimage path will be used for each image.\nImage format:\n   `<registry><imagePath>/<imagePrefix><imageName>:<image-tag>`\nThis option allows configuring the `<imagePath>` portion of the above format.",
          "type": "string"
        },
        "imagePrefix": {
          "description": "ImagePrefix allows for the prefix part of an image to be specified. If specified\nthen the given value will be used as a prefix on each image. If not specified\nor empty, no prefix will be used.\nA special case value, UseDefault, is supported to explicitly specify the default\nimage prefix will be used for each image.\nImage format:\n   `<registry><imagePath>/<imagePrefix><imageName>:<image-tag>`\nThis option allows configuring the `<imagePrefix>` portion of the above format.",
          "type": "string"
        },
        "imagePullSecrets": {
          "description": "ImagePullSecrets is an array of references to container registry pull secrets to use. These are\napplied to all images to be pulled.",
          "items": {
            "description": "LocalObjectReference contains enough information to let you locate the\nreferenced object inside the same namespace.",
            "properties": {
              "name": {
                "default": "",
                "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                "type": "string"
              }
            },
            "type": "object",
            "x-kubernetes-map-type": "atomic",
            "additionalProperties": false
          },
          "type": "array"
        },
        "kubeletVolumePluginPath": {
          "description": "KubeletVolumePluginPath optionally specifies enablement of Calico CSI plugin. If not specified,\nCSI will be enabled by default. If set to 'None', CSI will be disabled.\nDefault: /var/lib/kubelet",
          "type": "string"
        },
        "kubernetesProvider": {
          "description": "KubernetesProvider specifies a particular provider of the Kubernetes platform and enables provider-specific configuration.\nIf the specified value is empty, the Operator will attempt to automatically determine the current provider.\nIf the specified value is not empty, the Operator will still attempt auto-detection, but\nwill additionally compare the auto-detected value to the specified value to confirm they match.",
          "enum": [
            "",
            "EKS",
            "GKE",
            "AKS",
            "OpenShift",
            "DockerEnterprise",
            "RKE2",
            "TKG",
            "Kind"
          ],
          "type": "string"
        },
        "logging": {
          "description": "Logging Configuration for Components",
          "properties": {
            "cni": {
              "description": "Customized logging specification for calico-cni plugin",
              "properties": {
                "logFileMaxAgeDays": {
                  "description": "Default: 30 (days)",
                  "format": "int32",
                  "type": "integer"
                },
                "logFileMaxCount": {
                  "description": "Default: 10",
                  "format": "int32",
                  "type": "integer"
                },
                "logFileMaxSize": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "string"
                    }
                  ],
                  "description": "Default: 100Mi",
                  "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                  "x-kubernetes-int-or-string": true
                },
                "logSeverity": {
                  "description": "Default: Info",
                  "enum": [
                    "Error",
                    "Warning",
                    "Info",
                    "Debug"
                  ],
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "nodeMetricsPort": {
          "description": "NodeMetricsPort specifies which port calico/node serves prometheus metrics on. By default, metrics are not enabled.\nIf specified, this overrides any FelixConfiguration resources which may exist. If omitted, then\nprometheus metrics may still be configured through FelixConfiguration.",
          "format": "int32",
          "type": "integer"
        },
        "nodeUpdateStrategy": {
          "description": "NodeUpdateStrategy can be used to customize the desired update strategy, such as the MaxUnavailable\nfield.",
          "properties": {
            "rollingUpdate": {
              "description": "Rolling update config params. Present only if type = \"RollingUpdate\".",
              "properties": {
                "maxSurge": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "string"
                    }
                  ],
                  "description": "The maximum number of nodes with an existing available DaemonSet pod that\ncan have an updated DaemonSet pod during during an update.\nValue can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).\nThis can not be 0 if MaxUnavailable is 0.\nAbsolute number is calculated from percentage by rounding up to a minimum of 1.\nDefault value is 0.\nExample: when this is set to 30%, at most 30% of the total number of nodes\nthat should be running the daemon pod (i.e. status.desiredNumberScheduled)\ncan have their a new pod created before the old pod is marked as deleted.\nThe update starts by launching new pods on 30% of nodes. Once an updated\npod is available (Ready for at least minReadySeconds) the old DaemonSet pod\non that node is marked deleted. If the old pod becomes unavailable for any\nreason (Ready transitions to false, is evicted, or is drained) an updated\npod is immediatedly created on that node without considering surge limits.\nAllowing surge implies the possibility that the resources consumed by the\ndaemonset on any given node can double if the readiness check fails, and\nso resource intensive daemonsets should take into account that they may\ncause evictions during disruption.",
                  "x-kubernetes-int-or-string": true
                },
                "maxUnavailable": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "string"
                    }
                  ],
                  "description": "The maximum number of DaemonSet pods that can be unavailable during the\nupdate. Value can be an absolute number (ex: 5) or a percentage of total\nnumber of DaemonSet pods at the start of the update (ex: 10%). Absolute\nnumber is calculated from percentage by rounding up.\nThis cannot be 0 if MaxSurge is 0\nDefault value is 1.\nExample: when this is set to 30%, at most 30% of the total number of nodes\nthat should be running the daemon pod (i.e. status.desiredNumberScheduled)\ncan have their pods stopped for an update at any given time. The update\nstarts by stopping at most 30% of those DaemonSet pods and then brings\nup new DaemonSet pods in their place. Once the new pods are available,\nit then proceeds onto other DaemonSet pods, thus ensuring that at least\n70% of original number of DaemonSet pods are available at all times during\nthe update.",
                  "x-kubernetes-int-or-string": true
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "type": {
              "description": "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "nonPrivileged": {
          "description": "NonPrivileged configures Calico to be run in non-privileged containers as non-root users where possible.",
          "type": "string"
        },
        "proxy": {
          "description": "Proxy is used to configure the HTTP(S) proxy settings that will be applied to Tigera containers that connect\nto destinations outside the cluster. It is expected that NO_PROXY is configured such that destinations within\nthe cluster (including the API server) are exempt from proxying.",
          "properties": {
            "httpProxy": {
              "description": "HTTPProxy defines the value of the HTTP_PROXY environment variable that will be set on Tigera containers that connect to\ndestinations outside the cluster.",
              "type": "string"
            },
            "httpsProxy": {
              "description": "HTTPSProxy defines the value of the HTTPS_PROXY environment variable that will be set on Tigera containers that connect to\ndestinations outside the cluster.",
              "type": "string"
            },
            "noProxy": {
              "description": "NoProxy defines the value of the NO_PROXY environment variable that will be set on Tigera containers that connect to\ndestinations outside the cluster. This value must be set such that destinations within the scope of the cluster, including\nthe Kubernetes API server, are exempt from being proxied.",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "registry": {
          "description": "Registry is the default Docker registry used for component Docker images.\nIf specified then the given value must end with a slash character (`/`) and all images will be pulled from this registry.\nIf not specified then the default registries will be used. A special case value, UseDefault, is\nsupported to explicitly specify the default registries will be used.\nImage format:\n   `<registry><imagePath>/<imagePrefix><imageName>:<image-tag>`\nThis option allows configuring the `<registry>` portion of the above format.",
          "type": "string"
        },
        "serviceCIDRs": {
          "description": "Kubernetes Service CIDRs. Specifying this is required when using Calico for Windows.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "tlsCipherSuites": {
          "description": "TLSCipherSuites defines the cipher suite list that the TLS protocol should use during secure communication.",
          "items": {
            "properties": {
              "name": {
                "description": "This should be a valid TLS cipher suite name.",
                "enum": [
                  "TLS_AES_256_GCM_SHA384",
                  "TLS_CHACHA20_POLY1305_SHA256",
                  "TLS_AES_128_GCM_SHA256",
                  "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
                  "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
                  "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
                  "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
                  "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
                  "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
                  "TLS_RSA_WITH_AES_256_GCM_SHA384",
                  "TLS_RSA_WITH_AES_128_GCM_SHA256",
                  "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
                  "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
                  "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
                ],
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "typhaAffinity": {
          "description": "Deprecated. Please use Installation.Spec.TyphaDeployment instead.\nTyphaAffinity allows configuration of node affinity characteristics for Typha pods.",
          "properties": {
            "nodeAffinity": {
              "description": "NodeAffinity describes node affinity scheduling rules for typha.",
              "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.",
                  "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"
                },
                "requiredDuringSchedulingIgnoredDuringExecution": {
                  "description": "WARNING: Please note that if the affinity requirements specified by this field are not met at\nscheduling time, the pod will NOT be scheduled onto the node.\nThere is no fallback to another affinity rules with this setting.\nThis may cause networking disruption or even catastrophic failure!\nPreferredDuringSchedulingIgnoredDuringExecution should be used for affinity\nunless there is a specific well understood reason to use RequiredDuringSchedulingIgnoredDuringExecution and\nyou can guarantee that the RequiredDuringSchedulingIgnoredDuringExecution will always have sufficient nodes to satisfy the requirement.\nNOTE: RequiredDuringSchedulingIgnoredDuringExecution is set by default for AKS nodes,\nto avoid scheduling Typhas on virtual-nodes.\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
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "typhaDeployment": {
          "description": "TyphaDeployment configures the typha Deployment. If used in conjunction with the deprecated\nComponentResources or TyphaAffinity, then these overrides take precedence.",
          "properties": {
            "metadata": {
              "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the Deployment.",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                  "type": "object"
                },
                "labels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "spec": {
              "description": "Spec is the specification of the typha Deployment.",
              "properties": {
                "minReadySeconds": {
                  "description": "MinReadySeconds is the minimum number of seconds for which a newly created Deployment pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the typha Deployment.\nIf omitted, the typha Deployment will use its default value for minReadySeconds.",
                  "format": "int32",
                  "maximum": 2147483647,
                  "minimum": 0,
                  "type": "integer"
                },
                "strategy": {
                  "description": "The deployment strategy to use to replace existing pods with new ones.",
                  "properties": {
                    "rollingUpdate": {
                      "description": "Rolling update config params. Present only if DeploymentStrategyType =\nRollingUpdate.\nto be.",
                      "properties": {
                        "maxSurge": {
                          "anyOf": [
                            {
                              "type": "integer"
                            },
                            {
                              "type": "string"
                            }
                          ],
                          "description": "The maximum number of pods that can be scheduled above the desired number of\npods.\nValue can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).\nThis can not be 0 if MaxUnavailable is 0.\nAbsolute number is calculated from percentage by rounding up.\nDefaults to 25%.\nExample: when this is set to 30%, the new ReplicaSet can be scaled up immediately when\nthe rolling update starts, such that the total number of old and new pods do not exceed\n130% of desired pods. Once old pods have been killed,\nnew ReplicaSet can be scaled up further, ensuring that total number of pods running\nat any time during the update is at most 130% of desired pods.",
                          "x-kubernetes-int-or-string": true
                        },
                        "maxUnavailable": {
                          "anyOf": [
                            {
                              "type": "integer"
                            },
                            {
                              "type": "string"
                            }
                          ],
                          "description": "The maximum number of pods that can be unavailable during the update.\nValue can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).\nAbsolute number is calculated from percentage by rounding down.\nThis can not be 0 if MaxSurge is 0.\nDefaults to 25%.\nExample: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods\nimmediately when the rolling update starts. Once new pods are ready, old ReplicaSet\ncan be scaled down further, followed by scaling up the new ReplicaSet, ensuring\nthat the total number of pods available at all times during the update is at\nleast 70% of desired pods.",
                          "x-kubernetes-int-or-string": true
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "template": {
                  "description": "Template describes the typha Deployment pod that will be created.",
                  "properties": {
                    "metadata": {
                      "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                      "properties": {
                        "annotations": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                          "type": "object"
                        },
                        "labels": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                          "type": "object"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "spec": {
                      "description": "Spec is the typha Deployment's PodSpec.",
                      "properties": {
                        "affinity": {
                          "description": "Affinity is a group of affinity scheduling rules for the typha pods.\nIf specified, this overrides any affinity that may be set on the typha Deployment.\nIf omitted, the typha Deployment will use its default value for affinity.\nIf used in conjunction with the deprecated TyphaAffinity, then this value takes precedence.\nWARNING: Please note that this field will override the default calico-typha Deployment affinity.",
                          "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                        "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
                        },
                        "containers": {
                          "description": "Containers is a list of typha containers.\nIf specified, this overrides the specified typha Deployment containers.\nIf omitted, the typha Deployment will use its default values for its containers.",
                          "items": {
                            "description": "TyphaDeploymentContainer is a typha Deployment container.",
                            "properties": {
                              "name": {
                                "description": "Name is an enum which identifies the typha Deployment container by name.\nSupported values are: calico-typha",
                                "enum": [
                                  "calico-typha"
                                ],
                                "type": "string"
                              },
                              "resources": {
                                "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named typha Deployment container's resources.\nIf omitted, the typha Deployment will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                "properties": {
                                  "claims": {
                                    "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "initContainers": {
                          "description": "InitContainers is a list of typha init containers.\nIf specified, this overrides the specified typha Deployment init containers.\nIf omitted, the typha Deployment will use its default values for its init containers.",
                          "items": {
                            "description": "TyphaDeploymentInitContainer is a typha Deployment init container.",
                            "properties": {
                              "name": {
                                "description": "Name is an enum which identifies the typha Deployment init container by name.\nSupported values are: typha-certs-key-cert-provisioner",
                                "enum": [
                                  "typha-certs-key-cert-provisioner"
                                ],
                                "type": "string"
                              },
                              "resources": {
                                "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named typha Deployment init container's resources.\nIf omitted, the typha Deployment will use its default value for this init container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                "properties": {
                                  "claims": {
                                    "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "nodeSelector": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "NodeSelector is the calico-typha pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the calico-typha Deployment nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the calico-typha Deployment will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default calico-typha Deployment nodeSelector.",
                          "type": "object"
                        },
                        "terminationGracePeriodSeconds": {
                          "description": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request.\nValue must be non-negative integer. The value zero indicates stop immediately via\nthe kill signal (no opportunity to shut down).\nIf this value is nil, the default grace period will be used instead.\nThe grace period is the duration in seconds after the processes running in the pod are sent\na termination signal and the time when the processes are forcibly halted with a kill signal.\nSet this value longer than the expected cleanup time for your process.\nDefaults to 30 seconds.",
                          "format": "int64",
                          "type": "integer"
                        },
                        "tolerations": {
                          "description": "Tolerations is the typha pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the typha Deployment.\nIf omitted, the typha Deployment will use its default value for tolerations.\nWARNING: Please note that this field will override the default calico-typha Deployment tolerations.",
                          "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
                          },
                          "type": "array"
                        },
                        "topologySpreadConstraints": {
                          "description": "TopologySpreadConstraints describes how a group of pods ought to spread across topology\ndomains. Scheduler will schedule pods in a way which abides by the constraints.\nAll topologySpreadConstraints are ANDed.",
                          "items": {
                            "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.",
                            "properties": {
                              "labelSelector": {
                                "description": "LabelSelector is used to find matching pods.\nPods that match this label selector are counted to determine the number of pods\nin their corresponding topology domain.",
                                "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 the pods over which\nspreading will be calculated. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are ANDed with labelSelector\nto select the group of existing pods over which spreading will be calculated\nfor the incoming pod. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.\nMatchLabelKeys cannot be set when LabelSelector isn't set.\nKeys that don't exist in the incoming pod labels will\nbe ignored. A null or empty list means only match against labelSelector.\nThis is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "maxSkew": {
                                "description": "MaxSkew describes the degree to which pods may be unevenly distributed.\nWhen `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference\nbetween the number of matching pods in the target topology and the global minimum.\nThe global minimum is the minimum number of matching pods in an eligible domain\nor zero if the number of eligible domains is less than MinDomains.\nFor example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same\nlabelSelector spread as 2/2/1:\nIn this case, the global minimum is 1.\n| zone1 | zone2 | zone3 |\n|  P P  |  P P  |   P   |\n- if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2;\nscheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2)\nviolate MaxSkew(1).\n- if MaxSkew is 2, incoming pod can be scheduled onto any zone.\nWhen `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence\nto topologies that satisfy it.\nIt's a required field. Default value is 1 and 0 is not allowed.",
                                "format": "int32",
                                "type": "integer"
                              },
                              "minDomains": {
                                "description": "MinDomains indicates a minimum number of eligible domains.\nWhen the number of eligible domains with matching topology keys is less than minDomains,\nPod Topology Spread treats \"global minimum\" as 0, and then the calculation of Skew is performed.\nAnd when the number of eligible domains with matching topology keys equals or greater than minDomains,\nthis value has no effect on scheduling.\nAs a result, when the number of eligible domains is less than minDomains,\nscheduler won't schedule more than maxSkew Pods to those domains.\nIf value is nil, the constraint behaves as if MinDomains is equal to 1.\nValid values are integers greater than 0.\nWhen value is not nil, WhenUnsatisfiable must be DoNotSchedule.\nFor example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same\nlabelSelector spread as 2/2/2:\n| zone1 | zone2 | zone3 |\n|  P P  |  P P  |  P P  |\nThe number of domains is less than 5(MinDomains), so \"global minimum\" is treated as 0.\nIn this situation, new pod with the same labelSelector cannot be scheduled,\nbecause computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones,\nit will violate MaxSkew.",
                                "format": "int32",
                                "type": "integer"
                              },
                              "nodeAffinityPolicy": {
                                "description": "NodeAffinityPolicy indicates how we will treat Pod's nodeAffinity/nodeSelector\nwhen calculating pod topology spread skew. Options are:\n- Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.\n- Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.\nIf this value is nil, the behavior is equivalent to the Honor policy.\nThis is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.",
                                "type": "string"
                              },
                              "nodeTaintsPolicy": {
                                "description": "NodeTaintsPolicy indicates how we will treat node taints when calculating\npod topology spread skew. Options are:\n- Honor: nodes without taints, along with tainted nodes for which the incoming pod\nhas a toleration, are included.\n- Ignore: node taints are ignored. All nodes are included.\nIf this value is nil, the behavior is equivalent to the Ignore policy.\nThis is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.",
                                "type": "string"
                              },
                              "topologyKey": {
                                "description": "TopologyKey is the key of node labels. Nodes that have a label with this key\nand identical values are considered to be in the same topology.\nWe consider each <key, value> as a \"bucket\", and try to put balanced number\nof pods into each bucket.\nWe define a domain as a particular instance of a topology.\nAlso, we define an eligible domain as a domain whose nodes meet the requirements of\nnodeAffinityPolicy and nodeTaintsPolicy.\ne.g. If TopologyKey is \"kubernetes.io/hostname\", each Node is a domain of that topology.\nAnd, if TopologyKey is \"topology.kubernetes.io/zone\", each zone is a domain of that topology.\nIt's a required field.",
                                "type": "string"
                              },
                              "whenUnsatisfiable": {
                                "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy\nthe spread constraint.\n- DoNotSchedule (default) tells the scheduler not to schedule it.\n- ScheduleAnyway tells the scheduler to schedule the pod in any location,\n  but giving higher precedence to topologies that would help reduce the\n  skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod\nif and only if every possible node assignment for that pod would violate\n\"MaxSkew\" on some topology.\nFor example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same\nlabelSelector spread as 3/1/1:\n| zone1 | zone2 | zone3 |\n| P P P |   P   |   P   |\nIf WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled\nto zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies\nMaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler\nwon't make it *more* imbalanced.\nIt's a required field.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "maxSkew",
                              "topologyKey",
                              "whenUnsatisfiable"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "typhaMetricsPort": {
          "description": "TyphaMetricsPort specifies which port calico/typha serves prometheus metrics on. By default, metrics are not enabled.",
          "format": "int32",
          "type": "integer"
        },
        "variant": {
          "description": "Variant is the product to install - one of Calico or TigeraSecureEnterprise\nDefault: Calico",
          "enum": [
            "Calico",
            "TigeraSecureEnterprise"
          ],
          "type": "string"
        },
        "windowsNodes": {
          "description": "Windows Configuration",
          "properties": {
            "cniBinDir": {
              "description": "CNIBinDir is the path to the CNI binaries directory on Windows, it must match what is used as 'bin_dir' under\n[plugins]\n  [plugins.\"io.containerd.grpc.v1.cri\"]\n    [plugins.\"io.containerd.grpc.v1.cri\".cni]\non the containerd 'config.toml' file on the Windows nodes.",
              "type": "string"
            },
            "cniConfigDir": {
              "description": "CNIConfigDir is the path to the CNI configuration directory on Windows, it must match what is used as 'conf_dir' under\n[plugins]\n  [plugins.\"io.containerd.grpc.v1.cri\"]\n    [plugins.\"io.containerd.grpc.v1.cri\".cni]\non the containerd 'config.toml' file on the Windows nodes.",
              "type": "string"
            },
            "cniLogDir": {
              "description": "CNILogDir is the path to the Calico CNI logs directory on Windows.",
              "type": "string"
            },
            "vxlanAdapter": {
              "description": "VXLANAdapter is the Network Adapter used for VXLAN, leave blank for primary NIC",
              "type": "string"
            },
            "vxlanMACPrefix": {
              "description": "VXLANMACPrefix is the prefix used when generating MAC addresses for virtual NICs",
              "pattern": "^[0-9A-Fa-f]{2}-[0-9A-Fa-f]{2}$",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "Most recently observed state for the Calico or Calico Enterprise installation.",
      "properties": {
        "calicoVersion": {
          "description": "CalicoVersion shows the current running version of calico.\nCalicoVersion along with Variant is needed to know the exact\nversion deployed.",
          "type": "string"
        },
        "computed": {
          "description": "Computed is the final installation including overlaid resources.",
          "properties": {
            "azure": {
              "description": "Azure is used to configure azure provider specific options.",
              "properties": {
                "policyMode": {
                  "default": "Default",
                  "description": "PolicyMode determines whether the \"control-plane\" label is applied to namespaces. It offers two options: Default and Manual.\nThe Default option adds the \"control-plane\" label to the required namespaces.\nThe Manual option does not apply the \"control-plane\" label to any namespace.\nDefault: Default",
                  "enum": [
                    "Default",
                    "Manual"
                  ],
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "calicoKubeControllersDeployment": {
              "description": "CalicoKubeControllersDeployment configures the calico-kube-controllers Deployment. If used in\nconjunction with the deprecated ComponentResources, then these overrides take precedence.",
              "properties": {
                "metadata": {
                  "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the Deployment.",
                  "properties": {
                    "annotations": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                      "type": "object"
                    },
                    "labels": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                      "type": "object"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "spec": {
                  "description": "Spec is the specification of the calico-kube-controllers Deployment.",
                  "properties": {
                    "minReadySeconds": {
                      "description": "MinReadySeconds is the minimum number of seconds for which a newly created Deployment pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the calico-kube-controllers Deployment.\nIf omitted, the calico-kube-controllers Deployment will use its default value for minReadySeconds.",
                      "format": "int32",
                      "maximum": 2147483647,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "template": {
                      "description": "Template describes the calico-kube-controllers Deployment pod that will be created.",
                      "properties": {
                        "metadata": {
                          "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                          "properties": {
                            "annotations": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                              "type": "object"
                            },
                            "labels": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                              "type": "object"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "spec": {
                          "description": "Spec is the calico-kube-controllers Deployment's PodSpec.",
                          "properties": {
                            "affinity": {
                              "description": "Affinity is a group of affinity scheduling rules for the calico-kube-controllers pods.\nIf specified, this overrides any affinity that may be set on the calico-kube-controllers Deployment.\nIf omitted, the calico-kube-controllers Deployment will use its default value for affinity.\nWARNING: Please note that this field will override the default calico-kube-controllers Deployment affinity.",
                              "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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
                            },
                            "containers": {
                              "description": "Containers is a list of calico-kube-controllers containers.\nIf specified, this overrides the specified calico-kube-controllers Deployment containers.\nIf omitted, the calico-kube-controllers Deployment will use its default values for its containers.",
                              "items": {
                                "description": "CalicoKubeControllersDeploymentContainer is a calico-kube-controllers Deployment container.",
                                "properties": {
                                  "name": {
                                    "description": "Name is an enum which identifies the calico-kube-controllers Deployment container by name.\nSupported values are: calico-kube-controllers, es-calico-kube-controllers",
                                    "enum": [
                                      "calico-kube-controllers",
                                      "es-calico-kube-controllers"
                                    ],
                                    "type": "string"
                                  },
                                  "resources": {
                                    "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-kube-controllers Deployment container's resources.\nIf omitted, the calico-kube-controllers Deployment will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                    "properties": {
                                      "claims": {
                                        "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "nodeSelector": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "NodeSelector is the calico-kube-controllers pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the calico-kube-controllers Deployment nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf used in conjunction with ControlPlaneNodeSelector, that nodeSelector is set on the calico-kube-controllers Deployment\nand each of this field's key/value pairs are added to the calico-kube-controllers Deployment nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the calico-kube-controllers Deployment will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default calico-kube-controllers Deployment nodeSelector.",
                              "type": "object"
                            },
                            "tolerations": {
                              "description": "Tolerations is the calico-kube-controllers pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the calico-kube-controllers Deployment.\nIf omitted, the calico-kube-controllers Deployment will use its default value for tolerations.\nWARNING: Please note that this field will override the default calico-kube-controllers Deployment tolerations.",
                              "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
                              },
                              "type": "array"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "calicoNetwork": {
              "description": "CalicoNetwork specifies networking configuration options for Calico.",
              "properties": {
                "bgp": {
                  "description": "BGP configures whether or not to enable Calico's BGP capabilities.",
                  "enum": [
                    "Enabled",
                    "Disabled"
                  ],
                  "type": "string"
                },
                "bpfNetworkBootstrap": {
                  "description": "BPFNetworkBootstrap manages the initial networking setup required to configure the BPF dataplane.\nWhen enabled, the operator tries to bootstraps access to the Kubernetes API Server\nby using the Kubernetes service and its associated endpoints.\nThis field should be enabled only if linuxDataplane is set to \"BPF\".\nIf another dataplane is selected, this field must be omitted or explicitly set to Disabled.\nWhen disabled and linuxDataplane is BPF, you must manually provide the Kubernetes API Server\ninformation via the \"kubernetes-service-endpoint\" ConfigMap. It is invalid to use both the ConfigMap\nand have this field set to true at the same time.\nDefault: Disabled",
                  "enum": [
                    "Disabled",
                    "Enabled"
                  ],
                  "type": "string"
                },
                "containerIPForwarding": {
                  "description": "ContainerIPForwarding configures whether ip forwarding will be enabled for containers in the CNI configuration.\nDefault: Disabled",
                  "enum": [
                    "Enabled",
                    "Disabled"
                  ],
                  "type": "string"
                },
                "hostPorts": {
                  "description": "HostPorts configures whether or not Calico will support Kubernetes HostPorts. Valid only when using the Calico CNI plugin.\nDefault: Enabled",
                  "enum": [
                    "Enabled",
                    "Disabled"
                  ],
                  "type": "string"
                },
                "ipPools": {
                  "description": "IPPools contains a list of IP pools to manage. If nil, a single IPv4 IP pool\nwill be created by the operator. If an empty list is provided, the operator will not create any IP pools and will instead\nwait for IP pools to be created out-of-band.\nIP pools in this list will be reconciled by the operator and should not be modified out-of-band.",
                  "items": {
                    "properties": {
                      "allowedUses": {
                        "description": "AllowedUse controls what the IP pool will be used for.  If not specified or empty, defaults to\n[\"Tunnel\", \"Workload\"] for back-compatibility",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "assignmentMode": {
                        "description": "AssignmentMode determines if IP addresses from this pool should be  assigned automatically or on request only",
                        "type": "string"
                      },
                      "blockSize": {
                        "description": "BlockSize specifies the CIDR prefex length to use when allocating per-node IP blocks from\nthe main IP pool CIDR.\nDefault: 26 (IPv4), 122 (IPv6)",
                        "format": "int32",
                        "type": "integer"
                      },
                      "cidr": {
                        "description": "CIDR contains the address range for the IP Pool in classless inter-domain routing format.",
                        "type": "string"
                      },
                      "disableBGPExport": {
                        "default": false,
                        "description": "DisableBGPExport specifies whether routes from this IP pool's CIDR are exported over BGP.\nDefault: false",
                        "type": "boolean"
                      },
                      "disableNewAllocations": {
                        "description": "DisableNewAllocations specifies whether or not new IP allocations are allowed from this pool.\nThis is useful when you want to prevent new pods from receiving IP addresses from this pool, without\nimpacting any existing pods that have already been assigned addresses from this pool.",
                        "type": "boolean"
                      },
                      "encapsulation": {
                        "description": "Encapsulation specifies the encapsulation type that will be used with\nthe IP Pool.\nDefault: IPIP",
                        "enum": [
                          "IPIPCrossSubnet",
                          "IPIP",
                          "VXLAN",
                          "VXLANCrossSubnet",
                          "None"
                        ],
                        "type": "string"
                      },
                      "name": {
                        "description": "Name is the name of the IP pool. If omitted, this will be generated.",
                        "type": "string"
                      },
                      "natOutgoing": {
                        "description": "NATOutgoing specifies if NAT will be enabled or disabled for outgoing traffic.\nDefault: Enabled",
                        "enum": [
                          "Enabled",
                          "Disabled"
                        ],
                        "type": "string"
                      },
                      "nodeSelector": {
                        "description": "NodeSelector specifies the node selector that will be set for the IP Pool.\nDefault: 'all()'",
                        "type": "string"
                      }
                    },
                    "required": [
                      "cidr"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "maxItems": 25,
                  "type": "array"
                },
                "kubeProxyManagement": {
                  "description": "KubeProxyManagement controls whether the operator manages the kube-proxy DaemonSet.\nWhen enabled, the operator will manage the DaemonSet by patching it:\nit disables kube-proxy if the dataplane is BPF, or enables it otherwise.\nDefault: Disabled",
                  "enum": [
                    "Disabled",
                    "Enabled"
                  ],
                  "type": "string"
                },
                "linuxDataplane": {
                  "description": "LinuxDataplane is used to select the dataplane used for Linux nodes. In particular, it\ncauses the operator to add required mounts and environment variables for the particular dataplane.\nIf not specified, iptables mode is used.\nDefault: Iptables",
                  "enum": [
                    "Iptables",
                    "BPF",
                    "VPP",
                    "Nftables"
                  ],
                  "type": "string"
                },
                "linuxPolicySetupTimeoutSeconds": {
                  "description": "LinuxPolicySetupTimeoutSeconds delays new pods from running containers\nuntil their policy has been programmed in the dataplane.\nThe specified delay defines the maximum amount of time\nthat the Calico CNI plugin will wait for policy to be programmed.\nOnly applies to pods created on Linux nodes.\n* A value of 0 disables pod startup delays.\nDefault: 0",
                  "format": "int32",
                  "type": "integer"
                },
                "mtu": {
                  "description": "MTU specifies the maximum transmission unit to use on the pod network.\nIf not specified, Calico will perform MTU auto-detection based on the cluster network.",
                  "format": "int32",
                  "type": "integer"
                },
                "multiInterfaceMode": {
                  "description": "MultiInterfaceMode configures what will configure multiple interface per pod. Only valid for Calico Enterprise installations\nusing the Calico CNI plugin.\nDefault: None",
                  "enum": [
                    "None",
                    "Multus"
                  ],
                  "type": "string"
                },
                "nodeAddressAutodetectionV4": {
                  "description": "NodeAddressAutodetectionV4 specifies an approach to automatically detect node IPv4 addresses. If not specified,\nwill use default auto-detection settings to acquire an IPv4 address for each node.",
                  "properties": {
                    "canReach": {
                      "description": "CanReach enables IP auto-detection based on which source address on the node is used to reach the\nspecified IP or domain.",
                      "type": "string"
                    },
                    "cidrs": {
                      "description": "CIDRS enables IP auto-detection based on which addresses on the nodes are within\none of the provided CIDRs.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "firstFound": {
                      "description": "FirstFound uses default interface matching parameters to select an interface, performing best-effort\nfiltering based on well-known interface names.",
                      "type": "boolean"
                    },
                    "interface": {
                      "description": "Interface enables IP auto-detection based on interfaces that match the given regex.",
                      "type": "string"
                    },
                    "kubernetes": {
                      "description": "Kubernetes configures Calico to detect node addresses based on the Kubernetes API.",
                      "enum": [
                        "NodeInternalIP"
                      ],
                      "type": "string"
                    },
                    "skipInterface": {
                      "description": "SkipInterface enables IP auto-detection based on interfaces that do not match\nthe given regex.",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "nodeAddressAutodetectionV6": {
                  "description": "NodeAddressAutodetectionV6 specifies an approach to automatically detect node IPv6 addresses. If not specified,\nIPv6 addresses will not be auto-detected.",
                  "properties": {
                    "canReach": {
                      "description": "CanReach enables IP auto-detection based on which source address on the node is used to reach the\nspecified IP or domain.",
                      "type": "string"
                    },
                    "cidrs": {
                      "description": "CIDRS enables IP auto-detection based on which addresses on the nodes are within\none of the provided CIDRs.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "firstFound": {
                      "description": "FirstFound uses default interface matching parameters to select an interface, performing best-effort\nfiltering based on well-known interface names.",
                      "type": "boolean"
                    },
                    "interface": {
                      "description": "Interface enables IP auto-detection based on interfaces that match the given regex.",
                      "type": "string"
                    },
                    "kubernetes": {
                      "description": "Kubernetes configures Calico to detect node addresses based on the Kubernetes API.",
                      "enum": [
                        "NodeInternalIP"
                      ],
                      "type": "string"
                    },
                    "skipInterface": {
                      "description": "SkipInterface enables IP auto-detection based on interfaces that do not match\nthe given regex.",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "sysctl": {
                  "description": "Sysctl configures sysctl parameters for tuning plugin",
                  "items": {
                    "properties": {
                      "key": {
                        "enum": [
                          "net.ipv4.tcp_keepalive_intvl",
                          "net.ipv4.tcp_keepalive_probes",
                          "net.ipv4.tcp_keepalive_time"
                        ],
                        "type": "string"
                      },
                      "value": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "key",
                      "value"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "windowsDataplane": {
                  "description": "WindowsDataplane is used to select the dataplane used for Windows nodes. In particular, it\ncauses the operator to add required mounts and environment variables for the particular dataplane.\nIf not specified, it is disabled and the operator will not render the Calico Windows nodes daemonset.\nDefault: Disabled",
                  "enum": [
                    "HNS",
                    "Disabled"
                  ],
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "calicoNodeDaemonSet": {
              "description": "CalicoNodeDaemonSet configures the calico-node DaemonSet. If used in\nconjunction with the deprecated ComponentResources, then these overrides take precedence.",
              "properties": {
                "metadata": {
                  "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the DaemonSet.",
                  "properties": {
                    "annotations": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                      "type": "object"
                    },
                    "labels": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                      "type": "object"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "spec": {
                  "description": "Spec is the specification of the calico-node DaemonSet.",
                  "properties": {
                    "minReadySeconds": {
                      "description": "MinReadySeconds is the minimum number of seconds for which a newly created DaemonSet pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the calico-node DaemonSet.\nIf omitted, the calico-node DaemonSet will use its default value for minReadySeconds.",
                      "format": "int32",
                      "maximum": 2147483647,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "template": {
                      "description": "Template describes the calico-node DaemonSet pod that will be created.",
                      "properties": {
                        "metadata": {
                          "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                          "properties": {
                            "annotations": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                              "type": "object"
                            },
                            "labels": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                              "type": "object"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "spec": {
                          "description": "Spec is the calico-node DaemonSet's PodSpec.",
                          "properties": {
                            "affinity": {
                              "description": "Affinity is a group of affinity scheduling rules for the calico-node pods.\nIf specified, this overrides any affinity that may be set on the calico-node DaemonSet.\nIf omitted, the calico-node DaemonSet will use its default value for affinity.\nWARNING: Please note that this field will override the default calico-node DaemonSet affinity.",
                              "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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
                            },
                            "containers": {
                              "description": "Containers is a list of calico-node containers.\nIf specified, this overrides the specified calico-node DaemonSet containers.\nIf omitted, the calico-node DaemonSet will use its default values for its containers.",
                              "items": {
                                "description": "CalicoNodeDaemonSetContainer is a calico-node DaemonSet container.",
                                "properties": {
                                  "name": {
                                    "description": "Name is an enum which identifies the calico-node DaemonSet container by name.\nSupported values are: calico-node",
                                    "enum": [
                                      "calico-node"
                                    ],
                                    "type": "string"
                                  },
                                  "resources": {
                                    "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-node DaemonSet container's resources.\nIf omitted, the calico-node DaemonSet will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                    "properties": {
                                      "claims": {
                                        "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "dnsConfig": {
                              "description": "DNSConfig allows customization of the DNS configuration for the calico-node pods.",
                              "properties": {
                                "nameservers": {
                                  "description": "A list of DNS name server IP addresses.\nThis will be appended to the base nameservers generated from DNSPolicy.\nDuplicated nameservers will be removed.",
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array",
                                  "x-kubernetes-list-type": "atomic"
                                },
                                "options": {
                                  "description": "A list of DNS resolver options.\nThis will be merged with the base options generated from DNSPolicy.\nDuplicated entries will be removed. Resolution options given in Options\nwill override those that appear in the base DNSPolicy.",
                                  "items": {
                                    "description": "PodDNSConfigOption defines DNS resolver options of a pod.",
                                    "properties": {
                                      "name": {
                                        "description": "Name is this DNS resolver option's name.\nRequired.",
                                        "type": "string"
                                      },
                                      "value": {
                                        "description": "Value is this DNS resolver option's value.",
                                        "type": "string"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  },
                                  "type": "array",
                                  "x-kubernetes-list-type": "atomic"
                                },
                                "searches": {
                                  "description": "A list of DNS search domains for host-name lookup.\nThis will be appended to the base search paths generated from DNSPolicy.\nDuplicated search paths will be removed.",
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array",
                                  "x-kubernetes-list-type": "atomic"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            },
                            "dnsPolicy": {
                              "description": "DNSPolicy is the DNS policy for the calico-node pods.",
                              "enum": [
                                "",
                                "Default",
                                "ClusterFirst",
                                "ClusterFirstWithHostNet",
                                "None"
                              ],
                              "type": "string"
                            },
                            "initContainers": {
                              "description": "InitContainers is a list of calico-node init containers.\nIf specified, this overrides the specified calico-node DaemonSet init containers.\nIf omitted, the calico-node DaemonSet will use its default values for its init containers.",
                              "items": {
                                "description": "CalicoNodeDaemonSetInitContainer is a calico-node DaemonSet init container.",
                                "properties": {
                                  "name": {
                                    "description": "Name is an enum which identifies the calico-node DaemonSet init container by name.\nSupported values are: install-cni, hostpath-init, flexvol-driver, ebpf-bootstrap, node-certs-key-cert-provisioner, calico-node-prometheus-server-tls-key-cert-provisioner, mount-bpffs (deprecated, replaced by ebpf-bootstrap)",
                                    "enum": [
                                      "install-cni",
                                      "hostpath-init",
                                      "flexvol-driver",
                                      "ebpf-bootstrap",
                                      "node-certs-key-cert-provisioner",
                                      "calico-node-prometheus-server-tls-key-cert-provisioner",
                                      "mount-bpffs"
                                    ],
                                    "type": "string"
                                  },
                                  "resources": {
                                    "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-node DaemonSet init container's resources.\nIf omitted, the calico-node DaemonSet will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                    "properties": {
                                      "claims": {
                                        "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "nodeSelector": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "NodeSelector is the calico-node pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the calico-node DaemonSet nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the calico-node DaemonSet will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default calico-node DaemonSet nodeSelector.",
                              "type": "object"
                            },
                            "tolerations": {
                              "description": "Tolerations is the calico-node pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the calico-node DaemonSet.\nIf omitted, the calico-node DaemonSet will use its default value for tolerations.\nWARNING: Please note that this field will override the default calico-node DaemonSet tolerations.",
                              "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
                              },
                              "type": "array"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "calicoNodeWindowsDaemonSet": {
              "description": "CalicoNodeWindowsDaemonSet configures the calico-node-windows DaemonSet.",
              "properties": {
                "metadata": {
                  "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the DaemonSet.",
                  "properties": {
                    "annotations": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                      "type": "object"
                    },
                    "labels": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                      "type": "object"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "spec": {
                  "description": "Spec is the specification of the calico-node-windows DaemonSet.",
                  "properties": {
                    "minReadySeconds": {
                      "description": "MinReadySeconds is the minimum number of seconds for which a newly created DaemonSet pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the calico-node-windows DaemonSet.\nIf omitted, the calico-node-windows DaemonSet will use its default value for minReadySeconds.",
                      "format": "int32",
                      "maximum": 2147483647,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "template": {
                      "description": "Template describes the calico-node-windows DaemonSet pod that will be created.",
                      "properties": {
                        "metadata": {
                          "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                          "properties": {
                            "annotations": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                              "type": "object"
                            },
                            "labels": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                              "type": "object"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "spec": {
                          "description": "Spec is the calico-node-windows DaemonSet's PodSpec.",
                          "properties": {
                            "affinity": {
                              "description": "Affinity is a group of affinity scheduling rules for the calico-node-windows pods.\nIf specified, this overrides any affinity that may be set on the calico-node-windows DaemonSet.\nIf omitted, the calico-node-windows DaemonSet will use its default value for affinity.\nWARNING: Please note that this field will override the default calico-node-windows DaemonSet affinity.",
                              "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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
                            },
                            "containers": {
                              "description": "Containers is a list of calico-node-windows containers.\nIf specified, this overrides the specified calico-node-windows DaemonSet containers.\nIf omitted, the calico-node-windows DaemonSet will use its default values for its containers.",
                              "items": {
                                "description": "CalicoNodeWindowsDaemonSetContainer is a calico-node-windows DaemonSet container.",
                                "properties": {
                                  "name": {
                                    "description": "Name is an enum which identifies the calico-node-windows DaemonSet container by name.\nSupported values are: calico-node-windows",
                                    "enum": [
                                      "calico-node-windows"
                                    ],
                                    "type": "string"
                                  },
                                  "resources": {
                                    "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-node-windows DaemonSet container's resources.\nIf omitted, the calico-node-windows DaemonSet will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                    "properties": {
                                      "claims": {
                                        "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "initContainers": {
                              "description": "InitContainers is a list of calico-node-windows init containers.\nIf specified, this overrides the specified calico-node-windows DaemonSet init containers.\nIf omitted, the calico-node-windows DaemonSet will use its default values for its init containers.",
                              "items": {
                                "description": "CalicoNodeWindowsDaemonSetInitContainer is a calico-node-windows DaemonSet init container.",
                                "properties": {
                                  "name": {
                                    "description": "Name is an enum which identifies the calico-node-windows DaemonSet init container by name.\nSupported values are: install-cni;hostpath-init, flexvol-driver, node-certs-key-cert-provisioner, calico-node-windows-prometheus-server-tls-key-cert-provisioner",
                                    "enum": [
                                      "install-cni",
                                      "hostpath-init",
                                      "flexvol-driver",
                                      "node-certs-key-cert-provisioner",
                                      "calico-node-windows-prometheus-server-tls-key-cert-provisioner"
                                    ],
                                    "type": "string"
                                  },
                                  "resources": {
                                    "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-node-windows DaemonSet init container's resources.\nIf omitted, the calico-node-windows DaemonSet will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                    "properties": {
                                      "claims": {
                                        "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "nodeSelector": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "NodeSelector is the calico-node-windows pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the calico-node-windows DaemonSet nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the calico-node-windows DaemonSet will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default calico-node-windows DaemonSet nodeSelector.",
                              "type": "object"
                            },
                            "tolerations": {
                              "description": "Tolerations is the calico-node-windows pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the calico-node-windows DaemonSet.\nIf omitted, the calico-node-windows DaemonSet will use its default value for tolerations.\nWARNING: Please note that this field will override the default calico-node-windows DaemonSet tolerations.",
                              "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
                              },
                              "type": "array"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "calicoWindowsUpgradeDaemonSet": {
              "description": "Deprecated. The CalicoWindowsUpgradeDaemonSet is deprecated and will be removed from the API in the future.\nCalicoWindowsUpgradeDaemonSet configures the calico-windows-upgrade DaemonSet.",
              "properties": {
                "metadata": {
                  "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the Deployment.",
                  "properties": {
                    "annotations": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                      "type": "object"
                    },
                    "labels": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                      "type": "object"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "spec": {
                  "description": "Spec is the specification of the calico-windows-upgrade DaemonSet.",
                  "properties": {
                    "minReadySeconds": {
                      "description": "MinReadySeconds is the minimum number of seconds for which a newly created Deployment pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the calico-windows-upgrade DaemonSet.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default value for minReadySeconds.",
                      "format": "int32",
                      "maximum": 2147483647,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "template": {
                      "description": "Template describes the calico-windows-upgrade DaemonSet pod that will be created.",
                      "properties": {
                        "metadata": {
                          "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                          "properties": {
                            "annotations": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                              "type": "object"
                            },
                            "labels": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                              "type": "object"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "spec": {
                          "description": "Spec is the calico-windows-upgrade DaemonSet's PodSpec.",
                          "properties": {
                            "affinity": {
                              "description": "Affinity is a group of affinity scheduling rules for the calico-windows-upgrade pods.\nIf specified, this overrides any affinity that may be set on the calico-windows-upgrade DaemonSet.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default value for affinity.\nWARNING: Please note that this field will override the default calico-windows-upgrade DaemonSet affinity.",
                              "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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
                            },
                            "containers": {
                              "description": "Containers is a list of calico-windows-upgrade containers.\nIf specified, this overrides the specified calico-windows-upgrade DaemonSet containers.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default values for its containers.",
                              "items": {
                                "description": "CalicoWindowsUpgradeDaemonSetContainer is a calico-windows-upgrade DaemonSet container.",
                                "properties": {
                                  "name": {
                                    "description": "Name is an enum which identifies the calico-windows-upgrade DaemonSet container by name.",
                                    "enum": [
                                      "calico-windows-upgrade"
                                    ],
                                    "type": "string"
                                  },
                                  "resources": {
                                    "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named calico-windows-upgrade DaemonSet container's resources.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default value for this container's resources.",
                                    "properties": {
                                      "claims": {
                                        "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "nodeSelector": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "NodeSelector is the calico-windows-upgrade pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the calico-windows-upgrade DaemonSet nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default calico-windows-upgrade DaemonSet nodeSelector.",
                              "type": "object"
                            },
                            "tolerations": {
                              "description": "Tolerations is the calico-windows-upgrade pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the calico-windows-upgrade DaemonSet.\nIf omitted, the calico-windows-upgrade DaemonSet will use its default value for tolerations.\nWARNING: Please note that this field will override the default calico-windows-upgrade DaemonSet tolerations.",
                              "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
                              },
                              "type": "array"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "certificateManagement": {
              "description": "CertificateManagement configures pods to submit a CertificateSigningRequest to the certificates.k8s.io/v1 API in order\nto obtain TLS certificates. This feature requires that you bring your own CSR signing and approval process, otherwise\npods will be stuck during initialization.",
              "properties": {
                "caCert": {
                  "description": "Certificate of the authority that signs the CertificateSigningRequests in PEM format.",
                  "format": "byte",
                  "type": "string"
                },
                "keyAlgorithm": {
                  "description": "Specify the algorithm used by pods to generate a key pair that is associated with the X.509 certificate request.\nDefault: RSAWithSize2048",
                  "enum": [
                    "",
                    "RSAWithSize2048",
                    "RSAWithSize4096",
                    "RSAWithSize8192",
                    "ECDSAWithCurve256",
                    "ECDSAWithCurve384",
                    "ECDSAWithCurve521"
                  ],
                  "type": "string"
                },
                "signatureAlgorithm": {
                  "description": "Specify the algorithm used for the signature of the X.509 certificate request.\nDefault: SHA256WithRSA",
                  "enum": [
                    "",
                    "SHA256WithRSA",
                    "SHA384WithRSA",
                    "SHA512WithRSA",
                    "ECDSAWithSHA256",
                    "ECDSAWithSHA384",
                    "ECDSAWithSHA512"
                  ],
                  "type": "string"
                },
                "signerName": {
                  "description": "When a CSR is issued to the certificates.k8s.io API, the signerName is added to the request in order to accommodate for clusters\nwith multiple signers.\nMust be formatted as: `<my-domain>/<my-signername>`.",
                  "type": "string"
                }
              },
              "required": [
                "caCert",
                "signerName"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "cni": {
              "description": "CNI specifies the CNI that will be used by this installation.",
              "properties": {
                "binDir": {
                  "description": "BinDir is the path to the CNI binaries directory.\nIf you have changed the installation directory for CNI binaries in the container runtime configuration,\nplease ensure that this field points to the same directory as specified in the container runtime settings.\nDefault directory depends on the KubernetesProvider.\n* For KubernetesProvider GKE, this field defaults to \"/home/kubernetes/bin\".\n* For KubernetesProvider OpenShift, this field defaults to \"/var/lib/cni/bin\".\n* Otherwise, this field defaults to \"/opt/cni/bin\".",
                  "type": "string"
                },
                "confDir": {
                  "description": "ConfDir is the path to the CNI config directory.\nIf you have changed the installation directory for CNI configuration in the container runtime configuration,\nplease ensure that this field points to the same directory as specified in the container runtime settings.\nDefault directory depends on the KubernetesProvider.\n* For KubernetesProvider GKE, this field defaults to \"/etc/cni/net.d\".\n* For KubernetesProvider OpenShift, this field defaults to \"/var/run/multus/cni/net.d\".\n* Otherwise, this field defaults to \"/etc/cni/net.d\".",
                  "type": "string"
                },
                "ipam": {
                  "description": "IPAM specifies the pod IP address management that will be used in the Calico or\nCalico Enterprise installation.",
                  "properties": {
                    "type": {
                      "description": "Specifies the IPAM plugin that will be used in the Calico or Calico Enterprise installation.\n* For CNI Plugin Calico, this field defaults to Calico.\n* For CNI Plugin GKE, this field defaults to HostLocal.\n* For CNI Plugin AzureVNET, this field defaults to AzureVNET.\n* For CNI Plugin AmazonVPC, this field defaults to AmazonVPC.\nThe IPAM plugin is installed and configured only if the CNI plugin is set to Calico,\nfor all other values of the CNI plugin the plugin binaries and CNI config is a dependency\nthat is expected to be installed separately.\nDefault: Calico",
                      "enum": [
                        "Calico",
                        "HostLocal",
                        "AmazonVPC",
                        "AzureVNET"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "type": {
                  "description": "Specifies the CNI plugin that will be used in the Calico or Calico Enterprise installation.\n* For KubernetesProvider GKE, this field defaults to GKE.\n* For KubernetesProvider AKS, this field defaults to AzureVNET.\n* For KubernetesProvider EKS, this field defaults to AmazonVPC.\n* If aws-node daemonset exists in kube-system when the Installation resource is created, this field defaults to AmazonVPC.\n* For all other cases this field defaults to Calico.\nFor the value Calico, the CNI plugin binaries and CNI config will be installed as part of deployment,\nfor all other values the CNI plugin binaries and CNI config is a dependency that is expected\nto be installed separately.\nDefault: Calico",
                  "enum": [
                    "Calico",
                    "GKE",
                    "AmazonVPC",
                    "AzureVNET"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "componentResources": {
              "description": "Deprecated. Please use CalicoNodeDaemonSet, TyphaDeployment, and KubeControllersDeployment.\nComponentResources can be used to customize the resource requirements for each component.\nNode, Typha, and KubeControllers are supported for installations.",
              "items": {
                "description": "Deprecated. Please use component resource config fields in Installation.Spec instead.\nThe ComponentResource struct associates a ResourceRequirements with a component by name",
                "properties": {
                  "componentName": {
                    "description": "ComponentName is an enum which identifies the component",
                    "enum": [
                      "Node",
                      "Typha",
                      "KubeControllers"
                    ],
                    "type": "string"
                  },
                  "resourceRequirements": {
                    "description": "ResourceRequirements allows customization of limits and requests for compute resources such as cpu and memory.",
                    "properties": {
                      "claims": {
                        "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                  }
                },
                "required": [
                  "componentName",
                  "resourceRequirements"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "controlPlaneNodeSelector": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "ControlPlaneNodeSelector is used to select control plane nodes on which to run Calico\ncomponents. This is globally applied to all resources created by the operator excluding daemonsets.",
              "type": "object"
            },
            "controlPlaneReplicas": {
              "description": "ControlPlaneReplicas defines how many replicas of the control plane core components will be deployed.\nThis field applies to all control plane components that support High Availability. Defaults to 2.",
              "format": "int32",
              "type": "integer"
            },
            "controlPlaneTolerations": {
              "description": "ControlPlaneTolerations specify tolerations which are then globally applied to all resources\ncreated by the operator.",
              "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
              },
              "type": "array"
            },
            "csiNodeDriverDaemonSet": {
              "description": "CSINodeDriverDaemonSet configures the csi-node-driver DaemonSet.",
              "properties": {
                "metadata": {
                  "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the DaemonSet.",
                  "properties": {
                    "annotations": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                      "type": "object"
                    },
                    "labels": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                      "type": "object"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "spec": {
                  "description": "Spec is the specification of the csi-node-driver DaemonSet.",
                  "properties": {
                    "minReadySeconds": {
                      "description": "MinReadySeconds is the minimum number of seconds for which a newly created DaemonSet pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the csi-node-driver DaemonSet.\nIf omitted, the csi-node-driver DaemonSet will use its default value for minReadySeconds.",
                      "format": "int32",
                      "maximum": 2147483647,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "template": {
                      "description": "Template describes the csi-node-driver DaemonSet pod that will be created.",
                      "properties": {
                        "metadata": {
                          "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                          "properties": {
                            "annotations": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                              "type": "object"
                            },
                            "labels": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                              "type": "object"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "spec": {
                          "description": "Spec is the csi-node-driver DaemonSet's PodSpec.",
                          "properties": {
                            "affinity": {
                              "description": "Affinity is a group of affinity scheduling rules for the csi-node-driver pods.\nIf specified, this overrides any affinity that may be set on the csi-node-driver DaemonSet.\nIf omitted, the csi-node-driver DaemonSet will use its default value for affinity.\nWARNING: Please note that this field will override the default csi-node-driver DaemonSet affinity.",
                              "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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
                            },
                            "containers": {
                              "description": "Containers is a list of csi-node-driver containers.\nIf specified, this overrides the specified csi-node-driver DaemonSet containers.\nIf omitted, the csi-node-driver DaemonSet will use its default values for its containers.",
                              "items": {
                                "description": "CSINodeDriverDaemonSetContainer is a csi-node-driver DaemonSet container.",
                                "properties": {
                                  "name": {
                                    "description": "Name is an enum which identifies the csi-node-driver DaemonSet container by name.\nSupported values are: calico-csi, csi-node-driver-registrar.",
                                    "enum": [
                                      "calico-csi",
                                      "csi-node-driver-registrar",
                                      "csi-node-driver"
                                    ],
                                    "type": "string"
                                  },
                                  "resources": {
                                    "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named csi-node-driver DaemonSet container's resources.\nIf omitted, the csi-node-driver DaemonSet will use its default value for this container's resources.",
                                    "properties": {
                                      "claims": {
                                        "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "nodeSelector": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "NodeSelector is the csi-node-driver pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the csi-node-driver DaemonSet nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the csi-node-driver DaemonSet will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default csi-node-driver DaemonSet nodeSelector.",
                              "type": "object"
                            },
                            "tolerations": {
                              "description": "Tolerations is the csi-node-driver pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the csi-node-driver DaemonSet.\nIf omitted, the csi-node-driver DaemonSet will use its default value for tolerations.\nWARNING: Please note that this field will override the default csi-node-driver DaemonSet tolerations.",
                              "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
                              },
                              "type": "array"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "fipsMode": {
              "description": "FIPSMode uses images and features only that are using FIPS 140-2 validated cryptographic modules and standards.\nOnly supported for Variant=Calico.\nDefault: Disabled",
              "enum": [
                "Enabled",
                "Disabled"
              ],
              "type": "string"
            },
            "flexVolumePath": {
              "description": "FlexVolumePath optionally specifies a custom path for FlexVolume. If not specified, FlexVolume will be\nenabled by default. If set to 'None', FlexVolume will be disabled. The default is based on the\nkubernetesProvider.",
              "type": "string"
            },
            "imagePath": {
              "description": "ImagePath allows for the path part of an image to be specified. If specified\nthen the specified value will be used as the image path for each image. If not specified\nor empty, the default for each image will be used.\nA special case value, UseDefault, is supported to explicitly specify the default\nimage path will be used for each image.\nImage format:\n   `<registry><imagePath>/<imagePrefix><imageName>:<image-tag>`\nThis option allows configuring the `<imagePath>` portion of the above format.",
              "type": "string"
            },
            "imagePrefix": {
              "description": "ImagePrefix allows for the prefix part of an image to be specified. If specified\nthen the given value will be used as a prefix on each image. If not specified\nor empty, no prefix will be used.\nA special case value, UseDefault, is supported to explicitly specify the default\nimage prefix will be used for each image.\nImage format:\n   `<registry><imagePath>/<imagePrefix><imageName>:<image-tag>`\nThis option allows configuring the `<imagePrefix>` portion of the above format.",
              "type": "string"
            },
            "imagePullSecrets": {
              "description": "ImagePullSecrets is an array of references to container registry pull secrets to use. These are\napplied to all images to be pulled.",
              "items": {
                "description": "LocalObjectReference contains enough information to let you locate the\nreferenced object inside the same namespace.",
                "properties": {
                  "name": {
                    "default": "",
                    "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                    "type": "string"
                  }
                },
                "type": "object",
                "x-kubernetes-map-type": "atomic",
                "additionalProperties": false
              },
              "type": "array"
            },
            "kubeletVolumePluginPath": {
              "description": "KubeletVolumePluginPath optionally specifies enablement of Calico CSI plugin. If not specified,\nCSI will be enabled by default. If set to 'None', CSI will be disabled.\nDefault: /var/lib/kubelet",
              "type": "string"
            },
            "kubernetesProvider": {
              "description": "KubernetesProvider specifies a particular provider of the Kubernetes platform and enables provider-specific configuration.\nIf the specified value is empty, the Operator will attempt to automatically determine the current provider.\nIf the specified value is not empty, the Operator will still attempt auto-detection, but\nwill additionally compare the auto-detected value to the specified value to confirm they match.",
              "enum": [
                "",
                "EKS",
                "GKE",
                "AKS",
                "OpenShift",
                "DockerEnterprise",
                "RKE2",
                "TKG",
                "Kind"
              ],
              "type": "string"
            },
            "logging": {
              "description": "Logging Configuration for Components",
              "properties": {
                "cni": {
                  "description": "Customized logging specification for calico-cni plugin",
                  "properties": {
                    "logFileMaxAgeDays": {
                      "description": "Default: 30 (days)",
                      "format": "int32",
                      "type": "integer"
                    },
                    "logFileMaxCount": {
                      "description": "Default: 10",
                      "format": "int32",
                      "type": "integer"
                    },
                    "logFileMaxSize": {
                      "anyOf": [
                        {
                          "type": "integer"
                        },
                        {
                          "type": "string"
                        }
                      ],
                      "description": "Default: 100Mi",
                      "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                      "x-kubernetes-int-or-string": true
                    },
                    "logSeverity": {
                      "description": "Default: Info",
                      "enum": [
                        "Error",
                        "Warning",
                        "Info",
                        "Debug"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "nodeMetricsPort": {
              "description": "NodeMetricsPort specifies which port calico/node serves prometheus metrics on. By default, metrics are not enabled.\nIf specified, this overrides any FelixConfiguration resources which may exist. If omitted, then\nprometheus metrics may still be configured through FelixConfiguration.",
              "format": "int32",
              "type": "integer"
            },
            "nodeUpdateStrategy": {
              "description": "NodeUpdateStrategy can be used to customize the desired update strategy, such as the MaxUnavailable\nfield.",
              "properties": {
                "rollingUpdate": {
                  "description": "Rolling update config params. Present only if type = \"RollingUpdate\".",
                  "properties": {
                    "maxSurge": {
                      "anyOf": [
                        {
                          "type": "integer"
                        },
                        {
                          "type": "string"
                        }
                      ],
                      "description": "The maximum number of nodes with an existing available DaemonSet pod that\ncan have an updated DaemonSet pod during during an update.\nValue can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).\nThis can not be 0 if MaxUnavailable is 0.\nAbsolute number is calculated from percentage by rounding up to a minimum of 1.\nDefault value is 0.\nExample: when this is set to 30%, at most 30% of the total number of nodes\nthat should be running the daemon pod (i.e. status.desiredNumberScheduled)\ncan have their a new pod created before the old pod is marked as deleted.\nThe update starts by launching new pods on 30% of nodes. Once an updated\npod is available (Ready for at least minReadySeconds) the old DaemonSet pod\non that node is marked deleted. If the old pod becomes unavailable for any\nreason (Ready transitions to false, is evicted, or is drained) an updated\npod is immediatedly created on that node without considering surge limits.\nAllowing surge implies the possibility that the resources consumed by the\ndaemonset on any given node can double if the readiness check fails, and\nso resource intensive daemonsets should take into account that they may\ncause evictions during disruption.",
                      "x-kubernetes-int-or-string": true
                    },
                    "maxUnavailable": {
                      "anyOf": [
                        {
                          "type": "integer"
                        },
                        {
                          "type": "string"
                        }
                      ],
                      "description": "The maximum number of DaemonSet pods that can be unavailable during the\nupdate. Value can be an absolute number (ex: 5) or a percentage of total\nnumber of DaemonSet pods at the start of the update (ex: 10%). Absolute\nnumber is calculated from percentage by rounding up.\nThis cannot be 0 if MaxSurge is 0\nDefault value is 1.\nExample: when this is set to 30%, at most 30% of the total number of nodes\nthat should be running the daemon pod (i.e. status.desiredNumberScheduled)\ncan have their pods stopped for an update at any given time. The update\nstarts by stopping at most 30% of those DaemonSet pods and then brings\nup new DaemonSet pods in their place. Once the new pods are available,\nit then proceeds onto other DaemonSet pods, thus ensuring that at least\n70% of original number of DaemonSet pods are available at all times during\nthe update.",
                      "x-kubernetes-int-or-string": true
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "type": {
                  "description": "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "nonPrivileged": {
              "description": "NonPrivileged configures Calico to be run in non-privileged containers as non-root users where possible.",
              "type": "string"
            },
            "proxy": {
              "description": "Proxy is used to configure the HTTP(S) proxy settings that will be applied to Tigera containers that connect\nto destinations outside the cluster. It is expected that NO_PROXY is configured such that destinations within\nthe cluster (including the API server) are exempt from proxying.",
              "properties": {
                "httpProxy": {
                  "description": "HTTPProxy defines the value of the HTTP_PROXY environment variable that will be set on Tigera containers that connect to\ndestinations outside the cluster.",
                  "type": "string"
                },
                "httpsProxy": {
                  "description": "HTTPSProxy defines the value of the HTTPS_PROXY environment variable that will be set on Tigera containers that connect to\ndestinations outside the cluster.",
                  "type": "string"
                },
                "noProxy": {
                  "description": "NoProxy defines the value of the NO_PROXY environment variable that will be set on Tigera containers that connect to\ndestinations outside the cluster. This value must be set such that destinations within the scope of the cluster, including\nthe Kubernetes API server, are exempt from being proxied.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "registry": {
              "description": "Registry is the default Docker registry used for component Docker images.\nIf specified then the given value must end with a slash character (`/`) and all images will be pulled from this registry.\nIf not specified then the default registries will be used. A special case value, UseDefault, is\nsupported to explicitly specify the default registries will be used.\nImage format:\n   `<registry><imagePath>/<imagePrefix><imageName>:<image-tag>`\nThis option allows configuring the `<registry>` portion of the above format.",
              "type": "string"
            },
            "serviceCIDRs": {
              "description": "Kubernetes Service CIDRs. Specifying this is required when using Calico for Windows.",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "tlsCipherSuites": {
              "description": "TLSCipherSuites defines the cipher suite list that the TLS protocol should use during secure communication.",
              "items": {
                "properties": {
                  "name": {
                    "description": "This should be a valid TLS cipher suite name.",
                    "enum": [
                      "TLS_AES_256_GCM_SHA384",
                      "TLS_CHACHA20_POLY1305_SHA256",
                      "TLS_AES_128_GCM_SHA256",
                      "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
                      "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
                      "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
                      "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
                      "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
                      "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
                      "TLS_RSA_WITH_AES_256_GCM_SHA384",
                      "TLS_RSA_WITH_AES_128_GCM_SHA256",
                      "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
                      "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
                      "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
                    ],
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "typhaAffinity": {
              "description": "Deprecated. Please use Installation.Spec.TyphaDeployment instead.\nTyphaAffinity allows configuration of node affinity characteristics for Typha pods.",
              "properties": {
                "nodeAffinity": {
                  "description": "NodeAffinity describes node affinity scheduling rules for typha.",
                  "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.",
                      "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"
                    },
                    "requiredDuringSchedulingIgnoredDuringExecution": {
                      "description": "WARNING: Please note that if the affinity requirements specified by this field are not met at\nscheduling time, the pod will NOT be scheduled onto the node.\nThere is no fallback to another affinity rules with this setting.\nThis may cause networking disruption or even catastrophic failure!\nPreferredDuringSchedulingIgnoredDuringExecution should be used for affinity\nunless there is a specific well understood reason to use RequiredDuringSchedulingIgnoredDuringExecution and\nyou can guarantee that the RequiredDuringSchedulingIgnoredDuringExecution will always have sufficient nodes to satisfy the requirement.\nNOTE: RequiredDuringSchedulingIgnoredDuringExecution is set by default for AKS nodes,\nto avoid scheduling Typhas on virtual-nodes.\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
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "typhaDeployment": {
              "description": "TyphaDeployment configures the typha Deployment. If used in conjunction with the deprecated\nComponentResources or TyphaAffinity, then these overrides take precedence.",
              "properties": {
                "metadata": {
                  "description": "Metadata is a subset of a Kubernetes object's metadata that is added to the Deployment.",
                  "properties": {
                    "annotations": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                      "type": "object"
                    },
                    "labels": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                      "type": "object"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "spec": {
                  "description": "Spec is the specification of the typha Deployment.",
                  "properties": {
                    "minReadySeconds": {
                      "description": "MinReadySeconds is the minimum number of seconds for which a newly created Deployment pod should\nbe ready without any of its container crashing, for it to be considered available.\nIf specified, this overrides any minReadySeconds value that may be set on the typha Deployment.\nIf omitted, the typha Deployment will use its default value for minReadySeconds.",
                      "format": "int32",
                      "maximum": 2147483647,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "strategy": {
                      "description": "The deployment strategy to use to replace existing pods with new ones.",
                      "properties": {
                        "rollingUpdate": {
                          "description": "Rolling update config params. Present only if DeploymentStrategyType =\nRollingUpdate.\nto be.",
                          "properties": {
                            "maxSurge": {
                              "anyOf": [
                                {
                                  "type": "integer"
                                },
                                {
                                  "type": "string"
                                }
                              ],
                              "description": "The maximum number of pods that can be scheduled above the desired number of\npods.\nValue can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).\nThis can not be 0 if MaxUnavailable is 0.\nAbsolute number is calculated from percentage by rounding up.\nDefaults to 25%.\nExample: when this is set to 30%, the new ReplicaSet can be scaled up immediately when\nthe rolling update starts, such that the total number of old and new pods do not exceed\n130% of desired pods. Once old pods have been killed,\nnew ReplicaSet can be scaled up further, ensuring that total number of pods running\nat any time during the update is at most 130% of desired pods.",
                              "x-kubernetes-int-or-string": true
                            },
                            "maxUnavailable": {
                              "anyOf": [
                                {
                                  "type": "integer"
                                },
                                {
                                  "type": "string"
                                }
                              ],
                              "description": "The maximum number of pods that can be unavailable during the update.\nValue can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).\nAbsolute number is calculated from percentage by rounding down.\nThis can not be 0 if MaxSurge is 0.\nDefaults to 25%.\nExample: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods\nimmediately when the rolling update starts. Once new pods are ready, old ReplicaSet\ncan be scaled down further, followed by scaling up the new ReplicaSet, ensuring\nthat the total number of pods available at all times during the update is at\nleast 70% of desired pods.",
                              "x-kubernetes-int-or-string": true
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "template": {
                      "description": "Template describes the typha Deployment pod that will be created.",
                      "properties": {
                        "metadata": {
                          "description": "Metadata is a subset of a Kubernetes object's metadata that is added to\nthe pod's metadata.",
                          "properties": {
                            "annotations": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Annotations is a map of arbitrary non-identifying metadata. Each of these\nkey/value pairs are added to the object's annotations provided the key does not\nalready exist in the object's annotations.",
                              "type": "object"
                            },
                            "labels": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "Labels is a map of string keys and values that may match replicaset and\nservice selectors. Each of these key/value pairs are added to the\nobject's labels provided the key does not already exist in the object's labels.",
                              "type": "object"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "spec": {
                          "description": "Spec is the typha Deployment's PodSpec.",
                          "properties": {
                            "affinity": {
                              "description": "Affinity is a group of affinity scheduling rules for the typha pods.\nIf specified, this overrides any affinity that may be set on the typha Deployment.\nIf omitted, the typha Deployment will use its default value for affinity.\nIf used in conjunction with the deprecated TyphaAffinity, then this value takes precedence.\nWARNING: Please note that this field will override the default calico-typha Deployment affinity.",
                              "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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 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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                                "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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.\nThis is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
                                            "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
                            },
                            "containers": {
                              "description": "Containers is a list of typha containers.\nIf specified, this overrides the specified typha Deployment containers.\nIf omitted, the typha Deployment will use its default values for its containers.",
                              "items": {
                                "description": "TyphaDeploymentContainer is a typha Deployment container.",
                                "properties": {
                                  "name": {
                                    "description": "Name is an enum which identifies the typha Deployment container by name.\nSupported values are: calico-typha",
                                    "enum": [
                                      "calico-typha"
                                    ],
                                    "type": "string"
                                  },
                                  "resources": {
                                    "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named typha Deployment container's resources.\nIf omitted, the typha Deployment will use its default value for this container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                    "properties": {
                                      "claims": {
                                        "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "initContainers": {
                              "description": "InitContainers is a list of typha init containers.\nIf specified, this overrides the specified typha Deployment init containers.\nIf omitted, the typha Deployment will use its default values for its init containers.",
                              "items": {
                                "description": "TyphaDeploymentInitContainer is a typha Deployment init container.",
                                "properties": {
                                  "name": {
                                    "description": "Name is an enum which identifies the typha Deployment init container by name.\nSupported values are: typha-certs-key-cert-provisioner",
                                    "enum": [
                                      "typha-certs-key-cert-provisioner"
                                    ],
                                    "type": "string"
                                  },
                                  "resources": {
                                    "description": "Resources allows customization of limits and requests for compute resources such as cpu and memory.\nIf specified, this overrides the named typha Deployment init container's resources.\nIf omitted, the typha Deployment will use its default value for this init container's resources.\nIf used in conjunction with the deprecated ComponentResources, then this value takes precedence.",
                                    "properties": {
                                      "claims": {
                                        "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\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
                                  }
                                },
                                "required": [
                                  "name"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "nodeSelector": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "NodeSelector is the calico-typha pod's scheduling constraints.\nIf specified, each of the key/value pairs are added to the calico-typha Deployment nodeSelector provided\nthe key does not already exist in the object's nodeSelector.\nIf omitted, the calico-typha Deployment will use its default value for nodeSelector.\nWARNING: Please note that this field will modify the default calico-typha Deployment nodeSelector.",
                              "type": "object"
                            },
                            "terminationGracePeriodSeconds": {
                              "description": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request.\nValue must be non-negative integer. The value zero indicates stop immediately via\nthe kill signal (no opportunity to shut down).\nIf this value is nil, the default grace period will be used instead.\nThe grace period is the duration in seconds after the processes running in the pod are sent\na termination signal and the time when the processes are forcibly halted with a kill signal.\nSet this value longer than the expected cleanup time for your process.\nDefaults to 30 seconds.",
                              "format": "int64",
                              "type": "integer"
                            },
                            "tolerations": {
                              "description": "Tolerations is the typha pod's tolerations.\nIf specified, this overrides any tolerations that may be set on the typha Deployment.\nIf omitted, the typha Deployment will use its default value for tolerations.\nWARNING: Please note that this field will override the default calico-typha Deployment tolerations.",
                              "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
                              },
                              "type": "array"
                            },
                            "topologySpreadConstraints": {
                              "description": "TopologySpreadConstraints describes how a group of pods ought to spread across topology\ndomains. Scheduler will schedule pods in a way which abides by the constraints.\nAll topologySpreadConstraints are ANDed.",
                              "items": {
                                "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.",
                                "properties": {
                                  "labelSelector": {
                                    "description": "LabelSelector is used to find matching pods.\nPods that match this label selector are counted to determine the number of pods\nin their corresponding topology domain.",
                                    "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 the pods over which\nspreading will be calculated. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are ANDed with labelSelector\nto select the group of existing pods over which spreading will be calculated\nfor the incoming pod. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.\nMatchLabelKeys cannot be set when LabelSelector isn't set.\nKeys that don't exist in the incoming pod labels will\nbe ignored. A null or empty list means only match against labelSelector.\nThis is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).",
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "maxSkew": {
                                    "description": "MaxSkew describes the degree to which pods may be unevenly distributed.\nWhen `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference\nbetween the number of matching pods in the target topology and the global minimum.\nThe global minimum is the minimum number of matching pods in an eligible domain\nor zero if the number of eligible domains is less than MinDomains.\nFor example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same\nlabelSelector spread as 2/2/1:\nIn this case, the global minimum is 1.\n| zone1 | zone2 | zone3 |\n|  P P  |  P P  |   P   |\n- if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2;\nscheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2)\nviolate MaxSkew(1).\n- if MaxSkew is 2, incoming pod can be scheduled onto any zone.\nWhen `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence\nto topologies that satisfy it.\nIt's a required field. Default value is 1 and 0 is not allowed.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "minDomains": {
                                    "description": "MinDomains indicates a minimum number of eligible domains.\nWhen the number of eligible domains with matching topology keys is less than minDomains,\nPod Topology Spread treats \"global minimum\" as 0, and then the calculation of Skew is performed.\nAnd when the number of eligible domains with matching topology keys equals or greater than minDomains,\nthis value has no effect on scheduling.\nAs a result, when the number of eligible domains is less than minDomains,\nscheduler won't schedule more than maxSkew Pods to those domains.\nIf value is nil, the constraint behaves as if MinDomains is equal to 1.\nValid values are integers greater than 0.\nWhen value is not nil, WhenUnsatisfiable must be DoNotSchedule.\nFor example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same\nlabelSelector spread as 2/2/2:\n| zone1 | zone2 | zone3 |\n|  P P  |  P P  |  P P  |\nThe number of domains is less than 5(MinDomains), so \"global minimum\" is treated as 0.\nIn this situation, new pod with the same labelSelector cannot be scheduled,\nbecause computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones,\nit will violate MaxSkew.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "nodeAffinityPolicy": {
                                    "description": "NodeAffinityPolicy indicates how we will treat Pod's nodeAffinity/nodeSelector\nwhen calculating pod topology spread skew. Options are:\n- Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.\n- Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.\nIf this value is nil, the behavior is equivalent to the Honor policy.\nThis is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.",
                                    "type": "string"
                                  },
                                  "nodeTaintsPolicy": {
                                    "description": "NodeTaintsPolicy indicates how we will treat node taints when calculating\npod topology spread skew. Options are:\n- Honor: nodes without taints, along with tainted nodes for which the incoming pod\nhas a toleration, are included.\n- Ignore: node taints are ignored. All nodes are included.\nIf this value is nil, the behavior is equivalent to the Ignore policy.\nThis is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.",
                                    "type": "string"
                                  },
                                  "topologyKey": {
                                    "description": "TopologyKey is the key of node labels. Nodes that have a label with this key\nand identical values are considered to be in the same topology.\nWe consider each <key, value> as a \"bucket\", and try to put balanced number\nof pods into each bucket.\nWe define a domain as a particular instance of a topology.\nAlso, we define an eligible domain as a domain whose nodes meet the requirements of\nnodeAffinityPolicy and nodeTaintsPolicy.\ne.g. If TopologyKey is \"kubernetes.io/hostname\", each Node is a domain of that topology.\nAnd, if TopologyKey is \"topology.kubernetes.io/zone\", each zone is a domain of that topology.\nIt's a required field.",
                                    "type": "string"
                                  },
                                  "whenUnsatisfiable": {
                                    "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy\nthe spread constraint.\n- DoNotSchedule (default) tells the scheduler not to schedule it.\n- ScheduleAnyway tells the scheduler to schedule the pod in any location,\n  but giving higher precedence to topologies that would help reduce the\n  skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod\nif and only if every possible node assignment for that pod would violate\n\"MaxSkew\" on some topology.\nFor example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same\nlabelSelector spread as 3/1/1:\n| zone1 | zone2 | zone3 |\n| P P P |   P   |   P   |\nIf WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled\nto zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies\nMaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler\nwon't make it *more* imbalanced.\nIt's a required field.",
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "maxSkew",
                                  "topologyKey",
                                  "whenUnsatisfiable"
                                ],
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "typhaMetricsPort": {
              "description": "TyphaMetricsPort specifies which port calico/typha serves prometheus metrics on. By default, metrics are not enabled.",
              "format": "int32",
              "type": "integer"
            },
            "variant": {
              "description": "Variant is the product to install - one of Calico or TigeraSecureEnterprise\nDefault: Calico",
              "enum": [
                "Calico",
                "TigeraSecureEnterprise"
              ],
              "type": "string"
            },
            "windowsNodes": {
              "description": "Windows Configuration",
              "properties": {
                "cniBinDir": {
                  "description": "CNIBinDir is the path to the CNI binaries directory on Windows, it must match what is used as 'bin_dir' under\n[plugins]\n  [plugins.\"io.containerd.grpc.v1.cri\"]\n    [plugins.\"io.containerd.grpc.v1.cri\".cni]\non the containerd 'config.toml' file on the Windows nodes.",
                  "type": "string"
                },
                "cniConfigDir": {
                  "description": "CNIConfigDir is the path to the CNI configuration directory on Windows, it must match what is used as 'conf_dir' under\n[plugins]\n  [plugins.\"io.containerd.grpc.v1.cri\"]\n    [plugins.\"io.containerd.grpc.v1.cri\".cni]\non the containerd 'config.toml' file on the Windows nodes.",
                  "type": "string"
                },
                "cniLogDir": {
                  "description": "CNILogDir is the path to the Calico CNI logs directory on Windows.",
                  "type": "string"
                },
                "vxlanAdapter": {
                  "description": "VXLANAdapter is the Network Adapter used for VXLAN, leave blank for primary NIC",
                  "type": "string"
                },
                "vxlanMACPrefix": {
                  "description": "VXLANMACPrefix is the prefix used when generating MAC addresses for virtual NICs",
                  "pattern": "^[0-9A-Fa-f]{2}-[0-9A-Fa-f]{2}$",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "conditions": {
          "description": "Conditions represents the latest observed set of conditions for the component. A component may be one or more of\nReady, Progressing, Degraded or other customer types.",
          "items": {
            "description": "Condition contains details for one aspect of the current state of this API Resource.",
            "properties": {
              "lastTransitionTime": {
                "description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
                "maxLength": 32768,
                "type": "string"
              },
              "observedGeneration": {
                "description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
                "format": "int64",
                "minimum": 0,
                "type": "integer"
              },
              "reason": {
                "description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
                "maxLength": 1024,
                "minLength": 1,
                "pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
                "type": "string"
              },
              "status": {
                "description": "status of the condition, one of True, False, Unknown.",
                "enum": [
                  "True",
                  "False",
                  "Unknown"
                ],
                "type": "string"
              },
              "type": {
                "description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
                "maxLength": 316,
                "pattern": "^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "message",
              "reason",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "imageSet": {
          "description": "ImageSet is the name of the ImageSet being used, if there is an ImageSet\nthat is being used. If an ImageSet is not being used then this will not be set.",
          "type": "string"
        },
        "mtu": {
          "description": "MTU is the most recently observed value for pod network MTU. This may be an explicitly\nconfigured value, or based on Calico's native auto-detetion.",
          "format": "int32",
          "type": "integer"
        },
        "variant": {
          "description": "Variant is the most recently observed installed variant - one of Calico or TigeraSecureEnterprise",
          "enum": [
            "Calico",
            "TigeraSecureEnterprise"
          ],
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
