---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.17.3
  labels:
    app.kubernetes.io/instance: kueue
    app.kubernetes.io/name: kueue
    app.kubernetes.io/version: v0.12.3
    control-plane: controller-manager
  name: provisioningrequestconfigs.kueue.x-k8s.io
spec:
  conversion:
    strategy: Webhook
    webhook:
      clientConfig:
        service:
          name: kueue-webhook-service
          namespace: kueue-system
          path: /convert
      conversionReviewVersions:
        - v1
  group: kueue.x-k8s.io
  names:
    kind: ProvisioningRequestConfig
    listKind: ProvisioningRequestConfigList
    plural: provisioningrequestconfigs
    singular: provisioningrequestconfig
  scope: Cluster
  versions:
    - name: v1beta1
      schema:
        openAPIV3Schema:
          description: ProvisioningRequestConfig is the Schema for the provisioningrequestconfig 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: ProvisioningRequestConfigSpec defines the desired state of ProvisioningRequestConfig
              properties:
                managedResources:
                  description: |-
                    managedResources contains the list of resources managed by the autoscaling.

                    If empty, all resources are considered managed.

                    If not empty, the ProvisioningRequest will contain only the podsets that are
                    requesting at least one of them.

                    If none of the workloads podsets is requesting at least a managed resource,
                    the workload is considered ready.
                  items:
                    description: ResourceName is the name identifying various resources in a ResourceList.
                    type: string
                  maxItems: 100
                  type: array
                  x-kubernetes-list-type: set
                parameters:
                  additionalProperties:
                    description: Parameter is limited to 255 characters.
                    maxLength: 255
                    type: string
                  description: Parameters contains all other parameters classes may require.
                  maxProperties: 100
                  type: object
                podSetMergePolicy:
                  description: |-
                    podSetMergePolicy specifies the policy for merging PodSets before being passed
                    to the cluster autoscaler.
                  enum:
                    - IdenticalPodTemplates
                    - IdenticalWorkloadSchedulingRequirements
                  type: string
                podSetUpdates:
                  description: |-
                    podSetUpdates specifies the update of the workload's PodSetUpdates which
                    are used to target the provisioned nodes.
                  properties:
                    nodeSelector:
                      description: nodeSelector specifies the list of updates for the NodeSelector.
                      items:
                        properties:
                          key:
                            description: key specifies the key for the NodeSelector.
                            maxLength: 317
                            minLength: 1
                            pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                            type: string
                          valueFromProvisioningClassDetail:
                            description: |-
                              valueFromProvisioningClassDetail specifies the key of the
                              ProvisioningRequest.status.provisioningClassDetails from which the value
                              is used for the update.
                            maxLength: 32768
                            minLength: 1
                            type: string
                        required:
                          - key
                          - valueFromProvisioningClassDetail
                        type: object
                      maxItems: 8
                      type: array
                  type: object
                provisioningClassName:
                  description: |-
                    ProvisioningClassName describes the different modes of provisioning the resources.
                    Check autoscaling.x-k8s.io ProvisioningRequestSpec.ProvisioningClassName for details.
                  maxLength: 253
                  pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                  type: string
                retryStrategy:
                  default:
                    backoffBaseSeconds: 60
                    backoffLimitCount: 3
                    backoffMaxSeconds: 1800
                  description: |-
                    retryStrategy defines strategy for retrying ProvisioningRequest.
                    If null, then the default configuration is applied with the following parameter values:
                    backoffLimitCount:  3
                    backoffBaseSeconds: 60 - 1 min
                    backoffMaxSeconds:  1800 - 30 mins

                    To switch off retry mechanism
                    set retryStrategy.backoffLimitCount to 0.
                  properties:
                    backoffBaseSeconds:
                      default: 60
                      description: |-
                        BackoffBaseSeconds defines the base for the exponential backoff for
                        re-queuing an evicted workload.

                        Defaults to 60.
                      format: int32
                      type: integer
                    backoffLimitCount:
                      default: 3
                      description: |-
                        BackoffLimitCount defines the maximum number of re-queuing retries.
                        Once the number is reached, the workload is deactivated (`.spec.activate`=`false`).

                        Every backoff duration is about "b*2^(n-1)+Rand" where:
                        - "b" represents the base set by "BackoffBaseSeconds" parameter,
                        - "n" represents the "workloadStatus.requeueState.count",
                        - "Rand" represents the random jitter.
                        During this time, the workload is taken as an inadmissible and
                        other workloads will have a chance to be admitted.
                        By default, the consecutive requeue delays are around: (60s, 120s, 240s, ...).

                        Defaults to 3.
                      format: int32
                      type: integer
                    backoffMaxSeconds:
                      default: 1800
                      description: |-
                        BackoffMaxSeconds defines the maximum backoff time to re-queue an evicted workload.

                        Defaults to 1800.
                      format: int32
                      type: integer
                  type: object
              required:
                - provisioningClassName
              type: object
          type: object
      served: true
      storage: true
