apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  # name must match the spec fields below, and be in the form: <plural>.<group>
  name: machineconfigpools.machineconfiguration.openshift.io
  labels:
    "openshift.io/operator-managed": ""
spec:
  additionalPrinterColumns:
  - JSONPath: .status.configuration.name
    name: Config
    type: string
  - JSONPath: .status.conditions[?(@.type=="Updated")].status
    description: When all the machines in the pool are updated to the correct machine
      config.
    name: Updated
    type: string
  - JSONPath: .status.conditions[?(@.type=="Updating")].status
    description: When at least one of machine is not either not updated or is in the
      process of updating to the desired machine config.
    name: Updating
    type: string
  - JSONPath: .status.conditions[?(@.type=="Degraded")].status
    description: When progress is blocked on updating one or more nodes, or the pool
      configuration is failing.
    name: Degraded
    type: string
  - JSONPath: .status.machineCount
    description: Total number of machines in the machine config pool
    name: MachineCount
    type: number
  - JSONPath: .status.readyMachineCount
    description: Total number of ready machines targeted by the pool
    name: ReadyMachineCount
    type: number
  - JSONPath: .status.updatedMachineCount
    description: Total number of machines targeted by the pool that have the CurrentMachineConfig
      as their config
    name: UpdatedMachineCount
    type: number
  - JSONPath: .status.degradedMachineCount
    description: Total number of machines marked degraded (or unreconcilable)
    name: DegradedMachineCount
    type: number
  - JSONPath: .metadata.creationTimestamp
    name: Age
    type: date
  # group name to use for REST API: /apis/<group>/<version>
  group: machineconfiguration.openshift.io
  # list of versions supported by this CustomResourceDefinition
  versions:
  - name: v1
    # Each version can be enabled/disabled by Served flag.
    served: true
    # One and only one version must be marked as the storage version.
    storage: true
  # either Namespaced or Cluster
  scope: Cluster
  preserveUnknownFields: false
  subresources:
    status: {}
  names:
    # plural name to be used in the URL: /apis/<group>/<version>/<plural>
    plural: machineconfigpools
    # singular name to be used as an alias on the CLI and for display
    singular: machineconfigpool
    # kind is normally the PascalCased singular type. Your resource manifests use this.
    kind: MachineConfigPool
    # shortNames allow shorter string to match your resource on the CLI
    shortNames:
    - mcp
  "validation":
    "openAPIV3Schema":
      description: MachineConfigPool describes a pool of MachineConfigs.
      type: 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: MachineConfigPoolSpec is the spec for MachineConfigPool resource.
          type: object
          properties:
            configuration:
              description: The targeted MachineConfig object for the machine config
                pool.
              type: object
              properties:
                apiVersion:
                  description: API version of the referent.
                  type: string
                fieldPath:
                  description: 'If referring to a piece of an object instead of an
                    entire object, this string should contain a valid JSON/Go field
                    access statement, such as desiredState.manifest.containers[2].
                    For example, if the object reference is to a container within
                    a pod, this would take on a value like: "spec.containers{name}"
                    (where "name" refers to the name of the container that triggered
                    the event) or if no container name is specified "spec.containers[2]"
                    (container with index 2 in this pod). This syntax is chosen only
                    to have some well-defined way of referencing a part of an object.
                    TODO: this design is not final and this field is subject to change
                    in the future.'
                  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: 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
                resourceVersion:
                  description: 'Specific resourceVersion to which this reference is
                    made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                  type: string
                source:
                  description: source is the list of MachineConfig objects that were
                    used to generate the single MachineConfig object specified in
                    `content`.
                  type: array
                  items:
                    description: ObjectReference contains enough information to let
                      you inspect or modify the referred object.
                    type: object
                    properties:
                      apiVersion:
                        description: API version of the referent.
                        type: string
                      fieldPath:
                        description: 'If referring to a piece of an object instead
                          of an entire object, this string should contain a valid
                          JSON/Go field access statement, such as desiredState.manifest.containers[2].
                          For example, if the object reference is to a container within
                          a pod, this would take on a value like: "spec.containers{name}"
                          (where "name" refers to the name of the container that triggered
                          the event) or if no container name is specified "spec.containers[2]"
                          (container with index 2 in this pod). This syntax is chosen
                          only to have some well-defined way of referencing a part
                          of an object. TODO: this design is not final and this field
                          is subject to change in the future.'
                        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: 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
                      resourceVersion:
                        description: 'Specific resourceVersion to which this reference
                          is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                        type: string
                      uid:
                        description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                        type: string
                uid:
                  description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                  type: string
            machineConfigSelector:
              description: machineConfigSelector specifies a label selector for MachineConfigs.
                Refer https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
                on how label and selectors work.
              type: object
              properties:
                matchExpressions:
                  description: matchExpressions is a list of label selector requirements.
                    The requirements are ANDed.
                  type: array
                  items:
                    description: A label selector requirement is a selector that contains
                      values, a key, and an operator that relates the key and values.
                    type: object
                    required:
                    - key
                    - operator
                    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
                      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.
                        type: array
                        items:
                          type: string
                matchLabels:
                  description: matchLabels is a map of {key,value} pairs. A single
                    {key,value} in the matchLabels map is equivalent to an element
                    of matchExpressions, whose key field is "key", the operator is
                    "In", and the values array contains only "value". The requirements
                    are ANDed.
                  type: object
                  additionalProperties:
                    type: string
            maxUnavailable:
              description: maxUnavailable specifies the percentage or constant number
                of machines that can be updating at any given time. default is 1.
              anyOf:
              - type: integer
              - type: string
              x-kubernetes-int-or-string: true
            nodeSelector:
              description: nodeSelector specifies a label selector for Machines
              type: object
              properties:
                matchExpressions:
                  description: matchExpressions is a list of label selector requirements.
                    The requirements are ANDed.
                  type: array
                  items:
                    description: A label selector requirement is a selector that contains
                      values, a key, and an operator that relates the key and values.
                    type: object
                    required:
                    - key
                    - operator
                    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
                      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.
                        type: array
                        items:
                          type: string
                matchLabels:
                  description: matchLabels is a map of {key,value} pairs. A single
                    {key,value} in the matchLabels map is equivalent to an element
                    of matchExpressions, whose key field is "key", the operator is
                    "In", and the values array contains only "value". The requirements
                    are ANDed.
                  type: object
                  additionalProperties:
                    type: string
            paused:
              description: paused specifies whether or not changes to this machine
                config pool should be stopped. This includes generating new desiredMachineConfig
                and update of machines.
              type: boolean
        status:
          description: MachineConfigPoolStatus is the status for MachineConfigPool
            resource.
          type: object
          properties:
            conditions:
              description: conditions represents the latest available observations
                of current state.
              type: array
              items:
                description: MachineConfigPoolCondition contains condition information
                  for an MachineConfigPool.
                type: object
                properties:
                  lastTransitionTime:
                    description: lastTransitionTime is the timestamp corresponding
                      to the last status change of this condition.
                    type: string
                    format: date-time
                    nullable: true
                  message:
                    description: message is a human readable description of the details
                      of the last transition, complementing reason.
                    type: string
                  reason:
                    description: reason is a brief machine readable explanation 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 condition, currently ('Done', 'Updating',
                      'Failed').
                    type: string
            configuration:
              description: configuration represents the current MachineConfig object
                for the machine config pool.
              type: object
              properties:
                apiVersion:
                  description: API version of the referent.
                  type: string
                fieldPath:
                  description: 'If referring to a piece of an object instead of an
                    entire object, this string should contain a valid JSON/Go field
                    access statement, such as desiredState.manifest.containers[2].
                    For example, if the object reference is to a container within
                    a pod, this would take on a value like: "spec.containers{name}"
                    (where "name" refers to the name of the container that triggered
                    the event) or if no container name is specified "spec.containers[2]"
                    (container with index 2 in this pod). This syntax is chosen only
                    to have some well-defined way of referencing a part of an object.
                    TODO: this design is not final and this field is subject to change
                    in the future.'
                  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: 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
                resourceVersion:
                  description: 'Specific resourceVersion to which this reference is
                    made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                  type: string
                source:
                  description: source is the list of MachineConfig objects that were
                    used to generate the single MachineConfig object specified in
                    `content`.
                  type: array
                  items:
                    description: ObjectReference contains enough information to let
                      you inspect or modify the referred object.
                    type: object
                    properties:
                      apiVersion:
                        description: API version of the referent.
                        type: string
                      fieldPath:
                        description: 'If referring to a piece of an object instead
                          of an entire object, this string should contain a valid
                          JSON/Go field access statement, such as desiredState.manifest.containers[2].
                          For example, if the object reference is to a container within
                          a pod, this would take on a value like: "spec.containers{name}"
                          (where "name" refers to the name of the container that triggered
                          the event) or if no container name is specified "spec.containers[2]"
                          (container with index 2 in this pod). This syntax is chosen
                          only to have some well-defined way of referencing a part
                          of an object. TODO: this design is not final and this field
                          is subject to change in the future.'
                        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: 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
                      resourceVersion:
                        description: 'Specific resourceVersion to which this reference
                          is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                        type: string
                      uid:
                        description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                        type: string
                uid:
                  description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                  type: string
            degradedMachineCount:
              description: degradedMachineCount represents the total number of machines
                marked degraded (or unreconcilable). A node is marked degraded if
                applying a configuration failed..
              type: integer
              format: int32
            machineCount:
              description: machineCount represents the total number of machines in
                the machine config pool.
              type: integer
              format: int32
            observedGeneration:
              description: observedGeneration represents the generation observed by
                the controller.
              type: integer
              format: int64
            readyMachineCount:
              description: readyMachineCount represents the total number of ready
                machines targeted by the pool.
              type: integer
              format: int32
            unavailableMachineCount:
              description: unavailableMachineCount represents the total number of
                unavailable (non-ready) machines targeted by the pool. A node is marked
                unavailable if it is in updating state or NodeReady condition is false.
              type: integer
              format: int32
            updatedMachineCount:
              description: updatedMachineCount represents the total number of machines
                targeted by the pool that have the CurrentMachineConfig as their config.
              type: integer
              format: int32
