{
  "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.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore 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.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore 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]\nAllows 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.\nThe 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",
                  "additionalProperties": false
                },
                "unhealthyThresholdCount": {
                  "description": "unhealthyThresholdCount The number of consecutive health check failures required before considering the target unhealthy.",
                  "format": "int32",
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "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\nrelates 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.\nValid 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,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                        "items": {
                          "type": "string"
                        },
                        "type": "array",
                        "x-kubernetes-list-type": "atomic"
                      }
                    },
                    "required": [
                      "key",
                      "operator"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "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\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                  "type": "object"
                }
              },
              "type": "object",
              "x-kubernetes-map-type": "atomic",
              "additionalProperties": false
            },
            "protocol": {
              "description": "Protocol [Application / Network Load Balancer] the protocol for the target group.\nIf 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"
            },
            "targetControlPort": {
              "description": "targetControlPort [Application Load Balancer] The port on which the target communicates its capacity. This value can't be modified after target group creation.",
              "format": "int32",
              "type": "integer"
            },
            "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",
                "additionalProperties": false
              },
              "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",
          "additionalProperties": false
        },
        "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",
                "additionalProperties": false
              },
              "targetGroupProps": {
                "description": "targetGroupProps the target group specific properties",
                "properties": {
                  "enableMultiCluster": {
                    "description": "EnableMultiCluster [Application / Network LoadBalancer]\nAllows 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.\nThe 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",
                        "additionalProperties": false
                      },
                      "unhealthyThresholdCount": {
                        "description": "unhealthyThresholdCount The number of consecutive health check failures required before considering the target unhealthy.",
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "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\nrelates 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.\nValid 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,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                              "items": {
                                "type": "string"
                              },
                              "type": "array",
                              "x-kubernetes-list-type": "atomic"
                            }
                          },
                          "required": [
                            "key",
                            "operator"
                          ],
                          "type": "object",
                          "additionalProperties": false
                        },
                        "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\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
                        "type": "object"
                      }
                    },
                    "type": "object",
                    "x-kubernetes-map-type": "atomic",
                    "additionalProperties": false
                  },
                  "protocol": {
                    "description": "Protocol [Application / Network Load Balancer] the protocol for the target group.\nIf 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"
                  },
                  "targetControlPort": {
                    "description": "targetControlPort [Application Load Balancer] The port on which the target communicates its capacity. This value can't be modified after target group creation.",
                    "format": "int32",
                    "type": "integer"
                  },
                  "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",
                      "additionalProperties": false
                    },
                    "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",
                "additionalProperties": false
              }
            },
            "required": [
              "routeIdentifier",
              "targetGroupProps"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "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\".\nWhen 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\n\"Service\".\n\nDefaults to \"Service\" when not specified.",
              "type": "string"
            },
            "name": {
              "description": "Name is the name of the referent.",
              "type": "string"
            }
          },
          "required": [
            "name"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "targetReference"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "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",
      "additionalProperties": false
    }
  },
  "type": "object"
}
