# 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: computesnapshots.compute.cnrm.cloud.google.com
spec:
  group: compute.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: ComputeSnapshot
    plural: computesnapshots
    shortNames:
    - gcpcomputesnapshot
    - gcpcomputesnapshots
    singular: computesnapshot
  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:
              chainName:
                description: |-
                  Immutable. Creates the new snapshot in the snapshot chain labeled with the
                  specified name. The chain name must be 1-63 characters long and
                  comply with RFC1035. This is an uncommon option only for advanced
                  service owners who needs to create separate snapshot chains, for
                  example, for chargeback tracking.  When you describe your snapshot
                  resource, this field is visible only if it has a non-empty value.
                type: string
              description:
                description: Immutable. An optional description of this resource.
                type: string
              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
              snapshotEncryptionKey:
                description: |-
                  Immutable. Encrypts the snapshot using a customer-supplied encryption key.

                  After you encrypt a snapshot using a customer-supplied key, you must
                  provide the same key if you use the snapshot later. For example, you
                  must provide the encryption key when you create a disk from the
                  encrypted snapshot in a future request.

                  Customer-supplied encryption keys do not protect access to metadata of
                  the snapshot.

                  If you do not provide an encryption key when creating the snapshot,
                  then the snapshot will be encrypted using an automatically generated
                  key and you do not need to provide a key to use the snapshot later.
                properties:
                  kmsKeyRef:
                    description: 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 used for the encryption request for the given KMS key.
                      If absent, the Compute Engine Service Agent 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
                  rawKey:
                    description: |-
                      Immutable. Specifies a 256-bit customer-supplied encryption key, encoded in
                      RFC 4648 base64 to either encrypt or decrypt this resource.
                    oneOf:
                    - not:
                        required:
                        - valueFrom
                      required:
                      - value
                    - not:
                        required:
                        - value
                      required:
                      - valueFrom
                    properties:
                      value:
                        description: Value of the field. Cannot be used if 'valueFrom'
                          is specified.
                        type: string
                      valueFrom:
                        description: Source for the field's value. Cannot be used
                          if 'value' is specified.
                        properties:
                          secretKeyRef:
                            description: Reference to a value with the given key in
                              the given Secret in the resource's namespace.
                            properties:
                              key:
                                description: Key that identifies the value to be extracted.
                                type: string
                              name:
                                description: Name of the Secret to extract a value
                                  from.
                                type: string
                            required:
                            - name
                            - key
                            type: object
                        type: object
                    type: object
                  sha256:
                    description: |-
                      The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied
                      encryption key that protects this resource.
                    type: string
                type: object
              sourceDiskEncryptionKey:
                description: |-
                  Immutable. The customer-supplied encryption key of the source snapshot. Required
                  if the source snapshot is protected by a customer-supplied encryption
                  key.
                properties:
                  kmsKeyServiceAccountRef:
                    description: |-
                      The service account used for the encryption request for the given KMS key.
                      If absent, the Compute Engine Service Agent 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
                  rawKey:
                    description: |-
                      Immutable. Specifies a 256-bit customer-supplied encryption key, encoded in
                      RFC 4648 base64 to either encrypt or decrypt this resource.
                    oneOf:
                    - not:
                        required:
                        - valueFrom
                      required:
                      - value
                    - not:
                        required:
                        - value
                      required:
                      - valueFrom
                    properties:
                      value:
                        description: Value of the field. Cannot be used if 'valueFrom'
                          is specified.
                        type: string
                      valueFrom:
                        description: Source for the field's value. Cannot be used
                          if 'value' is specified.
                        properties:
                          secretKeyRef:
                            description: Reference to a value with the given key in
                              the given Secret in the resource's namespace.
                            properties:
                              key:
                                description: Key that identifies the value to be extracted.
                                type: string
                              name:
                                description: Name of the Secret to extract a value
                                  from.
                                type: string
                            required:
                            - name
                            - key
                            type: object
                        type: object
                    type: object
                type: object
              sourceDiskRef:
                description: A reference to the disk used to create this snapshot.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `name` 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
              storageLocations:
                description: Immutable. Cloud Storage bucket storage location of the
                  snapshot (regional or multi-regional).
                items:
                  type: string
                type: array
              zone:
                description: Immutable. A reference to the zone where the disk is
                  hosted.
                type: string
            required:
            - sourceDiskRef
            type: object
          status:
            properties:
              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
              diskSizeGb:
                description: Size of the snapshot, specified in GB.
                type: integer
              labelFingerprint:
                description: |-
                  The fingerprint used for optimistic locking of this resource. Used
                  internally during updates.
                type: string
              licenses:
                description: |-
                  A list of public visible licenses that apply to this snapshot. This
                  can be because the original image had licenses attached (such as a
                  Windows image).  snapshotEncryptionKey nested object Encrypts the
                  snapshot using a customer-supplied encryption key.
                items:
                  type: string
                type: array
              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
              snapshotId:
                description: The unique identifier for the resource.
                type: integer
              storageBytes:
                description: |-
                  A size of the storage used by the snapshot. As snapshots share
                  storage, this number is expected to change with snapshot
                  creation/deletion.
                type: integer
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
