apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: workers.extensions.gardener.cloud
  labels:
    gardener.cloud/deletion-protected: "true"
spec:
  group: extensions.gardener.cloud
  names:
    kind: Worker
    listKind: WorkerList
    plural: workers
    singular: worker
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - description: The type of the cloud provider for this resource.
          jsonPath: .spec.type
          name: Type
          type: string
        - description: The region into which the worker should be deployed.
          jsonPath: .spec.region
          name: Region
          type: string
        - description: Status of the worker.
          jsonPath: .status.lastOperation.state
          name: Status
          type: string
        - description: creation timestamp
          jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
      name: v1alpha1
      schema:
        openAPIV3Schema:
          description: Worker is a specification for a Worker resource.
          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: WorkerSpec is the spec for a Worker resource.
              properties:
                infrastructureProviderStatus:
                  description: InfrastructureProviderStatus is a raw extension field
                    that contains the provider status that has been generated by the
                    controller responsible for the `Infrastructure` resource.
                  type: object
                  x-kubernetes-preserve-unknown-fields: true
                pools:
                  description: Pools is a list of worker pools.
                  items:
                    description: WorkerPool is the definition of a specific worker pool.
                    properties:
                      annotations:
                        additionalProperties:
                          type: string
                        description: Annotations is a map of key/value pairs for annotations
                          for all the `Node` objects in this worker pool.
                        type: object
                      dataVolumes:
                        description: DataVolumes contains a list of additional worker
                          volumes.
                        items:
                          description: DataVolume contains information about a data
                            volume.
                          properties:
                            encrypted:
                              description: Encrypted determines if the volume should
                                be encrypted.
                              type: boolean
                            name:
                              description: Name of the volume to make it referencable.
                              type: string
                            size:
                              description: Size is the of the root volume.
                              type: string
                            type:
                              description: Type is the type of the volume.
                              type: string
                          required:
                            - name
                            - size
                          type: object
                        type: array
                      kubeletDataVolumeName:
                        description: KubeletDataVolumeName contains the name of a dataVolume
                          that should be used for storing kubelet state.
                        type: string
                      labels:
                        additionalProperties:
                          type: string
                        description: Labels is a map of key/value pairs for labels for
                          all the `Node` objects in this worker pool.
                        type: object
                      machineControllerManager:
                        description: MachineControllerManagerSettings contains configurations
                          for different worker-pools. Eg. MachineDrainTimeout, MachineHealthTimeout.
                        properties:
                          machineCreationTimeout:
                            description: MachineCreationTimeout is the period after
                              which creation of the machine is declared failed.
                            type: string
                          machineDrainTimeout:
                            description: MachineDrainTimeout is the period after which
                              machine is forcefully deleted.
                            type: string
                          machineHealthTimeout:
                            description: MachineHealthTimeout is the period after which
                              machine is declared failed.
                            type: string
                          maxEvictRetries:
                            description: MaxEvictRetries are the number of eviction
                              retries on a pod after which drain is declared failed,
                              and forceful deletion is triggered.
                            format: int32
                            type: integer
                          nodeConditions:
                            description: NodeConditions are the set of conditions if
                              set to true for the period of MachineHealthTimeout, machine
                              will be declared failed.
                            items:
                              type: string
                            type: array
                        type: object
                      machineImage:
                        description: MachineImage contains logical information about
                          the name and the version of the machie image that should be
                          used. The logical information must be mapped to the provider-specific
                          information (e.g., AMIs, ...) by the provider itself.
                        properties:
                          name:
                            description: Name is the logical name of the machine image.
                            type: string
                          version:
                            description: Version is the version of the machine image.
                            type: string
                        required:
                          - name
                          - version
                        type: object
                      machineType:
                        description: MachineType contains information about the machine
                          type that should be used for this worker pool.
                        type: string
                      maxSurge:
                        anyOf:
                          - type: integer
                          - type: string
                        description: MaxSurge is maximum number of VMs that are created
                          during an update.
                        x-kubernetes-int-or-string: true
                      maxUnavailable:
                        anyOf:
                          - type: integer
                          - type: string
                        description: MaxUnavailable is the maximum number of VMs that
                          can be unavailable during an update.
                        x-kubernetes-int-or-string: true
                      maximum:
                        description: Maximum is the maximum size of the worker pool.
                        format: int32
                        type: integer
                      minimum:
                        description: Minimum is the minimum size of the worker pool.
                        format: int32
                        type: integer
                      name:
                        description: Name is the name of this worker pool.
                        type: string
                      providerConfig:
                        description: ProviderConfig is a provider specific configuration
                          for the worker pool.
                        type: object
                        x-kubernetes-preserve-unknown-fields: true
                      taints:
                        description: Taints is a list of taints for all the `Node` objects
                          in this worker pool.
                        items:
                          description: The node this Taint is attached to has the "effect"
                            on any pod that does not tolerate the Taint.
                          properties:
                            effect:
                              description: Required. The effect of the taint on pods
                                that do not tolerate the taint. Valid effects are NoSchedule,
                                PreferNoSchedule and NoExecute.
                              type: string
                            key:
                              description: Required. The taint key to be applied to
                                a node.
                              type: string
                            timeAdded:
                              description: TimeAdded represents the time at which the
                                taint was added. It is only written for NoExecute taints.
                              format: date-time
                              type: string
                            value:
                              description: The taint value corresponding to the taint
                                key.
                              type: string
                          required:
                            - effect
                            - key
                          type: object
                        type: array
                      userData:
                        description: UserData is a base64-encoded string that contains
                          the data that is sent to the provider's APIs when a new machine/VM
                          that is part of this worker pool shall be spawned.
                        format: byte
                        type: string
                      volume:
                        description: Volume contains information about the root disks
                          that should be used for this worker pool.
                        properties:
                          encrypted:
                            description: Encrypted determines if the volume should be
                              encrypted.
                            type: boolean
                          name:
                            description: Name of the volume to make it referencable.
                            type: string
                          size:
                            description: Size is the of the root volume.
                            type: string
                          type:
                            description: Type is the type of the volume.
                            type: string
                        required:
                          - size
                        type: object
                      zones:
                        description: Zones contains information about availability zones
                          for this worker pool.
                        items:
                          type: string
                        type: array
                    required:
                      - machineType
                      - maxSurge
                      - maxUnavailable
                      - maximum
                      - minimum
                      - name
                      - userData
                    type: object
                  type: array
                providerConfig:
                  description: ProviderConfig is the provider specific configuration.
                  type: object
                  x-kubernetes-preserve-unknown-fields: true
                region:
                  description: Region is the name of the region where the worker pool
                    should be deployed to.
                  type: string
                secretRef:
                  description: SecretRef is a reference to a secret that contains the
                    cloud provider specific credentials.
                  properties:
                    name:
                      description: Name is unique within a namespace to reference a
                        secret resource.
                      type: string
                    namespace:
                      description: Namespace defines the space within which the secret
                        name must be unique.
                      type: string
                  type: object
                sshPublicKey:
                  description: SSHPublicKey is the public SSH key that should be used
                    with these workers.
                  format: byte
                  type: string
                type:
                  description: Type contains the instance of the resource's kind.
                  type: string
              required:
                - pools
                - region
                - secretRef
                - type
              type: object
            status:
              description: WorkerStatus is the status for a Worker resource.
              properties:
                conditions:
                  description: Conditions represents the latest available observations
                    of a Seed's current state.
                  items:
                    description: Condition holds the information about the state of
                      a resource.
                    properties:
                      codes:
                        description: Well-defined error codes in case the condition
                          reports a problem.
                        items:
                          description: ErrorCode is a string alias.
                          type: string
                        type: array
                      lastTransitionTime:
                        description: Last time the condition transitioned from one status
                          to another.
                        format: date-time
                        type: string
                      lastUpdateTime:
                        description: Last time the condition was updated.
                        format: date-time
                        type: string
                      message:
                        description: A human readable message indicating details about
                          the transition.
                        type: string
                      reason:
                        description: The reason for the condition's last transition.
                        type: string
                      status:
                        description: Status of the condition, one of True, False, Unknown.
                        type: string
                      type:
                        description: Type of the Shoot condition.
                        type: string
                    required:
                      - lastTransitionTime
                      - lastUpdateTime
                      - message
                      - reason
                      - status
                      - type
                    type: object
                  type: array
                lastError:
                  description: LastError holds information about the last occurred error
                    during an operation.
                  properties:
                    codes:
                      description: Well-defined error codes of the last error(s).
                      items:
                        description: ErrorCode is a string alias.
                        type: string
                      type: array
                    description:
                      description: A human readable message indicating details about
                        the last error.
                      type: string
                    lastUpdateTime:
                      description: Last time the error was reported
                      format: date-time
                      type: string
                    taskID:
                      description: ID of the task which caused this last error
                      type: string
                  required:
                    - description
                  type: object
                lastOperation:
                  description: LastOperation holds information about the last operation
                    on the resource.
                  properties:
                    description:
                      description: A human readable message indicating details about
                        the last operation.
                      type: string
                    lastUpdateTime:
                      description: Last time the operation state transitioned from one
                        to another.
                      format: date-time
                      type: string
                    progress:
                      description: The progress in percentage (0-100) of the last operation.
                      format: int32
                      type: integer
                    state:
                      description: Status of the last operation, one of Aborted, Processing,
                        Succeeded, Error, Failed.
                      type: string
                    type:
                      description: Type of the last operation, one of Create, Reconcile,
                        Delete.
                      type: string
                  required:
                    - description
                    - lastUpdateTime
                    - progress
                    - state
                    - type
                  type: object
                machineDeployments:
                  description: MachineDeployments is a list of created machine deployments.
                    It will be used to e.g. configure the cluster-autoscaler properly.
                  items:
                    description: MachineDeployment is a created machine deployment.
                    properties:
                      maximum:
                        description: Maximum is the maximum number for this machine
                          deployment.
                        format: int32
                        type: integer
                      minimum:
                        description: Minimum is the minimum number for this machine
                          deployment.
                        format: int32
                        type: integer
                      name:
                        description: Name is the name of the `MachineDeployment` resource.
                        type: string
                    required:
                      - maximum
                      - minimum
                      - name
                    type: object
                  type: array
                observedGeneration:
                  description: ObservedGeneration is the most recent generation observed
                    for this resource.
                  format: int64
                  type: integer
                providerStatus:
                  description: ProviderStatus contains provider-specific status.
                  type: object
                  x-kubernetes-preserve-unknown-fields: true
                resources:
                  description: Resources holds a list of named resource references that
                    can be referred to in the state by their names.
                  items:
                    description: NamedResourceReference is a named reference to a resource.
                    properties:
                      name:
                        description: Name of the resource reference.
                        type: string
                      resourceRef:
                        description: ResourceRef is a reference to a resource.
                        properties:
                          apiVersion:
                            description: API version of the referent
                            type: string
                          kind:
                            description: 'Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"'
                            type: string
                          name:
                            description: 'Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names'
                            type: string
                        required:
                          - kind
                          - name
                        type: object
                    required:
                      - name
                      - resourceRef
                    type: object
                  type: array
                state:
                  description: State can be filled by the operating controller with
                    what ever data it needs.
                  type: object
                  x-kubernetes-preserve-unknown-fields: true
              type: object
          required:
            - spec
          type: object
      served: true
      storage: true
      subresources:
        status: {}