# 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: computesubnetworks.compute.cnrm.cloud.google.com
spec:
  group: compute.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: ComputeSubnetwork
    plural: computesubnetworks
    shortNames:
    - gcpcomputesubnetwork
    - gcpcomputesubnetworks
    singular: computesubnetwork
  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. This field can be set only at resource
                  creation time.
                type: string
              ipCidrRange:
                description: |-
                  The range of internal addresses that are owned by this subnetwork.
                  Provide this property when you create the subnetwork. For example,
                  10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and
                  non-overlapping within a network. Only IPv4 is supported.
                type: string
              ipv6AccessType:
                description: |-
                  The access type of IPv6 address this subnet holds. It's immutable and can only be specified during creation
                  or the first time the subnet is updated into IPV4_IPV6 dual stack. If the ipv6_type is EXTERNAL then this subnet
                  cannot enable direct path. Possible values: ["EXTERNAL", "INTERNAL"].
                type: string
              logConfig:
                description: |-
                  This field denotes the VPC flow logging options for this subnetwork. If
                  logging is enabled, logs are exported to Cloud Logging. Flow logging
                  isn't supported if the subnet 'purpose' field is set to subnetwork is
                  'REGIONAL_MANAGED_PROXY' or 'GLOBAL_MANAGED_PROXY'.
                properties:
                  aggregationInterval:
                    description: |-
                      Can only be specified if VPC flow logging for this subnetwork is enabled.
                      Toggles the aggregation interval for collecting flow logs. Increasing the
                      interval time will reduce the amount of generated flow logs for long
                      lasting connections. Default is an interval of 5 seconds per connection. Default value: "INTERVAL_5_SEC" Possible values: ["INTERVAL_5_SEC", "INTERVAL_30_SEC", "INTERVAL_1_MIN", "INTERVAL_5_MIN", "INTERVAL_10_MIN", "INTERVAL_15_MIN"].
                    type: string
                  filterExpr:
                    description: |-
                      Export filter used to define which VPC flow logs should be logged, as as CEL expression. See
                      https://cloud.google.com/vpc/docs/flow-logs#filtering for details on how to format this field.
                      The default value is 'true', which evaluates to include everything.
                    type: string
                  flowSampling:
                    description: |-
                      Can only be specified if VPC flow logging for this subnetwork is enabled.
                      The value of the field must be in [0, 1]. Set the sampling rate of VPC
                      flow logs within the subnetwork where 1.0 means all collected logs are
                      reported and 0.0 means no logs are reported. Default is 0.5 which means
                      half of all collected logs are reported.
                    type: number
                  metadata:
                    description: |-
                      Can only be specified if VPC flow logging for this subnetwork is enabled.
                      Configures whether metadata fields should be added to the reported VPC
                      flow logs. Default value: "INCLUDE_ALL_METADATA" Possible values: ["EXCLUDE_ALL_METADATA", "INCLUDE_ALL_METADATA", "CUSTOM_METADATA"].
                    type: string
                  metadataFields:
                    description: |-
                      List of metadata fields that should be added to reported logs.
                      Can only be specified if VPC flow logs for this subnetwork is enabled and "metadata" is set to CUSTOM_METADATA.
                    items:
                      type: string
                    type: array
                type: object
              networkRef:
                description: |-
                  The network this subnet belongs to. Only networks that are in the
                  distributed mode can have subnetworks.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeNetwork`
                      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
              privateIpGoogleAccess:
                description: |-
                  When enabled, VMs in this subnetwork without external IP addresses can
                  access Google APIs and services by using Private Google Access.
                type: boolean
              privateIpv6GoogleAccess:
                description: The private IPv6 google access type for the VMs in this
                  subnet.
                type: string
              purpose:
                description: |-
                  Immutable. The purpose of the resource. This field can be either 'PRIVATE_RFC_1918', 'REGIONAL_MANAGED_PROXY', 'GLOBAL_MANAGED_PROXY', or 'PRIVATE_SERVICE_CONNECT'.
                  A subnet with purpose set to 'REGIONAL_MANAGED_PROXY' is a user-created subnetwork that is reserved for regional Envoy-based load balancers.
                  A subnetwork in a given region with purpose set to 'GLOBAL_MANAGED_PROXY' is a proxy-only subnet and is shared between all the cross-regional Envoy-based load balancers.
                  A subnetwork with purpose set to 'PRIVATE_SERVICE_CONNECT' reserves the subnet for hosting a Private Service Connect published service.
                  Note that 'REGIONAL_MANAGED_PROXY' is the preferred setting for all regional Envoy load balancers.
                  If unspecified, the purpose defaults to 'PRIVATE_RFC_1918'.
                type: string
              region:
                description: Immutable. The GCP region for this subnetwork.
                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
              role:
                description: |-
                  The role of subnetwork.
                  Currently, this field is only used when 'purpose' is 'REGIONAL_MANAGED_PROXY'.
                  The value can be set to 'ACTIVE' or 'BACKUP'.
                  An 'ACTIVE' subnetwork is one that is currently being used for Envoy-based load balancers in a region.
                  A 'BACKUP' subnetwork is one that is ready to be promoted to 'ACTIVE' or is currently draining. Possible values: ["ACTIVE", "BACKUP"].
                type: string
              secondaryIpRange:
                items:
                  properties:
                    ipCidrRange:
                      description: |-
                        The range of IP addresses belonging to this subnetwork secondary
                        range. Provide this property when you create the subnetwork.
                        Ranges must be unique and non-overlapping with all primary and
                        secondary IP ranges within a network. Only IPv4 is supported.
                      type: string
                    rangeName:
                      description: |-
                        The name associated with this subnetwork secondary range, used
                        when adding an alias IP range to a VM instance. The name must
                        be 1-63 characters long, and comply with RFC1035. The name
                        must be unique within the subnetwork.
                      type: string
                  required:
                  - ipCidrRange
                  - rangeName
                  type: object
                type: array
              stackType:
                description: |-
                  The stack type for this subnet to identify whether the IPv6 feature is enabled or not.
                  If not specified IPV4_ONLY will be used. Possible values: ["IPV4_ONLY", "IPV4_IPV6"].
                type: string
            required:
            - ipCidrRange
            - networkRef
            - 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
              creationTimestamp:
                description: Creation timestamp in RFC3339 text format.
                type: string
              externalIpv6Prefix:
                description: The range of external IPv6 addresses that are owned by
                  this subnetwork.
                type: string
              fingerprint:
                description: DEPRECATED. This field is not useful for users, and has
                  been removed as an output. Fingerprint of this resource. This field
                  is used internally during updates of this resource.
                type: string
              gatewayAddress:
                description: |-
                  The gateway address for default routes to reach destination addresses
                  outside this subnetwork.
                type: string
              internalIpv6Prefix:
                description: The internal IPv6 address range that is assigned to this
                  subnetwork.
                type: string
              ipv6CidrRange:
                description: The range of internal IPv6 addresses that are owned by
                  this subnetwork.
                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: []
