async-grpc-xds 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/fixtures/async/grpc/test_interface.rb +79 -0
  4. data/fixtures/async/grpc/test_message.rb +56 -0
  5. data/lib/async/grpc/xds/ads_stream.rb +70 -0
  6. data/lib/async/grpc/xds/client.rb +255 -0
  7. data/lib/async/grpc/xds/context.rb +201 -0
  8. data/lib/async/grpc/xds/control_plane.rb +143 -0
  9. data/lib/async/grpc/xds/discovery_client.rb +356 -0
  10. data/lib/async/grpc/xds/health_checker.rb +88 -0
  11. data/lib/async/grpc/xds/load_balancer.rb +196 -0
  12. data/lib/async/grpc/xds/resource_builder.rb +138 -0
  13. data/lib/async/grpc/xds/resource_cache.rb +55 -0
  14. data/lib/async/grpc/xds/resources.rb +270 -0
  15. data/lib/async/grpc/xds/server.rb +34 -0
  16. data/lib/async/grpc/xds/service.rb +117 -0
  17. data/lib/async/grpc/xds/version.rb +12 -0
  18. data/lib/async/grpc/xds.rb +42 -0
  19. data/lib/envoy/annotations/deprecation_pb.rb +19 -0
  20. data/lib/envoy/config/cluster/v3/circuit_breaker_pb.rb +31 -0
  21. data/lib/envoy/config/cluster/v3/cluster_pb.rb +80 -0
  22. data/lib/envoy/config/cluster/v3/filter_pb.rb +28 -0
  23. data/lib/envoy/config/cluster/v3/outlier_detection_pb.rb +29 -0
  24. data/lib/envoy/config/core/v3/address_pb.rb +38 -0
  25. data/lib/envoy/config/core/v3/backoff_pb.rb +27 -0
  26. data/lib/envoy/config/core/v3/base_pb.rb +68 -0
  27. data/lib/envoy/config/core/v3/cel_pb.rb +24 -0
  28. data/lib/envoy/config/core/v3/config_source_pb.rb +42 -0
  29. data/lib/envoy/config/core/v3/event_service_config_pb.rb +27 -0
  30. data/lib/envoy/config/core/v3/extension_pb.rb +26 -0
  31. data/lib/envoy/config/core/v3/grpc_method_list_pb.rb +27 -0
  32. data/lib/envoy/config/core/v3/grpc_service_pb.rb +45 -0
  33. data/lib/envoy/config/core/v3/health_check_pb.rb +47 -0
  34. data/lib/envoy/config/core/v3/http_service_pb.rb +27 -0
  35. data/lib/envoy/config/core/v3/http_uri_pb.rb +27 -0
  36. data/lib/envoy/config/core/v3/protocol_pb.rb +51 -0
  37. data/lib/envoy/config/core/v3/proxy_protocol_pb.rb +31 -0
  38. data/lib/envoy/config/core/v3/resolver_pb.rb +27 -0
  39. data/lib/envoy/config/core/v3/socket_cmsg_headers_pb.rb +25 -0
  40. data/lib/envoy/config/core/v3/socket_option_pb.rb +31 -0
  41. data/lib/envoy/config/core/v3/substitution_format_string_pb.rb +30 -0
  42. data/lib/envoy/config/core/v3/udp_socket_config_pb.rb +26 -0
  43. data/lib/envoy/config/endpoint/v3/endpoint_components_pb.rb +40 -0
  44. data/lib/envoy/config/endpoint/v3/endpoint_pb.rb +32 -0
  45. data/lib/envoy/config/endpoint/v3/load_report_pb.rb +36 -0
  46. data/lib/envoy/service/discovery/v3/ads_pb.rb +26 -0
  47. data/lib/envoy/service/discovery/v3/aggregated_discovery_service.rb +64 -0
  48. data/lib/envoy/service/discovery/v3/discovery_pb.rb +42 -0
  49. data/lib/envoy/type/matcher/v3/address_pb.rb +25 -0
  50. data/lib/envoy/type/matcher/v3/filter_state_pb.rb +27 -0
  51. data/lib/envoy/type/matcher/v3/http_inputs_pb.rb +29 -0
  52. data/lib/envoy/type/matcher/v3/metadata_pb.rb +28 -0
  53. data/lib/envoy/type/matcher/v3/node_pb.rb +27 -0
  54. data/lib/envoy/type/matcher/v3/number_pb.rb +27 -0
  55. data/lib/envoy/type/matcher/v3/path_pb.rb +27 -0
  56. data/lib/envoy/type/matcher/v3/regex_pb.rb +30 -0
  57. data/lib/envoy/type/matcher/v3/status_code_input_pb.rb +25 -0
  58. data/lib/envoy/type/matcher/v3/string_pb.rb +29 -0
  59. data/lib/envoy/type/matcher/v3/struct_pb.rb +28 -0
  60. data/lib/envoy/type/matcher/v3/value_pb.rb +31 -0
  61. data/lib/envoy/type/metadata/v3/metadata_pb.rb +32 -0
  62. data/lib/envoy/type/v3/hash_policy_pb.rb +26 -0
  63. data/lib/envoy/type/v3/http_pb.rb +22 -0
  64. data/lib/envoy/type/v3/http_status_pb.rb +25 -0
  65. data/lib/envoy/type/v3/percent_pb.rb +26 -0
  66. data/lib/envoy/type/v3/range_pb.rb +25 -0
  67. data/lib/envoy/type/v3/ratelimit_strategy_pb.rb +28 -0
  68. data/lib/envoy/type/v3/ratelimit_unit_pb.rb +22 -0
  69. data/lib/envoy/type/v3/semantic_version_pb.rb +23 -0
  70. data/lib/envoy/type/v3/token_bucket_pb.rb +26 -0
  71. data/lib/envoy.rb +83 -0
  72. data/lib/google/protobuf/any_pb.rb +18 -0
  73. data/lib/google/protobuf/duration_pb.rb +18 -0
  74. data/lib/google/protobuf/empty_pb.rb +18 -0
  75. data/lib/google/protobuf/struct_pb.rb +21 -0
  76. data/lib/google/protobuf/timestamp_pb.rb +18 -0
  77. data/lib/google/protobuf/wrappers_pb.rb +26 -0
  78. data/lib/google/rpc/status_pb.rb +20 -0
  79. data/lib/udpa/annotations/migrate_pb.rb +22 -0
  80. data/lib/udpa/annotations/security_pb.rb +23 -0
  81. data/lib/udpa/annotations/sensitive_pb.rb +19 -0
  82. data/lib/udpa/annotations/status_pb.rb +21 -0
  83. data/lib/udpa/annotations/versioning_pb.rb +20 -0
  84. data/lib/validate/validate_pb.rb +43 -0
  85. data/lib/xds/annotations/v3/status_pb.rb +26 -0
  86. data/lib/xds/core/v3/authority_pb.rb +23 -0
  87. data/lib/xds/core/v3/cidr_pb.rb +24 -0
  88. data/lib/xds/core/v3/collection_entry_pb.rb +26 -0
  89. data/lib/xds/core/v3/context_params_pb.rb +22 -0
  90. data/lib/xds/core/v3/extension_pb.rb +23 -0
  91. data/lib/xds/core/v3/resource_locator_pb.rb +26 -0
  92. data/lib/xds/core/v3/resource_name_pb.rb +24 -0
  93. data/lib/xds/core/v3/resource_pb.rb +24 -0
  94. data/lib/xds/type/matcher/v3/domain_pb.rb +27 -0
  95. data/lib/xds/type/matcher/v3/http_inputs_pb.rb +22 -0
  96. data/lib/xds/type/matcher/v3/ip_pb.rb +28 -0
  97. data/lib/xds/type/matcher/v3/matcher_pb.rb +34 -0
  98. data/lib/xds/type/matcher/v3/range_pb.rb +31 -0
  99. data/lib/xds/type/matcher/v3/regex_pb.rb +25 -0
  100. data/lib/xds/type/matcher/v3/string_pb.rb +27 -0
  101. data/license.md +21 -0
  102. data/plan.md +156 -0
  103. data/proto/envoy/annotations/deprecation.proto +34 -0
  104. data/proto/envoy/annotations/resource.proto +19 -0
  105. data/proto/envoy/config/README.md +3 -0
  106. data/proto/envoy/config/cluster/v3/BUILD +18 -0
  107. data/proto/envoy/config/cluster/v3/circuit_breaker.proto +121 -0
  108. data/proto/envoy/config/cluster/v3/cluster.proto +1407 -0
  109. data/proto/envoy/config/cluster/v3/filter.proto +40 -0
  110. data/proto/envoy/config/cluster/v3/outlier_detection.proto +180 -0
  111. data/proto/envoy/config/core/v3/BUILD +16 -0
  112. data/proto/envoy/config/core/v3/address.proto +214 -0
  113. data/proto/envoy/config/core/v3/backoff.proto +37 -0
  114. data/proto/envoy/config/core/v3/base.proto +662 -0
  115. data/proto/envoy/config/core/v3/cel.proto +63 -0
  116. data/proto/envoy/config/core/v3/config_source.proto +283 -0
  117. data/proto/envoy/config/core/v3/event_service_config.proto +29 -0
  118. data/proto/envoy/config/core/v3/extension.proto +32 -0
  119. data/proto/envoy/config/core/v3/grpc_method_list.proto +33 -0
  120. data/proto/envoy/config/core/v3/grpc_service.proto +355 -0
  121. data/proto/envoy/config/core/v3/health_check.proto +443 -0
  122. data/proto/envoy/config/core/v3/http_service.proto +35 -0
  123. data/proto/envoy/config/core/v3/http_uri.proto +58 -0
  124. data/proto/envoy/config/core/v3/protocol.proto +807 -0
  125. data/proto/envoy/config/core/v3/proxy_protocol.proto +114 -0
  126. data/proto/envoy/config/core/v3/resolver.proto +36 -0
  127. data/proto/envoy/config/core/v3/socket_cmsg_headers.proto +28 -0
  128. data/proto/envoy/config/core/v3/socket_option.proto +108 -0
  129. data/proto/envoy/config/core/v3/substitution_format_string.proto +136 -0
  130. data/proto/envoy/config/core/v3/udp_socket_config.proto +32 -0
  131. data/proto/envoy/config/endpoint/v3/BUILD +16 -0
  132. data/proto/envoy/config/endpoint/v3/endpoint.proto +137 -0
  133. data/proto/envoy/config/endpoint/v3/endpoint_components.proto +229 -0
  134. data/proto/envoy/config/endpoint/v3/load_report.proto +220 -0
  135. data/proto/envoy/config/listener/v3/BUILD +18 -0
  136. data/proto/envoy/config/listener/v3/api_listener.proto +34 -0
  137. data/proto/envoy/config/listener/v3/listener.proto +455 -0
  138. data/proto/envoy/config/listener/v3/listener_components.proto +353 -0
  139. data/proto/envoy/config/listener/v3/quic_config.proto +108 -0
  140. data/proto/envoy/config/listener/v3/udp_listener_config.proto +52 -0
  141. data/proto/envoy/config/route/v3/BUILD +19 -0
  142. data/proto/envoy/config/route/v3/route.proto +172 -0
  143. data/proto/envoy/config/route/v3/route_components.proto +2918 -0
  144. data/proto/envoy/config/route/v3/scoped_route.proto +133 -0
  145. data/proto/envoy/extensions/transport_sockets/tls/v3/BUILD +14 -0
  146. data/proto/envoy/extensions/transport_sockets/tls/v3/cert.proto +12 -0
  147. data/proto/envoy/extensions/transport_sockets/tls/v3/common.proto +597 -0
  148. data/proto/envoy/extensions/transport_sockets/tls/v3/secret.proto +61 -0
  149. data/proto/envoy/extensions/transport_sockets/tls/v3/tls.proto +366 -0
  150. data/proto/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.proto +67 -0
  151. data/proto/envoy/service/README.md +3 -0
  152. data/proto/envoy/service/discovery/v3/BUILD +13 -0
  153. data/proto/envoy/service/discovery/v3/ads.proto +44 -0
  154. data/proto/envoy/service/discovery/v3/discovery.proto +443 -0
  155. data/proto/envoy/type/BUILD +9 -0
  156. data/proto/envoy/type/hash_policy.proto +28 -0
  157. data/proto/envoy/type/http.proto +24 -0
  158. data/proto/envoy/type/http_status.proto +140 -0
  159. data/proto/envoy/type/matcher/v3/address.proto +22 -0
  160. data/proto/envoy/type/matcher/v3/filter_state.proto +33 -0
  161. data/proto/envoy/type/matcher/v3/http_inputs.proto +71 -0
  162. data/proto/envoy/type/matcher/v3/metadata.proto +110 -0
  163. data/proto/envoy/type/matcher/v3/node.proto +29 -0
  164. data/proto/envoy/type/matcher/v3/number.proto +33 -0
  165. data/proto/envoy/type/matcher/v3/path.proto +31 -0
  166. data/proto/envoy/type/matcher/v3/regex.proto +97 -0
  167. data/proto/envoy/type/matcher/v3/status_code_input.proto +23 -0
  168. data/proto/envoy/type/matcher/v3/string.proto +94 -0
  169. data/proto/envoy/type/matcher/v3/struct.proto +91 -0
  170. data/proto/envoy/type/matcher/v3/value.proto +80 -0
  171. data/proto/envoy/type/metadata/v3/metadata.proto +117 -0
  172. data/proto/envoy/type/percent.proto +52 -0
  173. data/proto/envoy/type/range.proto +43 -0
  174. data/proto/envoy/type/semantic_version.proto +24 -0
  175. data/proto/envoy/type/token_bucket.proto +36 -0
  176. data/proto/envoy/type/v3/BUILD +12 -0
  177. data/proto/envoy/type/v3/hash_policy.proto +43 -0
  178. data/proto/envoy/type/v3/http.proto +24 -0
  179. data/proto/envoy/type/v3/http_status.proto +199 -0
  180. data/proto/envoy/type/v3/percent.proto +57 -0
  181. data/proto/envoy/type/v3/range.proto +50 -0
  182. data/proto/envoy/type/v3/ratelimit_strategy.proto +79 -0
  183. data/proto/envoy/type/v3/ratelimit_unit.proto +37 -0
  184. data/proto/envoy/type/v3/semantic_version.proto +27 -0
  185. data/proto/envoy/type/v3/token_bucket.proto +39 -0
  186. data/proto/google/protobuf/any.proto +162 -0
  187. data/proto/google/protobuf/duration.proto +115 -0
  188. data/proto/google/protobuf/empty.proto +51 -0
  189. data/proto/google/protobuf/struct.proto +95 -0
  190. data/proto/google/protobuf/timestamp.proto +145 -0
  191. data/proto/google/protobuf/wrappers.proto +157 -0
  192. data/proto/google/rpc/status.proto +47 -0
  193. data/proto/readme.md +70 -0
  194. data/proto/udpa/annotations/migrate.proto +49 -0
  195. data/proto/udpa/annotations/security.proto +31 -0
  196. data/proto/udpa/annotations/sensitive.proto +14 -0
  197. data/proto/udpa/annotations/status.proto +34 -0
  198. data/proto/udpa/annotations/versioning.proto +17 -0
  199. data/proto/validate/validate.proto +862 -0
  200. data/proto/xds/annotations/v3/migrate.proto +46 -0
  201. data/proto/xds/annotations/v3/security.proto +30 -0
  202. data/proto/xds/annotations/v3/sensitive.proto +16 -0
  203. data/proto/xds/annotations/v3/status.proto +59 -0
  204. data/proto/xds/annotations/v3/versioning.proto +20 -0
  205. data/proto/xds/core/v3/authority.proto +22 -0
  206. data/proto/xds/core/v3/cidr.proto +25 -0
  207. data/proto/xds/core/v3/collection_entry.proto +55 -0
  208. data/proto/xds/core/v3/context_params.proto +23 -0
  209. data/proto/xds/core/v3/extension.proto +26 -0
  210. data/proto/xds/core/v3/resource.proto +29 -0
  211. data/proto/xds/core/v3/resource_locator.proto +118 -0
  212. data/proto/xds/core/v3/resource_name.proto +42 -0
  213. data/proto/xds/type/matcher/v3/cel.proto +37 -0
  214. data/proto/xds/type/matcher/v3/domain.proto +46 -0
  215. data/proto/xds/type/matcher/v3/http_inputs.proto +23 -0
  216. data/proto/xds/type/matcher/v3/ip.proto +53 -0
  217. data/proto/xds/type/matcher/v3/matcher.proto +144 -0
  218. data/proto/xds/type/matcher/v3/range.proto +69 -0
  219. data/proto/xds/type/matcher/v3/regex.proto +46 -0
  220. data/proto/xds/type/matcher/v3/string.proto +71 -0
  221. data/proto/xds/type/v3/cel.proto +77 -0
  222. data/proto/xds/type/v3/range.proto +40 -0
  223. data/proto/xds/type/v3/typed_struct.proto +44 -0
  224. data/readme.md +37 -0
  225. data/releases.md +5 -0
  226. data/xds/Dockerfile.backend +24 -0
  227. data/xds/Dockerfile.control-plane +22 -0
  228. data/xds/backend_server.rb +68 -0
  229. data/xds/docker-compose.yaml +89 -0
  230. data/xds/go.mod +22 -0
  231. data/xds/go.sum +82 -0
  232. data/xds/readme.md +122 -0
  233. data/xds/test/async/grpc/xds/client.rb +294 -0
  234. data/xds/test/async/grpc/xds/control_plane.rb +94 -0
  235. data/xds/test_server.go +355 -0
  236. data/xds/update_protos.sh +123 -0
  237. data.tar.gz.sig +0 -0
  238. metadata +386 -0
  239. metadata.gz.sig +2 -0
