mirror of https://github.com/grpc/grpc-java.git
xds: Update xDS protos (#9223)
This commit is contained in:
parent
6dbd1d8f58
commit
f8da92e176
|
|
@ -187,7 +187,7 @@
|
||||||
same "printed page" as the copyright notice for easier
|
same "printed page" as the copyright notice for easier
|
||||||
identification within third-party archives.
|
identification within third-party archives.
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner].
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,8 @@
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
BRANCH=main
|
BRANCH=main
|
||||||
# import VERSION from one of the google internal CLs
|
# import VERSION from the google internal copybara_version.txt for Envoy
|
||||||
VERSION=5d74719102f461bc57e85acdda706e0a8df9b12d
|
VERSION=2f99e0c9f83b6c91b42d215a148ed49ce0f174fd
|
||||||
GIT_REPO="https://github.com/envoyproxy/envoy.git"
|
GIT_REPO="https://github.com/envoyproxy/envoy.git"
|
||||||
GIT_BASE_DIR=envoy
|
GIT_BASE_DIR=envoy
|
||||||
SOURCE_PROTO_BASE_DIR=envoy/api
|
SOURCE_PROTO_BASE_DIR=envoy/api
|
||||||
|
|
@ -129,6 +129,7 @@ envoy/extensions/filters/http/fault/v3/fault.proto
|
||||||
envoy/extensions/filters/http/rbac/v3/rbac.proto
|
envoy/extensions/filters/http/rbac/v3/rbac.proto
|
||||||
envoy/extensions/filters/http/router/v3/router.proto
|
envoy/extensions/filters/http/router/v3/router.proto
|
||||||
envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto
|
envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto
|
||||||
|
envoy/extensions/load_balancing_policies/least_request/v3/least_request.proto
|
||||||
envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.proto
|
envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.proto
|
||||||
envoy/extensions/load_balancing_policies/round_robin/v3/round_robin.proto
|
envoy/extensions/load_balancing_policies/round_robin/v3/round_robin.proto
|
||||||
envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.proto
|
envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.proto
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ message ComparisonFilter {
|
||||||
Op op = 1 [(validate.rules).enum = {defined_only: true}];
|
Op op = 1 [(validate.rules).enum = {defined_only: true}];
|
||||||
|
|
||||||
// Value to compare against.
|
// Value to compare against.
|
||||||
core.v3.RuntimeUInt32 value = 2;
|
core.v3.RuntimeUInt32 value = 2 [(validate.rules).message = {required: true}];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filters on HTTP response/status code.
|
// Filters on HTTP response/status code.
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,9 @@ message Cluster {
|
||||||
// IPv4 family and fallback to a lookup for addresses in the IPv6 family. i.e., the callback
|
// IPv4 family and fallback to a lookup for addresses in the IPv6 family. i.e., the callback
|
||||||
// target will only get v6 addresses if there were NO v4 addresses to return.
|
// target will only get v6 addresses if there were NO v4 addresses to return.
|
||||||
// If ALL is specified, the DNS resolver will perform a lookup for both IPv4 and IPv6 families,
|
// If ALL is specified, the DNS resolver will perform a lookup for both IPv4 and IPv6 families,
|
||||||
// and return all resolved addresses.
|
// and return all resolved addresses. When this is used, Happy Eyeballs will be enabled for
|
||||||
|
// upstream connections. Refer to :ref:`Happy Eyeballs Support <arch_overview_happy_eyeballs>`
|
||||||
|
// for more information.
|
||||||
// For cluster types other than
|
// For cluster types other than
|
||||||
// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>` and
|
// :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>` and
|
||||||
// :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
|
// :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
|
||||||
|
|
|
||||||
|
|
@ -336,7 +336,9 @@ message KeepaliveSettings {
|
||||||
google.protobuf.Duration interval = 1 [(validate.rules).duration = {gte {nanos: 1000000}}];
|
google.protobuf.Duration interval = 1 [(validate.rules).duration = {gte {nanos: 1000000}}];
|
||||||
|
|
||||||
// How long to wait for a response to a keepalive PING. If a response is not received within this
|
// How long to wait for a response to a keepalive PING. If a response is not received within this
|
||||||
// time period, the connection will be aborted.
|
// time period, the connection will be aborted. Note that in order to prevent the influence of
|
||||||
|
// Head-of-line (HOL) blocking the timeout period is extended when *any* frame is received on
|
||||||
|
// the connection, under the assumption that if a frame is received the connection is healthy.
|
||||||
google.protobuf.Duration timeout = 2 [(validate.rules).duration = {
|
google.protobuf.Duration timeout = 2 [(validate.rules).duration = {
|
||||||
required: true
|
required: true
|
||||||
gte {nanos: 1000000}
|
gte {nanos: 1000000}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,26 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// Generic socket option message. This would be used to set socket options that
|
// Generic socket option message. This would be used to set socket options that
|
||||||
// might not exist in upstream kernels or precompiled Envoy binaries.
|
// might not exist in upstream kernels or precompiled Envoy binaries.
|
||||||
|
//
|
||||||
|
// For example:
|
||||||
|
//
|
||||||
|
// .. code-block:: json
|
||||||
|
//
|
||||||
|
// {
|
||||||
|
// "description": "support tcp keep alive",
|
||||||
|
// "state": 0,
|
||||||
|
// "level": 1,
|
||||||
|
// "name": 9,
|
||||||
|
// "int_value": 1,
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// 1 means SOL_SOCKET and 9 means SO_KEEPALIVE on Linux.
|
||||||
|
// With the above configuration, `TCP Keep-Alives <https://www.freesoft.org/CIE/RFC/1122/114.htm>`_
|
||||||
|
// can be enabled in socket with Linux, which can be used in
|
||||||
|
// :ref:`listener's<envoy_v3_api_field_config.listener.v3.Listener.socket_options>` or
|
||||||
|
// :ref:`admin's <envoy_v3_api_field_config.bootstrap.v3.Admin.socket_options>` socket_options etc.
|
||||||
|
//
|
||||||
|
// It should be noted that the name or level may have different values on different platforms.
|
||||||
// [#next-free-field: 7]
|
// [#next-free-field: 7]
|
||||||
message SocketOption {
|
message SocketOption {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.SocketOption";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.SocketOption";
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,8 @@ message SubstitutionFormatString {
|
||||||
//
|
//
|
||||||
// content_type: "text/html; charset=UTF-8"
|
// content_type: "text/html; charset=UTF-8"
|
||||||
//
|
//
|
||||||
string content_type = 4;
|
string content_type = 4
|
||||||
|
[(validate.rules).string = {well_known_regex: HTTP_HEADER_VALUE strict: false}];
|
||||||
|
|
||||||
// Specifies a collection of Formatter plugins that can be called from the access log configuration.
|
// Specifies a collection of Formatter plugins that can be called from the access log configuration.
|
||||||
// See the formatters extensions documentation for details.
|
// See the formatters extensions documentation for details.
|
||||||
|
|
|
||||||
|
|
@ -122,9 +122,8 @@ message LedsClusterLocalityConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A group of endpoints belonging to a Locality.
|
// A group of endpoints belonging to a Locality.
|
||||||
// One can have multiple LocalityLbEndpoints for a locality, but this is
|
// One can have multiple LocalityLbEndpoints for a locality, but only if
|
||||||
// generally only done if the different groups need to have different load
|
// they have different priorities.
|
||||||
// balancing weights or different priorities.
|
|
||||||
// [#next-free-field: 9]
|
// [#next-free-field: 9]
|
||||||
message LocalityLbEndpoints {
|
message LocalityLbEndpoints {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,9 @@ import "envoy/config/listener/v3/udp_listener_config.proto";
|
||||||
import "google/protobuf/duration.proto";
|
import "google/protobuf/duration.proto";
|
||||||
import "google/protobuf/wrappers.proto";
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
import "xds/annotations/v3/status.proto";
|
||||||
import "xds/core/v3/collection_entry.proto";
|
import "xds/core/v3/collection_entry.proto";
|
||||||
|
import "xds/type/matcher/v3/matcher.proto";
|
||||||
|
|
||||||
import "envoy/annotations/deprecation.proto";
|
import "envoy/annotations/deprecation.proto";
|
||||||
import "udpa/annotations/security.proto";
|
import "udpa/annotations/security.proto";
|
||||||
|
|
@ -36,7 +38,7 @@ message ListenerCollection {
|
||||||
repeated xds.core.v3.CollectionEntry entries = 1;
|
repeated xds.core.v3.CollectionEntry entries = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 32]
|
// [#next-free-field: 33]
|
||||||
message Listener {
|
message Listener {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.Listener";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.Listener";
|
||||||
|
|
||||||
|
|
@ -104,7 +106,8 @@ message Listener {
|
||||||
// The address that the listener should listen on. In general, the address must be unique, though
|
// The address that the listener should listen on. In general, the address must be unique, though
|
||||||
// that is governed by the bind rules of the OS. E.g., multiple listeners can listen on port 0 on
|
// that is governed by the bind rules of the OS. E.g., multiple listeners can listen on port 0 on
|
||||||
// Linux as the actual port will be allocated by the OS.
|
// Linux as the actual port will be allocated by the OS.
|
||||||
core.v3.Address address = 2 [(validate.rules).message = {required: true}];
|
// Required unless *api_listener* or *listener_specifier* is populated.
|
||||||
|
core.v3.Address address = 2;
|
||||||
|
|
||||||
// Optional prefix to use on listener stats. If empty, the stats will be rooted at
|
// Optional prefix to use on listener stats. If empty, the stats will be rooted at
|
||||||
// `listener.<address as string>.`. If non-empty, stats will be rooted at
|
// `listener.<address as string>.`. If non-empty, stats will be rooted at
|
||||||
|
|
@ -120,6 +123,25 @@ message Listener {
|
||||||
// :ref:`FAQ entry <faq_how_to_setup_sni>`.
|
// :ref:`FAQ entry <faq_how_to_setup_sni>`.
|
||||||
repeated FilterChain filter_chains = 3;
|
repeated FilterChain filter_chains = 3;
|
||||||
|
|
||||||
|
// :ref:`Matcher API <arch_overview_matching_listener>` resolving the filter chain name from the
|
||||||
|
// network properties. This matcher is used as a replacement for the filter chain match condition
|
||||||
|
// :ref:`filter_chain_match
|
||||||
|
// <envoy_v3_api_field_config.listener.v3.FilterChain.filter_chain_match>`. If specified, all
|
||||||
|
// :ref:`filter_chains <envoy_v3_api_field_config.listener.v3.Listener.filter_chains>` must have a
|
||||||
|
// non-empty and unique :ref:`name <envoy_v3_api_field_config.listener.v3.FilterChain.name>` field
|
||||||
|
// and not specify :ref:`filter_chain_match
|
||||||
|
// <envoy_v3_api_field_config.listener.v3.FilterChain.filter_chain_match>` field.
|
||||||
|
//
|
||||||
|
// .. note::
|
||||||
|
//
|
||||||
|
// Once matched, each connection is permanently bound to its filter chain.
|
||||||
|
// If the matcher changes but the filter chain remains the same, the
|
||||||
|
// connections bound to the filter chain are not drained. If, however, the
|
||||||
|
// filter chain is removed or structurally modified, then the drain for its
|
||||||
|
// connections is initiated.
|
||||||
|
xds.type.matcher.v3.Matcher filter_chain_matcher = 32
|
||||||
|
[(xds.annotations.v3.field_status).work_in_progress = true];
|
||||||
|
|
||||||
// If a connection is redirected using *iptables*, the port on which the proxy
|
// If a connection is redirected using *iptables*, the port on which the proxy
|
||||||
// receives it might be different from the original destination address. When this flag is set to
|
// receives it might be different from the original destination address. When this flag is set to
|
||||||
// true, the listener hands off redirected connections to the listener associated with the
|
// true, the listener hands off redirected connections to the listener associated with the
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ import "google/protobuf/any.proto";
|
||||||
import "google/protobuf/duration.proto";
|
import "google/protobuf/duration.proto";
|
||||||
import "google/protobuf/wrappers.proto";
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
import "xds/annotations/v3/status.proto";
|
||||||
|
|
||||||
import "envoy/annotations/deprecation.proto";
|
import "envoy/annotations/deprecation.proto";
|
||||||
import "udpa/annotations/status.proto";
|
import "udpa/annotations/status.proto";
|
||||||
import "udpa/annotations/versioning.proto";
|
import "udpa/annotations/versioning.proto";
|
||||||
|
|
@ -258,10 +260,11 @@ message FilterChain {
|
||||||
// establishment, the connection is summarily closed.
|
// establishment, the connection is summarily closed.
|
||||||
google.protobuf.Duration transport_socket_connect_timeout = 9;
|
google.protobuf.Duration transport_socket_connect_timeout = 9;
|
||||||
|
|
||||||
// [#not-implemented-hide:] The unique name (or empty) by which this filter chain is known. If no
|
// The unique name (or empty) by which this filter chain is known.
|
||||||
// name is provided, Envoy will allocate an internal UUID for the filter chain. If the filter
|
// Note: :ref:`filter_chain_matcher
|
||||||
// chain is to be dynamically updated or removed via FCDS a unique name must be provided.
|
// <envoy_v3_api_field_config.listener.v3.Listener.filter_chain_matcher>`
|
||||||
string name = 7;
|
// requires that filter chains are uniquely named within a listener.
|
||||||
|
string name = 7 [(xds.annotations.v3.field_status).work_in_progress = true];
|
||||||
|
|
||||||
// [#not-implemented-hide:] The configuration to specify whether the filter chain will be built on-demand.
|
// [#not-implemented-hide:] The configuration to specify whether the filter chain will be built on-demand.
|
||||||
// If this field is not empty, the filter chain will be built on-demand.
|
// If this field is not empty, the filter chain will be built on-demand.
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ package envoy.config.route.v3;
|
||||||
|
|
||||||
import "envoy/config/core/v3/base.proto";
|
import "envoy/config/core/v3/base.proto";
|
||||||
import "envoy/config/core/v3/config_source.proto";
|
import "envoy/config/core/v3/config_source.proto";
|
||||||
import "envoy/config/core/v3/extension.proto";
|
|
||||||
import "envoy/config/route/v3/route_components.proto";
|
import "envoy/config/route/v3/route_components.proto";
|
||||||
|
|
||||||
import "google/protobuf/wrappers.proto";
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
@ -23,7 +22,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
// * Routing :ref:`architecture overview <arch_overview_http_routing>`
|
// * Routing :ref:`architecture overview <arch_overview_http_routing>`
|
||||||
// * HTTP :ref:`router filter <config_http_filters_router>`
|
// * HTTP :ref:`router filter <config_http_filters_router>`
|
||||||
|
|
||||||
// [#next-free-field: 14]
|
// [#next-free-field: 15]
|
||||||
message RouteConfiguration {
|
message RouteConfiguration {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.RouteConfiguration";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.RouteConfiguration";
|
||||||
|
|
||||||
|
|
@ -122,28 +121,20 @@ message RouteConfiguration {
|
||||||
//
|
//
|
||||||
google.protobuf.UInt32Value max_direct_response_body_size_bytes = 11;
|
google.protobuf.UInt32Value max_direct_response_body_size_bytes = 11;
|
||||||
|
|
||||||
// [#not-implemented-hide:]
|
|
||||||
// A list of plugins and their configurations which may be used by a
|
// A list of plugins and their configurations which may be used by a
|
||||||
// :ref:`envoy_v3_api_field_config.route.v3.RouteAction.cluster_specifier_plugin`
|
// :ref:`cluster specifier plugin name <envoy_v3_api_field_config.route.v3.RouteAction.cluster_specifier_plugin>`
|
||||||
// within the route. All *extension.name* fields in this list must be unique.
|
// within the route. All *extension.name* fields in this list must be unique.
|
||||||
repeated ClusterSpecifierPlugin cluster_specifier_plugins = 12;
|
repeated ClusterSpecifierPlugin cluster_specifier_plugins = 12;
|
||||||
|
|
||||||
// Specify a set of default request mirroring policies which apply to all routes under its virtual hosts.
|
// Specify a set of default request mirroring policies which apply to all routes under its virtual hosts.
|
||||||
// Note that policies are not merged, the most specific non-empty one becomes the mirror policies.
|
// Note that policies are not merged, the most specific non-empty one becomes the mirror policies.
|
||||||
repeated RouteAction.RequestMirrorPolicy request_mirror_policies = 13;
|
repeated RouteAction.RequestMirrorPolicy request_mirror_policies = 13;
|
||||||
}
|
|
||||||
|
|
||||||
// Configuration for a cluster specifier plugin.
|
// By default, port in :authority header (if any) is used in host matching.
|
||||||
message ClusterSpecifierPlugin {
|
// With this option enabled, Envoy will ignore the port number in the :authority header (if any) when picking VirtualHost.
|
||||||
// The name of the plugin and its opaque configuration.
|
// NOTE: this option will not strip the port number (if any) contained in route config
|
||||||
core.v3.TypedExtensionConfig extension = 1;
|
// :ref:`envoy_v3_api_msg_config.route.v3.VirtualHost`.domains field.
|
||||||
|
bool ignore_port_in_host_matching = 14;
|
||||||
// If is_optional is not set and the plugin defined by this message is not
|
|
||||||
// a supported type, the containing resource is NACKed. If is_optional is
|
|
||||||
// set, the resource would not be NACKed for this reason. In this case,
|
|
||||||
// routes referencing this plugin's name would not be treated as an illegal
|
|
||||||
// configuration, but would result in a failure if the route is selected.
|
|
||||||
bool is_optional = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message Vhds {
|
message Vhds {
|
||||||
|
|
|
||||||
|
|
@ -453,6 +453,19 @@ message WeightedCluster {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Configuration for a cluster specifier plugin.
|
||||||
|
message ClusterSpecifierPlugin {
|
||||||
|
// The name of the plugin and its opaque configuration.
|
||||||
|
core.v3.TypedExtensionConfig extension = 1 [(validate.rules).message = {required: true}];
|
||||||
|
|
||||||
|
// If is_optional is not set or is set to false and the plugin defined by this message is not a
|
||||||
|
// supported type, the containing resource is NACKed. If is_optional is set to true, the resource
|
||||||
|
// would not be NACKed for this reason. In this case, routes referencing this plugin's name would
|
||||||
|
// not be treated as an illegal configuration, but would result in a failure if the route is
|
||||||
|
// selected.
|
||||||
|
bool is_optional = 2;
|
||||||
|
}
|
||||||
|
|
||||||
// [#next-free-field: 15]
|
// [#next-free-field: 15]
|
||||||
message RouteMatch {
|
message RouteMatch {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RouteMatch";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RouteMatch";
|
||||||
|
|
@ -643,7 +656,7 @@ message CorsPolicy {
|
||||||
core.v3.RuntimeFractionalPercent shadow_enabled = 10;
|
core.v3.RuntimeFractionalPercent shadow_enabled = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 39]
|
// [#next-free-field: 40]
|
||||||
message RouteAction {
|
message RouteAction {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RouteAction";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RouteAction";
|
||||||
|
|
||||||
|
|
@ -675,6 +688,7 @@ message RouteAction {
|
||||||
// .. note::
|
// .. note::
|
||||||
//
|
//
|
||||||
// Shadowing will not be triggered if the primary cluster does not exist.
|
// Shadowing will not be triggered if the primary cluster does not exist.
|
||||||
|
// [#next-free-field: 6]
|
||||||
message RequestMirrorPolicy {
|
message RequestMirrorPolicy {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.route.RouteAction.RequestMirrorPolicy";
|
"envoy.api.v2.route.RouteAction.RequestMirrorPolicy";
|
||||||
|
|
@ -683,9 +697,30 @@ message RouteAction {
|
||||||
|
|
||||||
reserved "runtime_key";
|
reserved "runtime_key";
|
||||||
|
|
||||||
|
// Only one of *cluster* and *cluster_header* can be specified.
|
||||||
|
// [#next-major-version: Need to add back the validation rule: (validate.rules).string = {min_len: 1}]
|
||||||
// Specifies the cluster that requests will be mirrored to. The cluster must
|
// Specifies the cluster that requests will be mirrored to. The cluster must
|
||||||
// exist in the cluster manager configuration.
|
// exist in the cluster manager configuration.
|
||||||
string cluster = 1 [(validate.rules).string = {min_len: 1}];
|
string cluster = 1 [(udpa.annotations.field_migrate).oneof_promotion = "cluster_specifier"];
|
||||||
|
|
||||||
|
// Only one of *cluster* and *cluster_header* can be specified.
|
||||||
|
// Envoy will determine the cluster to route to by reading the value of the
|
||||||
|
// HTTP header named by cluster_header from the request headers. Only the first value in header is used,
|
||||||
|
// and no shadow request will happen if the value is not found in headers. Envoy will not wait for
|
||||||
|
// the shadow cluster to respond before returning the response from the primary cluster.
|
||||||
|
//
|
||||||
|
// .. attention::
|
||||||
|
//
|
||||||
|
// Internally, Envoy always uses the HTTP/2 *:authority* header to represent the HTTP/1
|
||||||
|
// *Host* header. Thus, if attempting to match on *Host*, match on *:authority* instead.
|
||||||
|
//
|
||||||
|
// .. note::
|
||||||
|
//
|
||||||
|
// If the header appears multiple times only the first value is used.
|
||||||
|
string cluster_header = 5 [
|
||||||
|
(validate.rules).string = {well_known_regex: HTTP_HEADER_NAME strict: false},
|
||||||
|
(udpa.annotations.field_migrate).oneof_promotion = "cluster_specifier"
|
||||||
|
];
|
||||||
|
|
||||||
// If not specified, all requests to the target cluster will be mirrored.
|
// If not specified, all requests to the target cluster will be mirrored.
|
||||||
//
|
//
|
||||||
|
|
@ -920,13 +955,15 @@ message RouteAction {
|
||||||
// for additional documentation.
|
// for additional documentation.
|
||||||
WeightedCluster weighted_clusters = 3;
|
WeightedCluster weighted_clusters = 3;
|
||||||
|
|
||||||
// [#not-implemented-hide:]
|
// Name of the cluster specifier plugin to use to determine the cluster for requests on this route.
|
||||||
// Name of the cluster specifier plugin to use to determine the cluster for
|
// The cluster specifier plugin name must be defined in the associated
|
||||||
// requests on this route. The plugin name must be defined in the associated
|
// :ref:`cluster specifier plugins <envoy_v3_api_field_config.route.v3.RouteConfiguration.cluster_specifier_plugins>`
|
||||||
// :ref:`envoy_v3_api_field_config.route.v3.RouteConfiguration.cluster_specifier_plugins`
|
// in the :ref:`name <envoy_v3_api_field_config.core.v3.TypedExtensionConfig.name>` field.
|
||||||
// in the
|
|
||||||
// :ref:`envoy_v3_api_field_config.core.v3.TypedExtensionConfig.name` field.
|
|
||||||
string cluster_specifier_plugin = 37;
|
string cluster_specifier_plugin = 37;
|
||||||
|
|
||||||
|
// Custom cluster specifier plugin configuration to use to determine the cluster for requests
|
||||||
|
// on this route.
|
||||||
|
ClusterSpecifierPlugin inline_cluster_specifier_plugin = 39;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The HTTP status code to use when configured cluster is not found.
|
// The HTTP status code to use when configured cluster is not found.
|
||||||
|
|
@ -1711,7 +1748,7 @@ message VirtualCluster {
|
||||||
message RateLimit {
|
message RateLimit {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RateLimit";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.route.RateLimit";
|
||||||
|
|
||||||
// [#next-free-field: 10]
|
// [#next-free-field: 11]
|
||||||
message Action {
|
message Action {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.route.RateLimit.Action";
|
"envoy.api.v2.route.RateLimit.Action";
|
||||||
|
|
@ -1785,6 +1822,28 @@ message RateLimit {
|
||||||
"envoy.api.v2.route.RateLimit.Action.RemoteAddress";
|
"envoy.api.v2.route.RateLimit.Action.RemoteAddress";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The following descriptor entry is appended to the descriptor and is populated using the
|
||||||
|
// masked address from :ref:`x-forwarded-for <config_http_conn_man_headers_x-forwarded-for>`:
|
||||||
|
//
|
||||||
|
// .. code-block:: cpp
|
||||||
|
//
|
||||||
|
// ("masked_remote_address", "<masked address from x-forwarded-for>")
|
||||||
|
message MaskedRemoteAddress {
|
||||||
|
// Length of prefix mask len for IPv4 (e.g. 0, 32).
|
||||||
|
// Defaults to 32 when unset.
|
||||||
|
// For example, trusted address from x-forwarded-for is `192.168.1.1`,
|
||||||
|
// the descriptor entry is ("masked_remote_address", "192.168.1.1/32");
|
||||||
|
// if mask len is 24, the descriptor entry is ("masked_remote_address", "192.168.1.0/24").
|
||||||
|
google.protobuf.UInt32Value v4_prefix_mask_len = 1 [(validate.rules).uint32 = {lte: 32}];
|
||||||
|
|
||||||
|
// Length of prefix mask len for IPv6 (e.g. 0, 128).
|
||||||
|
// Defaults to 128 when unset.
|
||||||
|
// For example, trusted address from x-forwarded-for is `2001:abcd:ef01:2345:6789:abcd:ef01:234`,
|
||||||
|
// the descriptor entry is ("masked_remote_address", "2001:abcd:ef01:2345:6789:abcd:ef01:234/128");
|
||||||
|
// if mask len is 64, the descriptor entry is ("masked_remote_address", "2001:abcd:ef01:2345::/64").
|
||||||
|
google.protobuf.UInt32Value v6_prefix_mask_len = 2 [(validate.rules).uint32 = {lte: 128}];
|
||||||
|
}
|
||||||
|
|
||||||
// The following descriptor entry is appended to the descriptor:
|
// The following descriptor entry is appended to the descriptor:
|
||||||
//
|
//
|
||||||
// .. code-block:: cpp
|
// .. code-block:: cpp
|
||||||
|
|
@ -1917,8 +1976,17 @@ message RateLimit {
|
||||||
MetaData metadata = 8;
|
MetaData metadata = 8;
|
||||||
|
|
||||||
// Rate limit descriptor extension. See the rate limit descriptor extensions documentation.
|
// Rate limit descriptor extension. See the rate limit descriptor extensions documentation.
|
||||||
|
//
|
||||||
|
// :ref:`HTTP matching input functions <arch_overview_matching_api>` are
|
||||||
|
// permitted as descriptor extensions. The input functions are only
|
||||||
|
// looked up if there is no rate limit descriptor extension matching
|
||||||
|
// the type URL.
|
||||||
|
//
|
||||||
// [#extension-category: envoy.rate_limit_descriptors]
|
// [#extension-category: envoy.rate_limit_descriptors]
|
||||||
core.v3.TypedExtensionConfig extension = 9;
|
core.v3.TypedExtensionConfig extension = 9;
|
||||||
|
|
||||||
|
// Rate limit on masked remote address.
|
||||||
|
MaskedRemoteAddress masked_remote_address = 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package envoy.extensions.load_balancing_policies.least_request.v3;
|
||||||
|
|
||||||
|
import "envoy/config/cluster/v3/cluster.proto";
|
||||||
|
import "envoy/config/core/v3/base.proto";
|
||||||
|
|
||||||
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
import "udpa/annotations/status.proto";
|
||||||
|
import "validate/validate.proto";
|
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.extensions.load_balancing_policies.least_request.v3";
|
||||||
|
option java_outer_classname = "LeastRequestProto";
|
||||||
|
option java_multiple_files = true;
|
||||||
|
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/load_balancing_policies/least_request/v3;least_requestv3";
|
||||||
|
option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
|
// [#protodoc-title: Least Request Load Balancing Policy]
|
||||||
|
|
||||||
|
// This configuration allows the built-in LEAST_REQUEST LB policy to be configured via the LB policy
|
||||||
|
// extension point. See the :ref:`load balancing architecture overview
|
||||||
|
// <arch_overview_load_balancing_types>` for more information.
|
||||||
|
// [#extension: envoy.clusters.lb_policy]
|
||||||
|
message LeastRequest {
|
||||||
|
// The number of random healthy hosts from which the host with the fewest active requests will
|
||||||
|
// be chosen. Defaults to 2 so that we perform two-choice selection if the field is not set.
|
||||||
|
google.protobuf.UInt32Value choice_count = 1 [(validate.rules).uint32 = {gte: 2}];
|
||||||
|
|
||||||
|
// The following formula is used to calculate the dynamic weights when hosts have different load
|
||||||
|
// balancing weights:
|
||||||
|
//
|
||||||
|
// `weight = load_balancing_weight / (active_requests + 1)^active_request_bias`
|
||||||
|
//
|
||||||
|
// The larger the active request bias is, the more aggressively active requests will lower the
|
||||||
|
// effective weight when all host weights are not equal.
|
||||||
|
//
|
||||||
|
// `active_request_bias` must be greater than or equal to 0.0.
|
||||||
|
//
|
||||||
|
// When `active_request_bias == 0.0` the Least Request Load Balancer doesn't consider the number
|
||||||
|
// of active requests at the time it picks a host and behaves like the Round Robin Load
|
||||||
|
// Balancer.
|
||||||
|
//
|
||||||
|
// When `active_request_bias > 0.0` the Least Request Load Balancer scales the load balancing
|
||||||
|
// weight by the number of active requests at the time it does a pick.
|
||||||
|
//
|
||||||
|
// The value is cached for performance reasons and refreshed whenever one of the Load Balancer's
|
||||||
|
// host sets changes, e.g., whenever there is a host membership update or a host load balancing
|
||||||
|
// weight change.
|
||||||
|
//
|
||||||
|
// .. note::
|
||||||
|
// This setting only takes effect if all host weights are not equal.
|
||||||
|
config.core.v3.RuntimeDouble active_request_bias = 2;
|
||||||
|
|
||||||
|
// Configuration for slow start mode.
|
||||||
|
// If this configuration is not set, slow start will not be not enabled.
|
||||||
|
config.cluster.v3.Cluster.SlowStartConfig slow_start_config = 3;
|
||||||
|
}
|
||||||
|
|
@ -57,6 +57,8 @@ message TlsParameters {
|
||||||
//
|
//
|
||||||
// If not specified, a default list will be used. Defaults are different for server (downstream) and
|
// If not specified, a default list will be used. Defaults are different for server (downstream) and
|
||||||
// client (upstream) TLS configurations.
|
// client (upstream) TLS configurations.
|
||||||
|
// Defaults will change over time in response to security considerations; If you care, configure
|
||||||
|
// it instead of using the default.
|
||||||
//
|
//
|
||||||
// In non-FIPS builds, the default server cipher list is:
|
// In non-FIPS builds, the default server cipher list is:
|
||||||
//
|
//
|
||||||
|
|
@ -64,16 +66,8 @@ message TlsParameters {
|
||||||
//
|
//
|
||||||
// [ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305]
|
// [ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305]
|
||||||
// [ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305]
|
// [ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305]
|
||||||
// ECDHE-ECDSA-AES128-SHA
|
|
||||||
// ECDHE-RSA-AES128-SHA
|
|
||||||
// AES128-GCM-SHA256
|
|
||||||
// AES128-SHA
|
|
||||||
// ECDHE-ECDSA-AES256-GCM-SHA384
|
// ECDHE-ECDSA-AES256-GCM-SHA384
|
||||||
// ECDHE-RSA-AES256-GCM-SHA384
|
// ECDHE-RSA-AES256-GCM-SHA384
|
||||||
// ECDHE-ECDSA-AES256-SHA
|
|
||||||
// ECDHE-RSA-AES256-SHA
|
|
||||||
// AES256-GCM-SHA384
|
|
||||||
// AES256-SHA
|
|
||||||
//
|
//
|
||||||
// In builds using :ref:`BoringSSL FIPS <arch_overview_ssl_fips>`, the default server cipher list is:
|
// In builds using :ref:`BoringSSL FIPS <arch_overview_ssl_fips>`, the default server cipher list is:
|
||||||
//
|
//
|
||||||
|
|
@ -81,16 +75,8 @@ message TlsParameters {
|
||||||
//
|
//
|
||||||
// ECDHE-ECDSA-AES128-GCM-SHA256
|
// ECDHE-ECDSA-AES128-GCM-SHA256
|
||||||
// ECDHE-RSA-AES128-GCM-SHA256
|
// ECDHE-RSA-AES128-GCM-SHA256
|
||||||
// ECDHE-ECDSA-AES128-SHA
|
|
||||||
// ECDHE-RSA-AES128-SHA
|
|
||||||
// AES128-GCM-SHA256
|
|
||||||
// AES128-SHA
|
|
||||||
// ECDHE-ECDSA-AES256-GCM-SHA384
|
// ECDHE-ECDSA-AES256-GCM-SHA384
|
||||||
// ECDHE-RSA-AES256-GCM-SHA384
|
// ECDHE-RSA-AES256-GCM-SHA384
|
||||||
// ECDHE-ECDSA-AES256-SHA
|
|
||||||
// ECDHE-RSA-AES256-SHA
|
|
||||||
// AES256-GCM-SHA384
|
|
||||||
// AES256-SHA
|
|
||||||
//
|
//
|
||||||
// In non-FIPS builds, the default client cipher list is:
|
// In non-FIPS builds, the default client cipher list is:
|
||||||
//
|
//
|
||||||
|
|
@ -448,8 +434,12 @@ message CertificateValidationContext {
|
||||||
// <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CertificateValidationContext.trusted_ca>`.
|
// <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CertificateValidationContext.trusted_ca>`.
|
||||||
repeated SubjectAltNameMatcher match_typed_subject_alt_names = 15;
|
repeated SubjectAltNameMatcher match_typed_subject_alt_names = 15;
|
||||||
|
|
||||||
// This field is deprecated in favor of ref:`match_typed_subject_alt_names
|
// This field is deprecated in favor of
|
||||||
|
// :ref:`match_typed_subject_alt_names
|
||||||
|
// <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CertificateValidationContext.match_typed_subject_alt_names>`.
|
||||||
|
// Note that if both this field and :ref:`match_typed_subject_alt_names
|
||||||
// <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CertificateValidationContext.match_typed_subject_alt_names>`
|
// <envoy_v3_api_field_extensions.transport_sockets.tls.v3.CertificateValidationContext.match_typed_subject_alt_names>`
|
||||||
|
// are specified, the former (deprecated field) is ignored.
|
||||||
repeated type.matcher.v3.StringMatcher match_subject_alt_names = 9
|
repeated type.matcher.v3.StringMatcher match_subject_alt_names = 9
|
||||||
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
[deprecated = true, (envoy.annotations.deprecated_at_minor_version) = "3.0"];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import "google/rpc/status.proto";
|
||||||
|
|
||||||
import "udpa/annotations/status.proto";
|
import "udpa/annotations/status.proto";
|
||||||
import "udpa/annotations/versioning.proto";
|
import "udpa/annotations/versioning.proto";
|
||||||
|
import "validate/validate.proto";
|
||||||
|
|
||||||
option java_package = "io.envoyproxy.envoy.service.discovery.v3";
|
option java_package = "io.envoyproxy.envoy.service.discovery.v3";
|
||||||
option java_outer_classname = "DiscoveryProto";
|
option java_outer_classname = "DiscoveryProto";
|
||||||
|
|
@ -19,9 +20,30 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
|
||||||
|
|
||||||
// [#protodoc-title: Common discovery API components]
|
// [#protodoc-title: Common discovery API components]
|
||||||
|
|
||||||
|
// Specifies a resource to be subscribed to.
|
||||||
|
message ResourceLocator {
|
||||||
|
// The resource name to subscribe to.
|
||||||
|
string name = 1;
|
||||||
|
|
||||||
|
// A set of dynamic parameters used to match against the dynamic parameter
|
||||||
|
// constraints on the resource. This allows clients to select between
|
||||||
|
// multiple variants of the same resource.
|
||||||
|
map<string, string> dynamic_parameters = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Specifies a concrete resource name.
|
||||||
|
message ResourceName {
|
||||||
|
// The name of the resource.
|
||||||
|
string name = 1;
|
||||||
|
|
||||||
|
// Dynamic parameter constraints associated with this resource. To be used by client-side caches
|
||||||
|
// (including xDS proxies) when matching subscribed resource locators.
|
||||||
|
DynamicParameterConstraints dynamic_parameter_constraints = 2;
|
||||||
|
}
|
||||||
|
|
||||||
// A DiscoveryRequest requests a set of versioned resources of the same type for
|
// A DiscoveryRequest requests a set of versioned resources of the same type for
|
||||||
// a given Envoy node on some API.
|
// a given Envoy node on some API.
|
||||||
// [#next-free-field: 7]
|
// [#next-free-field: 8]
|
||||||
message DiscoveryRequest {
|
message DiscoveryRequest {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.DiscoveryRequest";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.DiscoveryRequest";
|
||||||
|
|
||||||
|
|
@ -45,6 +67,15 @@ message DiscoveryRequest {
|
||||||
// which will be explicitly enumerated in resource_names.
|
// which will be explicitly enumerated in resource_names.
|
||||||
repeated string resource_names = 3;
|
repeated string resource_names = 3;
|
||||||
|
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
// Alternative to *resource_names* field that allows specifying dynamic
|
||||||
|
// parameters along with each resource name. Clients that populate this
|
||||||
|
// field must be able to handle responses from the server where resources
|
||||||
|
// are wrapped in a Resource message.
|
||||||
|
// Note that it is legal for a request to have some resources listed
|
||||||
|
// in *resource_names* and others in *resource_locators*.
|
||||||
|
repeated ResourceLocator resource_locators = 7;
|
||||||
|
|
||||||
// Type of the resource that is being requested, e.g.
|
// Type of the resource that is being requested, e.g.
|
||||||
// "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment". This is implicit
|
// "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment". This is implicit
|
||||||
// in requests made via singleton xDS APIs such as CDS, LDS, etc. but is
|
// in requests made via singleton xDS APIs such as CDS, LDS, etc. but is
|
||||||
|
|
@ -141,7 +172,7 @@ message DiscoveryResponse {
|
||||||
// In particular, initial_resource_versions being sent at the "start" of every
|
// In particular, initial_resource_versions being sent at the "start" of every
|
||||||
// gRPC stream actually entails a message for each type_url, each with its own
|
// gRPC stream actually entails a message for each type_url, each with its own
|
||||||
// initial_resource_versions.
|
// initial_resource_versions.
|
||||||
// [#next-free-field: 8]
|
// [#next-free-field: 10]
|
||||||
message DeltaDiscoveryRequest {
|
message DeltaDiscoveryRequest {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.DeltaDiscoveryRequest";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.DeltaDiscoveryRequest";
|
||||||
|
|
||||||
|
|
@ -180,6 +211,20 @@ message DeltaDiscoveryRequest {
|
||||||
// A list of Resource names to remove from the list of tracked resources.
|
// A list of Resource names to remove from the list of tracked resources.
|
||||||
repeated string resource_names_unsubscribe = 4;
|
repeated string resource_names_unsubscribe = 4;
|
||||||
|
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
// Alternative to *resource_names_subscribe* field that allows specifying dynamic parameters
|
||||||
|
// along with each resource name.
|
||||||
|
// Note that it is legal for a request to have some resources listed
|
||||||
|
// in *resource_names_subscribe* and others in *resource_locators_subscribe*.
|
||||||
|
repeated ResourceLocator resource_locators_subscribe = 8;
|
||||||
|
|
||||||
|
// [#not-implemented-hide:]
|
||||||
|
// Alternative to *resource_names_unsubscribe* field that allows specifying dynamic parameters
|
||||||
|
// along with each resource name.
|
||||||
|
// Note that it is legal for a request to have some resources listed
|
||||||
|
// in *resource_names_unsubscribe* and others in *resource_locators_unsubscribe*.
|
||||||
|
repeated ResourceLocator resource_locators_unsubscribe = 9;
|
||||||
|
|
||||||
// Informs the server of the versions of the resources the xDS client knows of, to enable the
|
// Informs the server of the versions of the resources the xDS client knows of, to enable the
|
||||||
// client to continue the same logical xDS session even in the face of gRPC stream reconnection.
|
// client to continue the same logical xDS session even in the face of gRPC stream reconnection.
|
||||||
// It will not be populated: [1] in the very first stream of a session, since the client will
|
// It will not be populated: [1] in the very first stream of a session, since the client will
|
||||||
|
|
@ -202,7 +247,7 @@ message DeltaDiscoveryRequest {
|
||||||
google.rpc.Status error_detail = 7;
|
google.rpc.Status error_detail = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 8]
|
// [#next-free-field: 9]
|
||||||
message DeltaDiscoveryResponse {
|
message DeltaDiscoveryResponse {
|
||||||
option (udpa.annotations.versioning).previous_message_type =
|
option (udpa.annotations.versioning).previous_message_type =
|
||||||
"envoy.api.v2.DeltaDiscoveryResponse";
|
"envoy.api.v2.DeltaDiscoveryResponse";
|
||||||
|
|
@ -224,6 +269,11 @@ message DeltaDiscoveryResponse {
|
||||||
// Removed resources for missing resources can be ignored.
|
// Removed resources for missing resources can be ignored.
|
||||||
repeated string removed_resources = 6;
|
repeated string removed_resources = 6;
|
||||||
|
|
||||||
|
// Alternative to removed_resources that allows specifying which variant of
|
||||||
|
// a resource is being removed. This variant must be used for any resource
|
||||||
|
// for which dynamic parameter constraints were sent to the client.
|
||||||
|
repeated ResourceName removed_resource_names = 8;
|
||||||
|
|
||||||
// The nonce provides a way for DeltaDiscoveryRequests to uniquely
|
// The nonce provides a way for DeltaDiscoveryRequests to uniquely
|
||||||
// reference a DeltaDiscoveryResponse when (N)ACKing. The nonce is required.
|
// reference a DeltaDiscoveryResponse when (N)ACKing. The nonce is required.
|
||||||
string nonce = 5;
|
string nonce = 5;
|
||||||
|
|
@ -233,7 +283,56 @@ message DeltaDiscoveryResponse {
|
||||||
config.core.v3.ControlPlane control_plane = 7;
|
config.core.v3.ControlPlane control_plane = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [#next-free-field: 8]
|
// A set of dynamic parameter constraints associated with a variant of an individual xDS resource.
|
||||||
|
// These constraints determine whether the resource matches a subscription based on the set of
|
||||||
|
// dynamic parameters in the subscription, as specified in the
|
||||||
|
// :ref:`ResourceLocator.dynamic_parameters<envoy_v3_api_field_service.discovery.v3.ResourceLocator.dynamic_parameters>`
|
||||||
|
// field. This allows xDS implementations (clients, servers, and caching proxies) to determine
|
||||||
|
// which variant of a resource is appropriate for a given client.
|
||||||
|
message DynamicParameterConstraints {
|
||||||
|
// A single constraint for a given key.
|
||||||
|
message SingleConstraint {
|
||||||
|
message Exists {
|
||||||
|
}
|
||||||
|
|
||||||
|
// The key to match against.
|
||||||
|
string key = 1;
|
||||||
|
|
||||||
|
oneof constraint_type {
|
||||||
|
option (validate.required) = true;
|
||||||
|
|
||||||
|
// Matches this exact value.
|
||||||
|
string value = 2;
|
||||||
|
|
||||||
|
// Key is present (matches any value except for the key being absent).
|
||||||
|
// This allows setting a default constraint for clients that do
|
||||||
|
// not send a key at all, while there may be other clients that need
|
||||||
|
// special configuration based on that key.
|
||||||
|
Exists exists = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message ConstraintList {
|
||||||
|
repeated DynamicParameterConstraints constraints = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
oneof type {
|
||||||
|
// A single constraint to evaluate.
|
||||||
|
SingleConstraint constraint = 1;
|
||||||
|
|
||||||
|
// A list of constraints that match if any one constraint in the list
|
||||||
|
// matches.
|
||||||
|
ConstraintList or_constraints = 2;
|
||||||
|
|
||||||
|
// A list of constraints that must all match.
|
||||||
|
ConstraintList and_constraints = 3;
|
||||||
|
|
||||||
|
// The inverse (NOT) of a set of constraints.
|
||||||
|
DynamicParameterConstraints not_constraints = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// [#next-free-field: 9]
|
||||||
message Resource {
|
message Resource {
|
||||||
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.Resource";
|
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.Resource";
|
||||||
|
|
||||||
|
|
@ -247,8 +346,15 @@ message Resource {
|
||||||
}
|
}
|
||||||
|
|
||||||
// The resource's name, to distinguish it from others of the same type of resource.
|
// The resource's name, to distinguish it from others of the same type of resource.
|
||||||
|
// Only one of *name* or *resource_name* may be set.
|
||||||
string name = 3;
|
string name = 3;
|
||||||
|
|
||||||
|
// Alternative to the *name* field, to be used when the server supports
|
||||||
|
// multiple variants of the named resource that are differentiated by
|
||||||
|
// dynamic parameter constraints.
|
||||||
|
// Only one of *name* or *resource_name* may be set.
|
||||||
|
ResourceName resource_name = 8;
|
||||||
|
|
||||||
// The aliases are a list of other names that this resource can go by.
|
// The aliases are a list of other names that this resource can go by.
|
||||||
repeated string aliases = 4;
|
repeated string aliases = 4;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue