{
  "description": "ClusterInstallation is the Schema for the clusterinstallations API",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": [
        "string",
        "null"
      ]
    },
    "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",
        "null"
      ]
    },
    "metadata": {
      "type": [
        "object",
        "null"
      ]
    },
    "spec": {
      "additionalProperties": false,
      "description": "Specification of the desired behavior of the Mattermost cluster. More info:\nhttps://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status",
      "properties": {
        "affinity": {
          "additionalProperties": false,
          "description": "If specified, affinity will define the pod's scheduling constraints",
          "properties": {
            "nodeAffinity": {
              "additionalProperties": false,
              "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": {
                    "additionalProperties": false,
                    "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": {
                        "additionalProperties": false,
                        "description": "A node selector term, associated with the corresponding weight.",
                        "properties": {
                          "matchExpressions": {
                            "description": "A list of node selector requirements by node's labels.",
                            "items": {
                              "additionalProperties": false,
                              "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",
                                    "null"
                                  ],
                                  "x-kubernetes-list-type": "atomic"
                                }
                              },
                              "required": [
                                "key",
                                "operator"
                              ],
                              "type": "object"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "x-kubernetes-list-type": "atomic"
                          },
                          "matchFields": {
                            "description": "A list of node selector requirements by node's fields.",
                            "items": {
                              "additionalProperties": false,
                              "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",
                                    "null"
                                  ],
                                  "x-kubernetes-list-type": "atomic"
                                }
                              },
                              "required": [
                                "key",
                                "operator"
                              ],
                              "type": "object"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "x-kubernetes-list-type": "atomic"
                          }
                        },
                        "type": "object",
                        "x-kubernetes-map-type": "atomic"
                      },
                      "weight": {
                        "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.",
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "preference",
                      "weight"
                    ],
                    "type": "object"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "x-kubernetes-list-type": "atomic"
                },
                "requiredDuringSchedulingIgnoredDuringExecution": {
                  "additionalProperties": false,
                  "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": {
                        "additionalProperties": false,
                        "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": {
                              "additionalProperties": false,
                              "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",
                                    "null"
                                  ],
                                  "x-kubernetes-list-type": "atomic"
                                }
                              },
                              "required": [
                                "key",
                                "operator"
                              ],
                              "type": "object"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "x-kubernetes-list-type": "atomic"
                          },
                          "matchFields": {
                            "description": "A list of node selector requirements by node's fields.",
                            "items": {
                              "additionalProperties": false,
                              "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",
                                    "null"
                                  ],
                                  "x-kubernetes-list-type": "atomic"
                                }
                              },
                              "required": [
                                "key",
                                "operator"
                              ],
                              "type": "object"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "x-kubernetes-list-type": "atomic"
                          }
                        },
                        "type": "object",
                        "x-kubernetes-map-type": "atomic"
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    }
                  },
                  "required": [
                    "nodeSelectorTerms"
                  ],
                  "type": [
                    "object",
                    "null"
                  ],
                  "x-kubernetes-map-type": "atomic"
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "podAffinity": {
              "additionalProperties": false,
              "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": {
                    "additionalProperties": false,
                    "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)",
                    "properties": {
                      "podAffinityTerm": {
                        "additionalProperties": false,
                        "description": "Required. A pod affinity term, associated with the corresponding weight.",
                        "properties": {
                          "labelSelector": {
                            "additionalProperties": false,
                            "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": {
                                  "additionalProperties": false,
                                  "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",
                                        "null"
                                      ],
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object"
                                },
                                "type": [
                                  "array",
                                  "null"
                                ],
                                "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",
                                  "null"
                                ]
                              }
                            },
                            "type": [
                              "object",
                              "null"
                            ],
                            "x-kubernetes-map-type": "atomic"
                          },
                          "matchLabelKeys": {
                            "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "x-kubernetes-list-type": "atomic"
                          },
                          "mismatchLabelKeys": {
                            "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "x-kubernetes-list-type": "atomic"
                          },
                          "namespaceSelector": {
                            "additionalProperties": false,
                            "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": {
                                  "additionalProperties": false,
                                  "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",
                                        "null"
                                      ],
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object"
                                },
                                "type": [
                                  "array",
                                  "null"
                                ],
                                "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",
                                  "null"
                                ]
                              }
                            },
                            "type": [
                              "object",
                              "null"
                            ],
                            "x-kubernetes-map-type": "atomic"
                          },
                          "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",
                              "null"
                            ],
                            "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"
                      },
                      "weight": {
                        "description": "weight associated with matching the corresponding podAffinityTerm,\nin the range 1-100.",
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "podAffinityTerm",
                      "weight"
                    ],
                    "type": "object"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "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": {
                    "additionalProperties": false,
                    "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 \u003ctopologyKey\u003e matches that of any node on which\na pod of the set of pods is running",
                    "properties": {
                      "labelSelector": {
                        "additionalProperties": false,
                        "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": {
                              "additionalProperties": false,
                              "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",
                                    "null"
                                  ],
                                  "x-kubernetes-list-type": "atomic"
                                }
                              },
                              "required": [
                                "key",
                                "operator"
                              ],
                              "type": "object"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "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",
                              "null"
                            ]
                          }
                        },
                        "type": [
                          "object",
                          "null"
                        ],
                        "x-kubernetes-map-type": "atomic"
                      },
                      "matchLabelKeys": {
                        "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                        "items": {
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ],
                        "x-kubernetes-list-type": "atomic"
                      },
                      "mismatchLabelKeys": {
                        "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                        "items": {
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ],
                        "x-kubernetes-list-type": "atomic"
                      },
                      "namespaceSelector": {
                        "additionalProperties": false,
                        "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": {
                              "additionalProperties": false,
                              "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",
                                    "null"
                                  ],
                                  "x-kubernetes-list-type": "atomic"
                                }
                              },
                              "required": [
                                "key",
                                "operator"
                              ],
                              "type": "object"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "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",
                              "null"
                            ]
                          }
                        },
                        "type": [
                          "object",
                          "null"
                        ],
                        "x-kubernetes-map-type": "atomic"
                      },
                      "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",
                          "null"
                        ],
                        "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"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "x-kubernetes-list-type": "atomic"
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "podAntiAffinity": {
              "additionalProperties": false,
              "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": {
                    "additionalProperties": false,
                    "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)",
                    "properties": {
                      "podAffinityTerm": {
                        "additionalProperties": false,
                        "description": "Required. A pod affinity term, associated with the corresponding weight.",
                        "properties": {
                          "labelSelector": {
                            "additionalProperties": false,
                            "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": {
                                  "additionalProperties": false,
                                  "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",
                                        "null"
                                      ],
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object"
                                },
                                "type": [
                                  "array",
                                  "null"
                                ],
                                "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",
                                  "null"
                                ]
                              }
                            },
                            "type": [
                              "object",
                              "null"
                            ],
                            "x-kubernetes-map-type": "atomic"
                          },
                          "matchLabelKeys": {
                            "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "x-kubernetes-list-type": "atomic"
                          },
                          "mismatchLabelKeys": {
                            "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                            "items": {
                              "type": "string"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "x-kubernetes-list-type": "atomic"
                          },
                          "namespaceSelector": {
                            "additionalProperties": false,
                            "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": {
                                  "additionalProperties": false,
                                  "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",
                                        "null"
                                      ],
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object"
                                },
                                "type": [
                                  "array",
                                  "null"
                                ],
                                "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",
                                  "null"
                                ]
                              }
                            },
                            "type": [
                              "object",
                              "null"
                            ],
                            "x-kubernetes-map-type": "atomic"
                          },
                          "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",
                              "null"
                            ],
                            "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"
                      },
                      "weight": {
                        "description": "weight associated with matching the corresponding podAffinityTerm,\nin the range 1-100.",
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "podAffinityTerm",
                      "weight"
                    ],
                    "type": "object"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "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": {
                    "additionalProperties": false,
                    "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 \u003ctopologyKey\u003e matches that of any node on which\na pod of the set of pods is running",
                    "properties": {
                      "labelSelector": {
                        "additionalProperties": false,
                        "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": {
                              "additionalProperties": false,
                              "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",
                                    "null"
                                  ],
                                  "x-kubernetes-list-type": "atomic"
                                }
                              },
                              "required": [
                                "key",
                                "operator"
                              ],
                              "type": "object"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "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",
                              "null"
                            ]
                          }
                        },
                        "type": [
                          "object",
                          "null"
                        ],
                        "x-kubernetes-map-type": "atomic"
                      },
                      "matchLabelKeys": {
                        "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.",
                        "items": {
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ],
                        "x-kubernetes-list-type": "atomic"
                      },
                      "mismatchLabelKeys": {
                        "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.",
                        "items": {
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ],
                        "x-kubernetes-list-type": "atomic"
                      },
                      "namespaceSelector": {
                        "additionalProperties": false,
                        "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": {
                              "additionalProperties": false,
                              "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",
                                    "null"
                                  ],
                                  "x-kubernetes-list-type": "atomic"
                                }
                              },
                              "required": [
                                "key",
                                "operator"
                              ],
                              "type": "object"
                            },
                            "type": [
                              "array",
                              "null"
                            ],
                            "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",
                              "null"
                            ]
                          }
                        },
                        "type": [
                          "object",
                          "null"
                        ],
                        "x-kubernetes-map-type": "atomic"
                      },
                      "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",
                          "null"
                        ],
                        "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"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "x-kubernetes-list-type": "atomic"
                }
              },
              "type": [
                "object",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "blueGreen": {
          "additionalProperties": false,
          "description": "BlueGreen defines the configuration of BlueGreen deployment for a ClusterInstallation",
          "properties": {
            "blue": {
              "additionalProperties": false,
              "description": "Blue defines the blue deployment.",
              "properties": {
                "image": {
                  "description": "Image defines the base Docker image that will be used for the deployment.\nRequired when BlueGreen or Canary is enabled.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "ingressName": {
                  "description": "IngressName defines the ingress name that will be used by the deployment.\nThis option is not used for Canary builds.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": {
                  "description": "Name defines the name of the deployment",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "resourceLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "version": {
                  "description": "Version defines the Docker image version that will be used for the deployment.\nRequired when BlueGreen or Canary is enabled.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "enable": {
              "description": "Enable defines if BlueGreen deployment will be applied.",
              "type": [
                "boolean",
                "null"
              ]
            },
            "green": {
              "additionalProperties": false,
              "description": "Green defines the green deployment.",
              "properties": {
                "image": {
                  "description": "Image defines the base Docker image that will be used for the deployment.\nRequired when BlueGreen or Canary is enabled.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "ingressName": {
                  "description": "IngressName defines the ingress name that will be used by the deployment.\nThis option is not used for Canary builds.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": {
                  "description": "Name defines the name of the deployment",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "resourceLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "version": {
                  "description": "Version defines the Docker image version that will be used for the deployment.\nRequired when BlueGreen or Canary is enabled.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "productionDeployment": {
              "description": "ProductionDeployment defines if the current production is blue or green.",
              "type": [
                "string",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "canary": {
          "additionalProperties": false,
          "description": "Canary defines the configuration of Canary deployment for a ClusterInstallation",
          "properties": {
            "deployment": {
              "additionalProperties": false,
              "description": "Deployment defines the canary deployment.",
              "properties": {
                "image": {
                  "description": "Image defines the base Docker image that will be used for the deployment.\nRequired when BlueGreen or Canary is enabled.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "ingressName": {
                  "description": "IngressName defines the ingress name that will be used by the deployment.\nThis option is not used for Canary builds.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": {
                  "description": "Name defines the name of the deployment",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "resourceLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "version": {
                  "description": "Version defines the Docker image version that will be used for the deployment.\nRequired when BlueGreen or Canary is enabled.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "enable": {
              "description": "Enable defines if a canary build will be deployed.",
              "type": [
                "boolean",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "database": {
          "additionalProperties": false,
          "description": "Database defines the database configuration for a ClusterInstallation.",
          "properties": {
            "backupRemoteDeletePolicy": {
              "description": "Defines the backup retention policy.",
              "type": [
                "string",
                "null"
              ]
            },
            "backupRestoreSecretName": {
              "description": "Defines the secret to be used when performing a database restore.",
              "type": [
                "string",
                "null"
              ]
            },
            "backupSchedule": {
              "description": "Defines the interval for backups in cron expression format.",
              "type": [
                "string",
                "null"
              ]
            },
            "backupSecretName": {
              "description": "Defines the secret to be used for uploading/restoring backup.",
              "type": [
                "string",
                "null"
              ]
            },
            "backupURL": {
              "description": "Defines the object storage url for uploading backups.",
              "type": [
                "string",
                "null"
              ]
            },
            "initBucketURL": {
              "description": "Defines the AWS S3 bucket where the Database Backup is stored.\nThe operator will download the file to restore the data.",
              "type": [
                "string",
                "null"
              ]
            },
            "replicas": {
              "description": "Defines the number of database replicas.\nFor redundancy use at least 2 replicas.\nSetting this will override the number of replicas set by 'Size'.",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            },
            "resources": {
              "additionalProperties": false,
              "description": "Defines the resource requests and limits for the database pods.",
              "properties": {
                "claims": {
                  "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\n\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.",
                  "items": {
                    "additionalProperties": false,
                    "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",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "x-kubernetes-list-map-keys": [
                    "name"
                  ],
                  "x-kubernetes-list-type": "map"
                },
                "limits": {
                  "additionalProperties": {
                    "oneOf": [
                      {
                        "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                        "type": "string"
                      },
                      {
                        "type": "integer"
                      }
                    ],
                    "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",
                    "null"
                  ]
                },
                "requests": {
                  "additionalProperties": {
                    "oneOf": [
                      {
                        "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                        "type": "string"
                      },
                      {
                        "type": "integer"
                      }
                    ],
                    "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",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "secret": {
              "description": "Optionally enter the name of an already-existing Secret for connecting to\nthe database. This secret should be configured as follows:\n\nUser-Managed Database\n  - Key: DB_CONNECTION_STRING | Value: \u003cFULL_DATABASE_CONNECTION_STRING\u003e\nOperator-Managed Database\n  - Key: ROOT_PASSWORD | Value: \u003cROOT_DATABASE_PASSWORD\u003e\n  - Key: USER | Value: \u003cUSER_NAME\u003e\n  - Key: PASSWORD | Value: \u003cUSER_PASSWORD\u003e\n  - Key: DATABASE Value: \u003cDATABASE_NAME\u003e\n\nNotes:\n  If you define all secret values for both User-Managed and\n  Operator-Managed database types, the User-Managed connection string will\n  take precedence and the Operator-Managed values will be ignored. If the\n  secret is left blank, the default behavior is to use an Operator-Managed\n  database with strong randomly-generated database credentials.",
              "type": [
                "string",
                "null"
              ]
            },
            "storageSize": {
              "description": "Defines the storage size for the database. ie 50Gi",
              "pattern": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$",
              "type": [
                "string",
                "null"
              ]
            },
            "type": {
              "description": "Defines the type of database to use for an Operator-Managed database. This\nvalue is ignored when using a User-Managed database.",
              "type": [
                "string",
                "null"
              ]
            },
            "version": {
              "description": "Defines the cluster version for the database to use",
              "type": [
                "string",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "elasticSearch": {
          "additionalProperties": false,
          "description": "ElasticSearch defines the ElasticSearch configuration for a ClusterInstallation.",
          "properties": {
            "host": {
              "type": [
                "string",
                "null"
              ]
            },
            "password": {
              "type": [
                "string",
                "null"
              ]
            },
            "username": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "image": {
          "description": "Image defines the ClusterInstallation Docker image.",
          "type": [
            "string",
            "null"
          ]
        },
        "imagePullPolicy": {
          "description": "Specify deployment pull policy.",
          "type": [
            "string",
            "null"
          ]
        },
        "ingressAnnotations": {
          "additionalProperties": {
            "type": "string"
          },
          "type": [
            "object",
            "null"
          ]
        },
        "ingressName": {
          "description": "IngressName defines the name to be used when creating the ingress rules",
          "type": "string"
        },
        "livenessProbe": {
          "additionalProperties": false,
          "description": "Defines the probe to check if the application is up and running.",
          "properties": {
            "exec": {
              "additionalProperties": false,
              "description": "Exec specifies a command to execute in the container.",
              "properties": {
                "command": {
                  "description": "Command is the command line to execute inside the container, the working directory for the\ncommand  is root ('/') in the container's filesystem. The command is simply exec'd, it is\nnot run inside a shell, so traditional shell instructions ('|', etc) won't work. To use\na shell, you need to explicitly call out to that shell.\nExit status of 0 is treated as live/healthy and non-zero is unhealthy.",
                  "items": {
                    "type": "string"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "x-kubernetes-list-type": "atomic"
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "failureThreshold": {
              "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded.\nDefaults to 3. Minimum value is 1.",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            },
            "grpc": {
              "additionalProperties": false,
              "description": "GRPC specifies a GRPC HealthCheckRequest.",
              "properties": {
                "port": {
                  "description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
                  "format": "int32",
                  "type": "integer"
                },
                "service": {
                  "default": "",
                  "description": "Service is the name of the service to place in the gRPC HealthCheckRequest\n(see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).\n\nIf this is not specified, the default behavior is defined by gRPC.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "port"
              ],
              "type": [
                "object",
                "null"
              ]
            },
            "httpGet": {
              "additionalProperties": false,
              "description": "HTTPGet specifies an HTTP GET request to perform.",
              "properties": {
                "host": {
                  "description": "Host name to connect to, defaults to the pod IP. You probably want to set\n\"Host\" in httpHeaders instead.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "httpHeaders": {
                  "description": "Custom headers to set in the request. HTTP allows repeated headers.",
                  "items": {
                    "additionalProperties": false,
                    "description": "HTTPHeader describes a custom header to be used in HTTP probes",
                    "properties": {
                      "name": {
                        "description": "The header field name.\nThis will be canonicalized upon output, so case-variant names will be understood as the same header.",
                        "type": "string"
                      },
                      "value": {
                        "description": "The header field value",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "value"
                    ],
                    "type": "object"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "x-kubernetes-list-type": "atomic"
                },
                "path": {
                  "description": "Path to access on the HTTP server.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "port": {
                  "description": "Name or number of the port to access on the container.\nNumber must be in the range 1 to 65535.\nName must be an IANA_SVC_NAME.",
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    }
                  ],
                  "x-kubernetes-int-or-string": true
                },
                "scheme": {
                  "description": "Scheme to use for connecting to the host.\nDefaults to HTTP.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "port"
              ],
              "type": [
                "object",
                "null"
              ]
            },
            "initialDelaySeconds": {
              "description": "Number of seconds after the container has started before liveness probes are initiated.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            },
            "periodSeconds": {
              "description": "How often (in seconds) to perform the probe.\nDefault to 10 seconds. Minimum value is 1.",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            },
            "successThreshold": {
              "description": "Minimum consecutive successes for the probe to be considered successful after having failed.\nDefaults to 1. Must be 1 for liveness and startup. Minimum value is 1.",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            },
            "tcpSocket": {
              "additionalProperties": false,
              "description": "TCPSocket specifies a connection to a TCP port.",
              "properties": {
                "host": {
                  "description": "Optional: Host name to connect to, defaults to the pod IP.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "port": {
                  "description": "Number or name of the port to access on the container.\nNumber must be in the range 1 to 65535.\nName must be an IANA_SVC_NAME.",
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    }
                  ],
                  "x-kubernetes-int-or-string": true
                }
              },
              "required": [
                "port"
              ],
              "type": [
                "object",
                "null"
              ]
            },
            "terminationGracePeriodSeconds": {
              "description": "Optional duration in seconds the pod needs to terminate gracefully upon probe failure.\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.\nIf this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this\nvalue overrides the value provided by the pod spec.\nValue must be non-negative integer. The value zero indicates stop immediately via\nthe kill signal (no opportunity to shut down).\nThis is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.\nMinimum value is 1. spec.terminationGracePeriodSeconds is used if unset.",
              "format": "int64",
              "type": [
                "integer",
                "null"
              ]
            },
            "timeoutSeconds": {
              "description": "Number of seconds after which the probe times out.\nDefaults to 1 second. Minimum value is 1.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "mattermostEnv": {
          "description": "Optional environment variables to set in the Mattermost application pods.",
          "items": {
            "additionalProperties": false,
            "description": "EnvVar represents an environment variable present in a Container.",
            "properties": {
              "name": {
                "description": "Name of the environment variable. Must be a C_IDENTIFIER.",
                "type": "string"
              },
              "value": {
                "description": "Variable references $(VAR_NAME) are expanded\nusing the previously defined environment variables in the container and\nany service environment variables. If a variable cannot be resolved,\nthe reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.\n\"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\".\nEscaped references will never be expanded, regardless of whether the variable\nexists or not.\nDefaults to \"\".",
                "type": [
                  "string",
                  "null"
                ]
              },
              "valueFrom": {
                "additionalProperties": false,
                "description": "Source for the environment variable's value. Cannot be used if value is not empty.",
                "properties": {
                  "configMapKeyRef": {
                    "additionalProperties": false,
                    "description": "Selects a key of a ConfigMap.",
                    "properties": {
                      "key": {
                        "description": "The key to select.",
                        "type": "string"
                      },
                      "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",
                          "null"
                        ]
                      },
                      "optional": {
                        "description": "Specify whether the ConfigMap or its key must be defined",
                        "type": [
                          "boolean",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "key"
                    ],
                    "type": [
                      "object",
                      "null"
                    ],
                    "x-kubernetes-map-type": "atomic"
                  },
                  "fieldRef": {
                    "additionalProperties": false,
                    "description": "Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['\u003cKEY\u003e']`, `metadata.annotations['\u003cKEY\u003e']`,\nspec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.",
                    "properties": {
                      "apiVersion": {
                        "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "fieldPath": {
                        "description": "Path of the field to select in the specified API version.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "fieldPath"
                    ],
                    "type": [
                      "object",
                      "null"
                    ],
                    "x-kubernetes-map-type": "atomic"
                  },
                  "resourceFieldRef": {
                    "additionalProperties": false,
                    "description": "Selects a resource of the container: only resources limits and requests\n(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.",
                    "properties": {
                      "containerName": {
                        "description": "Container name: required for volumes, optional for env vars",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "divisor": {
                        "description": "Specifies the output format of the exposed resources, defaults to \"1\"",
                        "oneOf": [
                          {
                            "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                            "type": "string"
                          },
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "x-kubernetes-int-or-string": true
                      },
                      "resource": {
                        "description": "Required: resource to select",
                        "type": "string"
                      }
                    },
                    "required": [
                      "resource"
                    ],
                    "type": [
                      "object",
                      "null"
                    ],
                    "x-kubernetes-map-type": "atomic"
                  },
                  "secretKeyRef": {
                    "additionalProperties": false,
                    "description": "Selects a key of a secret in the pod's namespace",
                    "properties": {
                      "key": {
                        "description": "The key of the secret to select from.  Must be a valid secret key.",
                        "type": "string"
                      },
                      "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",
                          "null"
                        ]
                      },
                      "optional": {
                        "description": "Specify whether the Secret or its key must be defined",
                        "type": [
                          "boolean",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "key"
                    ],
                    "type": [
                      "object",
                      "null"
                    ],
                    "x-kubernetes-map-type": "atomic"
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              }
            },
            "required": [
              "name"
            ],
            "type": "object"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "mattermostLicenseSecret": {
          "description": "Secret that contains the mattermost license",
          "type": [
            "string",
            "null"
          ]
        },
        "migrate": {
          "description": "Migrate specifies that the ClusterInstallation CR should be migrated to the Mattermost CR.\nCAUTION: Some features like BlueGreen or Canary are not supported with a new Custom Resource\ntherefore migration should be performed with extra caution.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "minio": {
          "additionalProperties": false,
          "description": "Minio defines the configuration of Minio for a ClusterInstallation.",
          "properties": {
            "externalBucket": {
              "description": "Set to the bucket name of your external MinIO or S3.",
              "type": [
                "string",
                "null"
              ]
            },
            "externalURL": {
              "description": "Set to use an external MinIO deployment or S3. Must also set 'Secret' and 'ExternalBucket'.",
              "type": [
                "string",
                "null"
              ]
            },
            "replicas": {
              "description": "Defines the number of Minio replicas.\nSupply 1 to run Minio in standalone mode with no redundancy.\nSupply 4 or more to run Minio in distributed mode.\nNote that it is not possible to upgrade Minio from standalone to distributed mode.\nSetting this will override the number of replicas set by 'Size'.\nMore info: https://docs.min.io/docs/distributed-minio-quickstart-guide.html",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            },
            "resources": {
              "additionalProperties": false,
              "description": "Defines the resource requests and limits for the Minio pods.",
              "properties": {
                "claims": {
                  "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\n\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.",
                  "items": {
                    "additionalProperties": false,
                    "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",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "x-kubernetes-list-map-keys": [
                    "name"
                  ],
                  "x-kubernetes-list-type": "map"
                },
                "limits": {
                  "additionalProperties": {
                    "oneOf": [
                      {
                        "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                        "type": "string"
                      },
                      {
                        "type": "integer"
                      }
                    ],
                    "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",
                    "null"
                  ]
                },
                "requests": {
                  "additionalProperties": {
                    "oneOf": [
                      {
                        "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                        "type": "string"
                      },
                      {
                        "type": "integer"
                      }
                    ],
                    "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",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "secret": {
              "description": "Optionally enter the name of already existing secret.\nSecret should have two values: \"accesskey\" and \"secretkey\".\nRequired when \"ExternalURL\" is set.",
              "type": [
                "string",
                "null"
              ]
            },
            "storageSize": {
              "description": "Defines the storage size for Minio. ie 50Gi",
              "pattern": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$",
              "type": [
                "string",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "nodeSelector": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "NodeSelector is a selector which must be true for the pod to fit on a node.\nSelector which must match a node's labels for the pod to be scheduled on that node.\nMore info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/",
          "type": [
            "object",
            "null"
          ]
        },
        "readinessProbe": {
          "additionalProperties": false,
          "description": "Defines the probe to check if the application is ready to accept traffic.",
          "properties": {
            "exec": {
              "additionalProperties": false,
              "description": "Exec specifies a command to execute in the container.",
              "properties": {
                "command": {
                  "description": "Command is the command line to execute inside the container, the working directory for the\ncommand  is root ('/') in the container's filesystem. The command is simply exec'd, it is\nnot run inside a shell, so traditional shell instructions ('|', etc) won't work. To use\na shell, you need to explicitly call out to that shell.\nExit status of 0 is treated as live/healthy and non-zero is unhealthy.",
                  "items": {
                    "type": "string"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "x-kubernetes-list-type": "atomic"
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "failureThreshold": {
              "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded.\nDefaults to 3. Minimum value is 1.",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            },
            "grpc": {
              "additionalProperties": false,
              "description": "GRPC specifies a GRPC HealthCheckRequest.",
              "properties": {
                "port": {
                  "description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
                  "format": "int32",
                  "type": "integer"
                },
                "service": {
                  "default": "",
                  "description": "Service is the name of the service to place in the gRPC HealthCheckRequest\n(see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).\n\nIf this is not specified, the default behavior is defined by gRPC.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "port"
              ],
              "type": [
                "object",
                "null"
              ]
            },
            "httpGet": {
              "additionalProperties": false,
              "description": "HTTPGet specifies an HTTP GET request to perform.",
              "properties": {
                "host": {
                  "description": "Host name to connect to, defaults to the pod IP. You probably want to set\n\"Host\" in httpHeaders instead.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "httpHeaders": {
                  "description": "Custom headers to set in the request. HTTP allows repeated headers.",
                  "items": {
                    "additionalProperties": false,
                    "description": "HTTPHeader describes a custom header to be used in HTTP probes",
                    "properties": {
                      "name": {
                        "description": "The header field name.\nThis will be canonicalized upon output, so case-variant names will be understood as the same header.",
                        "type": "string"
                      },
                      "value": {
                        "description": "The header field value",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "value"
                    ],
                    "type": "object"
                  },
                  "type": [
                    "array",
                    "null"
                  ],
                  "x-kubernetes-list-type": "atomic"
                },
                "path": {
                  "description": "Path to access on the HTTP server.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "port": {
                  "description": "Name or number of the port to access on the container.\nNumber must be in the range 1 to 65535.\nName must be an IANA_SVC_NAME.",
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    }
                  ],
                  "x-kubernetes-int-or-string": true
                },
                "scheme": {
                  "description": "Scheme to use for connecting to the host.\nDefaults to HTTP.",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "port"
              ],
              "type": [
                "object",
                "null"
              ]
            },
            "initialDelaySeconds": {
              "description": "Number of seconds after the container has started before liveness probes are initiated.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            },
            "periodSeconds": {
              "description": "How often (in seconds) to perform the probe.\nDefault to 10 seconds. Minimum value is 1.",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            },
            "successThreshold": {
              "description": "Minimum consecutive successes for the probe to be considered successful after having failed.\nDefaults to 1. Must be 1 for liveness and startup. Minimum value is 1.",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            },
            "tcpSocket": {
              "additionalProperties": false,
              "description": "TCPSocket specifies a connection to a TCP port.",
              "properties": {
                "host": {
                  "description": "Optional: Host name to connect to, defaults to the pod IP.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "port": {
                  "description": "Number or name of the port to access on the container.\nNumber must be in the range 1 to 65535.\nName must be an IANA_SVC_NAME.",
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    }
                  ],
                  "x-kubernetes-int-or-string": true
                }
              },
              "required": [
                "port"
              ],
              "type": [
                "object",
                "null"
              ]
            },
            "terminationGracePeriodSeconds": {
              "description": "Optional duration in seconds the pod needs to terminate gracefully upon probe failure.\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.\nIf this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this\nvalue overrides the value provided by the pod spec.\nValue must be non-negative integer. The value zero indicates stop immediately via\nthe kill signal (no opportunity to shut down).\nThis is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.\nMinimum value is 1. spec.terminationGracePeriodSeconds is used if unset.",
              "format": "int64",
              "type": [
                "integer",
                "null"
              ]
            },
            "timeoutSeconds": {
              "description": "Number of seconds after which the probe times out.\nDefaults to 1 second. Minimum value is 1.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "replicas": {
          "description": "Replicas defines the number of replicas to use for the Mattermost app servers.\nSetting this will override the number of replicas set by 'Size'.",
          "format": "int32",
          "type": [
            "integer",
            "null"
          ]
        },
        "resourceLabels": {
          "additionalProperties": {
            "type": "string"
          },
          "type": [
            "object",
            "null"
          ]
        },
        "resources": {
          "additionalProperties": false,
          "description": "Defines the resource requests and limits for the Mattermost app server pods.",
          "properties": {
            "claims": {
              "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\n\nThis is an alpha field and requires enabling the\nDynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.",
              "items": {
                "additionalProperties": false,
                "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",
                      "null"
                    ]
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object"
              },
              "type": [
                "array",
                "null"
              ],
              "x-kubernetes-list-map-keys": [
                "name"
              ],
              "x-kubernetes-list-type": "map"
            },
            "limits": {
              "additionalProperties": {
                "oneOf": [
                  {
                    "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                    "type": "string"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "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",
                "null"
              ]
            },
            "requests": {
              "additionalProperties": {
                "oneOf": [
                  {
                    "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                    "type": "string"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "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",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "serviceAnnotations": {
          "additionalProperties": {
            "type": "string"
          },
          "type": [
            "object",
            "null"
          ]
        },
        "size": {
          "description": "Size defines the size of the ClusterInstallation. This is typically specified in number of users.\nThis will override replica and resource requests/limits appropriately for the provided number of users.\nThis is a write-only field - its value is erased after setting appropriate values of resources.\nAccepted values are: 100users, 1000users, 5000users, 10000users, 250000users. If replicas and resource\nrequests/limits are not specified, and Size is not provided the configuration for 5000users will be applied.\nSetting 'Replicas', 'Resources', 'Minio.Replicas', 'Minio.Resource', 'Database.Replicas',\nor 'Database.Resources' will override the values set by Size.\nSetting new Size will override previous values regardless if set by Size or manually.",
          "type": [
            "string",
            "null"
          ]
        },
        "useIngressTLS": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "useServiceLoadBalancer": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "version": {
          "description": "Version defines the ClusterInstallation Docker image version.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "ingressName"
      ],
      "type": "object"
    },
    "status": {
      "additionalProperties": false,
      "description": "Most recent observed status of the Mattermost cluster. Read-only. Not\nincluded when requesting from the apiserver, only from the Mattermost\nOperator API itself. More info:\nhttps://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status",
      "properties": {
        "blueName": {
          "description": "The name of the blue deployment in BlueGreen",
          "type": [
            "string",
            "null"
          ]
        },
        "endpoint": {
          "description": "The endpoint to access the Mattermost instance",
          "type": [
            "string",
            "null"
          ]
        },
        "greenName": {
          "description": "The name of the green deployment in BlueGreen",
          "type": [
            "string",
            "null"
          ]
        },
        "image": {
          "description": "The image running on the pods in the Mattermost instance",
          "type": [
            "string",
            "null"
          ]
        },
        "migration": {
          "additionalProperties": false,
          "description": "The status of migration to Mattermost CR.",
          "properties": {
            "error": {
              "type": [
                "string",
                "null"
              ]
            },
            "status": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "replicas": {
          "description": "Total number of non-terminated pods targeted by this Mattermost deployment",
          "format": "int32",
          "type": [
            "integer",
            "null"
          ]
        },
        "state": {
          "description": "Represents the running state of the Mattermost instance",
          "type": [
            "string",
            "null"
          ]
        },
        "updatedReplicas": {
          "description": "Total number of non-terminated pods targeted by this Mattermost deployment\nthat are running with the desired image.",
          "format": "int32",
          "type": [
            "integer",
            "null"
          ]
        },
        "version": {
          "description": "The version currently running in the Mattermost instance",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ]
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}