apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: servicemeshcontrolplanes.maistra.io
spec:
  group: maistra.io
  names:
    kind: ServiceMeshControlPlane
    listKind: ServiceMeshControlPlaneList
    plural: servicemeshcontrolplanes
    shortNames:
    - smcp
    singular: servicemeshcontrolplane
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: How many of the total number of components are ready
      jsonPath: .status.annotations.readyComponentCount
      name: Ready
      type: string
    - description: Whether or not the control plane installation is up to date and
        ready to handle requests.
      jsonPath: .status.conditions[?(@.type=="Ready")].reason
      name: Status
      type: string
    - description: The configuration template to use as the base.
      jsonPath: .status.lastAppliedConfiguration.template
      name: Template
      type: string
    - description: The actual current version of the control plane installation.
      jsonPath: .status.lastAppliedConfiguration.version
      name: Version
      type: string
    - description: The age of the object
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - description: The image hub used as the base for all component images.
      jsonPath: .status.lastAppliedConfiguration.istio.global.hub
      name: Image HUB
      priority: 1
      type: string
    name: v1
    schema:
      openAPIV3Schema:
        description: ServiceMeshControlPlane represents a deployment of the service
          mesh control plane. The control plane components are deployed in the namespace
          in which the ServiceMeshControlPlane resides. The configuration options
          for the components that comprise the control plane are specified in this
          object.
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: The specification of the desired state of this ServiceMeshControlPlane.
              This includes the configuration options for all components that comprise
              the control plane.
            properties:
              istio:
                description: 'Specifies the Istio configuration options that are passed
                  to Helm when the Istio charts are rendered. These options are usually
                  populated from the template specified in the spec.template field,
                  but individual values can be overridden here. More info: https://maistra.io/docs/installation/installation-options/'
                type: object
                x-kubernetes-preserve-unknown-fields: true
              networkType:
                description: 'DEPRECATED: No longer used anywhere. Previously used
                  to specify the NetworkType of the cluster. Defaults to "subnet".'
                type: string
              template:
                description: Template selects the template to use for default values.
                  Defaults to "default" when not set.
                type: string
              threeScale:
                description: 'Specifies the 3Scale configuration options that are
                  passed to Helm when the 3Scale charts are rendered. These values
                  are usually populated from the template specified in the spec.template
                  field, but individual values can be overridden here. More info:
                  https://maistra.io/docs/installation/installation-options/#_3scale'
                type: object
                x-kubernetes-preserve-unknown-fields: true
              version:
                description: Version specifies what Maistra version of the control
                  plane to install. When creating a new ServiceMeshControlPlane with
                  an empty version, the admission webhook sets the version to the
                  latest version supported by the operator. Existing ServiceMeshControlPlanes
                  with an empty version are treated as having the version set to "v1.0"
                type: string
            type: object
          status:
            description: The current status of this ServiceMeshControlPlane and the
              components that comprise the control plane. This data may be out of
              date by some window of time.
            nullable: true
            properties:
              annotations:
                additionalProperties:
                  type: string
                description: Annotations is an unstructured key value map used to
                  store additional, usually redundant status information, such as
                  the number of components deployed by the ServiceMeshControlPlane
                  (number is redundant because you could just as easily count the
                  elements in the ComponentStatus array). The reason to add this redundant
                  information is to make it available to kubectl, which does not yet
                  allow counting objects in JSONPath expressions.
                type: object
              components:
                items:
                  description: ComponentStatus represents the status of an object
                    with children
                  properties:
                    children:
                      description: 'TODO: can we remove this? it''s not used anywhere
                        The status of each resource that comprises this component.'
                      items:
                        description: StatusType represents the status for a control
                          plane, component, or resource
                        properties:
                          conditions:
                            description: Represents the latest available observations
                              of the object's current state.
                            items:
                              description: A Condition represents a specific observation
                                of the object's state.
                              properties:
                                lastTransitionTime:
                                  description: Last time the condition transitioned
                                    from one status to another.
                                  format: date-time
                                  type: string
                                message:
                                  description: Human-readable message indicating details
                                    about the last transition.
                                  type: string
                                reason:
                                  description: Unique, single-word, CamelCase reason
                                    for the condition's last transition.
                                  type: string
                                status:
                                  description: The status of this condition. Can be
                                    True, False or Unknown.
                                  type: string
                                type:
                                  description: The type of this condition.
                                  type: string
                              type: object
                            type: array
                        type: object
                      type: array
                    conditions:
                      description: Represents the latest available observations of
                        the object's current state.
                      items:
                        description: A Condition represents a specific observation
                          of the object's state.
                        properties:
                          lastTransitionTime:
                            description: Last time the condition transitioned from
                              one status to another.
                            format: date-time
                            type: string
                          message:
                            description: Human-readable message indicating details
                              about the last transition.
                            type: string
                          reason:
                            description: Unique, single-word, CamelCase reason for
                              the condition's last transition.
                            type: string
                          status:
                            description: The status of this condition. Can be True,
                              False or Unknown.
                            type: string
                          type:
                            description: The type of this condition.
                            type: string
                        type: object
                      type: array
                    resource:
                      description: The name of the component this status pertains
                        to.
                      type: string
                  type: object
                type: array
              conditions:
                description: Represents the latest available observations of the object's
                  current state.
                items:
                  description: A Condition represents a specific observation of the
                    object's state.
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another.
                      format: date-time
                      type: string
                    message:
                      description: Human-readable message indicating details about
                        the last transition.
                      type: string
                    reason:
                      description: Unique, single-word, CamelCase reason for the condition's
                        last transition.
                      type: string
                    status:
                      description: The status of this condition. Can be True, False
                        or Unknown.
                      type: string
                    type:
                      description: The type of this condition.
                      type: string
                  type: object
                type: array
              lastAppliedConfiguration:
                description: The full specification of the configuration options that
                  were applied to the components of the control plane during the most
                  recent reconciliation.
                properties:
                  istio:
                    description: 'Specifies the Istio configuration options that are
                      passed to Helm when the Istio charts are rendered. These options
                      are usually populated from the template specified in the spec.template
                      field, but individual values can be overridden here. More info:
                      https://maistra.io/docs/installation/installation-options/'
                    type: object
                    x-kubernetes-preserve-unknown-fields: true
                  networkType:
                    description: 'DEPRECATED: No longer used anywhere. Previously
                      used to specify the NetworkType of the cluster. Defaults to
                      "subnet".'
                    type: string
                  template:
                    description: Template selects the template to use for default
                      values. Defaults to "default" when not set.
                    type: string
                  threeScale:
                    description: 'Specifies the 3Scale configuration options that
                      are passed to Helm when the 3Scale charts are rendered. These
                      values are usually populated from the template specified in
                      the spec.template field, but individual values can be overridden
                      here. More info: https://maistra.io/docs/installation/installation-options/#_3scale'
                    type: object
                    x-kubernetes-preserve-unknown-fields: true
                  version:
                    description: Version specifies what Maistra version of the control
                      plane to install. When creating a new ServiceMeshControlPlane
                      with an empty version, the admission webhook sets the version
                      to the latest version supported by the operator. Existing ServiceMeshControlPlanes
                      with an empty version are treated as having the version set
                      to "v1.0"
                    type: string
                type: object
              observedGeneration:
                description: The generation observed by the controller during the
                  most recent reconciliation. The information in the status pertains
                  to this particular generation of the object.
                format: int64
                type: integer
              reconciledVersion:
                description: The last version that was reconciled.
                type: string
            required:
            - components
            - lastAppliedConfiguration
            type: object
        type: object
    served: true
    storage: false
    subresources:
      status: {}
  - additionalPrinterColumns:
    - description: How many of the total number of components are ready
      jsonPath: .status.annotations.readyComponentCount
      name: Ready
      type: string
    - description: Whether or not the control plane installation is up to date and
        ready to handle requests.
      jsonPath: .status.conditions[?(@.type=="Ready")].reason
      name: Status
      type: string
    - description: The configuration template to use as the base.
      jsonPath: .status.lastAppliedConfiguration.template
      name: Template
      type: string
    - description: The actual current version of the control plane installation.
      jsonPath: .status.lastAppliedConfiguration.version
      name: Version
      type: string
    - description: The age of the object
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - description: The image hub used as the base for all component images.
      jsonPath: .status.lastAppliedConfiguration.istio.global.hub
      name: Image HUB
      priority: 1
      type: string
    name: v2
    schema:
      openAPIV3Schema:
        description: ServiceMeshControlPlane is the Schema for the controlplanes API
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: ControlPlaneSpec represents the configuration for installing
              a control plane
            properties:
              addons:
                description: Addons is used to configure additional features beyond
                  core control plane components, e.g. visualization, metric storage,
                  etc.
                properties:
                  metrics:
                    description: Metrics configures metrics storage solutions for
                      the mesh.
                    properties:
                      prometheus:
                        description: Prometheus configures prometheus solution for
                          metrics storage .Values.prometheus.enabled, true if not
                          null implies other settings related to prometheus, e.g.
                          .Values.telemetry.v2.prometheus.enabled, .Values.kiali.prometheusAddr,
                          etc.
                        properties:
                          address:
                            description: 'Address of existing prometheus installation
                              implies .Values.kiali.prometheusAddr XXX: do we need
                              to do anything to configure credentials for accessing
                              the prometheus server?'
                            type: string
                          enabled:
                            description: Enabled specifies whether or not this feature
                              is enabled
                            type: boolean
                          install:
                            description: Install configuration if not using an existing
                              prometheus installation.
                            properties:
                              config:
                                description: Config for the prometheus installation
                                properties:
                                  retention:
                                    description: Retention specifies how long metrics
                                      should be retained by prometheus. .Values.prometheus.retention,
                                      defaults to 6h
                                    type: string
                                  scrapeInterval:
                                    description: ScrapeInterval specifies how frequently
                                      prometheus should scrape pods for metrics. .Values.prometheus.scrapeInterval,
                                      defaults to 15s
                                    type: string
                                type: object
                              runtime:
                                description: Runtime allows for customization of the
                                  Deployment/Pods for the installation (e.g. resources)
                                properties:
                                  deployment:
                                    description: Deployment specific overrides
                                    properties:
                                      autoScaling:
                                        description: Autoscaling specifies the configuration
                                          for a HorizontalPodAutoscaler to be applied
                                          to this deployment.  Null indicates no auto
                                          scaling. .Values.*.autoscale* fields
                                        properties:
                                          maxReplicas:
                                            description: upper limit for the number
                                              of pods that can be set by the autoscaler;
                                              cannot be smaller than MinReplicas.
                                            format: int32
                                            type: integer
                                          minReplicas:
                                            description: lower limit for the number
                                              of pods that can be set by the autoscaler,
                                              default 1.
                                            format: int32
                                            type: integer
                                          targetCPUUtilizationPercentage:
                                            description: target average CPU utilization
                                              (represented as a percentage of requested
                                              CPU) over all the pods; if not specified
                                              the default autoscaling policy will
                                              be used.
                                            format: int32
                                            type: integer
                                        type: object
                                      metadata:
                                        description: Metadata specifies additional
                                          labels and annotations to be applied to
                                          the deployment
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      replicas:
                                        description: Number of desired pods. This
                                          is a pointer to distinguish between explicit
                                          zero and not specified. Defaults to 1. .Values.*.replicaCount
                                        format: int32
                                        type: integer
                                      strategy:
                                        description: The deployment strategy to use
                                          to replace existing pods with new ones.
                                          .Values.*.rollingMaxSurge, rollingMaxUnavailable,
                                          etc.
                                        properties:
                                          rollingUpdate:
                                            description: 'Rolling update config params.
                                              Present only if DeploymentStrategyType
                                              = RollingUpdate. --- TODO: Update this
                                              to follow our convention for oneOf,
                                              whatever we decide it to be.'
                                            properties:
                                              maxSurge:
                                                anyOf:
                                                - type: integer
                                                - type: string
                                                description: 'The maximum number of
                                                  pods that can be scheduled above
                                                  the desired number of pods. Value
                                                  can be an absolute number (ex: 5)
                                                  or a percentage of desired pods
                                                  (ex: 10%). This can not be 0 if
                                                  MaxUnavailable is 0. Absolute number
                                                  is calculated from percentage by
                                                  rounding up. Defaults to 25%. Example:
                                                  when this is set to 30%, the new
                                                  ReplicaSet can be scaled up immediately
                                                  when the rolling update starts,
                                                  such that the total number of old
                                                  and new pods do not exceed 130%
                                                  of desired pods. Once old pods have
                                                  been killed, new ReplicaSet can
                                                  be scaled up further, ensuring that
                                                  total number of pods running at
                                                  any time during the update is at
                                                  most 130% of desired pods.'
                                                x-kubernetes-int-or-string: true
                                              maxUnavailable:
                                                anyOf:
                                                - type: integer
                                                - type: string
                                                description: 'The maximum number of
                                                  pods that can be unavailable during
                                                  the update. Value can be an absolute
                                                  number (ex: 5) or a percentage of
                                                  desired pods (ex: 10%). Absolute
                                                  number is calculated from percentage
                                                  by rounding down. This can not be
                                                  0 if MaxSurge is 0. Defaults to
                                                  25%. Example: when this is set to
                                                  30%, the old ReplicaSet can be scaled
                                                  down to 70% of desired pods immediately
                                                  when the rolling update starts.
                                                  Once new pods are ready, old ReplicaSet
                                                  can be scaled down further, followed
                                                  by scaling up the new ReplicaSet,
                                                  ensuring that the total number of
                                                  pods available at all times during
                                                  the update is at least 70% of desired
                                                  pods.'
                                                x-kubernetes-int-or-string: true
                                            type: object
                                          type:
                                            description: Type of deployment. Can be
                                              "Recreate" or "RollingUpdate". Default
                                              is RollingUpdate.
                                            type: string
                                        type: object
                                    type: object
                                  pod:
                                    description: Pod specific overrides
                                    properties:
                                      affinity:
                                        description: If specified, the pod's scheduling
                                          constraints .Values.podAntiAffinityLabelSelector,
                                          podAntiAffinityTermLabelSelector, nodeSelector
                                          NodeAffinity is not supported at this time
                                          PodAffinity is not supported at this time
                                        properties:
                                          podAntiAffinity:
                                            description: PodAntiAffinity configures
                                              anti affinity for pod scheduling
                                            properties:
                                              preferredDuringScheduling:
                                                items:
                                                  description: PodAntiAffinityTerm
                                                    is a simplified version of corev1.PodAntiAffinityTerm
                                                  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. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    topologyKey:
                                                      description: This pod should
                                                        be co-located (affinity) or
                                                        not co-located (anti-affinity)
                                                        with the pods matching the
                                                        labelSelector in the specified
                                                        namespaces, where co-located
                                                        is defined as running on a
                                                        node whose value of the label
                                                        with key topologyKey matches
                                                        that of any node on which
                                                        any of the selected pods is
                                                        running. Empty topologyKey
                                                        is not allowed.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              requiredDuringScheduling:
                                                items:
                                                  description: PodAntiAffinityTerm
                                                    is a simplified version of corev1.PodAntiAffinityTerm
                                                  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. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    topologyKey:
                                                      description: This pod should
                                                        be co-located (affinity) or
                                                        not co-located (anti-affinity)
                                                        with the pods matching the
                                                        labelSelector in the specified
                                                        namespaces, where co-located
                                                        is defined as running on a
                                                        node whose value of the label
                                                        with key topologyKey matches
                                                        that of any node on which
                                                        any of the selected pods is
                                                        running. Empty topologyKey
                                                        is not allowed.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                            type: object
                                        type: object
                                      containers:
                                        additionalProperties:
                                          description: ContainerConfig to be applied
                                            to containers in a pod, in a deployment
                                          properties:
                                            image:
                                              type: string
                                            imagePullPolicy:
                                              description: PullPolicy describes a
                                                policy for if/when to pull a container
                                                image
                                              type: string
                                            imagePullSecrets:
                                              items:
                                                description: LocalObjectReference
                                                  contains enough information to let
                                                  you locate the referenced object
                                                  inside the same namespace.
                                                properties:
                                                  name:
                                                    description: 'Name of the referent.
                                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                                      TODO: Add other useful fields.
                                                      apiVersion, kind, uid?'
                                                    type: string
                                                type: object
                                              type: array
                                            imageRegistry:
                                              type: string
                                            imageTag:
                                              type: string
                                            resources:
                                              description: ResourceRequirements describes
                                                the compute resource requirements.
                                              properties:
                                                limits:
                                                  additionalProperties:
                                                    anyOf:
                                                    - type: integer
                                                    - type: string
                                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                    x-kubernetes-int-or-string: true
                                                  description: 'Limits describes the
                                                    maximum amount of compute resources
                                                    allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                                  type: object
                                                requests:
                                                  additionalProperties:
                                                    anyOf:
                                                    - type: integer
                                                    - type: string
                                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                    x-kubernetes-int-or-string: true
                                                  description: 'Requests describes
                                                    the minimum amount of compute
                                                    resources required. If Requests
                                                    is omitted for a container, it
                                                    defaults to Limits if that is
                                                    explicitly specified, otherwise
                                                    to an implementation-defined value.
                                                    More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                                  type: object
                                              type: object
                                          type: object
                                        description: 'XXX: is it too cheesy to use
                                          ''default'' name for defaults?  default
                                          would apply to all containers .Values.*.resource,
                                          imagePullPolicy, etc.'
                                        type: object
                                      metadata:
                                        description: 'Metadata allows additional annotations/labels
                                          to be applied to the pod .Values.*.podAnnotations
                                          XXX: currently, additional lables are not
                                          supported'
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      nodeSelector:
                                        additionalProperties:
                                          type: string
                                        description: 'NodeSelector is a selector which
                                          must be true for the pod to fit on a node.
                                          Selector which must match a node''s labels
                                          for the pod to be scheduled on that node.
                                          More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                          .Values.nodeSelector'
                                        type: object
                                      priorityClassName:
                                        description: '.Values.global.priorityClassName
                                          XXX: currently, this is only a global setting.  maybe
                                          only allow setting in global runtime defaults?'
                                        type: string
                                      tolerations:
                                        description: If specified, the pod's tolerations.
                                          .Values.tolerations
                                        items:
                                          description: The pod this Toleration is
                                            attached to tolerates any taint that matches
                                            the triple <key,value,effect> using the
                                            matching operator <operator>.
                                          properties:
                                            effect:
                                              description: Effect indicates the taint
                                                effect to match. Empty means match
                                                all taint effects. When specified,
                                                allowed values are NoSchedule, PreferNoSchedule
                                                and NoExecute.
                                              type: string
                                            key:
                                              description: Key is the taint key that
                                                the toleration applies to. Empty means
                                                match all taint keys. If the key is
                                                empty, operator must be Exists; this
                                                combination means to match all values
                                                and all keys.
                                              type: string
                                            operator:
                                              description: Operator represents a key's
                                                relationship to the value. Valid operators
                                                are Exists and Equal. Defaults to
                                                Equal. Exists is equivalent to wildcard
                                                for value, so that a pod can tolerate
                                                all taints of a particular category.
                                              type: string
                                            tolerationSeconds:
                                              description: TolerationSeconds represents
                                                the period of time the toleration
                                                (which must be of effect NoExecute,
                                                otherwise this field is ignored) tolerates
                                                the taint. By default, it is not set,
                                                which means tolerate the taint forever
                                                (do not evict). Zero and negative
                                                values will be treated as 0 (evict
                                                immediately) by the system.
                                              format: int64
                                              type: integer
                                            value:
                                              description: Value is the taint value
                                                the toleration matches to. If the
                                                operator is Exists, the value should
                                                be empty, otherwise just a regular
                                                string.
                                              type: string
                                          type: object
                                        type: array
                                    type: object
                                type: object
                              selfManaged:
                                description: SelfManaged specifies whether or not
                                  the entire install should be managed by Maistra
                                  (true) or the Prometheus operator (false, not supported).
                                  Governs use of either prometheus charts or prometheusOperator
                                  charts.
                                type: boolean
                              service:
                                description: Service allows for customization of the
                                  k8s Service associated with the prometheus installation.
                                properties:
                                  ingress:
                                    description: Ingress specifies details for accessing
                                      the component's service through a k8s Ingress
                                      or OpenShift Route.
                                    properties:
                                      contextPath:
                                        description: ContextPath represents the context
                                          path to the service.
                                        type: string
                                      enabled:
                                        description: Enabled specifies whether or
                                          not this feature is enabled
                                        type: boolean
                                      hosts:
                                        description: 'Hosts represents a list of host
                                          names to configure.  Note, OpenShift route
                                          only supports a single host name per route.  An
                                          empty host name implies a default host name
                                          for the Route. XXX: is a host name required
                                          for k8s Ingress?'
                                        items:
                                          type: string
                                        type: array
                                      metadata:
                                        description: Metadata represents additional
                                          metadata to be applied to the ingress/route.
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      tls:
                                        additionalProperties:
                                          type: string
                                        description: 'TLS is used to configure TLS
                                          for the Ingress/Route XXX: should this be
                                          something like RawExtension, as the configuration
                                          differs between Route and Ingress?'
                                        type: object
                                    type: object
                                  metadata:
                                    description: Metadata represents addtional annotations/labels
                                      to be applied to the component's service.
                                    properties:
                                      annotations:
                                        additionalProperties:
                                          type: string
                                        type: object
                                      labels:
                                        additionalProperties:
                                          type: string
                                        type: object
                                    type: object
                                  nodePort:
                                    description: NodePort specifies a NodePort for
                                      the component's Service. .Values.prometheus.service.nodePort.port,
                                      ...enabled is true if not null
                                    format: int32
                                    type: integer
                                type: object
                              useTLS:
                                description: UseTLS for the prometheus server .Values.prometheus.provisionPrometheusCert
                                  1.6+ ProvisionCert bool this seems to overlap with
                                  provision cert, as this manifests something similar
                                  to the above .Values.prometheus.security.enabled,
                                  version < 1.6 EnableSecurity bool
                                type: boolean
                            type: object
                        type: object
                    type: object
                  tracing:
                    description: Tracing configures tracing solutions used with the
                      mesh.
                    properties:
                      jaeger:
                        description: Jaeger configures Jaeger as the tracer used with
                          the mesh. .Values.tracing.jaeger.enabled, true if not null
                          implies other settings related to tracing, e.g. .Values.global.tracer.zipkin.address,
                          .Values.kiali.dashboard.jaegerURL, etc.
                        properties:
                          install:
                            description: Install configures a Jaeger installation,
                              which will be created if the named Jaeger resource is
                              not present.  If null, the named Jaeger resource must
                              exist.
                            properties:
                              config:
                                description: Config represents the configuration of
                                  Jaeger behavior.
                                properties:
                                  storage:
                                    description: Storage represents the storage configuration
                                      for the Jaeger install
                                    properties:
                                      elasticsearch:
                                        description: Elasticsearch represents configuration
                                          of elasticsearch storage implies .Values.tracing.jaeger.template=production-elasticsearch
                                        properties:
                                          indexCleaner:
                                            additionalProperties:
                                              type: string
                                            description: 'IndexCleaner represents
                                              the configuration for the elasticsearch
                                              index cleaner .Values.tracing.jaeger.elasticsearch.esIndexCleaner,
                                              raw yaml XXX: RawExtension?'
                                            type: object
                                          nodeCount:
                                            description: NodeCount represents the
                                              number of elasticsearch nodes to create.
                                              .Values.tracing.jaeger.elasticsearch.nodeCount,
                                              defaults to 3
                                            format: int32
                                            type: integer
                                          redundancyPolicy:
                                            additionalProperties:
                                              type: string
                                            description: 'RedundancyPolicy configures
                                              the redundancy policy for elasticsearch
                                              .Values.tracing.jaeger.elasticsearch.redundancyPolicy,
                                              raw yaml XXX: RawExtension?'
                                            type: object
                                          runtime:
                                            description: Runtime allows for customization
                                              of the elasticsearch pods used for node
                                              selector, etc., specific to elasticsearch
                                              config
                                            properties:
                                              affinity:
                                                description: If specified, the pod's
                                                  scheduling constraints .Values.podAntiAffinityLabelSelector,
                                                  podAntiAffinityTermLabelSelector,
                                                  nodeSelector NodeAffinity is not
                                                  supported at this time PodAffinity
                                                  is not supported at this time
                                                properties:
                                                  podAntiAffinity:
                                                    description: PodAntiAffinity configures
                                                      anti affinity for pod scheduling
                                                    properties:
                                                      preferredDuringScheduling:
                                                        items:
                                                          description: PodAntiAffinityTerm
                                                            is a simplified version
                                                            of corev1.PodAntiAffinityTerm
                                                          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. Valid
                                                                operators are In,
                                                                NotIn, Exists and
                                                                DoesNotExist.
                                                              type: string
                                                            topologyKey:
                                                              description: This pod
                                                                should be co-located
                                                                (affinity) or not
                                                                co-located (anti-affinity)
                                                                with the pods matching
                                                                the labelSelector
                                                                in the specified namespaces,
                                                                where co-located is
                                                                defined as running
                                                                on a node whose value
                                                                of the label with
                                                                key topologyKey matches
                                                                that of any node on
                                                                which any of the selected
                                                                pods is running. Empty
                                                                topologyKey is not
                                                                allowed.
                                                              type: string
                                                            values:
                                                              description: values
                                                                is an array of string
                                                                values. If the operator
                                                                is In or NotIn, the
                                                                values array must
                                                                be non-empty. If the
                                                                operator is Exists
                                                                or DoesNotExist, the
                                                                values array must
                                                                be empty. This array
                                                                is replaced during
                                                                a strategic merge
                                                                patch.
                                                              items:
                                                                type: string
                                                              type: array
                                                          required:
                                                          - key
                                                          - operator
                                                          type: object
                                                        type: array
                                                      requiredDuringScheduling:
                                                        items:
                                                          description: PodAntiAffinityTerm
                                                            is a simplified version
                                                            of corev1.PodAntiAffinityTerm
                                                          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. Valid
                                                                operators are In,
                                                                NotIn, Exists and
                                                                DoesNotExist.
                                                              type: string
                                                            topologyKey:
                                                              description: This pod
                                                                should be co-located
                                                                (affinity) or not
                                                                co-located (anti-affinity)
                                                                with the pods matching
                                                                the labelSelector
                                                                in the specified namespaces,
                                                                where co-located is
                                                                defined as running
                                                                on a node whose value
                                                                of the label with
                                                                key topologyKey matches
                                                                that of any node on
                                                                which any of the selected
                                                                pods is running. Empty
                                                                topologyKey is not
                                                                allowed.
                                                              type: string
                                                            values:
                                                              description: values
                                                                is an array of string
                                                                values. If the operator
                                                                is In or NotIn, the
                                                                values array must
                                                                be non-empty. If the
                                                                operator is Exists
                                                                or DoesNotExist, the
                                                                values array must
                                                                be empty. This array
                                                                is replaced during
                                                                a strategic merge
                                                                patch.
                                                              items:
                                                                type: string
                                                              type: array
                                                          required:
                                                          - key
                                                          - operator
                                                          type: object
                                                        type: array
                                                    type: object
                                                type: object
                                              containers:
                                                additionalProperties:
                                                  description: ContainerConfig to
                                                    be applied to containers in a
                                                    pod, in a deployment
                                                  properties:
                                                    image:
                                                      type: string
                                                    imagePullPolicy:
                                                      description: PullPolicy describes
                                                        a policy for if/when to pull
                                                        a container image
                                                      type: string
                                                    imagePullSecrets:
                                                      items:
                                                        description: LocalObjectReference
                                                          contains enough information
                                                          to let you locate the referenced
                                                          object inside the same namespace.
                                                        properties:
                                                          name:
                                                            description: 'Name of
                                                              the referent. More info:
                                                              https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                                              TODO: Add other useful
                                                              fields. apiVersion,
                                                              kind, uid?'
                                                            type: string
                                                        type: object
                                                      type: array
                                                    imageRegistry:
                                                      type: string
                                                    imageTag:
                                                      type: string
                                                    resources:
                                                      description: ResourceRequirements
                                                        describes the compute resource
                                                        requirements.
                                                      properties:
                                                        limits:
                                                          additionalProperties:
                                                            anyOf:
                                                            - type: integer
                                                            - type: string
                                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                            x-kubernetes-int-or-string: true
                                                          description: 'Limits describes
                                                            the maximum amount of
                                                            compute resources allowed.
                                                            More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                                          type: object
                                                        requests:
                                                          additionalProperties:
                                                            anyOf:
                                                            - type: integer
                                                            - type: string
                                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                            x-kubernetes-int-or-string: true
                                                          description: 'Requests describes
                                                            the minimum amount of
                                                            compute resources required.
                                                            If Requests is omitted
                                                            for a container, it defaults
                                                            to Limits if that is explicitly
                                                            specified, otherwise to
                                                            an implementation-defined
                                                            value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                                          type: object
                                                      type: object
                                                  type: object
                                                description: 'XXX: is it too cheesy
                                                  to use ''default'' name for defaults?  default
                                                  would apply to all containers .Values.*.resource,
                                                  imagePullPolicy, etc.'
                                                type: object
                                              metadata:
                                                description: 'Metadata allows additional
                                                  annotations/labels to be applied
                                                  to the pod .Values.*.podAnnotations
                                                  XXX: currently, additional lables
                                                  are not supported'
                                                properties:
                                                  annotations:
                                                    additionalProperties:
                                                      type: string
                                                    type: object
                                                  labels:
                                                    additionalProperties:
                                                      type: string
                                                    type: object
                                                type: object
                                              nodeSelector:
                                                additionalProperties:
                                                  type: string
                                                description: 'NodeSelector is a selector
                                                  which must be true for the pod to
                                                  fit on a node. Selector which must
                                                  match a node''s labels for the pod
                                                  to be scheduled on that node. More
                                                  info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                                  .Values.nodeSelector'
                                                type: object
                                              priorityClassName:
                                                description: '.Values.global.priorityClassName
                                                  XXX: currently, this is only a global
                                                  setting.  maybe only allow setting
                                                  in global runtime defaults?'
                                                type: string
                                              tolerations:
                                                description: If specified, the pod's
                                                  tolerations. .Values.tolerations
                                                items:
                                                  description: The pod this Toleration
                                                    is attached to tolerates any taint
                                                    that matches the triple <key,value,effect>
                                                    using the matching operator <operator>.
                                                  properties:
                                                    effect:
                                                      description: Effect indicates
                                                        the taint effect to match.
                                                        Empty means match all taint
                                                        effects. When specified, allowed
                                                        values are NoSchedule, PreferNoSchedule
                                                        and NoExecute.
                                                      type: string
                                                    key:
                                                      description: Key is the taint
                                                        key that the toleration applies
                                                        to. Empty means match all
                                                        taint keys. If the key is
                                                        empty, operator must be Exists;
                                                        this combination means to
                                                        match all values and all keys.
                                                      type: string
                                                    operator:
                                                      description: Operator represents
                                                        a key's relationship to the
                                                        value. Valid operators are
                                                        Exists and Equal. Defaults
                                                        to Equal. Exists is equivalent
                                                        to wildcard for value, so
                                                        that a pod can tolerate all
                                                        taints of a particular category.
                                                      type: string
                                                    tolerationSeconds:
                                                      description: TolerationSeconds
                                                        represents the period of time
                                                        the toleration (which must
                                                        be of effect NoExecute, otherwise
                                                        this field is ignored) tolerates
                                                        the taint. By default, it
                                                        is not set, which means tolerate
                                                        the taint forever (do not
                                                        evict). Zero and negative
                                                        values will be treated as
                                                        0 (evict immediately) by the
                                                        system.
                                                      format: int64
                                                      type: integer
                                                    value:
                                                      description: Value is the taint
                                                        value the toleration matches
                                                        to. If the operator is Exists,
                                                        the value should be empty,
                                                        otherwise just a regular string.
                                                      type: string
                                                  type: object
                                                type: array
                                            type: object
                                          storage:
                                            additionalProperties:
                                              type: string
                                            description: 'Storage represents storage
                                              configuration for elasticsearch. .Values.tracing.jaeger.elasticsearch.storage,
                                              raw yaml XXX: RawExtension?'
                                            type: object
                                        type: object
                                      memory:
                                        description: Memory represents configuration
                                          of in-memory storage implies .Values.tracing.jaeger.template=all-in-one
                                        properties:
                                          maxTraces:
                                            description: MaxTraces to store .Values.tracing.jaeger.memory.max_traces,
                                              defaults to 100000
                                            format: int64
                                            type: integer
                                        type: object
                                      type:
                                        description: Type of storage to use
                                        type: string
                                    type: object
                                type: object
                              ingress:
                                description: Ingress configures k8s Ingress or OpenShift
                                  Route for Jaeger services .Values.tracing.jaeger.ingress.enabled,
                                  false if null
                                properties:
                                  enabled:
                                    description: Enabled specifies whether or not
                                      this feature is enabled
                                    type: boolean
                                  metadata:
                                    description: Metadata represents addtional annotations/labels
                                      to be applied to the ingress/route.
                                    properties:
                                      annotations:
                                        additionalProperties:
                                          type: string
                                        type: object
                                      labels:
                                        additionalProperties:
                                          type: string
                                        type: object
                                    type: object
                                type: object
                              runtime:
                                description: Runtime configures runtime aspects of
                                  Jaeger deployment/pod Used to configure resources
                                  and affinity.  runtime.pod.containers can be used
                                  to override details for specific jaeger components,
                                  e.g. allInOne, query, etc.  runtime.metadata.annotations
                                  maps to .Values.tracing.jaeger.annotations
                                properties:
                                  deployment:
                                    description: Deployment specific overrides
                                    properties:
                                      autoScaling:
                                        description: Autoscaling specifies the configuration
                                          for a HorizontalPodAutoscaler to be applied
                                          to this deployment.  Null indicates no auto
                                          scaling. .Values.*.autoscale* fields
                                        properties:
                                          maxReplicas:
                                            description: upper limit for the number
                                              of pods that can be set by the autoscaler;
                                              cannot be smaller than MinReplicas.
                                            format: int32
                                            type: integer
                                          minReplicas:
                                            description: lower limit for the number
                                              of pods that can be set by the autoscaler,
                                              default 1.
                                            format: int32
                                            type: integer
                                          targetCPUUtilizationPercentage:
                                            description: target average CPU utilization
                                              (represented as a percentage of requested
                                              CPU) over all the pods; if not specified
                                              the default autoscaling policy will
                                              be used.
                                            format: int32
                                            type: integer
                                        type: object
                                      metadata:
                                        description: Metadata specifies additional
                                          labels and annotations to be applied to
                                          the deployment
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      replicas:
                                        description: Number of desired pods. This
                                          is a pointer to distinguish between explicit
                                          zero and not specified. Defaults to 1. .Values.*.replicaCount
                                        format: int32
                                        type: integer
                                      strategy:
                                        description: The deployment strategy to use
                                          to replace existing pods with new ones.
                                          .Values.*.rollingMaxSurge, rollingMaxUnavailable,
                                          etc.
                                        properties:
                                          rollingUpdate:
                                            description: 'Rolling update config params.
                                              Present only if DeploymentStrategyType
                                              = RollingUpdate. --- TODO: Update this
                                              to follow our convention for oneOf,
                                              whatever we decide it to be.'
                                            properties:
                                              maxSurge:
                                                anyOf:
                                                - type: integer
                                                - type: string
                                                description: 'The maximum number of
                                                  pods that can be scheduled above
                                                  the desired number of pods. Value
                                                  can be an absolute number (ex: 5)
                                                  or a percentage of desired pods
                                                  (ex: 10%). This can not be 0 if
                                                  MaxUnavailable is 0. Absolute number
                                                  is calculated from percentage by
                                                  rounding up. Defaults to 25%. Example:
                                                  when this is set to 30%, the new
                                                  ReplicaSet can be scaled up immediately
                                                  when the rolling update starts,
                                                  such that the total number of old
                                                  and new pods do not exceed 130%
                                                  of desired pods. Once old pods have
                                                  been killed, new ReplicaSet can
                                                  be scaled up further, ensuring that
                                                  total number of pods running at
                                                  any time during the update is at
                                                  most 130% of desired pods.'
                                                x-kubernetes-int-or-string: true
                                              maxUnavailable:
                                                anyOf:
                                                - type: integer
                                                - type: string
                                                description: 'The maximum number of
                                                  pods that can be unavailable during
                                                  the update. Value can be an absolute
                                                  number (ex: 5) or a percentage of
                                                  desired pods (ex: 10%). Absolute
                                                  number is calculated from percentage
                                                  by rounding down. This can not be
                                                  0 if MaxSurge is 0. Defaults to
                                                  25%. Example: when this is set to
                                                  30%, the old ReplicaSet can be scaled
                                                  down to 70% of desired pods immediately
                                                  when the rolling update starts.
                                                  Once new pods are ready, old ReplicaSet
                                                  can be scaled down further, followed
                                                  by scaling up the new ReplicaSet,
                                                  ensuring that the total number of
                                                  pods available at all times during
                                                  the update is at least 70% of desired
                                                  pods.'
                                                x-kubernetes-int-or-string: true
                                            type: object
                                          type:
                                            description: Type of deployment. Can be
                                              "Recreate" or "RollingUpdate". Default
                                              is RollingUpdate.
                                            type: string
                                        type: object
                                    type: object
                                  pod:
                                    description: Pod specific overrides
                                    properties:
                                      affinity:
                                        description: If specified, the pod's scheduling
                                          constraints .Values.podAntiAffinityLabelSelector,
                                          podAntiAffinityTermLabelSelector, nodeSelector
                                          NodeAffinity is not supported at this time
                                          PodAffinity is not supported at this time
                                        properties:
                                          podAntiAffinity:
                                            description: PodAntiAffinity configures
                                              anti affinity for pod scheduling
                                            properties:
                                              preferredDuringScheduling:
                                                items:
                                                  description: PodAntiAffinityTerm
                                                    is a simplified version of corev1.PodAntiAffinityTerm
                                                  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. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    topologyKey:
                                                      description: This pod should
                                                        be co-located (affinity) or
                                                        not co-located (anti-affinity)
                                                        with the pods matching the
                                                        labelSelector in the specified
                                                        namespaces, where co-located
                                                        is defined as running on a
                                                        node whose value of the label
                                                        with key topologyKey matches
                                                        that of any node on which
                                                        any of the selected pods is
                                                        running. Empty topologyKey
                                                        is not allowed.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              requiredDuringScheduling:
                                                items:
                                                  description: PodAntiAffinityTerm
                                                    is a simplified version of corev1.PodAntiAffinityTerm
                                                  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. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    topologyKey:
                                                      description: This pod should
                                                        be co-located (affinity) or
                                                        not co-located (anti-affinity)
                                                        with the pods matching the
                                                        labelSelector in the specified
                                                        namespaces, where co-located
                                                        is defined as running on a
                                                        node whose value of the label
                                                        with key topologyKey matches
                                                        that of any node on which
                                                        any of the selected pods is
                                                        running. Empty topologyKey
                                                        is not allowed.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                            type: object
                                        type: object
                                      containers:
                                        additionalProperties:
                                          description: ContainerConfig to be applied
                                            to containers in a pod, in a deployment
                                          properties:
                                            image:
                                              type: string
                                            imagePullPolicy:
                                              description: PullPolicy describes a
                                                policy for if/when to pull a container
                                                image
                                              type: string
                                            imagePullSecrets:
                                              items:
                                                description: LocalObjectReference
                                                  contains enough information to let
                                                  you locate the referenced object
                                                  inside the same namespace.
                                                properties:
                                                  name:
                                                    description: 'Name of the referent.
                                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                                      TODO: Add other useful fields.
                                                      apiVersion, kind, uid?'
                                                    type: string
                                                type: object
                                              type: array
                                            imageRegistry:
                                              type: string
                                            imageTag:
                                              type: string
                                            resources:
                                              description: ResourceRequirements describes
                                                the compute resource requirements.
                                              properties:
                                                limits:
                                                  additionalProperties:
                                                    anyOf:
                                                    - type: integer
                                                    - type: string
                                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                    x-kubernetes-int-or-string: true
                                                  description: 'Limits describes the
                                                    maximum amount of compute resources
                                                    allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                                  type: object
                                                requests:
                                                  additionalProperties:
                                                    anyOf:
                                                    - type: integer
                                                    - type: string
                                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                    x-kubernetes-int-or-string: true
                                                  description: 'Requests describes
                                                    the minimum amount of compute
                                                    resources required. If Requests
                                                    is omitted for a container, it
                                                    defaults to Limits if that is
                                                    explicitly specified, otherwise
                                                    to an implementation-defined value.
                                                    More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                                  type: object
                                              type: object
                                          type: object
                                        description: 'XXX: is it too cheesy to use
                                          ''default'' name for defaults?  default
                                          would apply to all containers .Values.*.resource,
                                          imagePullPolicy, etc.'
                                        type: object
                                      metadata:
                                        description: 'Metadata allows additional annotations/labels
                                          to be applied to the pod .Values.*.podAnnotations
                                          XXX: currently, additional lables are not
                                          supported'
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      nodeSelector:
                                        additionalProperties:
                                          type: string
                                        description: 'NodeSelector is a selector which
                                          must be true for the pod to fit on a node.
                                          Selector which must match a node''s labels
                                          for the pod to be scheduled on that node.
                                          More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                          .Values.nodeSelector'
                                        type: object
                                      priorityClassName:
                                        description: '.Values.global.priorityClassName
                                          XXX: currently, this is only a global setting.  maybe
                                          only allow setting in global runtime defaults?'
                                        type: string
                                      tolerations:
                                        description: If specified, the pod's tolerations.
                                          .Values.tolerations
                                        items:
                                          description: The pod this Toleration is
                                            attached to tolerates any taint that matches
                                            the triple <key,value,effect> using the
                                            matching operator <operator>.
                                          properties:
                                            effect:
                                              description: Effect indicates the taint
                                                effect to match. Empty means match
                                                all taint effects. When specified,
                                                allowed values are NoSchedule, PreferNoSchedule
                                                and NoExecute.
                                              type: string
                                            key:
                                              description: Key is the taint key that
                                                the toleration applies to. Empty means
                                                match all taint keys. If the key is
                                                empty, operator must be Exists; this
                                                combination means to match all values
                                                and all keys.
                                              type: string
                                            operator:
                                              description: Operator represents a key's
                                                relationship to the value. Valid operators
                                                are Exists and Equal. Defaults to
                                                Equal. Exists is equivalent to wildcard
                                                for value, so that a pod can tolerate
                                                all taints of a particular category.
                                              type: string
                                            tolerationSeconds:
                                              description: TolerationSeconds represents
                                                the period of time the toleration
                                                (which must be of effect NoExecute,
                                                otherwise this field is ignored) tolerates
                                                the taint. By default, it is not set,
                                                which means tolerate the taint forever
                                                (do not evict). Zero and negative
                                                values will be treated as 0 (evict
                                                immediately) by the system.
                                              format: int64
                                              type: integer
                                            value:
                                              description: Value is the taint value
                                                the toleration matches to. If the
                                                operator is Exists, the value should
                                                be empty, otherwise just a regular
                                                string.
                                              type: string
                                          type: object
                                        type: array
                                    type: object
                                type: object
                            type: object
                          name:
                            description: Name of Jaeger CR, Namespace must match control
                              plane namespace
                            type: string
                        type: object
                      type:
                        description: Type represents the type of tracer to be installed.
                        type: string
                    type: object
                  visualization:
                    description: Visualization configures visualization solutions
                      used with the mesh
                    properties:
                      grafana:
                        description: Grafana configures a grafana instance to use
                          with the mesh .Values.grafana.enabled, true if not null
                        properties:
                          address:
                            description: Address is the address of an existing grafana
                              installation implies .Values.kiali.dashboard.grafanaURL
                            type: string
                          enabled:
                            description: Enabled specifies whether or not this feature
                              is enabled
                            type: boolean
                          install:
                            description: Install a new grafana instance and manage
                              with control plane
                            properties:
                              config:
                                description: Config configures the behavior of the
                                  grafana installation
                                properties:
                                  env:
                                    additionalProperties:
                                      type: string
                                    description: 'Env allows specification of various
                                      grafana environment variables to be configured
                                      on the grafana container. .Values.grafana.env
                                      XXX: This is pretty cheesy...'
                                    type: object
                                  envSecrets:
                                    additionalProperties:
                                      type: string
                                    description: 'EnvSecrets allows specification
                                      of secret fields into grafana environment variables
                                      to be configured on the grafana container .Values.grafana.envSecrets
                                      XXX: This is pretty cheesy...'
                                    type: object
                                type: object
                              persistence:
                                description: 'Persistence configures a PersistentVolume
                                  associated with the grafana installation .Values.grafana.persist,
                                  true if not null XXX: capacity is not supported
                                  in the charts, hard coded to 5Gi'
                                properties:
                                  accessMode:
                                    description: AccessMode for the PersistentVolume
                                    type: string
                                  capacity:
                                    additionalProperties:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                      x-kubernetes-int-or-string: true
                                    description: Capacity to request for the PersistentVolume
                                    type: object
                                  enabled:
                                    description: Enabled specifies whether or not
                                      this feature is enabled
                                    type: boolean
                                  storageClassName:
                                    description: StorageClassName for the PersistentVolume
                                    type: string
                                type: object
                              runtime:
                                description: Runtime is used to customize the grafana
                                  deployment/pod
                                properties:
                                  deployment:
                                    description: Deployment specific overrides
                                    properties:
                                      autoScaling:
                                        description: Autoscaling specifies the configuration
                                          for a HorizontalPodAutoscaler to be applied
                                          to this deployment.  Null indicates no auto
                                          scaling. .Values.*.autoscale* fields
                                        properties:
                                          maxReplicas:
                                            description: upper limit for the number
                                              of pods that can be set by the autoscaler;
                                              cannot be smaller than MinReplicas.
                                            format: int32
                                            type: integer
                                          minReplicas:
                                            description: lower limit for the number
                                              of pods that can be set by the autoscaler,
                                              default 1.
                                            format: int32
                                            type: integer
                                          targetCPUUtilizationPercentage:
                                            description: target average CPU utilization
                                              (represented as a percentage of requested
                                              CPU) over all the pods; if not specified
                                              the default autoscaling policy will
                                              be used.
                                            format: int32
                                            type: integer
                                        type: object
                                      metadata:
                                        description: Metadata specifies additional
                                          labels and annotations to be applied to
                                          the deployment
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      replicas:
                                        description: Number of desired pods. This
                                          is a pointer to distinguish between explicit
                                          zero and not specified. Defaults to 1. .Values.*.replicaCount
                                        format: int32
                                        type: integer
                                      strategy:
                                        description: The deployment strategy to use
                                          to replace existing pods with new ones.
                                          .Values.*.rollingMaxSurge, rollingMaxUnavailable,
                                          etc.
                                        properties:
                                          rollingUpdate:
                                            description: 'Rolling update config params.
                                              Present only if DeploymentStrategyType
                                              = RollingUpdate. --- TODO: Update this
                                              to follow our convention for oneOf,
                                              whatever we decide it to be.'
                                            properties:
                                              maxSurge:
                                                anyOf:
                                                - type: integer
                                                - type: string
                                                description: 'The maximum number of
                                                  pods that can be scheduled above
                                                  the desired number of pods. Value
                                                  can be an absolute number (ex: 5)
                                                  or a percentage of desired pods
                                                  (ex: 10%). This can not be 0 if
                                                  MaxUnavailable is 0. Absolute number
                                                  is calculated from percentage by
                                                  rounding up. Defaults to 25%. Example:
                                                  when this is set to 30%, the new
                                                  ReplicaSet can be scaled up immediately
                                                  when the rolling update starts,
                                                  such that the total number of old
                                                  and new pods do not exceed 130%
                                                  of desired pods. Once old pods have
                                                  been killed, new ReplicaSet can
                                                  be scaled up further, ensuring that
                                                  total number of pods running at
                                                  any time during the update is at
                                                  most 130% of desired pods.'
                                                x-kubernetes-int-or-string: true
                                              maxUnavailable:
                                                anyOf:
                                                - type: integer
                                                - type: string
                                                description: 'The maximum number of
                                                  pods that can be unavailable during
                                                  the update. Value can be an absolute
                                                  number (ex: 5) or a percentage of
                                                  desired pods (ex: 10%). Absolute
                                                  number is calculated from percentage
                                                  by rounding down. This can not be
                                                  0 if MaxSurge is 0. Defaults to
                                                  25%. Example: when this is set to
                                                  30%, the old ReplicaSet can be scaled
                                                  down to 70% of desired pods immediately
                                                  when the rolling update starts.
                                                  Once new pods are ready, old ReplicaSet
                                                  can be scaled down further, followed
                                                  by scaling up the new ReplicaSet,
                                                  ensuring that the total number of
                                                  pods available at all times during
                                                  the update is at least 70% of desired
                                                  pods.'
                                                x-kubernetes-int-or-string: true
                                            type: object
                                          type:
                                            description: Type of deployment. Can be
                                              "Recreate" or "RollingUpdate". Default
                                              is RollingUpdate.
                                            type: string
                                        type: object
                                    type: object
                                  pod:
                                    description: Pod specific overrides
                                    properties:
                                      affinity:
                                        description: If specified, the pod's scheduling
                                          constraints .Values.podAntiAffinityLabelSelector,
                                          podAntiAffinityTermLabelSelector, nodeSelector
                                          NodeAffinity is not supported at this time
                                          PodAffinity is not supported at this time
                                        properties:
                                          podAntiAffinity:
                                            description: PodAntiAffinity configures
                                              anti affinity for pod scheduling
                                            properties:
                                              preferredDuringScheduling:
                                                items:
                                                  description: PodAntiAffinityTerm
                                                    is a simplified version of corev1.PodAntiAffinityTerm
                                                  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. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    topologyKey:
                                                      description: This pod should
                                                        be co-located (affinity) or
                                                        not co-located (anti-affinity)
                                                        with the pods matching the
                                                        labelSelector in the specified
                                                        namespaces, where co-located
                                                        is defined as running on a
                                                        node whose value of the label
                                                        with key topologyKey matches
                                                        that of any node on which
                                                        any of the selected pods is
                                                        running. Empty topologyKey
                                                        is not allowed.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              requiredDuringScheduling:
                                                items:
                                                  description: PodAntiAffinityTerm
                                                    is a simplified version of corev1.PodAntiAffinityTerm
                                                  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. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    topologyKey:
                                                      description: This pod should
                                                        be co-located (affinity) or
                                                        not co-located (anti-affinity)
                                                        with the pods matching the
                                                        labelSelector in the specified
                                                        namespaces, where co-located
                                                        is defined as running on a
                                                        node whose value of the label
                                                        with key topologyKey matches
                                                        that of any node on which
                                                        any of the selected pods is
                                                        running. Empty topologyKey
                                                        is not allowed.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                            type: object
                                        type: object
                                      containers:
                                        additionalProperties:
                                          description: ContainerConfig to be applied
                                            to containers in a pod, in a deployment
                                          properties:
                                            image:
                                              type: string
                                            imagePullPolicy:
                                              description: PullPolicy describes a
                                                policy for if/when to pull a container
                                                image
                                              type: string
                                            imagePullSecrets:
                                              items:
                                                description: LocalObjectReference
                                                  contains enough information to let
                                                  you locate the referenced object
                                                  inside the same namespace.
                                                properties:
                                                  name:
                                                    description: 'Name of the referent.
                                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                                      TODO: Add other useful fields.
                                                      apiVersion, kind, uid?'
                                                    type: string
                                                type: object
                                              type: array
                                            imageRegistry:
                                              type: string
                                            imageTag:
                                              type: string
                                            resources:
                                              description: ResourceRequirements describes
                                                the compute resource requirements.
                                              properties:
                                                limits:
                                                  additionalProperties:
                                                    anyOf:
                                                    - type: integer
                                                    - type: string
                                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                    x-kubernetes-int-or-string: true
                                                  description: 'Limits describes the
                                                    maximum amount of compute resources
                                                    allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                                  type: object
                                                requests:
                                                  additionalProperties:
                                                    anyOf:
                                                    - type: integer
                                                    - type: string
                                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                    x-kubernetes-int-or-string: true
                                                  description: 'Requests describes
                                                    the minimum amount of compute
                                                    resources required. If Requests
                                                    is omitted for a container, it
                                                    defaults to Limits if that is
                                                    explicitly specified, otherwise
                                                    to an implementation-defined value.
                                                    More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                                  type: object
                                              type: object
                                          type: object
                                        description: 'XXX: is it too cheesy to use
                                          ''default'' name for defaults?  default
                                          would apply to all containers .Values.*.resource,
                                          imagePullPolicy, etc.'
                                        type: object
                                      metadata:
                                        description: 'Metadata allows additional annotations/labels
                                          to be applied to the pod .Values.*.podAnnotations
                                          XXX: currently, additional lables are not
                                          supported'
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      nodeSelector:
                                        additionalProperties:
                                          type: string
                                        description: 'NodeSelector is a selector which
                                          must be true for the pod to fit on a node.
                                          Selector which must match a node''s labels
                                          for the pod to be scheduled on that node.
                                          More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                          .Values.nodeSelector'
                                        type: object
                                      priorityClassName:
                                        description: '.Values.global.priorityClassName
                                          XXX: currently, this is only a global setting.  maybe
                                          only allow setting in global runtime defaults?'
                                        type: string
                                      tolerations:
                                        description: If specified, the pod's tolerations.
                                          .Values.tolerations
                                        items:
                                          description: The pod this Toleration is
                                            attached to tolerates any taint that matches
                                            the triple <key,value,effect> using the
                                            matching operator <operator>.
                                          properties:
                                            effect:
                                              description: Effect indicates the taint
                                                effect to match. Empty means match
                                                all taint effects. When specified,
                                                allowed values are NoSchedule, PreferNoSchedule
                                                and NoExecute.
                                              type: string
                                            key:
                                              description: Key is the taint key that
                                                the toleration applies to. Empty means
                                                match all taint keys. If the key is
                                                empty, operator must be Exists; this
                                                combination means to match all values
                                                and all keys.
                                              type: string
                                            operator:
                                              description: Operator represents a key's
                                                relationship to the value. Valid operators
                                                are Exists and Equal. Defaults to
                                                Equal. Exists is equivalent to wildcard
                                                for value, so that a pod can tolerate
                                                all taints of a particular category.
                                              type: string
                                            tolerationSeconds:
                                              description: TolerationSeconds represents
                                                the period of time the toleration
                                                (which must be of effect NoExecute,
                                                otherwise this field is ignored) tolerates
                                                the taint. By default, it is not set,
                                                which means tolerate the taint forever
                                                (do not evict). Zero and negative
                                                values will be treated as 0 (evict
                                                immediately) by the system.
                                              format: int64
                                              type: integer
                                            value:
                                              description: Value is the taint value
                                                the toleration matches to. If the
                                                operator is Exists, the value should
                                                be empty, otherwise just a regular
                                                string.
                                              type: string
                                          type: object
                                        type: array
                                    type: object
                                type: object
                              security:
                                description: 'Security is used to secure the grafana
                                  service. .Values.grafana.security.enabled, true
                                  if not null XXX: unused for maistra, as we use oauth-proxy'
                                properties:
                                  passphraseKey:
                                    description: PassphraseKey is the name of the
                                      key within the secret identifying the password.
                                    type: string
                                  secretName:
                                    description: SecretName is the name of a secret
                                      containing the username/password that should
                                      be used to access grafana.
                                    type: string
                                  usernameKey:
                                    description: UsernameKey is the name of the key
                                      within the secret identifying the username.
                                    type: string
                                type: object
                              selfManaged:
                                description: SelfManaged, true if the entire install
                                  should be managed by Maistra, false if using grafana
                                  CR (not supported)
                                type: boolean
                              service:
                                description: 'Service configures the k8s Service associated
                                  with the grafana installation XXX: grafana service
                                  config does not follow other addon components''
                                  structure'
                                properties:
                                  ingress:
                                    description: Ingress specifies details for accessing
                                      the component's service through a k8s Ingress
                                      or OpenShift Route.
                                    properties:
                                      contextPath:
                                        description: ContextPath represents the context
                                          path to the service.
                                        type: string
                                      enabled:
                                        description: Enabled specifies whether or
                                          not this feature is enabled
                                        type: boolean
                                      hosts:
                                        description: 'Hosts represents a list of host
                                          names to configure.  Note, OpenShift route
                                          only supports a single host name per route.  An
                                          empty host name implies a default host name
                                          for the Route. XXX: is a host name required
                                          for k8s Ingress?'
                                        items:
                                          type: string
                                        type: array
                                      metadata:
                                        description: Metadata represents additional
                                          metadata to be applied to the ingress/route.
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      tls:
                                        additionalProperties:
                                          type: string
                                        description: 'TLS is used to configure TLS
                                          for the Ingress/Route XXX: should this be
                                          something like RawExtension, as the configuration
                                          differs between Route and Ingress?'
                                        type: object
                                    type: object
                                  metadata:
                                    description: Metadata represents addtional annotations/labels
                                      to be applied to the component's service.
                                    properties:
                                      annotations:
                                        additionalProperties:
                                          type: string
                                        type: object
                                      labels:
                                        additionalProperties:
                                          type: string
                                        type: object
                                    type: object
                                  nodePort:
                                    description: NodePort specifies a NodePort for
                                      the component's Service. .Values.prometheus.service.nodePort.port,
                                      ...enabled is true if not null
                                    format: int32
                                    type: integer
                                type: object
                            type: object
                        type: object
                      kiali:
                        description: Kiali configures a kiali instance to use with
                          the mesh .Values.kiali.enabled, true if not null
                        properties:
                          enabled:
                            description: Enabled specifies whether or not this feature
                              is enabled
                            type: boolean
                          install:
                            description: Install a Kiali resource if the named Kiali
                              resource is not present.
                            properties:
                              config:
                                description: Config is used to configure the behavior
                                  of the kiali installation
                                properties:
                                  dashboard:
                                    description: Dashboard configures the behavior
                                      of the kiali dashboard.
                                    properties:
                                      enableGrafana:
                                        description: 'XXX: should the user have a
                                          choice here, or should these be configured
                                          automatically if they are enabled for the
                                          control plane installation? Grafana endpoint
                                          will be configured based on Grafana configuration'
                                        type: boolean
                                      enablePrometheus:
                                        description: Prometheus endpoint will be configured
                                          based on Prometheus configuration
                                        type: boolean
                                      enableTracing:
                                        description: Tracing endpoint will be configured
                                          based on Tracing configuration
                                        type: boolean
                                      viewOnly:
                                        description: ViewOnly configures view_only_mode
                                          for the dashboard .Values.kiali.dashboard.viewOnlyMode
                                        type: boolean
                                    type: object
                                type: object
                              runtime:
                                description: 'Runtime is used to customize the deployment/pod
                                  for the kiali installation. XXX: largely unused,
                                  only image pull policy and image pull secrets are
                                  relevant for maistra'
                                properties:
                                  deployment:
                                    description: Deployment specific overrides
                                    properties:
                                      autoScaling:
                                        description: Autoscaling specifies the configuration
                                          for a HorizontalPodAutoscaler to be applied
                                          to this deployment.  Null indicates no auto
                                          scaling. .Values.*.autoscale* fields
                                        properties:
                                          maxReplicas:
                                            description: upper limit for the number
                                              of pods that can be set by the autoscaler;
                                              cannot be smaller than MinReplicas.
                                            format: int32
                                            type: integer
                                          minReplicas:
                                            description: lower limit for the number
                                              of pods that can be set by the autoscaler,
                                              default 1.
                                            format: int32
                                            type: integer
                                          targetCPUUtilizationPercentage:
                                            description: target average CPU utilization
                                              (represented as a percentage of requested
                                              CPU) over all the pods; if not specified
                                              the default autoscaling policy will
                                              be used.
                                            format: int32
                                            type: integer
                                        type: object
                                      metadata:
                                        description: Metadata specifies additional
                                          labels and annotations to be applied to
                                          the deployment
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      replicas:
                                        description: Number of desired pods. This
                                          is a pointer to distinguish between explicit
                                          zero and not specified. Defaults to 1. .Values.*.replicaCount
                                        format: int32
                                        type: integer
                                      strategy:
                                        description: The deployment strategy to use
                                          to replace existing pods with new ones.
                                          .Values.*.rollingMaxSurge, rollingMaxUnavailable,
                                          etc.
                                        properties:
                                          rollingUpdate:
                                            description: 'Rolling update config params.
                                              Present only if DeploymentStrategyType
                                              = RollingUpdate. --- TODO: Update this
                                              to follow our convention for oneOf,
                                              whatever we decide it to be.'
                                            properties:
                                              maxSurge:
                                                anyOf:
                                                - type: integer
                                                - type: string
                                                description: 'The maximum number of
                                                  pods that can be scheduled above
                                                  the desired number of pods. Value
                                                  can be an absolute number (ex: 5)
                                                  or a percentage of desired pods
                                                  (ex: 10%). This can not be 0 if
                                                  MaxUnavailable is 0. Absolute number
                                                  is calculated from percentage by
                                                  rounding up. Defaults to 25%. Example:
                                                  when this is set to 30%, the new
                                                  ReplicaSet can be scaled up immediately
                                                  when the rolling update starts,
                                                  such that the total number of old
                                                  and new pods do not exceed 130%
                                                  of desired pods. Once old pods have
                                                  been killed, new ReplicaSet can
                                                  be scaled up further, ensuring that
                                                  total number of pods running at
                                                  any time during the update is at
                                                  most 130% of desired pods.'
                                                x-kubernetes-int-or-string: true
                                              maxUnavailable:
                                                anyOf:
                                                - type: integer
                                                - type: string
                                                description: 'The maximum number of
                                                  pods that can be unavailable during
                                                  the update. Value can be an absolute
                                                  number (ex: 5) or a percentage of
                                                  desired pods (ex: 10%). Absolute
                                                  number is calculated from percentage
                                                  by rounding down. This can not be
                                                  0 if MaxSurge is 0. Defaults to
                                                  25%. Example: when this is set to
                                                  30%, the old ReplicaSet can be scaled
                                                  down to 70% of desired pods immediately
                                                  when the rolling update starts.
                                                  Once new pods are ready, old ReplicaSet
                                                  can be scaled down further, followed
                                                  by scaling up the new ReplicaSet,
                                                  ensuring that the total number of
                                                  pods available at all times during
                                                  the update is at least 70% of desired
                                                  pods.'
                                                x-kubernetes-int-or-string: true
                                            type: object
                                          type:
                                            description: Type of deployment. Can be
                                              "Recreate" or "RollingUpdate". Default
                                              is RollingUpdate.
                                            type: string
                                        type: object
                                    type: object
                                  pod:
                                    description: Pod specific overrides
                                    properties:
                                      affinity:
                                        description: If specified, the pod's scheduling
                                          constraints .Values.podAntiAffinityLabelSelector,
                                          podAntiAffinityTermLabelSelector, nodeSelector
                                          NodeAffinity is not supported at this time
                                          PodAffinity is not supported at this time
                                        properties:
                                          podAntiAffinity:
                                            description: PodAntiAffinity configures
                                              anti affinity for pod scheduling
                                            properties:
                                              preferredDuringScheduling:
                                                items:
                                                  description: PodAntiAffinityTerm
                                                    is a simplified version of corev1.PodAntiAffinityTerm
                                                  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. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    topologyKey:
                                                      description: This pod should
                                                        be co-located (affinity) or
                                                        not co-located (anti-affinity)
                                                        with the pods matching the
                                                        labelSelector in the specified
                                                        namespaces, where co-located
                                                        is defined as running on a
                                                        node whose value of the label
                                                        with key topologyKey matches
                                                        that of any node on which
                                                        any of the selected pods is
                                                        running. Empty topologyKey
                                                        is not allowed.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                              requiredDuringScheduling:
                                                items:
                                                  description: PodAntiAffinityTerm
                                                    is a simplified version of corev1.PodAntiAffinityTerm
                                                  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. Valid operators
                                                        are In, NotIn, Exists and
                                                        DoesNotExist.
                                                      type: string
                                                    topologyKey:
                                                      description: This pod should
                                                        be co-located (affinity) or
                                                        not co-located (anti-affinity)
                                                        with the pods matching the
                                                        labelSelector in the specified
                                                        namespaces, where co-located
                                                        is defined as running on a
                                                        node whose value of the label
                                                        with key topologyKey matches
                                                        that of any node on which
                                                        any of the selected pods is
                                                        running. Empty topologyKey
                                                        is not allowed.
                                                      type: string
                                                    values:
                                                      description: values is an array
                                                        of string values. If the operator
                                                        is In or NotIn, the values
                                                        array must be non-empty. If
                                                        the operator is Exists or
                                                        DoesNotExist, the values array
                                                        must be empty. This array
                                                        is replaced during a strategic
                                                        merge patch.
                                                      items:
                                                        type: string
                                                      type: array
                                                  required:
                                                  - key
                                                  - operator
                                                  type: object
                                                type: array
                                            type: object
                                        type: object
                                      containers:
                                        additionalProperties:
                                          description: ContainerConfig to be applied
                                            to containers in a pod, in a deployment
                                          properties:
                                            image:
                                              type: string
                                            imagePullPolicy:
                                              description: PullPolicy describes a
                                                policy for if/when to pull a container
                                                image
                                              type: string
                                            imagePullSecrets:
                                              items:
                                                description: LocalObjectReference
                                                  contains enough information to let
                                                  you locate the referenced object
                                                  inside the same namespace.
                                                properties:
                                                  name:
                                                    description: 'Name of the referent.
                                                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                                      TODO: Add other useful fields.
                                                      apiVersion, kind, uid?'
                                                    type: string
                                                type: object
                                              type: array
                                            imageRegistry:
                                              type: string
                                            imageTag:
                                              type: string
                                            resources:
                                              description: ResourceRequirements describes
                                                the compute resource requirements.
                                              properties:
                                                limits:
                                                  additionalProperties:
                                                    anyOf:
                                                    - type: integer
                                                    - type: string
                                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                    x-kubernetes-int-or-string: true
                                                  description: 'Limits describes the
                                                    maximum amount of compute resources
                                                    allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                                  type: object
                                                requests:
                                                  additionalProperties:
                                                    anyOf:
                                                    - type: integer
                                                    - type: string
                                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                    x-kubernetes-int-or-string: true
                                                  description: 'Requests describes
                                                    the minimum amount of compute
                                                    resources required. If Requests
                                                    is omitted for a container, it
                                                    defaults to Limits if that is
                                                    explicitly specified, otherwise
                                                    to an implementation-defined value.
                                                    More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                                  type: object
                                              type: object
                                          type: object
                                        description: 'XXX: is it too cheesy to use
                                          ''default'' name for defaults?  default
                                          would apply to all containers .Values.*.resource,
                                          imagePullPolicy, etc.'
                                        type: object
                                      metadata:
                                        description: 'Metadata allows additional annotations/labels
                                          to be applied to the pod .Values.*.podAnnotations
                                          XXX: currently, additional lables are not
                                          supported'
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      nodeSelector:
                                        additionalProperties:
                                          type: string
                                        description: 'NodeSelector is a selector which
                                          must be true for the pod to fit on a node.
                                          Selector which must match a node''s labels
                                          for the pod to be scheduled on that node.
                                          More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                          .Values.nodeSelector'
                                        type: object
                                      priorityClassName:
                                        description: '.Values.global.priorityClassName
                                          XXX: currently, this is only a global setting.  maybe
                                          only allow setting in global runtime defaults?'
                                        type: string
                                      tolerations:
                                        description: If specified, the pod's tolerations.
                                          .Values.tolerations
                                        items:
                                          description: The pod this Toleration is
                                            attached to tolerates any taint that matches
                                            the triple <key,value,effect> using the
                                            matching operator <operator>.
                                          properties:
                                            effect:
                                              description: Effect indicates the taint
                                                effect to match. Empty means match
                                                all taint effects. When specified,
                                                allowed values are NoSchedule, PreferNoSchedule
                                                and NoExecute.
                                              type: string
                                            key:
                                              description: Key is the taint key that
                                                the toleration applies to. Empty means
                                                match all taint keys. If the key is
                                                empty, operator must be Exists; this
                                                combination means to match all values
                                                and all keys.
                                              type: string
                                            operator:
                                              description: Operator represents a key's
                                                relationship to the value. Valid operators
                                                are Exists and Equal. Defaults to
                                                Equal. Exists is equivalent to wildcard
                                                for value, so that a pod can tolerate
                                                all taints of a particular category.
                                              type: string
                                            tolerationSeconds:
                                              description: TolerationSeconds represents
                                                the period of time the toleration
                                                (which must be of effect NoExecute,
                                                otherwise this field is ignored) tolerates
                                                the taint. By default, it is not set,
                                                which means tolerate the taint forever
                                                (do not evict). Zero and negative
                                                values will be treated as 0 (evict
                                                immediately) by the system.
                                              format: int64
                                              type: integer
                                            value:
                                              description: Value is the taint value
                                                the toleration matches to. If the
                                                operator is Exists, the value should
                                                be empty, otherwise just a regular
                                                string.
                                              type: string
                                          type: object
                                        type: array
                                    type: object
                                type: object
                              service:
                                description: 'Service is used to configure the k8s
                                  Service associated with the kiali installation.
                                  XXX: provided for upstream support, only ingress
                                  is used, and then only for enablement and contextPath'
                                properties:
                                  ingress:
                                    description: Ingress specifies details for accessing
                                      the component's service through a k8s Ingress
                                      or OpenShift Route.
                                    properties:
                                      contextPath:
                                        description: ContextPath represents the context
                                          path to the service.
                                        type: string
                                      enabled:
                                        description: Enabled specifies whether or
                                          not this feature is enabled
                                        type: boolean
                                      hosts:
                                        description: 'Hosts represents a list of host
                                          names to configure.  Note, OpenShift route
                                          only supports a single host name per route.  An
                                          empty host name implies a default host name
                                          for the Route. XXX: is a host name required
                                          for k8s Ingress?'
                                        items:
                                          type: string
                                        type: array
                                      metadata:
                                        description: Metadata represents additional
                                          metadata to be applied to the ingress/route.
                                        properties:
                                          annotations:
                                            additionalProperties:
                                              type: string
                                            type: object
                                          labels:
                                            additionalProperties:
                                              type: string
                                            type: object
                                        type: object
                                      tls:
                                        additionalProperties:
                                          type: string
                                        description: 'TLS is used to configure TLS
                                          for the Ingress/Route XXX: should this be
                                          something like RawExtension, as the configuration
                                          differs between Route and Ingress?'
                                        type: object
                                    type: object
                                  metadata:
                                    description: Metadata represents addtional annotations/labels
                                      to be applied to the component's service.
                                    properties:
                                      annotations:
                                        additionalProperties:
                                          type: string
                                        type: object
                                      labels:
                                        additionalProperties:
                                          type: string
                                        type: object
                                    type: object
                                  nodePort:
                                    description: NodePort specifies a NodePort for
                                      the component's Service. .Values.prometheus.service.nodePort.port,
                                      ...enabled is true if not null
                                    format: int32
                                    type: integer
                                type: object
                            type: object
                          name:
                            description: Name of Kiali CR, Namespace must match control
                              plane namespace
                            type: string
                        type: object
                    type: object
                type: object
              cluster:
                description: Cluster is the general configuration of the cluster (cluster
                  name, network name, multi-cluster, mesh expansion, etc.)
                properties:
                  meshExpansion:
                    description: '.Values.global.meshExpansion.enabled, if not null
                      XXX: it''s not clear whether or not there is any overlap with
                      MultiCluster, i.e. does MultiCluster require mesh expansion
                      ports to be configured on the ingress gateway?'
                    properties:
                      ilbGateway:
                        description: .Values.global.meshExpansion.useILB, true if
                          not null, otherwise uses ingress gateway
                        properties:
                          enableSDS:
                            description: 'EnableSDS for the gateway. .Values.gateways.<gateway-name>.sds.enabled
                              XXX: I believe this is only applicable to ingress gateways'
                            type: boolean
                          enabled:
                            description: Enabled specifies whether or not this feature
                              is enabled
                            type: boolean
                          namespace:
                            description: 'Namespace is the namespace within which
                              the gateway will be installed, defaults to control plane
                              namespace. .Values.gateways.<gateway-name>.namespace
                              XXX: for the standard gateways, it might be possible
                              that related resources could be installed in control
                              plane namespace instead of the gateway namespace.  not
                              sure if this is a problem or not.'
                            type: string
                          requestedNetworkView:
                            description: 'RequestedNetworkView is a list of networks
                              whose services should be made available to the gateway.  This
                              is used primarily for mesh expansion/multi-cluster.
                              .Values.gateways.<gateway-name>.env.ISTIO_META_REQUESTED_NETWORK_VIEW
                              env, defaults to empty list XXX: I think this is only
                              applicable to egress gateways'
                            items:
                              type: string
                            type: array
                          routerMode:
                            description: The router mode to be used by the gateway.
                              .Values.gateways.<gateway-name>.env.ISTIO_META_ROUTER_MODE,
                              defaults to sni-dnat
                            type: string
                          runtime:
                            description: Runtime is used to configure execution parameters
                              for the pod/containers e.g. resources, replicas, etc.
                            properties:
                              deployment:
                                description: Deployment specific overrides
                                properties:
                                  autoScaling:
                                    description: Autoscaling specifies the configuration
                                      for a HorizontalPodAutoscaler to be applied
                                      to this deployment.  Null indicates no auto
                                      scaling. .Values.*.autoscale* fields
                                    properties:
                                      maxReplicas:
                                        description: upper limit for the number of
                                          pods that can be set by the autoscaler;
                                          cannot be smaller than MinReplicas.
                                        format: int32
                                        type: integer
                                      minReplicas:
                                        description: lower limit for the number of
                                          pods that can be set by the autoscaler,
                                          default 1.
                                        format: int32
                                        type: integer
                                      targetCPUUtilizationPercentage:
                                        description: target average CPU utilization
                                          (represented as a percentage of requested
                                          CPU) over all the pods; if not specified
                                          the default autoscaling policy will be used.
                                        format: int32
                                        type: integer
                                    type: object
                                  metadata:
                                    description: Metadata specifies additional labels
                                      and annotations to be applied to the deployment
                                    properties:
                                      annotations:
                                        additionalProperties:
                                          type: string
                                        type: object
                                      labels:
                                        additionalProperties:
                                          type: string
                                        type: object
                                    type: object
                                  replicas:
                                    description: Number of desired pods. This is a
                                      pointer to distinguish between explicit zero
                                      and not specified. Defaults to 1. .Values.*.replicaCount
                                    format: int32
                                    type: integer
                                  strategy:
                                    description: The deployment strategy to use to
                                      replace existing pods with new ones. .Values.*.rollingMaxSurge,
                                      rollingMaxUnavailable, etc.
                                    properties:
                                      rollingUpdate:
                                        description: 'Rolling update config params.
                                          Present only if DeploymentStrategyType =
                                          RollingUpdate. --- TODO: Update this to
                                          follow our convention for oneOf, whatever
                                          we decide it to be.'
                                        properties:
                                          maxSurge:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            description: 'The maximum number of pods
                                              that can be scheduled above the desired
                                              number of pods. Value can be an absolute
                                              number (ex: 5) or a percentage of desired
                                              pods (ex: 10%). This can not be 0 if
                                              MaxUnavailable is 0. Absolute number
                                              is calculated from percentage by rounding
                                              up. Defaults to 25%. Example: when this
                                              is set to 30%, the new ReplicaSet can
                                              be scaled up immediately when the rolling
                                              update starts, such that the total number
                                              of old and new pods do not exceed 130%
                                              of desired pods. Once old pods have
                                              been killed, new ReplicaSet can be scaled
                                              up further, ensuring that total number
                                              of pods running at any time during the
                                              update is at most 130% of desired pods.'
                                            x-kubernetes-int-or-string: true
                                          maxUnavailable:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            description: 'The maximum number of pods
                                              that can be unavailable during the update.
                                              Value can be an absolute number (ex:
                                              5) or a percentage of desired pods (ex:
                                              10%). Absolute number is calculated
                                              from percentage by rounding down. This
                                              can not be 0 if MaxSurge is 0. Defaults
                                              to 25%. Example: when this is set to
                                              30%, the old ReplicaSet can be scaled
                                              down to 70% of desired pods immediately
                                              when the rolling update starts. Once
                                              new pods are ready, old ReplicaSet can
                                              be scaled down further, followed by
                                              scaling up the new ReplicaSet, ensuring
                                              that the total number of pods available
                                              at all times during the update is at
                                              least 70% of desired pods.'
                                            x-kubernetes-int-or-string: true
                                        type: object
                                      type:
                                        description: Type of deployment. Can be "Recreate"
                                          or "RollingUpdate". Default is RollingUpdate.
                                        type: string
                                    type: object
                                type: object
                              pod:
                                description: Pod specific overrides
                                properties:
                                  affinity:
                                    description: If specified, the pod's scheduling
                                      constraints .Values.podAntiAffinityLabelSelector,
                                      podAntiAffinityTermLabelSelector, nodeSelector
                                      NodeAffinity is not supported at this time PodAffinity
                                      is not supported at this time
                                    properties:
                                      podAntiAffinity:
                                        description: PodAntiAffinity configures anti
                                          affinity for pod scheduling
                                        properties:
                                          preferredDuringScheduling:
                                            items:
                                              description: PodAntiAffinityTerm is
                                                a simplified version of corev1.PodAntiAffinityTerm
                                              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. Valid operators are
                                                    In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                topologyKey:
                                                  description: This pod should be
                                                    co-located (affinity) or not co-located
                                                    (anti-affinity) with the pods
                                                    matching the labelSelector in
                                                    the specified namespaces, where
                                                    co-located is defined as running
                                                    on a node whose value of the label
                                                    with key topologyKey matches that
                                                    of any node on which any of the
                                                    selected pods is running. Empty
                                                    topologyKey is not allowed.
                                                  type: string
                                                values:
                                                  description: values is an array
                                                    of string values. If the operator
                                                    is In or NotIn, the values array
                                                    must be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. This
                                                    array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                          requiredDuringScheduling:
                                            items:
                                              description: PodAntiAffinityTerm is
                                                a simplified version of corev1.PodAntiAffinityTerm
                                              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. Valid operators are
                                                    In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                topologyKey:
                                                  description: This pod should be
                                                    co-located (affinity) or not co-located
                                                    (anti-affinity) with the pods
                                                    matching the labelSelector in
                                                    the specified namespaces, where
                                                    co-located is defined as running
                                                    on a node whose value of the label
                                                    with key topologyKey matches that
                                                    of any node on which any of the
                                                    selected pods is running. Empty
                                                    topologyKey is not allowed.
                                                  type: string
                                                values:
                                                  description: values is an array
                                                    of string values. If the operator
                                                    is In or NotIn, the values array
                                                    must be non-empty. If the operator
                                                    is Exists or DoesNotExist, the
                                                    values array must be empty. This
                                                    array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                        type: object
                                    type: object
                                  containers:
                                    additionalProperties:
                                      description: ContainerConfig to be applied to
                                        containers in a pod, in a deployment
                                      properties:
                                        image:
                                          type: string
                                        imagePullPolicy:
                                          description: PullPolicy describes a policy
                                            for if/when to pull a container image
                                          type: string
                                        imagePullSecrets:
                                          items:
                                            description: LocalObjectReference contains
                                              enough information to let you locate
                                              the referenced object inside the same
                                              namespace.
                                            properties:
                                              name:
                                                description: 'Name of the referent.
                                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                                  TODO: Add other useful fields. apiVersion,
                                                  kind, uid?'
                                                type: string
                                            type: object
                                          type: array
                                        imageRegistry:
                                          type: string
                                        imageTag:
                                          type: string
                                        resources:
                                          description: ResourceRequirements describes
                                            the compute resource requirements.
                                          properties:
                                            limits:
                                              additionalProperties:
                                                anyOf:
                                                - type: integer
                                                - type: string
                                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                x-kubernetes-int-or-string: true
                                              description: 'Limits describes the maximum
                                                amount of compute resources allowed.
                                                More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                              type: object
                                            requests:
                                              additionalProperties:
                                                anyOf:
                                                - type: integer
                                                - type: string
                                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                                x-kubernetes-int-or-string: true
                                              description: 'Requests describes the
                                                minimum amount of compute resources
                                                required. If Requests is omitted for
                                                a container, it defaults to Limits
                                                if that is explicitly specified, otherwise
                                                to an implementation-defined value.
                                                More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                              type: object
                                          type: object
                                      type: object
                                    description: 'XXX: is it too cheesy to use ''default''
                                      name for defaults?  default would apply to all
                                      containers .Values.*.resource, imagePullPolicy,
                                      etc.'
                                    type: object
                                  metadata:
                                    description: 'Metadata allows additional annotations/labels
                                      to be applied to the pod .Values.*.podAnnotations
                                      XXX: currently, additional lables are not supported'
                                    properties:
                                      annotations:
                                        additionalProperties:
                                          type: string
                                        type: object
                                      labels:
                                        additionalProperties:
                                          type: string
                                        type: object
                                    type: object
                                  nodeSelector:
                                    additionalProperties:
                                      type: string
                                    description: 'NodeSelector is a selector which
                                      must be true for the pod to fit on a node. Selector
                                      which must match a node''s labels for the pod
                                      to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                      .Values.nodeSelector'
                                    type: object
                                  priorityClassName:
                                    description: '.Values.global.priorityClassName
                                      XXX: currently, this is only a global setting.  maybe
                                      only allow setting in global runtime defaults?'
                                    type: string
                                  tolerations:
                                    description: If specified, the pod's tolerations.
                                      .Values.tolerations
                                    items:
                                      description: The pod this Toleration is attached
                                        to tolerates any taint that matches the triple
                                        <key,value,effect> using the matching operator
                                        <operator>.
                                      properties:
                                        effect:
                                          description: Effect indicates the taint
                                            effect to match. Empty means match all
                                            taint effects. When specified, allowed
                                            values are NoSchedule, PreferNoSchedule
                                            and NoExecute.
                                          type: string
                                        key:
                                          description: Key is the taint key that the
                                            toleration applies to. Empty means match
                                            all taint keys. If the key is empty, operator
                                            must be Exists; this combination means
                                            to match all values and all keys.
                                          type: string
                                        operator:
                                          description: Operator represents a key's
                                            relationship to the value. Valid operators
                                            are Exists and Equal. Defaults to Equal.
                                            Exists is equivalent to wildcard for value,
                                            so that a pod can tolerate all taints
                                            of a particular category.
                                          type: string
                                        tolerationSeconds:
                                          description: TolerationSeconds represents
                                            the period of time the toleration (which
                                            must be of effect NoExecute, otherwise
                                            this field is ignored) tolerates the taint.
                                            By default, it is not set, which means
                                            tolerate the taint forever (do not evict).
                                            Zero and negative values will be treated
                                            as 0 (evict immediately) by the system.
                                          format: int64
                                          type: integer
                                        value:
                                          description: Value is the taint value the
                                            toleration matches to. If the operator
                                            is Exists, the value should be empty,
                                            otherwise just a regular string.
                                          type: string
                                      type: object
                                    type: array
                                type: object
                            type: object
                          service:
                            description: 'Service configures the service associated
                              with the gateway, e.g. port mappings, service type,
                              annotations/labels, etc. .Values.gateways.<gateway-name>.ports,
                              .Values.gateways.<gateway-name>.type, .Values.gateways.<gateway-name>.loadBalancerIP,
                              .Values.gateways.<gateway-name>.serviceAnnotations,
                              .Values.gateways.<gateway-name>.serviceLabels XXX: currently
                              there is no distinction between labels and serviceLabels'
                            properties:
                              clusterIP:
                                description: 'clusterIP is the IP address of the service
                                  and is usually assigned randomly by the master.
                                  If an address is specified manually and is not in
                                  use by others, it will be allocated to the service;
                                  otherwise, creation of the service will fail. This
                                  field can not be changed through updates. Valid
                                  values are "None", empty string (""), or a valid
                                  IP address. "None" can be specified for headless
                                  services when proxying is not required. Only applies
                                  to types ClusterIP, NodePort, and LoadBalancer.
                                  Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                                type: string
                              externalIPs:
                                description: externalIPs is a list of IP addresses
                                  for which nodes in the cluster will also accept
                                  traffic for this service.  These IPs are not managed
                                  by Kubernetes.  The user is responsible for ensuring
                                  that traffic arrives at a node with this IP.  A
                                  common example is external load-balancers that are
                                  not part of the Kubernetes system.
                                items:
                                  type: string
                                type: array
                              externalName:
                                description: externalName is the external reference
                                  that kubedns or equivalent will return as a CNAME
                                  record for this service. No proxying will be involved.
                                  Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123)
                                  and requires Type to be ExternalName.
                                type: string
                              externalTrafficPolicy:
                                description: externalTrafficPolicy denotes if this
                                  Service desires to route external traffic to node-local
                                  or cluster-wide endpoints. "Local" preserves the
                                  client source IP and avoids a second hop for LoadBalancer
                                  and Nodeport type services, but risks potentially
                                  imbalanced traffic spreading. "Cluster" obscures
                                  the client source IP and may cause a second hop
                                  to another node, but should have good overall load-spreading.
                                type: string
                              healthCheckNodePort:
                                description: healthCheckNodePort specifies the healthcheck
                                  nodePort for the service. If not specified, HealthCheckNodePort
                                  is created by the service api backend with the allocated
                                  nodePort. Will use user-specified nodePort value
                                  if specified by the client. Only effects when Type
                                  is set to LoadBalancer and ExternalTrafficPolicy
                                  is set to Local.
                                format: int32
                                type: integer
                              ipFamily:
                                description: ipFamily specifies whether this Service
                                  has a preference for a particular IP family (e.g.
                                  IPv4 vs. IPv6).  If a specific IP family is requested,
                                  the clusterIP field will be allocated from that
                                  family, if it is available in the cluster.  If no
                                  IP family is requested, the cluster's primary IP
                                  family will be used. Other IP fields (loadBalancerIP,
                                  loadBalancerSourceRanges, externalIPs) and controllers
                                  which allocate external load-balancers should use
                                  the same IP family.  Endpoints for this Service
                                  will be of this family.  This field is immutable
                                  after creation. Assigning a ServiceIPFamily not
                                  available in the cluster (e.g. IPv6 in IPv4 only
                                  cluster) is an error condition and will fail during
                                  clusterIP assignment.
                                type: string
                              loadBalancerIP:
                                description: 'Only applies to Service Type: LoadBalancer
                                  LoadBalancer will get created with the IP specified
                                  in this field. This feature depends on whether the
                                  underlying cloud-provider supports specifying the
                                  loadBalancerIP when a load balancer is created.
                                  This field will be ignored if the cloud-provider
                                  does not support the feature.'
                                type: string
                              loadBalancerSourceRanges:
                                description: 'If specified and supported by the platform,
                                  this will restrict traffic through the cloud-provider
                                  load-balancer will be restricted to the specified
                                  client IPs. This field will be ignored if the cloud-provider
                                  does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/'
                                items:
                                  type: string
                                type: array
                              metadata:
                                description: metadata to be applied to the gateway's
                                  service (annotations and labels)
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                type: object
                              ports:
                                description: 'The list of ports that are exposed by
                                  this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                                items:
                                  description: ServicePort contains information on
                                    service's port.
                                  properties:
                                    appProtocol:
                                      description: The application protocol for this
                                        port. This field follows standard Kubernetes
                                        label syntax. Un-prefixed names are reserved
                                        for IANA standard service names (as per RFC-6335
                                        and http://www.iana.org/assignments/service-names).
                                        Non-standard protocols should use prefixed
                                        names such as mycompany.com/my-custom-protocol.
                                        Field can be enabled with ServiceAppProtocol
                                        feature gate.
                                      type: string
                                    name:
                                      description: The name of this port within the
                                        service. This must be a DNS_LABEL. All ports
                                        within a ServiceSpec must have unique names.
                                        When considering the endpoints for a Service,
                                        this must match the 'name' field in the EndpointPort.
                                        Optional if only one ServicePort is defined
                                        on this service.
                                      type: string
                                    nodePort:
                                      description: 'The port on each node on which
                                        this service is exposed when type=NodePort
                                        or LoadBalancer. Usually assigned by the system.
                                        If specified, it will be allocated to the
                                        service if unused or else creation of the
                                        service will fail. Default is to auto-allocate
                                        a port if the ServiceType of this Service
                                        requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport'
                                      format: int32
                                      type: integer
                                    port:
                                      description: The port that will be exposed by
                                        this service.
                                      format: int32
                                      type: integer
                                    protocol:
                                      description: The IP protocol for this port.
                                        Supports "TCP", "UDP", and "SCTP". Default
                                        is TCP.
                                      type: string
                                    targetPort:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      description: 'Number or name of the port to
                                        access on the pods targeted by the service.
                                        Number must be in the range 1 to 65535. Name
                                        must be an IANA_SVC_NAME. If this is a string,
                                        it will be looked up as a named port in the
                                        target Pod''s container ports. If this is
                                        not specified, the value of the ''port'' field
                                        is used (an identity map). This field is ignored
                                        for services with clusterIP=None, and should
                                        be omitted or set equal to the ''port'' field.
                                        More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service'
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                type: array
                                x-kubernetes-list-map-keys:
                                - port
                                - protocol
                                x-kubernetes-list-type: map
                              publishNotReadyAddresses:
                                description: publishNotReadyAddresses, when set to
                                  true, indicates that DNS implementations must publish
                                  the notReadyAddresses of subsets for the Endpoints
                                  associated with the Service. The default value is
                                  false. The primary use case for setting this field
                                  is to use a StatefulSet's Headless Service to propagate
                                  SRV records for its Pods without respect to their
                                  readiness for purpose of peer discovery.
                                type: boolean
                              selector:
                                additionalProperties:
                                  type: string
                                description: 'Route service traffic to pods with label
                                  keys and values matching this selector. If empty
                                  or not present, the service is assumed to have an
                                  external process managing its endpoints, which Kubernetes
                                  will not modify. Only applies to types ClusterIP,
                                  NodePort, and LoadBalancer. Ignored if type is ExternalName.
                                  More info: https://kubernetes.io/docs/concepts/services-networking/service/'
                                type: object
                              sessionAffinity:
                                description: 'Supports "ClientIP" and "None". Used
                                  to maintain session affinity. Enable client IP based
                                  session affinity. Must be ClientIP or None. Defaults
                                  to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                                type: string
                              sessionAffinityConfig:
                                description: sessionAffinityConfig contains the configurations
                                  of session affinity.
                                properties:
                                  clientIP:
                                    description: clientIP contains the configurations
                                      of Client IP based session affinity.
                                    properties:
                                      timeoutSeconds:
                                        description: timeoutSeconds specifies the
                                          seconds of ClientIP type session sticky
                                          time. The value must be >0 && <=86400(for
                                          1 day) if ServiceAffinity == "ClientIP".
                                          Default value is 10800(for 3 hours).
                                        format: int32
                                        type: integer
                                    type: object
                                type: object
                              topologyKeys:
                                description: topologyKeys is a preference-order list
                                  of topology keys which implementations of services
                                  should use to preferentially sort endpoints when
                                  accessing this Service, it can not be used at the
                                  same time as externalTrafficPolicy=Local. Topology
                                  keys must be valid label keys and at most 16 keys
                                  may be specified. Endpoints are chosen based on
                                  the first topology key with available backends.
                                  If this field is specified and all entries have
                                  no backends that match the topology of the client,
                                  the service has no backends for that client and
                                  connections should fail. The special value "*" may
                                  be used to mean "any topology". This catch-all value,
                                  if used, only makes sense as the last value in the
                                  list. If this is not specified or empty, no topology
                                  constraints will be applied.
                                items:
                                  type: string
                                type: array
                              type:
                                description: 'type determines how the Service is exposed.
                                  Defaults to ClusterIP. Valid options are ExternalName,
                                  ClusterIP, NodePort, and LoadBalancer. "ExternalName"
                                  maps to the specified externalName. "ClusterIP"
                                  allocates a cluster-internal IP address for load-balancing
                                  to endpoints. Endpoints are determined by the selector
                                  or if that is not specified, by manual construction
                                  of an Endpoints object. If clusterIP is "None",
                                  no virtual IP is allocated and the endpoints are
                                  published as a set of endpoints rather than a stable
                                  IP. "NodePort" builds on ClusterIP and allocates
                                  a port on every node which routes to the clusterIP.
                                  "LoadBalancer" builds on NodePort and creates an
                                  external load-balancer (if supported in the current
                                  cloud) which routes to the clusterIP. More info:
                                  https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types'
                                type: string
                            type: object
                          volumes:
                            description: Volumes is used to configure additional Secret
                              and ConfigMap volumes that should be mounted for the
                              gateway's pod. .Values.gateways.<gateway-name>.secretVolumes,
                              .Values.gateways.<gateway-name>.configMapVolumes
                            items:
                              description: VolumeConfig is used to specify volumes
                                that should be mounted on the pod.
                              properties:
                                volume:
                                  description: Volume.Name maps to .Values.gateways.<gateway-name>.<type>.<type-name>
                                    (type-name is configMapName or secretName) .configVolumes
                                    -> .configMapName = volume.name .secretVolumes
                                    -> .secretName = volume.name Only ConfigMap and
                                    Secret fields are supported
                                  properties:
                                    configMap:
                                      description: ConfigMap represents a configMap
                                        that should populate this volume
                                      properties:
                                        defaultMode:
                                          description: 'Optional: mode bits to use
                                            on created files by default. Must be a
                                            value between 0 and 0777. Defaults to
                                            0644. Directories within the path are
                                            not affected by this setting. This might
                                            be in conflict with other options that
                                            affect the file mode, like fsGroup, and
                                            the result can be other mode bits set.'
                                          format: int32
                                          type: integer
                                        items:
                                          description: If unspecified, each key-value
                                            pair in the Data field of the referenced
                                            ConfigMap will be projected into the volume
                                            as a file whose name is the key and content
                                            is the value. If specified, the listed
                                            keys will be projected into the specified
                                            paths, and unlisted keys will not be present.
                                            If a key is specified which is not present
                                            in the ConfigMap, the volume setup will
                                            error unless it is marked optional. Paths
                                            must be relative and may not contain the
                                            '..' path or start with '..'.
                                          items:
                                            description: Maps a string key to a path
                                              within a volume.
                                            properties:
                                              key:
                                                description: The key to project.
                                                type: string
                                              mode:
                                                description: 'Optional: mode bits
                                                  to use on this file, must be a value
                                                  between 0 and 0777. If not specified,
                                                  the volume defaultMode will be used.
                                                  This might be in conflict with other
                                                  options that affect the file mode,
                                                  like fsGroup, and the result can
                                                  be other mode bits set.'
                                                format: int32
                                                type: integer
                                              path:
                                                description: The relative path of
                                                  the file to map the key to. May
                                                  not be an absolute path. May not
                                                  contain the path element '..'. May
                                                  not start with the string '..'.
                                                type: string
                                            required:
                                            - key
                                            - path
                                            type: object
                                          type: array
                                        name:
                                          description: 'Name of the referent. More
                                            info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                            TODO: Add other useful fields. apiVersion,
                                            kind, uid?'
                                          type: string
                                        optional:
                                          description: Specify whether the ConfigMap
                                            or its keys must be defined
                                          type: boolean
                                      type: object
                                    name:
                                      description: 'Volume''s name. Must be a DNS_LABEL
                                        and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                                      type: string
                                    secret:
                                      description: 'Secret represents a secret that
                                        should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret'
                                      properties:
                                        defaultMode:
                                          description: 'Optional: mode bits to use
                                            on created files by default. Must be a
                                            value between 0 and 0777. Defaults to
                                            0644. Directories within the path are
                                            not affected by this setting. This might
                                            be in conflict with other options that
                                            affect the file mode, like fsGroup, and
                                            the result can be other mode bits set.'
                                          format: int32
                                          type: integer
                                        items:
                                          description: If unspecified, each key-value
                                            pair in the Data field of the referenced
                                            Secret will be projected into the volume
                                            as a file whose name is the key and content
                                            is the value. If specified, the listed
                                            keys will be projected into the specified
                                            paths, and unlisted keys will not be present.
                                            If a key is specified which is not present
                                            in the Secret, the volume setup will error
                                            unless it is marked optional. Paths must
                                            be relative and may not contain the '..'
                                            path or start with '..'.
                                          items:
                                            description: Maps a string key to a path
                                              within a volume.
                                            properties:
                                              key:
                                                description: The key to project.
                                                type: string
                                              mode:
                                                description: 'Optional: mode bits
                                                  to use on this file, must be a value
                                                  between 0 and 0777. If not specified,
                                                  the volume defaultMode will be used.
                                                  This might be in conflict with other
                                                  options that affect the file mode,
                                                  like fsGroup, and the result can
                                                  be other mode bits set.'
                                                format: int32
                                                type: integer
                                              path:
                                                description: The relative path of
                                                  the file to map the key to. May
                                                  not be an absolute path. May not
                                                  contain the path element '..'. May
                                                  not start with the string '..'.
                                                type: string
                                            required:
                                            - key
                                            - path
                                            type: object
                                          type: array
                                        optional:
                                          description: Specify whether the Secret
                                            or its keys must be defined
                                          type: boolean
                                        secretName:
                                          description: 'Name of the secret in the
                                            pod''s namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret'
                                          type: string
                                      type: object
                                  required:
                                  - name
                                  type: object
                                volumeMount:
                                  description: Mount.Name maps to .Values.gateways.<gateway-name>.<type>.name
                                    .configVolumes -> .name = mount.name, .mountPath
                                    = mount.mountPath .secretVolumes -> .name = mount.name,
                                    .mountPath = mount.mountPath Only Name and MountPath
                                    fields are supported
                                  properties:
                                    mountPath:
                                      description: Path within the container at which
                                        the volume should be mounted.  Must not contain
                                        ':'.
                                      type: string
                                    mountPropagation:
                                      description: mountPropagation determines how
                                        mounts are propagated from the host to container
                                        and the other way around. When not set, MountPropagationNone
                                        is used. This field is beta in 1.10.
                                      type: string
                                    name:
                                      description: This must match the Name of a Volume.
                                      type: string
                                    readOnly:
                                      description: Mounted read-only if true, read-write
                                        otherwise (false or unspecified). Defaults
                                        to false.
                                      type: boolean
                                    subPath:
                                      description: Path within the volume from which
                                        the container's volume should be mounted.
                                        Defaults to "" (volume's root).
                                      type: string
                                    subPathExpr:
                                      description: Expanded path within the volume
                                        from which the container's volume should be
                                        mounted. Behaves similarly to SubPath but
                                        environment variable references $(VAR_NAME)
                                        are expanded using the container's environment.
                                        Defaults to "" (volume's root). SubPathExpr
                                        and SubPath are mutually exclusive.
                                      type: string
                                  required:
                                  - mountPath
                                  - name
                                  type: object
                              type: object
                            type: array
                        type: object
                    type: object
                  multiCluster:
                    description: .Values.global.multiCluster.enabled, if not null
                    properties:
                      ingress:
                        description: '.Values.global.k8sIngress.enabled implies the
                          following: .Values.global.k8sIngress.gatewayName will match
                          the ingress gateway .Values.global.k8sIngress.enableHttps
                          will be true if gateway service exposes port 443 XXX: not
                          sure whether or not this is specific to multicluster, mesh
                          expansion, or both'
                        type: boolean
                      meshNetworks:
                        additionalProperties:
                          description: MeshNetworkConfig configures mesh networks
                            for a multi-cluster mesh.
                          properties:
                            endpoints:
                              items:
                                description: MeshEndpointConfig specifies the endpoint
                                  of a mesh network.  Only one of FromRegistry or
                                  FromCIDR may be specified
                                properties:
                                  fromCIDR:
                                    type: string
                                  fromRegistry:
                                    type: string
                                type: object
                              type: array
                            gateways:
                              items:
                                description: MeshGatewayConfig specifies the gateway
                                  which should be used for accessing the network
                                properties:
                                  address:
                                    type: string
                                  port:
                                    format: int32
                                    type: integer
                                  service:
                                    type: string
                                type: object
                              type: array
                          type: object
                        description: '.Values.global.meshNetworks XXX: if non-empty,
                          local cluster network should be configured as:  <spec.cluster.network>:      endpoints:      -
                          fromRegistry: <spec.cluster.name>      gateways:      -
                          service: <ingress-gateway-service-name>        port: 443
                          # mtls port'
                        type: object
                    type: object
                  name:
                    description: .Values.global.multiCluster.clusterName, defaults
                      to Kubernetes
                    type: string
                  network:
                    description: '.Values.global.network XXX: not sure what the difference
                      is between this and cluster name'
                    type: string
                type: object
              gateways:
                description: Gateways configures gateways for the mesh .Values.gateways.*
                properties:
                  additional:
                    additionalProperties:
                      description: 'GatewayConfig represents the configuration for
                        a gateway XXX: should standard istio secrets be configured
                        automatically, i.e. should the user be forced to add these
                        manually?'
                      properties:
                        enableSDS:
                          description: 'EnableSDS for the gateway. .Values.gateways.<gateway-name>.sds.enabled
                            XXX: I believe this is only applicable to ingress gateways'
                          type: boolean
                        enabled:
                          description: Enabled specifies whether or not this feature
                            is enabled
                          type: boolean
                        namespace:
                          description: 'Namespace is the namespace within which the
                            gateway will be installed, defaults to control plane namespace.
                            .Values.gateways.<gateway-name>.namespace XXX: for the
                            standard gateways, it might be possible that related resources
                            could be installed in control plane namespace instead
                            of the gateway namespace.  not sure if this is a problem
                            or not.'
                          type: string
                        requestedNetworkView:
                          description: 'RequestedNetworkView is a list of networks
                            whose services should be made available to the gateway.  This
                            is used primarily for mesh expansion/multi-cluster. .Values.gateways.<gateway-name>.env.ISTIO_META_REQUESTED_NETWORK_VIEW
                            env, defaults to empty list XXX: I think this is only
                            applicable to egress gateways'
                          items:
                            type: string
                          type: array
                        routerMode:
                          description: The router mode to be used by the gateway.
                            .Values.gateways.<gateway-name>.env.ISTIO_META_ROUTER_MODE,
                            defaults to sni-dnat
                          type: string
                        runtime:
                          description: Runtime is used to configure execution parameters
                            for the pod/containers e.g. resources, replicas, etc.
                          properties:
                            deployment:
                              description: Deployment specific overrides
                              properties:
                                autoScaling:
                                  description: Autoscaling specifies the configuration
                                    for a HorizontalPodAutoscaler to be applied to
                                    this deployment.  Null indicates no auto scaling.
                                    .Values.*.autoscale* fields
                                  properties:
                                    maxReplicas:
                                      description: upper limit for the number of pods
                                        that can be set by the autoscaler; cannot
                                        be smaller than MinReplicas.
                                      format: int32
                                      type: integer
                                    minReplicas:
                                      description: lower limit for the number of pods
                                        that can be set by the autoscaler, default
                                        1.
                                      format: int32
                                      type: integer
                                    targetCPUUtilizationPercentage:
                                      description: target average CPU utilization
                                        (represented as a percentage of requested
                                        CPU) over all the pods; if not specified the
                                        default autoscaling policy will be used.
                                      format: int32
                                      type: integer
                                  type: object
                                metadata:
                                  description: Metadata specifies additional labels
                                    and annotations to be applied to the deployment
                                  properties:
                                    annotations:
                                      additionalProperties:
                                        type: string
                                      type: object
                                    labels:
                                      additionalProperties:
                                        type: string
                                      type: object
                                  type: object
                                replicas:
                                  description: Number of desired pods. This is a pointer
                                    to distinguish between explicit zero and not specified.
                                    Defaults to 1. .Values.*.replicaCount
                                  format: int32
                                  type: integer
                                strategy:
                                  description: The deployment strategy to use to replace
                                    existing pods with new ones. .Values.*.rollingMaxSurge,
                                    rollingMaxUnavailable, etc.
                                  properties:
                                    rollingUpdate:
                                      description: 'Rolling update config params.
                                        Present only if DeploymentStrategyType = RollingUpdate.
                                        --- TODO: Update this to follow our convention
                                        for oneOf, whatever we decide it to be.'
                                      properties:
                                        maxSurge:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          description: 'The maximum number of pods
                                            that can be scheduled above the desired
                                            number of pods. Value can be an absolute
                                            number (ex: 5) or a percentage of desired
                                            pods (ex: 10%). This can not be 0 if MaxUnavailable
                                            is 0. Absolute number is calculated from
                                            percentage by rounding up. Defaults to
                                            25%. Example: when this is set to 30%,
                                            the new ReplicaSet can be scaled up immediately
                                            when the rolling update starts, such that
                                            the total number of old and new pods do
                                            not exceed 130% of desired pods. Once
                                            old pods have been killed, new ReplicaSet
                                            can be scaled up further, ensuring that
                                            total number of pods running at any time
                                            during the update is at most 130% of desired
                                            pods.'
                                          x-kubernetes-int-or-string: true
                                        maxUnavailable:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          description: 'The maximum number of pods
                                            that can be unavailable during the update.
                                            Value can be an absolute number (ex: 5)
                                            or a percentage of desired pods (ex: 10%).
                                            Absolute number is calculated from percentage
                                            by rounding down. This can not be 0 if
                                            MaxSurge is 0. Defaults to 25%. Example:
                                            when this is set to 30%, the old ReplicaSet
                                            can be scaled down to 70% of desired pods
                                            immediately when the rolling update starts.
                                            Once new pods are ready, old ReplicaSet
                                            can be scaled down further, followed by
                                            scaling up the new ReplicaSet, ensuring
                                            that the total number of pods available
                                            at all times during the update is at least
                                            70% of desired pods.'
                                          x-kubernetes-int-or-string: true
                                      type: object
                                    type:
                                      description: Type of deployment. Can be "Recreate"
                                        or "RollingUpdate". Default is RollingUpdate.
                                      type: string
                                  type: object
                              type: object
                            pod:
                              description: Pod specific overrides
                              properties:
                                affinity:
                                  description: If specified, the pod's scheduling
                                    constraints .Values.podAntiAffinityLabelSelector,
                                    podAntiAffinityTermLabelSelector, nodeSelector
                                    NodeAffinity is not supported at this time PodAffinity
                                    is not supported at this time
                                  properties:
                                    podAntiAffinity:
                                      description: PodAntiAffinity configures anti
                                        affinity for pod scheduling
                                      properties:
                                        preferredDuringScheduling:
                                          items:
                                            description: PodAntiAffinityTerm is a
                                              simplified version of corev1.PodAntiAffinityTerm
                                            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.
                                                  Valid operators are In, NotIn, Exists
                                                  and DoesNotExist.
                                                type: string
                                              topologyKey:
                                                description: This pod should be co-located
                                                  (affinity) or not co-located (anti-affinity)
                                                  with the pods matching the labelSelector
                                                  in the specified namespaces, where
                                                  co-located is defined as running
                                                  on a node whose value of the label
                                                  with key topologyKey matches that
                                                  of any node on which any of the
                                                  selected pods is running. Empty
                                                  topologyKey is not allowed.
                                                type: string
                                              values:
                                                description: values is an array of
                                                  string values. If the operator is
                                                  In or NotIn, the values array must
                                                  be non-empty. If the operator is
                                                  Exists or DoesNotExist, the values
                                                  array must be empty. This array
                                                  is replaced during a strategic merge
                                                  patch.
                                                items:
                                                  type: string
                                                type: array
                                            required:
                                            - key
                                            - operator
                                            type: object
                                          type: array
                                        requiredDuringScheduling:
                                          items:
                                            description: PodAntiAffinityTerm is a
                                              simplified version of corev1.PodAntiAffinityTerm
                                            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.
                                                  Valid operators are In, NotIn, Exists
                                                  and DoesNotExist.
                                                type: string
                                              topologyKey:
                                                description: This pod should be co-located
                                                  (affinity) or not co-located (anti-affinity)
                                                  with the pods matching the labelSelector
                                                  in the specified namespaces, where
                                                  co-located is defined as running
                                                  on a node whose value of the label
                                                  with key topologyKey matches that
                                                  of any node on which any of the
                                                  selected pods is running. Empty
                                                  topologyKey is not allowed.
                                                type: string
                                              values:
                                                description: values is an array of
                                                  string values. If the operator is
                                                  In or NotIn, the values array must
                                                  be non-empty. If the operator is
                                                  Exists or DoesNotExist, the values
                                                  array must be empty. This array
                                                  is replaced during a strategic merge
                                                  patch.
                                                items:
                                                  type: string
                                                type: array
                                            required:
                                            - key
                                            - operator
                                            type: object
                                          type: array
                                      type: object
                                  type: object
                                containers:
                                  additionalProperties:
                                    description: ContainerConfig to be applied to
                                      containers in a pod, in a deployment
                                    properties:
                                      image:
                                        type: string
                                      imagePullPolicy:
                                        description: PullPolicy describes a policy
                                          for if/when to pull a container image
                                        type: string
                                      imagePullSecrets:
                                        items:
                                          description: LocalObjectReference contains
                                            enough information to let you locate the
                                            referenced object inside the same namespace.
                                          properties:
                                            name:
                                              description: 'Name of the referent.
                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                                TODO: Add other useful fields. apiVersion,
                                                kind, uid?'
                                              type: string
                                          type: object
                                        type: array
                                      imageRegistry:
                                        type: string
                                      imageTag:
                                        type: string
                                      resources:
                                        description: ResourceRequirements describes
                                          the compute resource requirements.
                                        properties:
                                          limits:
                                            additionalProperties:
                                              anyOf:
                                              - type: integer
                                              - type: string
                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                              x-kubernetes-int-or-string: true
                                            description: 'Limits describes the maximum
                                              amount of compute resources allowed.
                                              More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                            type: object
                                          requests:
                                            additionalProperties:
                                              anyOf:
                                              - type: integer
                                              - type: string
                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                              x-kubernetes-int-or-string: true
                                            description: 'Requests describes the minimum
                                              amount of compute resources required.
                                              If Requests is omitted for a container,
                                              it defaults to Limits if that is explicitly
                                              specified, otherwise to an implementation-defined
                                              value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                            type: object
                                        type: object
                                    type: object
                                  description: 'XXX: is it too cheesy to use ''default''
                                    name for defaults?  default would apply to all
                                    containers .Values.*.resource, imagePullPolicy,
                                    etc.'
                                  type: object
                                metadata:
                                  description: 'Metadata allows additional annotations/labels
                                    to be applied to the pod .Values.*.podAnnotations
                                    XXX: currently, additional lables are not supported'
                                  properties:
                                    annotations:
                                      additionalProperties:
                                        type: string
                                      type: object
                                    labels:
                                      additionalProperties:
                                        type: string
                                      type: object
                                  type: object
                                nodeSelector:
                                  additionalProperties:
                                    type: string
                                  description: 'NodeSelector is a selector which must
                                    be true for the pod to fit on a node. Selector
                                    which must match a node''s labels for the pod
                                    to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                    .Values.nodeSelector'
                                  type: object
                                priorityClassName:
                                  description: '.Values.global.priorityClassName XXX:
                                    currently, this is only a global setting.  maybe
                                    only allow setting in global runtime defaults?'
                                  type: string
                                tolerations:
                                  description: If specified, the pod's tolerations.
                                    .Values.tolerations
                                  items:
                                    description: The pod this Toleration is attached
                                      to tolerates any taint that matches the triple
                                      <key,value,effect> using the matching operator
                                      <operator>.
                                    properties:
                                      effect:
                                        description: Effect indicates the taint effect
                                          to match. Empty means match all taint effects.
                                          When specified, allowed values are NoSchedule,
                                          PreferNoSchedule and NoExecute.
                                        type: string
                                      key:
                                        description: Key is the taint key that the
                                          toleration applies to. Empty means match
                                          all taint keys. If the key is empty, operator
                                          must be Exists; this combination means to
                                          match all values and all keys.
                                        type: string
                                      operator:
                                        description: Operator represents a key's relationship
                                          to the value. Valid operators are Exists
                                          and Equal. Defaults to Equal. Exists is
                                          equivalent to wildcard for value, so that
                                          a pod can tolerate all taints of a particular
                                          category.
                                        type: string
                                      tolerationSeconds:
                                        description: TolerationSeconds represents
                                          the period of time the toleration (which
                                          must be of effect NoExecute, otherwise this
                                          field is ignored) tolerates the taint. By
                                          default, it is not set, which means tolerate
                                          the taint forever (do not evict). Zero and
                                          negative values will be treated as 0 (evict
                                          immediately) by the system.
                                        format: int64
                                        type: integer
                                      value:
                                        description: Value is the taint value the
                                          toleration matches to. If the operator is
                                          Exists, the value should be empty, otherwise
                                          just a regular string.
                                        type: string
                                    type: object
                                  type: array
                              type: object
                          type: object
                        service:
                          description: 'Service configures the service associated
                            with the gateway, e.g. port mappings, service type, annotations/labels,
                            etc. .Values.gateways.<gateway-name>.ports, .Values.gateways.<gateway-name>.type,
                            .Values.gateways.<gateway-name>.loadBalancerIP, .Values.gateways.<gateway-name>.serviceAnnotations,
                            .Values.gateways.<gateway-name>.serviceLabels XXX: currently
                            there is no distinction between labels and serviceLabels'
                          properties:
                            clusterIP:
                              description: 'clusterIP is the IP address of the service
                                and is usually assigned randomly by the master. If
                                an address is specified manually and is not in use
                                by others, it will be allocated to the service; otherwise,
                                creation of the service will fail. This field can
                                not be changed through updates. Valid values are "None",
                                empty string (""), or a valid IP address. "None" can
                                be specified for headless services when proxying is
                                not required. Only applies to types ClusterIP, NodePort,
                                and LoadBalancer. Ignored if type is ExternalName.
                                More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                              type: string
                            externalIPs:
                              description: externalIPs is a list of IP addresses for
                                which nodes in the cluster will also accept traffic
                                for this service.  These IPs are not managed by Kubernetes.  The
                                user is responsible for ensuring that traffic arrives
                                at a node with this IP.  A common example is external
                                load-balancers that are not part of the Kubernetes
                                system.
                              items:
                                type: string
                              type: array
                            externalName:
                              description: externalName is the external reference
                                that kubedns or equivalent will return as a CNAME
                                record for this service. No proxying will be involved.
                                Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123)
                                and requires Type to be ExternalName.
                              type: string
                            externalTrafficPolicy:
                              description: externalTrafficPolicy denotes if this Service
                                desires to route external traffic to node-local or
                                cluster-wide endpoints. "Local" preserves the client
                                source IP and avoids a second hop for LoadBalancer
                                and Nodeport type services, but risks potentially
                                imbalanced traffic spreading. "Cluster" obscures the
                                client source IP and may cause a second hop to another
                                node, but should have good overall load-spreading.
                              type: string
                            healthCheckNodePort:
                              description: healthCheckNodePort specifies the healthcheck
                                nodePort for the service. If not specified, HealthCheckNodePort
                                is created by the service api backend with the allocated
                                nodePort. Will use user-specified nodePort value if
                                specified by the client. Only effects when Type is
                                set to LoadBalancer and ExternalTrafficPolicy is set
                                to Local.
                              format: int32
                              type: integer
                            ipFamily:
                              description: ipFamily specifies whether this Service
                                has a preference for a particular IP family (e.g.
                                IPv4 vs. IPv6).  If a specific IP family is requested,
                                the clusterIP field will be allocated from that family,
                                if it is available in the cluster.  If no IP family
                                is requested, the cluster's primary IP family will
                                be used. Other IP fields (loadBalancerIP, loadBalancerSourceRanges,
                                externalIPs) and controllers which allocate external
                                load-balancers should use the same IP family.  Endpoints
                                for this Service will be of this family.  This field
                                is immutable after creation. Assigning a ServiceIPFamily
                                not available in the cluster (e.g. IPv6 in IPv4 only
                                cluster) is an error condition and will fail during
                                clusterIP assignment.
                              type: string
                            loadBalancerIP:
                              description: 'Only applies to Service Type: LoadBalancer
                                LoadBalancer will get created with the IP specified
                                in this field. This feature depends on whether the
                                underlying cloud-provider supports specifying the
                                loadBalancerIP when a load balancer is created. This
                                field will be ignored if the cloud-provider does not
                                support the feature.'
                              type: string
                            loadBalancerSourceRanges:
                              description: 'If specified and supported by the platform,
                                this will restrict traffic through the cloud-provider
                                load-balancer will be restricted to the specified
                                client IPs. This field will be ignored if the cloud-provider
                                does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/'
                              items:
                                type: string
                              type: array
                            metadata:
                              description: metadata to be applied to the gateway's
                                service (annotations and labels)
                              properties:
                                annotations:
                                  additionalProperties:
                                    type: string
                                  type: object
                                labels:
                                  additionalProperties:
                                    type: string
                                  type: object
                              type: object
                            ports:
                              description: 'The list of ports that are exposed by
                                this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                              items:
                                description: ServicePort contains information on service's
                                  port.
                                properties:
                                  appProtocol:
                                    description: The application protocol for this
                                      port. This field follows standard Kubernetes
                                      label syntax. Un-prefixed names are reserved
                                      for IANA standard service names (as per RFC-6335
                                      and http://www.iana.org/assignments/service-names).
                                      Non-standard protocols should use prefixed names
                                      such as mycompany.com/my-custom-protocol. Field
                                      can be enabled with ServiceAppProtocol feature
                                      gate.
                                    type: string
                                  name:
                                    description: The name of this port within the
                                      service. This must be a DNS_LABEL. All ports
                                      within a ServiceSpec must have unique names.
                                      When considering the endpoints for a Service,
                                      this must match the 'name' field in the EndpointPort.
                                      Optional if only one ServicePort is defined
                                      on this service.
                                    type: string
                                  nodePort:
                                    description: 'The port on each node on which this
                                      service is exposed when type=NodePort or LoadBalancer.
                                      Usually assigned by the system. If specified,
                                      it will be allocated to the service if unused
                                      or else creation of the service will fail. Default
                                      is to auto-allocate a port if the ServiceType
                                      of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport'
                                    format: int32
                                    type: integer
                                  port:
                                    description: The port that will be exposed by
                                      this service.
                                    format: int32
                                    type: integer
                                  protocol:
                                    description: The IP protocol for this port. Supports
                                      "TCP", "UDP", and "SCTP". Default is TCP.
                                    type: string
                                  targetPort:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    description: 'Number or name of the port to access
                                      on the pods targeted by the service. Number
                                      must be in the range 1 to 65535. Name must be
                                      an IANA_SVC_NAME. If this is a string, it will
                                      be looked up as a named port in the target Pod''s
                                      container ports. If this is not specified, the
                                      value of the ''port'' field is used (an identity
                                      map). This field is ignored for services with
                                      clusterIP=None, and should be omitted or set
                                      equal to the ''port'' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service'
                                    x-kubernetes-int-or-string: true
                                required:
                                - port
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - port
                              - protocol
                              x-kubernetes-list-type: map
                            publishNotReadyAddresses:
                              description: publishNotReadyAddresses, when set to true,
                                indicates that DNS implementations must publish the
                                notReadyAddresses of subsets for the Endpoints associated
                                with the Service. The default value is false. The
                                primary use case for setting this field is to use
                                a StatefulSet's Headless Service to propagate SRV
                                records for its Pods without respect to their readiness
                                for purpose of peer discovery.
                              type: boolean
                            selector:
                              additionalProperties:
                                type: string
                              description: 'Route service traffic to pods with label
                                keys and values matching this selector. If empty or
                                not present, the service is assumed to have an external
                                process managing its endpoints, which Kubernetes will
                                not modify. Only applies to types ClusterIP, NodePort,
                                and LoadBalancer. Ignored if type is ExternalName.
                                More info: https://kubernetes.io/docs/concepts/services-networking/service/'
                              type: object
                            sessionAffinity:
                              description: 'Supports "ClientIP" and "None". Used to
                                maintain session affinity. Enable client IP based
                                session affinity. Must be ClientIP or None. Defaults
                                to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                              type: string
                            sessionAffinityConfig:
                              description: sessionAffinityConfig contains the configurations
                                of session affinity.
                              properties:
                                clientIP:
                                  description: clientIP contains the configurations
                                    of Client IP based session affinity.
                                  properties:
                                    timeoutSeconds:
                                      description: timeoutSeconds specifies the seconds
                                        of ClientIP type session sticky time. The
                                        value must be >0 && <=86400(for 1 day) if
                                        ServiceAffinity == "ClientIP". Default value
                                        is 10800(for 3 hours).
                                      format: int32
                                      type: integer
                                  type: object
                              type: object
                            topologyKeys:
                              description: topologyKeys is a preference-order list
                                of topology keys which implementations of services
                                should use to preferentially sort endpoints when accessing
                                this Service, it can not be used at the same time
                                as externalTrafficPolicy=Local. Topology keys must
                                be valid label keys and at most 16 keys may be specified.
                                Endpoints are chosen based on the first topology key
                                with available backends. If this field is specified
                                and all entries have no backends that match the topology
                                of the client, the service has no backends for that
                                client and connections should fail. The special value
                                "*" may be used to mean "any topology". This catch-all
                                value, if used, only makes sense as the last value
                                in the list. If this is not specified or empty, no
                                topology constraints will be applied.
                              items:
                                type: string
                              type: array
                            type:
                              description: 'type determines how the Service is exposed.
                                Defaults to ClusterIP. Valid options are ExternalName,
                                ClusterIP, NodePort, and LoadBalancer. "ExternalName"
                                maps to the specified externalName. "ClusterIP" allocates
                                a cluster-internal IP address for load-balancing to
                                endpoints. Endpoints are determined by the selector
                                or if that is not specified, by manual construction
                                of an Endpoints object. If clusterIP is "None", no
                                virtual IP is allocated and the endpoints are published
                                as a set of endpoints rather than a stable IP. "NodePort"
                                builds on ClusterIP and allocates a port on every
                                node which routes to the clusterIP. "LoadBalancer"
                                builds on NodePort and creates an external load-balancer
                                (if supported in the current cloud) which routes to
                                the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types'
                              type: string
                          type: object
                        volumes:
                          description: Volumes is used to configure additional Secret
                            and ConfigMap volumes that should be mounted for the gateway's
                            pod. .Values.gateways.<gateway-name>.secretVolumes, .Values.gateways.<gateway-name>.configMapVolumes
                          items:
                            description: VolumeConfig is used to specify volumes that
                              should be mounted on the pod.
                            properties:
                              volume:
                                description: Volume.Name maps to .Values.gateways.<gateway-name>.<type>.<type-name>
                                  (type-name is configMapName or secretName) .configVolumes
                                  -> .configMapName = volume.name .secretVolumes ->
                                  .secretName = volume.name Only ConfigMap and Secret
                                  fields are supported
                                properties:
                                  configMap:
                                    description: ConfigMap represents a configMap
                                      that should populate this volume
                                    properties:
                                      defaultMode:
                                        description: 'Optional: mode bits to use on
                                          created files by default. Must be a value
                                          between 0 and 0777. Defaults to 0644. Directories
                                          within the path are not affected by this
                                          setting. This might be in conflict with
                                          other options that affect the file mode,
                                          like fsGroup, and the result can be other
                                          mode bits set.'
                                        format: int32
                                        type: integer
                                      items:
                                        description: If unspecified, each key-value
                                          pair in the Data field of the referenced
                                          ConfigMap will be projected into the volume
                                          as a file whose name is the key and content
                                          is the value. If specified, the listed keys
                                          will be projected into the specified paths,
                                          and unlisted keys will not be present. If
                                          a key is specified which is not present
                                          in the ConfigMap, the volume setup will
                                          error unless it is marked optional. Paths
                                          must be relative and may not contain the
                                          '..' path or start with '..'.
                                        items:
                                          description: Maps a string key to a path
                                            within a volume.
                                          properties:
                                            key:
                                              description: The key to project.
                                              type: string
                                            mode:
                                              description: 'Optional: mode bits to
                                                use on this file, must be a value
                                                between 0 and 0777. If not specified,
                                                the volume defaultMode will be used.
                                                This might be in conflict with other
                                                options that affect the file mode,
                                                like fsGroup, and the result can be
                                                other mode bits set.'
                                              format: int32
                                              type: integer
                                            path:
                                              description: The relative path of the
                                                file to map the key to. May not be
                                                an absolute path. May not contain
                                                the path element '..'. May not start
                                                with the string '..'.
                                              type: string
                                          required:
                                          - key
                                          - path
                                          type: object
                                        type: array
                                      name:
                                        description: 'Name of the referent. More info:
                                          https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                          TODO: Add other useful fields. apiVersion,
                                          kind, uid?'
                                        type: string
                                      optional:
                                        description: Specify whether the ConfigMap
                                          or its keys must be defined
                                        type: boolean
                                    type: object
                                  name:
                                    description: 'Volume''s name. Must be a DNS_LABEL
                                      and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                                    type: string
                                  secret:
                                    description: 'Secret represents a secret that
                                      should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret'
                                    properties:
                                      defaultMode:
                                        description: 'Optional: mode bits to use on
                                          created files by default. Must be a value
                                          between 0 and 0777. Defaults to 0644. Directories
                                          within the path are not affected by this
                                          setting. This might be in conflict with
                                          other options that affect the file mode,
                                          like fsGroup, and the result can be other
                                          mode bits set.'
                                        format: int32
                                        type: integer
                                      items:
                                        description: If unspecified, each key-value
                                          pair in the Data field of the referenced
                                          Secret will be projected into the volume
                                          as a file whose name is the key and content
                                          is the value. If specified, the listed keys
                                          will be projected into the specified paths,
                                          and unlisted keys will not be present. If
                                          a key is specified which is not present
                                          in the Secret, the volume setup will error
                                          unless it is marked optional. Paths must
                                          be relative and may not contain the '..'
                                          path or start with '..'.
                                        items:
                                          description: Maps a string key to a path
                                            within a volume.
                                          properties:
                                            key:
                                              description: The key to project.
                                              type: string
                                            mode:
                                              description: 'Optional: mode bits to
                                                use on this file, must be a value
                                                between 0 and 0777. If not specified,
                                                the volume defaultMode will be used.
                                                This might be in conflict with other
                                                options that affect the file mode,
                                                like fsGroup, and the result can be
                                                other mode bits set.'
                                              format: int32
                                              type: integer
                                            path:
                                              description: The relative path of the
                                                file to map the key to. May not be
                                                an absolute path. May not contain
                                                the path element '..'. May not start
                                                with the string '..'.
                                              type: string
                                          required:
                                          - key
                                          - path
                                          type: object
                                        type: array
                                      optional:
                                        description: Specify whether the Secret or
                                          its keys must be defined
                                        type: boolean
                                      secretName:
                                        description: 'Name of the secret in the pod''s
                                          namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret'
                                        type: string
                                    type: object
                                required:
                                - name
                                type: object
                              volumeMount:
                                description: Mount.Name maps to .Values.gateways.<gateway-name>.<type>.name
                                  .configVolumes -> .name = mount.name, .mountPath
                                  = mount.mountPath .secretVolumes -> .name = mount.name,
                                  .mountPath = mount.mountPath Only Name and MountPath
                                  fields are supported
                                properties:
                                  mountPath:
                                    description: Path within the container at which
                                      the volume should be mounted.  Must not contain
                                      ':'.
                                    type: string
                                  mountPropagation:
                                    description: mountPropagation determines how mounts
                                      are propagated from the host to container and
                                      the other way around. When not set, MountPropagationNone
                                      is used. This field is beta in 1.10.
                                    type: string
                                  name:
                                    description: This must match the Name of a Volume.
                                    type: string
                                  readOnly:
                                    description: Mounted read-only if true, read-write
                                      otherwise (false or unspecified). Defaults to
                                      false.
                                    type: boolean
                                  subPath:
                                    description: Path within the volume from which
                                      the container's volume should be mounted. Defaults
                                      to "" (volume's root).
                                    type: string
                                  subPathExpr:
                                    description: Expanded path within the volume from
                                      which the container's volume should be mounted.
                                      Behaves similarly to SubPath but environment
                                      variable references $(VAR_NAME) are expanded
                                      using the container's environment. Defaults
                                      to "" (volume's root). SubPathExpr and SubPath
                                      are mutually exclusive.
                                    type: string
                                required:
                                - mountPath
                                - name
                                type: object
                            type: object
                          type: array
                      type: object
                    description: Other user defined gateways .Values.gateways.<key>
                    type: object
                  egress:
                    description: Egress configures the egress gateway for the mesh.
                      .Values.gateways.istio-egressgateway
                    properties:
                      enableSDS:
                        description: 'EnableSDS for the gateway. .Values.gateways.<gateway-name>.sds.enabled
                          XXX: I believe this is only applicable to ingress gateways'
                        type: boolean
                      enabled:
                        description: Enabled specifies whether or not this feature
                          is enabled
                        type: boolean
                      namespace:
                        description: 'Namespace is the namespace within which the
                          gateway will be installed, defaults to control plane namespace.
                          .Values.gateways.<gateway-name>.namespace XXX: for the standard
                          gateways, it might be possible that related resources could
                          be installed in control plane namespace instead of the gateway
                          namespace.  not sure if this is a problem or not.'
                        type: string
                      requestedNetworkView:
                        description: 'RequestedNetworkView is a list of networks whose
                          services should be made available to the gateway.  This
                          is used primarily for mesh expansion/multi-cluster. .Values.gateways.<gateway-name>.env.ISTIO_META_REQUESTED_NETWORK_VIEW
                          env, defaults to empty list XXX: I think this is only applicable
                          to egress gateways'
                        items:
                          type: string
                        type: array
                      routerMode:
                        description: The router mode to be used by the gateway. .Values.gateways.<gateway-name>.env.ISTIO_META_ROUTER_MODE,
                          defaults to sni-dnat
                        type: string
                      runtime:
                        description: Runtime is used to configure execution parameters
                          for the pod/containers e.g. resources, replicas, etc.
                        properties:
                          deployment:
                            description: Deployment specific overrides
                            properties:
                              autoScaling:
                                description: Autoscaling specifies the configuration
                                  for a HorizontalPodAutoscaler to be applied to this
                                  deployment.  Null indicates no auto scaling. .Values.*.autoscale*
                                  fields
                                properties:
                                  maxReplicas:
                                    description: upper limit for the number of pods
                                      that can be set by the autoscaler; cannot be
                                      smaller than MinReplicas.
                                    format: int32
                                    type: integer
                                  minReplicas:
                                    description: lower limit for the number of pods
                                      that can be set by the autoscaler, default 1.
                                    format: int32
                                    type: integer
                                  targetCPUUtilizationPercentage:
                                    description: target average CPU utilization (represented
                                      as a percentage of requested CPU) over all the
                                      pods; if not specified the default autoscaling
                                      policy will be used.
                                    format: int32
                                    type: integer
                                type: object
                              metadata:
                                description: Metadata specifies additional labels
                                  and annotations to be applied to the deployment
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                type: object
                              replicas:
                                description: Number of desired pods. This is a pointer
                                  to distinguish between explicit zero and not specified.
                                  Defaults to 1. .Values.*.replicaCount
                                format: int32
                                type: integer
                              strategy:
                                description: The deployment strategy to use to replace
                                  existing pods with new ones. .Values.*.rollingMaxSurge,
                                  rollingMaxUnavailable, etc.
                                properties:
                                  rollingUpdate:
                                    description: 'Rolling update config params. Present
                                      only if DeploymentStrategyType = RollingUpdate.
                                      --- TODO: Update this to follow our convention
                                      for oneOf, whatever we decide it to be.'
                                    properties:
                                      maxSurge:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        description: 'The maximum number of pods that
                                          can be scheduled above the desired number
                                          of pods. Value can be an absolute number
                                          (ex: 5) or a percentage of desired pods
                                          (ex: 10%). This can not be 0 if MaxUnavailable
                                          is 0. Absolute number is calculated from
                                          percentage by rounding up. Defaults to 25%.
                                          Example: when this is set to 30%, the new
                                          ReplicaSet can be scaled up immediately
                                          when the rolling update starts, such that
                                          the total number of old and new pods do
                                          not exceed 130% of desired pods. Once old
                                          pods have been killed, new ReplicaSet can
                                          be scaled up further, ensuring that total
                                          number of pods running at any time during
                                          the update is at most 130% of desired pods.'
                                        x-kubernetes-int-or-string: true
                                      maxUnavailable:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        description: 'The maximum number of pods that
                                          can be unavailable during the update. Value
                                          can be an absolute number (ex: 5) or a percentage
                                          of desired pods (ex: 10%). Absolute number
                                          is calculated from percentage by rounding
                                          down. This can not be 0 if MaxSurge is 0.
                                          Defaults to 25%. Example: when this is set
                                          to 30%, the old ReplicaSet can be scaled
                                          down to 70% of desired pods immediately
                                          when the rolling update starts. Once new
                                          pods are ready, old ReplicaSet can be scaled
                                          down further, followed by scaling up the
                                          new ReplicaSet, ensuring that the total
                                          number of pods available at all times during
                                          the update is at least 70% of desired pods.'
                                        x-kubernetes-int-or-string: true
                                    type: object
                                  type:
                                    description: Type of deployment. Can be "Recreate"
                                      or "RollingUpdate". Default is RollingUpdate.
                                    type: string
                                type: object
                            type: object
                          pod:
                            description: Pod specific overrides
                            properties:
                              affinity:
                                description: If specified, the pod's scheduling constraints
                                  .Values.podAntiAffinityLabelSelector, podAntiAffinityTermLabelSelector,
                                  nodeSelector NodeAffinity is not supported at this
                                  time PodAffinity is not supported at this time
                                properties:
                                  podAntiAffinity:
                                    description: PodAntiAffinity configures anti affinity
                                      for pod scheduling
                                    properties:
                                      preferredDuringScheduling:
                                        items:
                                          description: PodAntiAffinityTerm is a simplified
                                            version of corev1.PodAntiAffinityTerm
                                          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. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            topologyKey:
                                              description: This pod should be co-located
                                                (affinity) or not co-located (anti-affinity)
                                                with the pods matching the labelSelector
                                                in the specified namespaces, where
                                                co-located is defined as running on
                                                a node whose value of the label with
                                                key topologyKey matches that of any
                                                node on which any of the selected
                                                pods is running. Empty topologyKey
                                                is not allowed.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      requiredDuringScheduling:
                                        items:
                                          description: PodAntiAffinityTerm is a simplified
                                            version of corev1.PodAntiAffinityTerm
                                          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. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            topologyKey:
                                              description: This pod should be co-located
                                                (affinity) or not co-located (anti-affinity)
                                                with the pods matching the labelSelector
                                                in the specified namespaces, where
                                                co-located is defined as running on
                                                a node whose value of the label with
                                                key topologyKey matches that of any
                                                node on which any of the selected
                                                pods is running. Empty topologyKey
                                                is not allowed.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                    type: object
                                type: object
                              containers:
                                additionalProperties:
                                  description: ContainerConfig to be applied to containers
                                    in a pod, in a deployment
                                  properties:
                                    image:
                                      type: string
                                    imagePullPolicy:
                                      description: PullPolicy describes a policy for
                                        if/when to pull a container image
                                      type: string
                                    imagePullSecrets:
                                      items:
                                        description: LocalObjectReference contains
                                          enough information to let you locate the
                                          referenced object inside the same namespace.
                                        properties:
                                          name:
                                            description: 'Name of the referent. More
                                              info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                              TODO: Add other useful fields. apiVersion,
                                              kind, uid?'
                                            type: string
                                        type: object
                                      type: array
                                    imageRegistry:
                                      type: string
                                    imageTag:
                                      type: string
                                    resources:
                                      description: ResourceRequirements describes
                                        the compute resource requirements.
                                      properties:
                                        limits:
                                          additionalProperties:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          description: 'Limits describes the maximum
                                            amount of compute resources allowed. More
                                            info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                          type: object
                                        requests:
                                          additionalProperties:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          description: 'Requests describes the minimum
                                            amount of compute resources required.
                                            If Requests is omitted for a container,
                                            it defaults to Limits if that is explicitly
                                            specified, otherwise to an implementation-defined
                                            value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                          type: object
                                      type: object
                                  type: object
                                description: 'XXX: is it too cheesy to use ''default''
                                  name for defaults?  default would apply to all containers
                                  .Values.*.resource, imagePullPolicy, etc.'
                                type: object
                              metadata:
                                description: 'Metadata allows additional annotations/labels
                                  to be applied to the pod .Values.*.podAnnotations
                                  XXX: currently, additional lables are not supported'
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                type: object
                              nodeSelector:
                                additionalProperties:
                                  type: string
                                description: 'NodeSelector is a selector which must
                                  be true for the pod to fit on a node. Selector which
                                  must match a node''s labels for the pod to be scheduled
                                  on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                  .Values.nodeSelector'
                                type: object
                              priorityClassName:
                                description: '.Values.global.priorityClassName XXX:
                                  currently, this is only a global setting.  maybe
                                  only allow setting in global runtime defaults?'
                                type: string
                              tolerations:
                                description: If specified, the pod's tolerations.
                                  .Values.tolerations
                                items:
                                  description: The pod this Toleration is attached
                                    to tolerates any taint that matches the triple
                                    <key,value,effect> using the matching operator
                                    <operator>.
                                  properties:
                                    effect:
                                      description: Effect indicates the taint effect
                                        to match. Empty means match all taint effects.
                                        When specified, allowed values are NoSchedule,
                                        PreferNoSchedule and NoExecute.
                                      type: string
                                    key:
                                      description: Key is the taint key that the toleration
                                        applies to. Empty means match all taint keys.
                                        If the key is empty, operator must be Exists;
                                        this combination means to match all values
                                        and all keys.
                                      type: string
                                    operator:
                                      description: Operator represents a key's relationship
                                        to the value. Valid operators are Exists and
                                        Equal. Defaults to Equal. Exists is equivalent
                                        to wildcard for value, so that a pod can tolerate
                                        all taints of a particular category.
                                      type: string
                                    tolerationSeconds:
                                      description: TolerationSeconds represents the
                                        period of time the toleration (which must
                                        be of effect NoExecute, otherwise this field
                                        is ignored) tolerates the taint. By default,
                                        it is not set, which means tolerate the taint
                                        forever (do not evict). Zero and negative
                                        values will be treated as 0 (evict immediately)
                                        by the system.
                                      format: int64
                                      type: integer
                                    value:
                                      description: Value is the taint value the toleration
                                        matches to. If the operator is Exists, the
                                        value should be empty, otherwise just a regular
                                        string.
                                      type: string
                                  type: object
                                type: array
                            type: object
                        type: object
                      service:
                        description: 'Service configures the service associated with
                          the gateway, e.g. port mappings, service type, annotations/labels,
                          etc. .Values.gateways.<gateway-name>.ports, .Values.gateways.<gateway-name>.type,
                          .Values.gateways.<gateway-name>.loadBalancerIP, .Values.gateways.<gateway-name>.serviceAnnotations,
                          .Values.gateways.<gateway-name>.serviceLabels XXX: currently
                          there is no distinction between labels and serviceLabels'
                        properties:
                          clusterIP:
                            description: 'clusterIP is the IP address of the service
                              and is usually assigned randomly by the master. If an
                              address is specified manually and is not in use by others,
                              it will be allocated to the service; otherwise, creation
                              of the service will fail. This field can not be changed
                              through updates. Valid values are "None", empty string
                              (""), or a valid IP address. "None" can be specified
                              for headless services when proxying is not required.
                              Only applies to types ClusterIP, NodePort, and LoadBalancer.
                              Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                            type: string
                          externalIPs:
                            description: externalIPs is a list of IP addresses for
                              which nodes in the cluster will also accept traffic
                              for this service.  These IPs are not managed by Kubernetes.  The
                              user is responsible for ensuring that traffic arrives
                              at a node with this IP.  A common example is external
                              load-balancers that are not part of the Kubernetes system.
                            items:
                              type: string
                            type: array
                          externalName:
                            description: externalName is the external reference that
                              kubedns or equivalent will return as a CNAME record
                              for this service. No proxying will be involved. Must
                              be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123)
                              and requires Type to be ExternalName.
                            type: string
                          externalTrafficPolicy:
                            description: externalTrafficPolicy denotes if this Service
                              desires to route external traffic to node-local or cluster-wide
                              endpoints. "Local" preserves the client source IP and
                              avoids a second hop for LoadBalancer and Nodeport type
                              services, but risks potentially imbalanced traffic spreading.
                              "Cluster" obscures the client source IP and may cause
                              a second hop to another node, but should have good overall
                              load-spreading.
                            type: string
                          healthCheckNodePort:
                            description: healthCheckNodePort specifies the healthcheck
                              nodePort for the service. If not specified, HealthCheckNodePort
                              is created by the service api backend with the allocated
                              nodePort. Will use user-specified nodePort value if
                              specified by the client. Only effects when Type is set
                              to LoadBalancer and ExternalTrafficPolicy is set to
                              Local.
                            format: int32
                            type: integer
                          ipFamily:
                            description: ipFamily specifies whether this Service has
                              a preference for a particular IP family (e.g. IPv4 vs.
                              IPv6).  If a specific IP family is requested, the clusterIP
                              field will be allocated from that family, if it is available
                              in the cluster.  If no IP family is requested, the cluster's
                              primary IP family will be used. Other IP fields (loadBalancerIP,
                              loadBalancerSourceRanges, externalIPs) and controllers
                              which allocate external load-balancers should use the
                              same IP family.  Endpoints for this Service will be
                              of this family.  This field is immutable after creation.
                              Assigning a ServiceIPFamily not available in the cluster
                              (e.g. IPv6 in IPv4 only cluster) is an error condition
                              and will fail during clusterIP assignment.
                            type: string
                          loadBalancerIP:
                            description: 'Only applies to Service Type: LoadBalancer
                              LoadBalancer will get created with the IP specified
                              in this field. This feature depends on whether the underlying
                              cloud-provider supports specifying the loadBalancerIP
                              when a load balancer is created. This field will be
                              ignored if the cloud-provider does not support the feature.'
                            type: string
                          loadBalancerSourceRanges:
                            description: 'If specified and supported by the platform,
                              this will restrict traffic through the cloud-provider
                              load-balancer will be restricted to the specified client
                              IPs. This field will be ignored if the cloud-provider
                              does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/'
                            items:
                              type: string
                            type: array
                          metadata:
                            description: metadata to be applied to the gateway's service
                              (annotations and labels)
                            properties:
                              annotations:
                                additionalProperties:
                                  type: string
                                type: object
                              labels:
                                additionalProperties:
                                  type: string
                                type: object
                            type: object
                          ports:
                            description: 'The list of ports that are exposed by this
                              service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                            items:
                              description: ServicePort contains information on service's
                                port.
                              properties:
                                appProtocol:
                                  description: The application protocol for this port.
                                    This field follows standard Kubernetes label syntax.
                                    Un-prefixed names are reserved for IANA standard
                                    service names (as per RFC-6335 and http://www.iana.org/assignments/service-names).
                                    Non-standard protocols should use prefixed names
                                    such as mycompany.com/my-custom-protocol. Field
                                    can be enabled with ServiceAppProtocol feature
                                    gate.
                                  type: string
                                name:
                                  description: The name of this port within the service.
                                    This must be a DNS_LABEL. All ports within a ServiceSpec
                                    must have unique names. When considering the endpoints
                                    for a Service, this must match the 'name' field
                                    in the EndpointPort. Optional if only one ServicePort
                                    is defined on this service.
                                  type: string
                                nodePort:
                                  description: 'The port on each node on which this
                                    service is exposed when type=NodePort or LoadBalancer.
                                    Usually assigned by the system. If specified,
                                    it will be allocated to the service if unused
                                    or else creation of the service will fail. Default
                                    is to auto-allocate a port if the ServiceType
                                    of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport'
                                  format: int32
                                  type: integer
                                port:
                                  description: The port that will be exposed by this
                                    service.
                                  format: int32
                                  type: integer
                                protocol:
                                  description: The IP protocol for this port. Supports
                                    "TCP", "UDP", and "SCTP". Default is TCP.
                                  type: string
                                targetPort:
                                  anyOf:
                                  - type: integer
                                  - type: string
                                  description: 'Number or name of the port to access
                                    on the pods targeted by the service. Number must
                                    be in the range 1 to 65535. Name must be an IANA_SVC_NAME.
                                    If this is a string, it will be looked up as a
                                    named port in the target Pod''s container ports.
                                    If this is not specified, the value of the ''port''
                                    field is used (an identity map). This field is
                                    ignored for services with clusterIP=None, and
                                    should be omitted or set equal to the ''port''
                                    field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service'
                                  x-kubernetes-int-or-string: true
                              required:
                              - port
                              type: object
                            type: array
                            x-kubernetes-list-map-keys:
                            - port
                            - protocol
                            x-kubernetes-list-type: map
                          publishNotReadyAddresses:
                            description: publishNotReadyAddresses, when set to true,
                              indicates that DNS implementations must publish the
                              notReadyAddresses of subsets for the Endpoints associated
                              with the Service. The default value is false. The primary
                              use case for setting this field is to use a StatefulSet's
                              Headless Service to propagate SRV records for its Pods
                              without respect to their readiness for purpose of peer
                              discovery.
                            type: boolean
                          selector:
                            additionalProperties:
                              type: string
                            description: 'Route service traffic to pods with label
                              keys and values matching this selector. If empty or
                              not present, the service is assumed to have an external
                              process managing its endpoints, which Kubernetes will
                              not modify. Only applies to types ClusterIP, NodePort,
                              and LoadBalancer. Ignored if type is ExternalName. More
                              info: https://kubernetes.io/docs/concepts/services-networking/service/'
                            type: object
                          sessionAffinity:
                            description: 'Supports "ClientIP" and "None". Used to
                              maintain session affinity. Enable client IP based session
                              affinity. Must be ClientIP or None. Defaults to None.
                              More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                            type: string
                          sessionAffinityConfig:
                            description: sessionAffinityConfig contains the configurations
                              of session affinity.
                            properties:
                              clientIP:
                                description: clientIP contains the configurations
                                  of Client IP based session affinity.
                                properties:
                                  timeoutSeconds:
                                    description: timeoutSeconds specifies the seconds
                                      of ClientIP type session sticky time. The value
                                      must be >0 && <=86400(for 1 day) if ServiceAffinity
                                      == "ClientIP". Default value is 10800(for 3
                                      hours).
                                    format: int32
                                    type: integer
                                type: object
                            type: object
                          topologyKeys:
                            description: topologyKeys is a preference-order list of
                              topology keys which implementations of services should
                              use to preferentially sort endpoints when accessing
                              this Service, it can not be used at the same time as
                              externalTrafficPolicy=Local. Topology keys must be valid
                              label keys and at most 16 keys may be specified. Endpoints
                              are chosen based on the first topology key with available
                              backends. If this field is specified and all entries
                              have no backends that match the topology of the client,
                              the service has no backends for that client and connections
                              should fail. The special value "*" may be used to mean
                              "any topology". This catch-all value, if used, only
                              makes sense as the last value in the list. If this is
                              not specified or empty, no topology constraints will
                              be applied.
                            items:
                              type: string
                            type: array
                          type:
                            description: 'type determines how the Service is exposed.
                              Defaults to ClusterIP. Valid options are ExternalName,
                              ClusterIP, NodePort, and LoadBalancer. "ExternalName"
                              maps to the specified externalName. "ClusterIP" allocates
                              a cluster-internal IP address for load-balancing to
                              endpoints. Endpoints are determined by the selector
                              or if that is not specified, by manual construction
                              of an Endpoints object. If clusterIP is "None", no virtual
                              IP is allocated and the endpoints are published as a
                              set of endpoints rather than a stable IP. "NodePort"
                              builds on ClusterIP and allocates a port on every node
                              which routes to the clusterIP. "LoadBalancer" builds
                              on NodePort and creates an external load-balancer (if
                              supported in the current cloud) which routes to the
                              clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types'
                            type: string
                        type: object
                      volumes:
                        description: Volumes is used to configure additional Secret
                          and ConfigMap volumes that should be mounted for the gateway's
                          pod. .Values.gateways.<gateway-name>.secretVolumes, .Values.gateways.<gateway-name>.configMapVolumes
                        items:
                          description: VolumeConfig is used to specify volumes that
                            should be mounted on the pod.
                          properties:
                            volume:
                              description: Volume.Name maps to .Values.gateways.<gateway-name>.<type>.<type-name>
                                (type-name is configMapName or secretName) .configVolumes
                                -> .configMapName = volume.name .secretVolumes ->
                                .secretName = volume.name Only ConfigMap and Secret
                                fields are supported
                              properties:
                                configMap:
                                  description: ConfigMap represents a configMap that
                                    should populate this volume
                                  properties:
                                    defaultMode:
                                      description: 'Optional: mode bits to use on
                                        created files by default. Must be a value
                                        between 0 and 0777. Defaults to 0644. Directories
                                        within the path are not affected by this setting.
                                        This might be in conflict with other options
                                        that affect the file mode, like fsGroup, and
                                        the result can be other mode bits set.'
                                      format: int32
                                      type: integer
                                    items:
                                      description: If unspecified, each key-value
                                        pair in the Data field of the referenced ConfigMap
                                        will be projected into the volume as a file
                                        whose name is the key and content is the value.
                                        If specified, the listed keys will be projected
                                        into the specified paths, and unlisted keys
                                        will not be present. If a key is specified
                                        which is not present in the ConfigMap, the
                                        volume setup will error unless it is marked
                                        optional. Paths must be relative and may not
                                        contain the '..' path or start with '..'.
                                      items:
                                        description: Maps a string key to a path within
                                          a volume.
                                        properties:
                                          key:
                                            description: The key to project.
                                            type: string
                                          mode:
                                            description: 'Optional: mode bits to use
                                              on this file, must be a value between
                                              0 and 0777. If not specified, the volume
                                              defaultMode will be used. This might
                                              be in conflict with other options that
                                              affect the file mode, like fsGroup,
                                              and the result can be other mode bits
                                              set.'
                                            format: int32
                                            type: integer
                                          path:
                                            description: The relative path of the
                                              file to map the key to. May not be an
                                              absolute path. May not contain the path
                                              element '..'. May not start with the
                                              string '..'.
                                            type: string
                                        required:
                                        - key
                                        - path
                                        type: object
                                      type: array
                                    name:
                                      description: 'Name of the referent. More info:
                                        https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                        TODO: Add other useful fields. apiVersion,
                                        kind, uid?'
                                      type: string
                                    optional:
                                      description: Specify whether the ConfigMap or
                                        its keys must be defined
                                      type: boolean
                                  type: object
                                name:
                                  description: 'Volume''s name. Must be a DNS_LABEL
                                    and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                                  type: string
                                secret:
                                  description: 'Secret represents a secret that should
                                    populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret'
                                  properties:
                                    defaultMode:
                                      description: 'Optional: mode bits to use on
                                        created files by default. Must be a value
                                        between 0 and 0777. Defaults to 0644. Directories
                                        within the path are not affected by this setting.
                                        This might be in conflict with other options
                                        that affect the file mode, like fsGroup, and
                                        the result can be other mode bits set.'
                                      format: int32
                                      type: integer
                                    items:
                                      description: If unspecified, each key-value
                                        pair in the Data field of the referenced Secret
                                        will be projected into the volume as a file
                                        whose name is the key and content is the value.
                                        If specified, the listed keys will be projected
                                        into the specified paths, and unlisted keys
                                        will not be present. If a key is specified
                                        which is not present in the Secret, the volume
                                        setup will error unless it is marked optional.
                                        Paths must be relative and may not contain
                                        the '..' path or start with '..'.
                                      items:
                                        description: Maps a string key to a path within
                                          a volume.
                                        properties:
                                          key:
                                            description: The key to project.
                                            type: string
                                          mode:
                                            description: 'Optional: mode bits to use
                                              on this file, must be a value between
                                              0 and 0777. If not specified, the volume
                                              defaultMode will be used. This might
                                              be in conflict with other options that
                                              affect the file mode, like fsGroup,
                                              and the result can be other mode bits
                                              set.'
                                            format: int32
                                            type: integer
                                          path:
                                            description: The relative path of the
                                              file to map the key to. May not be an
                                              absolute path. May not contain the path
                                              element '..'. May not start with the
                                              string '..'.
                                            type: string
                                        required:
                                        - key
                                        - path
                                        type: object
                                      type: array
                                    optional:
                                      description: Specify whether the Secret or its
                                        keys must be defined
                                      type: boolean
                                    secretName:
                                      description: 'Name of the secret in the pod''s
                                        namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret'
                                      type: string
                                  type: object
                              required:
                              - name
                              type: object
                            volumeMount:
                              description: Mount.Name maps to .Values.gateways.<gateway-name>.<type>.name
                                .configVolumes -> .name = mount.name, .mountPath =
                                mount.mountPath .secretVolumes -> .name = mount.name,
                                .mountPath = mount.mountPath Only Name and MountPath
                                fields are supported
                              properties:
                                mountPath:
                                  description: Path within the container at which
                                    the volume should be mounted.  Must not contain
                                    ':'.
                                  type: string
                                mountPropagation:
                                  description: mountPropagation determines how mounts
                                    are propagated from the host to container and
                                    the other way around. When not set, MountPropagationNone
                                    is used. This field is beta in 1.10.
                                  type: string
                                name:
                                  description: This must match the Name of a Volume.
                                  type: string
                                readOnly:
                                  description: Mounted read-only if true, read-write
                                    otherwise (false or unspecified). Defaults to
                                    false.
                                  type: boolean
                                subPath:
                                  description: Path within the volume from which the
                                    container's volume should be mounted. Defaults
                                    to "" (volume's root).
                                  type: string
                                subPathExpr:
                                  description: Expanded path within the volume from
                                    which the container's volume should be mounted.
                                    Behaves similarly to SubPath but environment variable
                                    references $(VAR_NAME) are expanded using the
                                    container's environment. Defaults to "" (volume's
                                    root). SubPathExpr and SubPath are mutually exclusive.
                                  type: string
                              required:
                              - mountPath
                              - name
                              type: object
                          type: object
                        type: array
                    type: object
                  ingress:
                    description: Ingress configures the ingress gateway for the mesh
                      works in conjunction with cluster.meshExpansion.ingress configuration
                      (for enabling ILB gateway and mesh expansion ports) .Values.gateways.istio-ingressgateway
                    properties:
                      enableSDS:
                        description: 'EnableSDS for the gateway. .Values.gateways.<gateway-name>.sds.enabled
                          XXX: I believe this is only applicable to ingress gateways'
                        type: boolean
                      enabled:
                        description: Enabled specifies whether or not this feature
                          is enabled
                        type: boolean
                      meshExpansionPorts:
                        description: MeshExpansionPorts define the port set used with
                          multi-cluster/mesh expansion
                        items:
                          description: ServicePort contains information on service's
                            port.
                          properties:
                            appProtocol:
                              description: The application protocol for this port.
                                This field follows standard Kubernetes label syntax.
                                Un-prefixed names are reserved for IANA standard service
                                names (as per RFC-6335 and http://www.iana.org/assignments/service-names).
                                Non-standard protocols should use prefixed names such
                                as mycompany.com/my-custom-protocol. Field can be
                                enabled with ServiceAppProtocol feature gate.
                              type: string
                            name:
                              description: The name of this port within the service.
                                This must be a DNS_LABEL. All ports within a ServiceSpec
                                must have unique names. When considering the endpoints
                                for a Service, this must match the 'name' field in
                                the EndpointPort. Optional if only one ServicePort
                                is defined on this service.
                              type: string
                            nodePort:
                              description: 'The port on each node on which this service
                                is exposed when type=NodePort or LoadBalancer. Usually
                                assigned by the system. If specified, it will be allocated
                                to the service if unused or else creation of the service
                                will fail. Default is to auto-allocate a port if the
                                ServiceType of this Service requires one. More info:
                                https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport'
                              format: int32
                              type: integer
                            port:
                              description: The port that will be exposed by this service.
                              format: int32
                              type: integer
                            protocol:
                              description: The IP protocol for this port. Supports
                                "TCP", "UDP", and "SCTP". Default is TCP.
                              type: string
                            targetPort:
                              anyOf:
                              - type: integer
                              - type: string
                              description: 'Number or name of the port to access on
                                the pods targeted by the service. Number must be in
                                the range 1 to 65535. Name must be an IANA_SVC_NAME.
                                If this is a string, it will be looked up as a named
                                port in the target Pod''s container ports. If this
                                is not specified, the value of the ''port'' field
                                is used (an identity map). This field is ignored for
                                services with clusterIP=None, and should be omitted
                                or set equal to the ''port'' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service'
                              x-kubernetes-int-or-string: true
                          required:
                          - port
                          type: object
                        type: array
                      namespace:
                        description: 'Namespace is the namespace within which the
                          gateway will be installed, defaults to control plane namespace.
                          .Values.gateways.<gateway-name>.namespace XXX: for the standard
                          gateways, it might be possible that related resources could
                          be installed in control plane namespace instead of the gateway
                          namespace.  not sure if this is a problem or not.'
                        type: string
                      requestedNetworkView:
                        description: 'RequestedNetworkView is a list of networks whose
                          services should be made available to the gateway.  This
                          is used primarily for mesh expansion/multi-cluster. .Values.gateways.<gateway-name>.env.ISTIO_META_REQUESTED_NETWORK_VIEW
                          env, defaults to empty list XXX: I think this is only applicable
                          to egress gateways'
                        items:
                          type: string
                        type: array
                      routerMode:
                        description: The router mode to be used by the gateway. .Values.gateways.<gateway-name>.env.ISTIO_META_ROUTER_MODE,
                          defaults to sni-dnat
                        type: string
                      runtime:
                        description: Runtime is used to configure execution parameters
                          for the pod/containers e.g. resources, replicas, etc.
                        properties:
                          deployment:
                            description: Deployment specific overrides
                            properties:
                              autoScaling:
                                description: Autoscaling specifies the configuration
                                  for a HorizontalPodAutoscaler to be applied to this
                                  deployment.  Null indicates no auto scaling. .Values.*.autoscale*
                                  fields
                                properties:
                                  maxReplicas:
                                    description: upper limit for the number of pods
                                      that can be set by the autoscaler; cannot be
                                      smaller than MinReplicas.
                                    format: int32
                                    type: integer
                                  minReplicas:
                                    description: lower limit for the number of pods
                                      that can be set by the autoscaler, default 1.
                                    format: int32
                                    type: integer
                                  targetCPUUtilizationPercentage:
                                    description: target average CPU utilization (represented
                                      as a percentage of requested CPU) over all the
                                      pods; if not specified the default autoscaling
                                      policy will be used.
                                    format: int32
                                    type: integer
                                type: object
                              metadata:
                                description: Metadata specifies additional labels
                                  and annotations to be applied to the deployment
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                type: object
                              replicas:
                                description: Number of desired pods. This is a pointer
                                  to distinguish between explicit zero and not specified.
                                  Defaults to 1. .Values.*.replicaCount
                                format: int32
                                type: integer
                              strategy:
                                description: The deployment strategy to use to replace
                                  existing pods with new ones. .Values.*.rollingMaxSurge,
                                  rollingMaxUnavailable, etc.
                                properties:
                                  rollingUpdate:
                                    description: 'Rolling update config params. Present
                                      only if DeploymentStrategyType = RollingUpdate.
                                      --- TODO: Update this to follow our convention
                                      for oneOf, whatever we decide it to be.'
                                    properties:
                                      maxSurge:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        description: 'The maximum number of pods that
                                          can be scheduled above the desired number
                                          of pods. Value can be an absolute number
                                          (ex: 5) or a percentage of desired pods
                                          (ex: 10%). This can not be 0 if MaxUnavailable
                                          is 0. Absolute number is calculated from
                                          percentage by rounding up. Defaults to 25%.
                                          Example: when this is set to 30%, the new
                                          ReplicaSet can be scaled up immediately
                                          when the rolling update starts, such that
                                          the total number of old and new pods do
                                          not exceed 130% of desired pods. Once old
                                          pods have been killed, new ReplicaSet can
                                          be scaled up further, ensuring that total
                                          number of pods running at any time during
                                          the update is at most 130% of desired pods.'
                                        x-kubernetes-int-or-string: true
                                      maxUnavailable:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        description: 'The maximum number of pods that
                                          can be unavailable during the update. Value
                                          can be an absolute number (ex: 5) or a percentage
                                          of desired pods (ex: 10%). Absolute number
                                          is calculated from percentage by rounding
                                          down. This can not be 0 if MaxSurge is 0.
                                          Defaults to 25%. Example: when this is set
                                          to 30%, the old ReplicaSet can be scaled
                                          down to 70% of desired pods immediately
                                          when the rolling update starts. Once new
                                          pods are ready, old ReplicaSet can be scaled
                                          down further, followed by scaling up the
                                          new ReplicaSet, ensuring that the total
                                          number of pods available at all times during
                                          the update is at least 70% of desired pods.'
                                        x-kubernetes-int-or-string: true
                                    type: object
                                  type:
                                    description: Type of deployment. Can be "Recreate"
                                      or "RollingUpdate". Default is RollingUpdate.
                                    type: string
                                type: object
                            type: object
                          pod:
                            description: Pod specific overrides
                            properties:
                              affinity:
                                description: If specified, the pod's scheduling constraints
                                  .Values.podAntiAffinityLabelSelector, podAntiAffinityTermLabelSelector,
                                  nodeSelector NodeAffinity is not supported at this
                                  time PodAffinity is not supported at this time
                                properties:
                                  podAntiAffinity:
                                    description: PodAntiAffinity configures anti affinity
                                      for pod scheduling
                                    properties:
                                      preferredDuringScheduling:
                                        items:
                                          description: PodAntiAffinityTerm is a simplified
                                            version of corev1.PodAntiAffinityTerm
                                          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. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            topologyKey:
                                              description: This pod should be co-located
                                                (affinity) or not co-located (anti-affinity)
                                                with the pods matching the labelSelector
                                                in the specified namespaces, where
                                                co-located is defined as running on
                                                a node whose value of the label with
                                                key topologyKey matches that of any
                                                node on which any of the selected
                                                pods is running. Empty topologyKey
                                                is not allowed.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      requiredDuringScheduling:
                                        items:
                                          description: PodAntiAffinityTerm is a simplified
                                            version of corev1.PodAntiAffinityTerm
                                          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. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            topologyKey:
                                              description: This pod should be co-located
                                                (affinity) or not co-located (anti-affinity)
                                                with the pods matching the labelSelector
                                                in the specified namespaces, where
                                                co-located is defined as running on
                                                a node whose value of the label with
                                                key topologyKey matches that of any
                                                node on which any of the selected
                                                pods is running. Empty topologyKey
                                                is not allowed.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                    type: object
                                type: object
                              containers:
                                additionalProperties:
                                  description: ContainerConfig to be applied to containers
                                    in a pod, in a deployment
                                  properties:
                                    image:
                                      type: string
                                    imagePullPolicy:
                                      description: PullPolicy describes a policy for
                                        if/when to pull a container image
                                      type: string
                                    imagePullSecrets:
                                      items:
                                        description: LocalObjectReference contains
                                          enough information to let you locate the
                                          referenced object inside the same namespace.
                                        properties:
                                          name:
                                            description: 'Name of the referent. More
                                              info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                              TODO: Add other useful fields. apiVersion,
                                              kind, uid?'
                                            type: string
                                        type: object
                                      type: array
                                    imageRegistry:
                                      type: string
                                    imageTag:
                                      type: string
                                    resources:
                                      description: ResourceRequirements describes
                                        the compute resource requirements.
                                      properties:
                                        limits:
                                          additionalProperties:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          description: 'Limits describes the maximum
                                            amount of compute resources allowed. More
                                            info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                          type: object
                                        requests:
                                          additionalProperties:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          description: 'Requests describes the minimum
                                            amount of compute resources required.
                                            If Requests is omitted for a container,
                                            it defaults to Limits if that is explicitly
                                            specified, otherwise to an implementation-defined
                                            value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                          type: object
                                      type: object
                                  type: object
                                description: 'XXX: is it too cheesy to use ''default''
                                  name for defaults?  default would apply to all containers
                                  .Values.*.resource, imagePullPolicy, etc.'
                                type: object
                              metadata:
                                description: 'Metadata allows additional annotations/labels
                                  to be applied to the pod .Values.*.podAnnotations
                                  XXX: currently, additional lables are not supported'
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                type: object
                              nodeSelector:
                                additionalProperties:
                                  type: string
                                description: 'NodeSelector is a selector which must
                                  be true for the pod to fit on a node. Selector which
                                  must match a node''s labels for the pod to be scheduled
                                  on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                  .Values.nodeSelector'
                                type: object
                              priorityClassName:
                                description: '.Values.global.priorityClassName XXX:
                                  currently, this is only a global setting.  maybe
                                  only allow setting in global runtime defaults?'
                                type: string
                              tolerations:
                                description: If specified, the pod's tolerations.
                                  .Values.tolerations
                                items:
                                  description: The pod this Toleration is attached
                                    to tolerates any taint that matches the triple
                                    <key,value,effect> using the matching operator
                                    <operator>.
                                  properties:
                                    effect:
                                      description: Effect indicates the taint effect
                                        to match. Empty means match all taint effects.
                                        When specified, allowed values are NoSchedule,
                                        PreferNoSchedule and NoExecute.
                                      type: string
                                    key:
                                      description: Key is the taint key that the toleration
                                        applies to. Empty means match all taint keys.
                                        If the key is empty, operator must be Exists;
                                        this combination means to match all values
                                        and all keys.
                                      type: string
                                    operator:
                                      description: Operator represents a key's relationship
                                        to the value. Valid operators are Exists and
                                        Equal. Defaults to Equal. Exists is equivalent
                                        to wildcard for value, so that a pod can tolerate
                                        all taints of a particular category.
                                      type: string
                                    tolerationSeconds:
                                      description: TolerationSeconds represents the
                                        period of time the toleration (which must
                                        be of effect NoExecute, otherwise this field
                                        is ignored) tolerates the taint. By default,
                                        it is not set, which means tolerate the taint
                                        forever (do not evict). Zero and negative
                                        values will be treated as 0 (evict immediately)
                                        by the system.
                                      format: int64
                                      type: integer
                                    value:
                                      description: Value is the taint value the toleration
                                        matches to. If the operator is Exists, the
                                        value should be empty, otherwise just a regular
                                        string.
                                      type: string
                                  type: object
                                type: array
                            type: object
                        type: object
                      service:
                        description: 'Service configures the service associated with
                          the gateway, e.g. port mappings, service type, annotations/labels,
                          etc. .Values.gateways.<gateway-name>.ports, .Values.gateways.<gateway-name>.type,
                          .Values.gateways.<gateway-name>.loadBalancerIP, .Values.gateways.<gateway-name>.serviceAnnotations,
                          .Values.gateways.<gateway-name>.serviceLabels XXX: currently
                          there is no distinction between labels and serviceLabels'
                        properties:
                          clusterIP:
                            description: 'clusterIP is the IP address of the service
                              and is usually assigned randomly by the master. If an
                              address is specified manually and is not in use by others,
                              it will be allocated to the service; otherwise, creation
                              of the service will fail. This field can not be changed
                              through updates. Valid values are "None", empty string
                              (""), or a valid IP address. "None" can be specified
                              for headless services when proxying is not required.
                              Only applies to types ClusterIP, NodePort, and LoadBalancer.
                              Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                            type: string
                          externalIPs:
                            description: externalIPs is a list of IP addresses for
                              which nodes in the cluster will also accept traffic
                              for this service.  These IPs are not managed by Kubernetes.  The
                              user is responsible for ensuring that traffic arrives
                              at a node with this IP.  A common example is external
                              load-balancers that are not part of the Kubernetes system.
                            items:
                              type: string
                            type: array
                          externalName:
                            description: externalName is the external reference that
                              kubedns or equivalent will return as a CNAME record
                              for this service. No proxying will be involved. Must
                              be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123)
                              and requires Type to be ExternalName.
                            type: string
                          externalTrafficPolicy:
                            description: externalTrafficPolicy denotes if this Service
                              desires to route external traffic to node-local or cluster-wide
                              endpoints. "Local" preserves the client source IP and
                              avoids a second hop for LoadBalancer and Nodeport type
                              services, but risks potentially imbalanced traffic spreading.
                              "Cluster" obscures the client source IP and may cause
                              a second hop to another node, but should have good overall
                              load-spreading.
                            type: string
                          healthCheckNodePort:
                            description: healthCheckNodePort specifies the healthcheck
                              nodePort for the service. If not specified, HealthCheckNodePort
                              is created by the service api backend with the allocated
                              nodePort. Will use user-specified nodePort value if
                              specified by the client. Only effects when Type is set
                              to LoadBalancer and ExternalTrafficPolicy is set to
                              Local.
                            format: int32
                            type: integer
                          ipFamily:
                            description: ipFamily specifies whether this Service has
                              a preference for a particular IP family (e.g. IPv4 vs.
                              IPv6).  If a specific IP family is requested, the clusterIP
                              field will be allocated from that family, if it is available
                              in the cluster.  If no IP family is requested, the cluster's
                              primary IP family will be used. Other IP fields (loadBalancerIP,
                              loadBalancerSourceRanges, externalIPs) and controllers
                              which allocate external load-balancers should use the
                              same IP family.  Endpoints for this Service will be
                              of this family.  This field is immutable after creation.
                              Assigning a ServiceIPFamily not available in the cluster
                              (e.g. IPv6 in IPv4 only cluster) is an error condition
                              and will fail during clusterIP assignment.
                            type: string
                          loadBalancerIP:
                            description: 'Only applies to Service Type: LoadBalancer
                              LoadBalancer will get created with the IP specified
                              in this field. This feature depends on whether the underlying
                              cloud-provider supports specifying the loadBalancerIP
                              when a load balancer is created. This field will be
                              ignored if the cloud-provider does not support the feature.'
                            type: string
                          loadBalancerSourceRanges:
                            description: 'If specified and supported by the platform,
                              this will restrict traffic through the cloud-provider
                              load-balancer will be restricted to the specified client
                              IPs. This field will be ignored if the cloud-provider
                              does not support the feature." More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/'
                            items:
                              type: string
                            type: array
                          metadata:
                            description: metadata to be applied to the gateway's service
                              (annotations and labels)
                            properties:
                              annotations:
                                additionalProperties:
                                  type: string
                                type: object
                              labels:
                                additionalProperties:
                                  type: string
                                type: object
                            type: object
                          ports:
                            description: 'The list of ports that are exposed by this
                              service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                            items:
                              description: ServicePort contains information on service's
                                port.
                              properties:
                                appProtocol:
                                  description: The application protocol for this port.
                                    This field follows standard Kubernetes label syntax.
                                    Un-prefixed names are reserved for IANA standard
                                    service names (as per RFC-6335 and http://www.iana.org/assignments/service-names).
                                    Non-standard protocols should use prefixed names
                                    such as mycompany.com/my-custom-protocol. Field
                                    can be enabled with ServiceAppProtocol feature
                                    gate.
                                  type: string
                                name:
                                  description: The name of this port within the service.
                                    This must be a DNS_LABEL. All ports within a ServiceSpec
                                    must have unique names. When considering the endpoints
                                    for a Service, this must match the 'name' field
                                    in the EndpointPort. Optional if only one ServicePort
                                    is defined on this service.
                                  type: string
                                nodePort:
                                  description: 'The port on each node on which this
                                    service is exposed when type=NodePort or LoadBalancer.
                                    Usually assigned by the system. If specified,
                                    it will be allocated to the service if unused
                                    or else creation of the service will fail. Default
                                    is to auto-allocate a port if the ServiceType
                                    of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport'
                                  format: int32
                                  type: integer
                                port:
                                  description: The port that will be exposed by this
                                    service.
                                  format: int32
                                  type: integer
                                protocol:
                                  description: The IP protocol for this port. Supports
                                    "TCP", "UDP", and "SCTP". Default is TCP.
                                  type: string
                                targetPort:
                                  anyOf:
                                  - type: integer
                                  - type: string
                                  description: 'Number or name of the port to access
                                    on the pods targeted by the service. Number must
                                    be in the range 1 to 65535. Name must be an IANA_SVC_NAME.
                                    If this is a string, it will be looked up as a
                                    named port in the target Pod''s container ports.
                                    If this is not specified, the value of the ''port''
                                    field is used (an identity map). This field is
                                    ignored for services with clusterIP=None, and
                                    should be omitted or set equal to the ''port''
                                    field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service'
                                  x-kubernetes-int-or-string: true
                              required:
                              - port
                              type: object
                            type: array
                            x-kubernetes-list-map-keys:
                            - port
                            - protocol
                            x-kubernetes-list-type: map
                          publishNotReadyAddresses:
                            description: publishNotReadyAddresses, when set to true,
                              indicates that DNS implementations must publish the
                              notReadyAddresses of subsets for the Endpoints associated
                              with the Service. The default value is false. The primary
                              use case for setting this field is to use a StatefulSet's
                              Headless Service to propagate SRV records for its Pods
                              without respect to their readiness for purpose of peer
                              discovery.
                            type: boolean
                          selector:
                            additionalProperties:
                              type: string
                            description: 'Route service traffic to pods with label
                              keys and values matching this selector. If empty or
                              not present, the service is assumed to have an external
                              process managing its endpoints, which Kubernetes will
                              not modify. Only applies to types ClusterIP, NodePort,
                              and LoadBalancer. Ignored if type is ExternalName. More
                              info: https://kubernetes.io/docs/concepts/services-networking/service/'
                            type: object
                          sessionAffinity:
                            description: 'Supports "ClientIP" and "None". Used to
                              maintain session affinity. Enable client IP based session
                              affinity. Must be ClientIP or None. Defaults to None.
                              More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
                            type: string
                          sessionAffinityConfig:
                            description: sessionAffinityConfig contains the configurations
                              of session affinity.
                            properties:
                              clientIP:
                                description: clientIP contains the configurations
                                  of Client IP based session affinity.
                                properties:
                                  timeoutSeconds:
                                    description: timeoutSeconds specifies the seconds
                                      of ClientIP type session sticky time. The value
                                      must be >0 && <=86400(for 1 day) if ServiceAffinity
                                      == "ClientIP". Default value is 10800(for 3
                                      hours).
                                    format: int32
                                    type: integer
                                type: object
                            type: object
                          topologyKeys:
                            description: topologyKeys is a preference-order list of
                              topology keys which implementations of services should
                              use to preferentially sort endpoints when accessing
                              this Service, it can not be used at the same time as
                              externalTrafficPolicy=Local. Topology keys must be valid
                              label keys and at most 16 keys may be specified. Endpoints
                              are chosen based on the first topology key with available
                              backends. If this field is specified and all entries
                              have no backends that match the topology of the client,
                              the service has no backends for that client and connections
                              should fail. The special value "*" may be used to mean
                              "any topology". This catch-all value, if used, only
                              makes sense as the last value in the list. If this is
                              not specified or empty, no topology constraints will
                              be applied.
                            items:
                              type: string
                            type: array
                          type:
                            description: 'type determines how the Service is exposed.
                              Defaults to ClusterIP. Valid options are ExternalName,
                              ClusterIP, NodePort, and LoadBalancer. "ExternalName"
                              maps to the specified externalName. "ClusterIP" allocates
                              a cluster-internal IP address for load-balancing to
                              endpoints. Endpoints are determined by the selector
                              or if that is not specified, by manual construction
                              of an Endpoints object. If clusterIP is "None", no virtual
                              IP is allocated and the endpoints are published as a
                              set of endpoints rather than a stable IP. "NodePort"
                              builds on ClusterIP and allocates a port on every node
                              which routes to the clusterIP. "LoadBalancer" builds
                              on NodePort and creates an external load-balancer (if
                              supported in the current cloud) which routes to the
                              clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types'
                            type: string
                        type: object
                      volumes:
                        description: Volumes is used to configure additional Secret
                          and ConfigMap volumes that should be mounted for the gateway's
                          pod. .Values.gateways.<gateway-name>.secretVolumes, .Values.gateways.<gateway-name>.configMapVolumes
                        items:
                          description: VolumeConfig is used to specify volumes that
                            should be mounted on the pod.
                          properties:
                            volume:
                              description: Volume.Name maps to .Values.gateways.<gateway-name>.<type>.<type-name>
                                (type-name is configMapName or secretName) .configVolumes
                                -> .configMapName = volume.name .secretVolumes ->
                                .secretName = volume.name Only ConfigMap and Secret
                                fields are supported
                              properties:
                                configMap:
                                  description: ConfigMap represents a configMap that
                                    should populate this volume
                                  properties:
                                    defaultMode:
                                      description: 'Optional: mode bits to use on
                                        created files by default. Must be a value
                                        between 0 and 0777. Defaults to 0644. Directories
                                        within the path are not affected by this setting.
                                        This might be in conflict with other options
                                        that affect the file mode, like fsGroup, and
                                        the result can be other mode bits set.'
                                      format: int32
                                      type: integer
                                    items:
                                      description: If unspecified, each key-value
                                        pair in the Data field of the referenced ConfigMap
                                        will be projected into the volume as a file
                                        whose name is the key and content is the value.
                                        If specified, the listed keys will be projected
                                        into the specified paths, and unlisted keys
                                        will not be present. If a key is specified
                                        which is not present in the ConfigMap, the
                                        volume setup will error unless it is marked
                                        optional. Paths must be relative and may not
                                        contain the '..' path or start with '..'.
                                      items:
                                        description: Maps a string key to a path within
                                          a volume.
                                        properties:
                                          key:
                                            description: The key to project.
                                            type: string
                                          mode:
                                            description: 'Optional: mode bits to use
                                              on this file, must be a value between
                                              0 and 0777. If not specified, the volume
                                              defaultMode will be used. This might
                                              be in conflict with other options that
                                              affect the file mode, like fsGroup,
                                              and the result can be other mode bits
                                              set.'
                                            format: int32
                                            type: integer
                                          path:
                                            description: The relative path of the
                                              file to map the key to. May not be an
                                              absolute path. May not contain the path
                                              element '..'. May not start with the
                                              string '..'.
                                            type: string
                                        required:
                                        - key
                                        - path
                                        type: object
                                      type: array
                                    name:
                                      description: 'Name of the referent. More info:
                                        https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                        TODO: Add other useful fields. apiVersion,
                                        kind, uid?'
                                      type: string
                                    optional:
                                      description: Specify whether the ConfigMap or
                                        its keys must be defined
                                      type: boolean
                                  type: object
                                name:
                                  description: 'Volume''s name. Must be a DNS_LABEL
                                    and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                                  type: string
                                secret:
                                  description: 'Secret represents a secret that should
                                    populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret'
                                  properties:
                                    defaultMode:
                                      description: 'Optional: mode bits to use on
                                        created files by default. Must be a value
                                        between 0 and 0777. Defaults to 0644. Directories
                                        within the path are not affected by this setting.
                                        This might be in conflict with other options
                                        that affect the file mode, like fsGroup, and
                                        the result can be other mode bits set.'
                                      format: int32
                                      type: integer
                                    items:
                                      description: If unspecified, each key-value
                                        pair in the Data field of the referenced Secret
                                        will be projected into the volume as a file
                                        whose name is the key and content is the value.
                                        If specified, the listed keys will be projected
                                        into the specified paths, and unlisted keys
                                        will not be present. If a key is specified
                                        which is not present in the Secret, the volume
                                        setup will error unless it is marked optional.
                                        Paths must be relative and may not contain
                                        the '..' path or start with '..'.
                                      items:
                                        description: Maps a string key to a path within
                                          a volume.
                                        properties:
                                          key:
                                            description: The key to project.
                                            type: string
                                          mode:
                                            description: 'Optional: mode bits to use
                                              on this file, must be a value between
                                              0 and 0777. If not specified, the volume
                                              defaultMode will be used. This might
                                              be in conflict with other options that
                                              affect the file mode, like fsGroup,
                                              and the result can be other mode bits
                                              set.'
                                            format: int32
                                            type: integer
                                          path:
                                            description: The relative path of the
                                              file to map the key to. May not be an
                                              absolute path. May not contain the path
                                              element '..'. May not start with the
                                              string '..'.
                                            type: string
                                        required:
                                        - key
                                        - path
                                        type: object
                                      type: array
                                    optional:
                                      description: Specify whether the Secret or its
                                        keys must be defined
                                      type: boolean
                                    secretName:
                                      description: 'Name of the secret in the pod''s
                                        namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret'
                                      type: string
                                  type: object
                              required:
                              - name
                              type: object
                            volumeMount:
                              description: Mount.Name maps to .Values.gateways.<gateway-name>.<type>.name
                                .configVolumes -> .name = mount.name, .mountPath =
                                mount.mountPath .secretVolumes -> .name = mount.name,
                                .mountPath = mount.mountPath Only Name and MountPath
                                fields are supported
                              properties:
                                mountPath:
                                  description: Path within the container at which
                                    the volume should be mounted.  Must not contain
                                    ':'.
                                  type: string
                                mountPropagation:
                                  description: mountPropagation determines how mounts
                                    are propagated from the host to container and
                                    the other way around. When not set, MountPropagationNone
                                    is used. This field is beta in 1.10.
                                  type: string
                                name:
                                  description: This must match the Name of a Volume.
                                  type: string
                                readOnly:
                                  description: Mounted read-only if true, read-write
                                    otherwise (false or unspecified). Defaults to
                                    false.
                                  type: boolean
                                subPath:
                                  description: Path within the volume from which the
                                    container's volume should be mounted. Defaults
                                    to "" (volume's root).
                                  type: string
                                subPathExpr:
                                  description: Expanded path within the volume from
                                    which the container's volume should be mounted.
                                    Behaves similarly to SubPath but environment variable
                                    references $(VAR_NAME) are expanded using the
                                    container's environment. Defaults to "" (volume's
                                    root). SubPathExpr and SubPath are mutually exclusive.
                                  type: string
                              required:
                              - mountPath
                              - name
                              type: object
                          type: object
                        type: array
                    type: object
                type: object
              logging:
                description: 'Logging represents the logging configuration for the
                  control plane components XXX: Should this be separate from Proxy.Logging?'
                properties:
                  componentLevels:
                    additionalProperties:
                      description: LogLevel represents the logging level
                      type: string
                    description: ComponentLevels configures log level for specific
                      envoy components .Values.global.proxy.componentLogLevel, overridden
                      by sidecar.istio.io/componentLogLevel map of <component>:<level>
                    type: object
                  logAsJSON:
                    description: LogAsJSON enables JSON logging .Values.global.logAsJson
                    type: boolean
                type: object
              policy:
                description: Policy configures policy checking for the control plane.
                  .Values.policy.enabled, true if not null
                properties:
                  istiod:
                    description: 'Istiod policy implementation (v2) XXX: is this the
                      default policy config, i.e. what''s used if mixer is not being
                      used?  Does this need to be explicit?'
                    type: object
                  mixer:
                    description: Mixer configuration (legacy, v1) .Values.mixer.policy.enabled
                    properties:
                      adapters:
                        description: Adapters configures available adapters.
                        properties:
                          kubernetesenv:
                            description: Kubernetesenv configures the use of the kubernetesenv
                              adapter. .Values.mixer.policy.adapters.kubernetesenv.enabled,
                              defaults to true
                            type: boolean
                          useAdapterCRDs:
                            description: 'UseAdapterCRDs configures mixer to support
                              deprecated mixer CRDs. .Values.mixer.policy.adapters.useAdapterCRDs,
                              removed in istio 1.4, defaults to false XXX: I don''t
                              think this should ever be used, as the CRDs were supported
                              in istio 1.1, but removed entirely in 1.4'
                            type: boolean
                        type: object
                      enableChecks:
                        description: EnableChecks configures whether or not policy
                          checks should be enabled. .Values.global.disablePolicyChecks
                          | default "true" (false, inverted logic) Set the following
                          variable to false to disable policy checks by the Mixer.
                          Note that metrics will still be reported to the Mixer.
                        type: boolean
                      failOpen:
                        description: FailOpen configures policy checks to fail if
                          mixer cannot be reached. .Values.global.policyCheckFailOpen,
                          maps to MeshConfig.policyCheckFailOpen policyCheckFailOpen
                          allows traffic in cases when the mixer policy service cannot
                          be reached. Default is false which means the traffic is
                          denied when the client is unable to connect to Mixer.
                        type: boolean
                      runtime:
                        description: Runtime configures execution aspects of the mixer
                          deployment/pod (e.g. resources)
                        properties:
                          deployment:
                            description: Deployment specific overrides
                            properties:
                              autoScaling:
                                description: Autoscaling specifies the configuration
                                  for a HorizontalPodAutoscaler to be applied to this
                                  deployment.  Null indicates no auto scaling. .Values.*.autoscale*
                                  fields
                                properties:
                                  maxReplicas:
                                    description: upper limit for the number of pods
                                      that can be set by the autoscaler; cannot be
                                      smaller than MinReplicas.
                                    format: int32
                                    type: integer
                                  minReplicas:
                                    description: lower limit for the number of pods
                                      that can be set by the autoscaler, default 1.
                                    format: int32
                                    type: integer
                                  targetCPUUtilizationPercentage:
                                    description: target average CPU utilization (represented
                                      as a percentage of requested CPU) over all the
                                      pods; if not specified the default autoscaling
                                      policy will be used.
                                    format: int32
                                    type: integer
                                type: object
                              metadata:
                                description: Metadata specifies additional labels
                                  and annotations to be applied to the deployment
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                type: object
                              replicas:
                                description: Number of desired pods. This is a pointer
                                  to distinguish between explicit zero and not specified.
                                  Defaults to 1. .Values.*.replicaCount
                                format: int32
                                type: integer
                              strategy:
                                description: The deployment strategy to use to replace
                                  existing pods with new ones. .Values.*.rollingMaxSurge,
                                  rollingMaxUnavailable, etc.
                                properties:
                                  rollingUpdate:
                                    description: 'Rolling update config params. Present
                                      only if DeploymentStrategyType = RollingUpdate.
                                      --- TODO: Update this to follow our convention
                                      for oneOf, whatever we decide it to be.'
                                    properties:
                                      maxSurge:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        description: 'The maximum number of pods that
                                          can be scheduled above the desired number
                                          of pods. Value can be an absolute number
                                          (ex: 5) or a percentage of desired pods
                                          (ex: 10%). This can not be 0 if MaxUnavailable
                                          is 0. Absolute number is calculated from
                                          percentage by rounding up. Defaults to 25%.
                                          Example: when this is set to 30%, the new
                                          ReplicaSet can be scaled up immediately
                                          when the rolling update starts, such that
                                          the total number of old and new pods do
                                          not exceed 130% of desired pods. Once old
                                          pods have been killed, new ReplicaSet can
                                          be scaled up further, ensuring that total
                                          number of pods running at any time during
                                          the update is at most 130% of desired pods.'
                                        x-kubernetes-int-or-string: true
                                      maxUnavailable:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        description: 'The maximum number of pods that
                                          can be unavailable during the update. Value
                                          can be an absolute number (ex: 5) or a percentage
                                          of desired pods (ex: 10%). Absolute number
                                          is calculated from percentage by rounding
                                          down. This can not be 0 if MaxSurge is 0.
                                          Defaults to 25%. Example: when this is set
                                          to 30%, the old ReplicaSet can be scaled
                                          down to 70% of desired pods immediately
                                          when the rolling update starts. Once new
                                          pods are ready, old ReplicaSet can be scaled
                                          down further, followed by scaling up the
                                          new ReplicaSet, ensuring that the total
                                          number of pods available at all times during
                                          the update is at least 70% of desired pods.'
                                        x-kubernetes-int-or-string: true
                                    type: object
                                  type:
                                    description: Type of deployment. Can be "Recreate"
                                      or "RollingUpdate". Default is RollingUpdate.
                                    type: string
                                type: object
                            type: object
                          pod:
                            description: Pod specific overrides
                            properties:
                              affinity:
                                description: If specified, the pod's scheduling constraints
                                  .Values.podAntiAffinityLabelSelector, podAntiAffinityTermLabelSelector,
                                  nodeSelector NodeAffinity is not supported at this
                                  time PodAffinity is not supported at this time
                                properties:
                                  podAntiAffinity:
                                    description: PodAntiAffinity configures anti affinity
                                      for pod scheduling
                                    properties:
                                      preferredDuringScheduling:
                                        items:
                                          description: PodAntiAffinityTerm is a simplified
                                            version of corev1.PodAntiAffinityTerm
                                          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. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            topologyKey:
                                              description: This pod should be co-located
                                                (affinity) or not co-located (anti-affinity)
                                                with the pods matching the labelSelector
                                                in the specified namespaces, where
                                                co-located is defined as running on
                                                a node whose value of the label with
                                                key topologyKey matches that of any
                                                node on which any of the selected
                                                pods is running. Empty topologyKey
                                                is not allowed.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      requiredDuringScheduling:
                                        items:
                                          description: PodAntiAffinityTerm is a simplified
                                            version of corev1.PodAntiAffinityTerm
                                          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. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            topologyKey:
                                              description: This pod should be co-located
                                                (affinity) or not co-located (anti-affinity)
                                                with the pods matching the labelSelector
                                                in the specified namespaces, where
                                                co-located is defined as running on
                                                a node whose value of the label with
                                                key topologyKey matches that of any
                                                node on which any of the selected
                                                pods is running. Empty topologyKey
                                                is not allowed.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                    type: object
                                type: object
                              containers:
                                additionalProperties:
                                  description: ContainerConfig to be applied to containers
                                    in a pod, in a deployment
                                  properties:
                                    image:
                                      type: string
                                    imagePullPolicy:
                                      description: PullPolicy describes a policy for
                                        if/when to pull a container image
                                      type: string
                                    imagePullSecrets:
                                      items:
                                        description: LocalObjectReference contains
                                          enough information to let you locate the
                                          referenced object inside the same namespace.
                                        properties:
                                          name:
                                            description: 'Name of the referent. More
                                              info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                              TODO: Add other useful fields. apiVersion,
                                              kind, uid?'
                                            type: string
                                        type: object
                                      type: array
                                    imageRegistry:
                                      type: string
                                    imageTag:
                                      type: string
                                    resources:
                                      description: ResourceRequirements describes
                                        the compute resource requirements.
                                      properties:
                                        limits:
                                          additionalProperties:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          description: 'Limits describes the maximum
                                            amount of compute resources allowed. More
                                            info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                          type: object
                                        requests:
                                          additionalProperties:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          description: 'Requests describes the minimum
                                            amount of compute resources required.
                                            If Requests is omitted for a container,
                                            it defaults to Limits if that is explicitly
                                            specified, otherwise to an implementation-defined
                                            value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                          type: object
                                      type: object
                                  type: object
                                description: 'XXX: is it too cheesy to use ''default''
                                  name for defaults?  default would apply to all containers
                                  .Values.*.resource, imagePullPolicy, etc.'
                                type: object
                              metadata:
                                description: 'Metadata allows additional annotations/labels
                                  to be applied to the pod .Values.*.podAnnotations
                                  XXX: currently, additional lables are not supported'
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                type: object
                              nodeSelector:
                                additionalProperties:
                                  type: string
                                description: 'NodeSelector is a selector which must
                                  be true for the pod to fit on a node. Selector which
                                  must match a node''s labels for the pod to be scheduled
                                  on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                  .Values.nodeSelector'
                                type: object
                              priorityClassName:
                                description: '.Values.global.priorityClassName XXX:
                                  currently, this is only a global setting.  maybe
                                  only allow setting in global runtime defaults?'
                                type: string
                              tolerations:
                                description: If specified, the pod's tolerations.
                                  .Values.tolerations
                                items:
                                  description: The pod this Toleration is attached
                                    to tolerates any taint that matches the triple
                                    <key,value,effect> using the matching operator
                                    <operator>.
                                  properties:
                                    effect:
                                      description: Effect indicates the taint effect
                                        to match. Empty means match all taint effects.
                                        When specified, allowed values are NoSchedule,
                                        PreferNoSchedule and NoExecute.
                                      type: string
                                    key:
                                      description: Key is the taint key that the toleration
                                        applies to. Empty means match all taint keys.
                                        If the key is empty, operator must be Exists;
                                        this combination means to match all values
                                        and all keys.
                                      type: string
                                    operator:
                                      description: Operator represents a key's relationship
                                        to the value. Valid operators are Exists and
                                        Equal. Defaults to Equal. Exists is equivalent
                                        to wildcard for value, so that a pod can tolerate
                                        all taints of a particular category.
                                      type: string
                                    tolerationSeconds:
                                      description: TolerationSeconds represents the
                                        period of time the toleration (which must
                                        be of effect NoExecute, otherwise this field
                                        is ignored) tolerates the taint. By default,
                                        it is not set, which means tolerate the taint
                                        forever (do not evict). Zero and negative
                                        values will be treated as 0 (evict immediately)
                                        by the system.
                                      format: int64
                                      type: integer
                                    value:
                                      description: Value is the taint value the toleration
                                        matches to. If the operator is Exists, the
                                        value should be empty, otherwise just a regular
                                        string.
                                      type: string
                                  type: object
                                type: array
                            type: object
                        type: object
                    type: object
                  remote:
                    description: Remote mixer configuration (legacy, v1) .Values.global.remotePolicyAddress
                    properties:
                      address:
                        description: Address represents the address of the mixer server.
                          .Values.global.remotePolicyAddress, maps to MeshConfig.mixerCheckServer
                        type: string
                      createService:
                        description: CreateServices specifies whether or not a k8s
                          Service should be created for the remote policy server.
                          .Values.global.createRemoteSvcEndpoints
                        type: boolean
                      enableChecks:
                        description: EnableChecks configures whether or not policy
                          checks should be enabled. .Values.global.disablePolicyChecks
                          | default "true" (false, inverted logic) Set the following
                          variable to false to disable policy checks by the Mixer.
                          Note that metrics will still be reported to the Mixer.
                        type: boolean
                      failOpen:
                        description: FailOpen configures policy checks to fail if
                          mixer cannot be reached. .Values.global.policyCheckFailOpen,
                          maps to MeshConfig.policyCheckFailOpen policyCheckFailOpen
                          allows traffic in cases when the mixer policy service cannot
                          be reached. Default is false which means the traffic is
                          denied when the client is unable to connect to Mixer.
                        type: boolean
                    type: object
                  type:
                    description: Required, the policy implementation defaults to Istiod
                      1.6+, Mixer pre-1.6
                    type: string
                type: object
              proxy:
                description: Proxy configures the default behavior for sidecars.  Many
                  values were previously exposed through .Values.global.proxy
                properties:
                  adminPort:
                    description: AdminPort configures the admin port exposed by the
                      sidecar. maps to defaultConfig.proxyAdminPort, defaults to 15000
                    format: int32
                    type: integer
                  concurrency:
                    description: 'Concurrency configures the number of threads that
                      should be run by the sidecar. .Values.global.proxy.concurrency,
                      maps to defaultConfig.concurrency XXX: removed in 1.7 XXX: this
                      is defaulted to 2 in our values.yaml, but should probably be
                      0'
                    format: int32
                    type: integer
                  logging:
                    description: 'Logging configures logging for the sidecar. XXX:
                      should this be independent of global logging?  previously, this
                      was only exposed through proxy settings and there was no separate
                      logging for control plane components (e.g. pilot, mixer, etc.).
                      e.g. .Values.global.proxy.logLevel'
                    properties:
                      componentLevels:
                        additionalProperties:
                          description: LogLevel represents the logging level
                          type: string
                        description: ComponentLevels configures log level for specific
                          envoy components .Values.global.proxy.componentLogLevel,
                          overridden by sidecar.istio.io/componentLogLevel map of
                          <component>:<level>
                        type: object
                      level:
                        description: Level the log level .Values.global.proxy.logLevel,
                          overridden by sidecar.istio.io/logLevel
                        type: string
                    type: object
                  networking:
                    description: Networking represents network settings to be configured
                      for the sidecars.
                    properties:
                      clusterDomain:
                        description: ClusterDomain represents the domain for the cluster,
                          defaults to cluster.local .Values.global.proxy.clusterDomain
                        type: string
                      connectionTimeout:
                        description: 'maps to meshConfig.defaultConfig.connectionTimeout,
                          defaults to 10s XXX: currently not exposed through values.yaml'
                        type: string
                      initialization:
                        description: Initialization is used to specify how the pod's
                          networking through the proxy is initialized.  This configures
                          the use of CNI or an init container.
                        properties:
                          cni:
                            description: CNI configures the use of CNI for initializing
                              the pod's networking. istio_cni.enabled = true, if CNI
                              is used
                            properties:
                              runtime:
                                description: Runtime configures customization of the
                                  CNI containers (e.g. resources)
                                properties:
                                  image:
                                    type: string
                                  imagePullPolicy:
                                    description: PullPolicy describes a policy for
                                      if/when to pull a container image
                                    type: string
                                  imagePullSecrets:
                                    items:
                                      description: LocalObjectReference contains enough
                                        information to let you locate the referenced
                                        object inside the same namespace.
                                      properties:
                                        name:
                                          description: 'Name of the referent. More
                                            info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                            TODO: Add other useful fields. apiVersion,
                                            kind, uid?'
                                          type: string
                                      type: object
                                    type: array
                                  imageRegistry:
                                    type: string
                                  imageTag:
                                    type: string
                                  priorityClassName:
                                    description: PriorityClassName configures the
                                      priority class name for the pods.
                                    type: string
                                  resources:
                                    description: ResourceRequirements describes the
                                      compute resource requirements.
                                    properties:
                                      limits:
                                        additionalProperties:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                          x-kubernetes-int-or-string: true
                                        description: 'Limits describes the maximum
                                          amount of compute resources allowed. More
                                          info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                        type: object
                                      requests:
                                        additionalProperties:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                          x-kubernetes-int-or-string: true
                                        description: 'Requests describes the minimum
                                          amount of compute resources required. If
                                          Requests is omitted for a container, it
                                          defaults to Limits if that is explicitly
                                          specified, otherwise to an implementation-defined
                                          value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                        type: object
                                    type: object
                                type: object
                            type: object
                          initContainer:
                            description: InitContainer configures the use of a pod
                              init container for initializing the pod's networking.
                              istio_cni.enabled = false, if InitContainer is used
                            properties:
                              runtime:
                                description: Runtime configures customization of the
                                  init container (e.g. resources)
                                properties:
                                  image:
                                    type: string
                                  imagePullPolicy:
                                    description: PullPolicy describes a policy for
                                      if/when to pull a container image
                                    type: string
                                  imagePullSecrets:
                                    items:
                                      description: LocalObjectReference contains enough
                                        information to let you locate the referenced
                                        object inside the same namespace.
                                      properties:
                                        name:
                                          description: 'Name of the referent. More
                                            info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                            TODO: Add other useful fields. apiVersion,
                                            kind, uid?'
                                          type: string
                                      type: object
                                    type: array
                                  imageRegistry:
                                    type: string
                                  imageTag:
                                    type: string
                                  resources:
                                    description: ResourceRequirements describes the
                                      compute resource requirements.
                                    properties:
                                      limits:
                                        additionalProperties:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                          x-kubernetes-int-or-string: true
                                        description: 'Limits describes the maximum
                                          amount of compute resources allowed. More
                                          info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                        type: object
                                      requests:
                                        additionalProperties:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                          x-kubernetes-int-or-string: true
                                        description: 'Requests describes the minimum
                                          amount of compute resources required. If
                                          Requests is omitted for a container, it
                                          defaults to Limits if that is explicitly
                                          specified, otherwise to an implementation-defined
                                          value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                        type: object
                                    type: object
                                type: object
                            type: object
                          type:
                            description: Type of the network initialization implementation.
                            type: string
                        type: object
                      protocol:
                        description: DNS configures aspects of the sidecar's usage
                          of DNS
                        properties:
                          searchSuffixes:
                            description: RefreshRate configures the DNS refresh rate
                              for Envoy cluster of type STRICT_DNS This must be given
                              it terms of seconds. For example, 300s is valid but
                              5m is invalid. .Values.global.proxy.dnsRefreshRate,
                              default 300s
                            type: string
                        type: object
                      trafficControl:
                        description: TrafficControl configures what network traffic
                          is routed through the proxy.
                        properties:
                          inbound:
                            description: Inbound configures what inbound traffic is
                              routed through the sidecar traffic.sidecar.istio.io/includeInboundPorts
                              defaults to * (all ports)
                            properties:
                              excludedPorts:
                                description: ExcludedPorts to be routed around the
                                  sidecar. .Values.global.proxy.excludeInboundPorts,
                                  defaults to empty list, overridden by traffic.sidecar.istio.io/excludeInboundPorts
                                items:
                                  type: string
                                type: array
                              includedPorts:
                                description: IncludedPorts to be routed through the
                                  sidecar. * or comma separated list of integers .Values.global.proxy.includeInboundPorts,
                                  defaults to * (all ports), overridden by traffic.sidecar.istio.io/includeInboundPorts
                                items:
                                  type: string
                                type: array
                              interceptionMode:
                                description: 'InterceptionMode specifies how traffic
                                  is directed through the sidecar. maps to meshConfig.defaultConfig.interceptionMode,
                                  overridden by sidecar.istio.io/interceptionMode
                                  XXX: currently not configurable through values.yaml'
                                type: string
                            type: object
                          outbound:
                            description: Outbound configures what outbound traffic
                              is routed through the sidecar.
                            properties:
                              excludedIPRanges:
                                description: ExcludedIPRanges specifies which outbound
                                  IP ranges should _not_ be routed through the sidecar.
                                  .Values.global.proxy.excludeIPRanges, overridden
                                  by traffic.sidecar.istio.io/excludeOutboundIPRanges
                                  * or comma separated list of CIDR
                                items:
                                  type: string
                                type: array
                              excludedPorts:
                                description: ExcludedPorts specifies which outbound
                                  ports should _not_ be routed through the sidecar.
                                  .Values.global.proxy.excludeOutboundPorts, overridden
                                  by traffic.sidecar.istio.io/excludeOutboundPorts
                                  comma separated list of integers
                                items:
                                  format: int32
                                  type: integer
                                type: array
                              includedIPRanges:
                                description: IncludedIPRanges specifies which outbound
                                  IP ranges should be routed through the sidecar.
                                  .Values.global.proxy.includeIPRanges, overridden
                                  by traffic.sidecar.istio.io/includeOutboundIPRanges
                                  * or comma separated list of CIDR
                                items:
                                  type: string
                                type: array
                              policy:
                                description: Policy specifies what outbound traffic
                                  is allowed through the sidecar. .Values.global.outboundTrafficPolicy.mode
                                type: string
                            type: object
                        type: object
                    type: object
                  runtime:
                    description: Runtime is used to customize runtime configuration
                      for the sidecar container.
                    properties:
                      readiness:
                        description: Readiness configures the readiness probe behavior
                          for the injected pod.
                        properties:
                          failureThreshold:
                            description: FailureThreshold represents the number of
                              consecutive failures before the container is marked
                              as not ready. .Values.global.proxy.readinessFailureThreshold,
                              overridden by readiness.status.sidecar.istio.io/failureThreshold,
                              defaults to 30
                            format: int32
                            type: integer
                          initialDelaySeconds:
                            description: InitialDelaySeconds specifies the initial
                              delay for the readiness probe .Values.global.proxy.readinessInitialDelaySeconds,
                              overridden by readiness.status.sidecar.istio.io/initialDelaySeconds,
                              defaults to 1
                            format: int32
                            type: integer
                          periodSeconds:
                            description: PeriodSeconds specifies the period over which
                              the probe is checked. .Values.global.proxy.readinessPeriodSeconds,
                              overridden by readiness.status.sidecar.istio.io/periodSeconds,
                              defaults to 2
                            format: int32
                            type: integer
                          rewriteApplicationProbes:
                            description: RewriteApplicationProbes specifies whether
                              or not the injector should rewrite application container
                              probes to be routed through the sidecar. .Values.sidecarInjectorWebhook.rewriteAppHTTPProbe,
                              defaults to false rewrite probes for application pods
                              to route through sidecar
                            type: boolean
                          statusPort:
                            description: 'StatusPort specifies the port number to
                              be used for status. .Values.global.proxy.statusPort,
                              overridden by status.sidecar.istio.io/port, defaults
                              to 15020 Default port for Pilot agent health checks.
                              A value of 0 will disable health checking. XXX: this
                              has no affect on which port is actually used for status.'
                            format: int32
                            type: integer
                        type: object
                      resources:
                        description: Resources configures the resources on the sidecar
                          container.
                        properties:
                          limits:
                            additionalProperties:
                              anyOf:
                              - type: integer
                              - type: string
                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                              x-kubernetes-int-or-string: true
                            description: 'Limits describes the maximum amount of compute
                              resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                            type: object
                          requests:
                            additionalProperties:
                              anyOf:
                              - type: integer
                              - type: string
                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                              x-kubernetes-int-or-string: true
                            description: 'Requests describes the minimum amount of
                              compute resources required. If Requests is omitted for
                              a container, it defaults to Limits if that is explicitly
                              specified, otherwise to an implementation-defined value.
                              More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                            type: object
                        type: object
                    type: object
                type: object
              runtime:
                description: Runtime configuration for pilot (and galley, etc., pre
                  1.2)
                properties:
                  citadel:
                    description: Citadel configures overrides for citadel deployment/pods
                      .Values.security.resources, e.g.
                    properties:
                      deployment:
                        description: Deployment specific overrides
                        properties:
                          autoScaling:
                            description: Autoscaling specifies the configuration for
                              a HorizontalPodAutoscaler to be applied to this deployment.  Null
                              indicates no auto scaling. .Values.*.autoscale* fields
                            properties:
                              maxReplicas:
                                description: upper limit for the number of pods that
                                  can be set by the autoscaler; cannot be smaller
                                  than MinReplicas.
                                format: int32
                                type: integer
                              minReplicas:
                                description: lower limit for the number of pods that
                                  can be set by the autoscaler, default 1.
                                format: int32
                                type: integer
                              targetCPUUtilizationPercentage:
                                description: target average CPU utilization (represented
                                  as a percentage of requested CPU) over all the pods;
                                  if not specified the default autoscaling policy
                                  will be used.
                                format: int32
                                type: integer
                            type: object
                          metadata:
                            description: Metadata specifies additional labels and
                              annotations to be applied to the deployment
                            properties:
                              annotations:
                                additionalProperties:
                                  type: string
                                type: object
                              labels:
                                additionalProperties:
                                  type: string
                                type: object
                            type: object
                          replicas:
                            description: Number of desired pods. This is a pointer
                              to distinguish between explicit zero and not specified.
                              Defaults to 1. .Values.*.replicaCount
                            format: int32
                            type: integer
                          strategy:
                            description: The deployment strategy to use to replace
                              existing pods with new ones. .Values.*.rollingMaxSurge,
                              rollingMaxUnavailable, etc.
                            properties:
                              rollingUpdate:
                                description: 'Rolling update config params. Present
                                  only if DeploymentStrategyType = RollingUpdate.
                                  --- TODO: Update this to follow our convention for
                                  oneOf, whatever we decide it to be.'
                                properties:
                                  maxSurge:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    description: 'The maximum number of pods that
                                      can be scheduled above the desired number of
                                      pods. Value can be an absolute number (ex: 5)
                                      or a percentage of desired pods (ex: 10%). This
                                      can not be 0 if MaxUnavailable is 0. Absolute
                                      number is calculated from percentage by rounding
                                      up. Defaults to 25%. Example: when this is set
                                      to 30%, the new ReplicaSet can be scaled up
                                      immediately when the rolling update starts,
                                      such that the total number of old and new pods
                                      do not exceed 130% of desired pods. Once old
                                      pods have been killed, new ReplicaSet can be
                                      scaled up further, ensuring that total number
                                      of pods running at any time during the update
                                      is at most 130% of desired pods.'
                                    x-kubernetes-int-or-string: true
                                  maxUnavailable:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    description: 'The maximum number of pods that
                                      can be unavailable during the update. Value
                                      can be an absolute number (ex: 5) or a percentage
                                      of desired pods (ex: 10%). Absolute number is
                                      calculated from percentage by rounding down.
                                      This can not be 0 if MaxSurge is 0. Defaults
                                      to 25%. Example: when this is set to 30%, the
                                      old ReplicaSet can be scaled down to 70% of
                                      desired pods immediately when the rolling update
                                      starts. Once new pods are ready, old ReplicaSet
                                      can be scaled down further, followed by scaling
                                      up the new ReplicaSet, ensuring that the total
                                      number of pods available at all times during
                                      the update is at least 70% of desired pods.'
                                    x-kubernetes-int-or-string: true
                                type: object
                              type:
                                description: Type of deployment. Can be "Recreate"
                                  or "RollingUpdate". Default is RollingUpdate.
                                type: string
                            type: object
                        type: object
                      pod:
                        description: Pod specific overrides
                        properties:
                          affinity:
                            description: If specified, the pod's scheduling constraints
                              .Values.podAntiAffinityLabelSelector, podAntiAffinityTermLabelSelector,
                              nodeSelector NodeAffinity is not supported at this time
                              PodAffinity is not supported at this time
                            properties:
                              podAntiAffinity:
                                description: PodAntiAffinity configures anti affinity
                                  for pod scheduling
                                properties:
                                  preferredDuringScheduling:
                                    items:
                                      description: PodAntiAffinityTerm is a simplified
                                        version of corev1.PodAntiAffinityTerm
                                      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. Valid
                                            operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        topologyKey:
                                          description: This pod should be co-located
                                            (affinity) or not co-located (anti-affinity)
                                            with the pods matching the labelSelector
                                            in the specified namespaces, where co-located
                                            is defined as running on a node whose
                                            value of the label with key topologyKey
                                            matches that of any node on which any
                                            of the selected pods is running. Empty
                                            topologyKey is not allowed.
                                          type: string
                                        values:
                                          description: values is an array of string
                                            values. If the operator is In or NotIn,
                                            the values array must be non-empty. If
                                            the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array
                                            is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                  requiredDuringScheduling:
                                    items:
                                      description: PodAntiAffinityTerm is a simplified
                                        version of corev1.PodAntiAffinityTerm
                                      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. Valid
                                            operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        topologyKey:
                                          description: This pod should be co-located
                                            (affinity) or not co-located (anti-affinity)
                                            with the pods matching the labelSelector
                                            in the specified namespaces, where co-located
                                            is defined as running on a node whose
                                            value of the label with key topologyKey
                                            matches that of any node on which any
                                            of the selected pods is running. Empty
                                            topologyKey is not allowed.
                                          type: string
                                        values:
                                          description: values is an array of string
                                            values. If the operator is In or NotIn,
                                            the values array must be non-empty. If
                                            the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array
                                            is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                type: object
                            type: object
                          containers:
                            additionalProperties:
                              description: ContainerConfig to be applied to containers
                                in a pod, in a deployment
                              properties:
                                image:
                                  type: string
                                imagePullPolicy:
                                  description: PullPolicy describes a policy for if/when
                                    to pull a container image
                                  type: string
                                imagePullSecrets:
                                  items:
                                    description: LocalObjectReference contains enough
                                      information to let you locate the referenced
                                      object inside the same namespace.
                                    properties:
                                      name:
                                        description: 'Name of the referent. More info:
                                          https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                          TODO: Add other useful fields. apiVersion,
                                          kind, uid?'
                                        type: string
                                    type: object
                                  type: array
                                imageRegistry:
                                  type: string
                                imageTag:
                                  type: string
                                resources:
                                  description: ResourceRequirements describes the
                                    compute resource requirements.
                                  properties:
                                    limits:
                                      additionalProperties:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                        x-kubernetes-int-or-string: true
                                      description: 'Limits describes the maximum amount
                                        of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                      type: object
                                    requests:
                                      additionalProperties:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                        x-kubernetes-int-or-string: true
                                      description: 'Requests describes the minimum
                                        amount of compute resources required. If Requests
                                        is omitted for a container, it defaults to
                                        Limits if that is explicitly specified, otherwise
                                        to an implementation-defined value. More info:
                                        https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                      type: object
                                  type: object
                              type: object
                            description: 'XXX: is it too cheesy to use ''default''
                              name for defaults?  default would apply to all containers
                              .Values.*.resource, imagePullPolicy, etc.'
                            type: object
                          metadata:
                            description: 'Metadata allows additional annotations/labels
                              to be applied to the pod .Values.*.podAnnotations XXX:
                              currently, additional lables are not supported'
                            properties:
                              annotations:
                                additionalProperties:
                                  type: string
                                type: object
                              labels:
                                additionalProperties:
                                  type: string
                                type: object
                            type: object
                          nodeSelector:
                            additionalProperties:
                              type: string
                            description: 'NodeSelector is a selector which must be
                              true for the pod to fit on a node. Selector which must
                              match a node''s labels for the pod to be scheduled on
                              that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                              .Values.nodeSelector'
                            type: object
                          priorityClassName:
                            description: '.Values.global.priorityClassName XXX: currently,
                              this is only a global setting.  maybe only allow setting
                              in global runtime defaults?'
                            type: string
                          tolerations:
                            description: If specified, the pod's tolerations. .Values.tolerations
                            items:
                              description: The pod this Toleration is attached to
                                tolerates any taint that matches the triple <key,value,effect>
                                using the matching operator <operator>.
                              properties:
                                effect:
                                  description: Effect indicates the taint effect to
                                    match. Empty means match all taint effects. When
                                    specified, allowed values are NoSchedule, PreferNoSchedule
                                    and NoExecute.
                                  type: string
                                key:
                                  description: Key is the taint key that the toleration
                                    applies to. Empty means match all taint keys.
                                    If the key is empty, operator must be Exists;
                                    this combination means to match all values and
                                    all keys.
                                  type: string
                                operator:
                                  description: Operator represents a key's relationship
                                    to the value. Valid operators are Exists and Equal.
                                    Defaults to Equal. Exists is equivalent to wildcard
                                    for value, so that a pod can tolerate all taints
                                    of a particular category.
                                  type: string
                                tolerationSeconds:
                                  description: TolerationSeconds represents the period
                                    of time the toleration (which must be of effect
                                    NoExecute, otherwise this field is ignored) tolerates
                                    the taint. By default, it is not set, which means
                                    tolerate the taint forever (do not evict). Zero
                                    and negative values will be treated as 0 (evict
                                    immediately) by the system.
                                  format: int64
                                  type: integer
                                value:
                                  description: Value is the taint value the toleration
                                    matches to. If the operator is Exists, the value
                                    should be empty, otherwise just a regular string.
                                  type: string
                              type: object
                            type: array
                        type: object
                    type: object
                  defaults:
                    description: Defaults will be merged into specific component config.
                      .Values.global.defaultResources, e.g.
                    properties:
                      container:
                        description: Container overrides to be merged with component
                          specific overrides.
                        properties:
                          imagePullPolicy:
                            description: PullPolicy describes a policy for if/when
                              to pull a container image
                            type: string
                          imagePullSecrets:
                            items:
                              description: LocalObjectReference contains enough information
                                to let you locate the referenced object inside the
                                same namespace.
                              properties:
                                name:
                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                    TODO: Add other useful fields. apiVersion, kind,
                                    uid?'
                                  type: string
                              type: object
                            type: array
                          imageRegistry:
                            type: string
                          imageTag:
                            type: string
                          resources:
                            description: ResourceRequirements describes the compute
                              resource requirements.
                            properties:
                              limits:
                                additionalProperties:
                                  anyOf:
                                  - type: integer
                                  - type: string
                                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                  x-kubernetes-int-or-string: true
                                description: 'Limits describes the maximum amount
                                  of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                type: object
                              requests:
                                additionalProperties:
                                  anyOf:
                                  - type: integer
                                  - type: string
                                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                  x-kubernetes-int-or-string: true
                                description: 'Requests describes the minimum amount
                                  of compute resources required. If Requests is omitted
                                  for a container, it defaults to Limits if that is
                                  explicitly specified, otherwise to an implementation-defined
                                  value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                type: object
                            type: object
                        type: object
                      deployment:
                        description: Deployment defaults
                        properties:
                          disruption:
                            description: '.Values.global.podDisruptionBudget.enabled,
                              if not null XXX: this is currently a global setting,
                              not per component.  perhaps this should only be available
                              on the defaults?'
                            properties:
                              maxUnavailable:
                                anyOf:
                                - type: integer
                                - type: string
                                x-kubernetes-int-or-string: true
                              minAvailable:
                                anyOf:
                                - type: integer
                                - type: string
                                x-kubernetes-int-or-string: true
                            type: object
                        type: object
                      pod:
                        description: Pod defaults
                        properties:
                          nodeSelector:
                            additionalProperties:
                              type: string
                            description: 'NodeSelector is a selector which must be
                              true for the pod to fit on a node. Selector which must
                              match a node''s labels for the pod to be scheduled on
                              that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                              .Values.nodeSelector'
                            type: object
                          priorityClassName:
                            description: '.Values.global.priorityClassName XXX: currently,
                              this is only a global setting.  maybe only allow setting
                              in global runtime defaults?'
                            type: string
                          tolerations:
                            description: If specified, the pod's tolerations. .Values.tolerations
                            items:
                              description: The pod this Toleration is attached to
                                tolerates any taint that matches the triple <key,value,effect>
                                using the matching operator <operator>.
                              properties:
                                effect:
                                  description: Effect indicates the taint effect to
                                    match. Empty means match all taint effects. When
                                    specified, allowed values are NoSchedule, PreferNoSchedule
                                    and NoExecute.
                                  type: string
                                key:
                                  description: Key is the taint key that the toleration
                                    applies to. Empty means match all taint keys.
                                    If the key is empty, operator must be Exists;
                                    this combination means to match all values and
                                    all keys.
                                  type: string
                                operator:
                                  description: Operator represents a key's relationship
                                    to the value. Valid operators are Exists and Equal.
                                    Defaults to Equal. Exists is equivalent to wildcard
                                    for value, so that a pod can tolerate all taints
                                    of a particular category.
                                  type: string
                                tolerationSeconds:
                                  description: TolerationSeconds represents the period
                                    of time the toleration (which must be of effect
                                    NoExecute, otherwise this field is ignored) tolerates
                                    the taint. By default, it is not set, which means
                                    tolerate the taint forever (do not evict). Zero
                                    and negative values will be treated as 0 (evict
                                    immediately) by the system.
                                  format: int64
                                  type: integer
                                value:
                                  description: Value is the taint value the toleration
                                    matches to. If the operator is Exists, the value
                                    should be empty, otherwise just a regular string.
                                  type: string
                              type: object
                            type: array
                        type: object
                    type: object
                  galley:
                    description: Galley configures overrides for galley deployment/pods
                      .Values.galley.resources, e.g.
                    properties:
                      deployment:
                        description: Deployment specific overrides
                        properties:
                          autoScaling:
                            description: Autoscaling specifies the configuration for
                              a HorizontalPodAutoscaler to be applied to this deployment.  Null
                              indicates no auto scaling. .Values.*.autoscale* fields
                            properties:
                              maxReplicas:
                                description: upper limit for the number of pods that
                                  can be set by the autoscaler; cannot be smaller
                                  than MinReplicas.
                                format: int32
                                type: integer
                              minReplicas:
                                description: lower limit for the number of pods that
                                  can be set by the autoscaler, default 1.
                                format: int32
                                type: integer
                              targetCPUUtilizationPercentage:
                                description: target average CPU utilization (represented
                                  as a percentage of requested CPU) over all the pods;
                                  if not specified the default autoscaling policy
                                  will be used.
                                format: int32
                                type: integer
                            type: object
                          metadata:
                            description: Metadata specifies additional labels and
                              annotations to be applied to the deployment
                            properties:
                              annotations:
                                additionalProperties:
                                  type: string
                                type: object
                              labels:
                                additionalProperties:
                                  type: string
                                type: object
                            type: object
                          replicas:
                            description: Number of desired pods. This is a pointer
                              to distinguish between explicit zero and not specified.
                              Defaults to 1. .Values.*.replicaCount
                            format: int32
                            type: integer
                          strategy:
                            description: The deployment strategy to use to replace
                              existing pods with new ones. .Values.*.rollingMaxSurge,
                              rollingMaxUnavailable, etc.
                            properties:
                              rollingUpdate:
                                description: 'Rolling update config params. Present
                                  only if DeploymentStrategyType = RollingUpdate.
                                  --- TODO: Update this to follow our convention for
                                  oneOf, whatever we decide it to be.'
                                properties:
                                  maxSurge:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    description: 'The maximum number of pods that
                                      can be scheduled above the desired number of
                                      pods. Value can be an absolute number (ex: 5)
                                      or a percentage of desired pods (ex: 10%). This
                                      can not be 0 if MaxUnavailable is 0. Absolute
                                      number is calculated from percentage by rounding
                                      up. Defaults to 25%. Example: when this is set
                                      to 30%, the new ReplicaSet can be scaled up
                                      immediately when the rolling update starts,
                                      such that the total number of old and new pods
                                      do not exceed 130% of desired pods. Once old
                                      pods have been killed, new ReplicaSet can be
                                      scaled up further, ensuring that total number
                                      of pods running at any time during the update
                                      is at most 130% of desired pods.'
                                    x-kubernetes-int-or-string: true
                                  maxUnavailable:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    description: 'The maximum number of pods that
                                      can be unavailable during the update. Value
                                      can be an absolute number (ex: 5) or a percentage
                                      of desired pods (ex: 10%). Absolute number is
                                      calculated from percentage by rounding down.
                                      This can not be 0 if MaxSurge is 0. Defaults
                                      to 25%. Example: when this is set to 30%, the
                                      old ReplicaSet can be scaled down to 70% of
                                      desired pods immediately when the rolling update
                                      starts. Once new pods are ready, old ReplicaSet
                                      can be scaled down further, followed by scaling
                                      up the new ReplicaSet, ensuring that the total
                                      number of pods available at all times during
                                      the update is at least 70% of desired pods.'
                                    x-kubernetes-int-or-string: true
                                type: object
                              type:
                                description: Type of deployment. Can be "Recreate"
                                  or "RollingUpdate". Default is RollingUpdate.
                                type: string
                            type: object
                        type: object
                      pod:
                        description: Pod specific overrides
                        properties:
                          affinity:
                            description: If specified, the pod's scheduling constraints
                              .Values.podAntiAffinityLabelSelector, podAntiAffinityTermLabelSelector,
                              nodeSelector NodeAffinity is not supported at this time
                              PodAffinity is not supported at this time
                            properties:
                              podAntiAffinity:
                                description: PodAntiAffinity configures anti affinity
                                  for pod scheduling
                                properties:
                                  preferredDuringScheduling:
                                    items:
                                      description: PodAntiAffinityTerm is a simplified
                                        version of corev1.PodAntiAffinityTerm
                                      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. Valid
                                            operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        topologyKey:
                                          description: This pod should be co-located
                                            (affinity) or not co-located (anti-affinity)
                                            with the pods matching the labelSelector
                                            in the specified namespaces, where co-located
                                            is defined as running on a node whose
                                            value of the label with key topologyKey
                                            matches that of any node on which any
                                            of the selected pods is running. Empty
                                            topologyKey is not allowed.
                                          type: string
                                        values:
                                          description: values is an array of string
                                            values. If the operator is In or NotIn,
                                            the values array must be non-empty. If
                                            the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array
                                            is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                  requiredDuringScheduling:
                                    items:
                                      description: PodAntiAffinityTerm is a simplified
                                        version of corev1.PodAntiAffinityTerm
                                      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. Valid
                                            operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        topologyKey:
                                          description: This pod should be co-located
                                            (affinity) or not co-located (anti-affinity)
                                            with the pods matching the labelSelector
                                            in the specified namespaces, where co-located
                                            is defined as running on a node whose
                                            value of the label with key topologyKey
                                            matches that of any node on which any
                                            of the selected pods is running. Empty
                                            topologyKey is not allowed.
                                          type: string
                                        values:
                                          description: values is an array of string
                                            values. If the operator is In or NotIn,
                                            the values array must be non-empty. If
                                            the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array
                                            is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                type: object
                            type: object
                          containers:
                            additionalProperties:
                              description: ContainerConfig to be applied to containers
                                in a pod, in a deployment
                              properties:
                                image:
                                  type: string
                                imagePullPolicy:
                                  description: PullPolicy describes a policy for if/when
                                    to pull a container image
                                  type: string
                                imagePullSecrets:
                                  items:
                                    description: LocalObjectReference contains enough
                                      information to let you locate the referenced
                                      object inside the same namespace.
                                    properties:
                                      name:
                                        description: 'Name of the referent. More info:
                                          https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                          TODO: Add other useful fields. apiVersion,
                                          kind, uid?'
                                        type: string
                                    type: object
                                  type: array
                                imageRegistry:
                                  type: string
                                imageTag:
                                  type: string
                                resources:
                                  description: ResourceRequirements describes the
                                    compute resource requirements.
                                  properties:
                                    limits:
                                      additionalProperties:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                        x-kubernetes-int-or-string: true
                                      description: 'Limits describes the maximum amount
                                        of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                      type: object
                                    requests:
                                      additionalProperties:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                        x-kubernetes-int-or-string: true
                                      description: 'Requests describes the minimum
                                        amount of compute resources required. If Requests
                                        is omitted for a container, it defaults to
                                        Limits if that is explicitly specified, otherwise
                                        to an implementation-defined value. More info:
                                        https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                      type: object
                                  type: object
                              type: object
                            description: 'XXX: is it too cheesy to use ''default''
                              name for defaults?  default would apply to all containers
                              .Values.*.resource, imagePullPolicy, etc.'
                            type: object
                          metadata:
                            description: 'Metadata allows additional annotations/labels
                              to be applied to the pod .Values.*.podAnnotations XXX:
                              currently, additional lables are not supported'
                            properties:
                              annotations:
                                additionalProperties:
                                  type: string
                                type: object
                              labels:
                                additionalProperties:
                                  type: string
                                type: object
                            type: object
                          nodeSelector:
                            additionalProperties:
                              type: string
                            description: 'NodeSelector is a selector which must be
                              true for the pod to fit on a node. Selector which must
                              match a node''s labels for the pod to be scheduled on
                              that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                              .Values.nodeSelector'
                            type: object
                          priorityClassName:
                            description: '.Values.global.priorityClassName XXX: currently,
                              this is only a global setting.  maybe only allow setting
                              in global runtime defaults?'
                            type: string
                          tolerations:
                            description: If specified, the pod's tolerations. .Values.tolerations
                            items:
                              description: The pod this Toleration is attached to
                                tolerates any taint that matches the triple <key,value,effect>
                                using the matching operator <operator>.
                              properties:
                                effect:
                                  description: Effect indicates the taint effect to
                                    match. Empty means match all taint effects. When
                                    specified, allowed values are NoSchedule, PreferNoSchedule
                                    and NoExecute.
                                  type: string
                                key:
                                  description: Key is the taint key that the toleration
                                    applies to. Empty means match all taint keys.
                                    If the key is empty, operator must be Exists;
                                    this combination means to match all values and
                                    all keys.
                                  type: string
                                operator:
                                  description: Operator represents a key's relationship
                                    to the value. Valid operators are Exists and Equal.
                                    Defaults to Equal. Exists is equivalent to wildcard
                                    for value, so that a pod can tolerate all taints
                                    of a particular category.
                                  type: string
                                tolerationSeconds:
                                  description: TolerationSeconds represents the period
                                    of time the toleration (which must be of effect
                                    NoExecute, otherwise this field is ignored) tolerates
                                    the taint. By default, it is not set, which means
                                    tolerate the taint forever (do not evict). Zero
                                    and negative values will be treated as 0 (evict
                                    immediately) by the system.
                                  format: int64
                                  type: integer
                                value:
                                  description: Value is the taint value the toleration
                                    matches to. If the operator is Exists, the value
                                    should be empty, otherwise just a regular string.
                                  type: string
                              type: object
                            type: array
                        type: object
                    type: object
                  pilot:
                    description: Pilot configures overrides for pilot/istiod deployment/pods
                      .Values.pilot.resources, e.g.
                    properties:
                      deployment:
                        description: Deployment specific overrides
                        properties:
                          autoScaling:
                            description: Autoscaling specifies the configuration for
                              a HorizontalPodAutoscaler to be applied to this deployment.  Null
                              indicates no auto scaling. .Values.*.autoscale* fields
                            properties:
                              maxReplicas:
                                description: upper limit for the number of pods that
                                  can be set by the autoscaler; cannot be smaller
                                  than MinReplicas.
                                format: int32
                                type: integer
                              minReplicas:
                                description: lower limit for the number of pods that
                                  can be set by the autoscaler, default 1.
                                format: int32
                                type: integer
                              targetCPUUtilizationPercentage:
                                description: target average CPU utilization (represented
                                  as a percentage of requested CPU) over all the pods;
                                  if not specified the default autoscaling policy
                                  will be used.
                                format: int32
                                type: integer
                            type: object
                          metadata:
                            description: Metadata specifies additional labels and
                              annotations to be applied to the deployment
                            properties:
                              annotations:
                                additionalProperties:
                                  type: string
                                type: object
                              labels:
                                additionalProperties:
                                  type: string
                                type: object
                            type: object
                          replicas:
                            description: Number of desired pods. This is a pointer
                              to distinguish between explicit zero and not specified.
                              Defaults to 1. .Values.*.replicaCount
                            format: int32
                            type: integer
                          strategy:
                            description: The deployment strategy to use to replace
                              existing pods with new ones. .Values.*.rollingMaxSurge,
                              rollingMaxUnavailable, etc.
                            properties:
                              rollingUpdate:
                                description: 'Rolling update config params. Present
                                  only if DeploymentStrategyType = RollingUpdate.
                                  --- TODO: Update this to follow our convention for
                                  oneOf, whatever we decide it to be.'
                                properties:
                                  maxSurge:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    description: 'The maximum number of pods that
                                      can be scheduled above the desired number of
                                      pods. Value can be an absolute number (ex: 5)
                                      or a percentage of desired pods (ex: 10%). This
                                      can not be 0 if MaxUnavailable is 0. Absolute
                                      number is calculated from percentage by rounding
                                      up. Defaults to 25%. Example: when this is set
                                      to 30%, the new ReplicaSet can be scaled up
                                      immediately when the rolling update starts,
                                      such that the total number of old and new pods
                                      do not exceed 130% of desired pods. Once old
                                      pods have been killed, new ReplicaSet can be
                                      scaled up further, ensuring that total number
                                      of pods running at any time during the update
                                      is at most 130% of desired pods.'
                                    x-kubernetes-int-or-string: true
                                  maxUnavailable:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    description: 'The maximum number of pods that
                                      can be unavailable during the update. Value
                                      can be an absolute number (ex: 5) or a percentage
                                      of desired pods (ex: 10%). Absolute number is
                                      calculated from percentage by rounding down.
                                      This can not be 0 if MaxSurge is 0. Defaults
                                      to 25%. Example: when this is set to 30%, the
                                      old ReplicaSet can be scaled down to 70% of
                                      desired pods immediately when the rolling update
                                      starts. Once new pods are ready, old ReplicaSet
                                      can be scaled down further, followed by scaling
                                      up the new ReplicaSet, ensuring that the total
                                      number of pods available at all times during
                                      the update is at least 70% of desired pods.'
                                    x-kubernetes-int-or-string: true
                                type: object
                              type:
                                description: Type of deployment. Can be "Recreate"
                                  or "RollingUpdate". Default is RollingUpdate.
                                type: string
                            type: object
                        type: object
                      pod:
                        description: Pod specific overrides
                        properties:
                          affinity:
                            description: If specified, the pod's scheduling constraints
                              .Values.podAntiAffinityLabelSelector, podAntiAffinityTermLabelSelector,
                              nodeSelector NodeAffinity is not supported at this time
                              PodAffinity is not supported at this time
                            properties:
                              podAntiAffinity:
                                description: PodAntiAffinity configures anti affinity
                                  for pod scheduling
                                properties:
                                  preferredDuringScheduling:
                                    items:
                                      description: PodAntiAffinityTerm is a simplified
                                        version of corev1.PodAntiAffinityTerm
                                      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. Valid
                                            operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        topologyKey:
                                          description: This pod should be co-located
                                            (affinity) or not co-located (anti-affinity)
                                            with the pods matching the labelSelector
                                            in the specified namespaces, where co-located
                                            is defined as running on a node whose
                                            value of the label with key topologyKey
                                            matches that of any node on which any
                                            of the selected pods is running. Empty
                                            topologyKey is not allowed.
                                          type: string
                                        values:
                                          description: values is an array of string
                                            values. If the operator is In or NotIn,
                                            the values array must be non-empty. If
                                            the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array
                                            is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                  requiredDuringScheduling:
                                    items:
                                      description: PodAntiAffinityTerm is a simplified
                                        version of corev1.PodAntiAffinityTerm
                                      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. Valid
                                            operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        topologyKey:
                                          description: This pod should be co-located
                                            (affinity) or not co-located (anti-affinity)
                                            with the pods matching the labelSelector
                                            in the specified namespaces, where co-located
                                            is defined as running on a node whose
                                            value of the label with key topologyKey
                                            matches that of any node on which any
                                            of the selected pods is running. Empty
                                            topologyKey is not allowed.
                                          type: string
                                        values:
                                          description: values is an array of string
                                            values. If the operator is In or NotIn,
                                            the values array must be non-empty. If
                                            the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array
                                            is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                type: object
                            type: object
                          containers:
                            additionalProperties:
                              description: ContainerConfig to be applied to containers
                                in a pod, in a deployment
                              properties:
                                image:
                                  type: string
                                imagePullPolicy:
                                  description: PullPolicy describes a policy for if/when
                                    to pull a container image
                                  type: string
                                imagePullSecrets:
                                  items:
                                    description: LocalObjectReference contains enough
                                      information to let you locate the referenced
                                      object inside the same namespace.
                                    properties:
                                      name:
                                        description: 'Name of the referent. More info:
                                          https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                          TODO: Add other useful fields. apiVersion,
                                          kind, uid?'
                                        type: string
                                    type: object
                                  type: array
                                imageRegistry:
                                  type: string
                                imageTag:
                                  type: string
                                resources:
                                  description: ResourceRequirements describes the
                                    compute resource requirements.
                                  properties:
                                    limits:
                                      additionalProperties:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                        x-kubernetes-int-or-string: true
                                      description: 'Limits describes the maximum amount
                                        of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                      type: object
                                    requests:
                                      additionalProperties:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                        x-kubernetes-int-or-string: true
                                      description: 'Requests describes the minimum
                                        amount of compute resources required. If Requests
                                        is omitted for a container, it defaults to
                                        Limits if that is explicitly specified, otherwise
                                        to an implementation-defined value. More info:
                                        https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                      type: object
                                  type: object
                              type: object
                            description: 'XXX: is it too cheesy to use ''default''
                              name for defaults?  default would apply to all containers
                              .Values.*.resource, imagePullPolicy, etc.'
                            type: object
                          metadata:
                            description: 'Metadata allows additional annotations/labels
                              to be applied to the pod .Values.*.podAnnotations XXX:
                              currently, additional lables are not supported'
                            properties:
                              annotations:
                                additionalProperties:
                                  type: string
                                type: object
                              labels:
                                additionalProperties:
                                  type: string
                                type: object
                            type: object
                          nodeSelector:
                            additionalProperties:
                              type: string
                            description: 'NodeSelector is a selector which must be
                              true for the pod to fit on a node. Selector which must
                              match a node''s labels for the pod to be scheduled on
                              that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                              .Values.nodeSelector'
                            type: object
                          priorityClassName:
                            description: '.Values.global.priorityClassName XXX: currently,
                              this is only a global setting.  maybe only allow setting
                              in global runtime defaults?'
                            type: string
                          tolerations:
                            description: If specified, the pod's tolerations. .Values.tolerations
                            items:
                              description: The pod this Toleration is attached to
                                tolerates any taint that matches the triple <key,value,effect>
                                using the matching operator <operator>.
                              properties:
                                effect:
                                  description: Effect indicates the taint effect to
                                    match. Empty means match all taint effects. When
                                    specified, allowed values are NoSchedule, PreferNoSchedule
                                    and NoExecute.
                                  type: string
                                key:
                                  description: Key is the taint key that the toleration
                                    applies to. Empty means match all taint keys.
                                    If the key is empty, operator must be Exists;
                                    this combination means to match all values and
                                    all keys.
                                  type: string
                                operator:
                                  description: Operator represents a key's relationship
                                    to the value. Valid operators are Exists and Equal.
                                    Defaults to Equal. Exists is equivalent to wildcard
                                    for value, so that a pod can tolerate all taints
                                    of a particular category.
                                  type: string
                                tolerationSeconds:
                                  description: TolerationSeconds represents the period
                                    of time the toleration (which must be of effect
                                    NoExecute, otherwise this field is ignored) tolerates
                                    the taint. By default, it is not set, which means
                                    tolerate the taint forever (do not evict). Zero
                                    and negative values will be treated as 0 (evict
                                    immediately) by the system.
                                  format: int64
                                  type: integer
                                value:
                                  description: Value is the taint value the toleration
                                    matches to. If the operator is Exists, the value
                                    should be empty, otherwise just a regular string.
                                  type: string
                              type: object
                            type: array
                        type: object
                    type: object
                type: object
              security:
                description: Security configures aspects of security for the control
                  plane.
                properties:
                  mutualTLS:
                    description: MutualTLS configures mutual TLS for the control plane
                      and mesh
                    properties:
                      auto:
                        description: Auto configures the mesh to automatically detect
                          whether or not mutual TLS is required for a specific connection.
                          .Values.global.mtls.auto
                        type: boolean
                      certificateAuthority:
                        description: CertificateAuthority configures the certificate
                          authority used by the control plane to create and sign client
                          certs and server keys.
                        properties:
                          custom:
                            description: Custom is the configuration for a custom
                              certificate authority.
                            properties:
                              address:
                                description: 'Address is the grpc address for an Istio
                                  compatible certificate authority endpoint. .Values.global.caAddress
                                  XXX: assumption is this is a grpc endpoint that
                                  provides methods like istio.v1.auth.IstioCertificateService/CreateCertificate'
                                type: string
                            type: object
                          istiod:
                            description: Istiod is the configuration for Istio's internal
                              certificate authority implementation. each of these
                              produces a CAEndpoint, i.e. CA_ADDR
                            properties:
                              privateKey:
                                description: PrivateKey configures istiod to use a
                                  user specified private key/cert when signing certificates.
                                properties:
                                  certChainFile:
                                    description: hard coded to cert-chain.pem
                                    type: string
                                  encryptionSecret:
                                    description: hard coded to use a secret named
                                      cacerts
                                    type: string
                                  rootCADir:
                                    description: 'ROOT_CA_DIR, defaults to /etc/cacerts
                                      Mount directory for encryption secret XXX: currently,
                                      not configurable in the charts'
                                    type: string
                                  rootCertFile:
                                    description: hard coded to root-cert.pem
                                    type: string
                                  signingCertFile:
                                    description: hard coded to ca-cert.pem
                                    type: string
                                  signingKeyFile:
                                    description: hard coded to ca-key.pem
                                    type: string
                                type: object
                              selfSigned:
                                description: SelfSigned configures istiod to generate
                                  and use a self-signed certificate for the root.
                                properties:
                                  checkPeriod:
                                    description: CheckPeriod is the interval with
                                      which certificate is checked for rotation env
                                      CITADEL_SELF_SIGNED_ROOT_CERT_CHECK_INTERVAL
                                      default is 1 hour, zero or negative value disables
                                      cert rotation
                                    type: string
                                  enableJitter:
                                    description: EnableJitter to use jitter for cert
                                      rotation env CITADEL_ENABLE_JITTER_FOR_ROOT_CERT_ROTATOR
                                      defaults to true
                                    type: boolean
                                  gracePeriod:
                                    description: GracePeriod percentile for self-signed
                                      cert env CITADEL_SELF_SIGNED_ROOT_CERT_GRACE_PERIOD_PERCENTILE
                                      default is 20%
                                    type: string
                                  org:
                                    description: 'Org is the Org value in the certificate.
                                      XXX: currently uses TrustDomain.  I don''t think
                                      this is configurable.'
                                    type: string
                                  ttl:
                                    description: TTL for self-signed root certificate
                                      env CITADEL_SELF_SIGNED_CA_CERT_TTL default
                                      is 10 years
                                    type: string
                                type: object
                              type:
                                description: Type of certificate signer to use.
                                type: string
                              workloadCertTTLDefault:
                                description: WorkloadCertTTLDefault is the default
                                  TTL for generated workload certificates.  Used if
                                  not specified in CSR (<= 0) env DEFAULT_WORKLOAD_CERT_TTL,
                                  1.6 --workload-cert-ttl, citadel, pre-1.6 defaults
                                  to 24 hours
                                type: string
                              workloadCertTTLMax:
                                description: WorkloadCertTTLMax is the maximum TTL
                                  for generated workload certificates. env MAX_WORKLOAD_CERT_TTL
                                  --max-workload-cert-ttl, citadel, pre-1.6 defaults
                                  to 90 days
                                type: string
                            type: object
                          type:
                            description: Type is the certificate authority to use.
                            type: string
                        type: object
                      controlPlane:
                        description: ControlPlane configures mutual TLS for control
                          plane communication.
                        properties:
                          certProvider:
                            description: CertProvider is the certificate authority
                              used to generate the serving certificates for the control
                              plane components. .Values.global.pilotCertProvider Provider
                              used to generate serving certs for istiod (pilot)
                            type: string
                          enable:
                            description: Enable mutual TLS for the control plane components.
                              .Values.global.controlPlaneSecurityEnabled
                            type: boolean
                        type: object
                      enable:
                        description: Enable mutual TLS by default. .Values.global.mtls.enabled
                        type: boolean
                      identity:
                        description: Identity configures the types of user tokens
                          used by clients.
                        properties:
                          kubernetes:
                            description: Kubernetes configures istiod to use default
                              Kubernetes service account tokens to identify users.
                            type: object
                          thirdParty:
                            description: ThirdParty configures istiod to use a third-party
                              token provider for identifying users. (basically uses
                              a custom audience, e.g. istio-ca)
                            properties:
                              audience:
                                description: Audience is the audience for whom the
                                  token is intended. env AUDIENCE .Values.global.sds.token.aud,
                                  defaults to istio-ca
                                type: string
                              issuer:
                                description: Issuer is the URL of the issuer. env
                                  TOKEN_ISSUER, defaults to iss in specified token
                                  only supported in 1.6+
                                type: string
                              tokenPath:
                                description: 'TokenPath is the path to the token used
                                  to identify the workload. default /var/run/secrets/tokens/istio-token
                                  XXX: projects service account token with specified
                                  audience (istio-ca) XXX: not configurable'
                                type: string
                            type: object
                          type:
                            description: Type is the type of identity tokens being
                              used. .Values.global.jwtPolicy
                            type: string
                        type: object
                      trust:
                        description: Trust configures trust aspects associated with
                          mutual TLS clients.
                        properties:
                          additionalDomains:
                            description: AdditionalDomains are additional SPIFFE trust
                              domains that are accepted as trusted. .Values.global.trustDomainAliases,
                              maps to trustDomainAliases  Any service with the identity
                              "td1/ns/foo/sa/a-service-account", "td2/ns/foo/sa/a-service-account",  or
                              "td3/ns/foo/sa/a-service-account" will be treated the
                              same in the Istio mesh.
                            items:
                              type: string
                            type: array
                          domain:
                            description: Domain specifies the trust domain to be used
                              by the mesh. .Values.global.trustDomain, maps to trustDomain
                              The trust domain corresponds to the trust root of a
                              system. Refer to https://github.com/spiffe/spiffe/blob/master/standards/SPIFFE-ID.md#21-trust-domain
                            type: string
                        type: object
                    type: object
                type: object
              telemetry:
                description: Telemetry configures telemetry for the mesh. .Values.mixer.telemetry.enabled,
                  true if not null.  1.6, .Values.telemetry.enabled
                properties:
                  istiod:
                    description: Istiod represents istiod, v2 telemetry
                    properties:
                      accessLogTelemetryFilter:
                        description: AccessLogTelemetryFilter configures the access
                          logging filter for v2 telemetry. .Values.telemetry.v2.accessLogPolicy.enabled
                        properties:
                          logWindowDuration:
                            description: LogWindoDuration configures the log window
                              duration for access logs. defaults to 43200s To reduce
                              the number of successful logs, default log window duration
                              is set to 12 hours.
                            type: string
                        type: object
                      metadataExchange:
                        description: MetadataExchange configuration for v2 telemetry.
                          always enabled
                        properties:
                          wasmEnabled:
                            description: WASMEnabled for metadata exchange. .Values.telemetry.v2.metadataExchange.wasmEnabled
                              Indicates whether to enable WebAssembly runtime for
                              metadata exchange filter.
                            type: boolean
                        type: object
                      prometheusFilter:
                        description: 'PrometheusFilter configures the prometheus filter
                          for v2 telemetry. .Values.telemetry.v2.prometheus.enabled
                          XXX: should this be defined through prometheus add-on, as
                          opposed to here?'
                        properties:
                          scrape:
                            description: Scrape metrics from the pod if true. defaults
                              to true .Values.meshConfig.enablePrometheusMerge
                            type: boolean
                          wasmEnabled:
                            description: WASMEnabled for prometheus filter. Indicates
                              whether to enable WebAssembly runtime for stats filter.
                              .Values.telemetry.v2.prometheus.wasmEnabled
                            type: boolean
                        type: object
                      stackDriverFilter:
                        description: 'StackDriverFilter configures the stackdriver
                          filter for v2 telemetry. .Values.telemetry.v2.stackdriver.enabled
                          XXX: should this be defined through stackdriver add-on,
                          as opposed to here?'
                        properties:
                          configOverride:
                            additionalProperties:
                              type: string
                            type: object
                          disableOutbound:
                            type: boolean
                          logging:
                            description: all default to false
                            type: boolean
                          monitoring:
                            type: boolean
                          topology:
                            type: boolean
                        type: object
                    type: object
                  mixer:
                    description: Mixer represents legacy, v1 telemetry. implies .Values.telemetry.v1.enabled,
                      if not null
                    properties:
                      adapters:
                        description: Adapters configures the adapters used by mixer
                          telemetry.
                        properties:
                          kubernetesenv:
                            description: KubernetesEnv enables support for the kubernetesenv
                              adapter. .Values.mixer.adapters.kubernetesenv.enabled,
                              defaults to true
                            type: boolean
                          prometheus:
                            description: 'Prometheus enables and configures the prometheus
                              adapter. .Values.mixer.adapters.prometheus.enabled,
                              defaults to true (non-null) XXX: should this be defined
                              through prometheus add-on, as opposed to here?'
                            properties:
                              metricsExpiryDuration:
                                description: MetricsExpiryDuration is the duration
                                  to hold metrics. .Values.mixer.adapters.prometheus.metricsExpiryDuration,
                                  defaults to 10m
                                type: string
                            type: object
                          stackdriver:
                            description: 'Stackdriver enables and configures the stackdriver
                              apdater. .Values.mixer.adapters.stackdriver.enabled,
                              defaults to false (null) XXX: should this be defined
                              through stackdriver add-on, as opposed to here?'
                            properties:
                              auth:
                                description: Auth configuration for stackdriver adapter
                                properties:
                                  apiKey:
                                    description: APIKey use the specified key. .Values.mixer.adapters.stackdriver.auth.apiKey
                                    type: string
                                  appCredentials:
                                    description: AppCredentials if true, use default
                                      app credentials. .Values.mixer.adapters.stackdriver.auth.appCredentials,
                                      defaults to false
                                    type: boolean
                                  serviceAccountPath:
                                    description: ServiceAccountPath use the path to
                                      the service account. .Values.mixer.adapters.stackdriver.auth.serviceAccountPath
                                    type: string
                                type: object
                              enableContextGraph:
                                description: EnableContextGraph for stackdriver adapter
                                  .Values.mixer.adapters.stackdriver.contextGraph.enabled,
                                  defaults to false
                                type: boolean
                              enableLogging:
                                description: EnableLogging for stackdriver adapter
                                  .Values.mixer.adapters.stackdriver.logging.enabled,
                                  defaults to true
                                type: boolean
                              enableMetrics:
                                description: EnableMetrics for stackdriver adapter
                                  .Values.mixer.adapters.stackdriver.metrics.enabled,
                                  defaults to true
                                type: boolean
                              tracer:
                                description: Tracer configuration for stackdriver
                                  adapter .Values.mixer.adapters.stackdriver.tracer.enabled,
                                  defaults to false (null)
                                properties:
                                  sampleProbability:
                                    description: SampleProbability to use for tracer
                                      data. .Values.mixer.adapters.stackdriver.tracer.sampleProbability
                                    type: integer
                                type: object
                            type: object
                          stdio:
                            description: Stdio enables and configures the stdio adapter.
                              .Values.mixer.adapters.stdio.enabled, defaults to false
                              (null)
                            properties:
                              outputAsJSON:
                                description: OutputAsJSON if true. .Values.mixer.adapters.stdio.outputAsJson,
                                  defaults to false
                                type: boolean
                            type: object
                          useAdapterCRDs:
                            description: 'UseAdapterCRDs specifies whether or not
                              mixer should support deprecated CRDs. .Values.mixer.adapters.useAdapterCRDs,
                              removed in istio 1.4, defaults to false XXX: i think
                              this can be removed completely'
                            type: boolean
                        type: object
                      batching:
                        description: Batching settings used when sending telemetry.
                        properties:
                          maxEntries:
                            description: MaxEntries represents the maximum number
                              of entries to collect before sending them to mixer.
                              .Values.mixer.telemetry.reportBatchMaxEntries, maps
                              to MeshConfig.reportBatchMaxEntries Set reportBatchMaxEntries
                              to 0 to use the default batching behavior (i.e., every
                              100 requests). A positive value indicates the number
                              of requests that are batched before telemetry data is
                              sent to the mixer server
                            format: int32
                            type: integer
                          maxTime:
                            description: MaxTime represents the maximum amount of
                              time to hold entries before sending them to mixer. .Values.mixer.telemetry.reportBatchMaxTime,
                              maps to MeshConfig.reportBatchMaxTime Set reportBatchMaxTime
                              to 0 to use the default batching behavior (i.e., every
                              1 second). A positive time value indicates the maximum
                              wait time since the last request will telemetry data
                              be batched before being sent to the mixer server
                            type: string
                        type: object
                      runtime:
                        description: Runtime configuration to apply to the mixer telemetry
                          deployment.
                        properties:
                          deployment:
                            description: Deployment specific overrides
                            properties:
                              autoScaling:
                                description: Autoscaling specifies the configuration
                                  for a HorizontalPodAutoscaler to be applied to this
                                  deployment.  Null indicates no auto scaling. .Values.*.autoscale*
                                  fields
                                properties:
                                  maxReplicas:
                                    description: upper limit for the number of pods
                                      that can be set by the autoscaler; cannot be
                                      smaller than MinReplicas.
                                    format: int32
                                    type: integer
                                  minReplicas:
                                    description: lower limit for the number of pods
                                      that can be set by the autoscaler, default 1.
                                    format: int32
                                    type: integer
                                  targetCPUUtilizationPercentage:
                                    description: target average CPU utilization (represented
                                      as a percentage of requested CPU) over all the
                                      pods; if not specified the default autoscaling
                                      policy will be used.
                                    format: int32
                                    type: integer
                                type: object
                              metadata:
                                description: Metadata specifies additional labels
                                  and annotations to be applied to the deployment
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                type: object
                              replicas:
                                description: Number of desired pods. This is a pointer
                                  to distinguish between explicit zero and not specified.
                                  Defaults to 1. .Values.*.replicaCount
                                format: int32
                                type: integer
                              strategy:
                                description: The deployment strategy to use to replace
                                  existing pods with new ones. .Values.*.rollingMaxSurge,
                                  rollingMaxUnavailable, etc.
                                properties:
                                  rollingUpdate:
                                    description: 'Rolling update config params. Present
                                      only if DeploymentStrategyType = RollingUpdate.
                                      --- TODO: Update this to follow our convention
                                      for oneOf, whatever we decide it to be.'
                                    properties:
                                      maxSurge:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        description: 'The maximum number of pods that
                                          can be scheduled above the desired number
                                          of pods. Value can be an absolute number
                                          (ex: 5) or a percentage of desired pods
                                          (ex: 10%). This can not be 0 if MaxUnavailable
                                          is 0. Absolute number is calculated from
                                          percentage by rounding up. Defaults to 25%.
                                          Example: when this is set to 30%, the new
                                          ReplicaSet can be scaled up immediately
                                          when the rolling update starts, such that
                                          the total number of old and new pods do
                                          not exceed 130% of desired pods. Once old
                                          pods have been killed, new ReplicaSet can
                                          be scaled up further, ensuring that total
                                          number of pods running at any time during
                                          the update is at most 130% of desired pods.'
                                        x-kubernetes-int-or-string: true
                                      maxUnavailable:
                                        anyOf:
                                        - type: integer
                                        - type: string
                                        description: 'The maximum number of pods that
                                          can be unavailable during the update. Value
                                          can be an absolute number (ex: 5) or a percentage
                                          of desired pods (ex: 10%). Absolute number
                                          is calculated from percentage by rounding
                                          down. This can not be 0 if MaxSurge is 0.
                                          Defaults to 25%. Example: when this is set
                                          to 30%, the old ReplicaSet can be scaled
                                          down to 70% of desired pods immediately
                                          when the rolling update starts. Once new
                                          pods are ready, old ReplicaSet can be scaled
                                          down further, followed by scaling up the
                                          new ReplicaSet, ensuring that the total
                                          number of pods available at all times during
                                          the update is at least 70% of desired pods.'
                                        x-kubernetes-int-or-string: true
                                    type: object
                                  type:
                                    description: Type of deployment. Can be "Recreate"
                                      or "RollingUpdate". Default is RollingUpdate.
                                    type: string
                                type: object
                            type: object
                          pod:
                            description: Pod specific overrides
                            properties:
                              affinity:
                                description: If specified, the pod's scheduling constraints
                                  .Values.podAntiAffinityLabelSelector, podAntiAffinityTermLabelSelector,
                                  nodeSelector NodeAffinity is not supported at this
                                  time PodAffinity is not supported at this time
                                properties:
                                  podAntiAffinity:
                                    description: PodAntiAffinity configures anti affinity
                                      for pod scheduling
                                    properties:
                                      preferredDuringScheduling:
                                        items:
                                          description: PodAntiAffinityTerm is a simplified
                                            version of corev1.PodAntiAffinityTerm
                                          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. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            topologyKey:
                                              description: This pod should be co-located
                                                (affinity) or not co-located (anti-affinity)
                                                with the pods matching the labelSelector
                                                in the specified namespaces, where
                                                co-located is defined as running on
                                                a node whose value of the label with
                                                key topologyKey matches that of any
                                                node on which any of the selected
                                                pods is running. Empty topologyKey
                                                is not allowed.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                      requiredDuringScheduling:
                                        items:
                                          description: PodAntiAffinityTerm is a simplified
                                            version of corev1.PodAntiAffinityTerm
                                          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. Valid
                                                operators are In, NotIn, Exists and
                                                DoesNotExist.
                                              type: string
                                            topologyKey:
                                              description: This pod should be co-located
                                                (affinity) or not co-located (anti-affinity)
                                                with the pods matching the labelSelector
                                                in the specified namespaces, where
                                                co-located is defined as running on
                                                a node whose value of the label with
                                                key topologyKey matches that of any
                                                node on which any of the selected
                                                pods is running. Empty topologyKey
                                                is not allowed.
                                              type: string
                                            values:
                                              description: values is an array of string
                                                values. If the operator is In or NotIn,
                                                the values array must be non-empty.
                                                If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This
                                                array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                    type: object
                                type: object
                              containers:
                                additionalProperties:
                                  description: ContainerConfig to be applied to containers
                                    in a pod, in a deployment
                                  properties:
                                    image:
                                      type: string
                                    imagePullPolicy:
                                      description: PullPolicy describes a policy for
                                        if/when to pull a container image
                                      type: string
                                    imagePullSecrets:
                                      items:
                                        description: LocalObjectReference contains
                                          enough information to let you locate the
                                          referenced object inside the same namespace.
                                        properties:
                                          name:
                                            description: 'Name of the referent. More
                                              info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                              TODO: Add other useful fields. apiVersion,
                                              kind, uid?'
                                            type: string
                                        type: object
                                      type: array
                                    imageRegistry:
                                      type: string
                                    imageTag:
                                      type: string
                                    resources:
                                      description: ResourceRequirements describes
                                        the compute resource requirements.
                                      properties:
                                        limits:
                                          additionalProperties:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          description: 'Limits describes the maximum
                                            amount of compute resources allowed. More
                                            info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                          type: object
                                        requests:
                                          additionalProperties:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          description: 'Requests describes the minimum
                                            amount of compute resources required.
                                            If Requests is omitted for a container,
                                            it defaults to Limits if that is explicitly
                                            specified, otherwise to an implementation-defined
                                            value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                          type: object
                                      type: object
                                  type: object
                                description: 'XXX: is it too cheesy to use ''default''
                                  name for defaults?  default would apply to all containers
                                  .Values.*.resource, imagePullPolicy, etc.'
                                type: object
                              metadata:
                                description: 'Metadata allows additional annotations/labels
                                  to be applied to the pod .Values.*.podAnnotations
                                  XXX: currently, additional lables are not supported'
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    type: object
                                  labels:
                                    additionalProperties:
                                      type: string
                                    type: object
                                type: object
                              nodeSelector:
                                additionalProperties:
                                  type: string
                                description: 'NodeSelector is a selector which must
                                  be true for the pod to fit on a node. Selector which
                                  must match a node''s labels for the pod to be scheduled
                                  on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
                                  .Values.nodeSelector'
                                type: object
                              priorityClassName:
                                description: '.Values.global.priorityClassName XXX:
                                  currently, this is only a global setting.  maybe
                                  only allow setting in global runtime defaults?'
                                type: string
                              tolerations:
                                description: If specified, the pod's tolerations.
                                  .Values.tolerations
                                items:
                                  description: The pod this Toleration is attached
                                    to tolerates any taint that matches the triple
                                    <key,value,effect> using the matching operator
                                    <operator>.
                                  properties:
                                    effect:
                                      description: Effect indicates the taint effect
                                        to match. Empty means match all taint effects.
                                        When specified, allowed values are NoSchedule,
                                        PreferNoSchedule and NoExecute.
                                      type: string
                                    key:
                                      description: Key is the taint key that the toleration
                                        applies to. Empty means match all taint keys.
                                        If the key is empty, operator must be Exists;
                                        this combination means to match all values
                                        and all keys.
                                      type: string
                                    operator:
                                      description: Operator represents a key's relationship
                                        to the value. Valid operators are Exists and
                                        Equal. Defaults to Equal. Exists is equivalent
                                        to wildcard for value, so that a pod can tolerate
                                        all taints of a particular category.
                                      type: string
                                    tolerationSeconds:
                                      description: TolerationSeconds represents the
                                        period of time the toleration (which must
                                        be of effect NoExecute, otherwise this field
                                        is ignored) tolerates the taint. By default,
                                        it is not set, which means tolerate the taint
                                        forever (do not evict). Zero and negative
                                        values will be treated as 0 (evict immediately)
                                        by the system.
                                      format: int64
                                      type: integer
                                    value:
                                      description: Value is the taint value the toleration
                                        matches to. If the operator is Exists, the
                                        value should be empty, otherwise just a regular
                                        string.
                                      type: string
                                  type: object
                                type: array
                            type: object
                        type: object
                      sessionAffinity:
                        description: SessionAffinity configures session affinity for
                          sidecar telemetry connections. .Values.mixer.telemetry.sessionAffinityEnabled,
                          maps to MeshConfig.sidecarToTelemetrySessionAffinity
                        type: boolean
                    type: object
                  remote:
                    description: Remote represents a remote, legacy, v1 telemetry.
                    properties:
                      address:
                        description: Address is the address of the remote telemetry
                          server .Values.global.remoteTelemetryAddress, maps to MeshConfig.mixerReportServer
                        type: string
                      batching:
                        description: Batching settings used when sending telemetry.
                        properties:
                          maxEntries:
                            description: MaxEntries represents the maximum number
                              of entries to collect before sending them to mixer.
                              .Values.mixer.telemetry.reportBatchMaxEntries, maps
                              to MeshConfig.reportBatchMaxEntries Set reportBatchMaxEntries
                              to 0 to use the default batching behavior (i.e., every
                              100 requests). A positive value indicates the number
                              of requests that are batched before telemetry data is
                              sent to the mixer server
                            format: int32
                            type: integer
                          maxTime:
                            description: MaxTime represents the maximum amount of
                              time to hold entries before sending them to mixer. .Values.mixer.telemetry.reportBatchMaxTime,
                              maps to MeshConfig.reportBatchMaxTime Set reportBatchMaxTime
                              to 0 to use the default batching behavior (i.e., every
                              1 second). A positive time value indicates the maximum
                              wait time since the last request will telemetry data
                              be batched before being sent to the mixer server
                            type: string
                        type: object
                      createService:
                        description: CreateService for the remote server. .Values.global.createRemoteSvcEndpoints
                        type: boolean
                    type: object
                  type:
                    description: Type of telemetry implementation to use.
                    type: string
                type: object
              template:
                description: Template selects the template to use for default values.
                  Defaults to "default" when not set.
                type: string
              version:
                description: Version specifies what Maistra version of the control
                  plane to install. When creating a new ServiceMeshControlPlane with
                  an empty version, the admission webhook sets the version to the
                  current version. Existing ServiceMeshControlPlanes with an empty
                  version are treated as having the version set to "v1.0"
                type: string
            type: object
          status:
            description: ControlPlaneStatus defines the observed state of ServiceMeshControlPlane
            nullable: true
            properties:
              annotations:
                additionalProperties:
                  type: string
                description: Annotations is an unstructured key value map used to
                  store additional, usually redundant status information, such as
                  the number of components deployed by the ServiceMeshControlPlane
                  (number is redundant because you could just as easily count the
                  elements in the ComponentStatus array). The reason to add this redundant
                  information is to make it available to kubectl, which does not yet
                  allow counting objects in JSONPath expressions.
                type: object
              components:
                items:
                  description: ComponentStatus represents the status of an object
                    with children
                  properties:
                    children:
                      description: 'TODO: can we remove this? it''s not used anywhere
                        The status of each resource that comprises this component.'
                      items:
                        description: StatusType represents the status for a control
                          plane, component, or resource
                        properties:
                          conditions:
                            description: Represents the latest available observations
                              of the object's current state.
                            items:
                              description: A Condition represents a specific observation
                                of the object's state.
                              properties:
                                lastTransitionTime:
                                  description: Last time the condition transitioned
                                    from one status to another.
                                  format: date-time
                                  type: string
                                message:
                                  description: Human-readable message indicating details
                                    about the last transition.
                                  type: string
                                reason:
                                  description: Unique, single-word, CamelCase reason
                                    for the condition's last transition.
                                  type: string
                                status:
                                  description: The status of this condition. Can be
                                    True, False or Unknown.
                                  type: string
                                type:
                                  description: The type of this condition.
                                  type: string
                              type: object
                            type: array
                        type: object
                      type: array
                    conditions:
                      description: Represents the latest available observations of
                        the object's current state.
                      items:
                        description: A Condition represents a specific observation
                          of the object's state.
                        properties:
                          lastTransitionTime:
                            description: Last time the condition transitioned from
                              one status to another.
                            format: date-time
                            type: string
                          message:
                            description: Human-readable message indicating details
                              about the last transition.
                            type: string
                          reason:
                            description: Unique, single-word, CamelCase reason for
                              the condition's last transition.
                            type: string
                          status:
                            description: The status of this condition. Can be True,
                              False or Unknown.
                            type: string
                          type:
                            description: The type of this condition.
                            type: string
                        type: object
                      type: array
                    resource:
                      description: The name of the component this status pertains
                        to.
                      type: string
                  type: object
                type: array
              conditions:
                description: Represents the latest available observations of the object's
                  current state.
                items:
                  description: A Condition represents a specific observation of the
                    object's state.
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another.
                      format: date-time
                      type: string
                    message:
                      description: Human-readable message indicating details about
                        the last transition.
                      type: string
                    reason:
                      description: Unique, single-word, CamelCase reason for the condition's
                        last transition.
                      type: string
                    status:
                      description: The status of this condition. Can be True, False
                        or Unknown.
                      type: string
                    type:
                      description: The type of this condition.
                      type: string
                  type: object
                type: array
              lastAppliedConfiguration:
                description: The full specification of the configuration options that
                  were applied to the components of the control plane during the most
                  recent reconciliation.
                properties:
                  istio:
                    description: 'Specifies the Istio configuration options that are
                      passed to Helm when the Istio charts are rendered. These options
                      are usually populated from the template specified in the spec.template
                      field, but individual values can be overridden here. More info:
                      https://maistra.io/docs/installation/installation-options/'
                    type: object
                    x-kubernetes-preserve-unknown-fields: true
                  networkType:
                    description: 'DEPRECATED: No longer used anywhere. Previously
                      used to specify the NetworkType of the cluster. Defaults to
                      "subnet".'
                    type: string
                  template:
                    description: Template selects the template to use for default
                      values. Defaults to "default" when not set.
                    type: string
                  threeScale:
                    description: 'Specifies the 3Scale configuration options that
                      are passed to Helm when the 3Scale charts are rendered. These
                      values are usually populated from the template specified in
                      the spec.template field, but individual values can be overridden
                      here. More info: https://maistra.io/docs/installation/installation-options/#_3scale'
                    type: object
                    x-kubernetes-preserve-unknown-fields: true
                  version:
                    description: Version specifies what Maistra version of the control
                      plane to install. When creating a new ServiceMeshControlPlane
                      with an empty version, the admission webhook sets the version
                      to the latest version supported by the operator. Existing ServiceMeshControlPlanes
                      with an empty version are treated as having the version set
                      to "v1.0"
                    type: string
                type: object
              observedGeneration:
                description: The generation observed by the controller during the
                  most recent reconciliation. The information in the status pertains
                  to this particular generation of the object.
                format: int64
                type: integer
              reconciledVersion:
                description: The last version that was reconciled.
                type: string
            required:
            - components
            - lastAppliedConfiguration
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
