# 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: computeaddresses.compute.cnrm.cloud.google.com
spec:
  group: compute.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: ComputeAddress
    plural: computeaddresses
    shortNames:
    - gcpcomputeaddress
    - gcpcomputeaddresses
    singular: computeaddress
  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:
              address:
                description: |-
                  Immutable. The static external IP address represented by this resource.
                  The IP address must be inside the specified subnetwork,
                  if any. Set by the API if undefined.
                type: string
              addressType:
                description: |-
                  Immutable. The type of address to reserve.
                  Note: if you set this argument's value as 'INTERNAL' you need to leave the 'network_tier' argument unset in that resource block. Default value: "EXTERNAL" Possible values: ["INTERNAL", "EXTERNAL"].
                type: string
              description:
                description: Immutable. An optional description of this resource.
                type: string
              ipVersion:
                description: 'Immutable. The IP Version that will be used by this
                  address. The default value is ''IPV4''. Possible values: ["IPV4",
                  "IPV6"].'
                type: string
              ipv6EndpointType:
                description: |-
                  Immutable. The endpoint type of this address, which should be VM or NETLB. This is
                  used for deciding which type of endpoint this address can be used after
                  the external IPv6 address reservation. Possible values: ["VM", "NETLB"].
                type: string
              location:
                description: 'Location represents the geographical location of the
                  ComputeAddress. Specify a region name or "global" for global resources.
                  Reference: GCP definition of regions/zones (https://cloud.google.com/compute/docs/regions-zones/)'
                type: string
              networkRef:
                description: |-
                  The network in which to reserve the address. If global, the address
                  must be within the RFC1918 IP space. The network cannot be deleted
                  if there are any reserved IP ranges referring to it. This field can
                  only be used with INTERNAL type with the VPC_PEERING and
                  IPSEC_INTERCONNECT purposes.
                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
              networkTier:
                description: |-
                  Immutable. The networking tier used for configuring this address. If this field is not
                  specified, it is assumed to be PREMIUM.
                  This argument should not be used when configuring Internal addresses, because [network tier cannot be set for internal traffic; it's always Premium](https://cloud.google.com/network-tiers/docs/overview). Possible values: ["PREMIUM", "STANDARD"].
                type: string
              prefixLength:
                description: Immutable. The prefix length if the resource represents
                  an IP range.
                type: integer
              purpose:
                description: |-
                  Immutable. The purpose of this resource, which can be one of the following values.

                  * GCE_ENDPOINT for addresses that are used by VM instances, alias IP
                  ranges, load balancers, and similar resources.

                  * SHARED_LOADBALANCER_VIP for an address that can be used by multiple
                  internal load balancers.

                  * VPC_PEERING for addresses that are reserved for VPC peer networks.

                  * IPSEC_INTERCONNECT for addresses created from a private IP range that
                  are reserved for a VLAN attachment in an HA VPN over Cloud Interconnect
                  configuration. These addresses are regional resources.

                  * PRIVATE_SERVICE_CONNECT for a private network address that is used to
                  configure Private Service Connect. Only global internal addresses can use
                  this purpose.


                  This should only be set when using an Internal address.
                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
              subnetworkRef:
                description: |-
                  The subnetwork in which to reserve the address. If an IP address is
                  specified, it must be within the subnetwork's IP range.  This field
                  can only be used with INTERNAL type with GCE_ENDPOINT/DNS_RESOLVER
                  purposes.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: 'Allowed value: The `selfLink` field of a `ComputeSubnetwork`
                      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:
            - location
            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
              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
              observedState:
                description: The observed state of the underlying GCP resource.
                properties:
                  address:
                    description: |-
                      Immutable. The static external IP address represented by this resource.
                      The IP address must be inside the specified subnetwork,
                      if any. Set by the API if undefined.
                    type: string
                type: object
              selfLink:
                type: string
              users:
                description: The URLs of the resources that are using this address.
                items:
                  type: string
                type: array
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
