# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cnrm.cloud.google.com/version: 1.106.0
  creationTimestamp: null
  labels:
    cnrm.cloud.google.com/dcl2crd: "true"
    cnrm.cloud.google.com/managed-by-kcc: "true"
    cnrm.cloud.google.com/stability-level: stable
    cnrm.cloud.google.com/system: "true"
  name: dataprocautoscalingpolicies.dataproc.cnrm.cloud.google.com
spec:
  group: dataproc.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: DataprocAutoscalingPolicy
    plural: dataprocautoscalingpolicies
    shortNames:
    - gcpdataprocautoscalingpolicy
    - gcpdataprocautoscalingpolicies
    singular: dataprocautoscalingpolicy
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - description: When 'True', the most recent reconcile of the resource succeeded
      jsonPath: .status.conditions[?(@.type=='Ready')].status
      name: Ready
      type: string
    - description: The reason for the value in 'Ready'
      jsonPath: .status.conditions[?(@.type=='Ready')].reason
      name: Status
      type: string
    - description: The last transition time for the value in 'Status'
      jsonPath: .status.conditions[?(@.type=='Ready')].lastTransitionTime
      name: Status Age
      type: date
    name: v1beta1
    schema:
      openAPIV3Schema:
        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/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/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            properties:
              basicAlgorithm:
                properties:
                  cooldownPeriod:
                    description: 'Optional. Duration between scaling events. A scaling
                      period starts after the update operation from the previous event
                      has completed. Bounds: . Default: 2m.'
                    type: string
                  yarnConfig:
                    description: Required. YARN autoscaling configuration.
                    properties:
                      gracefulDecommissionTimeout:
                        description: Required. Timeout for YARN graceful decommissioning
                          of Node Managers. Specifies the duration to wait for jobs
                          to complete before forcefully removing workers (and potentially
                          interrupting jobs). Only applicable to downscaling operations.
                        type: string
                      scaleDownFactor:
                        description: Required. Fraction of average YARN pending memory
                          in the last cooldown period for which to remove workers.
                          A scale-down factor of 1 will result in scaling down so
                          that there is no available memory remaining after the update
                          (more aggressive scaling). A scale-down factor of 0 disables
                          removing workers, which can be beneficial for autoscaling
                          a single job. See .
                        format: double
                        type: number
                      scaleDownMinWorkerFraction:
                        description: 'Optional. Minimum scale-down threshold as a
                          fraction of total cluster size before scaling occurs. For
                          example, in a 20-worker cluster, a threshold of 0.1 means
                          the autoscaler must recommend at least a 2 worker scale-down
                          for the cluster to scale. A threshold of 0 means the autoscaler
                          will scale down on any recommended change. Bounds: . Default:
                          0.0.'
                        format: double
                        type: number
                      scaleUpFactor:
                        description: Required. Fraction of average YARN pending memory
                          in the last cooldown period for which to add workers. A
                          scale-up factor of 1.0 will result in scaling up so that
                          there is no pending memory remaining after the update (more
                          aggressive scaling). A scale-up factor closer to 0 will
                          result in a smaller magnitude of scaling up (less aggressive
                          scaling). See .
                        format: double
                        type: number
                      scaleUpMinWorkerFraction:
                        description: 'Optional. Minimum scale-up threshold as a fraction
                          of total cluster size before scaling occurs. For example,
                          in a 20-worker cluster, a threshold of 0.1 means the autoscaler
                          must recommend at least a 2-worker scale-up for the cluster
                          to scale. A threshold of 0 means the autoscaler will scale
                          up on any recommended change. Bounds: . Default: 0.0.'
                        format: double
                        type: number
                    required:
                    - gracefulDecommissionTimeout
                    - scaleDownFactor
                    - scaleUpFactor
                    type: object
                required:
                - yarnConfig
                type: object
              location:
                description: Immutable. The location for the resource
                type: string
              projectRef:
                description: Immutable. The Project that this resource belongs to.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: |-
                      The project for the resource

                      Allowed value: The Google Cloud resource name of a `Project` resource (format: `projects/{{name}}`).
                    type: string
                  name:
                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                    type: string
                  namespace:
                    description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                    type: string
                type: object
              resourceID:
                description: Immutable. Optional. The name of the resource. Used for
                  creation and acquisition. When unset, the value of `metadata.name`
                  is used as the default.
                type: string
              secondaryWorkerConfig:
                description: Optional. Describes how the autoscaler will operate for
                  secondary workers.
                properties:
                  maxInstances:
                    description: 'Optional. Maximum number of instances for this group.
                      Note that by default, clusters will not use secondary workers.
                      Required for secondary workers if the minimum secondary instances
                      is set. Primary workers - Bounds: [min_instances, ). Secondary
                      workers - Bounds: [min_instances, ). Default: 0.'
                    format: int64
                    type: integer
                  minInstances:
                    description: 'Optional. Minimum number of instances for this group.
                      Primary workers - Bounds: . Default: 0.'
                    format: int64
                    type: integer
                  weight:
                    description: 'Optional. Weight for the instance group, which is
                      used to determine the fraction of total workers in the cluster
                      from this instance group. For example, if primary workers have
                      weight 2, and secondary workers have weight 1, the cluster will
                      have approximately 2 primary workers for each secondary worker.
                      The cluster may not reach the specified balance if constrained
                      by min/max bounds or other autoscaling settings. For example,
                      if `max_instances` for secondary workers is 0, then only primary
                      workers will be added. The cluster can also be out of balance
                      when created. If weight is not set on any instance group, the
                      cluster will default to equal weight for all groups: the cluster
                      will attempt to maintain an equal number of workers in each
                      group within the configured size bounds for each group. If weight
                      is set for one group only, the cluster will default to zero
                      weight on the unset group. For example if weight is set only
                      on primary workers, the cluster will use primary workers only
                      and no secondary workers.'
                    format: int64
                    type: integer
                type: object
              workerConfig:
                description: Required. Describes how the autoscaler will operate for
                  primary workers.
                properties:
                  maxInstances:
                    description: 'Required. Maximum number of instances for this group.
                      Required for primary workers. Note that by default, clusters
                      will not use secondary workers. Required for secondary workers
                      if the minimum secondary instances is set. Primary workers -
                      Bounds: [min_instances, ). Secondary workers - Bounds: [min_instances,
                      ). Default: 0.'
                    format: int64
                    type: integer
                  minInstances:
                    description: 'Optional. Minimum number of instances for this group.
                      Primary workers - Bounds: . Default: 0.'
                    format: int64
                    type: integer
                  weight:
                    description: 'Optional. Weight for the instance group, which is
                      used to determine the fraction of total workers in the cluster
                      from this instance group. For example, if primary workers have
                      weight 2, and secondary workers have weight 1, the cluster will
                      have approximately 2 primary workers for each secondary worker.
                      The cluster may not reach the specified balance if constrained
                      by min/max bounds or other autoscaling settings. For example,
                      if `max_instances` for secondary workers is 0, then only primary
                      workers will be added. The cluster can also be out of balance
                      when created. If weight is not set on any instance group, the
                      cluster will default to equal weight for all groups: the cluster
                      will attempt to maintain an equal number of workers in each
                      group within the configured size bounds for each group. If weight
                      is set for one group only, the cluster will default to zero
                      weight on the unset group. For example if weight is set only
                      on primary workers, the cluster will use primary workers only
                      and no secondary workers.'
                    format: int64
                    type: integer
                required:
                - maxInstances
                type: object
            required:
            - basicAlgorithm
            - location
            - workerConfig
            type: object
          status:
            properties:
              conditions:
                description: Conditions represent the latest available observation
                  of the resource's current state.
                items:
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another.
                      type: string
                    message:
                      description: Human-readable message indicating details about
                        last transition.
                      type: string
                    reason:
                      description: Unique, one-word, CamelCase reason for the condition's
                        last transition.
                      type: string
                    status:
                      description: Status is the status of the condition. Can be True,
                        False, Unknown.
                      type: string
                    type:
                      description: Type is the type of the condition.
                      type: string
                  type: object
                type: array
              observedGeneration:
                description: ObservedGeneration is the generation of the resource
                  that was most recently observed by the Config Connector controller.
                  If this is equal to metadata.generation, then that means that the
                  current reported status reflects the most recent desired state of
                  the resource.
                type: integer
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []