import { Manifest, type ManifestConfig } from "@cdktf/provider-kubernetes/lib/manifest";
import { Construct } from "constructs";
export declare class NetworkingGkeIoGCPRoutingExtensionV1 extends Manifest {
    constructor(scope: Construct, id: string, config: NetworkingGkeIoGCPRoutingExtensionV1Config);
}
export interface NetworkingGkeIoGCPRoutingExtensionV1Config extends ManifestConfig {
    manifest: {
        apiVersion: "networking.gke.io/v1";
        kind: "GCPRoutingExtension";
        metadata: {
            annotations?: {
                [key: string]: string;
            };
            labels?: {
                [key: string]: string;
            };
            name: string;
            namespace?: string;
        };
        /** @description Spec defines the desired state of GCPRoutingExtension. */
        spec: {
            /** @description ExtensionChains is a set of ordered extension chains that contain
             *     the match conditions and extensions to execute. Match conditions for each
             *     extension chain are evaluated in sequence for a given request. The first
             *     extension chain that has conditions that match the request is executed.
             *     Any subsequent extension chains do not execute.
             *     Limited to 5 ExtensionChains. */
            extensionChains: {
                /** @description Extensions is a set of extensions to execute for the matching request.
                 *     Up to 3 Extensions can be defined for each ExtensionChain
                 *     for the GCPTrafficExtension.
                 *     GCPRoutingExtension chains are limited to 1 Extension per ExtensionChain. */
                extensions: {
                    /** @description Authority is the `:authority` header in the gRPC request sent from Envoy
                     *     to the callout extension backend service.
                     *     Required for extensions with callout backend service. */
                    authority?: string;
                    /** @description BackendRef identifies an API object that runs the extension.
                     *     Exactly one of BackendRef or GoogleAPIServiceName should be set. */
                    backendRef?: {
                        /**
                         * @description Group is the group of the referent.
                         * @default
                         * @enum {string}
                         */
                        group: "";
                        /**
                         * @description Kind is kind of the referent.
                         * @default Service
                         * @enum {string}
                         */
                        kind: "Service";
                        /** @description Name is the name of the referent. */
                        name: string;
                        /**
                         * Format: int32
                         * @description Port is the port of the referent.
                         */
                        port: number;
                    };
                    /** @description FailOpen determines how the proxy behaves if the call to the extension
                     *     fails or times out.
                     *
                     *     When set to `TRUE`, request or response processing continues without
                     *     error. Any subsequent extensions in the extension chain are also
                     *     executed. When set to `FALSE` or the default setting of `FALSE` is used,
                     *     one of the following happens:
                     *
                     *     * If response headers have not been delivered to the downstream client,
                     *     a generic 500 error is returned to the client. The error response can be
                     *     tailored by configuring a custom error response in the load balancer.
                     *
                     *     * If response headers have been delivered, then the HTTP stream to the
                     *     downstream client is reset. */
                    failOpen?: boolean;
                    /** @description ForwardHeaders is a list of the HTTP headers to forward to the extension
                     *     (from the client or backend). If omitted, all headers are sent.
                     *     Each element indicates the header name. */
                    forwardHeaders?: string[];
                    /** @description GoogleAPIServiceName is the name of the Google API service that runs the extension.
                     *     The name must be in one of the following formats:
                     *     - <serviceName>.<region>.rep.googleapis.com in regional case.
                     *     Exactly one of BackendRef or GoogleAPIServiceName should be set. */
                    googleAPIServiceName?: string;
                    /** @description Metadata provided here is included as part of the
                     *     `metadata_context` (of type `google.protobuf.Struct`) in the
                     *     `ProcessingRequest` message sent to the extension
                     *     server. The metadata is available under the namespace
                     *     `com.google.<extension_type>.<resource_name>.<extension_chain_name>.<extension_name>`.
                     *     For example:
                     *     `com.google.lb_traffic_extension.lbtrafficextension1.chain1.ext1`.
                     *
                     *     The following variables are supported in the metadata:
                     *
                     *     `{forwarding_rule_id}` - substituted with the forwarding rule's fully
                     *       qualified resource name. */
                    metadata?: {
                        [key: string]: string;
                    };
                    /** @description Name is the name for this chain.
                     *     The name is logged as part of the HTTP request logs.
                     *     The name must conform with RFC-1034, is restricted to lower-cased
                     *     letters, numbers and hyphens, and can have a maximum length of 63
                     *     characters. Additionally, the first character must be a letter and the
                     *     last a letter or a number. */
                    name: string;
                    /**
                     * @description RequestBodySendMode configures processing mode for request processing. If not specified
                     *     and RequestBody event is supported, the default value STREAMED is used.
                     *     Supported by both `GCPTrafficExtension` and `GCPRoutingExtension` resources
                     *     and only for extensions with `backendRef`.
                     *     When this field is set to `FullDuplexStreamed`, `supportedEvents`
                     *     must include both `RequestBody` and `RequestTrailers`.
                     * @enum {string}
                     */
                    requestBodySendMode?: "Streamed" | "FullDuplexStreamed";
                    /**
                     * @description ResponseBodySendMode configures processing mode for response processing.
                     *     If not specified and RequestBody event is supported, the default value STREAMED is used.
                     *     Supported only by `GCPTrafficExtension` resource
                     *     and only for extensions with `backendRef`.
                     *     When this field is set to `FullDuplexStreamed`, `supportedEvents`
                     *     must include both `ResponseBody` and `ResponseTrailers`.
                     * @enum {string}
                     */
                    responseBodySendMode?: "Streamed" | "FullDuplexStreamed";
                    /** @description SupportedEvents is a set of events during request or response
                     *     processing for which this extension is called.
                     *
                     *     This field is required for the `GCPTrafficExtension` resource.
                     *     This field is optional for the `GCPRoutingExtension` resource.
                     *
                     *     If requestBodySendMode is set for the `GCPRoutingExtension` resource,
                     *     then the `supportedEvents` list can only contain `RequestHeaders` events.
                     *     If requestBodySendMode is set to `FullDuplexStreamed` for the `GCPRoutingExtension` resource,
                     *     then the `supportedEvents` list can only contain `RequestHeaders`, `RequestBody`
                     *     and `RequestTrailers` events.
                     *
                     *     If unspecified, `RequestHeaders` event is assumed as supported.
                     *     Limited to 6 events. */
                    supportedEvents?: ("RequestHeaders" | "RequestBody" | "ResponseHeaders" | "ResponseBody" | "RequestTrailers" | "ResponseTrailers")[];
                    /** @description Timeout specifies the timeout for each individual message on the stream.
                     *     The timeout must be between 10-1000 milliseconds.
                     *     If omitted, the default timeout is 1000 milliseconds. */
                    timeout?: string;
                }[];
                /** @description MatchCondition is the condition under which this chain is invoked for a request. */
                matchCondition?: {
                    /** @description CELExpressions are expressions that are used to match requests for which
                     *     the extension chain is executed.
                     *     Limited to 10 CELExpressions.
                     *
                     *     Expressions are ORed together. */
                    celExpressions?: {
                        /** @description BackendRefs are Kubernetes Services that are used to match requests
                         *     for which the extension chain is executed. */
                        backendRefs?: {
                            /**
                             * @description Group is the group of the referent.
                             * @default
                             * @enum {string}
                             */
                            group: "";
                            /**
                             * @description Kind is kind of the referent.
                             * @default Service
                             * @enum {string}
                             */
                            kind: "Service";
                            /** @description Name is the name of the referent. */
                            name: string;
                            /**
                             * Format: int32
                             * @description Port is the port of the referent.
                             */
                            port: number;
                        }[];
                        /** @description CELMatcher is a Common Expression Language (CEL) expression that is used
                         *     to match requests for which the extension chain is executed.
                         *
                         *     For more information, see [CEL matcher language
                         *     reference](https://cloud.google.com/service-extensions/docs/cel-matcher-language-reference). */
                        celMatcher?: string;
                    }[];
                };
                /** @description Name is the name for this extension chain.
                 *     The name is logged as part of the HTTP request logs.
                 *     The name must conform with RFC-1034, is restricted to lower-cased letters,
                 *     numbers and hyphens, and can have a maximum length of 63 characters.
                 *     Additionally, the first character must be a letter and the last a letter or a number. */
                name: string;
            }[];
            /** @description TargetRefs is a list of API objects this extension applies to.
             *     Valid Groups are:
             *     - "gateway.networking.k8s.io"
             *
             *     Valid Kinds are:
             *     - "Gateway" */
            targetRefs: {
                /** @description Group is the group of the referent. For example, "gateway.networking.k8s.io".
                 *     When unspecified or empty string, core API group is inferred. */
                group: string;
                /** @description Kind is kind of the referent. For example "HTTPRoute" or "Service". */
                kind: string;
                /** @description Name is the name of the referent. */
                name: string;
            }[];
        };
        /** @description Status defines the current state of GCPRoutingExtension. */
        status?: {
            /** @description Ancestors is a list of ancestor resources (usually Gateways) that are
             *     associated with the policy, and the status of the policy with respect to
             *     each ancestor. When this policy attaches to a parent, the controller that
             *     manages the parent and the ancestors MUST add an entry to this list when
             *     the controller first sees the policy and SHOULD update the entry as
             *     appropriate when the relevant ancestor is modified.
             *
             *     Note that choosing the relevant ancestor is left to the Policy designers;
             *     an important part of Policy design is designing the right object level at
             *     which to namespace this status.
             *
             *     Note also that implementations MUST ONLY populate ancestor status for
             *     the Ancestor resources they are responsible for. Implementations MUST
             *     use the ControllerName field to uniquely identify the entries in this list
             *     that they are responsible for.
             *
             *     Note that to achieve this, the list of PolicyAncestorStatus structs
             *     MUST be treated as a map with a composite key, made up of the AncestorRef
             *     and ControllerName fields combined.
             *
             *     A maximum of 16 ancestors will be represented in this list. An empty list
             *     means the Policy is not relevant for any ancestors.
             *
             *     If this slice is full, implementations MUST NOT add further entries.
             *     Instead they MUST consider the policy unimplementable and signal that
             *     on any related resources such as the ancestor that would be referenced
             *     here. For example, if this list was full on BackendTLSPolicy, no
             *     additional Gateways would be able to reference the Service targeted by
             *     the BackendTLSPolicy. */
            ancestors: {
                /** @description AncestorRef corresponds with a ParentRef in the spec that this
                 *     PolicyAncestorStatus struct describes the status of. */
                ancestorRef: {
                    /**
                     * @description Group is the group of the referent.
                     *     When unspecified, "gateway.networking.k8s.io" is inferred.
                     *     To set the core API group (such as for a "Service" kind referent),
                     *     Group must be explicitly set to "" (empty string).
                     *
                     *     Support: Core
                     * @default gateway.networking.k8s.io
                     */
                    group: string;
                    /**
                     * @description Kind is kind of the referent.
                     *
                     *     There are two kinds of parent resources with "Core" support:
                     *
                     *     * Gateway (Gateway conformance profile)
                     *     * Service (Mesh conformance profile, ClusterIP Services only)
                     *
                     *     Support for other resources is Implementation-Specific.
                     * @default Gateway
                     */
                    kind: string;
                    /** @description Name is the name of the referent.
                     *
                     *     Support: Core */
                    name: string;
                    /** @description Namespace is the namespace of the referent. When unspecified, this refers
                     *     to the local namespace of the Route.
                     *
                     *     Note that there are specific rules for ParentRefs which cross namespace
                     *     boundaries. Cross-namespace references are only valid if they are explicitly
                     *     allowed by something in the namespace they are referring to. For example:
                     *     Gateway has the AllowedRoutes field, and ReferenceGrant provides a
                     *     generic way to enable any other kind of cross-namespace reference.
                     *
                     *     <gateway:experimental:description>
                     *     ParentRefs from a Route to a Service in the same namespace are "producer"
                     *     routes, which apply default routing rules to inbound connections from
                     *     any namespace to the Service.
                     *
                     *     ParentRefs from a Route to a Service in a different namespace are
                     *     "consumer" routes, and these routing rules are only applied to outbound
                     *     connections originating from the same namespace as the Route, for which
                     *     the intended destination of the connections are a Service targeted as a
                     *     ParentRef of the Route.
                     *     </gateway:experimental:description>
                     *
                     *     Support: Core */
                    namespace?: string;
                    /**
                     * Format: int32
                     * @description Port is the network port this Route targets. It can be interpreted
                     *     differently based on the type of parent resource.
                     *
                     *     When the parent resource is a Gateway, this targets all listeners
                     *     listening on the specified port that also support this kind of Route(and
                     *     select this Route). It's not recommended to set `Port` unless the
                     *     networking behaviors specified in a Route must apply to a specific port
                     *     as opposed to a listener(s) whose port(s) may be changed. When both Port
                     *     and SectionName are specified, the name and port of the selected listener
                     *     must match both specified values.
                     *
                     *     <gateway:experimental:description>
                     *     When the parent resource is a Service, this targets a specific port in the
                     *     Service spec. When both Port (experimental) and SectionName are specified,
                     *     the name and port of the selected port must match both specified values.
                     *     </gateway:experimental:description>
                     *
                     *     Implementations MAY choose to support other parent resources.
                     *     Implementations supporting other types of parent resources MUST clearly
                     *     document how/if Port is interpreted.
                     *
                     *     For the purpose of status, an attachment is considered successful as
                     *     long as the parent resource accepts it partially. For example, Gateway
                     *     listeners can restrict which Routes can attach to them by Route kind,
                     *     namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
                     *     from the referencing Route, the Route MUST be considered successfully
                     *     attached. If no Gateway listeners accept attachment from this Route,
                     *     the Route MUST be considered detached from the Gateway.
                     *
                     *     Support: Extended
                     */
                    port?: number;
                    /** @description SectionName is the name of a section within the target resource. In the
                     *     following resources, SectionName is interpreted as the following:
                     *
                     *     * Gateway: Listener name. When both Port (experimental) and SectionName
                     *     are specified, the name and port of the selected listener must match
                     *     both specified values.
                     *     * Service: Port name. When both Port (experimental) and SectionName
                     *     are specified, the name and port of the selected listener must match
                     *     both specified values.
                     *
                     *     Implementations MAY choose to support attaching Routes to other resources.
                     *     If that is the case, they MUST clearly document how SectionName is
                     *     interpreted.
                     *
                     *     When unspecified (empty string), this will reference the entire resource.
                     *     For the purpose of status, an attachment is considered successful if at
                     *     least one section in the parent resource accepts it. For example, Gateway
                     *     listeners can restrict which Routes can attach to them by Route kind,
                     *     namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
                     *     the referencing Route, the Route MUST be considered successfully
                     *     attached. If no Gateway listeners accept attachment from this Route, the
                     *     Route MUST be considered detached from the Gateway.
                     *
                     *     Support: Core */
                    sectionName?: string;
                };
                /** @description Conditions describes the status of the Policy with respect to the given Ancestor. */
                conditions?: {
                    /**
                     * Format: date-time
                     * @description lastTransitionTime is the last time the condition transitioned from one status to another.
                     *     This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
                     */
                    lastTransitionTime: string;
                    /** @description message is a human readable message indicating details about the transition.
                     *     This may be an empty string. */
                    message: string;
                    /**
                     * Format: int64
                     * @description observedGeneration represents the .metadata.generation that the condition was set based upon.
                     *     For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
                     *     with respect to the current state of the instance.
                     */
                    observedGeneration?: number;
                    /** @description reason contains a programmatic identifier indicating the reason for the condition's last transition.
                     *     Producers of specific condition types may define expected values and meanings for this field,
                     *     and whether the values are considered a guaranteed API.
                     *     The value should be a CamelCase string.
                     *     This field may not be empty. */
                    reason: string;
                    /**
                     * @description status of the condition, one of True, False, Unknown.
                     * @enum {string}
                     */
                    status: "True" | "False" | "Unknown";
                    /** @description type of condition in CamelCase or in foo.example.com/CamelCase. */
                    type: string;
                }[];
                /** @description ControllerName is a domain/path string that indicates the name of the
                 *     controller that wrote this status. This corresponds with the
                 *     controllerName field on GatewayClass.
                 *
                 *     Example: "example.net/gateway-controller".
                 *
                 *     The format of this field is DOMAIN "/" PATH, where DOMAIN and PATH are
                 *     valid Kubernetes names
                 *     (https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
                 *
                 *     Controllers MUST populate this field when writing status. Controllers should ensure that
                 *     entries to status populated with their ControllerName are cleaned up when they are no
                 *     longer necessary. */
                controllerName: string;
            }[];
        };
    };
}
