From 43aafb99ee98c0e7b7367e814353d4364b78f790 Mon Sep 17 00:00:00 2001 From: "data-plane-api(CircleCI)" Date: Thu, 7 May 2020 20:54:39 +0000 Subject: [PATCH] api: introduce TypedExtensionConfig. (#11105) A common wrapper for name/Any that should be used for all new extensions throughout the API. I've left a note that we need to revisit existing typed_config at the next major version as well, since that would be a breaking change. Signed-off-by: Harvey Tuch Mirrored from https://github.com/envoyproxy/envoy @ b16981f8d4f4726d5f8d31b55603f893fbba5575 --- envoy/config/core/v3/extension.proto | 30 ++++++++++++++++++++ envoy/config/core/v4alpha/extension.proto | 34 +++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 envoy/config/core/v3/extension.proto create mode 100644 envoy/config/core/v4alpha/extension.proto diff --git a/envoy/config/core/v3/extension.proto b/envoy/config/core/v3/extension.proto new file mode 100644 index 00000000..63639876 --- /dev/null +++ b/envoy/config/core/v3/extension.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; + +package envoy.config.core.v3; + +import "google/protobuf/any.proto"; + +import "udpa/annotations/status.proto"; +import "validate/validate.proto"; + +option java_package = "io.envoyproxy.envoy.config.core.v3"; +option java_outer_classname = "ExtensionProto"; +option java_multiple_files = true; +option (udpa.annotations.file_status).package_version_status = ACTIVE; + +// [#protodoc-title: Extension configuration] + +// Message type for extension configuration. +// [#next-major-version: revisit all existing typed_config that doesn't use this wrapper.]. +message TypedExtensionConfig { + // The name of an extension. This is not used to select the extension, instead + // it serves the role of an opaque identifier. + string name = 1 [(validate.rules).string = {min_len: 1}]; + + // The typed config for the extension. The type URL will be used to identify + // the extension. In the case that the type URL is *udpa.type.v1.TypedStruct*, + // the inner type URL of *TypedStruct* will be utilized. See the + // :ref:`extension configuration overview + // ` for further details. + google.protobuf.Any typed_config = 2 [(validate.rules).any = {required: true}]; +} diff --git a/envoy/config/core/v4alpha/extension.proto b/envoy/config/core/v4alpha/extension.proto new file mode 100644 index 00000000..52ae2a14 --- /dev/null +++ b/envoy/config/core/v4alpha/extension.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; + +package envoy.config.core.v4alpha; + +import "google/protobuf/any.proto"; + +import "udpa/annotations/status.proto"; +import "udpa/annotations/versioning.proto"; +import "validate/validate.proto"; + +option java_package = "io.envoyproxy.envoy.config.core.v4alpha"; +option java_outer_classname = "ExtensionProto"; +option java_multiple_files = true; +option (udpa.annotations.file_status).package_version_status = NEXT_MAJOR_VERSION_CANDIDATE; + +// [#protodoc-title: Extension configuration] + +// Message type for extension configuration. +// [#next-major-version: revisit all existing typed_config that doesn't use this wrapper.]. +message TypedExtensionConfig { + option (udpa.annotations.versioning).previous_message_type = + "envoy.config.core.v3.TypedExtensionConfig"; + + // The name of an extension. This is not used to select the extension, instead + // it serves the role of an opaque identifier. + string name = 1 [(validate.rules).string = {min_len: 1}]; + + // The typed config for the extension. The type URL will be used to identify + // the extension. In the case that the type URL is *udpa.type.v1.TypedStruct*, + // the inner type URL of *TypedStruct* will be utilized. See the + // :ref:`extension configuration overview + // ` for further details. + google.protobuf.Any typed_config = 2 [(validate.rules).any = {required: true}]; +}