@@ -0,0 +1,46 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.annotations.v3;
4
+
5
+ import "google/protobuf/descriptor.proto";
6
+
7
+ option go_package = "github.com/cncf/xds/go/xds/annotations/v3";
8
+
9
+ // Magic number in this file derived from top 28bit of SHA256 digest of
10
+ // "xds.annotation.v3.migrate".
11
+ extend google.protobuf.MessageOptions {
12
+ MigrateAnnotation message_migrate = 112948430;
13
+ }
14
+ extend google.protobuf.FieldOptions {
15
+ FieldMigrateAnnotation field_migrate = 112948430;
16
+ }
17
+ extend google.protobuf.EnumOptions {
18
+ MigrateAnnotation enum_migrate = 112948430;
19
+ }
20
+ extend google.protobuf.EnumValueOptions {
21
+ MigrateAnnotation enum_value_migrate = 112948430;
22
+ }
23
+ extend google.protobuf.FileOptions {
24
+ FileMigrateAnnotation file_migrate = 112948430;
25
+ }
26
+
27
+ message MigrateAnnotation {
28
+ // Rename the message/enum/enum value in next version.
29
+ string rename = 1;
30
+ }
31
+
32
+ message FieldMigrateAnnotation {
33
+ // Rename the field in next version.
34
+ string rename = 1;
35
+
36
+ // Add the field to a named oneof in next version. If this already exists, the
37
+ // field will join its siblings under the oneof, otherwise a new oneof will be
38
+ // created with the given name.
39
+ string oneof_promotion = 2;
40
+ }
41
+
42
+ message FileMigrateAnnotation {
43
+ // Move all types in the file to another package, this implies changing proto
44
+ // file path.
45
+ string move_to_package = 2;
46
+ }
@@ -0,0 +1,30 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.annotations.v3;
4
+
5
+ import "xds/annotations/v3/status.proto";
6
+
7
+ import "google/protobuf/descriptor.proto";
8
+
9
+ option go_package = "github.com/cncf/xds/go/xds/annotations/v3";
10
+
11
+ // All annotations in this file are experimental and subject to change. Their
12
+ // only consumer today is the Envoy APIs and SecuritAnnotationValidator protoc
13
+ // plugin in this repository.
14
+ option (xds.annotations.v3.file_status).work_in_progress = true;
15
+
16
+ extend google.protobuf.FieldOptions {
17
+ // Magic number is the 28 most significant bits in the sha256sum of
18
+ // "xds.annotations.v3.security".
19
+ FieldSecurityAnnotation security = 99044135;
20
+ }
21
+
22
+ // These annotations indicate metadata for the purpose of understanding the
23
+ // security significance of fields.
24
+ message FieldSecurityAnnotation {
25
+ // Field should be set in the presence of untrusted downstreams.
26
+ bool configure_for_untrusted_downstream = 1;
27
+
28
+ // Field should be set in the presence of untrusted upstreams.
29
+ bool configure_for_untrusted_upstream = 2;
30
+ }
@@ -0,0 +1,16 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.annotations.v3;
4
+
5
+ import "google/protobuf/descriptor.proto";
6
+
7
+ option go_package = "github.com/cncf/xds/go/xds/annotations/v3";
8
+
9
+ extend google.protobuf.FieldOptions {
10
+ // Magic number is the 28 most significant bits in the sha256sum of "xds.annotations.v3.sensitive".
11
+ // When set to true, `sensitive` indicates that this field contains sensitive data, such as
12
+ // personally identifiable information, passwords, or private keys, and should be redacted for
13
+ // display by tools aware of this annotation. Note that that this has no effect on standard
14
+ // Protobuf functions such as `TextFormat::PrintToString`.
15
+ bool sensitive = 61008053;
16
+ }
@@ -0,0 +1,59 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.annotations.v3;
4
+
5
+ import "google/protobuf/descriptor.proto";
6
+
7
+ option go_package = "github.com/cncf/xds/go/xds/annotations/v3";
8
+
9
+ // Magic number in this file derived from top 28bit of SHA256 digest of
10
+ // "xds.annotations.v3.status".
11
+ extend google.protobuf.FileOptions {
12
+ FileStatusAnnotation file_status = 226829418;
13
+ }
14
+
15
+ extend google.protobuf.MessageOptions {
16
+ MessageStatusAnnotation message_status = 226829418;
17
+ }
18
+
19
+ extend google.protobuf.FieldOptions {
20
+ FieldStatusAnnotation field_status = 226829418;
21
+ }
22
+
23
+ message FileStatusAnnotation {
24
+ // The entity is work-in-progress and subject to breaking changes.
25
+ bool work_in_progress = 1;
26
+ }
27
+
28
+ message MessageStatusAnnotation {
29
+ // The entity is work-in-progress and subject to breaking changes.
30
+ bool work_in_progress = 1;
31
+ }
32
+
33
+ message FieldStatusAnnotation {
34
+ // The entity is work-in-progress and subject to breaking changes.
35
+ bool work_in_progress = 1;
36
+ }
37
+
38
+ enum PackageVersionStatus {
39
+ // Unknown package version status.
40
+ UNKNOWN = 0;
41
+
42
+ // This version of the package is frozen.
43
+ FROZEN = 1;
44
+
45
+ // This version of the package is the active development version.
46
+ ACTIVE = 2;
47
+
48
+ // This version of the package is the candidate for the next major version. It
49
+ // is typically machine generated from the active development version.
50
+ NEXT_MAJOR_VERSION_CANDIDATE = 3;
51
+ }
52
+
53
+ message StatusAnnotation {
54
+ // The entity is work-in-progress and subject to breaking changes.
55
+ bool work_in_progress = 1;
56
+
57
+ // The entity belongs to a package with the given version status.
58
+ PackageVersionStatus package_version_status = 2;
59
+ }
@@ -0,0 +1,20 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.annotations.v3;
4
+
5
+ import "google/protobuf/descriptor.proto";
6
+
7
+ option go_package = "github.com/cncf/xds/go/xds/annotations/v3";
8
+
9
+ extend google.protobuf.MessageOptions {
10
+ // Magic number is the 28 most significant bits in the sha256sum of
11
+ // "xds.annotations.v3.versioning".
12
+ VersioningAnnotation versioning = 92389011;
13
+ }
14
+
15
+ message VersioningAnnotation {
16
+ // Track the previous message type. E.g. this message might be
17
+ // xds.foo.v3alpha.Foo and it was previously xds.bar.v2.Bar. This
18
+ // information is consumed by UDPA via proto descriptors.
19
+ string previous_message_type = 1;
20
+ }
@@ -0,0 +1,22 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.core.v3;
4
+
5
+ import "xds/annotations/v3/status.proto";
6
+
7
+ import "validate/validate.proto";
8
+
9
+ option java_outer_classname = "AuthorityProto";
10
+ option java_multiple_files = true;
11
+ option java_package = "com.github.xds.core.v3";
12
+ option go_package = "github.com/cncf/xds/go/xds/core/v3";
13
+
14
+ option (xds.annotations.v3.file_status).work_in_progress = true;
15
+
16
+ // xDS authority information.
17
+ message Authority {
18
+ string name = 1 [(validate.rules).string = {min_len: 1}];
19
+
20
+ // .. space reserved for additional authority addressing information, e.g. for
21
+ // resource signing, items such as CA trust chain, cert pinning may be added.
22
+ }
@@ -0,0 +1,25 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.core.v3;
4
+
5
+ import "xds/annotations/v3/status.proto";
6
+ import "google/protobuf/wrappers.proto";
7
+
8
+ import "validate/validate.proto";
9
+
10
+ option java_outer_classname = "CidrRangeProto";
11
+ option java_multiple_files = true;
12
+ option java_package = "com.github.xds.core.v3";
13
+ option go_package = "github.com/cncf/xds/go/xds/core/v3";
14
+
15
+ option (xds.annotations.v3.file_status).work_in_progress = true;
16
+
17
+ // CidrRange specifies an IP Address and a prefix length to construct
18
+ // the subnet mask for a `CIDR <https://tools.ietf.org/html/rfc4632>`_ range.
19
+ message CidrRange {
20
+ // IPv4 or IPv6 address, e.g. ``192.0.0.0`` or ``2001:db8::``.
21
+ string address_prefix = 1 [(validate.rules).string = {min_len: 1}];
22
+
23
+ // Length of prefix, e.g. 0, 32. Defaults to 0 when unset.
24
+ google.protobuf.UInt32Value prefix_len = 2 [(validate.rules).uint32 = {lte: 128}];
25
+ }
@@ -0,0 +1,55 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.core.v3;
4
+
5
+ import "google/protobuf/any.proto";
6
+
7
+ import "xds/annotations/v3/status.proto";
8
+ import "xds/core/v3/resource_locator.proto";
9
+
10
+ import "validate/validate.proto";
11
+
12
+ option java_outer_classname = "CollectionEntryProto";
13
+ option java_multiple_files = true;
14
+ option java_package = "com.github.xds.core.v3";
15
+ option go_package = "github.com/cncf/xds/go/xds/core/v3";
16
+
17
+ option (xds.annotations.v3.file_status).work_in_progress = true;
18
+
19
+ // xDS collection resource wrapper. This encapsulates a xDS resource when
20
+ // appearing inside a list collection resource. List collection resources are
21
+ // regular Resource messages of type:
22
+ //
23
+ // .. code-block:: proto
24
+ //
25
+ // message <T>Collection {
26
+ // repeated CollectionEntry resources = 1;
27
+ // }
28
+ //
29
+ message CollectionEntry {
30
+ // Inlined resource entry.
31
+ message InlineEntry {
32
+ // Optional name to describe the inlined resource. Resource names must match
33
+ // ``[a-zA-Z0-9_-\./]+`` (TODO(htuch): turn this into a PGV constraint once
34
+ // finalized, probably should be a RFC3986 pchar). This name allows
35
+ // reference via the #entry directive in ResourceLocator.
36
+ string name = 1 [(validate.rules).string.pattern = "^[0-9a-zA-Z_\\-\\.~:]+$"];
37
+
38
+ // The resource's logical version. It is illegal to have the same named xDS
39
+ // resource name at a given version with different resource payloads.
40
+ string version = 2;
41
+
42
+ // The resource payload, including type URL.
43
+ google.protobuf.Any resource = 3;
44
+ }
45
+
46
+ oneof resource_specifier {
47
+ option (validate.required) = true;
48
+
49
+ // A resource locator describing how the member resource is to be located.
50
+ ResourceLocator locator = 1;
51
+
52
+ // The resource is inlined in the list collection.
53
+ InlineEntry inline_entry = 2;
54
+ }
55
+ }
@@ -0,0 +1,23 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.core.v3;
4
+
5
+ import "xds/annotations/v3/status.proto";
6
+
7
+ option java_outer_classname = "ContextParamsProto";
8
+ option java_multiple_files = true;
9
+ option java_package = "com.github.xds.core.v3";
10
+ option go_package = "github.com/cncf/xds/go/xds/core/v3";
11
+
12
+ option (xds.annotations.v3.file_status).work_in_progress = true;
13
+
14
+ // Additional parameters that can be used to select resource variants. These include any
15
+ // global context parameters, per-resource type client feature capabilities and per-resource
16
+ // type functional attributes. All per-resource type attributes will be `xds.resource.`
17
+ // prefixed and some of these are documented below:
18
+ //
19
+ // `xds.resource.listening_address`: The value is "IP:port" (e.g. "10.1.1.3:8080") which is
20
+ // the listening address of a Listener. Used in a Listener resource query.
21
+ message ContextParams {
22
+ map<string, string> params = 1;
23
+ }
@@ -0,0 +1,26 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.core.v3;
4
+
5
+ option java_outer_classname = "ExtensionProto";
6
+ option java_multiple_files = true;
7
+ option java_package = "com.github.xds.core.v3";
8
+ option go_package = "github.com/cncf/xds/go/xds/core/v3";
9
+
10
+ import "validate/validate.proto";
11
+ import "google/protobuf/any.proto";
12
+
13
+ // Message type for extension configuration.
14
+ message TypedExtensionConfig {
15
+ // The name of an extension. This is not used to select the extension, instead
16
+ // it serves the role of an opaque identifier.
17
+ string name = 1 [(validate.rules).string = {min_len: 1}];
18
+
19
+ // The typed config for the extension. The type URL will be used to identify
20
+ // the extension. In the case that the type URL is *xds.type.v3.TypedStruct*
21
+ // (or, for historical reasons, *udpa.type.v1.TypedStruct*), the inner type
22
+ // URL of *TypedStruct* will be utilized. See the
23
+ // :ref:`extension configuration overview
24
+ // <config_overview_extension_configuration>` for further details.
25
+ google.protobuf.Any typed_config = 2 [(validate.rules).any = {required: true}];
26
+ }
@@ -0,0 +1,29 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.core.v3;
4
+
5
+ import "google/protobuf/any.proto";
6
+
7
+ import "xds/annotations/v3/status.proto";
8
+ import "xds/core/v3/resource_name.proto";
9
+
10
+ option java_outer_classname = "ResourceProto";
11
+ option java_multiple_files = true;
12
+ option java_package = "com.github.xds.core.v3";
13
+ option go_package = "github.com/cncf/xds/go/xds/core/v3";
14
+
15
+ option (xds.annotations.v3.file_status).work_in_progress = true;
16
+
17
+ // xDS resource wrapper. This encapsulates a xDS resource when appearing in an
18
+ // xDS transport discovery response or when accessed as a filesystem object.
19
+ message Resource {
20
+ // Resource name. This may be omitted for filesystem resources.
21
+ ResourceName name = 1;
22
+
23
+ // The resource's logical version. It is illegal to have the same named xDS
24
+ // resource name at a given version with different resource payloads.
25
+ string version = 2;
26
+
27
+ // The resource payload, including type URL.
28
+ google.protobuf.Any resource = 3;
29
+ }
@@ -0,0 +1,118 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.core.v3;
4
+
5
+ import "xds/annotations/v3/status.proto";
6
+ import "xds/core/v3/context_params.proto";
7
+
8
+ import "validate/validate.proto";
9
+
10
+ option java_outer_classname = "ResourceLocatorProto";
11
+ option java_multiple_files = true;
12
+ option java_package = "com.github.xds.core.v3";
13
+ option go_package = "github.com/cncf/xds/go/xds/core/v3";
14
+
15
+ option (xds.annotations.v3.file_status).work_in_progress = true;
16
+
17
+ // xDS resource locators identify a xDS resource name and instruct the
18
+ // data-plane load balancer on how the resource may be located.
19
+ //
20
+ // Resource locators have a canonical xdstp:// URI representation:
21
+ //
22
+ // xdstp://{authority}/{type_url}/{id}?{context_params}{#directive,*}
23
+ //
24
+ // where context_params take the form of URI query parameters.
25
+ //
26
+ // Resource locators have a similar canonical http:// URI representation:
27
+ //
28
+ // http://{authority}/{type_url}/{id}?{context_params}{#directive,*}
29
+ //
30
+ // Resource locators also have a simplified file:// URI representation:
31
+ //
32
+ // file:///{id}{#directive,*}
33
+ //
34
+ message ResourceLocator {
35
+ enum Scheme {
36
+ XDSTP = 0;
37
+ HTTP = 1;
38
+ FILE = 2;
39
+ }
40
+
41
+ // URI scheme.
42
+ Scheme scheme = 1 [(validate.rules).enum = {defined_only: true}];
43
+
44
+ // Opaque identifier for the resource. Any '/' will not be escaped during URI
45
+ // encoding and will form part of the URI path. This may end
46
+ // with ‘*’ for glob collection references.
47
+ string id = 2;
48
+
49
+ // Logical authority for resource (not necessarily transport network address).
50
+ // Authorities are opaque in the xDS API, data-plane load balancers will map
51
+ // them to concrete network transports such as an xDS management server, e.g.
52
+ // via envoy.config.core.v3.ConfigSource.
53
+ string authority = 3;
54
+
55
+ // Fully qualified resource type (as in type URL without types.googleapis.com/
56
+ // prefix).
57
+ string resource_type = 4 [(validate.rules).string = {min_len: 1}];
58
+
59
+ oneof context_param_specifier {
60
+ // Additional parameters that can be used to select resource variants.
61
+ // Matches must be exact, i.e. all context parameters must match exactly and
62
+ // there must be no additional context parameters set on the matched
63
+ // resource.
64
+ ContextParams exact_context = 5;
65
+
66
+ // .. space reserved for future potential matchers, e.g. CEL expressions.
67
+ }
68
+
69
+ // Directives provide information to data-plane load balancers on how xDS
70
+ // resource names are to be interpreted and potentially further resolved. For
71
+ // example, they may provide alternative resource locators for when primary
72
+ // resolution fails. Directives are not part of resource names and do not
73
+ // appear in a xDS transport discovery request.
74
+ //
75
+ // When encoding to URIs, directives take the form:
76
+ //
77
+ // <directive name>=<string representation of directive value>
78
+ //
79
+ // For example, we can have alt=xdstp://foo/bar or entry=some%20thing. Each
80
+ // directive value type may have its own string encoding, in the case of
81
+ // ResourceLocator there is a recursive URI encoding.
82
+ //
83
+ // Percent encoding applies to the URI encoding of the directive value.
84
+ // Multiple directives are comma-separated, so the reserved characters that
85
+ // require percent encoding in a directive value are [',', '#', '[', ']',
86
+ // '%']. These are the RFC3986 fragment reserved characters with the addition
87
+ // of the xDS scheme specific ','. See
88
+ // https://tools.ietf.org/html/rfc3986#page-49 for further details on URI ABNF
89
+ // and reserved characters.
90
+ message Directive {
91
+ oneof directive {
92
+ option (validate.required) = true;
93
+
94
+ // An alternative resource locator for fallback if the resource is
95
+ // unavailable. For example, take the resource locator:
96
+ //
97
+ // xdstp://foo/some-type/some-route-table#alt=xdstp://bar/some-type/another-route-table
98
+ //
99
+ // If the data-plane load balancer is unable to reach `foo` to fetch the
100
+ // resource, it will fallback to `bar`. Alternative resources do not need
101
+ // to have equivalent content, but they should be functional substitutes.
102
+ ResourceLocator alt = 1;
103
+
104
+ // List collections support inlining of resources via the entry field in
105
+ // Resource. These inlined Resource objects may have an optional name
106
+ // field specified. When specified, the entry directive allows
107
+ // ResourceLocator to directly reference these inlined resources, e.g.
108
+ // xdstp://.../foo#entry=bar.
109
+ string entry = 2 [(validate.rules).string = {min_len: 1, pattern: "^[0-9a-zA-Z_\\-\\./~:]+$"}];
110
+ }
111
+ }
112
+
113
+ // A list of directives that appear in the xDS resource locator #fragment.
114
+ //
115
+ // When encoding to URI form, directives are percent encoded with comma
116
+ // separation.
117
+ repeated Directive directives = 6;
118
+ }
@@ -0,0 +1,42 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.core.v3;
4
+
5
+ import "xds/annotations/v3/status.proto";
6
+ import "xds/core/v3/context_params.proto";
7
+
8
+ import "validate/validate.proto";
9
+
10
+ option java_outer_classname = "ResourceNameProto";
11
+ option java_multiple_files = true;
12
+ option java_package = "com.github.xds.core.v3";
13
+ option go_package = "github.com/cncf/xds/go/xds/core/v3";
14
+
15
+ option (xds.annotations.v3.file_status).work_in_progress = true;
16
+
17
+ // xDS resource name. This has a canonical xdstp:// URI representation:
18
+ //
19
+ // xdstp://{authority}/{type_url}/{id}?{context_params}
20
+ //
21
+ // where context_params take the form of URI query parameters.
22
+ //
23
+ // A xDS resource name fully identifies a network resource for transport
24
+ // purposes. xDS resource names in this form appear only in discovery
25
+ // request/response messages used with the xDS transport.
26
+ message ResourceName {
27
+ // Opaque identifier for the resource. Any '/' will not be escaped during URI
28
+ // encoding and will form part of the URI path.
29
+ string id = 1;
30
+
31
+ // Logical authority for resource (not necessarily transport network address).
32
+ // Authorities are opaque in the xDS API, data-plane load balancers will map
33
+ // them to concrete network transports such as an xDS management server.
34
+ string authority = 2;
35
+
36
+ // Fully qualified resource type (as in type URL without types.googleapis.com/
37
+ // prefix).
38
+ string resource_type = 3 [(validate.rules).string = {min_len: 1}];
39
+
40
+ // Additional parameters that can be used to select resource variants.
41
+ ContextParams context = 4;
42
+ }
@@ -0,0 +1,37 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.type.matcher.v3;
4
+
5
+ import "xds/type/v3/cel.proto";
6
+ import "validate/validate.proto";
7
+
8
+ option java_package = "com.github.xds.type.matcher.v3";
9
+ option java_outer_classname = "CelProto";
10
+ option java_multiple_files = true;
11
+ option go_package = "github.com/cncf/xds/go/xds/type/matcher/v3";
12
+
13
+ // [#protodoc-title: Common Expression Language (CEL) matchers]
14
+
15
+ // Performs a match by evaluating a `Common Expression Language
16
+ // <https://github.com/google/cel-spec>`_ (CEL) expression against the standardized set of
17
+ // :ref:`HTTP attributes <arch_overview_attributes>` specified via ``HttpAttributesCelMatchInput``.
18
+ //
19
+ // .. attention::
20
+ //
21
+ // The match is ``true``, iff the result of the evaluation is a bool AND true.
22
+ // In all other cases, the match is ``false``, including but not limited to: non-bool types,
23
+ // ``false``, ``null``, ``int(1)``, etc.
24
+ // In case CEL expression raises an error, the result of the evaluation is interpreted "no match".
25
+ //
26
+ // Refer to :ref:`Unified Matcher API <envoy_v3_api_msg_.xds.type.matcher.v3.Matcher>` documentation
27
+ // for usage details.
28
+ //
29
+ // [#comment: envoy.matching.matchers.cel_matcher]
30
+ message CelMatcher {
31
+ // Either parsed or checked representation of the CEL program.
32
+ type.v3.CelExpression expr_match = 1 [(validate.rules).message = {required: true}];
33
+
34
+ // Free-form description of the CEL AST, e.g. the original expression text, to be
35
+ // used for debugging assistance.
36
+ string description = 2;
37
+ }
@@ -0,0 +1,46 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.type.matcher.v3;
4
+
5
+ import "xds/annotations/v3/status.proto";
6
+ import "xds/type/matcher/v3/matcher.proto";
7
+
8
+ import "validate/validate.proto";
9
+
10
+ option java_package = "com.github.xds.type.matcher.v3";
11
+ option java_outer_classname = "ServerNameMatcherProto";
12
+ option java_multiple_files = true;
13
+ option go_package = "github.com/cncf/xds/go/xds/type/matcher/v3";
14
+
15
+ option (xds.annotations.v3.file_status).work_in_progress = true;
16
+
17
+ // [#protodoc-title: Server name matcher]
18
+
19
+ // Matches a fully qualified server name against a set of domain
20
+ // names with optional wildcards.
21
+ message ServerNameMatcher {
22
+ // Specifies a set of exact and wildcard domains and a match action. The
23
+ // wildcard symbol ``*`` must appear at most once as the left-most part of
24
+ // the domain on a dot border. The wildcard matches one or more non-empty
25
+ // domain parts.
26
+ message DomainMatcher {
27
+ // A non-empty set of domain names with optional wildcards, e.g.
28
+ // ``www.example.com``, ``*.com``, or ``*``.
29
+ repeated string domains = 1 [ (validate.rules).repeated = {min_items : 1} ];
30
+
31
+ // Match action to apply when the server name matches any of the domain
32
+ // names in the matcher.
33
+ Matcher.OnMatch on_match = 2;
34
+ }
35
+
36
+ // Match a server name by multiple domain matchers. Each domain, exact or
37
+ // wildcard, must appear at most once across all the domain matchers.
38
+ //
39
+ // The server name will be matched against all wildcard domains starting from
40
+ // the longest suffix, i.e. ``www.example.com`` input will be first matched
41
+ // against ``www.example.com``, then ``*.example.com``, then ``*.com``, then
42
+ // ``*``, until the associated matcher action accepts the input. Note that
43
+ // wildcards must be on a dot border, and values like ``*w.example.com`` are
44
+ // invalid.
45
+ repeated DomainMatcher domain_matchers = 1;
46
+ }
@@ -0,0 +1,23 @@
1
+ syntax = "proto3";
2
+
3
+ package xds.type.matcher.v3;
4
+
5
+ option java_package = "com.github.xds.type.matcher.v3";
6
+ option java_outer_classname = "HttpInputsProto";
7
+ option java_multiple_files = true;
8
+ option go_package = "github.com/cncf/xds/go/xds/type/matcher/v3";
9
+
10
+ // [#protodoc-title: Common HTTP Inputs]
11
+
12
+ // Specifies that matching should be performed on the set of :ref:`HTTP attributes
13
+ // <arch_overview_attributes>`.
14
+ //
15
+ // The attributes will be exposed via `Common Expression Language
16
+ // <https://github.com/google/cel-spec>`_ runtime to associated CEL matcher.
17
+ //
18
+ // Refer to :ref:`Unified Matcher API <envoy_v3_api_msg_.xds.type.matcher.v3.Matcher>` documentation
19
+ // for usage details.
20
+ //
21
+ // [#comment: envoy.matching.inputs.cel_data_input]
22
+ message HttpAttributesCelMatchInput {
23
+ }