# Copyright 2025 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.128.0
  creationTimestamp: null
  labels:
    cnrm.cloud.google.com/managed-by-kcc: "true"
    cnrm.cloud.google.com/stability-level: stable
    cnrm.cloud.google.com/system: "true"
    cnrm.cloud.google.com/tf2crd: "true"
  name: computeimages.compute.cnrm.cloud.google.com
spec:
  group: compute.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: ComputeImage
    plural: computeimages
    shortNames:
    - gcpcomputeimage
    - gcpcomputeimages
    singular: computeimage
  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:
              description:
                description: |-
                  Immutable. An optional description of this resource. Provide this property when
                  you create the resource.
                type: string
              diskRef:
                description: |-
                  The source disk to create this image based on.
                  You must provide either this property or the
                  rawDisk.source property but not both to create an image.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeDisk`
                      resource.'
                    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
              diskSizeGb:
                description: Immutable. Size of the image when restored onto a persistent
                  disk (in GB).
                type: integer
              family:
                description: |-
                  Immutable. The name of the image family to which this image belongs. You can
                  create disks by specifying an image family instead of a specific
                  image name. The image family always returns its latest image that is
                  not deprecated. The name of the image family must comply with
                  RFC1035.
                type: string
              guestOsFeatures:
                description: |-
                  Immutable. A list of features to enable on the guest operating system.
                  Applicable only for bootable images.
                items:
                  properties:
                    type:
                      description: 'Immutable. The type of supported feature. Read
                        [Enabling guest operating system features](https://cloud.google.com/compute/docs/images/create-delete-deprecate-private-images#guest-os-features)
                        to see a list of available options. Possible values: ["MULTI_IP_SUBNET",
                        "SECURE_BOOT", "SEV_CAPABLE", "UEFI_COMPATIBLE", "VIRTIO_SCSI_MULTIQUEUE",
                        "WINDOWS", "GVNIC", "SEV_LIVE_MIGRATABLE", "SEV_SNP_CAPABLE",
                        "SUSPEND_RESUME_COMPATIBLE", "TDX_CAPABLE"].'
                      type: string
                  required:
                  - type
                  type: object
                type: array
              imageEncryptionKey:
                description: |-
                  Immutable. Encrypts the image using a customer-supplied encryption key.

                  After you encrypt an image with a customer-supplied key, you must
                  provide the same key if you use the image later (e.g. to create a
                  disk from the image).
                properties:
                  kmsKeySelfLinkRef:
                    description: |-
                      The self link of the encryption key that is stored in Google Cloud
                      KMS.
                    oneOf:
                    - not:
                        required:
                        - external
                      required:
                      - name
                    - not:
                        anyOf:
                        - required:
                          - name
                        - required:
                          - namespace
                      required:
                      - external
                    properties:
                      external:
                        description: 'Allowed value: The `selfLink` field of a `KMSCryptoKey`
                          resource.'
                        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
                  kmsKeyServiceAccountRef:
                    description: |-
                      The service account being used for the encryption request for the
                      given KMS key. If absent, the Compute Engine default service account
                      is used.
                    oneOf:
                    - not:
                        required:
                        - external
                      required:
                      - name
                    - not:
                        anyOf:
                        - required:
                          - name
                        - required:
                          - namespace
                      required:
                      - external
                    properties:
                      external:
                        description: 'Allowed value: The `email` field of an `IAMServiceAccount`
                          resource.'
                        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
                type: object
              licenses:
                description: Immutable. Any applicable license URI.
                items:
                  type: string
                type: array
              rawDisk:
                description: Immutable. The parameters of the raw disk image.
                properties:
                  containerType:
                    description: |-
                      Immutable. The format used to encode and transmit the block device, which
                      should be TAR. This is just a container and transmission format
                      and not a runtime format. Provided by the client when the disk
                      image is created. Default value: "TAR" Possible values: ["TAR"].
                    type: string
                  sha1:
                    description: |-
                      Immutable. An optional SHA1 checksum of the disk image before unpackaging.
                      This is provided by the client when the disk image is created.
                    type: string
                  source:
                    description: |-
                      Immutable. The full Google Cloud Storage URL where disk storage is stored
                      You must provide either this property or the sourceDisk property
                      but not both.
                    type: string
                required:
                - source
                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
              sourceImageRef:
                description: The source image used to create this image.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeImage`
                      resource.'
                    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
              sourceSnapshotRef:
                description: The source snapshot used to create this image.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeSnapshot`
                      resource.'
                    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
              storageLocations:
                description: |-
                  Immutable. Cloud Storage bucket storage location of the image
                  (regional or multi-regional).
                  Reference link: https://cloud.google.com/compute/docs/reference/rest/v1/images.
                items:
                  type: string
                type: array
            type: object
          status:
            properties:
              archiveSizeBytes:
                description: |-
                  Size of the image tar.gz archive stored in Google Cloud Storage (in
                  bytes).
                type: integer
              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
              creationTimestamp:
                description: Creation timestamp in RFC3339 text format.
                type: string
              labelFingerprint:
                description: |-
                  The fingerprint used for optimistic locking of this resource. Used
                  internally during updates.
                type: string
              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
              selfLink:
                type: string
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
