# 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: computeresourcepolicies.compute.cnrm.cloud.google.com
spec:
  group: compute.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: ComputeResourcePolicy
    plural: computeresourcepolicies
    shortNames:
    - gcpcomputeresourcepolicy
    - gcpcomputeresourcepolicies
    singular: computeresourcepolicy
  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
              diskConsistencyGroupPolicy:
                description: Immutable. Replication consistency group for asynchronous
                  disk replication.
                properties:
                  enabled:
                    description: Immutable. Enable disk consistency on the resource
                      policy.
                    type: boolean
                required:
                - enabled
                type: object
              groupPlacementPolicy:
                description: Immutable. Resource policy for instances used for placement
                  configuration.
                properties:
                  availabilityDomainCount:
                    description: |-
                      Immutable. The number of availability domains instances will be spread across. If two instances are in different
                      availability domain, they will not be put in the same low latency network.
                    type: integer
                  collocation:
                    description: |-
                      Immutable. Collocation specifies whether to place VMs inside the same availability domain on the same low-latency network.
                      Specify 'COLLOCATED' to enable collocation. Can only be specified with 'vm_count'. If compute instances are created
                      with a COLLOCATED policy, then exactly 'vm_count' instances must be created at the same time with the resource policy
                      attached. Possible values: ["COLLOCATED"].
                    type: string
                  maxDistance:
                    description: Immutable. Specifies the number of max logical switches.
                    type: integer
                  vmCount:
                    description: |-
                      Immutable. Number of VMs in this placement group. Google does not recommend that you use this field
                      unless you use a compact policy and you want your policy to work only if it contains this
                      exact number of VMs.
                    type: integer
                type: object
              instanceSchedulePolicy:
                description: Immutable. Resource policy for scheduling instance operations.
                properties:
                  expirationTime:
                    description: Immutable. The expiration time of the schedule. The
                      timestamp is an RFC3339 string.
                    type: string
                  startTime:
                    description: Immutable. The start time of the schedule. The timestamp
                      is an RFC3339 string.
                    type: string
                  timeZone:
                    description: |-
                      Immutable. Specifies the time zone to be used in interpreting the schedule. The value of this field must be a time zone name
                      from the tz database: http://en.wikipedia.org/wiki/Tz_database.
                    type: string
                  vmStartSchedule:
                    description: Immutable. Specifies the schedule for starting instances.
                    properties:
                      schedule:
                        description: Immutable. Specifies the frequency for the operation,
                          using the unix-cron format.
                        type: string
                    required:
                    - schedule
                    type: object
                  vmStopSchedule:
                    description: Immutable. Specifies the schedule for stopping instances.
                    properties:
                      schedule:
                        description: Immutable. Specifies the frequency for the operation,
                          using the unix-cron format.
                        type: string
                    required:
                    - schedule
                    type: object
                required:
                - timeZone
                type: object
              region:
                description: Immutable. Region where resource policy resides.
                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
              snapshotSchedulePolicy:
                description: Immutable. Policy for creating snapshots of persistent
                  disks.
                properties:
                  retentionPolicy:
                    description: Immutable. Retention policy applied to snapshots
                      created by this resource policy.
                    properties:
                      maxRetentionDays:
                        description: Immutable. Maximum age of the snapshot that is
                          allowed to be kept.
                        type: integer
                      onSourceDiskDelete:
                        description: |-
                          Immutable. Specifies the behavior to apply to scheduled snapshots when
                          the source disk is deleted. Default value: "KEEP_AUTO_SNAPSHOTS" Possible values: ["KEEP_AUTO_SNAPSHOTS", "APPLY_RETENTION_POLICY"].
                        type: string
                    required:
                    - maxRetentionDays
                    type: object
                  schedule:
                    description: Immutable. Contains one of an 'hourlySchedule', 'dailySchedule',
                      or 'weeklySchedule'.
                    properties:
                      dailySchedule:
                        description: Immutable. The policy will execute every nth
                          day at the specified time.
                        properties:
                          daysInCycle:
                            description: Immutable. Defines a schedule with units
                              measured in days. The value determines how many days
                              pass between the start of each cycle. Days in cycle
                              for snapshot schedule policy must be 1.
                            type: integer
                          startTime:
                            description: |-
                              Immutable. This must be in UTC format that resolves to one of
                              00:00, 04:00, 08:00, 12:00, 16:00, or 20:00. For example,
                              both 13:00-5 and 08:00 are valid.
                            type: string
                        required:
                        - daysInCycle
                        - startTime
                        type: object
                      hourlySchedule:
                        description: Immutable. The policy will execute every nth
                          hour starting at the specified time.
                        properties:
                          hoursInCycle:
                            description: Immutable. The number of hours between snapshots.
                            type: integer
                          startTime:
                            description: |-
                              Immutable. Time within the window to start the operations.
                              It must be in an hourly format "HH:MM",
                              where HH : [00-23] and MM : [00] GMT.
                              eg: 21:00.
                            type: string
                        required:
                        - hoursInCycle
                        - startTime
                        type: object
                      weeklySchedule:
                        description: Immutable. Allows specifying a snapshot time
                          for each day of the week.
                        properties:
                          dayOfWeeks:
                            description: Immutable. May contain up to seven (one for
                              each day of the week) snapshot times.
                            items:
                              properties:
                                day:
                                  description: 'Immutable. The day of the week to
                                    create the snapshot. e.g. MONDAY Possible values:
                                    ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY",
                                    "FRIDAY", "SATURDAY", "SUNDAY"].'
                                  type: string
                                startTime:
                                  description: |-
                                    Immutable. Time within the window to start the operations.
                                    It must be in format "HH:MM", where HH : [00-23] and MM : [00-00] GMT.
                                  type: string
                              required:
                              - day
                              - startTime
                              type: object
                            type: array
                        required:
                        - dayOfWeeks
                        type: object
                    type: object
                  snapshotProperties:
                    description: Immutable. Properties with which the snapshots are
                      created, such as labels.
                    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.
                        type: string
                      guestFlush:
                        description: Immutable. Whether to perform a 'guest aware'
                          snapshot.
                        type: boolean
                      labels:
                        additionalProperties:
                          type: string
                        description: Immutable. A set of key-value pairs.
                        type: object
                      storageLocations:
                        description: |-
                          Immutable. Cloud Storage bucket location to store the auto snapshot
                          (regional or multi-regional).
                        items:
                          type: string
                        type: array
                    type: object
                required:
                - schedule
                type: object
            required:
            - region
            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
              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
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
