Move envoy.api.v2 core protos to envoy.api.v2.core and organize filters (#452)
There are several main changes in this PR: Create envoy.api.v2.core packages to break circular dependencies from xDS on to subpackages on to base protos. Create individual packages for each filter and add independent versioning to each filter. Add visibility constraints to prevent formation of dependency cycles. Add gogoproto annotations to improve go code generation. After moving xDS service definitions and top-level resource protos back to envoy.core.api.v2, cycles were created, since the second-level definitions depend on base protobuf definitions, and are in turn included from xDS; however xDS and base definitions are in the same package. The solution is to split the base protos into another package, envoy.api.v2.core. That eliminates dependency cycles (validated using go-control-plane). Added a few gogoproto annotations to improve golang code generation. Signed-off-by: Kuat Yessenov <kuat@google.com>pull/457/head
parent
a07a36853e
commit
4e533f22ba
146 changed files with 1000 additions and 753 deletions
@ -0,0 +1,53 @@ |
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
package_group( |
||||
name = "docs", |
||||
packages = [ |
||||
"//docs", |
||||
], |
||||
) |
||||
|
||||
# TODO(htuch): Grow this to cover everything we want to generate docs for, so we can just invoke |
||||
# bazel build //docs:protos --aspects tools/protodoc/protodoc.bzl%proto_doc_aspect --output_groups=rst |
||||
proto_library( |
||||
name = "protos", |
||||
deps = [ |
||||
"//envoy/api/v2:cds", |
||||
"//envoy/api/v2:discovery", |
||||
"//envoy/api/v2:eds", |
||||
"//envoy/api/v2:lds", |
||||
"//envoy/api/v2:rds", |
||||
"//envoy/api/v2/cluster:circuit_breaker", |
||||
"//envoy/api/v2/cluster:outlier_detection", |
||||
"//envoy/api/v2/core:protocol", |
||||
"//envoy/api/v2/listener", |
||||
"//envoy/api/v2/ratelimit", |
||||
"//envoy/api/v2/route", |
||||
"//envoy/config/bootstrap/v2:bootstrap", |
||||
"//envoy/config/filter/accesslog/v2:accesslog", |
||||
"//envoy/config/filter/http/buffer/v2:buffer", |
||||
"//envoy/config/filter/http/ext_authz/v2:ext_authz", |
||||
"//envoy/config/filter/http/fault/v2:fault", |
||||
"//envoy/config/filter/http/gzip/v2:gzip", |
||||
"//envoy/config/filter/http/health_check/v2:health_check", |
||||
"//envoy/config/filter/http/lua/v2:lua", |
||||
"//envoy/config/filter/http/rate_limit/v2:rate_limit", |
||||
"//envoy/config/filter/http/router/v2:router", |
||||
"//envoy/config/filter/http/squash/v2:squash", |
||||
"//envoy/config/filter/http/transcoder/v2:transcoder", |
||||
"//envoy/config/filter/network/client_ssl_auth/v2:client_ssl_auth", |
||||
"//envoy/config/filter/network/ext_authz/v2:ext_authz", |
||||
"//envoy/config/filter/network/http_connection_manager/v2:http_connection_manager", |
||||
"//envoy/config/filter/network/mongo_proxy/v2:mongo_proxy", |
||||
"//envoy/config/filter/network/rate_limit/v2:rate_limit", |
||||
"//envoy/config/filter/network/redis_proxy/v2:redis_proxy", |
||||
"//envoy/config/filter/network/tcp_proxy/v2:tcp_proxy", |
||||
"//envoy/config/metrics/v2:metrics_service", |
||||
"//envoy/config/metrics/v2:stats", |
||||
"//envoy/config/ratelimit/v2:rls", |
||||
"//envoy/config/trace/v2:trace", |
||||
"//envoy/service/discovery/v2:ads", |
||||
"//envoy/service/load_stats/v2:lrs", |
||||
"//envoy/service/metrics/v2:metrics_service", |
||||
], |
||||
) |
@ -1,27 +0,0 @@ |
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
# TODO(htuch): Grow this to cover everything we want to generate docs for, so we can just invoke |
||||
# bazel build //envoy/api --aspects tools/protodoc/protodoc.bzl%proto_doc_aspect --output_groups=rst |
||||
proto_library( |
||||
name = "envoy", |
||||
deps = [ |
||||
"//envoy/api/v2", |
||||
"//envoy/api/v2:cds", |
||||
"//envoy/api/v2/cluster:circuit_breaker", |
||||
"//envoy/api/v2/cluster:outlier_detection", |
||||
"//envoy/api/v2/filter/accesslog", |
||||
"//envoy/api/v2/filter/http", |
||||
"//envoy/api/v2/filter/network", |
||||
"//envoy/api/v2/listener", |
||||
"//envoy/api/v2/ratelimit", |
||||
"//envoy/api/v2/route", |
||||
"//envoy/config/bootstrap/v2:bootstrap", |
||||
"//envoy/config/metrics/v2:metrics_service", |
||||
"//envoy/config/metrics/v2:stats", |
||||
"//envoy/config/ratelimit/v2:rls", |
||||
"//envoy/config/trace/v2:trace", |
||||
"//envoy/service/discovery/v2:ads", |
||||
"//envoy/service/load_stats", |
||||
"//envoy/service/metrics", |
||||
], |
||||
) |
@ -1 +1,9 @@ |
||||
Protocol buffer definitions for core API messages. |
||||
Protocol buffer definitions for xDS and top-level resource API messages. |
||||
|
||||
Package group `//envoy/api/v2:friends` enumerates all consumers of the shared |
||||
API messages. That includes package envoy.api.v2 itself, which contains several |
||||
xDS definitions. Default visibility for all shared definitions should be set to |
||||
`//envoy/api/v2:friends`. |
||||
|
||||
Additionally, packages envoy.api.v2.core and envoy.api.v2.auth are also |
||||
consumed throughout the subpackages of `//envoy/api/v2`. |
||||
|
@ -0,0 +1,108 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library", "api_go_proto_library", "api_go_grpc_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
package_group( |
||||
name = "friends", |
||||
includes = [ |
||||
"//envoy/api/v2:friends", |
||||
], |
||||
packages = [ |
||||
"//envoy/api/v2/auth", |
||||
"//envoy/api/v2/cluster", |
||||
"//envoy/api/v2/endpoint", |
||||
"//envoy/api/v2/listener", |
||||
"//envoy/api/v2/route", |
||||
], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "address", |
||||
srcs = ["address.proto"], |
||||
visibility = [ |
||||
":friends", |
||||
], |
||||
) |
||||
|
||||
api_go_proto_library( |
||||
name = "address", |
||||
proto = ":address", |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "base", |
||||
srcs = ["base.proto"], |
||||
visibility = [ |
||||
":friends", |
||||
], |
||||
) |
||||
|
||||
api_go_proto_library( |
||||
name = "base", |
||||
proto = ":base", |
||||
deps = [":address_go_proto"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "health_check", |
||||
srcs = ["health_check.proto"], |
||||
visibility = [ |
||||
":friends", |
||||
], |
||||
deps = [":base"], |
||||
) |
||||
|
||||
api_go_proto_library( |
||||
name = "health_check", |
||||
proto = ":health_check", |
||||
deps = [":base_go_proto"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "config_source", |
||||
srcs = ["config_source.proto"], |
||||
visibility = [ |
||||
":friends", |
||||
], |
||||
deps = [ |
||||
":base", |
||||
":grpc_service", |
||||
], |
||||
) |
||||
|
||||
api_go_proto_library( |
||||
name = "config_source", |
||||
proto = ":config_source", |
||||
deps = [ |
||||
":base_go_proto", |
||||
":grpc_service_go_proto", |
||||
], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "grpc_service", |
||||
srcs = ["grpc_service.proto"], |
||||
visibility = [ |
||||
":friends", |
||||
], |
||||
deps = [":base"], |
||||
) |
||||
|
||||
api_go_proto_library( |
||||
name = "grpc_service", |
||||
proto = ":grpc_service", |
||||
deps = [":base_go_proto"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "protocol", |
||||
srcs = ["protocol.proto"], |
||||
visibility = [ |
||||
":friends", |
||||
], |
||||
) |
||||
|
||||
api_go_proto_library( |
||||
name = "protocol", |
||||
proto = ":protocol", |
||||
) |
@ -1,11 +1,14 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.api.v2; |
||||
package envoy.api.v2.core; |
||||
|
||||
import "google/protobuf/duration.proto"; |
||||
import "google/protobuf/wrappers.proto"; |
||||
|
||||
import "validate/validate.proto"; |
||||
import "gogoproto/gogo.proto"; |
||||
|
||||
option (gogoproto.equal_all) = true; |
||||
|
||||
// [#protodoc-title: Health check] |
||||
// * Health checking :ref:`architecture overview <arch_overview_health_checking>`. |
@ -1,13 +0,0 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "accesslog", |
||||
srcs = ["accesslog.proto"], |
||||
deps = [ |
||||
"//envoy/api/v2:address", |
||||
"//envoy/api/v2:base", |
||||
"//envoy/api/v2:grpc_service", |
||||
], |
||||
) |
@ -1,85 +0,0 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "router", |
||||
srcs = ["router.proto"], |
||||
deps = ["//envoy/api/v2/filter/accesslog"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "lua", |
||||
srcs = ["lua.proto"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "buffer", |
||||
srcs = ["buffer.proto"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "transcoder", |
||||
srcs = ["transcoder.proto"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "rate_limit", |
||||
srcs = ["rate_limit.proto"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "ip_tagging", |
||||
srcs = ["ip_tagging.proto"], |
||||
deps = ["//envoy/api/v2:address"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "health_check", |
||||
srcs = ["health_check.proto"], |
||||
deps = [ |
||||
"//envoy/api/v2:base", |
||||
], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "fault", |
||||
srcs = ["fault.proto"], |
||||
deps = [ |
||||
"//envoy/api/v2/filter:fault", |
||||
"//envoy/api/v2/route", |
||||
], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "gzip", |
||||
srcs = ["gzip.proto"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "squash", |
||||
srcs = ["squash.proto"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "ext_authz", |
||||
srcs = ["ext_authz.proto"], |
||||
deps = ["//envoy/api/v2:grpc_service"], |
||||
) |
||||
|
||||
proto_library( |
||||
name = "http", |
||||
visibility = ["//envoy:__pkg__"], |
||||
deps = [ |
||||
":buffer", |
||||
":ext_authz", |
||||
":fault", |
||||
":gzip", |
||||
":health_check", |
||||
":lua", |
||||
":rate_limit", |
||||
":router", |
||||
":squash", |
||||
":transcoder", |
||||
], |
||||
) |
@ -1,67 +0,0 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "http_connection_manager", |
||||
srcs = ["http_connection_manager.proto"], |
||||
deps = [ |
||||
"//envoy/api/v2:base", |
||||
"//envoy/api/v2:config_source", |
||||
"//envoy/api/v2:protocol", |
||||
"//envoy/api/v2:rds", |
||||
"//envoy/api/v2/filter/accesslog", |
||||
], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "mongo_proxy", |
||||
srcs = ["mongo_proxy.proto"], |
||||
deps = ["//envoy/api/v2/filter:fault"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "tcp_proxy", |
||||
srcs = ["tcp_proxy.proto"], |
||||
deps = [ |
||||
"//envoy/api/v2:address", |
||||
"//envoy/api/v2/filter/accesslog", |
||||
], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "redis_proxy", |
||||
srcs = ["redis_proxy.proto"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "client_ssl_auth", |
||||
srcs = ["client_ssl_auth.proto"], |
||||
deps = ["//envoy/api/v2:address"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "rate_limit", |
||||
srcs = ["rate_limit.proto"], |
||||
deps = ["//envoy/api/v2/ratelimit"], |
||||
) |
||||
|
||||
api_proto_library( |
||||
name = "ext_authz", |
||||
srcs = ["ext_authz.proto"], |
||||
deps = ["//envoy/api/v2:grpc_service"], |
||||
) |
||||
|
||||
proto_library( |
||||
name = "network", |
||||
visibility = ["//envoy:__pkg__"], |
||||
deps = [ |
||||
":client_ssl_auth", |
||||
":ext_authz", |
||||
":http_connection_manager", |
||||
":mongo_proxy", |
||||
":rate_limit", |
||||
":redis_proxy", |
||||
":tcp_proxy", |
||||
], |
||||
) |
@ -1 +1,3 @@ |
||||
Protocol buffer definitions for Envoy's bootstrap and service configuration. |
||||
Protocol buffer definitions for Envoy's bootstrap, filter, and service configuration. |
||||
|
||||
Visibility should be constrained to none or `//envoy/config/bootstrap/v2` by default. |
||||
|
@ -1,5 +1,8 @@ |
||||
Protocol buffer definitions for filters. |
||||
|
||||
Visibility of the definitions should be constrained to none except for |
||||
shared definitions between explicitly enumerated filters (e.g. accesslog and fault definitions). |
||||
|
||||
## NOTE |
||||
|
||||
If a filter configuration is not captured in the proto specification, you |
@ -0,0 +1,19 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "accesslog", |
||||
srcs = ["accesslog.proto"], |
||||
visibility = [ |
||||
"//envoy/config/filter/http/router/v2:__pkg__", |
||||
"//envoy/config/filter/network/http_connection_manager/v2:__pkg__", |
||||
"//envoy/config/filter/network/tcp_proxy/v2:__pkg__", |
||||
"//envoy/service/accesslog/v2:__pkg__", |
||||
], |
||||
deps = [ |
||||
"//envoy/api/v2/core:address", |
||||
"//envoy/api/v2/core:base", |
||||
"//envoy/api/v2/core:grpc_service", |
||||
], |
||||
) |
@ -0,0 +1,12 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "fault", |
||||
srcs = ["fault.proto"], |
||||
visibility = [ |
||||
"//envoy/config/filter/http/fault/v2:__pkg__", |
||||
"//envoy/config/filter/network/mongo_proxy/v2:__pkg__", |
||||
], |
||||
) |
@ -1,7 +1,7 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.api.v2.filter; |
||||
option go_package = "filter"; |
||||
package envoy.config.filter.fault.v2; |
||||
option go_package = "v2"; |
||||
|
||||
import "google/protobuf/duration.proto"; |
||||
|
@ -0,0 +1,8 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "buffer", |
||||
srcs = ["buffer.proto"], |
||||
) |
@ -0,0 +1,9 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "ext_authz", |
||||
srcs = ["ext_authz.proto"], |
||||
deps = ["//envoy/api/v2/core:grpc_service"], |
||||
) |
@ -0,0 +1,12 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "fault", |
||||
srcs = ["fault.proto"], |
||||
deps = [ |
||||
"//envoy/api/v2/route", |
||||
"//envoy/config/filter/fault/v2:fault", |
||||
], |
||||
) |
@ -1,10 +1,12 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.api.v2.filter.http; |
||||
package envoy.config.filter.http.gzip.v2; |
||||
option go_package = "v2"; |
||||
|
||||
import "google/protobuf/wrappers.proto"; |
||||
|
||||
import "validate/validate.proto"; |
||||
import "gogoproto/gogo.proto"; |
||||
|
||||
// [#protodoc-title: Gzip] |
||||
// Gzip :ref:`configuration overview <config_http_filters_gzip>`. |
@ -0,0 +1,11 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "health_check", |
||||
srcs = ["health_check.proto"], |
||||
deps = [ |
||||
"//envoy/api/v2/core:base", |
||||
], |
||||
) |
@ -0,0 +1,9 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "ip_tagging", |
||||
srcs = ["ip_tagging.proto"], |
||||
deps = ["//envoy/api/v2/core:address"], |
||||
) |
@ -0,0 +1,8 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "lua", |
||||
srcs = ["lua.proto"], |
||||
) |
@ -1,6 +1,7 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.api.v2.filter.http; |
||||
package envoy.config.filter.http.lua.v2; |
||||
option go_package = "v2"; |
||||
|
||||
import "validate/validate.proto"; |
||||
|
@ -0,0 +1,8 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "rate_limit", |
||||
srcs = ["rate_limit.proto"], |
||||
) |
@ -0,0 +1,9 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "router", |
||||
srcs = ["router.proto"], |
||||
deps = ["//envoy/config/filter/accesslog/v2:accesslog"], |
||||
) |
@ -0,0 +1,8 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "squash", |
||||
srcs = ["squash.proto"], |
||||
) |
@ -0,0 +1,8 @@ |
||||
load("//bazel:api_build_system.bzl", "api_proto_library") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_library( |
||||
name = "transcoder", |
||||
srcs = ["transcoder.proto"], |
||||
) |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue