apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.14.0
  name: loadbalancerconfigurations.gateway.k8s.aws
spec:
  group: gateway.k8s.aws
  names:
    kind: LoadBalancerConfiguration
    listKind: LoadBalancerConfigurationList
    plural: loadbalancerconfigurations
    singular: loadbalancerconfiguration
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .metadata.creationTimestamp
      name: AGE
      type: date
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: LoadBalancerConfiguration is the Schema for the LoadBalancerConfiguration
          API
        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/sig-architecture/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/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: LoadBalancerConfigurationSpec defines the desired state of
              LoadBalancerConfiguration
            properties:
              customerOwnedIpv4Pool:
                description: |-
                  customerOwnedIpv4Pool [Application LoadBalancer]
                  is the ID of the customer-owned address for Application Load Balancers on Outposts pool.
                type: string
              enableICMP:
                description: |-
                  EnableICMP [Network LoadBalancer]
                  enables the creation of security group rules to the managed security group
                  to allow explicit ICMP traffic for Path MTU discovery for IPv4 and dual-stack VPCs
                type: boolean
              enforceSecurityGroupInboundRulesOnPrivateLinkTraffic:
                description: enforceSecurityGroupInboundRulesOnPrivateLinkTraffic
                  Indicates whether to evaluate inbound security group rules for traffic
                  sent to a Network Load Balancer through Amazon Web Services PrivateLink.
                type: string
              ipAddressType:
                description: loadBalancerIPType defines what kind of load balancer
                  to provision (ipv4, dual stack)
                enum:
                - ipv4
                - dualstack
                - dualstack-without-public-ipv4
                type: string
              ipv4IPAMPoolId:
                description: |-
                  IPv4IPAMPoolId [Application LoadBalancer]
                  defines the IPAM pool ID used for IPv4 Addresses on the ALB.
                type: string
              listenerConfigurations:
                description: listenerConfigurations is an optional list of configurations
                  for each listener on LB
                items:
                  properties:
                    alpnPolicy:
                      default: None
                      description: alpnPolicy an optional string that allows you to
                        configure ALPN policies on your Load Balancer
                      enum:
                      - HTTP1Only
                      - HTTP2Only
                      - HTTP2Optional
                      - HTTP2Preferred
                      - None
                      type: string
                    certificates:
                      description: certificates is the list of other certificates
                        to add to the listener.
                      items:
                        type: string
                      type: array
                    defaultCertificate:
                      description: defaultCertificate the cert arn to be used by default.
                      type: string
                    listenerAttributes:
                      description: listenerAttributes defines the attributes for the
                        listener
                      items:
                        description: ListenerAttribute defines listener attribute.
                        properties:
                          key:
                            description: The key of the attribute.
                            type: string
                          value:
                            description: The value of the attribute.
                            type: string
                        required:
                        - key
                        - value
                        type: object
                      type: array
                    mutualAuthentication:
                      default:
                        mode: "off"
                      description: mutualAuthentication defines the mutual authentication
                        configuration information.
                      properties:
                        advertiseTrustStoreCaNames:
                          description: Indicates whether trust store CA certificate
                            names are advertised.
                          enum:
                          - "on"
                          - "off"
                          type: string
                        ignoreClientCertificateExpiry:
                          description: Indicates whether expired client certificates
                            are ignored.
                          type: boolean
                        mode:
                          description: The client certificate handling method. Options
                            are off, passthrough or verify
                          enum:
                          - "off"
                          - passthrough
                          - verify
                          type: string
                        trustStore:
                          description: The Name or ARN of the trust store.
                          type: string
                      required:
                      - mode
                      type: object
                      x-kubernetes-validations:
                      - message: trustStore is required when mutualAuthentication
                          mode is 'verify'
                        rule: '!(self.mode == ''verify'' && !has(self.trustStore))'
                      - message: Mutual Authentication mode 'off' or 'passthrough'
                          does not support 'trustStore'
                        rule: '!(self.mode != ''verify'' && has(self.trustStore))'
                      - message: Mutual Authentication mode 'off' or 'passthrough'
                          does not support 'ignoreClientCertificateExpiry'
                        rule: '!(self.mode != ''verify'' && has(self.ignoreClientCertificateExpiry))'
                      - message: Mutual Authentication mode 'off' or 'passthrough'
                          does not support 'advertiseTrustStoreCaNames'
                        rule: '!(self.mode != ''verify'' && has(self.advertiseTrustStoreCaNames))'
                    protocolPort:
                      description: protocolPort is identifier for the listener on
                        load balancer. It should be of the form PROTOCOL:PORT
                      pattern: ^(HTTP|HTTPS|TLS|TCP|UDP)?:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3})?$
                      type: string
                    sslPolicy:
                      description: sslPolicy is the security policy that defines which
                        protocols and ciphers are supported for secure listeners [HTTPS
                        or TLS listener].
                      type: string
                  required:
                  - protocolPort
                  type: object
                type: array
              loadBalancerAttributes:
                description: LoadBalancerAttributes defines the attribute of LB
                items:
                  description: LoadBalancerAttribute defines LB attribute.
                  properties:
                    key:
                      description: The key of the attribute.
                      type: string
                    value:
                      description: The value of the attribute.
                      type: string
                  required:
                  - key
                  - value
                  type: object
                type: array
              loadBalancerName:
                description: loadBalancerName defines the name of the LB to provision.
                  If unspecified, it will be automatically generated.
                maxLength: 32
                minLength: 1
                type: string
              loadBalancerSubnets:
                description: |-
                  loadBalancerSubnets is an optional list of subnet configurations to be used in the LB
                  This value takes precedence over loadBalancerSubnetsSelector if both are selected.
                items:
                  description: SubnetConfiguration defines the subnet settings for
                    a Load Balancer.
                  properties:
                    eipAllocation:
                      description: eipAllocation [Network LoadBalancer] the EIP name
                        for this subnet.
                      type: string
                    identifier:
                      description: identifier [Application LoadBalancer / Network
                        LoadBalancer] name or id for the subnet
                      type: string
                    ipv6Allocation:
                      description: IPv6Allocation [Network LoadBalancer] the ipv6
                        address to assign to this subnet.
                      type: string
                    privateIPv4Allocation:
                      description: privateIPv4Allocation [Network LoadBalancer] the
                        private ipv4 address to assign to this subnet.
                      type: string
                    sourceNatIPv6Prefix:
                      description: SourceNatIPv6Prefix [Network LoadBalancer] The
                        IPv6 prefix to use for source NAT. Specify an IPv6 prefix
                        (/80 netmask) from the subnet CIDR block or auto_assigned
                        to use an IPv6 prefix selected at random from the subnet CIDR
                        block.
                      type: string
                  type: object
                type: array
              loadBalancerSubnetsSelector:
                additionalProperties:
                  items:
                    type: string
                  type: array
                description: |-
                  LoadBalancerSubnetsSelector specifies subnets in the load balancer's VPC where each
                  tag specified in the map key contains one of the values in the corresponding
                  value list.
                type: object
              manageBackendSecurityGroupRules:
                description: |-
                  ManageBackendSecurityGroupRules [Application / Network LoadBalancer]
                  specifies whether you want the controller to configure security group rules on Node/Pod for traffic access
                  when you specify securityGroups
                type: boolean
              mergingMode:
                description: |-
                  mergingMode defines the merge behavior when both the Gateway and GatewayClass have a defined LoadBalancerConfiguration.
                  This field is only honored for the configuration attached to the GatewayClass.
                enum:
                - prefer-gateway
                - prefer-gateway-class
                type: string
              minimumLoadBalancerCapacity:
                description: MinimumLoadBalancerCapacity define the capacity reservation
                  for LoadBalancers
                properties:
                  capacityUnits:
                    description: The Capacity Units Value.
                    format: int32
                    type: integer
                required:
                - capacityUnits
                type: object
              scheme:
                description: scheme defines the type of LB to provision. If unspecified,
                  it will be automatically inferred.
                enum:
                - internal
                - internet-facing
                type: string
              securityGroupPrefixes:
                description: securityGroupPrefixes an optional list of prefixes that
                  are allowed to access the LB.
                items:
                  type: string
                type: array
              securityGroups:
                description: securityGroups an optional list of security group ids
                  or names to apply to the LB
                items:
                  type: string
                type: array
              sourceRanges:
                description: sourceRanges an optional list of CIDRs that are allowed
                  to access the LB.
                items:
                  type: string
                type: array
              tags:
                additionalProperties:
                  type: string
                description: Tags the AWS Tags on all related resources to the gateway.
                type: object
              vpcId:
                description: vpcId is the ID of the VPC for the load balancer.
                type: string
            type: object
          status:
            description: LoadBalancerConfigurationStatus defines the observed state
              of TargetGroupBinding
            properties:
              observedGatewayClassConfigurationGeneration:
                description: The generation of the Gateway Configuration attached
                  to the GatewayClass object.
                format: int64
                type: integer
              observedGatewayConfigurationGeneration:
                description: The generation of the Gateway Configuration attached
                  to the Gateway object.
                format: int64
                type: integer
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.14.0
  name: targetgroupconfigurations.gateway.k8s.aws
spec:
  group: gateway.k8s.aws
  names:
    kind: TargetGroupConfiguration
    listKind: TargetGroupConfigurationList
    plural: targetgroupconfigurations
    singular: targetgroupconfiguration
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: The Kubernetes Service's name
      jsonPath: .spec.targetReference.name
      name: SERVICE-NAME
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: AGE
      type: date
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: TargetGroupConfiguration is the Schema for defining TargetGroups
          with an AWS ELB Gateway
        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/sig-architecture/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/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: TargetGroupConfigurationSpec defines the TargetGroup properties
              for a route.
            properties:
              defaultConfiguration:
                description: defaultRouteConfiguration fallback configuration applied
                  to all routes, unless overridden by route-specific configurations.
                properties:
                  enableMultiCluster:
                    description: |-
                      EnableMultiCluster [Application / Network LoadBalancer]
                      Allows for multiple Clusters / Services to use the generated TargetGroup ARN
                    type: boolean
                  healthCheckConfig:
                    description: healthCheckConfig The Health Check configuration
                      for this backend.
                    properties:
                      healthCheckInterval:
                        description: healthCheckInterval The approximate amount of
                          time, in seconds, between health checks of an individual
                          target.
                        format: int32
                        type: integer
                      healthCheckPath:
                        description: healthCheckPath The destination for health checks
                          on the targets.
                        type: string
                      healthCheckPort:
                        description: |-
                          healthCheckPort The port the load balancer uses when performing health checks on targets.
                          The default is to use the port on which each target receives traffic from the load balancer.
                        type: string
                      healthCheckProtocol:
                        description: healthCheckProtocol The protocol to use to connect
                          with the target. The GENEVE, TLS, UDP, and TCP_UDP protocols
                          are not supported for health checks.
                        enum:
                        - http
                        - https
                        - tcp
                        type: string
                      healthCheckTimeout:
                        description: healthCheckTimeout The amount of time, in seconds,
                          during which no response means a failed health check
                        format: int32
                        type: integer
                      healthyThresholdCount:
                        description: healthyThresholdCount The number of consecutive
                          health checks successes required before considering an unhealthy
                          target healthy.
                        format: int32
                        type: integer
                      matcher:
                        description: healthCheckCodes The HTTP or gRPC codes to use
                          when checking for a successful response from a target
                        properties:
                          grpcCode:
                            description: The gRPC codes
                            type: string
                          httpCode:
                            description: The HTTP codes.
                            type: string
                        type: object
                      unhealthyThresholdCount:
                        description: unhealthyThresholdCount The number of consecutive
                          health check failures required before considering the target
                          unhealthy.
                        format: int32
                        type: integer
                    type: object
                  ipAddressType:
                    description: ipAddressType specifies whether the target group
                      is of type IPv4 or IPv6. If unspecified, it will be automatically
                      inferred.
                    enum:
                    - ipv4
                    - ipv6
                    type: string
                  nodeSelector:
                    description: node selector for instance type target groups to
                      only register certain nodes
                    properties:
                      matchExpressions:
                        description: matchExpressions is a list of label selector
                          requirements. The requirements are ANDed.
                        items:
                          description: |-
                            A label selector requirement is a selector that contains values, a key, and an operator that
                            relates the key and values.
                          properties:
                            key:
                              description: key is the label key that the selector
                                applies to.
                              type: string
                            operator:
                              description: |-
                                operator represents a key's relationship to a set of values.
                                Valid operators are In, NotIn, Exists and DoesNotExist.
                              type: string
                            values:
                              description: |-
                                values is an array of string values. If the operator is In or NotIn,
                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                the values array must be empty. This array is replaced during a strategic
                                merge patch.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                          required:
                          - key
                          - operator
                          type: object
                        type: array
                        x-kubernetes-list-type: atomic
                      matchLabels:
                        additionalProperties:
                          type: string
                        description: |-
                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                        type: object
                    type: object
                    x-kubernetes-map-type: atomic
                  protocol:
                    description: |-
                      Protocol [Application / Network Load Balancer] the protocol for the target group.
                      If unspecified, it will be automatically inferred.
                    enum:
                    - HTTP
                    - HTTPS
                    - TCP
                    - TLS
                    - UDP
                    - TCP_UDP
                    type: string
                  protocolVersion:
                    description: protocolVersion [HTTP/HTTPS protocol] The protocol
                      version. The possible values are GRPC , HTTP1 and HTTP2
                    enum:
                    - HTTP1
                    - HTTP2
                    - GRPC
                    type: string
                  tags:
                    additionalProperties:
                      type: string
                    description: Tags the Tags to add on the target group.
                    type: object
                  targetGroupAttributes:
                    description: targetGroupAttributes defines the attribute of target
                      group
                    items:
                      description: TargetGroupAttribute defines target group attribute.
                      properties:
                        key:
                          description: The key of the attribute.
                          type: string
                        value:
                          description: The value of the attribute.
                          type: string
                      required:
                      - key
                      - value
                      type: object
                    type: array
                  targetGroupName:
                    description: targetGroupName specifies the name to assign to the
                      Target Group. If not defined, then one is generated.
                    type: string
                  targetType:
                    description: targetType is the TargetType of TargetGroup. If unspecified,
                      it will be automatically inferred as instance.
                    enum:
                    - instance
                    - ip
                    type: string
                type: object
              routeConfigurations:
                description: routeConfigurations the route configuration for specific
                  routes. the longest prefix match (kind:namespace:name) is taken
                  to combine with the default properties.
                items:
                  description: RouteConfiguration defines the per route configuration
                  properties:
                    routeIdentifier:
                      description: name the identifier of the route, it should be
                        in the form of ROUTE:NAMESPACE:NAME
                      properties:
                        kind:
                          type: string
                        name:
                          type: string
                        namespace:
                          type: string
                      type: object
                    targetGroupProps:
                      description: targetGroupProps the target group specific properties
                      properties:
                        enableMultiCluster:
                          description: |-
                            EnableMultiCluster [Application / Network LoadBalancer]
                            Allows for multiple Clusters / Services to use the generated TargetGroup ARN
                          type: boolean
                        healthCheckConfig:
                          description: healthCheckConfig The Health Check configuration
                            for this backend.
                          properties:
                            healthCheckInterval:
                              description: healthCheckInterval The approximate amount
                                of time, in seconds, between health checks of an individual
                                target.
                              format: int32
                              type: integer
                            healthCheckPath:
                              description: healthCheckPath The destination for health
                                checks on the targets.
                              type: string
                            healthCheckPort:
                              description: |-
                                healthCheckPort The port the load balancer uses when performing health checks on targets.
                                The default is to use the port on which each target receives traffic from the load balancer.
                              type: string
                            healthCheckProtocol:
                              description: healthCheckProtocol The protocol to use
                                to connect with the target. The GENEVE, TLS, UDP,
                                and TCP_UDP protocols are not supported for health
                                checks.
                              enum:
                              - http
                              - https
                              - tcp
                              type: string
                            healthCheckTimeout:
                              description: healthCheckTimeout The amount of time,
                                in seconds, during which no response means a failed
                                health check
                              format: int32
                              type: integer
                            healthyThresholdCount:
                              description: healthyThresholdCount The number of consecutive
                                health checks successes required before considering
                                an unhealthy target healthy.
                              format: int32
                              type: integer
                            matcher:
                              description: healthCheckCodes The HTTP or gRPC codes
                                to use when checking for a successful response from
                                a target
                              properties:
                                grpcCode:
                                  description: The gRPC codes
                                  type: string
                                httpCode:
                                  description: The HTTP codes.
                                  type: string
                              type: object
                            unhealthyThresholdCount:
                              description: unhealthyThresholdCount The number of consecutive
                                health check failures required before considering
                                the target unhealthy.
                              format: int32
                              type: integer
                          type: object
                        ipAddressType:
                          description: ipAddressType specifies whether the target
                            group is of type IPv4 or IPv6. If unspecified, it will
                            be automatically inferred.
                          enum:
                          - ipv4
                          - ipv6
                          type: string
                        nodeSelector:
                          description: node selector for instance type target groups
                            to only register certain nodes
                          properties:
                            matchExpressions:
                              description: matchExpressions is a list of label selector
                                requirements. The requirements are ANDed.
                              items:
                                description: |-
                                  A label selector requirement is a selector that contains values, a key, and an operator that
                                  relates the key and values.
                                properties:
                                  key:
                                    description: key is the label key that the selector
                                      applies to.
                                    type: string
                                  operator:
                                    description: |-
                                      operator represents a key's relationship to a set of values.
                                      Valid operators are In, NotIn, Exists and DoesNotExist.
                                    type: string
                                  values:
                                    description: |-
                                      values is an array of string values. If the operator is In or NotIn,
                                      the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                      the values array must be empty. This array is replaced during a strategic
                                      merge patch.
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                required:
                                - key
                                - operator
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            matchLabels:
                              additionalProperties:
                                type: string
                              description: |-
                                matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                map is equivalent to an element of matchExpressions, whose key field is "key", the
                                operator is "In", and the values array contains only "value". The requirements are ANDed.
                              type: object
                          type: object
                          x-kubernetes-map-type: atomic
                        protocol:
                          description: |-
                            Protocol [Application / Network Load Balancer] the protocol for the target group.
                            If unspecified, it will be automatically inferred.
                          enum:
                          - HTTP
                          - HTTPS
                          - TCP
                          - TLS
                          - UDP
                          - TCP_UDP
                          type: string
                        protocolVersion:
                          description: protocolVersion [HTTP/HTTPS protocol] The protocol
                            version. The possible values are GRPC , HTTP1 and HTTP2
                          enum:
                          - HTTP1
                          - HTTP2
                          - GRPC
                          type: string
                        tags:
                          additionalProperties:
                            type: string
                          description: Tags the Tags to add on the target group.
                          type: object
                        targetGroupAttributes:
                          description: targetGroupAttributes defines the attribute
                            of target group
                          items:
                            description: TargetGroupAttribute defines target group
                              attribute.
                            properties:
                              key:
                                description: The key of the attribute.
                                type: string
                              value:
                                description: The value of the attribute.
                                type: string
                            required:
                            - key
                            - value
                            type: object
                          type: array
                        targetGroupName:
                          description: targetGroupName specifies the name to assign
                            to the Target Group. If not defined, then one is generated.
                          type: string
                        targetType:
                          description: targetType is the TargetType of TargetGroup.
                            If unspecified, it will be automatically inferred as instance.
                          enum:
                          - instance
                          - ip
                          type: string
                      type: object
                  required:
                  - routeIdentifier
                  - targetGroupProps
                  type: object
                type: array
              targetReference:
                description: targetReference the kubernetes object to attach the Target
                  Group settings to.
                properties:
                  group:
                    default: ""
                    description: |-
                      Group is the group of the referent. For example, "gateway.networking.k8s.io".
                      When unspecified or empty string, core API group is inferred.
                    type: string
                  kind:
                    default: Service
                    description: |-
                      Kind is the Kubernetes resource kind of the referent. For example
                      "Service".


                      Defaults to "Service" when not specified.
                    type: string
                  name:
                    description: Name is the name of the referent.
                    type: string
                required:
                - name
                type: object
            required:
            - targetReference
            type: object
          status:
            description: TargetGroupConfigurationStatus defines the observed state
              of TargetGroupConfiguration
            properties:
              observedGatewayClassConfigurationGeneration:
                description: The generation of the Gateway Configuration attached
                  to the GatewayClass object.
                format: int64
                type: integer
              observedGatewayConfigurationGeneration:
                description: The generation of the Gateway Configuration attached
                  to the Gateway object.
                format: int64
                type: integer
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
