# 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: computenodegroups.compute.cnrm.cloud.google.com
spec:
  group: compute.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: ComputeNodeGroup
    plural: computenodegroups
    shortNames:
    - gcpcomputenodegroup
    - gcpcomputenodegroups
    singular: computenodegroup
  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:
              autoscalingPolicy:
                description: |-
                  Immutable. If you use sole-tenant nodes for your workloads, you can use the node
                  group autoscaler to automatically manage the sizes of your node groups.
                properties:
                  maxNodes:
                    description: |-
                      Immutable. Maximum size of the node group. Set to a value less than or equal
                      to 100 and greater than or equal to min-nodes.
                    type: integer
                  minNodes:
                    description: |-
                      Immutable. Minimum size of the node group. Must be less
                      than or equal to max-nodes. The default value is 0.
                    type: integer
                  mode:
                    description: |-
                      Immutable. The autoscaling mode. Set to one of the following:
                        - OFF: Disables the autoscaler.
                        - ON: Enables scaling in and scaling out.
                        - ONLY_SCALE_OUT: Enables only scaling out.
                        You must use this mode if your node groups are configured to
                        restart their hosted VMs on minimal servers. Possible values: ["OFF", "ON", "ONLY_SCALE_OUT"].
                    type: string
                type: object
              description:
                description: Immutable. An optional textual description of the resource.
                type: string
              initialSize:
                description: Immutable. The initial number of nodes in the node group.
                  One of 'initial_size' or 'size' must be specified.
                type: integer
              maintenancePolicy:
                description: 'Immutable. Specifies how to handle instances when a
                  node in the group undergoes maintenance. Set to one of: DEFAULT,
                  RESTART_IN_PLACE, or MIGRATE_WITHIN_NODE_GROUP. The default value
                  is DEFAULT.'
                type: string
              maintenanceWindow:
                description: Immutable. contains properties for the timeframe of maintenance.
                properties:
                  startTime:
                    description: Immutable. instances.start time of the window. 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:
                - startTime
                type: object
              nodeTemplateRef:
                description: The node template to which this node group belongs.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeNodeTemplate`
                      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
              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
              shareSettings:
                description: Immutable. Share settings for the node group.
                properties:
                  projectMap:
                    description: Immutable. A map of project id and project config.
                      This is only valid when shareType's value is SPECIFIC_PROJECTS.
                    items:
                      properties:
                        idRef:
                          description: The key of this project config in the parent
                            map.
                          oneOf:
                          - not:
                              required:
                              - external
                            required:
                            - name
                          - not:
                              anyOf:
                              - required:
                                - name
                              - required:
                                - namespace
                            required:
                            - external
                          properties:
                            external:
                              description: 'Allowed value: The `name` field of a `Project`
                                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
                        projectIdRef:
                          description: |-
                            The project id/number should be the same as the key of this project
                            config in the project map.
                          oneOf:
                          - not:
                              required:
                              - external
                            required:
                            - name
                          - not:
                              anyOf:
                              - required:
                                - name
                              - required:
                                - namespace
                            required:
                            - external
                          properties:
                            external:
                              description: 'Allowed value: The `name` field of a `Project`
                                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
                      required:
                      - idRef
                      - projectIdRef
                      type: object
                    type: array
                  shareType:
                    description: 'Immutable. Node group sharing type. Possible values:
                      ["ORGANIZATION", "SPECIFIC_PROJECTS", "LOCAL"].'
                    type: string
                required:
                - shareType
                type: object
              size:
                description: Immutable. The total number of nodes in the node group.
                  One of 'initial_size' or 'size' must be specified.
                type: integer
              zone:
                description: Immutable. Zone where this node group is located.
                type: string
            required:
            - nodeTemplateRef
            - zone
            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
              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: []
