---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    api-approved.openshift.io: https://github.com/openshift/api/pull/2198
    api.openshift.io/merged-by-featuregates: "true"
    include.release.openshift.io/ibm-cloud-managed: "true"
    include.release.openshift.io/self-managed-high-availability: "true"
  creationTimestamp: "2025-10-27T11:18:49Z"
  generation: 1
  labels:
    openshift.io/operator-managed: ""
  managedFields:
  - apiVersion: apiextensions.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:api-approved.openshift.io: {}
          f:api.openshift.io/merged-by-featuregates: {}
          f:include.release.openshift.io/ibm-cloud-managed: {}
          f:include.release.openshift.io/self-managed-high-availability: {}
        f:labels:
          .: {}
          f:openshift.io/operator-managed: {}
        f:ownerReferences:
          .: {}
          k:{"uid":"d36bdf59-d268-4238-afb0-5e0b21cca1a4"}: {}
      f:spec:
        f:conversion:
          .: {}
          f:strategy: {}
        f:group: {}
        f:names:
          f:kind: {}
          f:listKind: {}
          f:plural: {}
          f:singular: {}
        f:scope: {}
        f:versions: {}
    manager: cluster-version-operator
    operation: Update
    time: "2025-10-27T11:18:49Z"
  - apiVersion: apiextensions.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:acceptedNames:
          f:kind: {}
          f:listKind: {}
          f:plural: {}
          f:singular: {}
        f:conditions:
          k:{"type":"Established"}:
            .: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
          k:{"type":"NamesAccepted"}:
            .: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
    manager: kube-apiserver
    operation: Update
    subresource: status
    time: "2025-10-27T11:18:49Z"
  name: pinnedimagesets.machineconfiguration.openshift.io
  ownerReferences:
  - apiVersion: config.openshift.io/v1
    controller: true
    kind: ClusterVersion
    name: version
    uid: d36bdf59-d268-4238-afb0-5e0b21cca1a4
  resourceVersion: "2293"
  uid: 95af7675-c911-4f39-b440-d991e96a9a00
spec:
  conversion:
    strategy: None
  group: machineconfiguration.openshift.io
  names:
    kind: PinnedImageSet
    listKind: PinnedImageSetList
    plural: pinnedimagesets
    singular: pinnedimageset
  scope: Cluster
  versions:
  - name: v1
    schema:
      openAPIV3Schema:
        description: |-
          PinnedImageSet describes a set of images that should be pinned by CRI-O and
          pulled to the nodes which are members of the declared MachineConfigPools.

          Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
        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: spec describes the configuration of this pinned image set.
            properties:
              pinnedImages:
                description: |-
                  pinnedImages is a list of OCI Image referenced by digest that should be
                  pinned and pre-loaded by the nodes of a MachineConfigPool.
                  Translates into a new file inside the /etc/crio/crio.conf.d directory
                  with content similar to this:

                       pinned_images = [
                               "quay.io/openshift-release-dev/ocp-release@sha256:...",
                               "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:...",
                               "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:...",
                               ...
                       ]

                  Image references must be by digest.
                  A maximum of 500 images may be specified.
                items:
                  description: PinnedImageRef represents a reference to an OCI image
                  properties:
                    name:
                      description: |-
                        name is an OCI Image referenced by digest.
                        The format of the image pull spec is: host[:port][/namespace]/name@sha256:<digest>,
                        where the digest must be 64 characters long, and consist only of lowercase hexadecimal characters, a-f and 0-9.
                        The length of the whole spec must be between 1 to 447 characters.
                      maxLength: 447
                      minLength: 1
                      type: string
                      x-kubernetes-validations:
                      - message: the OCI Image reference must end with a valid '@sha256:<digest>'
                          suffix, where '<digest>' is 64 characters long
                        rule: (self.split('@').size() == 2 && self.split('@')[1].matches('^sha256:[a-f0-9]{64}$'))
                      - message: the OCI Image name should follow the host[:port][/namespace]/name
                          format, resembling a valid URL without the scheme
                        rule: (self.split('@')[0].matches('^([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9-]+(:[0-9]{2,5})?/([a-zA-Z0-9-_]{0,61}/)?[a-zA-Z0-9-_.]*?$'))
                  required:
                  - name
                  type: object
                maxItems: 500
                minItems: 1
                type: array
                x-kubernetes-list-map-keys:
                - name
                x-kubernetes-list-type: map
            required:
            - pinnedImages
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
status:
  acceptedNames:
    kind: PinnedImageSet
    listKind: PinnedImageSetList
    plural: pinnedimagesets
    singular: pinnedimageset
  conditions:
  - lastTransitionTime: "2025-10-27T11:18:49Z"
    message: no conflicts found
    reason: NoConflicts
    status: "True"
    type: NamesAccepted
  - lastTransitionTime: "2025-10-27T11:18:49Z"
    message: the initial names have been accepted
    reason: InitialNamesAccepted
    status: "True"
    type: Established
  storedVersions:
  - v1
