diff --git a/Gopkg.lock b/Gopkg.lock index f4b7d4682bf4..4f2c72f87a6d 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -323,7 +323,7 @@ version = "v2.6.0" [[projects]] - digest = "1:0eccf960582d063e2835e55697536a14d479a4e7c4c785504021d56b938c22a9" + digest = "1:cd72afc3a00653fbd8b3e64169e4e444641dc1e0077df43aa41a5986f46ec0f6" name = "github.com/envoyproxy/go-control-plane" packages = [ "envoy/admin/v2alpha", @@ -343,6 +343,7 @@ "envoy/config/filter/http/rbac/v2", "envoy/config/filter/network/http_connection_manager/v2", "envoy/config/filter/network/mongo_proxy/v2", + "envoy/config/filter/network/mysql_proxy/v1alpha1", "envoy/config/filter/network/rbac/v2", "envoy/config/filter/network/redis_proxy/v2", "envoy/config/filter/network/tcp_proxy/v2", @@ -361,8 +362,8 @@ "pkg/util", ] pruneopts = "T" - revision = "8a91fb26f4e6553d2e21fa76e07d33b93a4f66e7" - version = "v0.6.6" + revision = "eb553e72ac8724721a99ed85fcb116467c7a2bac" + version = "v0.6.7" [[projects]] digest = "1:ad32dc29f37281bacb5dcedff17c9461dc1739dc8a5f63a71ab491c6e92edf8d" @@ -543,10 +544,11 @@ revision = "4030bb1f1f0c35b30ca7009e9ebd06849dd45306" [[projects]] - digest = "1:2e3c336fc7fde5c984d2841455a658a6d626450b1754a854b3b32e7a8f49a07a" + digest = "1:d2754cafcab0d22c13541618a8029a70a8959eb3525ff201fe971637e2274cd0" name = "github.com/google/go-cmp" packages = [ "cmp", + "cmp/cmpopts", "cmp/internal/diff", "cmp/internal/function", "cmp/internal/value", @@ -1450,7 +1452,7 @@ [[projects]] branch = "master" - digest = "1:6cd4b1649695991e9b76b0db6bc3fb3f97b951992b16da2fa53991070be11410" + digest = "1:95537015f7ca5a9c4be766141b18bd9bf262ea0c247f47f58a8b7bb1bc368d46" name = "google.golang.org/api" packages = [ "cloudtrace/v1", @@ -1462,7 +1464,6 @@ "iterator", "monitoring/v3", "option", - "servicecontrol/v1", "support/bundler", "transport", "transport/grpc", @@ -1625,7 +1626,7 @@ [[projects]] branch = "release-1.1" - digest = "1:0c781a65425b185d8342d37b1a582f16059f927c50f54910aa8e42a2b00099f7" + digest = "1:c1736bb847e6cfe63a7faf4a9bedace28fba0559090a6330a47b4b4d5fda036c" name = "istio.io/api" packages = [ "authentication/v1alpha1", @@ -1641,7 +1642,7 @@ "rbac/v1alpha1", ] pruneopts = "T" - revision = "aec9db9d9a57faf688b4d5606fddede85d4d3855" + revision = "0dd68ef13c1e9838fa80e8f7457e4950bd10a009" [[projects]] branch = "release-1.11" @@ -2024,6 +2025,7 @@ "github.com/envoyproxy/go-control-plane/envoy/config/filter/http/rbac/v2", "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2", "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mongo_proxy/v2", + "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mysql_proxy/v1alpha1", "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/rbac/v2", "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/redis_proxy/v2", "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2", @@ -2057,6 +2059,7 @@ "github.com/golang/protobuf/ptypes/wrappers", "github.com/golang/sync/errgroup", "github.com/google/go-cmp/cmp", + "github.com/google/go-cmp/cmp/cmpopts", "github.com/google/go-github/github", "github.com/google/uuid", "github.com/googleapis/gax-go", @@ -2080,7 +2083,6 @@ "github.com/opentracing/opentracing-go/ext", "github.com/opentracing/opentracing-go/log", "github.com/opentracing/opentracing-go/mocktracer", - "github.com/pborman/uuid", "github.com/pkg/errors", "github.com/pmezard/go-difflib/difflib", "github.com/prometheus/client_golang/api", @@ -2122,16 +2124,13 @@ "golang.org/x/net/context/ctxhttp", "golang.org/x/net/idna", "golang.org/x/net/publicsuffix", - "golang.org/x/oauth2", "golang.org/x/oauth2/google", "golang.org/x/time/rate", "golang.org/x/tools/imports", "google.golang.org/api/cloudtrace/v1", - "google.golang.org/api/googleapi", "google.golang.org/api/iterator", "google.golang.org/api/monitoring/v3", "google.golang.org/api/option", - "google.golang.org/api/servicecontrol/v1", "google.golang.org/genproto/googleapis/api/distribution", "google.golang.org/genproto/googleapis/api/label", "google.golang.org/genproto/googleapis/api/metric", @@ -2185,6 +2184,7 @@ "k8s.io/apimachinery/pkg/runtime", "k8s.io/apimachinery/pkg/runtime/schema", "k8s.io/apimachinery/pkg/runtime/serializer", + "k8s.io/apimachinery/pkg/runtime/serializer/json", "k8s.io/apimachinery/pkg/types", "k8s.io/apimachinery/pkg/util/intstr", "k8s.io/apimachinery/pkg/util/runtime", diff --git a/Gopkg.toml b/Gopkg.toml index 103f61358b27..9a3b940cefc0 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -111,7 +111,7 @@ ignored = [ [[constraint]] name = "github.com/envoyproxy/go-control-plane" - version = "^0.6.3" + version = "^0.6.7" [[constraint]] name = "github.com/fluent/fluent-logger-golang" @@ -209,10 +209,6 @@ ignored = [ name = "github.com/opentracing/opentracing-go" version = "1.0.2" -[[constraint]] - name = "github.com/pborman/uuid" - version = "1.1.0" - [[constraint]] name = "github.com/pmezard/go-difflib" version = "1.0.0" diff --git a/Makefile b/Makefile index 515fd5aac2ad..095130c1b025 100644 --- a/Makefile +++ b/Makefile @@ -233,8 +233,8 @@ ${ISTIO_BIN}/have_go_$(GO_VERSION_REQUIRED): # Ensure expected GOPATH setup .PHONY: check-tree check-tree: - @if [ "$(ISTIO_GO)" != "$(GO_TOP)/src/istio.io/istio" ]; then \ - echo Not building in expected path \'GOPATH/src/istio.io/istio\'. Make sure to clone Istio into that path. Istio root=$(ISTIO_GO), GO_TOP=$(GO_TOP) ; \ + @if [ ! "$(ISTIO_GO)" -ef "$(GO_TOP)/src/istio.io/istio" ]; then \ + echo Not building in expected path \'GOPATH/src/istio.io/istio\'. Make sure to clone Istio into that path. Istio root="$(ISTIO_GO)", GO_TOP="$(GO_TOP)" ; \ exit 1; fi # Downloads envoy, based on the SHA defined in the base pilot Dockerfile diff --git a/bin/codecov.sh b/bin/codecov.sh index 1905a6e94f51..d234cd7e3989 100755 --- a/bin/codecov.sh +++ b/bin/codecov.sh @@ -47,6 +47,7 @@ function cleanup() { trap cleanup EXIT # Setup environment needed by some tests. +make sync make localTestEnv # coverage test needs to run one package per command. diff --git a/bin/codecov_diff.sh b/bin/codecov_diff.sh index a6382ec8c0a4..320260ca75b6 100755 --- a/bin/codecov_diff.sh +++ b/bin/codecov_diff.sh @@ -47,6 +47,7 @@ if [[ -n "${CIRCLE_PR_NUMBER:-}" ]]; then go get -u istio.io/test-infra/toolbox/githubctl BASE_SHA=$("${GOPATH}"/bin/githubctl --token_file="${TMP_GITHUB_TOKEN}" --op=getBaseSHA --repo=istio --pr_num="${CIRCLE_PR_NUMBER}") + git reset HEAD --hard git clean -f -d git checkout "${BASE_SHA}" @@ -56,6 +57,7 @@ if [[ -n "${CIRCLE_PR_NUMBER:-}" ]]; then OUT_DIR="${BASELINE_PATH}" MAXPROCS="${MAXPROCS:-}" CODECOV_SKIP="${CODECOV_SKIP:-}" ./bin/codecov.sh # Get back to the PR head + git reset HEAD --hard git clean -f -d git checkout "${CIRCLE_SHA1}" diff --git a/codecov.threshold b/codecov.threshold index 2c6edc4e5bd4..16a86b0bdc62 100644 --- a/codecov.threshold +++ b/codecov.threshold @@ -21,15 +21,18 @@ istio.io/istio/pilot/pkg/config/memory/monitor.go=30 istio.io/istio/pilot/pkg/proxy/envoy/v2=10 istio.io/istio/pilot/pkg/serviceregistry/consul/monitor.go=20 istio.io/istio/pkg/mcp/creds/watcher.go=100 -istio.io/istio/pkg/test=100 -istio.io/istio/security/proto=100 +istio.io/istio/pkg/mcp/source/source.go=90 istio.io/istio/security/pkg/nodeagent=15 +# Disable codecov check for testing and proto packages istio.io/istio/galley/pkg/testing=100 +istio.io/istio/pkg/test=100 +istio.io/istio/security/proto=100 +istio.io/istio/tests=100 +istio.io/istio/mixer/pkg/adapter/test=100 # Temporary until integ tests are restored istio.io/istio/pilot/pkg/networking/plugin=50 istio.io/istio/galley/pkg/runtime=30 -istio.io/istio/galley/pkg/kube/converter/legacy/legacymixer.pb.go=10 istio.io/istio/galley/pkg/meshconfig/cache.go=100 istio.io/istio/pkg/mcp/server/monitoring.go=50 istio.io/istio/pilot/pkg/model/authentication.go=20 diff --git a/galley/cmd/galley/cmd/root.go b/galley/cmd/galley/cmd/root.go index 17aaacf5409c..101d65a00dd0 100644 --- a/galley/cmd/galley/cmd/root.go +++ b/galley/cmd/galley/cmd/root.go @@ -148,6 +148,8 @@ func GetRootCmd(args []string) *cobra.Command { "DNS domain suffix") rootCmd.PersistentFlags().BoolVar(&serverArgs.DisableResourceReadyCheck, "disableResourceReadyCheck", serverArgs.DisableResourceReadyCheck, "Disable resource readiness checks. This allows Galley to start if not all resource types are supported") + rootCmd.PersistentFlags().StringSliceVar(&serverArgs.ExcludedResourceKinds, "excludedResourceKinds", + serverArgs.ExcludedResourceKinds, "Comma-separated list of resource kinds that should not generate source events") serverArgs.IntrospectionOptions.AttachCobraFlags(rootCmd) diff --git a/galley/docker/Dockerfile.galley b/galley/docker/Dockerfile.galley index cf92cfa74319..d706901d2a18 100644 --- a/galley/docker/Dockerfile.galley +++ b/galley/docker/Dockerfile.galley @@ -1,3 +1,3 @@ -FROM scratch +FROM istionightly/base_debug ADD galley /usr/local/bin/ ENTRYPOINT ["/usr/local/bin/galley"] diff --git a/galley/pkg/metadata/kube/types.go b/galley/pkg/metadata/kube/types.go index 0a12e45bd6e0..16e98830e286 100644 --- a/galley/pkg/metadata/kube/types.go +++ b/galley/pkg/metadata/kube/types.go @@ -336,28 +336,6 @@ func init() { Converter: converter.Get("identity"), }) - b.Add(schema.ResourceSpec{ - Kind: "servicecontrolreport", - ListKind: "servicecontrolreportList", - Singular: "servicecontrolreport", - Plural: "servicecontrolreports", - Version: "v1alpha2", - Group: "config.istio.io", - Target: metadata.Types.Get("istio/config/v1alpha2/legacy/servicecontrolreports"), - Converter: converter.Get("identity"), - }) - - b.Add(schema.ResourceSpec{ - Kind: "servicecontrol", - ListKind: "servicecontrolList", - Singular: "servicecontrol", - Plural: "servicecontrols", - Version: "v1alpha2", - Group: "config.istio.io", - Target: metadata.Types.Get("istio/config/v1alpha2/legacy/servicecontrols"), - Converter: converter.Get("identity"), - }) - b.Add(schema.ResourceSpec{ Kind: "signalfx", ListKind: "signalfxList", @@ -611,6 +589,17 @@ func init() { Converter: converter.Get("identity"), }) + b.Add(schema.ResourceSpec{ + Kind: "Endpoints", + ListKind: "EndpointsList", + Singular: "endpoints", + Plural: "endpoints", + Version: "v1", + Group: "", + Target: metadata.Types.Get("k8s/core/v1/endpoints"), + Converter: converter.Get("identity"), + }) + b.Add(schema.ResourceSpec{ Kind: "Node", ListKind: "NodeList", diff --git a/galley/pkg/metadata/types.go b/galley/pkg/metadata/types.go index bfcf012d3bbc..18f744a661d5 100644 --- a/galley/pkg/metadata/types.go +++ b/galley/pkg/metadata/types.go @@ -127,12 +127,6 @@ var ( // Reportnothing metadata Reportnothing resource.Info - // Servicecontrolreport metadata - Servicecontrolreport resource.Info - - // Servicecontrol metadata - Servicecontrol resource.Info - // Signalfx metadata Signalfx resource.Info @@ -202,6 +196,9 @@ var ( // ServiceRole metadata ServiceRole resource.Info + // Endpoints metadata + Endpoints resource.Info + // Node metadata Node resource.Info @@ -305,12 +302,6 @@ func init() { Reportnothing = b.Register( "istio/config/v1alpha2/legacy/reportnothings", "type.googleapis.com/type.googleapis.com/google.protobuf.Struct") - Servicecontrolreport = b.Register( - "istio/config/v1alpha2/legacy/servicecontrolreports", - "type.googleapis.com/type.googleapis.com/google.protobuf.Struct") - Servicecontrol = b.Register( - "istio/config/v1alpha2/legacy/servicecontrols", - "type.googleapis.com/type.googleapis.com/google.protobuf.Struct") Signalfx = b.Register( "istio/config/v1alpha2/legacy/signalfxs", "type.googleapis.com/type.googleapis.com/google.protobuf.Struct") @@ -380,12 +371,15 @@ func init() { ServiceRole = b.Register( "istio/rbac/v1alpha1/serviceroles", "type.googleapis.com/istio.rbac.v1alpha1.ServiceRole") + Endpoints = b.Register( + "k8s/core/v1/endpoints", + "type.googleapis.com/k8s.io.api.core.v1.Endpoints") Node = b.Register( "k8s/core/v1/nodes", "type.googleapis.com/k8s.io.api.core.v1.NodeSpec") Pod = b.Register( "k8s/core/v1/pods", - "type.googleapis.com/k8s.io.api.core.v1.PodSpec") + "type.googleapis.com/k8s.io.api.core.v1.Pod") Service = b.Register( "k8s/core/v1/services", "type.googleapis.com/k8s.io.api.core.v1.ServiceSpec") diff --git a/galley/pkg/runtime/processing/dispatcher.go b/galley/pkg/runtime/processing/dispatcher.go new file mode 100644 index 000000000000..b5fa9d660191 --- /dev/null +++ b/galley/pkg/runtime/processing/dispatcher.go @@ -0,0 +1,70 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain accumulator copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package processing + +import ( + "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/pkg/log" +) + +var scope = log.RegisterScope("processing", "Galley data processing", 0) + +// Dispatcher is a Handler that can dispatch events to other Handlers, based on Collection. +type Dispatcher struct { + handlers map[resource.Collection][]Handler +} + +var _ Handler = &Dispatcher{} + +// Handle implements Handler +func (d *Dispatcher) Handle(e resource.Event) { + handlers, found := d.handlers[e.Entry.ID.Collection] + if !found { + scope.Warnf("Unhandled resource event: %v", e) + return + } + + for _, h := range handlers { + h.Handle(e) + } +} + +// DispatcherBuilder builds Dispatchers +type DispatcherBuilder struct { + handlers map[resource.Collection][]Handler +} + +// NewDispatcherBuilder returns a new dispatcher dispatcher +func NewDispatcherBuilder() *DispatcherBuilder { + return &DispatcherBuilder{ + handlers: make(map[resource.Collection][]Handler), + } +} + +// Add a new handler for the given Collection +func (d *DispatcherBuilder) Add(t resource.Collection, h Handler) { + handlers := d.handlers[t] + handlers = append(handlers, h) + d.handlers[t] = handlers +} + +// Build a Dispatcher +func (d *DispatcherBuilder) Build() *Dispatcher { + r := &Dispatcher{ + handlers: d.handlers, + } + d.handlers = nil + return r +} diff --git a/galley/pkg/runtime/processing/dispatcher_test.go b/galley/pkg/runtime/processing/dispatcher_test.go new file mode 100644 index 000000000000..0e04da74ccbd --- /dev/null +++ b/galley/pkg/runtime/processing/dispatcher_test.go @@ -0,0 +1,77 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package processing_test + +import ( + "testing" + + "istio.io/istio/galley/pkg/runtime/processing" + "istio.io/istio/galley/pkg/runtime/resource" +) + +func TestDispatcher_Handle(t *testing.T) { + b := processing.NewDispatcherBuilder() + + fh1 := &fakeHandler{} + fh2 := &fakeHandler{} + fh3 := &fakeHandler{} + b.Add(emptyInfo.Collection, fh1) + b.Add(emptyInfo.Collection, fh2) + b.Add(structInfo.Collection, fh3) + d := b.Build() + + d.Handle(addRes1V1()) + d.Handle(addRes2V1()) + if len(fh1.evts) != 2 { + t.Fatalf("unexpected events: %v", fh1.evts) + } + if len(fh2.evts) != 2 { + t.Fatalf("unexpected events: %v", fh2.evts) + } + + if len(fh3.evts) != 0 { + t.Fatalf("unexpected events: %v", fh3.evts) + } + + d.Handle(addRes3V1()) + if len(fh1.evts) != 2 { + t.Fatalf("unexpected events: %v", fh1.evts) + } + if len(fh2.evts) != 2 { + t.Fatalf("unexpected events: %v", fh2.evts) + } + + if len(fh3.evts) != 1 { + t.Fatalf("unexpected events: %v", fh3.evts) + } +} + +func TestDispatcher_UnhandledEvent(t *testing.T) { + b := processing.NewDispatcherBuilder() + d := b.Build() + + d.Handle(addRes1V1()) + // no panic +} + +type fakeHandler struct { + evts []resource.Event +} + +var _ processing.Handler = &fakeHandler{} + +func (f *fakeHandler) Handle(e resource.Event) { + f.evts = append(f.evts, e) +} diff --git a/galley/pkg/runtime/processing/handler.go b/galley/pkg/runtime/processing/handler.go new file mode 100644 index 000000000000..4bedda3fce35 --- /dev/null +++ b/galley/pkg/runtime/processing/handler.go @@ -0,0 +1,41 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain accumulator copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package processing + +import ( + "istio.io/istio/galley/pkg/runtime/resource" +) + +// Handler handles an incoming resource event. +type Handler interface { + Handle(e resource.Event) +} + +// HandlerFromFn returns a new Handler, based on the Handler function. +func HandlerFromFn(fn func(e resource.Event)) Handler { + return &fnHandler{ + fn: fn, + } +} + +var _ Handler = &fnHandler{} + +type fnHandler struct { + fn func(e resource.Event) +} + +func (h *fnHandler) Handle(e resource.Event) { + h.fn(e) +} diff --git a/galley/pkg/runtime/processing/handler_test.go b/galley/pkg/runtime/processing/handler_test.go new file mode 100644 index 000000000000..f9ad2e6470a3 --- /dev/null +++ b/galley/pkg/runtime/processing/handler_test.go @@ -0,0 +1,38 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package processing_test + +import ( + "reflect" + "testing" + + "istio.io/istio/galley/pkg/runtime/processing" + "istio.io/istio/galley/pkg/runtime/resource" +) + +func TestHandlerFromFn(t *testing.T) { + var received resource.Event + h := processing.HandlerFromFn(func(e resource.Event) { + received = e + }) + + sent := updateRes1V2() + + h.Handle(sent) + + if !reflect.DeepEqual(received, sent) { + t.Fatalf("Mismatch: got:%v, expected:%v", received, sent) + } +} diff --git a/galley/pkg/runtime/processing/testdata_test.go b/galley/pkg/runtime/processing/testdata_test.go new file mode 100644 index 000000000000..3549ed4af08d --- /dev/null +++ b/galley/pkg/runtime/processing/testdata_test.go @@ -0,0 +1,121 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package processing_test + +import ( + "time" + + "github.com/gogo/protobuf/types" + + "istio.io/istio/galley/pkg/runtime/resource" +) + +var emptyInfo resource.Info +var structInfo resource.Info + +func init() { + b := resource.NewSchemaBuilder() + emptyInfo = b.Register("empty", "type.googleapis.com/google.protobuf.Empty") + structInfo = b.Register("struct", "type.googleapis.com/google.protobuf.Struct") + _ = b.Build() +} + +func res1V1() resource.Entry { + return resource.Entry{ + ID: resource.VersionedKey{ + Version: "v1", + Key: resource.Key{ + Collection: emptyInfo.Collection, + FullName: resource.FullNameFromNamespaceAndName("ns1", "res1"), + }, + }, + Metadata: resource.Metadata{ + CreateTime: time.Unix(1, 1), + }, + Item: &types.Empty{}, + } +} + +func res2V1() resource.Entry { + return resource.Entry{ + ID: resource.VersionedKey{ + Version: "v1", + Key: resource.Key{ + Collection: emptyInfo.Collection, + FullName: resource.FullNameFromNamespaceAndName("ns1", "res2"), + }, + }, + Metadata: resource.Metadata{ + CreateTime: time.Unix(2, 1), + }, + Item: &types.Empty{}, + } +} + +func res3V1() resource.Entry { + return resource.Entry{ + ID: resource.VersionedKey{ + Version: "v1", + Key: resource.Key{ + Collection: structInfo.Collection, + FullName: resource.FullNameFromNamespaceAndName("ns2", "res1"), + }, + }, + Metadata: resource.Metadata{ + CreateTime: time.Unix(3, 1), + }, + Item: &types.Empty{}, + } +} + +func addRes1V1() resource.Event { + return resource.Event{ + Kind: resource.Added, + Entry: res1V1(), + } +} + +func addRes2V1() resource.Event { + return resource.Event{ + Kind: resource.Added, + Entry: res2V1(), + } +} + +func addRes3V1() resource.Event { + return resource.Event{ + Kind: resource.Added, + Entry: res3V1(), + } +} + +func updateRes1V2() resource.Event { + return resource.Event{ + Kind: resource.Updated, + Entry: resource.Entry{ + ID: resource.VersionedKey{ + Version: "v2", + Key: resource.Key{ + Collection: emptyInfo.Collection, + FullName: resource.FullNameFromNamespaceAndName("ns1", "res1"), + }, + }, + Metadata: resource.Metadata{ + CreateTime: time.Unix(1, 2), + }, + Item: &types.Empty{}, + }, + } +} diff --git a/galley/pkg/runtime/processor.go b/galley/pkg/runtime/processor.go index 32f66948da86..86ebe45bb507 100644 --- a/galley/pkg/runtime/processor.go +++ b/galley/pkg/runtime/processor.go @@ -15,14 +15,15 @@ package runtime import ( - "github.com/pkg/errors" - "time" + "github.com/pkg/errors" + "istio.io/istio/galley/pkg/metadata" + "istio.io/istio/galley/pkg/runtime/processing" "istio.io/istio/galley/pkg/runtime/resource" "istio.io/istio/pkg/log" - "istio.io/istio/pkg/mcp/snapshot" + sn "istio.io/istio/pkg/mcp/snapshot" ) var scope = log.RegisterScope("runtime", "Galley runtime", 0) @@ -33,26 +34,15 @@ type Processor struct { // source interface for retrieving the events from. source Source - // distributor interface for publishing config snapshots to. - distributor Distributor - - // configuration for the processor - config *Config - - // The heuristic publishing strategy - strategy *publishingStrategy - - schema *resource.Schema - // events channel that was obtained from source events chan resource.Event + // handler for events. + handler processing.Handler + // channel that gets closed during Shutdown. done chan struct{} - // indicates that the State is built-up enough to warrant distribution. - distribute bool - // channel that signals the background process as being stopped. stopped chan struct{} @@ -62,42 +52,32 @@ type Processor struct { // hook that gets called after each event processing. Useful for testing. postProcessHook postProcessHookFn - // pendingEvents counts the number of events awaiting publishing. - pendingEvents int64 - // lastEventTime records the last time an event was received. lastEventTime time.Time - - // lastSnapshotTime records the last time a snapshot was published. - lastSnapshotTime time.Time } type postProcessHookFn func() // NewProcessor returns a new instance of a Processor func NewProcessor(src Source, distributor Distributor, cfg *Config) *Processor { - return newProcessor(src, distributor, cfg, newPublishingStrategyWithDefaults(), metadata.Types, nil) + state := newState(sn.DefaultGroup, metadata.Types, cfg, newPublishingStrategyWithDefaults(), distributor) + return newProcessor(state, src, nil) } func newProcessor( + state *State, src Source, - distributor Distributor, - cfg *Config, - strategy *publishingStrategy, - schema *resource.Schema, postProcessHook postProcessHookFn) *Processor { + now := time.Now() return &Processor{ - source: src, - distributor: distributor, - config: cfg, - strategy: strategy, - schema: schema, - postProcessHook: postProcessHook, - done: make(chan struct{}), - stopped: make(chan struct{}), - lastEventTime: time.Now(), - lastSnapshotTime: time.Now(), + handler: buildDispatcher(state), + state: state, + source: src, + postProcessHook: postProcessHook, + done: make(chan struct{}), + stopped: make(chan struct{}), + lastEventTime: now, } } @@ -111,16 +91,16 @@ func (p *Processor) Start() error { return errors.New("already started") } - p.distribute = false - - events, err := p.source.Start() + events := make(chan resource.Event, 1024) + err := p.source.Start(func(e resource.Event) { + events <- e + }) if err != nil { scope.Warnf("Unable to Start source: %v", err) return err } p.events = events - p.state = newState(p.schema, p.config) go p.process() @@ -140,11 +120,10 @@ func (p *Processor) Stop() { close(p.done) <-p.stopped + close(p.events) p.events = nil p.done = nil - p.state = nil - p.distribute = false } func (p *Processor) process() { @@ -156,15 +135,11 @@ loop: // Incoming events are received through p.events case e := <-p.events: - scope.Debugf("Processor.process: event: %v", e) - if p.processEvent(e) { - scope.Debugf("Processor.process: event: %v, signaling onChange", e) - p.strategy.onChange() - } + p.processEvent(e) - case <-p.strategy.publish: + case <-p.state.strategy.publish: scope.Debug("Processor.process: publish") - p.publish() + p.state.publish() // p.done signals the graceful Shutdown of the processor. case <-p.done: @@ -177,33 +152,36 @@ loop: } } - p.strategy.reset() + p.state.close() close(p.stopped) scope.Debugf("Process.process: Exiting process loop") } -func (p *Processor) processEvent(e resource.Event) bool { +func (p *Processor) processEvent(e resource.Event) { scope.Debugf("Incoming source event: %v", e) - now := time.Now() - recordProcessorEventProcessed(now.Sub(p.lastEventTime)) - p.lastEventTime = now - p.pendingEvents++ + p.recordEvent() if e.Kind == resource.FullSync { scope.Infof("Synchronization is complete, starting distribution.") - p.distribute = true - return true + p.state.onFullSync() + return } - return p.state.apply(e) && p.distribute + p.handler.Handle(e) } -func (p *Processor) publish() { +func (p *Processor) recordEvent() { now := time.Now() - recordProcessorSnapshotPublished(p.pendingEvents, now.Sub(p.lastSnapshotTime)) - p.lastSnapshotTime = now - sn := p.state.buildSnapshot() + recordProcessorEventProcessed(now.Sub(p.lastEventTime)) + p.lastEventTime = now +} - p.distributor.SetSnapshot(snapshot.DefaultGroup, sn) - p.pendingEvents = 0 +func buildDispatcher(states ...*State) *processing.Dispatcher { + b := processing.NewDispatcherBuilder() + for _, state := range states { + for _, spec := range state.schema.All() { + b.Add(spec.Collection, state) + } + } + return b.Build() } diff --git a/galley/pkg/runtime/processor_test.go b/galley/pkg/runtime/processor_test.go index 50f6cd7169f8..06e693446482 100644 --- a/galley/pkg/runtime/processor_test.go +++ b/galley/pkg/runtime/processor_test.go @@ -23,7 +23,6 @@ import ( "github.com/gogo/protobuf/types" "istio.io/istio/galley/pkg/meshconfig" - "istio.io/istio/galley/pkg/runtime/resource" "istio.io/istio/pkg/mcp/snapshot" ) @@ -60,8 +59,8 @@ func TestProcessor_Start(t *testing.T) { type erroneousSource struct{} -func (e *erroneousSource) Start() (chan resource.Event, error) { - return nil, errors.New("cheese not found") +func (e *erroneousSource) Start(_ resource.EventHandler) error { + return errors.New("cheese not found") } func (e *erroneousSource) Stop() {} @@ -82,7 +81,7 @@ func TestProcessor_Stop(t *testing.T) { strategy := newPublishingStrategyWithDefaults() cfg := &Config{Mesh: meshconfig.NewInMemory()} - p := newProcessor(src, distributor, cfg, strategy, testSchema, nil) + p := newProcessor(newState(snapshot.DefaultGroup, testSchema, cfg, strategy, distributor), src, nil) err := p.Start() if err != nil { @@ -102,7 +101,7 @@ func TestProcessor_EventAccumulation(t *testing.T) { strategy := newPublishingStrategy(time.Hour, time.Hour, time.Millisecond) cfg := &Config{Mesh: meshconfig.NewInMemory()} - p := newProcessor(src, distributor, cfg, strategy, testSchema, nil) + p := newProcessor(newState(snapshot.DefaultGroup, testSchema, cfg, strategy, distributor), src, nil) err := p.Start() if err != nil { t.Fatalf("unexpected error: %v", err) @@ -128,7 +127,7 @@ func TestProcessor_EventAccumulation_WithFullSync(t *testing.T) { strategy := newPublishingStrategy(time.Hour, time.Hour, time.Millisecond) cfg := &Config{Mesh: meshconfig.NewInMemory()} - p := newProcessor(src, distributor, cfg, strategy, testSchema, nil) + p := newProcessor(newState(snapshot.DefaultGroup, testSchema, cfg, strategy, distributor), src, nil) err := p.Start() if err != nil { t.Fatalf("unexpected error: %v", err) @@ -159,7 +158,7 @@ func TestProcessor_Publishing(t *testing.T) { } processCallCount.Add(3) // 1 for add, 1 for sync, 1 for publish trigger - p := newProcessor(src, distributor, cfg, strategy, testSchema, hookFn) + p := newProcessor(newState(snapshot.DefaultGroup, testSchema, cfg, strategy, distributor), src, hookFn) err := p.Start() if err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/galley/pkg/runtime/resource/event.go b/galley/pkg/runtime/resource/event.go index 0d203ff9524a..a09e2892c5d2 100644 --- a/galley/pkg/runtime/resource/event.go +++ b/galley/pkg/runtime/resource/event.go @@ -39,6 +39,11 @@ const ( FullSync ) +var ( + // FullSyncEvent is a special event representing a FullSync. + FullSyncEvent = Event{Kind: FullSync} +) + // Event represents a change that occurred against a resource in the source config system. type Event struct { Kind EventKind @@ -47,6 +52,9 @@ type Event struct { Entry Entry } +// EventHandler function. +type EventHandler func(event Event) + // String implements Stringer.String func (k EventKind) String() string { switch k { diff --git a/galley/pkg/runtime/source.go b/galley/pkg/runtime/source.go index 585d70decd63..20af85a6544e 100644 --- a/galley/pkg/runtime/source.go +++ b/galley/pkg/runtime/source.go @@ -25,10 +25,9 @@ import ( // Source to be implemented by a source configuration provider. type Source interface { - // Start the source interface. This returns a channel that the runtime will listen to for configuration - // change events. The initial state of the underlying config store should be reflected as a series of - // Added events, followed by a FullSync event. - Start() (chan resource.Event, error) + // Start the source interface, provided the EventHandler. The initial state of the underlying + // config store should be reflected as a series of Added events, followed by a FullSync event. + Start(handler resource.EventHandler) error // Stop the source interface. Upon return from this method, the channel should not be accumulating any // more events. @@ -41,7 +40,7 @@ type InMemorySource struct { items map[resource.Key]resource.Entry - ch chan resource.Event + handler resource.EventHandler versionCtr int64 } @@ -57,26 +56,26 @@ func NewInMemorySource() *InMemorySource { } // Start implements source.Interface.Start -func (s *InMemorySource) Start() (chan resource.Event, error) { +func (s *InMemorySource) Start(handler resource.EventHandler) error { s.stateLock.Lock() defer s.stateLock.Unlock() - if s.ch != nil { - return nil, fmt.Errorf("already started") + if s.handler != nil { + return fmt.Errorf("already started") } - s.ch = make(chan resource.Event, 1024) + s.handler = handler // publish current items for _, item := range s.items { - s.ch <- resource.Event{Kind: resource.Added, Entry: resource.Entry{ + s.handler(resource.Event{Kind: resource.Added, Entry: resource.Entry{ ID: item.ID, Metadata: item.Metadata, Item: item.Item, - }} + }}) } - s.ch <- resource.Event{Kind: resource.FullSync} + s.handler(resource.FullSyncEvent) - return s.ch, nil + return nil } // Stop implements source.Interface.Stop @@ -84,12 +83,7 @@ func (s *InMemorySource) Stop() { s.stateLock.Lock() defer s.stateLock.Unlock() - if s.ch == nil { - return - } - - close(s.ch) - s.ch = nil + s.handler = nil } // Set the value in the in-memory store. @@ -107,12 +101,12 @@ func (s *InMemorySource) Set(k resource.Key, metadata resource.Metadata, item pr kind = resource.Updated } - if s.ch != nil { - s.ch <- resource.Event{Kind: kind, Entry: resource.Entry{ + if s.handler != nil { + s.handler(resource.Event{Kind: kind, Entry: resource.Entry{ ID: resource.VersionedKey{Key: k, Version: v}, Metadata: metadata, Item: item, - }} + }}) } } @@ -130,7 +124,15 @@ func (s *InMemorySource) Delete(k resource.Key) { delete(s.items, k) - s.ch <- resource.Event{Kind: resource.Deleted, Entry: resource.Entry{ID: resource.VersionedKey{Key: k, Version: v}}} + s.handler(resource.Event{ + Kind: resource.Deleted, + Entry: resource.Entry{ + ID: resource.VersionedKey{ + Key: k, + Version: v, + }, + }, + }) } // Get a value in the in-memory store. diff --git a/galley/pkg/runtime/source_test.go b/galley/pkg/runtime/source_test.go index 38dfba7cb1ed..94641cad9f7f 100644 --- a/galley/pkg/runtime/source_test.go +++ b/galley/pkg/runtime/source_test.go @@ -22,11 +22,13 @@ import ( "github.com/gogo/protobuf/types" "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/galley/pkg/testing/events" ) func TestInMemory_Start_Empty(t *testing.T) { i := NewInMemorySource() - ch, err := i.Start() + ch := make(chan resource.Event, 1024) + err := i.Start(events.ChannelHandler(ch)) if err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -45,8 +47,8 @@ func TestInMemory_Start_WithItem(t *testing.T) { fn := resource.FullNameFromNamespaceAndName("n1", "f1") i.Set(resource.Key{Collection: emptyInfo.Collection, FullName: fn}, resource.Metadata{}, &types.Empty{}) - ch, err := i.Start() - if err != nil { + ch := make(chan resource.Event, 1024) + if err := i.Start(events.ChannelHandler(ch)); err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -62,16 +64,17 @@ func TestInMemory_Start_WithItem(t *testing.T) { func TestInMemory_Start_DoubleStart(t *testing.T) { i := NewInMemorySource() - _, _ = i.Start() - _, err := i.Start() - if err == nil { + ch := make(chan resource.Event, 1024) + _ = i.Start(events.ChannelHandler(ch)) + if err := i.Start(events.ChannelHandler(ch)); err == nil { t.Fatal("should have returned error") } } func TestInMemory_Start_DoubleStop(t *testing.T) { i := NewInMemorySource() - _, _ = i.Start() + ch := make(chan resource.Event, 1024) + _ = i.Start(events.ChannelHandler(ch)) i.Stop() // should not panic i.Stop() @@ -79,8 +82,8 @@ func TestInMemory_Start_DoubleStop(t *testing.T) { func TestInMemory_Set(t *testing.T) { i := NewInMemorySource() - ch, err := i.Start() - if err != nil { + ch := make(chan resource.Event, 1024) + if err := i.Start(events.ChannelHandler(ch)); err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -102,8 +105,8 @@ func TestInMemory_Set(t *testing.T) { func TestInMemory_Delete(t *testing.T) { i := NewInMemorySource() - ch, err := i.Start() - if err != nil { + ch := make(chan resource.Event, 1024) + if err := i.Start(events.ChannelHandler(ch)); err != nil { t.Fatalf("Unexpected error: %v", err) } diff --git a/galley/pkg/runtime/state.go b/galley/pkg/runtime/state.go index 43926bd19093..acd89e7ed625 100644 --- a/galley/pkg/runtime/state.go +++ b/galley/pkg/runtime/state.go @@ -20,20 +20,29 @@ import ( "sort" "strings" "sync" + "time" "github.com/gogo/protobuf/types" mcp "istio.io/api/mcp/v1alpha1" "istio.io/istio/galley/pkg/metadata" "istio.io/istio/galley/pkg/runtime/conversions" + "istio.io/istio/galley/pkg/runtime/processing" "istio.io/istio/galley/pkg/runtime/resource" "istio.io/istio/pkg/mcp/snapshot" ) +var _ processing.Handler = &State{} + // State is the in-memory state of Galley. type State struct { + name string schema *resource.Schema + distribute bool + strategy *publishingStrategy + distributor Distributor + config *Config // version counter is a nonce that generates unique ids for each updated view of State. @@ -47,6 +56,12 @@ type State struct { ingressGWVersion int64 ingressVSVersion int64 lastIngressVersion int64 + + // pendingEvents counts the number of events awaiting publishing. + pendingEvents int64 + + // lastSnapshotTime records the last time a snapshot was published. + lastSnapshotTime time.Time } // per-resource-type State. @@ -58,11 +73,18 @@ type resourceTypeState struct { versions map[resource.FullName]resource.Version } -func newState(schema *resource.Schema, cfg *Config) *State { +func newState(name string, schema *resource.Schema, cfg *Config, strategy *publishingStrategy, + distributor Distributor) *State { + + now := time.Now() s := &State{ - schema: schema, - config: cfg, - entries: make(map[resource.Collection]*resourceTypeState), + name: name, + schema: schema, + strategy: strategy, + distributor: distributor, + config: cfg, + entries: make(map[resource.Collection]*resourceTypeState), + lastSnapshotTime: now, } // pre-populate state for all known types so that built snapshots @@ -77,10 +99,30 @@ func newState(schema *resource.Schema, cfg *Config) *State { return s } -func (s *State) apply(event resource.Event) bool { +func (s *State) close() { + s.strategy.reset() +} + +func (s *State) publish() { + now := time.Now() + recordProcessorSnapshotPublished(s.pendingEvents, now.Sub(s.lastSnapshotTime)) + s.lastSnapshotTime = now + sn := s.buildSnapshot() + + s.distributor.SetSnapshot(s.name, sn) + s.pendingEvents = 0 +} + +func (s *State) onFullSync() { + s.distribute = true + s.strategy.onChange() +} + +// Handle implements the processing.Handler interface. +func (s *State) Handle(event resource.Event) { pks, found := s.getResourceTypeState(event.Entry.ID.Collection) if !found { - return false + return } switch event.Kind { @@ -89,14 +131,14 @@ func (s *State) apply(event resource.Event) bool { // Check to see if the version has changed. if curVersion := pks.versions[event.Entry.ID.FullName]; curVersion == event.Entry.ID.Version { scope.Debugf("Received event for the current, known version: %v", event) - return false + return } // TODO: Check for content-wise equality entry, ok := s.toResource(event.Entry) if !ok { - return false + return } pks.entries[event.Entry.ID.FullName] = entry @@ -110,15 +152,17 @@ func (s *State) apply(event resource.Event) bool { default: scope.Errorf("Unknown event kind: %v", event.Kind) - return false + return } s.versionCounter++ pks.version = s.versionCounter scope.Debugf("In-memory state has changed:\n%v\n", s) - - return true + s.pendingEvents++ + if s.distribute { + s.strategy.onChange() + } } func (s *State) getResourceTypeState(name resource.Collection) (*resourceTypeState, bool) { diff --git a/galley/pkg/runtime/state_test.go b/galley/pkg/runtime/state_test.go index bdd0a0653d49..3f27c154b937 100644 --- a/galley/pkg/runtime/state_test.go +++ b/galley/pkg/runtime/state_test.go @@ -21,10 +21,10 @@ import ( "github.com/gogo/protobuf/types" - "istio.io/istio/galley/pkg/meshconfig" - mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/galley/pkg/meshconfig" "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/pkg/mcp/snapshot" ) var ( @@ -59,8 +59,16 @@ func checkCreateTime(e *mcp.Resource, want time.Time) error { return nil } +func TestStateName(t *testing.T) { + name := "testName" + s := newState(name, testSchema, cfg, newPublishingStrategyWithDefaults(), snapshot.New(snapshot.DefaultGroupIndex)) + if s.name != name { + t.Fatalf("incorrect name: expected %s, found %s", name, s.name) + } +} + func TestState_DefaultSnapshot(t *testing.T) { - s := newState(testSchema, cfg) + s := newTestState() sn := s.buildSnapshot() for _, collection := range []string{emptyInfo.Collection.String(), structInfo.Collection.String()} { @@ -86,8 +94,8 @@ func TestState_DefaultSnapshot(t *testing.T) { }, } - changed := s.apply(e) - if !changed { + s.Handle(e) + if s.pendingEvents != 1 { t.Fatal("calling apply should have changed state.") } @@ -106,7 +114,7 @@ func TestState_DefaultSnapshot(t *testing.T) { } func TestState_Apply_Update(t *testing.T) { - s := newState(testSchema, cfg) + s := newTestState() e := resource.Event{ Kind: resource.Added, @@ -122,8 +130,8 @@ func TestState_Apply_Update(t *testing.T) { }, } - changed := s.apply(e) - if !changed { + s.Handle(e) + if s.pendingEvents != 1 { t.Fatal("calling apply should have changed state.") } @@ -140,8 +148,8 @@ func TestState_Apply_Update(t *testing.T) { Item: &types.Any{}, }, } - changed = s.apply(e) - if !changed { + s.Handle(e) + if s.pendingEvents != 2 { t.Fatal("calling apply should have changed state.") } @@ -160,7 +168,7 @@ func TestState_Apply_Update(t *testing.T) { } func TestState_Apply_Update_SameVersion(t *testing.T) { - s := newState(testSchema, cfg) + s := newTestState() e := resource.Event{ Kind: resource.Added, @@ -176,8 +184,8 @@ func TestState_Apply_Update_SameVersion(t *testing.T) { }, } - changed := s.apply(e) - if !changed { + s.Handle(e) + if s.pendingEvents != 1 { t.Fatal("calling apply should have changed state.") } @@ -194,16 +202,16 @@ func TestState_Apply_Update_SameVersion(t *testing.T) { Item: &types.Any{}, }, } - s.apply(e) + s.Handle(e) - changed = s.apply(e) - if changed { + s.Handle(e) + if s.pendingEvents != 1 { t.Fatal("calling apply should not have changed state.") } } func TestState_Apply_Delete(t *testing.T) { - s := newState(testSchema, cfg) + s := newTestState() e := resource.Event{ Kind: resource.Added, @@ -213,8 +221,8 @@ func TestState_Apply_Delete(t *testing.T) { }, } - changed := s.apply(e) - if !changed { + s.Handle(e) + if s.pendingEvents != 1 { t.Fatal("calling apply should have changed state.") } @@ -224,10 +232,10 @@ func TestState_Apply_Delete(t *testing.T) { ID: resource.VersionedKey{Version: "v2", Key: resource.Key{Collection: emptyInfo.Collection, FullName: fn}}, }, } - s.apply(e) + s.Handle(e) - changed = s.apply(e) - if !changed { + s.Handle(e) + if s.pendingEvents != 3 { t.Fatal("calling apply should have changed state.") } @@ -239,7 +247,7 @@ func TestState_Apply_Delete(t *testing.T) { } func TestState_Apply_UnknownEventKind(t *testing.T) { - s := newState(testSchema, cfg) + s := newTestState() e := resource.Event{ Kind: resource.EventKind(42), @@ -248,8 +256,8 @@ func TestState_Apply_UnknownEventKind(t *testing.T) { Item: &types.Any{}, }, } - changed := s.apply(e) - if changed { + s.Handle(e) + if s.pendingEvents > 0 { t.Fatal("calling apply should not have changed state.") } @@ -261,7 +269,7 @@ func TestState_Apply_UnknownEventKind(t *testing.T) { } func TestState_Apply_BrokenProto(t *testing.T) { - s := newState(testSchema, cfg) + s := newTestState() e := resource.Event{ Kind: resource.Added, @@ -270,8 +278,8 @@ func TestState_Apply_BrokenProto(t *testing.T) { Item: nil, }, } - changed := s.apply(e) - if changed { + s.Handle(e) + if s.pendingEvents > 0 { t.Fatal("calling apply should not have changed state.") } @@ -283,7 +291,7 @@ func TestState_Apply_BrokenProto(t *testing.T) { } func TestState_String(t *testing.T) { - s := newState(testSchema, cfg) + s := newTestState() e := resource.Event{ Kind: resource.Added, @@ -292,8 +300,12 @@ func TestState_String(t *testing.T) { Item: nil, }, } - _ = s.apply(e) + s.Handle(e) // Should not crash _ = s.String() } + +func newTestState() *State { + return newState(snapshot.DefaultGroup, testSchema, cfg, newPublishingStrategyWithDefaults(), snapshot.New(snapshot.DefaultGroupIndex)) +} diff --git a/galley/pkg/server/args.go b/galley/pkg/server/args.go index 775d0b469203..9cd3d67ea3d6 100644 --- a/galley/pkg/server/args.go +++ b/galley/pkg/server/args.go @@ -19,6 +19,7 @@ import ( "fmt" "time" + "istio.io/istio/galley/pkg/source/kube/builtin" "istio.io/istio/pkg/ctrlz" "istio.io/istio/pkg/mcp/creds" ) @@ -69,6 +70,9 @@ type Args struct { // ConfigPath is the path for Galley specific config files ConfigPath string + // ExcludedResourceKinds is a list of resource kinds for which no source events will be triggered. + ExcludedResourceKinds []string + // MeshConfigFile is the path for mesh config MeshConfigFile string @@ -96,30 +100,40 @@ func DefaultArgs() *Args { ConfigPath: "", DomainSuffix: defaultDomainSuffix, DisableResourceReadyCheck: false, + ExcludedResourceKinds: defaultExcludedResourceKinds(), + } +} + +func defaultExcludedResourceKinds() []string { + resources := make([]string, 0) + for _, spec := range builtin.GetSchema().All() { + resources = append(resources, spec.Kind) } + return resources } // String produces a stringified version of the arguments for debugging. func (a *Args) String() string { buf := &bytes.Buffer{} - fmt.Fprintf(buf, "KubeConfig: %s\n", a.KubeConfig) - fmt.Fprintf(buf, "ResyncPeriod: %v\n", a.ResyncPeriod) - fmt.Fprintf(buf, "APIAddress: %s\n", a.APIAddress) - fmt.Fprintf(buf, "EnableGrpcTracing: %v\n", a.EnableGRPCTracing) - fmt.Fprintf(buf, "MaxReceivedMessageSize: %d\n", a.MaxReceivedMessageSize) - fmt.Fprintf(buf, "MaxConcurrentStreams: %d\n", a.MaxConcurrentStreams) - fmt.Fprintf(buf, "IntrospectionOptions: %+v\n", *a.IntrospectionOptions) - fmt.Fprintf(buf, "Insecure: %v\n", a.Insecure) - fmt.Fprintf(buf, "AccessListFile: %s\n", a.AccessListFile) - fmt.Fprintf(buf, "EnableServer: %v\n", a.EnableServer) - fmt.Fprintf(buf, "KeyFile: %s\n", a.CredentialOptions.KeyFile) - fmt.Fprintf(buf, "CertificateFile: %s\n", a.CredentialOptions.CertificateFile) - fmt.Fprintf(buf, "CACertificateFile: %s\n", a.CredentialOptions.CACertificateFile) - fmt.Fprintf(buf, "ConfigFilePath: %s\n", a.ConfigPath) - fmt.Fprintf(buf, "MeshConfigFile: %s\n", a.MeshConfigFile) - fmt.Fprintf(buf, "DomainSuffix: %s\n", a.DomainSuffix) - fmt.Fprintf(buf, "DisableResourceReadyCheck: %v\n", a.DisableResourceReadyCheck) + _, _ = fmt.Fprintf(buf, "KubeConfig: %s\n", a.KubeConfig) + _, _ = fmt.Fprintf(buf, "ResyncPeriod: %v\n", a.ResyncPeriod) + _, _ = fmt.Fprintf(buf, "APIAddress: %s\n", a.APIAddress) + _, _ = fmt.Fprintf(buf, "EnableGrpcTracing: %v\n", a.EnableGRPCTracing) + _, _ = fmt.Fprintf(buf, "MaxReceivedMessageSize: %d\n", a.MaxReceivedMessageSize) + _, _ = fmt.Fprintf(buf, "MaxConcurrentStreams: %d\n", a.MaxConcurrentStreams) + _, _ = fmt.Fprintf(buf, "IntrospectionOptions: %+v\n", *a.IntrospectionOptions) + _, _ = fmt.Fprintf(buf, "Insecure: %v\n", a.Insecure) + _, _ = fmt.Fprintf(buf, "AccessListFile: %s\n", a.AccessListFile) + _, _ = fmt.Fprintf(buf, "EnableServer: %v\n", a.EnableServer) + _, _ = fmt.Fprintf(buf, "KeyFile: %s\n", a.CredentialOptions.KeyFile) + _, _ = fmt.Fprintf(buf, "CertificateFile: %s\n", a.CredentialOptions.CertificateFile) + _, _ = fmt.Fprintf(buf, "CACertificateFile: %s\n", a.CredentialOptions.CACertificateFile) + _, _ = fmt.Fprintf(buf, "ConfigFilePath: %s\n", a.ConfigPath) + _, _ = fmt.Fprintf(buf, "MeshConfigFile: %s\n", a.MeshConfigFile) + _, _ = fmt.Fprintf(buf, "DomainSuffix: %s\n", a.DomainSuffix) + _, _ = fmt.Fprintf(buf, "DisableResourceReadyCheck: %v\n", a.DisableResourceReadyCheck) + _, _ = fmt.Fprintf(buf, "ExcludedResourceKinds: %v\n", a.ExcludedResourceKinds) return buf.String() } diff --git a/galley/pkg/server/server.go b/galley/pkg/server/server.go index 407e756b3710..cbc23846d918 100644 --- a/galley/pkg/server/server.go +++ b/galley/pkg/server/server.go @@ -18,9 +18,6 @@ import ( "errors" "fmt" "net" - "os" - "sort" - "strconv" "strings" "sync" "time" @@ -33,9 +30,9 @@ import ( kubeMeta "istio.io/istio/galley/pkg/metadata/kube" "istio.io/istio/galley/pkg/runtime" "istio.io/istio/galley/pkg/source/fs" + kubeSource "istio.io/istio/galley/pkg/source/kube" "istio.io/istio/galley/pkg/source/kube/client" - "istio.io/istio/galley/pkg/source/kube/dynamic" - kubeConverter "istio.io/istio/galley/pkg/source/kube/dynamic/converter" + "istio.io/istio/galley/pkg/source/kube/dynamic/converter" "istio.io/istio/galley/pkg/source/kube/schema" "istio.io/istio/galley/pkg/source/kube/schema/check" "istio.io/istio/pkg/ctrlz" @@ -66,18 +63,18 @@ type Server struct { type patchTable struct { newKubeFromConfigFile func(string) (client.Interfaces, error) verifyResourceTypesPresence func(client.Interfaces) error - newSource func(client.Interfaces, time.Duration, *schema.Instance, *kubeConverter.Config) (runtime.Source, error) + newSource func(client.Interfaces, time.Duration, *schema.Instance, *converter.Config) (runtime.Source, error) netListen func(network, address string) (net.Listener, error) newMeshConfigCache func(path string) (meshconfig.Cache, error) mcpMetricReporter func(string) monitoring.Reporter - fsNew func(string, *schema.Instance, *kubeConverter.Config) (runtime.Source, error) + fsNew func(string, *schema.Instance, *converter.Config) (runtime.Source, error) } func defaultPatchTable() patchTable { return patchTable{ newKubeFromConfigFile: client.NewKubeFromConfigFile, - verifyResourceTypesPresence: check.VerifyResourceTypesPresence, - newSource: dynamic.New, + verifyResourceTypesPresence: check.ResourceTypesPresence, + newSource: kubeSource.New, netListen: net.Listen, mcpMetricReporter: func(prefix string) monitoring.Reporter { return monitoring.NewStatsContext(prefix) }, newMeshConfigCache: func(path string) (meshconfig.Cache, error) { return meshconfig.NewCacheFromFile(path) }, @@ -87,18 +84,10 @@ func defaultPatchTable() patchTable { // New returns a new instance of a Server. func New(a *Args) (*Server, error) { - var convertK8SService bool - if s := os.Getenv("ISTIO_CONVERT_K8S_SERVICE"); s != "" { - b, err := strconv.ParseBool(s) - if err != nil { - return nil, err - } - convertK8SService = b - } - return newServer(a, defaultPatchTable(), convertK8SService) + return newServer(a, defaultPatchTable()) } -func newServer(a *Args, p patchTable, convertK8SService bool) (*Server, error) { +func newServer(a *Args, p patchTable) (*Server, error) { var err error s := &Server{} @@ -113,34 +102,16 @@ func newServer(a *Args, p patchTable, convertK8SService bool) (*Server, error) { if err != nil { return nil, err } - converterCfg := &kubeConverter.Config{ + converterCfg := &converter.Config{ Mesh: mesh, DomainSuffix: a.DomainSuffix, } - specs := kubeMeta.Types.All() - if !convertK8SService { - var filtered []schema.ResourceSpec - for _, t := range specs { - // TODO(nmittler): Temporarily filter Node and Pod until custom sources land. - // Pod yaml cannot be parsed currently. See: https://github.com/istio/istio/issues/10891 - if t.Kind != "Service" && t.Kind != "Node" && t.Kind != "Pod" { - filtered = append(filtered, t) - } - } - specs = filtered - } - sort.Slice(specs, func(i, j int) bool { - return strings.Compare(specs[i].CanonicalResourceName(), specs[j].CanonicalResourceName()) < 0 - }) - sb := schema.NewBuilder() - for _, s := range specs { - sb.Add(s) - } - kubeSchema := sb.Build() + + sourceSchema := getSourceSchema(a) var src runtime.Source if a.ConfigPath != "" { - src, err = p.fsNew(a.ConfigPath, kubeSchema, converterCfg) + src, err = p.fsNew(a.ConfigPath, sourceSchema, converterCfg) if err != nil { return nil, err } @@ -154,7 +125,7 @@ func newServer(a *Args, p patchTable, convertK8SService bool) (*Server, error) { return nil, err } } - src, err = p.newSource(k, a.ResyncPeriod, kubeSchema, converterCfg) + src, err = p.newSource(k, a.ResyncPeriod, sourceSchema, converterCfg) if err != nil { return nil, err } @@ -190,7 +161,7 @@ func newServer(a *Args, p patchTable, convertK8SService bool) (*Server, error) { grpc.EnableTracing = a.EnableGRPCTracing s.grpcServer = grpc.NewServer(grpcOptions...) - s.reporter = p.mcpMetricReporter("galley/") + s.reporter = p.mcpMetricReporter("galley/mcp/source") options := &source.Options{ Watcher: distributor, @@ -222,6 +193,25 @@ func newServer(a *Args, p patchTable, convertK8SService bool) (*Server, error) { return s, nil } +func getSourceSchema(a *Args) *schema.Instance { + b := schema.NewBuilder() + for _, spec := range kubeMeta.Types.All() { + if !isKindExcluded(a, spec.Kind) { + b.Add(spec) + } + } + return b.Build() +} + +func isKindExcluded(a *Args, kind string) bool { + for _, excludedKind := range a.ExcludedResourceKinds { + if kind == excludedKind { + return true + } + } + return false +} + // Run enables Galley to start receiving gRPC requests on its main API port. func (s *Server) Run() { s.serveWG.Add(1) @@ -241,21 +231,17 @@ func (s *Server) Run() { }() } -// ForceClose cleans up resources used by the server. -// ForceClose should be used only in testing to make the server stop quickly -func (s *Server) ForceClose() error { +// Close cleans up resources used by the server. +func (s *Server) Close() error { if s.stopCh != nil { close(s.stopCh) s.stopCh = nil } + if s.grpcServer != nil { - s.grpcServer.Stop() + s.grpcServer.GracefulStop() s.serveWG.Wait() } - return s.closeResources() -} - -func (s *Server) closeResources() error { if s.controlZ != nil { s.controlZ.Close() @@ -279,19 +265,6 @@ func (s *Server) closeResources() error { return nil } -// Close cleans up resources used by the server. -func (s *Server) Close() error { - if s.stopCh != nil { - close(s.stopCh) - s.stopCh = nil - } - if s.grpcServer != nil { - s.grpcServer.GracefulStop() - s.serveWG.Wait() - } - return s.closeResources() -} - //RunServer start Galley Server mode func RunServer(sa *Args, livenessProbeController, readinessProbeController probe.Controller) { diff --git a/galley/pkg/server/server_test.go b/galley/pkg/server/server_test.go index 608fb225a1e5..9c3ed91b49d9 100644 --- a/galley/pkg/server/server_test.go +++ b/galley/pkg/server/server_test.go @@ -22,7 +22,7 @@ import ( "time" "istio.io/istio/galley/pkg/meshconfig" - kube_meta "istio.io/istio/galley/pkg/metadata/kube" + kubeMeta "istio.io/istio/galley/pkg/metadata/kube" "istio.io/istio/galley/pkg/runtime" "istio.io/istio/galley/pkg/source/kube/client" "istio.io/istio/galley/pkg/source/kube/dynamic/converter" @@ -74,7 +74,7 @@ loop: break loop } - _, err := newServer(args, p, false) + _, err := newServer(args, p) if err == nil { t.Fatalf("Expected error not found for i=%d", i) } @@ -103,24 +103,19 @@ func TestNewServer(t *testing.T) { args.APIAddress = "tcp://0.0.0.0:0" args.Insecure = true - typeCount := len(kube_meta.Types.All()) + typeCount := len(kubeMeta.Types.All()) tests := []struct { - name string - convertK8SService bool - wantListeners int + name string + wantListeners int }{ { name: "Simple", wantListeners: typeCount - 1, }, - { - name: "ConvertK8SService", - convertK8SService: true, - }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - s, err := newServer(args, p, test.convertK8SService) + s, err := newServer(args, p) if err != nil { t.Fatalf("Unexpected error creating service: %v", err) } @@ -147,7 +142,7 @@ func TestServer_Basic(t *testing.T) { args := DefaultArgs() args.APIAddress = "tcp://0.0.0.0:0" args.Insecure = true - s, err := newServer(args, p, false) + s, err := newServer(args, p) if err != nil { t.Fatalf("Unexpected error creating service: %v", err) } diff --git a/galley/pkg/source/fs/fssource.go b/galley/pkg/source/fs/fssource.go deleted file mode 100644 index 452a4047c39f..000000000000 --- a/galley/pkg/source/fs/fssource.go +++ /dev/null @@ -1,316 +0,0 @@ -// Copyright 2018 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package fs - -import ( - "crypto/sha1" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "sync" - - "github.com/howeyc/fsnotify" - - kubeMeta "istio.io/istio/galley/pkg/metadata/kube" - "istio.io/istio/galley/pkg/runtime" - "istio.io/istio/galley/pkg/runtime/resource" - "istio.io/istio/galley/pkg/source/kube/dynamic" - "istio.io/istio/galley/pkg/source/kube/dynamic/converter" - "istio.io/istio/galley/pkg/source/kube/schema" - "istio.io/istio/pkg/log" - - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" -) - -var supportedExtensions = map[string]bool{ - ".yaml": true, - ".yml": true, -} -var scope = log.RegisterScope("fs", "File system source debugging", 0) - -// fsSource is source implementation for filesystem. -type fsSource struct { - // configuration for the converters. - config *converter.Config - - // Config File Path - root string - - donec chan struct{} - - mu sync.RWMutex - - // map to store namespace/name : shas - shas map[resource.FullName][sha1.Size]byte - - ch chan resource.Event - - // map to store kind : bool to indicate whether we need to deal with the resource or not - kinds map[string]bool - - // map to store filename: []{namespace/name,kind} to indicate whether the resources has been deleted from one file - fileResorceKeys map[string][]*fileResourceKey - - // fsresource version - version int64 - - watcher *fsnotify.Watcher -} - -func (s *fsSource) readFiles(root string) map[resource.FullName]*istioResource { - results := map[resource.FullName]*istioResource{} - - err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - result := s.readFile(path, info, true) - if result != nil && len(result) != 0 { - for k, r := range result { - results[k] = r - } - } - //add watcher for sub folders - if info.Mode().IsDir() { - _ = s.watcher.Watch(path) - } - return nil - }) - if err != nil { - scope.Errorf("failure during filepath.Walk: %v", err) - } - return results -} - -func (s *fsSource) readFile(path string, info os.FileInfo, initial bool) map[resource.FullName]*istioResource { - result := map[resource.FullName]*istioResource{} - if mode := info.Mode() & os.ModeType; !supportedExtensions[filepath.Ext(path)] || (mode != 0 && mode != os.ModeSymlink) { - return nil - } - data, err := ioutil.ReadFile(path) - if err != nil { - scope.Warnf("Failed to read %s: %v", path, err) - return nil - } - s.mu.Lock() - defer s.mu.Unlock() - resourceKeyList := make([]*fileResourceKey, 1) - for _, r := range parseFile(path, data) { - if !s.kinds[r.u.GetKind()] { - continue - } - result[r.key] = r - resourceKeyList = append(resourceKeyList, &fileResourceKey{r.key, r.u.GetKind()}) - } - if initial { - s.fileResorceKeys[path] = resourceKeyList - } - return result -} - -//process delete part of the resources in a file -func (s *fsSource) processPartialDelete(fileName string, newData *map[resource.FullName]*istioResource) { - s.mu.Lock() - defer s.mu.Unlock() - if fileResorceKeys, ok := s.fileResorceKeys[fileName]; ok { - for i := len(fileResorceKeys) - 1; i >= 0; i-- { - if fileResorceKeys[i] != nil { - if _, ok := (*newData)[(*fileResorceKeys[i]).key]; !ok { - delete(s.shas, (*fileResorceKeys[i]).key) - s.process(resource.Deleted, (*fileResorceKeys[i]).key, (*fileResorceKeys[i]).kind, nil) - fileResorceKeys = append(fileResorceKeys[:i], fileResorceKeys[i+1:]...) - } - } - } - if len(fileResorceKeys) > 0 { - s.fileResorceKeys[fileName] = fileResorceKeys - } - if len(fileResorceKeys) == 0 { - delete(s.fileResorceKeys, fileName) - } - } - -} - -func (s *fsSource) processAddOrUpdate(fileName string, newData *map[resource.FullName]*istioResource) { - s.mu.Lock() - defer s.mu.Unlock() - // need versionUpdated as sometimes when fswatcher fires events, there is actually no change on the file content - versionUpdated := false - for k, r := range *newData { - if _, ok := s.shas[k]; ok { - if s.shas[k] != r.sha { - versionUpdated = true - break - } - } else { - versionUpdated = true - break - } - } - if versionUpdated { - s.version++ - } - for k, r := range *newData { - if _, ok := s.shas[k]; ok { - if s.shas[k] != r.sha { - s.fileResorceKeys[fileName] = append(s.fileResorceKeys[fileName], &fileResourceKey{r.key, r.u.GetKind()}) - s.process(resource.Updated, k, "", r) - } - s.shas[k] = r.sha - continue - } - if s.fileResorceKeys != nil { - s.fileResorceKeys[fileName] = append(s.fileResorceKeys[fileName], &fileResourceKey{r.key, r.u.GetKind()}) - } - s.process(resource.Added, k, "", r) - if s.shas != nil { - s.shas[k] = r.sha - } - } -} - -//process delete all resources in a file -func (s *fsSource) processDelete(fileName string) { - s.mu.Lock() - defer s.mu.Unlock() - if fileResorceKeys, ok := s.fileResorceKeys[fileName]; ok { - for _, fileResorceKey := range fileResorceKeys { - if fileResorceKey != nil { - delete(s.shas, (*fileResorceKey).key) - s.process(resource.Deleted, (*fileResorceKey).key, (*fileResorceKey).kind, nil) - } - } - delete(s.fileResorceKeys, fileName) - } -} - -func (s *fsSource) initialCheck() { - newData := s.readFiles(s.root) - s.mu.Lock() - defer s.mu.Unlock() - s.ch <- resource.Event{Kind: resource.FullSync} - for k, r := range newData { - s.process(resource.Added, k, "", r) - s.shas[k] = r.sha - } -} - -// Stop implements runtime.Source -func (s *fsSource) Stop() { - close(s.donec) - _ = s.watcher.Close() -} - -func (s *fsSource) process(eventKind resource.EventKind, key resource.FullName, resourceKind string, r *istioResource) { - var u *unstructured.Unstructured - var spec schema.ResourceSpec - var kind string - // no need to care about real data when deleting resources - if eventKind == resource.Deleted { - u = nil - kind = resourceKind - } else { - u = r.u - kind = r.u.GetKind() - } - for _, v := range kubeMeta.Types.All() { - if v.Kind == kind { - spec = v - break - } - } - - dynamic.ProcessEvent(s.config, spec, eventKind, key, fmt.Sprintf("v%d", s.version), u, s.ch) -} - -// Start implements runtime.Source -func (s *fsSource) Start() (chan resource.Event, error) { - s.ch = make(chan resource.Event, 1024) - watcher, err := fsnotify.NewWatcher() - if err != nil { - return nil, err - } - s.watcher = watcher - _ = s.watcher.Watch(s.root) - s.initialCheck() - go func() { - for { - select { - // watch for events - case ev, more := <-s.watcher.Event: - if !more { - break - } - if ev.IsDelete() { - s.processDelete(ev.Name) - } else if ev.IsCreate() { - fi, err := os.Stat(ev.Name) - if err != nil { - scope.Warnf("error occurs for watching %s", ev.Name) - } else { - if fi.Mode().IsDir() { - scope.Debugf("add watcher for new folder %s", ev.Name) - _ = s.watcher.Watch(ev.Name) - } else { - newData := s.readFile(ev.Name, fi, true) - if newData != nil && len(newData) != 0 { - s.processAddOrUpdate(ev.Name, &newData) - } - } - } - } else if ev.IsModify() { - fi, err := os.Stat(ev.Name) - if err != nil { - scope.Warnf("error occurs for watching %s", ev.Name) - } else { - if fi.Mode().IsDir() { - _ = s.watcher.RemoveWatch(ev.Name) - } else { - newData := s.readFile(ev.Name, fi, false) - if newData != nil && len(newData) != 0 { - s.processPartialDelete(ev.Name, &newData) - s.processAddOrUpdate(ev.Name, &newData) - } else { - s.processDelete(ev.Name) - } - } - } - } - case <-s.donec: - return - } - } - }() - return s.ch, nil -} - -// New returns a File System implementation of runtime.Source. -func New(root string, schema *schema.Instance, config *converter.Config) (runtime.Source, error) { - fs := &fsSource{ - config: config, - root: root, - kinds: map[string]bool{}, - fileResorceKeys: map[string][]*fileResourceKey{}, - donec: make(chan struct{}), - shas: map[resource.FullName][sha1.Size]byte{}, - version: 0, - } - for _, spec := range schema.All() { - fs.kinds[spec.Kind] = true - } - return fs, nil -} diff --git a/galley/pkg/source/fs/fssource_test.go b/galley/pkg/source/fs/fssource_test.go deleted file mode 100644 index ace5c033a4c5..000000000000 --- a/galley/pkg/source/fs/fssource_test.go +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright 2018 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package fs - -import ( - "fmt" - "io/ioutil" - "os" - "path/filepath" - "strings" - "testing" - "time" - - "istio.io/istio/galley/pkg/meshconfig" - kubeMeta "istio.io/istio/galley/pkg/metadata/kube" - "istio.io/istio/galley/pkg/runtime" - "istio.io/istio/galley/pkg/runtime/resource" - "istio.io/istio/galley/pkg/source/kube/dynamic/converter" - sn "istio.io/istio/pkg/mcp/snapshot" -) - -var mixerYAML = ` -apiVersion: "config.istio.io/v1alpha2" -kind: denier -metadata: - name: some.mixer.denier -spec: - status: - code: 7 - message: Not allowed ---- -apiVersion: "config.istio.io/v1alpha2" -kind: checknothing -metadata: - name: some.mixer.checknothing -spec: ---- -apiVersion: "config.istio.io/v1alpha2" -kind: rule -metadata: - name: some.mixer.rule -spec: - match: destination.labels["app"] == "someapp" - actions: - - handler: some.denier - instances: [ some.checknothing ] -` - -var mixerPartYAML = ` -apiVersion: "config.istio.io/v1alpha2" -kind: denier -metadata: - name: some.mixer.denier -spec: - status: - code: 7 - message: Not allowed ---- -apiVersion: "config.istio.io/v1alpha2" -kind: checknothing -metadata: - name: some.mixer.checknothing -spec: -` - -var virtualServiceYAML = ` -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: route-for-myapp -spec: - hosts: - - some.example.com - gateways: - - some-ingress - http: - - route: - - destination: - host: some.example.internal -` - -var virtualServiceChangedYAML = ` -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: route-for-myapp-changed -spec: - hosts: - - some.example.com - gateways: - - some-ingress - http: - - route: - - destination: - host: some.example.internal -` -var ( - fst *fsTestSourceState -) - -type fsTestSourceState struct { - // configFiles are file input for istio config - configFiles map[string][]byte - // rootPath is where the testing will write the files in - rootPath string -} - -type scenario struct { - // initFile is the initial content for istio config - initFile string - // initFileName is the initial istio config file name - initFileName string - // expectedResult is the expected event for the testing - expectedResult string - // expectedSequence is the expected event sequence in the channel - expectedSequence int - // fileActin is the file operations for the testing - fileAction func(chan resource.Event, runtime.Source) - // checkResult is how the testing check result - checkResult func(chan resource.Event, string, *testing.T, int) -} - -var checkResult = func(ch chan resource.Event, expected string, t *testing.T, expectedSequence int) { - t.Helper() - - log := logChannelOutput(ch, expectedSequence) - if log != expected { - t.Fatalf("Event mismatch:\nActual:\n%s\nExpected:\n%s\n", log, expected) - } -} - -func (fst *fsTestSourceState) testSetup(t *testing.T) { - t.Helper() - - var err error - - fst.rootPath, err = ioutil.TempDir("", "configPath") - if err != nil { - t.Fatal(err) - } - - for name, content := range fst.configFiles { - err = ioutil.WriteFile(filepath.Join(fst.rootPath, name), content, 0600) - if err != nil { - t.Fatal(err) - } - } -} - -func (fst *fsTestSourceState) writeFile() error { - for name, content := range fst.configFiles { - err := ioutil.WriteFile(filepath.Join(fst.rootPath, name), content, 0600) - if err != nil { - return err - } - } - return nil -} - -func (fst *fsTestSourceState) deleteFile() error { - for name := range fst.configFiles { - err := os.Remove(filepath.Join(fst.rootPath, name)) - if err != nil { - return err - } - } - return nil -} - -func (fst *fsTestSourceState) testTeardown(t *testing.T) { - err := os.RemoveAll(fst.rootPath) - if err != nil { - t.Fatal(err) - } -} - -func TestFsSource(t *testing.T) { - scenarios := map[string]scenario{ - "NewSource": { - initFile: "", - initFileName: "", - fileAction: func(_ chan resource.Event, _ runtime.Source) {}, - checkResult: nil, - }, - "FsSource_InitialScan": { - initFile: virtualServiceYAML, - initFileName: "virtual_service.yml", - expectedSequence: 2, - expectedResult: strings.TrimSpace(` - [Event](Added: [VKey](istio/networking/v1alpha3/virtualservices:route-for-myapp @v0))`), - fileAction: func(_ chan resource.Event, _ runtime.Source) {}, - checkResult: checkResult}, - "FsSource_AddFile": { - initFile: "", - initFileName: "", - expectedSequence: 2, - expectedResult: strings.TrimSpace(` - [Event](Added: [VKey](istio/networking/v1alpha3/virtualservices:route-for-myapp @v1))`), - fileAction: func(_ chan resource.Event, _ runtime.Source) { - fst.configFiles["virtual_service.yml"] = []byte(virtualServiceYAML) - err := fst.writeFile() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - }, - checkResult: checkResult, - }, - "FsSource_DeleteFile": { - initFile: virtualServiceYAML, - initFileName: "virtual_service.yml", - expectedSequence: 3, - expectedResult: strings.TrimSpace(` - [Event](Deleted: [VKey](istio/networking/v1alpha3/virtualservices:route-for-myapp @v0))`), - fileAction: func(_ chan resource.Event, _ runtime.Source) { - err := fst.deleteFile() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - }, - checkResult: checkResult, - }, - "FsSource_ModifyFile": { - initFile: virtualServiceYAML, - initFileName: "virtual_service.yml", - expectedSequence: 4, - expectedResult: strings.TrimSpace(` - [Event](Added: [VKey](istio/networking/v1alpha3/virtualservices:route-for-myapp-changed @v1))`), - fileAction: func(_ chan resource.Event, _ runtime.Source) { - err := ioutil.WriteFile(filepath.Join(fst.rootPath, "virtual_service.yml"), []byte(virtualServiceChangedYAML), 0600) - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - }, - checkResult: checkResult, - }, - "FsSource_DeletePartResorceInFile": { - initFile: mixerYAML, - initFileName: "mixer.yml", - fileAction: func(ch chan resource.Event, _ runtime.Source) { - fst.configFiles["mixer.yml"] = []byte(mixerPartYAML) - err := fst.writeFile() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - donec := make(chan bool) - expected := "[Event](Deleted: [VKey](istio/policy/v1beta1/rules:some.mixer.rule @v0))" - go checkEventOccurs(expected, ch, donec) - select { - case <-time.After(5 * time.Second): - t.Fatalf("Expected Event does not occur:\n%s\n", expected) - case <-donec: - return - } - }, - checkResult: nil, - }, - "FsSource_publishEvent": { - initFile: virtualServiceYAML, - initFileName: "virtual_service.yml", - fileAction: func(_ chan resource.Event, s runtime.Source) { - d := runtime.NewInMemoryDistributor() - cfg := &runtime.Config{Mesh: meshconfig.NewInMemory()} - processor := runtime.NewProcessor(s, d, cfg) - err := processor.Start() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - ch := make(chan bool) - listenerAction := func(sp sn.Snapshot) { - ch <- true - } - cancel := make(chan bool) - defer func() { close(cancel) }() - go d.ListenChanges(cancel, listenerAction) - select { - case <-ch: - return - case <-time.After(5 * time.Second): - t.Fatal("The snapshot should have been set") - } - processor.Stop() - }, - checkResult: nil, - }, - } - for name, scenario := range scenarios { - t.Run(name, func(tt *testing.T) { - runTestCode(tt, scenario) - }) - } - -} -func runTestCode(t *testing.T, test scenario) { - if test.initFile == "" { - fst = &fsTestSourceState{ - configFiles: map[string][]byte{}, - } - } else { - fst = &fsTestSourceState{ - configFiles: map[string][]byte{test.initFileName: []byte(test.initFile)}, - } - } - fst.testSetup(t) - defer fst.testTeardown(t) - s, err := New(fst.rootPath, kubeMeta.Types, &converter.Config{Mesh: meshconfig.NewInMemory()}) - if err != nil { - t.Fatalf("Unexpected error found: %v", err) - } - - if s == nil { - t.Fatal("expected non-nil source") - } - ch, err := s.Start() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - - test.fileAction(ch, s) - if test.checkResult != nil { - test.checkResult(ch, test.expectedResult, t, test.expectedSequence) - } - s.Stop() -} - -//Only log the last event out -func logChannelOutput(ch chan resource.Event, count int) string { - var result resource.Event - for i := 0; i < count; i++ { - result = <-ch - } - return strings.TrimSpace(fmt.Sprintf("%v\n", result)) -} - -// Check whether a specif event occurs -func checkEventOccurs(expectedEvent string, ch chan resource.Event, donec chan bool) { - for event := range ch { - if expectedEvent == strings.TrimSpace(fmt.Sprintf("%v\n", event)) { - donec <- true - } - } -} diff --git a/galley/pkg/source/fs/fsutilities.go b/galley/pkg/source/fs/fsutilities.go deleted file mode 100644 index 0f2bd87c702b..000000000000 --- a/galley/pkg/source/fs/fsutilities.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2018 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package fs - -import ( - "bytes" - "crypto/sha1" - - "github.com/ghodss/yaml" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - - "istio.io/istio/galley/pkg/runtime/resource" -) - -type istioResource struct { - u *unstructured.Unstructured - sha [sha1.Size]byte - key resource.FullName -} - -type fileResourceKey struct { - key resource.FullName - kind string -} - -func parseFile(path string, data []byte) []*istioResource { - chunks := bytes.Split(data, []byte("\n---\n")) - resources := make([]*istioResource, 0, len(chunks)) - for i, chunk := range chunks { - chunk = bytes.TrimSpace(chunk) - if len(chunk) == 0 { - continue - } - u, err := parseChunk(chunk) - if err != nil { - scope.Errorf("Error processing %s[%d]: %v", path, i, err) - continue - } - if u == nil { - continue - } - key := resource.FullNameFromNamespaceAndName(u.GetNamespace(), u.GetName()) - resources = append(resources, &istioResource{u: u, sha: sha1.Sum(chunk), key: key}) - } - return resources -} - -func parseChunk(chunk []byte) (*unstructured.Unstructured, error) { - u := &unstructured.Unstructured{} - if err := yaml.Unmarshal(chunk, u); err != nil { - return nil, err - } - if empty(u) { - return nil, nil - } - return u, nil -} - -// Check if the parsed resource is empty -func empty(r *unstructured.Unstructured) bool { - if r.Object == nil || len(r.Object) == 0 { - return true - } - return false -} diff --git a/galley/pkg/source/fs/source.go b/galley/pkg/source/fs/source.go new file mode 100644 index 000000000000..2728d24e64e0 --- /dev/null +++ b/galley/pkg/source/fs/source.go @@ -0,0 +1,461 @@ +// Copyright 2018 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fs + +import ( + "bytes" + "crypto/sha1" + "encoding/json" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "sync" + + "github.com/ghodss/yaml" + "github.com/howeyc/fsnotify" + + kubeMeta "istio.io/istio/galley/pkg/metadata/kube" + "istio.io/istio/galley/pkg/runtime" + "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/galley/pkg/source/kube/builtin" + "istio.io/istio/galley/pkg/source/kube/dynamic" + "istio.io/istio/galley/pkg/source/kube/dynamic/converter" + "istio.io/istio/galley/pkg/source/kube/log" + "istio.io/istio/galley/pkg/source/kube/schema" + + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + kubeJson "k8s.io/apimachinery/pkg/runtime/serializer/json" +) + +const ( + yamlSeparator = "\n---\n" +) + +var ( + supportedExtensions = map[string]bool{ + ".yaml": true, + ".yml": true, + } +) + +// source is source implementation for filesystem. +type source struct { + // configuration for the converters. + config *converter.Config + + // Config File Path + root string + + donec chan struct{} + + mu sync.RWMutex + + // map to store namespace/name : shas + shas map[resource.FullName][sha1.Size]byte + + handler resource.EventHandler + + // map to store kind : bool to indicate whether we need to deal with the resource or not + kinds map[string]bool + + // map to store filename: []{namespace/name,kind} to indicate whether the resources has been deleted from one file + fileResourceKeys map[string][]*fileResourceKey + + // fsresource version + version int64 + + watcher *fsnotify.Watcher +} + +func (s *source) readFiles(root string) map[resource.FullName]*fileResource { + results := map[resource.FullName]*fileResource{} + + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + result := s.readFile(path, info, true) + if result != nil && len(result) != 0 { + for k, r := range result { + results[k] = r + } + } + //add watcher for sub folders + if info.Mode().IsDir() { + _ = s.watcher.Watch(path) + } + return nil + }) + if err != nil { + log.Scope.Errorf("failure during filepath.Walk: %v", err) + } + return results +} + +func (s *source) readFile(path string, info os.FileInfo, initial bool) map[resource.FullName]*fileResource { + result := map[resource.FullName]*fileResource{} + if mode := info.Mode() & os.ModeType; !supportedExtensions[filepath.Ext(path)] || (mode != 0 && mode != os.ModeSymlink) { + return nil + } + data, err := ioutil.ReadFile(path) + if err != nil { + log.Scope.Warnf("Failed to read %s: %v", path, err) + return nil + } + s.mu.Lock() + defer s.mu.Unlock() + resourceKeyList := make([]*fileResourceKey, 1) + for _, r := range s.parseFile(path, data) { + if !s.kinds[r.spec.Kind] { + continue + } + result[r.entry.Key] = r + resourceKeyList = append(resourceKeyList, r.newKey()) + } + if initial { + s.fileResourceKeys[path] = resourceKeyList + } + return result +} + +//process delete part of the resources in a file +func (s *source) processPartialDelete(fileName string, newData *map[resource.FullName]*fileResource) { + s.mu.Lock() + defer s.mu.Unlock() + if fileResorceKeys, ok := s.fileResourceKeys[fileName]; ok { + for i := len(fileResorceKeys) - 1; i >= 0; i-- { + if fileResorceKeys[i] != nil { + if _, ok := (*newData)[(*fileResorceKeys[i]).key]; !ok { + delete(s.shas, (*fileResorceKeys[i]).key) + s.process(resource.Deleted, (*fileResorceKeys[i]).key, (*fileResorceKeys[i]).kind, nil) + fileResorceKeys = append(fileResorceKeys[:i], fileResorceKeys[i+1:]...) + } + } + } + if len(fileResorceKeys) > 0 { + s.fileResourceKeys[fileName] = fileResorceKeys + } + if len(fileResorceKeys) == 0 { + delete(s.fileResourceKeys, fileName) + } + } + +} + +func (s *source) processAddOrUpdate(fileName string, newData *map[resource.FullName]*fileResource) { + s.mu.Lock() + defer s.mu.Unlock() + // need versionUpdated as sometimes when fswatcher fires events, there is actually no change on the file content + versionUpdated := false + for k, r := range *newData { + if _, ok := s.shas[k]; ok { + if s.shas[k] != r.sha { + versionUpdated = true + break + } + } else { + versionUpdated = true + break + } + } + if versionUpdated { + s.version++ + } + for k, r := range *newData { + if _, ok := s.shas[k]; ok { + if s.shas[k] != r.sha { + s.fileResourceKeys[fileName] = append(s.fileResourceKeys[fileName], r.newKey()) + s.process(resource.Updated, k, "", r) + } + s.shas[k] = r.sha + continue + } + if s.fileResourceKeys != nil { + s.fileResourceKeys[fileName] = append(s.fileResourceKeys[fileName], r.newKey()) + } + s.process(resource.Added, k, "", r) + if s.shas != nil { + s.shas[k] = r.sha + } + } +} + +//process delete all resources in a file +func (s *source) processDelete(fileName string) { + s.mu.Lock() + defer s.mu.Unlock() + if fileResourceKeys, ok := s.fileResourceKeys[fileName]; ok { + for _, fileResourceKey := range fileResourceKeys { + if fileResourceKey != nil { + delete(s.shas, (*fileResourceKey).key) + s.process(resource.Deleted, (*fileResourceKey).key, (*fileResourceKey).kind, nil) + } + } + delete(s.fileResourceKeys, fileName) + } +} + +func (s *source) initialCheck() { + newData := s.readFiles(s.root) + s.mu.Lock() + defer s.mu.Unlock() + for k, r := range newData { + s.process(resource.Added, k, "", r) + s.shas[k] = r.sha + } + s.handler(resource.FullSyncEvent) +} + +// Stop implements runtime.Source +func (s *source) Stop() { + close(s.donec) + _ = s.watcher.Close() +} + +func (s *source) process(eventKind resource.EventKind, key resource.FullName, resourceKind string, r *fileResource) { + version := resource.Version(fmt.Sprintf("v%d", s.version)) + + var event resource.Event + switch eventKind { + case resource.Added, resource.Updated: + event = resource.Event{ + Kind: eventKind, + Entry: resource.Entry{ + ID: resource.VersionedKey{ + Key: resource.Key{ + Collection: r.spec.Target.Collection, + FullName: key, + }, + Version: version, + }, + Item: r.entry.Resource, + Metadata: r.entry.Metadata, + }, + } + case resource.Deleted: + spec := kubeMeta.Types.Get(resourceKind) + event = resource.Event{ + Kind: eventKind, + Entry: resource.Entry{ + ID: resource.VersionedKey{ + Key: resource.Key{ + Collection: spec.Target.Collection, + FullName: key, + }, + Version: version, + }, + }, + } + } + + log.Scope.Debugf("Dispatching source event: %v", event) + s.handler(event) +} + +// Start implements runtime.Source +func (s *source) Start(handler resource.EventHandler) error { + s.handler = handler + watcher, err := fsnotify.NewWatcher() + if err != nil { + return err + } + s.watcher = watcher + _ = s.watcher.Watch(s.root) + s.initialCheck() + go func() { + for { + select { + // watch for events + case ev, more := <-s.watcher.Event: + if !more { + break + } + if ev.IsDelete() { + s.processDelete(ev.Name) + } else if ev.IsCreate() { + fi, err := os.Stat(ev.Name) + if err != nil { + log.Scope.Warnf("error occurs for watching %s", ev.Name) + } else { + if fi.Mode().IsDir() { + log.Scope.Debugf("add watcher for new folder %s", ev.Name) + _ = s.watcher.Watch(ev.Name) + } else { + newData := s.readFile(ev.Name, fi, true) + if newData != nil && len(newData) != 0 { + s.processAddOrUpdate(ev.Name, &newData) + } + } + } + } else if ev.IsModify() { + fi, err := os.Stat(ev.Name) + if err != nil { + log.Scope.Warnf("error occurs for watching %s", ev.Name) + } else { + if fi.Mode().IsDir() { + _ = s.watcher.RemoveWatch(ev.Name) + } else { + newData := s.readFile(ev.Name, fi, false) + if newData != nil && len(newData) != 0 { + s.processPartialDelete(ev.Name, &newData) + s.processAddOrUpdate(ev.Name, &newData) + } else { + s.processDelete(ev.Name) + } + } + } + } + case <-s.donec: + return + } + } + }() + return nil +} + +// New returns a File System implementation of runtime.Source. +func New(root string, schema *schema.Instance, config *converter.Config) (runtime.Source, error) { + fs := &source{ + config: config, + root: root, + kinds: map[string]bool{}, + fileResourceKeys: map[string][]*fileResourceKey{}, + donec: make(chan struct{}), + shas: map[resource.FullName][sha1.Size]byte{}, + version: 0, + } + for _, spec := range schema.All() { + fs.kinds[spec.Kind] = true + } + return fs, nil +} + +type fileResource struct { + entry converter.Entry + spec *schema.ResourceSpec + sha [sha1.Size]byte +} + +func (r *fileResource) newKey() *fileResourceKey { + return &fileResourceKey{ + kind: r.spec.Kind, + key: r.entry.Key, + } +} + +type fileResourceKey struct { + key resource.FullName + kind string +} + +func (s *source) parseFile(path string, data []byte) []*fileResource { + chunks := bytes.Split(data, []byte(yamlSeparator)) + resources := make([]*fileResource, 0, len(chunks)) + for i, chunk := range chunks { + chunk = bytes.TrimSpace(chunk) + if len(chunk) == 0 { + continue + } + r, err := s.parseChunk(chunk) + if err != nil { + log.Scope.Errorf("Error processing %s[%d]: %v", path, i, err) + continue + } + if r == nil { + continue + } + resources = append(resources, r) + } + return resources +} + +func (s *source) parseChunk(yamlChunk []byte) (*fileResource, error) { + // Convert to JSON + jsonChunk, err := yaml.YAMLToJSON(yamlChunk) + if err != nil { + return nil, fmt.Errorf("failed converting YAML to JSON") + } + + // Peek at the beginning of the JSON to + groupVersionKind, err := kubeJson.DefaultMetaFactory.Interpret(jsonChunk) + if err != nil { + return nil, err + } + + spec := kubeMeta.Types.Get(groupVersionKind.Kind) + if spec == nil { + return nil, fmt.Errorf("failed finding spec for kind: %s", groupVersionKind.Kind) + } + + builtinType := builtin.GetType(groupVersionKind.Kind) + if builtinType != nil { + obj, err := builtinType.ParseJSON(jsonChunk) + if err != nil { + return nil, err + } + objMeta := builtinType.ExtractObject(obj) + key := resource.FullNameFromNamespaceAndName(objMeta.GetNamespace(), objMeta.GetName()) + return &fileResource{ + spec: spec, + sha: sha1.Sum(yamlChunk), + entry: converter.Entry{ + Metadata: resource.Metadata{ + CreateTime: objMeta.GetCreationTimestamp().Time, + Labels: objMeta.GetLabels(), + Annotations: objMeta.GetAnnotations(), + }, + Key: key, + Resource: builtinType.ExtractResource(obj), + }, + }, nil + } + + // No built-in processor for this type. Use dynamic processing via unstructured... + + u := &unstructured.Unstructured{} + if err := json.Unmarshal(jsonChunk, u); err != nil { + return nil, err + } + if empty(u) { + return nil, nil + } + + key := resource.FullNameFromNamespaceAndName(u.GetNamespace(), u.GetName()) + entries, err := dynamic.ConvertAndLog(s.config, *spec, key, u.GetResourceVersion(), u) + if err != nil { + return nil, err + } + + if len(entries) == 0 { + return nil, fmt.Errorf("did not receive any entries from converter: kind=%v, key=%v, rv=%s", + u.GetKind(), key, u.GetResourceVersion()) + } + + // TODO(nmittler): Will there ever be > 1 entries? + return &fileResource{ + spec: spec, + sha: sha1.Sum(yamlChunk), + entry: entries[0], + }, nil +} + +// Check if the parsed resource is empty +func empty(r *unstructured.Unstructured) bool { + if r.Object == nil || len(r.Object) == 0 { + return true + } + return false +} diff --git a/galley/pkg/source/fs/source_test.go b/galley/pkg/source/fs/source_test.go new file mode 100644 index 000000000000..eb237239e77d --- /dev/null +++ b/galley/pkg/source/fs/source_test.go @@ -0,0 +1,573 @@ +// Copyright 2018 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fs_test + +import ( + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strings" + "testing" + "time" + + . "github.com/onsi/gomega" + + "istio.io/istio/galley/pkg/meshconfig" + kubeMeta "istio.io/istio/galley/pkg/metadata/kube" + "istio.io/istio/galley/pkg/runtime" + "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/galley/pkg/source/fs" + "istio.io/istio/galley/pkg/source/kube/dynamic/converter" + "istio.io/istio/galley/pkg/source/kube/schema" + "istio.io/istio/galley/pkg/testing/events" + sn "istio.io/istio/pkg/mcp/snapshot" + + coreV1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + k8sRuntime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" +) + +var ( + mixerYAML = ` +apiVersion: "config.istio.io/v1alpha2" +kind: denier +metadata: + name: some.mixer.denier +spec: + status: + code: 7 + message: Not allowed +--- +apiVersion: "config.istio.io/v1alpha2" +kind: checknothing +metadata: + name: some.mixer.checknothing +spec: +--- +apiVersion: "config.istio.io/v1alpha2" +kind: rule +metadata: + name: some.mixer.rule +spec: + match: destination.labels["app"] == "someapp" + actions: + - handler: some.denier + instances: [ some.checknothing ] +` + + mixerPartYAML = ` +apiVersion: "config.istio.io/v1alpha2" +kind: denier +metadata: + name: some.mixer.denier +spec: + status: + code: 7 + message: Not allowed +--- +apiVersion: "config.istio.io/v1alpha2" +kind: checknothing +metadata: + name: some.mixer.checknothing +spec: +` + + virtualServiceYAML = ` +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: route-for-myapp +spec: + hosts: + - some.example.com + gateways: + - some-ingress + http: + - route: + - destination: + host: some.example.internal +` + + virtualServiceChangedYAML = ` +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: route-for-myapp +spec: + hosts: + - someother.example.com + gateways: + - some-ingress + http: + - route: + - destination: + host: some.example.internal +` + + builtinYAML = ` +apiVersion: v1 +kind: Service +metadata: + annotations: + ak1: av1 + creationTimestamp: 2018-02-12T15:48:44Z + labels: + lk1: lv1 + name: kube-dns + namespace: kube-system +spec: + clusterIP: 10.43.240.10 + ports: + - name: dns-tcp + port: 53 + protocol: TCP + targetPort: 53 + type: ClusterIP +` + + cfg = &converter.Config{Mesh: meshconfig.NewInMemory()} + + runtimeScheme = k8sRuntime.NewScheme() + codecs = serializer.NewCodecFactory(runtimeScheme) + deserializer = codecs.UniversalDeserializer() +) + +func TestNew(t *testing.T) { + dir := createTempDir(t) + defer deleteTempDir(t, dir) + + _ = newOrFail(t, dir) +} + +func TestInvalidDirShouldSucceed(t *testing.T) { + s := newOrFail(t, "somebaddir") + + ch := startOrFail(t, s) + defer s.Stop() + + expectFullSync(t, ch) +} + +func TestInitialFile(t *testing.T) { + g := NewGomegaWithT(t) + + dir := createTempDir(t) + defer deleteTempDir(t, dir) + + // Copy a file to the dir + u := copyAndParseSinglePartFile(t, dir, "virtual_services.yaml", virtualServiceYAML) + + // Start the source. + s := newOrFail(t, dir) + ch := startOrFail(t, s) + defer s.Stop() + + // Expect the Add event. + u.SetResourceVersion("v0") + spec := *kubeMeta.Types.Get("VirtualService") + expected := resource.Event{ + Kind: resource.Added, + Entry: unstructuredToEntry(t, u, spec), + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + + // Expect the full sync event immediately after. + expectFullSync(t, ch) +} + +func TestDynamicResource(t *testing.T) { + dir := createTempDir(t) + defer deleteTempDir(t, dir) + + // Start the source. + s := newOrFail(t, dir) + ch := startOrFail(t, s) + defer s.Stop() + + // Expect the full sync event. + expectFullSync(t, ch) + + fileName := "virtual_services.yaml" + spec := *kubeMeta.Types.Get("VirtualService") + + t.Run("Add", func(t *testing.T) { + g := NewGomegaWithT(t) + + // Copy a file to the dir + u := copyAndParseSinglePartFile(t, dir, fileName, virtualServiceYAML) + u.SetResourceVersion("v1") + + // Expect the Add event. + expected := resource.Event{ + Kind: resource.Added, + Entry: unstructuredToEntry(t, u, spec), + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + t.Run("Update", func(t *testing.T) { + g := NewGomegaWithT(t) + + // Overwrite the original file + u := copyAndParseSinglePartFile(t, dir, fileName, virtualServiceChangedYAML) + u.SetResourceVersion("v2") + + // Expect the update event. + expected := resource.Event{ + Kind: resource.Updated, + Entry: unstructuredToEntry(t, u, spec), + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + t.Run("Delete", func(t *testing.T) { + g := NewGomegaWithT(t) + + // Delete the file. + deleteFiles(t, dir, fileName) + + u := &unstructured.Unstructured{} + parseYaml(t, virtualServiceChangedYAML, u) + u.SetResourceVersion("v2") + + // Expect the update event. + expected := resource.Event{ + Kind: resource.Deleted, + Entry: resource.Entry{ + ID: getID(u, spec), + }, + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) +} + +func TestBuiltinResource(t *testing.T) { + dir := createTempDir(t) + defer deleteTempDir(t, dir) + + // Start the source. + s := newOrFail(t, dir) + ch := startOrFail(t, s) + defer s.Stop() + + // Expect the full sync event. + expectFullSync(t, ch) + + fileName := "services.yaml" + spec := *kubeMeta.Types.Get("Service") + svc := coreV1.Service{} + parseYaml(t, builtinYAML, &svc) + + t.Run("Add", func(t *testing.T) { + g := NewGomegaWithT(t) + + // Copy a file to the dir + copyFile(t, dir, fileName, builtinYAML) + + // Expect the Add event. + svc.SetResourceVersion("v1") + expected := resource.Event{ + Kind: resource.Added, + Entry: serviceToEntry(t, svc, spec), + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + t.Run("Update", func(t *testing.T) { + g := NewGomegaWithT(t) + + // Change the ClustIP and overwrite the original file + oldClusterIP := "10.43.240.10" + newClusterIP := "10.43.240.11" + newYAML := strings.Replace(builtinYAML, oldClusterIP, newClusterIP, -1) + copyFile(t, dir, fileName, newYAML) + + // Expect the update event. + svc.Spec.ClusterIP = newClusterIP + svc.SetResourceVersion("v2") + expected := resource.Event{ + Kind: resource.Updated, + Entry: serviceToEntry(t, svc, spec), + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + t.Run("Delete", func(t *testing.T) { + g := NewGomegaWithT(t) + + // Delete the file. + deleteFiles(t, dir, fileName) + + // Expect the update event. + expected := resource.Event{ + Kind: resource.Deleted, + Entry: resource.Entry{ + ID: getID(&svc, spec), + }, + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) +} + +func TestMultipartEvents(t *testing.T) { + dir := createTempDir(t) + defer deleteTempDir(t, dir) + + // Copy a file to the dir + objs := copyAndParseFile(t, dir, "mixer.yaml", mixerYAML) + + // Start the source. + s := newOrFail(t, dir) + ch := startOrFail(t, s) + defer s.Stop() + + t.Run("Add", func(t *testing.T) { + for i := 0; i < len(objs); i++ { + t.Run(fmt.Sprintf("event_%d", i), func(t *testing.T) { + g := NewGomegaWithT(t) + + // Read the next event from the channel. + actual := events.Expect(t, ch) + + // Look up the object for this event. + var obj *unstructured.Unstructured + var spec schema.ResourceSpec + for _, o := range objs { + s := *kubeMeta.Types.Get(o.GetKind()) + if s.Target.Collection == actual.Entry.ID.Collection { + obj = o + spec = s + break + } + } + + g.Expect(obj).ToNot(BeNil()) + + obj.SetResourceVersion("v0") + expected := resource.Event{ + Kind: resource.Added, + Entry: unstructuredToEntry(t, obj, spec), + } + g.Expect(actual).To(Equal(expected)) + }) + } + }) + + // Expect the full sync event immediately after. + expectFullSync(t, ch) + + t.Run("Delete", func(t *testing.T) { + g := NewGomegaWithT(t) + // Now overwrite the file which removes the last resource. + _ = copyAndParseFile(t, dir, "mixer.yaml", mixerPartYAML) + obj := objs[2] + expected := resource.Event{ + Kind: resource.Deleted, + Entry: resource.Entry{ + ID: getID(obj, *kubeMeta.Types.Get(obj.GetKind())), + }, + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) +} + +func TestSnapshotDistribution(t *testing.T) { + dir := createTempDir(t) + defer deleteTempDir(t, dir) + + copyFile(t, dir, "virtual_services.yaml", virtualServiceYAML) + + // Create the source + s := newOrFail(t, dir) + + // Create a snapshot distributor. + d := runtime.NewInMemoryDistributor() + + // Create and start the runtime processor. + cfg := &runtime.Config{Mesh: meshconfig.NewInMemory()} + processor := runtime.NewProcessor(s, d, cfg) + err := processor.Start() + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + defer processor.Stop() + + // Wait for a snapshot to be distributed. + ch := make(chan bool) + listenerAction := func(sp sn.Snapshot) { + ch <- true + } + cancel := make(chan bool) + defer func() { close(cancel) }() + go d.ListenChanges(cancel, listenerAction) + select { + case <-ch: + return + case <-time.After(5 * time.Second): + t.Fatal("The snapshot should have been set") + } +} + +func createTempDir(t *testing.T) string { + t.Helper() + rootPath, err := ioutil.TempDir("", "configPath") + if err != nil { + t.Fatal(err) + } + return rootPath +} + +func deleteTempDir(t *testing.T, dir string) { + t.Helper() + err := os.RemoveAll(dir) + if err != nil { + t.Fatal(err) + } +} + +func copyAndParseSinglePartFile(t *testing.T, dir string, name string, content string) *unstructured.Unstructured { + t.Helper() + parts := copyAndParseFile(t, dir, name, content) + if len(parts) != 1 { + t.Fatalf("unexpected number of parts: %d", len(parts)) + } + return parts[0] +} + +func copyFile(t *testing.T, dir string, name string, content string) { + t.Helper() + err := ioutil.WriteFile(filepath.Join(dir, name), []byte(content), 0600) + if err != nil { + t.Fatal(err) + } +} + +func copyAndParseFile(t *testing.T, dir string, name string, content string) []*unstructured.Unstructured { + t.Helper() + copyFile(t, dir, name, content) + parts := strings.Split(content, "---\n") + out := make([]*unstructured.Unstructured, 0, len(parts)) + for _, part := range parts { + part = strings.TrimSpace(part) + if part != "" { + u := &unstructured.Unstructured{} + parseYaml(t, part, u) + out = append(out, u) + } + } + return out +} + +func deleteFiles(t *testing.T, dir string, files ...string) { + t.Helper() + for _, name := range files { + err := os.Remove(filepath.Join(dir, name)) + if err != nil { + t.Fatal(err) + } + } +} + +func newOrFail(t *testing.T, dir string) runtime.Source { + t.Helper() + s, err := fs.New(dir, kubeMeta.Types, cfg) + if err != nil { + t.Fatalf("Unexpected error found: %v", err) + } + + if s == nil { + t.Fatal("expected non-nil source") + } + return s +} + +func startOrFail(t *testing.T, s runtime.Source) chan resource.Event { + t.Helper() + g := NewGomegaWithT(t) + + ch := make(chan resource.Event, 1024) + err := s.Start(events.ChannelHandler(ch)) + g.Expect(err).To(BeNil()) + return ch +} + +func expectFullSync(t *testing.T, ch chan resource.Event) { + t.Helper() + g := NewGomegaWithT(t) + actual := events.ExpectOne(t, ch) + g.Expect(actual).To(Equal(resource.FullSyncEvent)) +} + +func parseYaml(t *testing.T, yamlContent string, out k8sRuntime.Object) { + if _, _, err := deserializer.Decode([]byte(yamlContent), nil, out); err != nil { + t.Fatal(err) + } +} + +func getID(obj metav1.Object, spec schema.ResourceSpec) resource.VersionedKey { + return resource.VersionedKey{ + Key: resource.Key{ + Collection: spec.Target.Collection, + FullName: resource.FullNameFromNamespaceAndName(obj.GetNamespace(), obj.GetName()), + }, + Version: resource.Version(obj.GetResourceVersion()), + } +} + +func unstructuredToEntry(t *testing.T, u *unstructured.Unstructured, spec schema.ResourceSpec) resource.Entry { + t.Helper() + // Convert the unstructured to a converter entry, which contains the spec proto. + key := resource.FullNameFromNamespaceAndName(u.GetNamespace(), u.GetName()) + entries, err := spec.Converter(cfg, spec.Target, key, spec.Kind, u) + if err != nil { + t.Fatal(err) + } + + if len(entries) == 0 { + t.Fatalf("no entries created for event") + } + + entry := entries[0] + return resource.Entry{ + ID: getID(u, spec), + Item: entry.Resource, + Metadata: entry.Metadata, + } +} + +func serviceToEntry(t *testing.T, svc coreV1.Service, spec schema.ResourceSpec) resource.Entry { + t.Helper() + + return resource.Entry{ + ID: getID(&svc, spec), + Item: &svc.Spec, + Metadata: resource.Metadata{ + CreateTime: svc.CreationTimestamp.Time, + Labels: svc.Labels, + Annotations: svc.Annotations, + }, + } +} diff --git a/galley/pkg/source/kube/builtin/source.go b/galley/pkg/source/kube/builtin/source.go new file mode 100644 index 000000000000..d1ed40fc1265 --- /dev/null +++ b/galley/pkg/source/kube/builtin/source.go @@ -0,0 +1,178 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package builtin + +import ( + "fmt" + "reflect" + "sync" + + "istio.io/istio/galley/pkg/runtime" + "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/galley/pkg/source/kube/log" + "istio.io/istio/galley/pkg/source/kube/schema" + "istio.io/istio/galley/pkg/source/kube/stats" + "istio.io/istio/galley/pkg/source/kube/tombstone" + + "k8s.io/client-go/informers" + "k8s.io/client-go/tools/cache" +) + +var _ runtime.Source = &source{} + +// New creates a new built-in source. If the type is not built-in, returns an error. +func New(sharedInformers informers.SharedInformerFactory, spec schema.ResourceSpec) (runtime.Source, error) { + t := types[spec.Kind] + if t == nil { + return nil, fmt.Errorf("unknown resource type: name='%s', gv='%v'", + spec.Singular, spec.GroupVersion()) + } + return newSource(sharedInformers, t), nil +} + +func newSource(sharedInformers informers.SharedInformerFactory, t *Type) runtime.Source { + return &source{ + t: t, + sharedInformers: sharedInformers, + } +} + +type source struct { + // Lock for changing the running state of the source + stateLock sync.Mutex + + // The built-in type that is processed by this source. + t *Type + + sharedInformers informers.SharedInformerFactory + informer cache.SharedIndexInformer + + // stopCh is used to quiesce the background activity during shutdown + stopCh chan struct{} + handler resource.EventHandler +} + +// Start the source. This will commence listening and dispatching of events. +func (s *source) Start(handler resource.EventHandler) error { + s.stateLock.Lock() + defer s.stateLock.Unlock() + + if s.stopCh != nil { + return fmt.Errorf("already synchronizing resources: name='%s', gv='%v'", + s.t.GetSpec().Singular, s.t.GetSpec().GroupVersion()) + } + if handler == nil { + return fmt.Errorf("invalid handler") + } + + log.Scope.Debugf("Starting source for %s(%v)", s.t.GetSpec().Singular, s.t.GetSpec().GroupVersion()) + + s.stopCh = make(chan struct{}) + s.handler = handler + + s.informer = s.t.NewInformer(s.sharedInformers) + s.informer.AddEventHandler( + cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + s.handleEvent(resource.Added, obj) + }, + UpdateFunc: func(old, new interface{}) { + if s.t.IsEqual(old, new) { + // Periodic resync will send update events for all known resources. + // Two different versions of the same resource will always have different RVs. + return + } + s.handleEvent(resource.Updated, new) + }, + DeleteFunc: func(obj interface{}) { + s.handleEvent(resource.Deleted, obj) + }, + }) + + // Start CRD shared informer background process. + go s.informer.Run(s.stopCh) + + // Send the an event after the cache syncs. + go func() { + _ = cache.WaitForCacheSync(s.stopCh, s.informer.HasSynced) + handler(resource.FullSyncEvent) + }() + + return nil +} + +// Stop the source. This will stop publishing of events. +func (s *source) Stop() { + s.stateLock.Lock() + defer s.stateLock.Unlock() + + if s.stopCh == nil { + log.Scope.Warn("built-in kubernetes source already stopped") + return + } + + close(s.stopCh) + s.stopCh = nil +} + +func (s *source) handleEvent(kind resource.EventKind, obj interface{}) { + object := s.t.ExtractObject(obj) + if object == nil { + if object = tombstone.RecoverResource(obj); object != nil { + // Tombstone recovery failed. + return + } + } + + fullName := resource.FullNameFromNamespaceAndName(object.GetNamespace(), object.GetName()) + + log.Scope.Debugf("Sending event: [%v] from: %s", kind, s.t.GetSpec().CanonicalResourceName()) + + event := resource.Event{ + Kind: kind, + Entry: resource.Entry{ + ID: resource.VersionedKey{ + Key: resource.Key{ + Collection: s.t.GetSpec().Target.Collection, + FullName: fullName, + }, + Version: resource.Version(object.GetResourceVersion()), + }, + Metadata: resource.Metadata{ + CreateTime: object.GetCreationTimestamp().Time, + Labels: object.GetLabels(), + Annotations: object.GetAnnotations(), + }, + }, + } + + switch kind { + case resource.Added, resource.Updated: + // Convert the object to a protobuf message. + item := s.t.ExtractResource(obj) + if item == nil { + msg := fmt.Sprintf("failed casting object to proto: %v", reflect.TypeOf(obj)) + log.Scope.Error(msg) + stats.RecordEventError(msg) + return + } + + event.Entry.Item = item + } + + log.Scope.Debugf("Dispatching source event: %v", event) + s.handler(event) + stats.RecordEventSuccess() +} diff --git a/galley/pkg/source/kube/builtin/source_test.go b/galley/pkg/source/kube/builtin/source_test.go new file mode 100644 index 000000000000..fd70e090b0e0 --- /dev/null +++ b/galley/pkg/source/kube/builtin/source_test.go @@ -0,0 +1,502 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package builtin_test + +import ( + "strings" + "testing" + "time" + + "github.com/gogo/protobuf/proto" + . "github.com/onsi/gomega" + + "istio.io/istio/galley/pkg/runtime" + "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/galley/pkg/source/kube/builtin" + "istio.io/istio/galley/pkg/source/kube/dynamic/converter" + "istio.io/istio/galley/pkg/source/kube/schema" + "istio.io/istio/galley/pkg/testing/events" + + "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/fake" +) + +const ( + name = "fakeResource" + namespace = "fakeNamespace" +) + +var ( + fakeCreateTime, _ = time.Parse(time.RFC3339, "2009-02-04T21:00:57-08:00") + fakeObjectMeta = metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + CreationTimestamp: metav1.Time{ + Time: fakeCreateTime, + }, + Labels: map[string]string{ + "lk1": "lv1", + }, + Annotations: map[string]string{ + "ak1": "av1", + }, + ResourceVersion: "rv1", + } +) + +func TestNewWithUnknownSpecShouldError(t *testing.T) { + client := fake.NewSimpleClientset() + informerFactory := informers.NewSharedInformerFactory(client, 0) + + spec := schema.ResourceSpec{ + Kind: "Unknown", + ListKind: "UnknownList", + Singular: "unknown", + Plural: "unknowns", + Version: "v1alpha1", + Group: "cofig.istio.io", + Converter: converter.Get("identity"), + } + _, err := builtin.New(informerFactory, spec) + if err == nil || !strings.Contains(err.Error(), "unknown") { + t.Fatalf("Expected error not found: %v", err) + } +} + +func TestStartWithNilHandlerShouldError(t *testing.T) { + g := NewGomegaWithT(t) + + // Create the source + _, informerFactory := kubeResources() + spec := builtin.GetType("Node").GetSpec() + s := newOrFail(t, informerFactory, spec) + + err := s.Start(nil) + g.Expect(err).ToNot(BeNil()) +} + +func TestStartTwiceShouldError(t *testing.T) { + g := NewGomegaWithT(t) + + // Start the source. + _, informerFactory := kubeResources() + spec := builtin.GetType("Node").GetSpec() + ch := make(chan resource.Event) + s := newOrFail(t, informerFactory, spec) + _ = startOrFail(t, s) + defer s.Stop() + + // Start again - should fail. + err := s.Start(events.ChannelHandler(ch)) + g.Expect(err).ToNot(BeNil()) +} + +func TestStopTwiceShouldSucceed(t *testing.T) { + // Start the source. + _, informerFactory := kubeResources() + spec := builtin.GetType("Node").GetSpec() + s := newOrFail(t, informerFactory, spec) + _ = startOrFail(t, s) + + // Stop the resource twice. + s.Stop() + s.Stop() +} + +func TestUnknownResourceShouldNotCreateEvent(t *testing.T) { + client, informerFactory := kubeResources() + spec := builtin.GetType("Node").GetSpec() + + // Start the source. + s := newOrFail(t, informerFactory, spec) + ch := startOrFail(t, s) + defer s.Stop() + + expectFullSync(t, ch) + + node := &v1.Node{ + ObjectMeta: fakeObjectMeta, + Spec: v1.NodeSpec{ + PodCIDR: "10.40.0.0/24", + }, + } + node.Namespace = "" // nodes don't have namespaces. + + // Add the resource. + g := NewGomegaWithT(t) + var err error + if node, err = client.CoreV1().Nodes().Create(node); err != nil { + t.Fatalf("failed creating node: %v", err) + } + expected := toEvent(resource.Added, spec, node, &node.Spec) + actual := events.ExpectOne(t, ch) + g.Expect(actual).To(Equal(expected)) +} + +func TestNodes(t *testing.T) { + client, informerFactory := kubeResources() + spec := builtin.GetType("Node").GetSpec() + + // Start the source. + s := newOrFail(t, informerFactory, spec) + ch := startOrFail(t, s) + defer s.Stop() + + expectFullSync(t, ch) + + node := &v1.Node{ + ObjectMeta: fakeObjectMeta, + Spec: v1.NodeSpec{ + PodCIDR: "10.40.0.0/24", + }, + } + node.Namespace = "" // nodes don't have namespaces. + + // Add the resource. + t.Run("Add", func(t *testing.T) { + g := NewGomegaWithT(t) + var err error + if node, err = client.CoreV1().Nodes().Create(node); err != nil { + t.Fatalf("failed creating node: %v", err) + } + expected := toEvent(resource.Added, spec, node, &node.Spec) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + // Update the resource. + t.Run("Update", func(t *testing.T) { + g := NewGomegaWithT(t) + node.Spec.PodCIDR = "10.20.0.0/32" + node.ResourceVersion = "rv2" + if _, err := client.CoreV1().Nodes().Update(node); err != nil { + t.Fatalf("failed updating node: %v", err) + } + expected := toEvent(resource.Updated, spec, node, &node.Spec) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + // Update event with no changes, should yield no events. + t.Run("UpdateNoChange", func(t *testing.T) { + if _, err := client.CoreV1().Nodes().Update(node); err != nil { + t.Fatalf("failed updating node: %v", err) + } + events.ExpectNone(t, ch) + }) + + // Delete the resource. + t.Run("Delete", func(t *testing.T) { + g := NewGomegaWithT(t) + if err := client.CoreV1().Nodes().Delete(node.Name, nil); err != nil { + t.Fatalf("failed deleting node: %v", err) + } + expected := toEvent(resource.Deleted, spec, node, nil) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) +} + +func TestPods(t *testing.T) { + client, informerFactory := kubeResources() + + spec := builtin.GetType("Pod").GetSpec() + s := newOrFail(t, informerFactory, spec) + defer s.Stop() + + // Start the source. + ch := startOrFail(t, s) + + expectFullSync(t, ch) + + pod := &v1.Pod{ + ObjectMeta: fakeObjectMeta, + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "c1", + Image: "someImage", + ImagePullPolicy: v1.PullIfNotPresent, + Ports: []v1.ContainerPort{ + { + Name: "http", + Protocol: v1.ProtocolTCP, + HostPort: 80, + }, + }, + }, + }, + }, + } + + // Add the resource. + t.Run("Add", func(t *testing.T) { + g := NewGomegaWithT(t) + var err error + if pod, err = client.CoreV1().Pods(namespace).Create(pod); err != nil { + t.Fatalf("failed creating pod: %v", err) + } + expected := toEvent(resource.Added, spec, pod, pod) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + // Update the resource. + t.Run("Update", func(t *testing.T) { + g := NewGomegaWithT(t) + pod.Spec.Containers[0].Name = "c2" + pod.ResourceVersion = "rv2" + if _, err := client.CoreV1().Pods(namespace).Update(pod); err != nil { + t.Fatalf("failed updating pod: %v", err) + } + expected := toEvent(resource.Updated, spec, pod, pod) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + // Update event with no changes, should yield no events. + t.Run("UpdateNoChange", func(t *testing.T) { + if _, err := client.CoreV1().Pods(namespace).Update(pod); err != nil { + t.Fatalf("failed updating pod: %v", err) + } + events.ExpectNone(t, ch) + }) + + // Delete the resource. + t.Run("Delete", func(t *testing.T) { + g := NewGomegaWithT(t) + if err := client.CoreV1().Pods(namespace).Delete(pod.Name, nil); err != nil { + t.Fatalf("failed deleting pod: %v", err) + } + expected := toEvent(resource.Deleted, spec, pod, nil) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) +} + +func TestServices(t *testing.T) { + client, informerFactory := kubeResources() + + spec := builtin.GetType("Service").GetSpec() + s := newOrFail(t, informerFactory, spec) + defer s.Stop() + + // Start the source. + ch := startOrFail(t, s) + + expectFullSync(t, ch) + + svc := &v1.Service{ + ObjectMeta: fakeObjectMeta, + Spec: v1.ServiceSpec{ + Type: v1.ServiceTypeClusterIP, + Ports: []v1.ServicePort{ + { + Name: "http", + Protocol: v1.ProtocolTCP, + Port: 80, + }, + }, + }, + } + + // Add the resource. + t.Run("Add", func(t *testing.T) { + g := NewGomegaWithT(t) + var err error + if svc, err = client.CoreV1().Services(namespace).Create(svc); err != nil { + t.Fatalf("failed creating service: %v", err) + } + expected := toEvent(resource.Added, spec, svc, &svc.Spec) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + // Update the resource. + t.Run("Update", func(t *testing.T) { + g := NewGomegaWithT(t) + svc.Spec.Ports[0].Port = 8080 + svc.ResourceVersion = "rv2" + if _, err := client.CoreV1().Services(namespace).Update(svc); err != nil { + t.Fatalf("failed updating service: %v", err) + } + expected := toEvent(resource.Updated, spec, svc, &svc.Spec) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + // Update event with no changes, should yield no events. + t.Run("UpdateNoChange", func(t *testing.T) { + if _, err := client.CoreV1().Services(namespace).Update(svc); err != nil { + t.Fatalf("failed updating service: %v", err) + } + events.ExpectNone(t, ch) + }) + + // Delete the resource. + t.Run("Delete", func(t *testing.T) { + g := NewGomegaWithT(t) + if err := client.CoreV1().Services(namespace).Delete(svc.Name, nil); err != nil { + t.Fatalf("failed deleting service: %v", err) + } + expected := toEvent(resource.Deleted, spec, svc, nil) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) +} + +func TestEndpoints(t *testing.T) { + client, informerFactory := kubeResources() + + spec := builtin.GetType("Endpoints").GetSpec() + s := newOrFail(t, informerFactory, spec) + defer s.Stop() + + // Start the source. + ch := startOrFail(t, s) + + expectFullSync(t, ch) + + eps := &v1.Endpoints{ + ObjectMeta: fakeObjectMeta, + Subsets: []v1.EndpointSubset{ + { + Addresses: []v1.EndpointAddress{ + { + Hostname: "fake.host.com", + IP: "10.40.0.0", + }, + }, + Ports: []v1.EndpointPort{ + { + Name: "http", + Protocol: v1.ProtocolTCP, + Port: 80, + }, + }, + }, + }, + } + + // Add the resource. + t.Run("Add", func(t *testing.T) { + g := NewGomegaWithT(t) + var err error + if eps, err = client.CoreV1().Endpoints(namespace).Create(eps); err != nil { + t.Fatalf("failed creating endpoints: %v", err) + } + expected := toEvent(resource.Added, spec, eps, eps) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + // Update the resource. + t.Run("Update", func(t *testing.T) { + g := NewGomegaWithT(t) + eps.Subsets[0].Ports[0].Port = 8080 + eps.ResourceVersion = "rv2" + if _, err := client.CoreV1().Endpoints(namespace).Update(eps); err != nil { + t.Fatalf("failed updating endpoints: %v", err) + } + expected := toEvent(resource.Updated, spec, eps, eps) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) + + // Update event with no changes, should yield no events. + t.Run("UpdateNoChange", func(t *testing.T) { + // Changing only the resource version, should have not result in an update. + eps.ResourceVersion = "rv3" + if _, err := client.CoreV1().Endpoints(namespace).Update(eps); err != nil { + t.Fatalf("failed updating endpoints: %v", err) + } + events.ExpectNone(t, ch) + }) + + // Delete the resource. + t.Run("Delete", func(t *testing.T) { + g := NewGomegaWithT(t) + if err := client.CoreV1().Endpoints(namespace).Delete(eps.Name, nil); err != nil { + t.Fatalf("failed deleting endpoints: %v", err) + } + expected := toEvent(resource.Deleted, spec, eps, nil) + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) +} + +func newOrFail(t *testing.T, informerFactory informers.SharedInformerFactory, spec *schema.ResourceSpec) runtime.Source { + t.Helper() + s, err := builtin.New(informerFactory, *spec) + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + if s == nil { + t.Fatal("Expected non nil source") + } + return s +} + +func startOrFail(t *testing.T, s runtime.Source) chan resource.Event { + t.Helper() + g := NewGomegaWithT(t) + + ch := make(chan resource.Event, 1024) + err := s.Start(events.ChannelHandler(ch)) + g.Expect(err).To(BeNil()) + + return ch +} + +func expectFullSync(t *testing.T, ch chan resource.Event) { + g := NewGomegaWithT(t) + // Wait for the full sync event. + actual := events.ExpectOne(t, ch) + g.Expect(actual).To(Equal(resource.FullSyncEvent)) +} + +func kubeResources() (kubernetes.Interface, informers.SharedInformerFactory) { + client := fake.NewSimpleClientset() + informerFactory := informers.NewSharedInformerFactoryWithOptions(client, 0, + informers.WithNamespace(namespace)) + return client, informerFactory +} + +func toEvent(kind resource.EventKind, spec *schema.ResourceSpec, objectMeta metav1.Object, + item proto.Message) resource.Event { + event := resource.Event{ + Kind: kind, + Entry: resource.Entry{ + ID: resource.VersionedKey{ + Key: resource.Key{ + Collection: spec.Target.Collection, + FullName: resource.FullNameFromNamespaceAndName(objectMeta.GetNamespace(), objectMeta.GetName()), + }, + Version: resource.Version(objectMeta.GetResourceVersion()), + }, + Metadata: resource.Metadata{ + CreateTime: fakeCreateTime, + Labels: objectMeta.GetLabels(), + Annotations: objectMeta.GetAnnotations(), + }, + Item: item, + }, + } + + return event +} diff --git a/galley/pkg/source/kube/builtin/testdata/endpoints.yaml b/galley/pkg/source/kube/builtin/testdata/endpoints.yaml new file mode 100644 index 000000000000..e95c902ae1ef --- /dev/null +++ b/galley/pkg/source/kube/builtin/testdata/endpoints.yaml @@ -0,0 +1,39 @@ +apiVersion: v1 +kind: Endpoints +metadata: + creationTimestamp: 2018-02-12T15:48:44Z + labels: + addonmanager.kubernetes.io/mode: Reconcile + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: KubeDNS + name: kube-dns + namespace: kube-system + resourceVersion: "50573380" + selfLink: /api/v1/namespaces/kube-system/endpoints/kube-dns + uid: 34991433-100c-11e8-a600-42010a8002c3 +subsets: +- addresses: + - ip: 10.40.0.5 + nodeName: gke-istio-test-default-pool-866a0405-420r + targetRef: + kind: Pod + name: kube-dns-548976df6c-kxnhb + namespace: kube-system + resourceVersion: "50573379" + uid: 66b0ca7d-f71d-11e8-af4f-42010a800072 + - ip: 10.40.1.4 + nodeName: gke-istio-test-default-pool-866a0405-ftch + targetRef: + kind: Pod + name: kube-dns-548976df6c-d9kkv + namespace: kube-system + resourceVersion: "50572715" + uid: dd4bbbd4-f71c-11e8-af4f-42010a800072 + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP diff --git a/galley/pkg/source/kube/builtin/testdata/node.yaml b/galley/pkg/source/kube/builtin/testdata/node.yaml new file mode 100644 index 000000000000..0c7cb33d22b2 --- /dev/null +++ b/galley/pkg/source/kube/builtin/testdata/node.yaml @@ -0,0 +1,191 @@ +apiVersion: v1 +kind: Node +metadata: + annotations: + container.googleapis.com/instance_id: "2787417306096525587" + node.alpha.kubernetes.io/ttl: "0" + volumes.kubernetes.io/controller-managed-attach-detach: "true" + creationTimestamp: 2018-10-05T19:40:48Z + labels: + beta.kubernetes.io/arch: amd64 + beta.kubernetes.io/fluentd-ds-ready: "true" + beta.kubernetes.io/instance-type: n1-standard-4 + beta.kubernetes.io/os: linux + cloud.google.com/gke-nodepool: default-pool + cloud.google.com/gke-os-distribution: cos + failure-domain.beta.kubernetes.io/region: us-central1 + failure-domain.beta.kubernetes.io/zone: us-central1-a + kubernetes.io/hostname: gke-istio-test-default-pool-866a0405-420r + name: gke-istio-test-default-pool-866a0405-420r + resourceVersion: "60695251" + selfLink: /api/v1/nodes/gke-istio-test-default-pool-866a0405-420r + uid: 8f63dfef-c8d6-11e8-8901-42010a800278 +spec: + externalID: "1929748586650271976" + podCIDR: 10.40.0.0/24 + providerID: gce://nathanmittler-istio-test/us-central1-a/gke-istio-test-default-pool-866a0405-420r +status: + addresses: + - address: 10.128.0.4 + type: InternalIP + - address: 35.238.214.129 + type: ExternalIP + - address: gke-istio-test-default-pool-866a0405-420r + type: Hostname + allocatable: + cpu: 3920m + ephemeral-storage: "47093746742" + hugepages-2Mi: "0" + memory: 12699980Ki + pods: "110" + capacity: + cpu: "4" + ephemeral-storage: 98868448Ki + hugepages-2Mi: "0" + memory: 15399244Ki + pods: "110" + conditions: + - lastHeartbeatTime: 2019-01-15T17:36:51Z + lastTransitionTime: 2018-12-03T17:00:58Z + message: node is functioning properly + reason: UnregisterNetDevice + status: "False" + type: FrequentUnregisterNetDevice + - lastHeartbeatTime: 2019-01-15T17:36:51Z + lastTransitionTime: 2018-12-03T16:55:56Z + message: kernel has no deadlock + reason: KernelHasNoDeadlock + status: "False" + type: KernelDeadlock + - lastHeartbeatTime: 2018-10-05T19:40:58Z + lastTransitionTime: 2018-10-05T19:40:58Z + message: RouteController created a route + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:55:57Z + message: kubelet has sufficient disk space available + reason: KubeletHasSufficientDisk + status: "False" + type: OutOfDisk + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:55:57Z + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:55:57Z + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-10-05T19:40:48Z + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:56:07Z + message: kubelet is posting ready status. AppArmor enabled + reason: KubeletReady + status: "True" + type: Ready + daemonEndpoints: + kubeletEndpoint: + Port: 10250 + images: + - names: + - gcr.io/stackdriver-agents/stackdriver-logging-agent@sha256:a33f69d0034fdce835a1eb7df8a051ea74323f3fc30d911bbd2e3f2aef09fc93 + - gcr.io/stackdriver-agents/stackdriver-logging-agent:0.3-1.5.34-1-k8s-1 + sizeBytes: 554981103 + - names: + - istio/examples-bookinfo-reviews-v3@sha256:8c0385f0ca799e655d8770b52cb4618ba54e8966a0734ab1aeb6e8b14e171a3b + - istio/examples-bookinfo-reviews-v3:1.9.0 + sizeBytes: 525074812 + - names: + - istio/examples-bookinfo-reviews-v2@sha256:d2483dcb235b27309680177726e4e86905d66e47facaf1d57ed590b2bf95c8ad + - istio/examples-bookinfo-reviews-v2:1.9.0 + sizeBytes: 525074812 + - names: + - istio/examples-bookinfo-reviews-v1@sha256:920d46b3c526376b28b90d0e895ca7682d36132e6338301fcbcd567ef81bde05 + - istio/examples-bookinfo-reviews-v1:1.9.0 + sizeBytes: 525074812 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:8cea2c055dd3d3ab78f99584256efcc1cff7d8ddbed11cded404e9d164235502 + sizeBytes: 448337138 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:9949bc22667ef88e54ae91700a64bf1459e8c14ed92b870b7ec2f630e14cf3c1 + sizeBytes: 446407220 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:fc1f957cfa26673768be8fa865066f730f22fde98a6e80654d00f755a643b507 + sizeBytes: 446407220 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:23a52850819d5196d66e8e20f4f63f314f779716f830e1d109ad0e24b1f0df43 + sizeBytes: 446407220 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:e338c2c5cbc379db24c5b2d67a4acc9cca9a069c2927217fca0ce7cbc582d312 + - gcr.io/nathanmittler-istio-test/proxyv2:latest + sizeBytes: 446398900 + - names: + - gcr.io/istio-release/proxyv2@sha256:dec972eab4f46c974feec1563ea484ad4995edf55ea91d42e148c5db04b3d4d2 + - gcr.io/istio-release/proxyv2:master-latest-daily + sizeBytes: 353271308 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:cb4a29362ff9014bf1d96e0ce2bb6337bf034908bb4a8d48af0628a4d8d64413 + sizeBytes: 344543156 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:9d502fd29961bc3464f7906ac0e86b07edf01cf4892352ef780e55b3525fb0b8 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:cdd2f527b4bd392b533d2d0e62c257c19d5a35a6b5fc3512aa327c560866aec1 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:6ec1dced4cee8569c77817927938fa4341f939e0dddab511bc3ee8724d652ae2 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:3f4115cd8c26a17f6bf8ea49f1ff5b875382bda5a6d46281c70c886e802666b0 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:4e75c42518bb46376cfe0b4fbaa3da1d8f1cea99f706736f1b0b04a3ac554db2 + sizeBytes: 344201616 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:58a7511f549448f6f86280559069bc57f5c754877ebec69da5bbc7ad55e42162 + sizeBytes: 344201616 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:7f60a750d15cda9918e9172e529270ce78c670751d4027f6adc6bdc84ec2d884 + sizeBytes: 344201436 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:6fc25c08212652c7539caaf0f6d913d929f84c54767f20066657ce0f4e6a51e0 + sizeBytes: 344193424 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:4e93825950c831ce6d2b65c9a80921c8860035e39a4b384d38d40f7d2cb2a4ee + sizeBytes: 344185232 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:842216399613774640a4605202d446cf61bd48ff20e12391a0239cbc6a8f2c77 + sizeBytes: 344185052 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:8ee2bb6fc5484373227b17e377fc226d8d19be11d38d6dbc304970bd46bc929b + sizeBytes: 344159662 + - names: + - gcr.io/nathanmittler-istio-test/pilot@sha256:b62e9f12609b89892bb38c858936f76d81aa3ccdc91a3961309f900c1c4f574b + sizeBytes: 307722351 + - names: + - gcr.io/nathanmittler-istio-test/pilot@sha256:2445d3c2839825be2decbafcd3f2668bdf148ba9acbbb855810006a58899f320 + sizeBytes: 307722351 + - names: + - gcr.io/nathanmittler-istio-test/pilot@sha256:ea8e501811c06674bb4b4622862e2d12e700f5edadc01a050030a0b33a6435a6 + sizeBytes: 307722351 + nodeInfo: + architecture: amd64 + bootID: 8f772c7c-09eb-41eb-8bb5-76ef214eaaa1 + containerRuntimeVersion: docker://17.3.2 + kernelVersion: 4.14.65+ + kubeProxyVersion: v1.11.3-gke.18 + kubeletVersion: v1.11.3-gke.18 + machineID: f325f89cd295bdcda652fd40f0049e32 + operatingSystem: linux + osImage: Container-Optimized OS from Google + systemUUID: F325F89C-D295-BDCD-A652-FD40F0049E32 diff --git a/galley/pkg/source/kube/builtin/testdata/pod.yaml b/galley/pkg/source/kube/builtin/testdata/pod.yaml new file mode 100644 index 000000000000..790b656f5d5f --- /dev/null +++ b/galley/pkg/source/kube/builtin/testdata/pod.yaml @@ -0,0 +1,283 @@ +apiVersion: v1 +kind: Pod +metadata: + annotations: + scheduler.alpha.kubernetes.io/critical-pod: "" + seccomp.security.alpha.kubernetes.io/pod: docker/default + creationTimestamp: 2018-12-03T16:59:57Z + generateName: kube-dns-548976df6c- + labels: + k8s-app: kube-dns + pod-template-hash: "1045328927" + name: kube-dns-548976df6c-d9kkv + namespace: kube-system + ownerReferences: + - apiVersion: apps/v1 + blockOwnerDeletion: true + controller: true + kind: ReplicaSet + name: kube-dns-548976df6c + uid: b589a851-f71b-11e8-af4f-42010a800072 + resourceVersion: "50572715" + selfLink: /api/v1/namespaces/kube-system/pods/kube-dns-548976df6c-d9kkv + uid: dd4bbbd4-f71c-11e8-af4f-42010a800072 +spec: + containers: + - args: + - --domain=cluster.local. + - --dns-port=10053 + - --config-dir=/kube-dns-config + - --v=2 + env: + - name: PROMETHEUS_PORT + value: "10055" + image: k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthcheck/kubedns + port: 10054 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: kubedns + ports: + - containerPort: 10053 + name: dns-local + protocol: UDP + - containerPort: 10053 + name: dns-tcp-local + protocol: TCP + - containerPort: 10055 + name: metrics + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /readiness + port: 8081 + scheme: HTTP + initialDelaySeconds: 3 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: + limits: + memory: 170Mi + requests: + cpu: 100m + memory: 70Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /kube-dns-config + name: kube-dns-config + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + - args: + - -v=2 + - -logtostderr + - -configDir=/etc/k8s/dns/dnsmasq-nanny + - -restartDnsmasq=true + - -- + - -k + - --cache-size=1000 + - --no-negcache + - --log-facility=- + - --server=/cluster.local/127.0.0.1#10053 + - --server=/in-addr.arpa/127.0.0.1#10053 + - --server=/ip6.arpa/127.0.0.1#10053 + image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthcheck/dnsmasq + port: 10054 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: dnsmasq + ports: + - containerPort: 53 + name: dns + protocol: UDP + - containerPort: 53 + name: dns-tcp + protocol: TCP + resources: + requests: + cpu: 150m + memory: 20Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /etc/k8s/dns/dnsmasq-nanny + name: kube-dns-config + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + - args: + - --v=2 + - --logtostderr + - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV + - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV + image: k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 5 + httpGet: + path: /metrics + port: 10054 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: sidecar + ports: + - containerPort: 10054 + name: metrics + protocol: TCP + resources: + requests: + cpu: 10m + memory: 20Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + - command: + - /monitor + - --component=kubedns + - --target-port=10054 + - --stackdriver-prefix=container.googleapis.com/internal/addons + - --api-override=https://monitoring.googleapis.com/ + - --whitelisted-metrics=probe_kubedns_latency_ms,probe_kubedns_errors,dnsmasq_misses,dnsmasq_hits + - --pod-id=$(POD_NAME) + - --namespace-id=$(POD_NAMESPACE) + - --v=2 + env: + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + image: gcr.io/google-containers/prometheus-to-sd:v0.2.3 + imagePullPolicy: IfNotPresent + name: prometheus-to-sd + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + dnsPolicy: Default + nodeName: gke-istio-test-default-pool-866a0405-ftch + priority: 2000000000 + priorityClassName: system-cluster-critical + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + serviceAccount: kube-dns + serviceAccountName: kube-dns + terminationGracePeriodSeconds: 30 + tolerations: + - key: CriticalAddonsOnly + operator: Exists + - effect: NoExecute + key: node.kubernetes.io/not-ready + operator: Exists + tolerationSeconds: 300 + - effect: NoExecute + key: node.kubernetes.io/unreachable + operator: Exists + tolerationSeconds: 300 + volumes: + - configMap: + defaultMode: 420 + name: kube-dns + optional: true + name: kube-dns-config + - name: kube-dns-token-lwn8l + secret: + defaultMode: 420 + secretName: kube-dns-token-lwn8l +status: + conditions: + - lastProbeTime: null + lastTransitionTime: 2018-12-03T17:00:00Z + status: "True" + type: Initialized + - lastProbeTime: null + lastTransitionTime: 2018-12-03T17:00:20Z + status: "True" + type: Ready + - lastProbeTime: null + lastTransitionTime: null + status: "True" + type: ContainersReady + - lastProbeTime: null + lastTransitionTime: 2018-12-03T16:59:57Z + status: "True" + type: PodScheduled + containerStatuses: + - containerID: docker://676f6c98bfa136315c4ccf0fe40e7a56cbf9ac85128e94310eae82f191246b3e + image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13 + imageID: docker-pullable://k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64@sha256:45df3e8e0c551bd0c79cdba48ae6677f817971dcbd1eeed7fd1f9a35118410e4 + lastState: {} + name: dnsmasq + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:14Z + - containerID: docker://93fd0664e150982dad0481c5260183308a7035a2f938ec50509d586ed586a107 + image: k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13 + imageID: docker-pullable://k8s.gcr.io/k8s-dns-kube-dns-amd64@sha256:618a82fa66cf0c75e4753369a6999032372be7308866fc9afb381789b1e5ad52 + lastState: {} + name: kubedns + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:10Z + - containerID: docker://e823b79a0a48af75f2eebb1c89ba4c31e8c1ee67ee0d917ac7b4891b67d2cd0f + image: gcr.io/google-containers/prometheus-to-sd:v0.2.3 + imageID: docker-pullable://gcr.io/google-containers/prometheus-to-sd@sha256:be220ec4a66275442f11d420033c106bb3502a3217a99c806eef3cf9858788a2 + lastState: {} + name: prometheus-to-sd + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:18Z + - containerID: docker://74223c401a8dac04b8bd29cdfedcb216881791b4e84bb80a15714991dd18735e + image: k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13 + imageID: docker-pullable://k8s.gcr.io/k8s-dns-sidecar-amd64@sha256:cedc8fe2098dffc26d17f64061296b7aa54258a31513b6c52df271a98bb522b3 + lastState: {} + name: sidecar + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:16Z + hostIP: 10.128.0.5 + phase: Running + podIP: 10.40.1.4 + qosClass: Burstable + startTime: 2018-12-03T17:00:00Z diff --git a/galley/pkg/source/kube/builtin/testdata/service.yaml b/galley/pkg/source/kube/builtin/testdata/service.yaml new file mode 100644 index 000000000000..7f205e1dcb83 --- /dev/null +++ b/galley/pkg/source/kube/builtin/testdata/service.yaml @@ -0,0 +1,34 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"addonmanager.kubernetes.io/mode":"Reconcile","k8s-app":"kube-dns","kubernetes.io/cluster-service":"true","kubernetes.io/name":"KubeDNS"},"name":"kube-dns","namespace":"kube-system"},"spec":{"clusterIP":"10.43.240.10","ports":[{"name":"dns","port":53,"protocol":"UDP"},{"name":"dns-tcp","port":53,"protocol":"TCP"}],"selector":{"k8s-app":"kube-dns"}}} + creationTimestamp: 2018-02-12T15:48:44Z + labels: + addonmanager.kubernetes.io/mode: Reconcile + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: KubeDNS + name: kube-dns + namespace: kube-system + resourceVersion: "274" + selfLink: /api/v1/namespaces/kube-system/services/kube-dns + uid: 3497d702-100c-11e8-a600-42010a8002c3 +spec: + clusterIP: 10.43.240.10 + ports: + - name: dns + port: 53 + protocol: UDP + targetPort: 53 + - name: dns-tcp + port: 53 + protocol: TCP + targetPort: 53 + selector: + k8s-app: kube-dns + sessionAffinity: None + type: ClusterIP +status: + loadBalancer: {} diff --git a/galley/pkg/source/kube/builtin/type.go b/galley/pkg/source/kube/builtin/type.go new file mode 100644 index 000000000000..b5c4b6e6e31e --- /dev/null +++ b/galley/pkg/source/kube/builtin/type.go @@ -0,0 +1,71 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package builtin + +import ( + "github.com/gogo/protobuf/proto" + + "istio.io/istio/galley/pkg/source/kube/schema" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/informers" + "k8s.io/client-go/tools/cache" +) + +// Type provides functions for a single built-in type. +type Type struct { + spec *schema.ResourceSpec + newInformer newInformerFn + isEqual resourceEqualFn + extractObject objectExtractFn + extractResource itemExtractFn + parseJSON parseJSONFn +} + +// GetSpec returns the schema.ResourceSpec associated with this built-in type. +func (p *Type) GetSpec() *schema.ResourceSpec { + return p.spec +} + +// IsEqual indicates if the two objects of this type are equivalent +func (p *Type) IsEqual(o1 interface{}, o2 interface{}) bool { + return p.isEqual(o1, o2) +} + +// ExtractObject extracts the k8s object metadata from the given object of this type. +func (p *Type) ExtractObject(o interface{}) metav1.Object { + return p.extractObject(o) +} + +// ExtractResource extracts the resource proto from the given object of this type. +func (p *Type) ExtractResource(o interface{}) proto.Message { + return p.extractResource(o) +} + +// NewInformer creates a new k8s informer for resources of this type. +func (p *Type) NewInformer(sharedInformers informers.SharedInformerFactory) cache.SharedIndexInformer { + return p.newInformer(sharedInformers) +} + +// ParseJSON parses the given JSON into a k8s object of this type. +func (p *Type) ParseJSON(input []byte) (interface{}, error) { + return p.parseJSON(input) +} + +type resourceEqualFn func(o1 interface{}, o2 interface{}) bool +type objectExtractFn func(o interface{}) metav1.Object +type itemExtractFn func(o interface{}) proto.Message +type newInformerFn func(sharedInformers informers.SharedInformerFactory) cache.SharedIndexInformer +type parseJSONFn func(input []byte) (interface{}, error) diff --git a/galley/pkg/source/kube/builtin/types.go b/galley/pkg/source/kube/builtin/types.go new file mode 100644 index 000000000000..0146d4ba8bd9 --- /dev/null +++ b/galley/pkg/source/kube/builtin/types.go @@ -0,0 +1,204 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package builtin + +import ( + "fmt" + "reflect" + + "github.com/gogo/protobuf/proto" + + kubeMeta "istio.io/istio/galley/pkg/metadata/kube" + "istio.io/istio/galley/pkg/source/kube/log" + "istio.io/istio/galley/pkg/source/kube/schema" + "istio.io/istio/galley/pkg/source/kube/stats" + + "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/informers" + "k8s.io/client-go/tools/cache" +) + +var ( + runtimeScheme = runtime.NewScheme() + codecs = serializer.NewCodecFactory(runtimeScheme) + deserializer = codecs.UniversalDeserializer() + + types = map[string]*Type{ + "Service": { + spec: getSpec("Service"), + isEqual: resourceVersionsMatch, + extractObject: func(o interface{}) metav1.Object { + if obj, ok := o.(metav1.Object); ok { + return obj + } + return nil + }, + extractResource: func(o interface{}) proto.Message { + if obj, ok := o.(*v1.Service); ok { + return &obj.Spec + } + return nil + }, + newInformer: func(sharedInformers informers.SharedInformerFactory) cache.SharedIndexInformer { + return sharedInformers.Core().V1().Services().Informer() + }, + parseJSON: func(input []byte) (interface{}, error) { + out := &v1.Service{} + if _, _, err := deserializer.Decode(input, nil, out); err != nil { + return nil, err + } + return out, nil + }, + }, + "Node": { + spec: getSpec("Node"), + isEqual: resourceVersionsMatch, + extractObject: func(o interface{}) metav1.Object { + if obj, ok := o.(metav1.Object); ok { + return obj + } + return nil + }, + extractResource: func(o interface{}) proto.Message { + if obj, ok := o.(*v1.Node); ok { + return &obj.Spec + } + return nil + }, + newInformer: func(sharedInformers informers.SharedInformerFactory) cache.SharedIndexInformer { + return sharedInformers.Core().V1().Nodes().Informer() + }, + parseJSON: func(input []byte) (interface{}, error) { + out := &v1.Node{} + if _, _, err := deserializer.Decode(input, nil, out); err != nil { + return nil, err + } + return out, nil + }, + }, + "Pod": { + spec: getSpec("Pod"), + isEqual: resourceVersionsMatch, + extractObject: func(o interface{}) metav1.Object { + if obj, ok := o.(metav1.Object); ok { + return obj + } + return nil + }, + extractResource: func(o interface{}) proto.Message { + if obj, ok := o.(*v1.Pod); ok { + return obj + } + return nil + }, + newInformer: func(sharedInformers informers.SharedInformerFactory) cache.SharedIndexInformer { + return sharedInformers.Core().V1().Pods().Informer() + }, + parseJSON: func(input []byte) (interface{}, error) { + out := &v1.Pod{} + if _, _, err := deserializer.Decode(input, nil, out); err != nil { + return nil, err + } + return out, nil + }, + }, + "Endpoints": { + spec: getSpec("Endpoints"), + isEqual: func(o1 interface{}, o2 interface{}) bool { + r1, ok1 := o1.(*v1.Endpoints) + r2, ok2 := o2.(*v1.Endpoints) + if !ok1 || !ok2 { + msg := fmt.Sprintf("error decoding kube endpoints during update, o1 type: %v, o2 type: %v", + reflect.TypeOf(o1), + reflect.TypeOf(o2)) + log.Scope.Error(msg) + stats.RecordEventError(msg) + return false + } + // Endpoint updates can be noisy. Make sure that the subsets have actually changed. + return reflect.DeepEqual(r1.Subsets, r2.Subsets) + }, + extractObject: func(o interface{}) metav1.Object { + if obj, ok := o.(metav1.Object); ok { + return obj + } + return nil + }, + extractResource: func(o interface{}) proto.Message { + // TODO(nmittler): This copies ObjectMeta since Endpoints have no spec. + if obj, ok := o.(*v1.Endpoints); ok { + return obj + } + return nil + }, + newInformer: func(sharedInformers informers.SharedInformerFactory) cache.SharedIndexInformer { + return sharedInformers.Core().V1().Endpoints().Informer() + }, + parseJSON: func(input []byte) (interface{}, error) { + out := &v1.Endpoints{} + if _, _, err := deserializer.Decode(input, nil, out); err != nil { + return nil, err + } + return out, nil + }, + }, + } +) + +func getSpec(kind string) *schema.ResourceSpec { + spec := kubeMeta.Types.Get(kind) + if spec == nil { + panic("spec undefined: " + kind) + } + return spec +} + +// IsBuiltIn indicates whether there is a built-in source for the given kind. +func IsBuiltIn(kind string) bool { + _, ok := types[kind] + return ok +} + +// GetType returns the built-in Type for the given kind, or nil if the kind is unsupported. +func GetType(kind string) *Type { + return types[kind] +} + +// GetSchema returns the schema for all built-in types. +func GetSchema() *schema.Instance { + b := schema.NewBuilder() + for _, p := range types { + b.Add(*p.GetSpec()) + } + return b.Build() +} + +// resourceVersionsMatch is a resourceEqualFn that determines equality by the resource version. +func resourceVersionsMatch(o1 interface{}, o2 interface{}) bool { + r1, ok1 := o1.(metav1.Object) + r2, ok2 := o2.(metav1.Object) + if !ok1 || !ok2 { + msg := fmt.Sprintf("error decoding kube objects during update, o1 type: %v, o2 type: %v", + reflect.TypeOf(o1), + reflect.TypeOf(o2)) + log.Scope.Error(msg) + stats.RecordEventError(msg) + return false + } + return r1.GetResourceVersion() == r2.GetResourceVersion() +} diff --git a/galley/pkg/source/kube/builtin/types_test.go b/galley/pkg/source/kube/builtin/types_test.go new file mode 100644 index 000000000000..18173e837c88 --- /dev/null +++ b/galley/pkg/source/kube/builtin/types_test.go @@ -0,0 +1,229 @@ +package builtin_test + +import ( + "io/ioutil" + "path/filepath" + "testing" + + "github.com/ghodss/yaml" + "github.com/gogo/protobuf/proto" + . "github.com/onsi/gomega" + + "istio.io/istio/galley/pkg/source/kube/builtin" + + coreV1 "k8s.io/api/core/v1" + metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func TestParse(t *testing.T) { + t.Run("Endpoints", func(t *testing.T) { + g := NewGomegaWithT(t) + input := getJSON(t, "endpoints.yaml") + + objMeta, objResource := parse(t, input, "Endpoints") + + // Just validate a couple of things... + _, ok := objResource.(*coreV1.Endpoints) + if !ok { + t.Fatal("failed casting item to Endpoints") + } + g.Expect(objMeta.GetName()).To(Equal("kube-dns")) + }) + + t.Run("Node", func(t *testing.T) { + g := NewGomegaWithT(t) + input := getJSON(t, "node.yaml") + + objMeta, objResource := parse(t, input, "Node") + + // Just validate a couple of things... + _, ok := objResource.(*coreV1.NodeSpec) + if !ok { + t.Fatal("failed casting item to NodeSpec") + } + g.Expect(objMeta.GetName()).To(Equal("gke-istio-test-default-pool-866a0405-420r")) + }) + + t.Run("Pod", func(t *testing.T) { + g := NewGomegaWithT(t) + input := getJSON(t, "pod.yaml") + + objMeta, objResource := parse(t, input, "Pod") + + // Just validate a couple of things... + _, ok := objResource.(*coreV1.Pod) + if !ok { + t.Fatal("failed casting item to Pod") + } + g.Expect(objMeta.GetName()).To(Equal("kube-dns-548976df6c-d9kkv")) + }) + + t.Run("Service", func(t *testing.T) { + g := NewGomegaWithT(t) + input := getJSON(t, "service.yaml") + + objMeta, objResource := parse(t, input, "Service") + + // Just validate a couple of things... + _, ok := objResource.(*coreV1.ServiceSpec) + if !ok { + t.Fatal("failed casting item to ServiceSpec") + } + g.Expect(objMeta.GetName()).To(Equal("kube-dns")) + }) +} + +func TestEquals(t *testing.T) { + g := NewGomegaWithT(t) + + for _, spec := range builtin.GetSchema().All() { + bt := builtin.GetType(spec.Kind) + + t.Run(spec.Kind, func(t *testing.T) { + // First, test nils + t.Run("Nils", func(t *testing.T) { + obj := empty(spec.Kind) + actual := bt.IsEqual(&struct{}{}, obj) + g.Expect(actual).To(BeFalse()) + actual = bt.IsEqual(obj, &struct{}{}) + g.Expect(actual).To(BeFalse()) + }) + + t.Run("Equal", func(t *testing.T) { + if spec.Kind == "Endpoints" { + // Equal if subsets match, regardless of the rest. + actual := bt.IsEqual(&coreV1.Endpoints{ + ObjectMeta: metaV1.ObjectMeta{ + ResourceVersion: "v1", + }, + }, &coreV1.Endpoints{ + ObjectMeta: metaV1.ObjectMeta{ + ResourceVersion: "v2", + }, + }) + g.Expect(actual).To(BeTrue()) + } else { + // All other types use the resource version alone. + o1 := empty(spec.Kind) + o1.SetResourceVersion("v0") + o1.SetName("bob") + + o2 := empty(spec.Kind) + o2.SetResourceVersion("v0") + actual := bt.IsEqual(o1, o2) + g.Expect(actual).To(BeTrue()) + } + }) + + t.Run("NotEqual", func(t *testing.T) { + if spec.Kind == "Endpoints" { + // Not Equal if subsets differ + actual := bt.IsEqual(&coreV1.Endpoints{ + Subsets: []coreV1.EndpointSubset{ + { + Addresses: []coreV1.EndpointAddress{ + { + Hostname: "somehost.com", + }, + }, + }, + }, + }, &coreV1.Endpoints{ + ObjectMeta: metaV1.ObjectMeta{ + ResourceVersion: "v2", + }, + }) + g.Expect(actual).To(BeFalse()) + } else { + // All other types use the resource version alone. + o1 := empty(spec.Kind) + o1.SetResourceVersion("v0") + + o2 := empty(spec.Kind) + o2.SetResourceVersion("v1") + actual := bt.IsEqual(o1, o2) + g.Expect(actual).To(BeFalse()) + } + }) + }) + } +} + +func TestExtractObject(t *testing.T) { + for _, spec := range builtin.GetSchema().All() { + bt := builtin.GetType(spec.Kind) + + t.Run(spec.Kind, func(t *testing.T) { + t.Run("WrongTypeShouldReturnNil", func(t *testing.T) { + out := bt.ExtractObject(struct{}{}) + g := NewGomegaWithT(t) + g.Expect(out).To(BeNil()) + }) + + t.Run("Success", func(t *testing.T) { + out := bt.ExtractObject(empty(spec.Kind)) + g := NewGomegaWithT(t) + g.Expect(out).ToNot(BeNil()) + }) + }) + } +} + +func TestExtractResource(t *testing.T) { + for _, spec := range builtin.GetSchema().All() { + bt := builtin.GetType(spec.Kind) + + t.Run(spec.Kind, func(t *testing.T) { + t.Run("WrongTypeShouldReturnNil", func(t *testing.T) { + out := bt.ExtractResource(struct{}{}) + g := NewGomegaWithT(t) + g.Expect(out).To(BeNil()) + }) + + t.Run("Success", func(t *testing.T) { + out := bt.ExtractResource(empty(spec.Kind)) + g := NewGomegaWithT(t) + g.Expect(out).ToNot(BeNil()) + }) + }) + } +} + +func getJSON(t *testing.T, fileName string) []byte { + t.Helper() + g := NewGomegaWithT(t) + + inputYaml, err := ioutil.ReadFile(filepath.Join("testdata", fileName)) + g.Expect(err).To(BeNil()) + + inputJson, err := yaml.YAMLToJSON(inputYaml) + g.Expect(err).To(BeNil()) + + return inputJson +} + +func parse(t *testing.T, input []byte, kind string) (metaV1.Object, proto.Message) { + t.Helper() + g := NewGomegaWithT(t) + + bt := builtin.GetType(kind) + obj, err := bt.ParseJSON(input) + g.Expect(err).To(BeNil()) + + return bt.ExtractObject(obj), bt.ExtractResource(obj) +} + +func empty(kind string) metaV1.Object { + switch kind { + case "Node": + return &coreV1.Node{} + case "Service": + return &coreV1.Service{} + case "Pod": + return &coreV1.Pod{} + case "Endpoints": + return &coreV1.Endpoints{} + default: + panic("unsupported kind") + } +} diff --git a/galley/pkg/source/kube/client/interfaces.go b/galley/pkg/source/kube/client/interfaces.go index 1a926d30254a..f4b87f2e5d21 100644 --- a/galley/pkg/source/kube/client/interfaces.go +++ b/galley/pkg/source/kube/client/interfaces.go @@ -17,6 +17,7 @@ package client import ( "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" "k8s.io/client-go/dynamic" + "k8s.io/client-go/kubernetes" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" // import GKE cluster authentication plugin "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -27,6 +28,7 @@ import ( type Interfaces interface { DynamicInterface() (dynamic.Interface, error) APIExtensionsClientset() (clientset.Interface, error) + KubeClient() (kubernetes.Interface, error) } type kube struct { @@ -61,3 +63,8 @@ func (k *kube) DynamicInterface() (dynamic.Interface, error) { func (k *kube) APIExtensionsClientset() (clientset.Interface, error) { return clientset.NewForConfig(k.cfg) } + +// KubeClient returns a new kubernetes Interface client. +func (k *kube) KubeClient() (kubernetes.Interface, error) { + return kubernetes.NewForConfig(k.cfg) +} diff --git a/galley/pkg/source/kube/client/interfaces_test.go b/galley/pkg/source/kube/client/interfaces_test.go index bab458fe67de..57251fa141a6 100644 --- a/galley/pkg/source/kube/client/interfaces_test.go +++ b/galley/pkg/source/kube/client/interfaces_test.go @@ -12,18 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -package client +package client_test import ( "testing" + . "github.com/onsi/gomega" + + "istio.io/istio/galley/pkg/source/kube/client" + "k8s.io/client-go/rest" ) func TestCreateConfig(t *testing.T) { - k := kube{ - cfg: &rest.Config{}, - } + k := client.NewKube(&rest.Config{}) if _, err := k.DynamicInterface(); err != nil { t.Fatalf("Unexpected error: %v", err) @@ -31,9 +33,18 @@ func TestCreateConfig(t *testing.T) { if _, err := k.APIExtensionsClientset(); err != nil { t.Fatalf("Unexpected error: %v", err) } + if _, err := k.KubeClient(); err != nil { + t.Fatalf("Unexpected error: %v", err) + } +} + +func TestNewKubeWithInvalidConfigFileShouldFail(t *testing.T) { + g := NewGomegaWithT(t) + _, err := client.NewKubeFromConfigFile("badconfigfile") + g.Expect(err).ToNot(BeNil()) } func TestNewKube(t *testing.T) { // Should not panic - _ = NewKube(&rest.Config{}) + _ = client.NewKube(&rest.Config{}) } diff --git a/galley/pkg/source/kube/dynamic/converter/converter.go b/galley/pkg/source/kube/dynamic/converter/converter.go index 77e58db1eef0..f3a27d293402 100644 --- a/galley/pkg/source/kube/dynamic/converter/converter.go +++ b/galley/pkg/source/kube/dynamic/converter/converter.go @@ -17,12 +17,8 @@ package converter import ( "encoding/json" "fmt" - "time" "github.com/gogo/protobuf/proto" - corev1 "k8s.io/api/core/v1" - extensions "k8s.io/api/extensions/v1beta1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" authn "istio.io/api/authentication/v1alpha1" meshconfig "istio.io/api/mesh/v1alpha1" @@ -30,6 +26,10 @@ import ( "istio.io/istio/galley/pkg/runtime/resource" "istio.io/istio/pilot/pkg/serviceregistry/kube" "istio.io/istio/pkg/log" + + corev1 "k8s.io/api/core/v1" + extensions "k8s.io/api/extensions/v1beta1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" ) var scope = log.RegisterScope("kube-converter", "Kubernetes conversion related packages", 0) @@ -39,10 +39,9 @@ type Fn func(cfg *Config, destination resource.Info, name resource.FullName, kin // Entry is a single converted entry. type Entry struct { - Key resource.FullName - Metadata resource.Metadata - CreationTime time.Time - Resource proto.Message + Key resource.FullName + Metadata resource.Metadata + Resource proto.Message } var converters = func() map[string]Fn { @@ -81,23 +80,21 @@ func convertJSON(from, to interface{}) error { func identity(_ *Config, destination resource.Info, name resource.FullName, _ string, u *unstructured.Unstructured) ([]Entry, error) { var p proto.Message - creationTime := time.Time{} var metadata resource.Metadata if u != nil { var err error if p, err = toProto(destination, u.Object["spec"]); err != nil { return nil, err } - creationTime = u.GetCreationTimestamp().Time + metadata.CreateTime = u.GetCreationTimestamp().Time metadata.Labels = u.GetLabels() metadata.Annotations = u.GetAnnotations() } e := Entry{ - Key: name, - CreationTime: creationTime, - Metadata: metadata, - Resource: p, + Key: name, + Metadata: metadata, + Resource: p, } return []Entry{e}, nil @@ -109,20 +106,19 @@ func nilConverter(_ *Config, _ resource.Info, _ resource.FullName, _ string, _ * func authPolicyResource(_ *Config, destination resource.Info, name resource.FullName, _ string, u *unstructured.Unstructured) ([]Entry, error) { var p proto.Message - creationTime := time.Time{} var metadata resource.Metadata if u != nil { var err error if p, err = toProto(destination, u.Object["spec"]); err != nil { return nil, err } - creationTime = u.GetCreationTimestamp().Time metadata.Labels = u.GetLabels() metadata.Annotations = u.GetAnnotations() + metadata.CreateTime = u.GetCreationTimestamp().Time policy, ok := p.(*authn.Policy) if !ok { - return nil, fmt.Errorf("object is not of type %v", destination.Collection) + return nil, fmt.Errorf("object is not of type %v", destination.TypeURL) } // The pilot authentication plugin's config handling allows the mtls @@ -159,18 +155,16 @@ func authPolicyResource(_ *Config, destination resource.Info, name resource.Full } e := Entry{ - Key: name, - CreationTime: creationTime, - Metadata: metadata, - Resource: p, + Key: name, + Metadata: metadata, + Resource: p, } return []Entry{e}, nil } func kubeIngressResource(cfg *Config, _ resource.Info, name resource.FullName, _ string, u *unstructured.Unstructured) ([]Entry, error) { - creationTime := time.Time{} - var metadata resource.Metadata + metadata := resource.Metadata{} var p *extensions.IngressSpec if u != nil { ing := &extensions.Ingress{} @@ -178,9 +172,9 @@ func kubeIngressResource(cfg *Config, _ resource.Info, name resource.FullName, _ return nil, err } - creationTime = u.GetCreationTimestamp().Time metadata.Labels = u.GetLabels() metadata.Annotations = u.GetAnnotations() + metadata.CreateTime = u.GetCreationTimestamp().Time if !shouldProcessIngress(cfg, ing) { return nil, nil @@ -190,10 +184,9 @@ func kubeIngressResource(cfg *Config, _ resource.Info, name resource.FullName, _ } e := Entry{ - Key: name, - CreationTime: creationTime, - Metadata: metadata, - Resource: p, + Key: name, + Metadata: metadata, + Resource: p, } return []Entry{e}, nil @@ -218,11 +211,11 @@ func kubeServiceResource(cfg *Config, _ resource.Info, name resource.FullName, _ }) } return []Entry{{ - Key: name, - CreationTime: service.CreationTimestamp.Time, + Key: name, Metadata: resource.Metadata{ Labels: service.Labels, Annotations: service.Annotations, + CreateTime: service.CreationTimestamp.Time, }, Resource: &se, }}, nil diff --git a/galley/pkg/source/kube/dynamic/converter/converter_test.go b/galley/pkg/source/kube/dynamic/converter/converter_test.go index 74eb85466320..73266729f855 100644 --- a/galley/pkg/source/kube/dynamic/converter/converter_test.go +++ b/galley/pkg/source/kube/dynamic/converter/converter_test.go @@ -25,7 +25,7 @@ import ( corev1 "k8s.io/api/core/v1" "k8s.io/api/extensions/v1beta1" extensions "k8s.io/api/extensions/v1beta1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/util/intstr" @@ -109,16 +109,15 @@ func TestIdentity(t *testing.T) { t.Fatalf("Keys mismatch. Wanted=%s, Got=%s", key, entries[0].Key) } - if !entries[0].CreationTime.Equal(fakeCreateTime) { + if !entries[0].Metadata.CreateTime.Equal(fakeCreateTime) { t.Fatalf("createTime mismatch: got %q want %q", - entries[0].CreationTime, fakeCreateTime) + entries[0].Metadata.CreateTime, fakeCreateTime) } actual := entries[0] expected := Entry{ - Key: key, - CreationTime: fakeCreateTime.Local(), + Key: key, Metadata: resource.Metadata{ Annotations: map[string]string{ "a1_key": "a1_value", @@ -128,6 +127,7 @@ func TestIdentity(t *testing.T) { "l1_key": "l1_value", "l2_key": "l2_value", }, + CreateTime: fakeCreateTime.Local(), }, Resource: &types.Struct{ Fields: map[string]*types.Value{ @@ -240,8 +240,7 @@ func TestAuthPolicyResource(t *testing.T) { }, }, want: Entry{ - Key: resource.FullNameFromNamespaceAndName("default", "foo"), - CreationTime: fakeCreateTime.Local(), + Key: resource.FullNameFromNamespaceAndName("default", "foo"), Metadata: resource.Metadata{ Annotations: map[string]string{ "a1_key": "a1_value", @@ -251,6 +250,7 @@ func TestAuthPolicyResource(t *testing.T) { "l1_key": "l1_value", "l2_key": "l2_value", }, + CreateTime: fakeCreateTime.Local(), }, Resource: &authn.Policy{ Targets: []*authn.TargetSelector{{ @@ -295,8 +295,7 @@ func TestAuthPolicyResource(t *testing.T) { }, }, want: Entry{ - Key: resource.FullNameFromNamespaceAndName("default", "foo"), - CreationTime: fakeCreateTime.Local(), + Key: resource.FullNameFromNamespaceAndName("default", "foo"), Metadata: resource.Metadata{ Annotations: map[string]string{ "a1_key": "a1_value", @@ -306,6 +305,7 @@ func TestAuthPolicyResource(t *testing.T) { "l1_key": "l1_value", "l2_key": "l2_value", }, + CreateTime: fakeCreateTime.Local(), }, Resource: &authn.Policy{ Targets: []*authn.TargetSelector{{ @@ -413,8 +413,7 @@ func TestKubeIngressResource(t *testing.T) { }, want: Entry{ - Key: resource.FullNameFromNamespaceAndName("default", "foo"), - CreationTime: fakeCreateTime.Local(), + Key: resource.FullNameFromNamespaceAndName("default", "foo"), Metadata: resource.Metadata{ Annotations: map[string]string{ "a1_key": "a1_value", @@ -424,6 +423,7 @@ func TestKubeIngressResource(t *testing.T) { "l1_key": "l1_value", "l2_key": "l2_value", }, + CreateTime: fakeCreateTime.Local(), }, Resource: nil, }, @@ -459,8 +459,7 @@ func TestKubeIngressResource(t *testing.T) { }, want: Entry{ - Key: resource.FullNameFromNamespaceAndName("default", "foo"), - CreationTime: fakeCreateTime.Local(), + Key: resource.FullNameFromNamespaceAndName("default", "foo"), Metadata: resource.Metadata{ Annotations: map[string]string{ "kubernetes.io/ingress.class": "cls", @@ -469,6 +468,7 @@ func TestKubeIngressResource(t *testing.T) { "l1_key": "l1_value", "l2_key": "l2_value", }, + CreateTime: fakeCreateTime.Local(), }, Resource: &extensions.IngressSpec{ Backend: &extensions.IngressBackend{ @@ -543,7 +543,7 @@ func TestShouldProcessIngress(t *testing.T) { for _, c := range cases { ing := v1beta1.Ingress{ - ObjectMeta: meta_v1.ObjectMeta{ + ObjectMeta: metaV1.ObjectMeta{ Name: "test-ingress", Namespace: "default", Annotations: make(map[string]string), @@ -582,10 +582,10 @@ func TestKubeServiceResource(t *testing.T) { { name: "Simple", from: corev1.Service{ - ObjectMeta: meta_v1.ObjectMeta{ + ObjectMeta: metaV1.ObjectMeta{ Name: "reviews", Namespace: "default", - CreationTimestamp: meta_v1.Time{Time: fakeCreateTime}, + CreationTimestamp: metaV1.Time{Time: fakeCreateTime}, Annotations: map[string]string{ "a1_key": "a1_value", "a2_key": "a2_value", @@ -620,8 +620,7 @@ func TestKubeServiceResource(t *testing.T) { }, }, want: Entry{ - Key: resource.FullNameFromNamespaceAndName("default", "reviews"), - CreationTime: fakeCreateTime.Local(), + Key: resource.FullNameFromNamespaceAndName("default", "reviews"), Metadata: resource.Metadata{ Annotations: map[string]string{ "a1_key": "a1_value", @@ -631,6 +630,7 @@ func TestKubeServiceResource(t *testing.T) { "l1_key": "l1_value", "l2_key": "l2_value", }, + CreateTime: fakeCreateTime.Local(), }, Resource: &networking.ServiceEntry{ Hosts: []string{"reviews.default.svc.cluster.local"}, diff --git a/galley/pkg/source/kube/dynamic/converter/proto_test.go b/galley/pkg/source/kube/dynamic/converter/proto_test.go index da8914ac709b..4ef87d92546c 100644 --- a/galley/pkg/source/kube/dynamic/converter/proto_test.go +++ b/galley/pkg/source/kube/dynamic/converter/proto_test.go @@ -18,7 +18,7 @@ import ( "reflect" "testing" - gogo_types "github.com/gogo/protobuf/types" + gogoTypes "github.com/gogo/protobuf/types" "istio.io/istio/galley/pkg/runtime/resource" ) @@ -36,7 +36,7 @@ func TestToProto_Success(t *testing.T) { t.Fatalf("unexpected error: %v", err) } - var expected = &gogo_types.Empty{} + var expected = &gogoTypes.Empty{} if !reflect.DeepEqual(p, expected) { t.Fatalf("Mismatch\nExpected:\n%+v\nActual:\n%+v\n", expected, p) } diff --git a/galley/pkg/source/kube/dynamic/listener.go b/galley/pkg/source/kube/dynamic/listener.go deleted file mode 100644 index 65e8992009da..000000000000 --- a/galley/pkg/source/kube/dynamic/listener.go +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2018 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package dynamic - -import ( - "fmt" - "reflect" - "sync" - "time" - - "istio.io/istio/galley/pkg/runtime/resource" - "istio.io/istio/galley/pkg/source/kube/client" - "istio.io/istio/galley/pkg/source/kube/log" - "istio.io/istio/galley/pkg/source/kube/schema" - "istio.io/istio/galley/pkg/source/kube/stats" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" - runtimeSchema "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/dynamic" - "k8s.io/client-go/tools/cache" -) - -// processorFn is a callback function that will receive change events back from listener. -type processorFn func( - l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) - -// listener is a simplified client interface for listening/getting Kubernetes resources in an unstructured way. -type listener struct { - // Lock for changing the running state of the listener - stateLock sync.Mutex - - spec schema.ResourceSpec - - resyncPeriod time.Duration - - // The dynamic resource interface for accessing custom resources dynamically. - resourceClient dynamic.ResourceInterface - - // stopCh is used to quiesce the background activity during shutdown - stopCh chan struct{} - - // SharedIndexInformer for watching/caching resources - informer cache.SharedIndexInformer - - // The processor function to invoke to send the incoming changes. - processor processorFn -} - -// newListener returns a new instance of an listener. -func newListener( - kubeInterface client.Interfaces, resyncPeriod time.Duration, spec schema.ResourceSpec, processor processorFn) (*listener, error) { - - if log.Scope.DebugEnabled() { - log.Scope.Debugf("Creating a new resource listener for: name='%s', gv:'%v'", spec.Singular, spec.GroupVersion()) - } - - c, err := kubeInterface.DynamicInterface() - if err != nil { - log.Scope.Debugf("Error creating dynamic interface: %s: %v", spec.CanonicalResourceName(), err) - return nil, err - } - - resourceClient := c.Resource(spec.GroupVersion().WithResource(spec.Plural)) - - return &listener{ - spec: spec, - resyncPeriod: resyncPeriod, - resourceClient: resourceClient, - processor: processor, - }, nil -} - -// Start the listener. This will commence listening and dispatching of events. -func (l *listener) start() { - l.stateLock.Lock() - defer l.stateLock.Unlock() - - if l.stopCh != nil { - log.Scope.Errorf("already synchronizing resources: name='%s', gv='%v'", l.spec.Singular, l.spec.GroupVersion()) - return - } - - log.Scope.Debugf("Starting listener for %s(%v)", l.spec.Singular, l.spec.GroupVersion()) - - l.stopCh = make(chan struct{}) - - l.informer = cache.NewSharedIndexInformer( - &cache.ListWatch{ - ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { - return l.resourceClient.List(options) - }, - WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { - options.Watch = true - return l.resourceClient.Watch(options) - }, - }, - &unstructured.Unstructured{}, - l.resyncPeriod, - cache.Indexers{}) - - l.informer.AddEventHandler(cache.ResourceEventHandlerFuncs{ - AddFunc: func(obj interface{}) { l.handleEvent(resource.Added, obj) }, - UpdateFunc: func(old, new interface{}) { - newRes := new.(*unstructured.Unstructured) - oldRes := old.(*unstructured.Unstructured) - if newRes.GetResourceVersion() == oldRes.GetResourceVersion() { - // Periodic resync will send update events for all known resources. - // Two different versions of the same resource will always have different RVs. - return - } - l.handleEvent(resource.Updated, new) - }, - DeleteFunc: func(obj interface{}) { l.handleEvent(resource.Deleted, obj) }, - }) - - // Start CRD shared informer background process. - go l.informer.Run(l.stopCh) -} - -func (l *listener) waitForCacheSync() bool { - // Wait for CRD cache sync. - return cache.WaitForCacheSync(l.stopCh, l.informer.HasSynced) -} - -// Stop the listener. This will stop publishing of events. -func (l *listener) stop() { - l.stateLock.Lock() - defer l.stateLock.Unlock() - - if l.stopCh == nil { - log.Scope.Errorf("already stopped") - return - } - - close(l.stopCh) - l.stopCh = nil -} - -func (l *listener) handleEvent(c resource.EventKind, obj interface{}) { - object, ok := obj.(metav1.Object) - if !ok { - var tombstone cache.DeletedFinalStateUnknown - if tombstone, ok = obj.(cache.DeletedFinalStateUnknown); !ok { - msg := fmt.Sprintf("error decoding object, invalid type: %v", reflect.TypeOf(obj)) - log.Scope.Error(msg) - stats.RecordHandleEventError(msg) - return - } - if object, ok = tombstone.Obj.(metav1.Object); !ok { - msg := fmt.Sprintf("error decoding object tombstone, invalid type: %v", reflect.TypeOf(tombstone.Obj)) - log.Scope.Error(msg) - stats.RecordHandleEventError(msg) - return - } - log.Scope.Infof("Recovered deleted object '%s' from tombstone", object.GetName()) - } - - key := resource.FullNameFromNamespaceAndName(object.GetNamespace(), object.GetName()) - - var u *unstructured.Unstructured - - if uns, ok := obj.(*unstructured.Unstructured); ok { - u = uns - - // https://github.com/kubernetes/kubernetes/pull/63972 - // k8s machinery does not always preserve TypeMeta in list operations. Restore it - // using aprior knowledge of the GVK for this listener. - u.SetGroupVersionKind(runtimeSchema.GroupVersionKind{ - Group: l.spec.Group, - Version: l.spec.Version, - Kind: l.spec.Kind, - }) - } - - if log.Scope.DebugEnabled() { - log.Scope.Debugf("Sending event: [%v] from: %s", c, l.spec.CanonicalResourceName()) - } - l.processor(l, c, key, object.GetResourceVersion(), u) - stats.RecordHandleEventSuccess() -} diff --git a/galley/pkg/source/kube/dynamic/listener_test.go b/galley/pkg/source/kube/dynamic/listener_test.go deleted file mode 100644 index 621d39941fac..000000000000 --- a/galley/pkg/source/kube/dynamic/listener_test.go +++ /dev/null @@ -1,533 +0,0 @@ -// Copyright 2018 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package dynamic - -import ( - "errors" - "fmt" - "strings" - "sync" - "testing" - - "istio.io/istio/galley/pkg/runtime/resource" - kubeLog "istio.io/istio/galley/pkg/source/kube/log" - "istio.io/istio/galley/pkg/source/kube/schema" - "istio.io/istio/galley/pkg/testing/common" - "istio.io/istio/galley/pkg/testing/mock" - "istio.io/istio/pkg/log" - - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/dynamic/fake" - dtesting "k8s.io/client-go/testing" - "k8s.io/client-go/tools/cache" -) - -var info = schema.ResourceSpec{ - Kind: "kind", - ListKind: "listkind", - Group: "group", - Version: "version", - Singular: "singular", - Plural: "plural", -} - -var template = &unstructured.Unstructured{ - Object: map[string]interface{}{ - "metadata": map[string]interface{}{ - "name": "foo", - "resourceVersion": "rv", - }, - }, -} - -func TestListener_NewClientError(t *testing.T) { - k := &mock.Kube{} - k.AddResponse(nil, errors.New("newDynamicClient error")) - - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - } - - _, err := newListener(k, 0, info, processorFn) - if err == nil || err.Error() != "newDynamicClient error" { - t.Fatalf("unexpected error: %v", err) - } -} - -func TestListener_NewClient_Debug(t *testing.T) { - k := &mock.Kube{} - k.AddResponse(nil, errors.New("newDynamicClient error")) - - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - } - - old := kubeLog.Scope.GetOutputLevel() - defer kubeLog.Scope.SetOutputLevel(old) - kubeLog.Scope.SetOutputLevel(log.DebugLevel) - _, _ = newListener(k, 0, info, processorFn) - // should not crash -} - -func TestListener_Basic(t *testing.T) { - k := mock.NewKube() - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) - - processorLog := &common.MockLog{} - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - processorLog.Append("%v %v", eventKind, key) - } - - cl.PrependReactor("*", "foo", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{}}, nil - }) - cl.PrependWatchReactor("foo", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, mock.NewWatch(), nil - }) - - a, err := newListener(k, 0, info, processorFn) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - defer a.stop() - a.start() - a.waitForCacheSync() - - expected := ` -list plural -watch plural -` - check(t, writeActions(cl.Fake.Actions()), expected) - check(t, processorLog.String(), "") -} - -func TestListener_DoubleStart(t *testing.T) { - k := mock.NewKube() - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) - - processorLog := &common.MockLog{} - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - processorLog.Append("%v %v", eventKind, key) - } - - cl.PrependReactor("*", "foo", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{}}, nil - }) - cl.PrependWatchReactor("foo", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, mock.NewWatch(), nil - }) - - a, err := newListener(k, 0, info, processorFn) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - defer a.stop() - - a.start() - a.start() - a.waitForCacheSync() - a.start() - a.waitForCacheSync() - - expected := ` -list plural -watch plural -` - check(t, writeActions(cl.Fake.Actions()), expected) - check(t, processorLog.String(), "") -} - -func TestListener_DoubleStop(t *testing.T) { - k := mock.NewKube() - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) - - processorLog := &common.MockLog{} - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - processorLog.Append("%v %v", eventKind, key) - } - - cl.PrependReactor("*", "foo", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{}}, nil - }) - cl.PrependWatchReactor("foo", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, mock.NewWatch(), nil - }) - - a, err := newListener(k, 0, info, processorFn) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - a.start() - a.waitForCacheSync() - a.stop() - a.stop() - - expected := ` -list plural -watch plural -` - check(t, writeActions(cl.Fake.Actions()), expected) - check(t, processorLog.String(), "") -} - -func TestListener_AddEvent(t *testing.T) { - k := mock.NewKube() - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) - - processorLog := &common.MockLog{} - wg := &sync.WaitGroup{} - wg.Add(1) - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - processorLog.Append("%v key=%v", eventKind, key) - wg.Done() - } - - cl.PrependReactor("*", "foo", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{}}, nil - }) - w := mock.NewWatch() - cl.PrependWatchReactor("*", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, w, nil - }) - - a, err := newListener(k, 0, info, processorFn) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - defer a.stop() - - a.start() - a.waitForCacheSync() - - w.Send(watch.Event{Type: watch.Added, Object: template.DeepCopy()}) - wg.Wait() - - expected := ` -list plural -watch plural -` - check(t, writeActions(cl.Fake.Actions()), expected) - - expected = ` -Added key=foo` - - check(t, processorLog.String(), expected) -} - -func TestListener_UpdateEvent(t *testing.T) { - k := mock.NewKube() - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) - - processorLog := &common.MockLog{} - wg := &sync.WaitGroup{} - wg.Add(2) // One for initial add, one for update - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - processorLog.Append("%v key=%v", eventKind, key) - wg.Done() - } - - cl.PrependReactor("*", "plural", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{*template.DeepCopy()}}, nil - }) - w := mock.NewWatch() - cl.PrependWatchReactor("plural", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, w, nil - }) - - a, err := newListener(k, 0, info, processorFn) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - defer a.stop() - - a.start() - a.waitForCacheSync() - - t2 := template.DeepCopy() - t2.SetResourceVersion("rv2") - w.Send(watch.Event{Type: watch.Modified, Object: t2}) - wg.Wait() - - expected := ` -list plural -watch plural -` - check(t, writeActions(cl.Fake.Actions()), expected) - - expected = ` -Added key=foo -Updated key=foo` - - check(t, processorLog.String(), expected) -} - -func TestListener_UpdateEvent_SameResourceVersion(t *testing.T) { - k := mock.NewKube() - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) - - processorLog := &common.MockLog{} - wg := &sync.WaitGroup{} - wg.Add(1) // One for initial add only - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - processorLog.Append("%v key=%v", eventKind, key) - wg.Done() - } - - cl.PrependReactor("*", "plural", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{*template.DeepCopy()}}, nil - }) - w := mock.NewWatch() - cl.PrependWatchReactor("plural", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, w, nil - }) - - a, err := newListener(k, 0, info, processorFn) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - defer a.stop() - - a.start() - a.waitForCacheSync() - - t2 := template.DeepCopy() - w.Send(watch.Event{Type: watch.Modified, Object: t2}) - wg.Wait() - - expected := ` -list plural -watch plural -` - check(t, writeActions(cl.Fake.Actions()), expected) - - expected = ` -Added key=foo -` - check(t, processorLog.String(), expected) -} - -func TestListener_DeleteEvent(t *testing.T) { - k := mock.NewKube() - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) - - processorLog := &common.MockLog{} - wg := &sync.WaitGroup{} - wg.Add(2) // One for initial add, one for delete - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - processorLog.Append("%v key=%v", eventKind, key) - wg.Done() - } - - cl.PrependReactor("*", "plural", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{*template.DeepCopy()}}, nil - }) - w := mock.NewWatch() - cl.PrependWatchReactor("plural", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, w, nil - }) - - a, err := newListener(k, 0, info, processorFn) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - defer a.stop() - - a.start() - a.waitForCacheSync() - - t2 := template.DeepCopy() - t2.SetResourceVersion("rv2") - w.Send(watch.Event{Type: watch.Deleted, Object: t2}) - wg.Wait() - - expected := ` -list plural -watch plural -` - check(t, writeActions(cl.Fake.Actions()), expected) - - expected = ` -Added key=foo -Deleted key=foo` - - check(t, processorLog.String(), expected) -} - -func TestListener_Tombstone(t *testing.T) { - k := mock.NewKube() - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) - - processorLog := &common.MockLog{} - wg := &sync.WaitGroup{} - wg.Add(2) // One for initial add, one for delete - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - processorLog.Append("%v key=%v", eventKind, key) - wg.Done() - } - - cl.PrependReactor("*", "plural", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{*template.DeepCopy()}}, nil - }) - w := mock.NewWatch() - cl.PrependWatchReactor("plural", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, w, nil - }) - - a, err := newListener(k, 0, info, processorFn) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - defer a.stop() - - a.start() - a.waitForCacheSync() - - t2 := template.DeepCopy() - item := cache.DeletedFinalStateUnknown{Key: "foo", Obj: t2} - a.handleEvent(resource.Deleted, item) - - wg.Wait() - - expected := ` -list plural -watch plural -` - check(t, writeActions(cl.Fake.Actions()), expected) - - expected = ` -Added key=foo -Deleted key=foo` - - check(t, processorLog.String(), expected) -} - -func TestListener_TombstoneDecodeError(t *testing.T) { - k := mock.NewKube() - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) - - processorLog := &common.MockLog{} - wg := &sync.WaitGroup{} - wg.Add(1) // One for initial add only - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - processorLog.Append("%v key=%v", eventKind, key) - wg.Done() - } - - cl.PrependReactor("*", "plural", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{*template.DeepCopy()}}, nil - }) - w := mock.NewWatch() - cl.PrependWatchReactor("plural", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, w, nil - }) - - a, err := newListener(k, 0, info, processorFn) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - defer a.stop() - - a.start() - a.waitForCacheSync() - - a.handleEvent(resource.Deleted, struct{}{}) - - wg.Wait() - - expected := ` -list plural -watch plural -` - check(t, writeActions(cl.Fake.Actions()), expected) - - expected = ` -Added key=foo -` - check(t, processorLog.String(), expected) -} - -func TestListener_Tombstone_ObjDecodeError(t *testing.T) { - k := mock.NewKube() - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) - - processorLog := &common.MockLog{} - wg := &sync.WaitGroup{} - wg.Add(1) // One for initial add only - processorFn := func(l *listener, eventKind resource.EventKind, key resource.FullName, version string, u *unstructured.Unstructured) { - processorLog.Append("%v key=%v", eventKind, key) - wg.Done() - } - - cl.PrependReactor("*", "plural", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{*template.DeepCopy()}}, nil - }) - w := mock.NewWatch() - cl.PrependWatchReactor("plural", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, w, nil - }) - - a, err := newListener(k, 0, info, processorFn) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - defer a.stop() - - a.start() - - old := kubeLog.Scope.GetOutputLevel() - defer kubeLog.Scope.SetOutputLevel(old) - kubeLog.Scope.SetOutputLevel(log.DebugLevel) - - item := cache.DeletedFinalStateUnknown{Key: "foo", Obj: struct{}{}} - a.handleEvent(resource.Deleted, item) - - wg.Wait() - - expected := ` -list plural -watch plural -` - check(t, writeActions(cl.Fake.Actions()), expected) - - expected = ` -Added key=foo -` - check(t, processorLog.String(), expected) -} - -func writeActions(actions []dtesting.Action) string { - result := "" - for _, a := range actions { - result += fmt.Sprintf("%s %s\n", a.GetVerb(), a.GetResource().Resource) - } - return result -} - -func check(t *testing.T, actual string, expected string) { - t.Helper() - if strings.TrimSpace(actual) != strings.TrimSpace(expected) { - t.Fatalf("mismatch.\nGot:\n%s\nWanted:\n%s\n", actual, expected) - } -} diff --git a/galley/pkg/source/kube/dynamic/source.go b/galley/pkg/source/kube/dynamic/source.go index 67b93e53b0c5..0aecbf9b46f4 100644 --- a/galley/pkg/source/kube/dynamic/source.go +++ b/galley/pkg/source/kube/dynamic/source.go @@ -15,140 +15,239 @@ package dynamic import ( + "fmt" + "sync" "time" "istio.io/istio/galley/pkg/runtime" "istio.io/istio/galley/pkg/runtime/resource" - "istio.io/istio/galley/pkg/source/kube/client" "istio.io/istio/galley/pkg/source/kube/dynamic/converter" "istio.io/istio/galley/pkg/source/kube/log" - "istio.io/istio/galley/pkg/source/kube/schema" + sourceSchema "istio.io/istio/galley/pkg/source/kube/schema" "istio.io/istio/galley/pkg/source/kube/stats" + "istio.io/istio/galley/pkg/source/kube/tombstone" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + k8sRuntime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/tools/cache" ) -// source is an implementation of runtime.Source. -type sourceImpl struct { - cfg *converter.Config - ifaces client.Interfaces - ch chan resource.Event +var _ runtime.Source = &source{} - listeners []*listener -} +// source is a simplified client interface for listening/getting Kubernetes resources in an unstructured way. +type source struct { + // Lock for changing the running state of the source + stateLock sync.Mutex -var _ runtime.Source = &sourceImpl{} + cfg *converter.Config -// New returns a Kubernetes implementation of runtime.Source. -func New(k client.Interfaces, resyncPeriod time.Duration, schema *schema.Instance, cfg *converter.Config) (runtime.Source, error) { - s := &sourceImpl{ - cfg: cfg, - ifaces: k, - ch: make(chan resource.Event, 1024), - } + spec sourceSchema.ResourceSpec - log.Scope.Infof("Registering the following resources:") - for i, spec := range schema.All() { - log.Scope.Infof("[%d]", i) - log.Scope.Infof(" Source: %s", spec.CanonicalResourceName()) - log.Scope.Infof(" Type URL: %s", spec.Target.Collection) + resyncPeriod time.Duration - l, err := newListener(k, resyncPeriod, spec, s.process) - if err != nil { - log.Scope.Errorf("Error registering listener: %v", err) - return nil, err - } + // The dynamic resource interface for accessing custom resources dynamically. + resourceClient dynamic.ResourceInterface - s.listeners = append(s.listeners, l) - } + // stopCh is used to quiesce the background activity during shutdown + stopCh chan struct{} + + // SharedIndexInformer for watching/caching resources + informer cache.SharedIndexInformer + + handler resource.EventHandler +} + +// New returns a new instance of a dynamic source for the given schema. +func New( + client dynamic.Interface, resyncPeriod time.Duration, spec sourceSchema.ResourceSpec, + cfg *converter.Config) (runtime.Source, error) { + + gv := spec.GroupVersion() + log.Scope.Debugf("Creating a new dynamic resource source for: name='%s', gv:'%v'", + spec.Singular, gv) - return s, nil + resourceClient := client.Resource(gv.WithResource(spec.Plural)) + + return &source{ + spec: spec, + cfg: cfg, + resyncPeriod: resyncPeriod, + resourceClient: resourceClient, + }, nil } -// Start implements runtime.Source -func (s *sourceImpl) Start() (chan resource.Event, error) { - for _, l := range s.listeners { - l.start() +// Start the source. This will commence listening and dispatching of events. +func (s *source) Start(handler resource.EventHandler) error { + s.stateLock.Lock() + defer s.stateLock.Unlock() + + if s.stopCh != nil { + return fmt.Errorf("already synchronizing resources: name='%s', gv='%v'", + s.spec.Singular, s.spec.GroupVersion()) + } + if handler == nil { + return fmt.Errorf("invalid event handler") } - // Wait in a background go-routine until all listeners are synced and send a full-sync event. + log.Scope.Debugf("Starting source for %s(%v)", s.spec.Singular, s.spec.GroupVersion()) + + s.stopCh = make(chan struct{}) + s.handler = handler + + s.informer = cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (k8sRuntime.Object, error) { + return s.resourceClient.List(options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + options.Watch = true + return s.resourceClient.Watch(options) + }, + }, + &unstructured.Unstructured{}, + s.resyncPeriod, + cache.Indexers{}) + + s.informer.AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { s.handleEvent(resource.Added, obj) }, + UpdateFunc: func(old, new interface{}) { + newRes := new.(*unstructured.Unstructured) + oldRes := old.(*unstructured.Unstructured) + if newRes.GetResourceVersion() == oldRes.GetResourceVersion() { + // Periodic resync will send update events for all known resources. + // Two different versions of the same resource will always have different RVs. + return + } + s.handleEvent(resource.Updated, new) + }, + DeleteFunc: func(obj interface{}) { s.handleEvent(resource.Deleted, obj) }, + }) + + // Start CRD shared informer background process. + go s.informer.Run(s.stopCh) + + // Send the an event after the cache syncs. go func() { - for _, l := range s.listeners { - l.waitForCacheSync() - } - s.ch <- resource.Event{Kind: resource.FullSync} + _ = cache.WaitForCacheSync(s.stopCh, s.informer.HasSynced) + handler(resource.FullSyncEvent) }() - return s.ch, nil + return nil } -// Stop implements runtime.Source -func (s *sourceImpl) Stop() { - for _, a := range s.listeners { - a.stop() +// Stop the source. This will stop publishing of events. +func (s *source) Stop() { + s.stateLock.Lock() + defer s.stateLock.Unlock() + + if s.stopCh == nil { + log.Scope.Errorf("already stopped") + return } -} -func (s *sourceImpl) process(l *listener, kind resource.EventKind, key resource.FullName, resourceVersion string, u *unstructured.Unstructured) { - ProcessEvent(s.cfg, l.spec, kind, key, resourceVersion, u, s.ch) + close(s.stopCh) + s.stopCh = nil } -// ProcessEvent process the incoming message and convert it to event -func ProcessEvent(cfg *converter.Config, spec schema.ResourceSpec, kind resource.EventKind, key resource.FullName, resourceVersion string, - u *unstructured.Unstructured, ch chan resource.Event) { +func (s *source) handleEvent(c resource.EventKind, obj interface{}) { + object, ok := obj.(metav1.Object) + if !ok { + if object = tombstone.RecoverResource(obj); object != nil { + // Tombstone recovery failed. + return + } + } - var event resource.Event + var u *unstructured.Unstructured + if uns, ok := obj.(*unstructured.Unstructured); ok { + u = uns + + // https://github.com/kubernetes/kubernetes/pull/63972 + // k8s machinery does not always preserve TypeMeta in list operations. Restore it + // using aprior knowledge of the GVK for this source. + u.SetGroupVersionKind(schema.GroupVersionKind{ + Group: s.spec.Group, + Version: s.spec.Version, + Kind: s.spec.Kind, + }) + } + + log.Scope.Debugf("Sending event: [%v] from: %s", c, s.spec.CanonicalResourceName()) + + key := resource.FullNameFromNamespaceAndName(object.GetNamespace(), object.GetName()) + processEvent(s.cfg, s.spec, c, key, object.GetResourceVersion(), u, s.handler) + stats.RecordEventSuccess() +} +// ConvertAndLog is a utility that invokes the converter and logs the success status. +func ConvertAndLog(cfg *converter.Config, spec sourceSchema.ResourceSpec, key resource.FullName, + resourceVersion string, u *unstructured.Unstructured) ([]converter.Entry, error) { entries, err := spec.Converter(cfg, spec.Target, key, spec.Kind, u) if err != nil { log.Scope.Errorf("Unable to convert unstructured to proto: %s/%s: %v", key, resourceVersion, err) stats.RecordConverterResult(false, spec.Version, spec.Group, spec.Kind) - return + return nil, err } stats.RecordConverterResult(true, spec.Version, spec.Group, spec.Kind) + return entries, nil +} + +// processEvent process the incoming message and convert it to event +func processEvent(cfg *converter.Config, spec sourceSchema.ResourceSpec, kind resource.EventKind, key resource.FullName, + resourceVersion string, u *unstructured.Unstructured, handler resource.EventHandler) { + + entries, err := ConvertAndLog(cfg, spec, key, resourceVersion, u) + if err != nil { + return + } if len(entries) == 0 { - log.Scope.Debugf("Did not receive any entries from converter: kind=%v, key=%v, rv=%s", kind, key, resourceVersion) + log.Scope.Debugf("Did not receive any entries from converter: kind=%v, key=%v, rv=%s", + kind, key, resourceVersion) return } + // TODO(nmittler): Will there ever be > 1 entries? + entry := entries[0] + + var event resource.Event + switch kind { case resource.Added, resource.Updated: event = resource.Event{ Kind: kind, - } - - rid := resource.VersionedKey{ - Key: resource.Key{ - Collection: spec.Target.Collection, - FullName: entries[0].Key, + Entry: resource.Entry{ + ID: resource.VersionedKey{ + Key: resource.Key{ + Collection: spec.Target.Collection, + FullName: entry.Key, + }, + Version: resource.Version(resourceVersion), + }, + Item: entry.Resource, + Metadata: entry.Metadata, }, - Version: resource.Version(resourceVersion), - } - - event.Entry = resource.Entry{ - ID: rid, - Item: entries[0].Resource, - Metadata: entries[0].Metadata, } case resource.Deleted: - rid := resource.VersionedKey{ - Key: resource.Key{ - Collection: spec.Target.Collection, - FullName: entries[0].Key, - }, - Version: resource.Version(resourceVersion), - } - event = resource.Event{ Kind: kind, Entry: resource.Entry{ - ID: rid, + ID: resource.VersionedKey{ + Key: resource.Key{ + Collection: spec.Target.Collection, + FullName: entry.Key, + }, + Version: resource.Version(resourceVersion), + }, }, } } log.Scope.Debugf("Dispatching source event: %v", event) - ch <- event + handler(event) } diff --git a/galley/pkg/source/kube/dynamic/source_test.go b/galley/pkg/source/kube/dynamic/source_test.go index ebeb078f4e99..b64384b0625b 100644 --- a/galley/pkg/source/kube/dynamic/source_test.go +++ b/galley/pkg/source/kube/dynamic/source_test.go @@ -12,31 +12,40 @@ // See the License for the specific language governing permissions and // limitations under the License. -package dynamic +package dynamic_test import ( - "errors" "fmt" - "strings" "testing" "github.com/gogo/protobuf/types" + . "github.com/onsi/gomega" "istio.io/istio/galley/pkg/meshconfig" kubeMeta "istio.io/istio/galley/pkg/metadata/kube" + "istio.io/istio/galley/pkg/runtime" "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/galley/pkg/source/kube/dynamic" "istio.io/istio/galley/pkg/source/kube/dynamic/converter" "istio.io/istio/galley/pkg/source/kube/schema" + "istio.io/istio/galley/pkg/testing/events" "istio.io/istio/galley/pkg/testing/mock" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" + k8sRuntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" + k8sDynamic "k8s.io/client-go/dynamic" "k8s.io/client-go/dynamic/fake" - dtesting "k8s.io/client-go/testing" + k8sTesting "k8s.io/client-go/testing" ) -var emptyInfo resource.Info +var ( + emptyInfo resource.Info + + cfg = converter.Config{ + Mesh: meshconfig.NewInMemory(), + } +) func init() { b := resource.NewSchemaBuilder() @@ -45,54 +54,97 @@ func init() { emptyInfo, _ = s.Lookup("empty") } -func schemaWithSpecs(specs []schema.ResourceSpec) *schema.Instance { - sb := schema.NewBuilder() - for _, s := range specs { - sb.Add(s) - } - return sb.Build() -} - func TestNewSource(t *testing.T) { k := &mock.Kube{} for i := 0; i < 100; i++ { - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) + _ = fakeClient(k) } - cfg := converter.Config{ - Mesh: meshconfig.NewInMemory(), - } - p, err := New(k, 0, kubeMeta.Types, &cfg) - if err != nil { - t.Fatalf("Unexpected error found: %v", err) - } + spec := kubeMeta.Types.All()[0] + + client, _ := k.DynamicInterface() + _ = newOrFail(t, client, spec) +} - if p == nil { - t.Fatal("expected non-nil source") +func TestStartWithNilHandlerShouldError(t *testing.T) { + g := NewGomegaWithT(t) + + // Create the source + _, client := createMocks() + spec := schema.ResourceSpec{ + Kind: "List", + Singular: "List", + Plural: "foos", + Target: emptyInfo, + Converter: converter.Get("identity"), } + s := newOrFail(t, client, spec) + + err := s.Start(nil) + g.Expect(err).ToNot(BeNil()) } -func TestNewSource_Error(t *testing.T) { - k := &mock.Kube{} - k.AddResponse(nil, errors.New("newDynamicClient error")) +func TestStartTwiceShouldError(t *testing.T) { + g := NewGomegaWithT(t) - cfg := converter.Config{ - Mesh: meshconfig.NewInMemory(), + // Create the source + _, client := createMocks() + spec := schema.ResourceSpec{ + Kind: "List", + Singular: "List", + Plural: "foos", + Target: emptyInfo, + Converter: converter.Get("identity"), } - _, err := New(k, 0, kubeMeta.Types, &cfg) - if err == nil || err.Error() != "newDynamicClient error" { - t.Fatalf("Expected error not found: %v", err) + s := newOrFail(t, client, spec) + + // Start it once. + ch := startOrFail(t, s) + defer s.Stop() + + // Start again should fail + err := s.Start(events.ChannelHandler(ch)) + g.Expect(err).ToNot(BeNil()) +} + +func TestStopTwiceShouldSucceed(t *testing.T) { + // Create the source + _, client := createMocks() + spec := schema.ResourceSpec{ + Kind: "List", + Singular: "List", + Plural: "foos", + Target: emptyInfo, + Converter: converter.Get("identity"), } + s := newOrFail(t, client, spec) + + // Start it once. + _ = startOrFail(t, s) + + s.Stop() + s.Stop() } -func TestSource_BasicEvents(t *testing.T) { - k := &mock.Kube{} - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) +func TestEvents(t *testing.T) { + g := NewGomegaWithT(t) - k.AddResponse(cl, nil) + w, client := createMocks() + + spec := schema.ResourceSpec{ + Kind: "List", + Singular: "List", + Plural: "foos", + Target: emptyInfo, + Converter: converter.Get("identity"), + } + + // Create and start the source + s := newOrFail(t, client, spec) + ch := startOrFail(t, s) + defer s.Stop() - i1 := unstructured.Unstructured{ + obj := &unstructured.Unstructured{ Object: map[string]interface{}{ "apiVersion": "v1", "kind": "List", @@ -105,70 +157,75 @@ func TestSource_BasicEvents(t *testing.T) { }, } - cl.PrependReactor("*", "foos", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{i1}}, nil - }) - w := mock.NewWatch() - cl.PrependWatchReactor("foos", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, w, nil + t.Run("Add", func(t *testing.T) { + w.Send(watch.Event{Type: watch.Added, Object: obj}) + expected := resource.Event{ + Kind: resource.Added, + Entry: toEntry(obj), + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) }) - specs := schemaWithSpecs([]schema.ResourceSpec{ - { - Kind: "List", - Singular: "List", - Plural: "foos", - Target: emptyInfo, - Converter: converter.Get("identity"), - }, - }) + // The full sync should come immediately after the first event. + expectFullSync(t, ch) - cfg := converter.Config{ - Mesh: meshconfig.NewInMemory(), - } - s, err := New(k, 0, specs, &cfg) - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } + t.Run("Update", func(t *testing.T) { + // Make a copy so we can change it without affecting the original. + objCopy := obj.DeepCopy() + objCopy.SetResourceVersion("rv2") - if s == nil { - t.Fatal("Expected non nil source") - } + w.Send(watch.Event{Type: watch.Modified, Object: objCopy}) + expected := resource.Event{ + Kind: resource.Updated, + Entry: toEntry(objCopy), + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) - ch, err := s.Start() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } + // Update the original object to the new version. + obj = objCopy.DeepCopy() + }) - log := logChannelOutput(ch, 2) - expected := strings.TrimSpace(` -[Event](Added: [VKey](empty:ns/f1 @rv1)) -[Event](FullSync) -`) - if log != expected { - t.Fatalf("Event mismatch:\nActual:\n%s\nExpected:\n%s\n", log, expected) - } + t.Run("UpdateSameVersion", func(t *testing.T) { + // Make a copy so we can change it without affecting the original. + objCopy := obj.DeepCopy() + objCopy.SetResourceVersion("rv2") - w.Send(watch.Event{Type: watch.Deleted, Object: &i1}) - log = logChannelOutput(ch, 1) - expected = strings.TrimSpace(` -[Event](Deleted: [VKey](empty:ns/f1 @rv1)) - `) - if log != expected { - t.Fatalf("Event mismatch:\nActual:\n%s\nExpected:\n%s\n", log, expected) - } + w.Send(watch.Event{Type: watch.Modified, Object: objCopy}) + events.ExpectNone(t, ch) + }) - s.Stop() + t.Run("Delete", func(t *testing.T) { + w.Send(watch.Event{Type: watch.Deleted, Object: obj}) + expected := resource.Event{ + Kind: resource.Deleted, + Entry: resource.Entry{ + ID: getID(obj), + }, + } + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + }) } func TestSource_BasicEvents_NoConversion(t *testing.T) { + w, client := createMocks() - k := &mock.Kube{} - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) + spec := schema.ResourceSpec{ + Kind: "List", + Singular: "List", + Plural: "foos", + Target: emptyInfo, + Converter: converter.Get("nil"), + } - k.AddResponse(cl, nil) + // Create and start the source + s := newOrFail(t, client, spec) + ch := startOrFail(t, s) + defer s.Stop() - i1 := unstructured.Unstructured{ + obj := unstructured.Unstructured{ Object: map[string]interface{}{ "apiVersion": "v1", "kind": "List", @@ -181,57 +238,32 @@ func TestSource_BasicEvents_NoConversion(t *testing.T) { }, } - cl.PrependReactor("*", "foos", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{i1}}, nil - }) - cl.PrependWatchReactor("foos", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, mock.NewWatch(), nil - }) - - specs := schemaWithSpecs([]schema.ResourceSpec{ - { - Kind: "List", - Singular: "List", - Plural: "foos", - Target: emptyInfo, - Converter: converter.Get("nil"), - }, - }) - - cfg := converter.Config{ - Mesh: meshconfig.NewInMemory(), - } - s, err := New(k, 0, specs, &cfg) - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } + // Trigger an Added event. + w.Send(watch.Event{Type: watch.Added, Object: &obj}) - if s == nil { - t.Fatal("Expected non nil source") - } - - ch, err := s.Start() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - - log := logChannelOutput(ch, 1) - expected := strings.TrimSpace(` -[Event](FullSync) -`) - if log != expected { - t.Fatalf("Event mismatch:\nActual:\n%s\nExpected:\n%s\n", log, expected) - } - - s.Stop() + // Expect only the full sync event. + expectFullSync(t, ch) } func TestSource_ProtoConversionError(t *testing.T) { - k := &mock.Kube{} - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) + w, client := createMocks() + + spec := schema.ResourceSpec{ + Kind: "foo", + Singular: "foo", + Plural: "foos", + Target: emptyInfo, + Converter: func(_ *converter.Config, info resource.Info, name resource.FullName, kind string, u *unstructured.Unstructured) ([]converter.Entry, error) { + return nil, fmt.Errorf("cant convert") + }, + } - i1 := unstructured.Unstructured{ + // Create and start the source + s := newOrFail(t, client, spec) + ch := startOrFail(t, s) + defer s.Stop() + + obj := unstructured.Unstructured{ Object: map[string]interface{}{ "metadata": map[string]interface{}{ "name": "f1", @@ -244,60 +276,39 @@ func TestSource_ProtoConversionError(t *testing.T) { }, } - cl.PrependReactor("*", "foos", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{i1}}, nil - }) - cl.PrependWatchReactor("foos", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, mock.NewWatch(), nil - }) - - specs := schemaWithSpecs([]schema.ResourceSpec{ - { - Kind: "foo", - Singular: "foo", - Plural: "foos", - Target: emptyInfo, - Converter: func(_ *converter.Config, info resource.Info, name resource.FullName, kind string, u *unstructured.Unstructured) ([]converter.Entry, error) { - return nil, fmt.Errorf("cant convert") - }, - }, - }) - - cfg := converter.Config{ - Mesh: meshconfig.NewInMemory(), - } - s, err := New(k, 0, specs, &cfg) - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - - if s == nil { - t.Fatal("Expected non nil source") - } - - ch, err := s.Start() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } + // Trigger an Added event. + w.Send(watch.Event{Type: watch.Added, Object: &obj}) // The add event should not appear. - log := logChannelOutput(ch, 1) - expected := strings.TrimSpace(` -[Event](FullSync) -`) - if log != expected { - t.Fatalf("Event mismatch:\nActual:\n%s\nExpected:\n%s\n", log, expected) - } - - s.Stop() + expectFullSync(t, ch) } func TestSource_MangledNames(t *testing.T) { - k := &mock.Kube{} - cl := fake.NewSimpleDynamicClient(runtime.NewScheme()) - k.AddResponse(cl, nil) + g := NewGomegaWithT(t) + + w, client := createMocks() + + spec := schema.ResourceSpec{ + Kind: "foo", + Singular: "foo", + Plural: "foos", + Target: emptyInfo, + Converter: func(_ *converter.Config, info resource.Info, name resource.FullName, kind string, u *unstructured.Unstructured) ([]converter.Entry, error) { + e := converter.Entry{ + Key: resource.FullNameFromNamespaceAndName("foo", name.String()), + Resource: &types.Struct{}, + } + + return []converter.Entry{e}, nil + }, + } + + // Create and start the source. + s := newOrFail(t, client, spec) + ch := startOrFail(t, s) + defer s.Stop() - i1 := unstructured.Unstructured{ + obj := unstructured.Unstructured{ Object: map[string]interface{}{ "metadata": map[string]interface{}{ "name": "f1", @@ -310,67 +321,104 @@ func TestSource_MangledNames(t *testing.T) { }, } - cl.PrependReactor("*", "foos", func(action dtesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{i1}}, nil - }) - cl.PrependWatchReactor("foos", func(action dtesting.Action) (handled bool, ret watch.Interface, err error) { - return true, mock.NewWatch(), nil - }) + // Trigger an Added event. + w.Send(watch.Event{Type: watch.Added, Object: &obj}) - specs := schemaWithSpecs([]schema.ResourceSpec{ - { - Kind: "foo", - Singular: "foo", - Plural: "foos", - Target: emptyInfo, - Converter: func(_ *converter.Config, info resource.Info, name resource.FullName, kind string, u *unstructured.Unstructured) ([]converter.Entry, error) { - e := converter.Entry{ - Key: resource.FullNameFromNamespaceAndName("foo", name.String()), - Resource: &types.Struct{}, - } - - return []converter.Entry{e}, nil + // Expect an Added event for the resource. + expected := resource.Event{ + Kind: resource.Added, + Entry: resource.Entry{ + ID: resource.VersionedKey{ + Key: resource.Key{ + Collection: emptyInfo.Collection, + FullName: resource.FullNameFromNamespaceAndName("foo/"+obj.GetNamespace(), obj.GetName()), + }, + Version: resource.Version(obj.GetResourceVersion()), + }, + Metadata: resource.Metadata{ + Labels: obj.GetLabels(), + Annotations: obj.GetAnnotations(), }, + Item: &types.Struct{}, }, - }) - - cfg := converter.Config{ - Mesh: meshconfig.NewInMemory(), } - s, err := New(k, 0, specs, &cfg) + + // The mangled name foo/ns/f1 should appear. + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + + // The full sync should come immediately after the first event. + expectFullSync(t, ch) +} + +func newOrFail(t *testing.T, dynClient k8sDynamic.Interface, spec schema.ResourceSpec) runtime.Source { + t.Helper() + s, err := dynamic.New(dynClient, 0, spec, &cfg) if err != nil { t.Fatalf("Unexpected error: %v", err) } - if s == nil { t.Fatal("Expected non nil source") } + return s +} - ch, err := s.Start() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } +func startOrFail(t *testing.T, s runtime.Source) chan resource.Event { + t.Helper() + g := NewGomegaWithT(t) - // The mangled name foo/ns/f1 should appear. - log := logChannelOutput(ch, 1) - expected := strings.TrimSpace(` -[Event](Added: [VKey](empty:foo/ns/f1 @rv1)) -`) - if log != expected { - t.Fatalf("Event mismatch:\nActual:\n%s\nExpected:\n%s\n", log, expected) - } + ch := make(chan resource.Event, 1024) + err := s.Start(events.ChannelHandler(ch)) + g.Expect(err).To(BeNil()) + return ch +} - s.Stop() +func createMocks() (*mock.Watch, k8sDynamic.Interface) { + k := &mock.Kube{} + cl := fakeClient(k) + w := mockWatch(cl) + client, _ := k.DynamicInterface() + return w, client } -func logChannelOutput(ch chan resource.Event, count int) string { - result := "" - for i := 0; i < count; i++ { - item := <-ch - result += fmt.Sprintf("%v\n", item) - } +func fakeClient(k *mock.Kube) *fake.FakeDynamicClient { + cl := fake.NewSimpleDynamicClient(k8sRuntime.NewScheme()) + k.AddResponse(cl, nil) + return cl +} + +func mockWatch(cl *fake.FakeDynamicClient) *mock.Watch { + w := mock.NewWatch() + cl.PrependWatchReactor("foos", func(_ k8sTesting.Action) (handled bool, ret watch.Interface, err error) { + return true, w, nil + }) + return w +} - result = strings.TrimSpace(result) +func expectFullSync(t *testing.T, ch chan resource.Event) { + t.Helper() + g := NewGomegaWithT(t) + actual := events.ExpectOne(t, ch) + g.Expect(actual).To(Equal(resource.FullSyncEvent)) +} - return result +func getID(obj *unstructured.Unstructured) resource.VersionedKey { + return resource.VersionedKey{ + Key: resource.Key{ + Collection: emptyInfo.Collection, + FullName: resource.FullNameFromNamespaceAndName(obj.GetNamespace(), obj.GetName()), + }, + Version: resource.Version(obj.GetResourceVersion()), + } +} + +func toEntry(obj *unstructured.Unstructured) resource.Entry { + return resource.Entry{ + ID: getID(obj), + Metadata: resource.Metadata{ + Labels: obj.GetLabels(), + Annotations: obj.GetAnnotations(), + }, + Item: &types.Empty{}, + } } diff --git a/galley/pkg/source/kube/schema/check/check.go b/galley/pkg/source/kube/schema/check/check.go index 0673e6d23f23..511b42faa952 100644 --- a/galley/pkg/source/kube/schema/check/check.go +++ b/galley/pkg/source/kube/schema/check/check.go @@ -20,33 +20,33 @@ import ( multierror "github.com/hashicorp/go-multierror" - kube_meta "istio.io/istio/galley/pkg/metadata/kube" + kubeMeta "istio.io/istio/galley/pkg/metadata/kube" "istio.io/istio/galley/pkg/source/kube/client" "istio.io/istio/galley/pkg/source/kube/log" - kubeSchema "istio.io/istio/galley/pkg/source/kube/schema" + sourceSchema "istio.io/istio/galley/pkg/source/kube/schema" "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - runtimeSchema "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/wait" ) -// VerifyResourceTypesPresence verifies that all expected k8s resources types are +var ( + pollInterval = time.Second + pollTimeout = time.Minute +) + +// ResourceTypesPresence verifies that all expected k8s resources types are // present in the k8s apiserver. -func VerifyResourceTypesPresence(k client.Interfaces) error { +func ResourceTypesPresence(k client.Interfaces) error { cs, err := k.APIExtensionsClientset() if err != nil { return err } - return verifyResourceTypesPresence(cs, kube_meta.Types.All()) + return resourceTypesPresence(cs, kubeMeta.Types.All()) } -var ( - pollInterval = time.Second - pollTimeout = time.Minute -) - -func verifyResourceTypesPresence(cs clientset.Interface, specs []kubeSchema.ResourceSpec) error { - search := make(map[string]*kubeSchema.ResourceSpec, len(specs)) +func resourceTypesPresence(cs clientset.Interface, specs []sourceSchema.ResourceSpec) error { + search := make(map[string]*sourceSchema.ResourceSpec, len(specs)) for i, spec := range specs { search[spec.Plural] = &specs[i] } @@ -55,7 +55,7 @@ func verifyResourceTypesPresence(cs clientset.Interface, specs []kubeSchema.Reso var errs error nextResource: for plural, spec := range search { - gv := runtimeSchema.GroupVersion{Group: spec.Group, Version: spec.Version}.String() + gv := schema.GroupVersion{Group: spec.Group, Version: spec.Version}.String() list, err := cs.Discovery().ServerResourcesForGroupVersion(gv) if err != nil { errs = multierror.Append(errs, fmt.Errorf("could not find %v: %v", gv, err)) diff --git a/galley/pkg/source/kube/schema/check/check_test.go b/galley/pkg/source/kube/schema/check/check_test.go index f7f9eab6b66d..71a18e6534e2 100644 --- a/galley/pkg/source/kube/schema/check/check_test.go +++ b/galley/pkg/source/kube/schema/check/check_test.go @@ -25,7 +25,7 @@ import ( meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -func TestVerifyCRDPresence(t *testing.T) { +func TestCheckCRDPresence(t *testing.T) { prevInterval, prevTimeout := pollInterval, pollTimeout pollInterval = time.Nanosecond pollTimeout = time.Millisecond @@ -92,7 +92,7 @@ func TestVerifyCRDPresence(t *testing.T) { cs.Resources = append(cs.Resources, resourceList) } - err := verifyResourceTypesPresence(cs, specs) + err := resourceTypesPresence(cs, specs) if c.wantErr { if err == nil { tt.Fatal("expected error but got success") diff --git a/galley/pkg/source/kube/schema/instance.go b/galley/pkg/source/kube/schema/instance.go index b24308601192..e2777314edd9 100644 --- a/galley/pkg/source/kube/schema/instance.go +++ b/galley/pkg/source/kube/schema/instance.go @@ -14,9 +14,34 @@ package schema -// Instance represents a set of known Kubernetes resource types. +import ( + "sort" + "strings" +) + +// Instance represents a schema for a set of known Kubernetes resource types. type Instance struct { - entries []ResourceSpec + specs []ResourceSpec +} + +// All returns information about all known types. +func (s *Instance) All() []ResourceSpec { + return s.specs +} + +// Get returns the schema for the given kind, or nil if not found. +func (s *Instance) Get(kind string) *ResourceSpec { + for _, v := range s.All() { + if v.Kind == kind { + return &v + } + } + return nil +} + +// New is a simplified Instance factory method when all specs can be provided as arguments. +func New(spec ...ResourceSpec) *Instance { + return NewBuilder().Add(spec...).Build() } // Builder is a builder for schema. @@ -32,21 +57,22 @@ func NewBuilder() *Builder { } // Add a new ResourceSpec to the schema. -func (b *Builder) Add(entry ResourceSpec) { - b.schema.entries = append(b.schema.entries, entry) +func (b *Builder) Add(spec ...ResourceSpec) *Builder { + b.schema.specs = append(b.schema.specs, spec...) + return b } -// Build a new instance of schema. +// Build a new instance of schema. The specs will be sorted by resource name. func (b *Builder) Build() *Instance { s := b.schema // Avoid modify after Build. b.schema = nil - return s -} + // Sort the specs by their resource names. + sort.Slice(s.specs, func(i, j int) bool { + return strings.Compare(s.specs[i].CanonicalResourceName(), s.specs[j].CanonicalResourceName()) < 0 + }) -// All returns information about all known types. -func (e *Instance) All() []ResourceSpec { - return e.entries + return s } diff --git a/galley/pkg/source/kube/schema/instance_test.go b/galley/pkg/source/kube/schema/instance_test.go index 93d724a5387e..61b4c68c4888 100644 --- a/galley/pkg/source/kube/schema/instance_test.go +++ b/galley/pkg/source/kube/schema/instance_test.go @@ -12,15 +12,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -package schema +package schema_test import ( - "reflect" "testing" + + "github.com/onsi/gomega" + + "istio.io/istio/galley/pkg/source/kube/schema" ) func TestSchemaBuilder(t *testing.T) { - spec := ResourceSpec{ + g := gomega.NewGomegaWithT(t) + spec := schema.ResourceSpec{ Kind: "kind", Version: "version", ListKind: "listkind", @@ -29,15 +33,44 @@ func TestSchemaBuilder(t *testing.T) { Group: "groupd", } - b := NewBuilder() - b.Add(spec) - s := b.Build() - + s := schema.NewBuilder().Add(spec).Build() actual := s.All() + expected := []schema.ResourceSpec{spec} - expected := []ResourceSpec{spec} + g.Expect(actual).To(gomega.Equal(expected)) +} + +func TestGet(t *testing.T) { + g := gomega.NewGomegaWithT(t) - if !reflect.DeepEqual(actual, expected) { - t.Fatalf("Mismatch:\nGot:\n%v\nWanted:\n%v\n", actual, expected) + spec := schema.ResourceSpec{ + Kind: "kind", + Version: "version", + ListKind: "listkind", + Plural: "plural", + Singular: "singular", + Group: "groupd", } + s := schema.New(spec) + + actual := s.Get("kind") + g.Expect(actual).ToNot(gomega.BeNil()) + g.Expect(*actual).To(gomega.Equal(spec)) +} + +func TestGetNotFound(t *testing.T) { + g := gomega.NewGomegaWithT(t) + + spec := schema.ResourceSpec{ + Kind: "kind", + Version: "version", + ListKind: "listkind", + Plural: "plural", + Singular: "singular", + Group: "groupd", + } + s := schema.New(spec) + + actual := s.Get("someotherkind") + g.Expect(actual).To(gomega.BeNil()) } diff --git a/galley/pkg/source/kube/schema/resourcespec.go b/galley/pkg/source/kube/schema/resourcespec.go index 9d64541d7da8..ce900c12717f 100644 --- a/galley/pkg/source/kube/schema/resourcespec.go +++ b/galley/pkg/source/kube/schema/resourcespec.go @@ -17,7 +17,7 @@ package schema import ( "fmt" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" sc "k8s.io/apimachinery/pkg/runtime/schema" "istio.io/istio/galley/pkg/runtime/resource" @@ -54,8 +54,8 @@ type ResourceSpec struct { } // APIResource generated from this type. -func (i *ResourceSpec) APIResource() *v1.APIResource { - return &v1.APIResource{ +func (i *ResourceSpec) APIResource() *metaV1.APIResource { + return &metaV1.APIResource{ Name: i.Plural, SingularName: i.Singular, Kind: i.Kind, diff --git a/galley/pkg/source/kube/schema/resourcespec_test.go b/galley/pkg/source/kube/schema/resourcespec_test.go index 7401dd7edd0f..26508acefe50 100644 --- a/galley/pkg/source/kube/schema/resourcespec_test.go +++ b/galley/pkg/source/kube/schema/resourcespec_test.go @@ -12,18 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -package schema +package schema_test import ( "reflect" "testing" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "istio.io/istio/galley/pkg/source/kube/schema" + + metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" sc "k8s.io/apimachinery/pkg/runtime/schema" ) func TestInfo_APIResource(t *testing.T) { - i := ResourceSpec{ + i := schema.ResourceSpec{ Version: "version", Kind: "kind", Group: "group", @@ -33,7 +35,7 @@ func TestInfo_APIResource(t *testing.T) { } r := i.APIResource() - expected := &v1.APIResource{ + expected := &metaV1.APIResource{ Group: "group", Kind: "kind", Version: "version", @@ -48,7 +50,7 @@ func TestInfo_APIResource(t *testing.T) { } func TestInfo_GroupVersion(t *testing.T) { - i := ResourceSpec{ + i := schema.ResourceSpec{ Version: "version", Kind: "kind", Group: "group", @@ -69,7 +71,7 @@ func TestInfo_GroupVersion(t *testing.T) { } func TestInfo_CanonicalResourceName(t *testing.T) { - i := ResourceSpec{ + i := schema.ResourceSpec{ Version: "version", Kind: "kind", Group: "group", diff --git a/galley/pkg/source/kube/source.go b/galley/pkg/source/kube/source.go new file mode 100644 index 000000000000..ee15a6396ff5 --- /dev/null +++ b/galley/pkg/source/kube/source.go @@ -0,0 +1,145 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package kube + +import ( + "sync" + "time" + + "istio.io/istio/galley/pkg/runtime" + "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/galley/pkg/source/kube/builtin" + "istio.io/istio/galley/pkg/source/kube/client" + "istio.io/istio/galley/pkg/source/kube/dynamic" + kubeConverter "istio.io/istio/galley/pkg/source/kube/dynamic/converter" + "istio.io/istio/galley/pkg/source/kube/log" + "istio.io/istio/galley/pkg/source/kube/schema" + + kubeDynamic "k8s.io/client-go/dynamic" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" +) + +// New creates a new kube source for the given schema. +func New(interfaces client.Interfaces, resyncPeriod time.Duration, schema *schema.Instance, + cfg *kubeConverter.Config) (runtime.Source, error) { + + var err error + var cl kubernetes.Interface + var dynClient kubeDynamic.Interface + var sharedInformers informers.SharedInformerFactory + + log.Scope.Info("creating sources for kubernetes resources") + sources := make([]runtime.Source, 0) + for i, spec := range schema.All() { + log.Scope.Infof("[%d]", i) + log.Scope.Infof(" Source: %s", spec.CanonicalResourceName()) + log.Scope.Infof(" Collection: %s", spec.Target.Collection) + + // If it's a known type, use a custom (optimized) source. + if builtin.IsBuiltIn(spec.Kind) { + // Lazy create the kube client. + if cl, err = getKubeClient(cl, interfaces); err != nil { + return nil, err + } + sharedInformers = getSharedInformers(sharedInformers, cl, resyncPeriod) + + source, err := builtin.New(sharedInformers, spec) + if err != nil { + return nil, err + } + sources = append(sources, source) + } else { + // Lazy-create the dynamic client + if dynClient, err = getDynamicClient(dynClient, interfaces); err != nil { + return nil, err + } + // Unknown types use the dynamic source. + source, err := dynamic.New(dynClient, resyncPeriod, spec, cfg) + if err != nil { + return nil, err + } + sources = append(sources, source) + } + } + + return &aggregate{ + sources: sources, + }, nil +} + +func getKubeClient(cl kubernetes.Interface, interfaces client.Interfaces) (kubernetes.Interface, error) { + if cl != nil { + return cl, nil + } + return interfaces.KubeClient() +} + +func getSharedInformers(sharedInformers informers.SharedInformerFactory, + cl kubernetes.Interface, resyncPeriod time.Duration) informers.SharedInformerFactory { + if sharedInformers != nil { + return sharedInformers + } + return informers.NewSharedInformerFactory(cl, resyncPeriod) +} + +func getDynamicClient(cl kubeDynamic.Interface, interfaces client.Interfaces) (kubeDynamic.Interface, error) { + if cl != nil { + return cl, nil + } + return interfaces.DynamicInterface() +} + +type aggregate struct { + mu sync.Mutex + sources []runtime.Source +} + +func (s *aggregate) Start(handler resource.EventHandler) error { + s.mu.Lock() + defer s.mu.Unlock() + + // Create an intermediate handler that captures sync events from each source. + syncGroup := sync.WaitGroup{} + syncGroup.Add(len(s.sources)) + syncHandler := func(e resource.Event) { + if e.Kind == resource.FullSync { + syncGroup.Done() + } else { + // Not a sync event, just pass on to the real handler. + handler(e) + } + } + + for _, source := range s.sources { + if err := source.Start(syncHandler); err != nil { + return err + } + } + + // After all of the sources have synced, return a fullSync event. + go func() { + syncGroup.Wait() + handler(resource.FullSyncEvent) + }() + + return nil +} + +func (s *aggregate) Stop() { + for _, source := range s.sources { + source.Stop() + } +} diff --git a/galley/pkg/source/kube/source_test.go b/galley/pkg/source/kube/source_test.go new file mode 100644 index 000000000000..6a7c19bad300 --- /dev/null +++ b/galley/pkg/source/kube/source_test.go @@ -0,0 +1,219 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package kube_test + +import ( + "testing" + + "github.com/gogo/protobuf/proto" + "github.com/gogo/protobuf/types" + . "github.com/onsi/gomega" + + "istio.io/istio/galley/pkg/meshconfig" + kubeMetadata "istio.io/istio/galley/pkg/metadata/kube" + "istio.io/istio/galley/pkg/runtime" + "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/galley/pkg/source/kube" + "istio.io/istio/galley/pkg/source/kube/builtin" + "istio.io/istio/galley/pkg/source/kube/client" + kubeConverter "istio.io/istio/galley/pkg/source/kube/dynamic/converter" + "istio.io/istio/galley/pkg/source/kube/schema" + "istio.io/istio/galley/pkg/testing/events" + "istio.io/istio/galley/pkg/testing/mock" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + k8sRuntime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/dynamic/fake" + dtesting "k8s.io/client-go/testing" +) + +var ( + emptyInfo resource.Info + + cfg = &kubeConverter.Config{ + Mesh: meshconfig.NewInMemory(), + } +) + +func init() { + b := resource.NewSchemaBuilder() + b.Register("empty", "type.googleapis.com/google.protobuf.Empty") + s := b.Build() + emptyInfo, _ = s.Lookup("empty") +} + +func TestBuiltin(t *testing.T) { + g := NewGomegaWithT(t) + + ki := mock.NewKube() + src := newSource(t, ki, builtin.GetSchema().All()...) + spec := *builtin.GetSchema().Get("Node") + + // Start the source. + ch := newChan() + startOrFail(src, ch, t) + defer src.Stop() + + // Wait for the full sync event. + actual := events.ExpectOne(t, ch) + g.Expect(actual).To(Equal(resource.FullSyncEvent)) + + // Create a Node. + node := &corev1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "fakeName", + ResourceVersion: "rv1", + }, + Spec: corev1.NodeSpec{ + PodCIDR: "10.40.0.0/24", + }, + } + var err error + node, err = ki.Client.CoreV1().Nodes().Create(node) + g.Expect(err).To(BeNil()) + + expected := toEvent(resource.Added, spec, node, &node.Spec) + actual = events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) +} + +func TestDynamic(t *testing.T) { + g := NewGomegaWithT(t) + ki := mock.NewKube() + cl := fake.NewSimpleDynamicClient(k8sRuntime.NewScheme()) + + ki.AddResponse(cl, nil) + + i1 := unstructured.Unstructured{ + Object: map[string]interface{}{ + "apiVersion": "v1", + "kind": "List", + "metadata": map[string]interface{}{ + "name": "f1", + "namespace": "ns", + "resourceVersion": "rv1", + }, + "spec": map[string]interface{}{}, + }, + } + + cl.PrependReactor("*", "foos", func(_ dtesting.Action) (handled bool, ret k8sRuntime.Object, err error) { + return true, &unstructured.UnstructuredList{Items: []unstructured.Unstructured{i1}}, nil + }) + w := mock.NewWatch() + cl.PrependWatchReactor("foos", func(_ dtesting.Action) (handled bool, ret watch.Interface, err error) { + return true, w, nil + }) + + spec := schema.ResourceSpec{ + Kind: "List", + Singular: "List", + Plural: "foos", + Target: emptyInfo, + Converter: kubeConverter.Get("identity"), + } + + specs := append([]schema.ResourceSpec{spec}, getDynamicSpecs()...) + ch := make(chan resource.Event) + + s := newSource(t, ki, specs...) + startOrFail(s, ch, t) + defer s.Stop() + + expected := resource.Event{ + Kind: resource.Added, + Entry: resource.Entry{ + ID: resource.VersionedKey{ + Key: resource.Key{ + Collection: emptyInfo.Collection, + FullName: resource.FullNameFromNamespaceAndName(i1.GetNamespace(), i1.GetName()), + }, + Version: resource.Version(i1.GetResourceVersion()), + }, + Metadata: resource.Metadata{ + Labels: i1.GetLabels(), + Annotations: i1.GetAnnotations(), + }, + Item: &types.Empty{}, + }, + } + + actual := events.Expect(t, ch) + g.Expect(actual).To(Equal(expected)) + + // The full sync will come after the event. + actual = events.ExpectOne(t, ch) + g.Expect(actual).To(Equal(resource.FullSyncEvent)) +} + +func newSource(t *testing.T, ki client.Interfaces, specs ...schema.ResourceSpec) runtime.Source { + src, err := kube.New(ki, 0, schema.New(specs...), cfg) + if err != nil { + t.Fatal(err) + } + if src == nil { + t.Fatal("Expected non nil source") + } + return src +} + +func newChan() chan resource.Event { + return make(chan resource.Event, 1024) +} + +func toEvent(kind resource.EventKind, spec schema.ResourceSpec, objectMeta metav1.Object, + item proto.Message) resource.Event { + event := resource.Event{ + Kind: kind, + Entry: resource.Entry{ + ID: resource.VersionedKey{ + Key: resource.Key{ + Collection: spec.Target.Collection, + FullName: resource.FullNameFromNamespaceAndName(objectMeta.GetNamespace(), objectMeta.GetName()), + }, + Version: resource.Version(objectMeta.GetResourceVersion()), + }, + Metadata: resource.Metadata{ + Labels: objectMeta.GetLabels(), + Annotations: objectMeta.GetAnnotations(), + }, + Item: item, + }, + } + + return event +} + +func getDynamicSpecs() []schema.ResourceSpec { + all := kubeMetadata.Types.All() + specs := make([]schema.ResourceSpec, 0, len(all)) + for _, spec := range all { + if !builtin.IsBuiltIn(spec.Kind) { + specs = append(specs, spec) + } + } + return specs +} + +func startOrFail(s runtime.Source, ch chan resource.Event, t *testing.T) { + t.Helper() + g := NewGomegaWithT(t) + + err := s.Start(events.ChannelHandler(ch)) + g.Expect(err).To(BeNil()) +} diff --git a/galley/pkg/source/kube/stats/stats.go b/galley/pkg/source/kube/stats/stats.go index 257c68db8d34..26a36064c105 100644 --- a/galley/pkg/source/kube/stats/stats.go +++ b/galley/pkg/source/kube/stats/stats.go @@ -45,39 +45,38 @@ var ( ) var ( - listenerHandleEventError = stats.Int64( - "galley/kube/source/listener_handle_event_error_total", - "The number of times the listener's handleEvent has errored", + sourceEventError = stats.Int64( + "galley/source/kube/event_error_total", + "The number of times a kubernetes source encountered errored while handling an event", stats.UnitDimensionless) - - listenerHandleEventSuccess = stats.Int64( - "galley/kube/source/listener_handle_event_success_total", - "The number of times the listener's handleEvent has succeeded", + sourceEventSuccess = stats.Int64( + "galley/source/kube/event_success_total", + "The number of times a kubernetes source successfully handled an event", stats.UnitDimensionless) sourceConversionSuccess = stats.Int64( - "galley/kube/source/source_converter_success_total", - "The number of times resource conversion in the source's ProcessEvent has succeeded", + "galley/source/kube/dynamic/converter_success_total", + "The number of times a dynamic kubernetes source successfully converted a resource", stats.UnitDimensionless) sourceConversionFailure = stats.Int64( - "galley/kube/source/source_converter_failure_total", - "The number of times resource conversion in the source's ProcessEvent has failed", + "galley/source/kube/dynamic/converter_failure_total", + "The number of times a dynamnic kubernetes source failed converting a resources", stats.UnitDimensionless) ) -// RecordHandleEventError records an error handling a kube event. -func RecordHandleEventError(msg string) { +// RecordEventError records an error handling a kube event. +func RecordEventError(msg string) { ctx, ctxErr := tag.New(context.Background(), tag.Insert(ErrorTag, msg)) if ctxErr != nil { log.Scope.Errorf("error creating context to record handleEvent error") } else { - stats.Record(ctx, listenerHandleEventError.M(1)) + stats.Record(ctx, sourceEventError.M(1)) } } -// RecordHandleEventSuccess records successfully handling a kube event. -func RecordHandleEventSuccess() { - stats.Record(context.Background(), listenerHandleEventSuccess.M(1)) +// RecordEventSuccess records successfully handling a kube event. +func RecordEventSuccess() { + stats.Record(context.Background(), sourceEventSuccess.M(1)) } type contextKey struct { @@ -142,8 +141,8 @@ func init() { var noKeys []tag.Key err := view.Register( - newView(listenerHandleEventError, errorKey, view.Count()), - newView(listenerHandleEventSuccess, noKeys, view.Count()), + newView(sourceEventError, errorKey, view.Count()), + newView(sourceEventSuccess, noKeys, view.Count()), newView(sourceConversionSuccess, conversionKeys, view.Count()), newView(sourceConversionFailure, conversionKeys, view.Count()), ) diff --git a/galley/pkg/source/kube/tombstone/recover.go b/galley/pkg/source/kube/tombstone/recover.go new file mode 100644 index 000000000000..58ec29717977 --- /dev/null +++ b/galley/pkg/source/kube/tombstone/recover.go @@ -0,0 +1,51 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tombstone + +import ( + "fmt" + "reflect" + + "istio.io/istio/galley/pkg/source/kube/log" + "istio.io/istio/galley/pkg/source/kube/stats" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/tools/cache" +) + +// RecoverResource from a kubernetes tombstone (cache.DeletedFinalStateUnknown). Returns the resource or nil if +// recovery failed. +func RecoverResource(obj interface{}) metav1.Object { + var tombstone cache.DeletedFinalStateUnknown + var ok bool + if tombstone, ok = obj.(cache.DeletedFinalStateUnknown); !ok { + msg := fmt.Sprintf("error decoding object, invalid type: %v", reflect.TypeOf(obj)) + log.Scope.Error(msg) + stats.RecordEventError(msg) + return nil + } + + var objectMeta metav1.Object + if objectMeta, ok = tombstone.Obj.(metav1.Object); !ok { + msg := fmt.Sprintf("error decoding object tombstone, invalid type: %v", + reflect.TypeOf(tombstone.Obj)) + log.Scope.Error(msg) + stats.RecordEventError(msg) + return nil + } + + log.Scope.Infof("Recovered deleted object '%s' from tombstone", objectMeta.GetName()) + return objectMeta +} diff --git a/galley/pkg/source/kube/tombstone/recover_test.go b/galley/pkg/source/kube/tombstone/recover_test.go new file mode 100644 index 000000000000..2d57e12d437f --- /dev/null +++ b/galley/pkg/source/kube/tombstone/recover_test.go @@ -0,0 +1,54 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tombstone_test + +import ( + "testing" + + . "github.com/onsi/gomega" + + "istio.io/istio/galley/pkg/source/kube/tombstone" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/tools/cache" +) + +func TestRecoverySuccessful(t *testing.T) { + g := NewGomegaWithT(t) + expected := &corev1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "mynode", + }, + } + obj := tombstone.RecoverResource(cache.DeletedFinalStateUnknown{ + Obj: expected, + }) + g.Expect(obj).To(Equal(expected)) +} + +func TestUnkownTypeShouldFail(t *testing.T) { + g := NewGomegaWithT(t) + obj := tombstone.RecoverResource(&struct{}{}) + g.Expect(obj).To(BeNil()) +} + +func TestUnkownTombstoneObjectShouldFail(t *testing.T) { + g := NewGomegaWithT(t) + obj := tombstone.RecoverResource(cache.DeletedFinalStateUnknown{ + Obj: &struct{}{}, + }) + g.Expect(obj).To(BeNil()) +} diff --git a/galley/pkg/testing/events/events.go b/galley/pkg/testing/events/events.go new file mode 100644 index 000000000000..90f030135f21 --- /dev/null +++ b/galley/pkg/testing/events/events.go @@ -0,0 +1,92 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package events + +import ( + "testing" + "time" + + "istio.io/istio/galley/pkg/runtime/resource" + "istio.io/istio/pkg/test/util/retry" +) + +const ( + DefaultTimeout = 2 * time.Second + DefaultPeriod = 100 * time.Millisecond +) + +var ( + defaultOptions = []retry.Option{retry.Timeout(DefaultTimeout), retry.Delay(DefaultPeriod)} +) + +// ChannelHandler creates an EventHandler that adds the event to the provided channel. +func ChannelHandler(ch chan resource.Event) resource.EventHandler { + return func(e resource.Event) { + ch <- e + } +} + +// ExpectOne polls the channel and ensures that only a single event is available. Fails the test +// if the number of events != 1. +func ExpectOne(t *testing.T, ch chan resource.Event, options ...retry.Option) resource.Event { + t.Helper() + e := Expect(t, ch, options...) + + // Use the default options for checking for none. This is to avoid long delays when the caller + // increases the polling timeout. + ExpectNone(t, ch, defaultOptions...) + return e +} + +// Expect polls the channel for the next event and returns it. Fails the test if no event found. +func Expect(t *testing.T, ch chan resource.Event, options ...retry.Option) resource.Event { + t.Helper() + + e := Poll(ch, options...) + if e == nil { + t.Fatalf("timed out waiting for event") + } + return *e +} + +// ExpectNone polls the channel and fails the test if any events are available. +func ExpectNone(t *testing.T, ch chan resource.Event, options ...retry.Option) { + t.Helper() + e := Poll(ch, options...) + if e != nil { + t.Fatalf("expected no events, found: %v", e) + } +} + +// Poll polls the channel to see if there is an event waiting. Returns either the next event or nil. +func Poll(ch chan resource.Event, options ...retry.Option) *resource.Event { + // Add the default options first, then the arguments (if provided). Since options are applied + // in-order, this allows the defaults to be overridden. + options = append(append([]retry.Option{}, defaultOptions...), options...) + e, err := retry.Do(func() (result interface{}, completed bool, err error) { + select { + case e := <-ch: + return &e, true, nil + default: + return nil, false, nil + } + }, options...) + + if err != nil { + return nil + } + + return e.(*resource.Event) +} diff --git a/galley/pkg/testing/mock/kube.go b/galley/pkg/testing/mock/kube.go index fd160b013988..185a48acb76b 100644 --- a/galley/pkg/testing/mock/kube.go +++ b/galley/pkg/testing/mock/kube.go @@ -17,19 +17,29 @@ package mock import ( "errors" + "istio.io/istio/galley/pkg/source/kube/client" + "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" "k8s.io/client-go/dynamic" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/fake" ) +var _ client.Interfaces = &Kube{} + // Kube is a mock implementation of galley/pkg/common/Kube type Kube struct { response1 []interface{} response2 []error + + Client *fake.Clientset } // NewKube returns a new instance of mock Kube. func NewKube() *Kube { - return &Kube{} + return &Kube{ + Client: fake.NewSimpleClientset(), + } } // DynamicInterface implementation. @@ -60,3 +70,7 @@ func (k *Kube) AddResponse(r1 interface{}, r2 error) { func (k *Kube) APIExtensionsClientset() (clientset.Interface, error) { return nil, errors.New("not supported") } + +func (k *Kube) KubeClient() (kubernetes.Interface, error) { + return k.Client, nil +} diff --git a/galley/pkg/testing/testdata/dataset.gen.go b/galley/pkg/testing/testdata/dataset.gen.go index ac9dff07bcbd..fd578953220f 100644 --- a/galley/pkg/testing/testdata/dataset.gen.go +++ b/galley/pkg/testing/testdata/dataset.gen.go @@ -14,10 +14,14 @@ // dataset/networking.istio.io/v1alpha3/destinationRule_expected.json // dataset/networking.istio.io/v1alpha3/gateway.yaml // dataset/networking.istio.io/v1alpha3/gateway_expected.json -// dataset/v1/node.yaml.skip +// dataset/v1/endpoints.yaml +// dataset/v1/endpoints_expected.json +// dataset/v1/node.yaml // dataset/v1/node_expected.json -// dataset/v1/pod.yaml.skip +// dataset/v1/pod.yaml // dataset/v1/pod_expected.json +// dataset/v1/service.yaml +// dataset/v1/service_expected.json // DO NOT EDIT! package testdata @@ -759,7 +763,150 @@ func datasetNetworkingIstioIoV1alpha3Gateway_expectedJson() (*asset, error) { return a, nil } -var _datasetV1NodeYamlSkip = []byte(`apiVersion: v1 +var _datasetV1EndpointsYaml = []byte(`apiVersion: v1 +kind: Endpoints +metadata: + creationTimestamp: 2018-02-12T15:48:44Z + labels: + addonmanager.kubernetes.io/mode: Reconcile + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: KubeDNS + name: kube-dns + resourceVersion: "50573380" + selfLink: /api/v1/namespaces/kube-system/endpoints/kube-dns + uid: 34991433-100c-11e8-a600-42010a8002c3 +subsets: +- addresses: + - ip: 10.40.0.5 + nodeName: gke-istio-test-default-pool-866a0405-420r + targetRef: + kind: Pod + name: kube-dns-548976df6c-kxnhb + namespace: kube-system + resourceVersion: "50573379" + uid: 66b0ca7d-f71d-11e8-af4f-42010a800072 + - ip: 10.40.1.4 + nodeName: gke-istio-test-default-pool-866a0405-ftch + targetRef: + kind: Pod + name: kube-dns-548976df6c-d9kkv + namespace: kube-system + resourceVersion: "50572715" + uid: dd4bbbd4-f71c-11e8-af4f-42010a800072 + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP +`) + +func datasetV1EndpointsYamlBytes() ([]byte, error) { + return _datasetV1EndpointsYaml, nil +} + +func datasetV1EndpointsYaml() (*asset, error) { + bytes, err := datasetV1EndpointsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "dataset/v1/endpoints.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _datasetV1Endpoints_expectedJson = []byte(`{ + "k8s/core/v1/endpoints": [ + { + "TypeURL": "type.googleapis.com/k8s.io.api.core.v1.Endpoints", + "Metadata": { + "name": "kube-dns", + "labels": { + "addonmanager.kubernetes.io/mode": "Reconcile", + "k8s-app": "kube-dns", + "kubernetes.io/cluster-service": "true", + "kubernetes.io/name": "KubeDNS" + } + }, + "Body": { + "metadata": { + "creationTimestamp": "2018-02-12T15:48:44Z", + "labels": { + "addonmanager.kubernetes.io/mode": "Reconcile", + "k8s-app": "kube-dns", + "kubernetes.io/cluster-service": "true", + "kubernetes.io/name": "KubeDNS" + }, + "name": "kube-dns", + "resourceVersion": "50573380", + "selfLink": "/api/v1/namespaces/kube-system/endpoints/kube-dns", + "uid": "34991433-100c-11e8-a600-42010a8002c3" + }, + "subsets": [ + { + "addresses": [ + { + "ip": "10.40.0.5", + "nodeName": "gke-istio-test-default-pool-866a0405-420r", + "targetRef": { + "kind": "Pod", + "name": "kube-dns-548976df6c-kxnhb", + "namespace": "kube-system", + "resourceVersion": "50573379", + "uid": "66b0ca7d-f71d-11e8-af4f-42010a800072" + } + }, + { + "ip": "10.40.1.4", + "nodeName": "gke-istio-test-default-pool-866a0405-ftch", + "targetRef": { + "kind": "Pod", + "name": "kube-dns-548976df6c-d9kkv", + "namespace": "kube-system", + "resourceVersion": "50572715", + "uid": "dd4bbbd4-f71c-11e8-af4f-42010a800072" + } + } + ], + "ports": [ + { + "name": "dns", + "port": 53, + "protocol": "UDP" + }, + { + "name": "dns-tcp", + "port": 53, + "protocol": "TCP" + } + ] + } + ] + } + } + ] +} +`) + +func datasetV1Endpoints_expectedJsonBytes() ([]byte, error) { + return _datasetV1Endpoints_expectedJson, nil +} + +func datasetV1Endpoints_expectedJson() (*asset, error) { + bytes, err := datasetV1Endpoints_expectedJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "dataset/v1/endpoints_expected.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _datasetV1NodeYaml = []byte(`apiVersion: v1 kind: Node metadata: annotations: @@ -778,7 +925,7 @@ metadata: failure-domain.beta.kubernetes.io/zone: us-central1-a kubernetes.io/hostname: gke-istio-test-default-pool-866a0405-420r name: gke-istio-test-default-pool-866a0405-420r - resourceVersion: "59148590" + resourceVersion: "60695251" selfLink: /api/v1/nodes/gke-istio-test-default-pool-866a0405-420r uid: 8f63dfef-c8d6-11e8-8901-42010a800278 spec: @@ -787,12 +934,12 @@ spec: providerID: gce://nathanmittler-istio-test/us-central1-a/gke-istio-test-default-pool-866a0405-420r status: addresses: - - address: 10.128.0.4 - type: InternalIP - - address: 35.238.214.129 - type: ExternalIP - - address: gke-istio-test-default-pool-866a0405-420r - type: Hostname + - address: 10.128.0.4 + type: InternalIP + - address: 35.238.214.129 + type: ExternalIP + - address: gke-istio-test-default-pool-866a0405-420r + type: Hostname allocatable: cpu: 3920m ephemeral-storage: "47093746742" @@ -806,139 +953,139 @@ status: memory: 15399244Ki pods: "110" conditions: - - lastHeartbeatTime: 2019-01-08T18:09:08Z - lastTransitionTime: 2018-12-03T17:00:58Z - message: node is functioning properly - reason: UnregisterNetDevice - status: "False" - type: FrequentUnregisterNetDevice - - lastHeartbeatTime: 2019-01-08T18:09:08Z - lastTransitionTime: 2018-12-03T16:55:56Z - message: kernel has no deadlock - reason: KernelHasNoDeadlock - status: "False" - type: KernelDeadlock - - lastHeartbeatTime: 2018-10-05T19:40:58Z - lastTransitionTime: 2018-10-05T19:40:58Z - message: RouteController created a route - reason: RouteCreated - status: "False" - type: NetworkUnavailable - - lastHeartbeatTime: 2019-01-08T18:09:39Z - lastTransitionTime: 2018-12-03T16:55:57Z - message: kubelet has sufficient disk space available - reason: KubeletHasSufficientDisk - status: "False" - type: OutOfDisk - - lastHeartbeatTime: 2019-01-08T18:09:39Z - lastTransitionTime: 2018-12-03T16:55:57Z - message: kubelet has sufficient memory available - reason: KubeletHasSufficientMemory - status: "False" - type: MemoryPressure - - lastHeartbeatTime: 2019-01-08T18:09:39Z - lastTransitionTime: 2018-12-03T16:55:57Z - message: kubelet has no disk pressure - reason: KubeletHasNoDiskPressure - status: "False" - type: DiskPressure - - lastHeartbeatTime: 2019-01-08T18:09:39Z - lastTransitionTime: 2018-10-05T19:40:48Z - message: kubelet has sufficient PID available - reason: KubeletHasSufficientPID - status: "False" - type: PIDPressure - - lastHeartbeatTime: 2019-01-08T18:09:39Z - lastTransitionTime: 2018-12-03T16:56:07Z - message: kubelet is posting ready status. AppArmor enabled - reason: KubeletReady - status: "True" - type: Ready + - lastHeartbeatTime: 2019-01-15T17:36:51Z + lastTransitionTime: 2018-12-03T17:00:58Z + message: node is functioning properly + reason: UnregisterNetDevice + status: "False" + type: FrequentUnregisterNetDevice + - lastHeartbeatTime: 2019-01-15T17:36:51Z + lastTransitionTime: 2018-12-03T16:55:56Z + message: kernel has no deadlock + reason: KernelHasNoDeadlock + status: "False" + type: KernelDeadlock + - lastHeartbeatTime: 2018-10-05T19:40:58Z + lastTransitionTime: 2018-10-05T19:40:58Z + message: RouteController created a route + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:55:57Z + message: kubelet has sufficient disk space available + reason: KubeletHasSufficientDisk + status: "False" + type: OutOfDisk + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:55:57Z + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:55:57Z + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-10-05T19:40:48Z + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:56:07Z + message: kubelet is posting ready status. AppArmor enabled + reason: KubeletReady + status: "True" + type: Ready daemonEndpoints: kubeletEndpoint: Port: 10250 images: - - names: - - gcr.io/stackdriver-agents/stackdriver-logging-agent@sha256:a33f69d0034fdce835a1eb7df8a051ea74323f3fc30d911bbd2e3f2aef09fc93 - - gcr.io/stackdriver-agents/stackdriver-logging-agent:0.3-1.5.34-1-k8s-1 - sizeBytes: 554981103 - - names: - - istio/examples-bookinfo-reviews-v3@sha256:8c0385f0ca799e655d8770b52cb4618ba54e8966a0734ab1aeb6e8b14e171a3b - - istio/examples-bookinfo-reviews-v3:1.9.0 - sizeBytes: 525074812 - - names: - - istio/examples-bookinfo-reviews-v2@sha256:d2483dcb235b27309680177726e4e86905d66e47facaf1d57ed590b2bf95c8ad - - istio/examples-bookinfo-reviews-v2:1.9.0 - sizeBytes: 525074812 - - names: - - istio/examples-bookinfo-reviews-v1@sha256:920d46b3c526376b28b90d0e895ca7682d36132e6338301fcbcd567ef81bde05 - - istio/examples-bookinfo-reviews-v1:1.9.0 - sizeBytes: 525074812 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:8cea2c055dd3d3ab78f99584256efcc1cff7d8ddbed11cded404e9d164235502 - sizeBytes: 448337138 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:9949bc22667ef88e54ae91700a64bf1459e8c14ed92b870b7ec2f630e14cf3c1 - sizeBytes: 446407220 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:fc1f957cfa26673768be8fa865066f730f22fde98a6e80654d00f755a643b507 - sizeBytes: 446407220 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:23a52850819d5196d66e8e20f4f63f314f779716f830e1d109ad0e24b1f0df43 - sizeBytes: 446407220 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:e338c2c5cbc379db24c5b2d67a4acc9cca9a069c2927217fca0ce7cbc582d312 - - gcr.io/nathanmittler-istio-test/proxyv2:latest - sizeBytes: 446398900 - - names: - - gcr.io/istio-release/proxyv2@sha256:dec972eab4f46c974feec1563ea484ad4995edf55ea91d42e148c5db04b3d4d2 - - gcr.io/istio-release/proxyv2:master-latest-daily - sizeBytes: 353271308 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:cb4a29362ff9014bf1d96e0ce2bb6337bf034908bb4a8d48af0628a4d8d64413 - sizeBytes: 344543156 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:3f4115cd8c26a17f6bf8ea49f1ff5b875382bda5a6d46281c70c886e802666b0 - sizeBytes: 344257154 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:cdd2f527b4bd392b533d2d0e62c257c19d5a35a6b5fc3512aa327c560866aec1 - sizeBytes: 344257154 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:6ec1dced4cee8569c77817927938fa4341f939e0dddab511bc3ee8724d652ae2 - sizeBytes: 344257154 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:9d502fd29961bc3464f7906ac0e86b07edf01cf4892352ef780e55b3525fb0b8 - sizeBytes: 344257154 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:4e75c42518bb46376cfe0b4fbaa3da1d8f1cea99f706736f1b0b04a3ac554db2 - sizeBytes: 344201616 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:58a7511f549448f6f86280559069bc57f5c754877ebec69da5bbc7ad55e42162 - sizeBytes: 344201616 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:7f60a750d15cda9918e9172e529270ce78c670751d4027f6adc6bdc84ec2d884 - sizeBytes: 344201436 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:6fc25c08212652c7539caaf0f6d913d929f84c54767f20066657ce0f4e6a51e0 - sizeBytes: 344193424 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:4e93825950c831ce6d2b65c9a80921c8860035e39a4b384d38d40f7d2cb2a4ee - sizeBytes: 344185232 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:842216399613774640a4605202d446cf61bd48ff20e12391a0239cbc6a8f2c77 - sizeBytes: 344185052 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:8ee2bb6fc5484373227b17e377fc226d8d19be11d38d6dbc304970bd46bc929b - sizeBytes: 344159662 - - names: - - gcr.io/nathanmittler-istio-test/pilot@sha256:111e432396950e01835c23471660968c37928c38bb08f2d53b820bbfe7cbd558 - sizeBytes: 307722351 - - names: - - gcr.io/nathanmittler-istio-test/pilot@sha256:2445d3c2839825be2decbafcd3f2668bdf148ba9acbbb855810006a58899f320 - sizeBytes: 307722351 - - names: - - gcr.io/nathanmittler-istio-test/pilot@sha256:b62e9f12609b89892bb38c858936f76d81aa3ccdc91a3961309f900c1c4f574b - sizeBytes: 307722351 + - names: + - gcr.io/stackdriver-agents/stackdriver-logging-agent@sha256:a33f69d0034fdce835a1eb7df8a051ea74323f3fc30d911bbd2e3f2aef09fc93 + - gcr.io/stackdriver-agents/stackdriver-logging-agent:0.3-1.5.34-1-k8s-1 + sizeBytes: 554981103 + - names: + - istio/examples-bookinfo-reviews-v3@sha256:8c0385f0ca799e655d8770b52cb4618ba54e8966a0734ab1aeb6e8b14e171a3b + - istio/examples-bookinfo-reviews-v3:1.9.0 + sizeBytes: 525074812 + - names: + - istio/examples-bookinfo-reviews-v2@sha256:d2483dcb235b27309680177726e4e86905d66e47facaf1d57ed590b2bf95c8ad + - istio/examples-bookinfo-reviews-v2:1.9.0 + sizeBytes: 525074812 + - names: + - istio/examples-bookinfo-reviews-v1@sha256:920d46b3c526376b28b90d0e895ca7682d36132e6338301fcbcd567ef81bde05 + - istio/examples-bookinfo-reviews-v1:1.9.0 + sizeBytes: 525074812 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:8cea2c055dd3d3ab78f99584256efcc1cff7d8ddbed11cded404e9d164235502 + sizeBytes: 448337138 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:9949bc22667ef88e54ae91700a64bf1459e8c14ed92b870b7ec2f630e14cf3c1 + sizeBytes: 446407220 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:fc1f957cfa26673768be8fa865066f730f22fde98a6e80654d00f755a643b507 + sizeBytes: 446407220 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:23a52850819d5196d66e8e20f4f63f314f779716f830e1d109ad0e24b1f0df43 + sizeBytes: 446407220 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:e338c2c5cbc379db24c5b2d67a4acc9cca9a069c2927217fca0ce7cbc582d312 + - gcr.io/nathanmittler-istio-test/proxyv2:latest + sizeBytes: 446398900 + - names: + - gcr.io/istio-release/proxyv2@sha256:dec972eab4f46c974feec1563ea484ad4995edf55ea91d42e148c5db04b3d4d2 + - gcr.io/istio-release/proxyv2:master-latest-daily + sizeBytes: 353271308 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:cb4a29362ff9014bf1d96e0ce2bb6337bf034908bb4a8d48af0628a4d8d64413 + sizeBytes: 344543156 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:9d502fd29961bc3464f7906ac0e86b07edf01cf4892352ef780e55b3525fb0b8 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:cdd2f527b4bd392b533d2d0e62c257c19d5a35a6b5fc3512aa327c560866aec1 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:6ec1dced4cee8569c77817927938fa4341f939e0dddab511bc3ee8724d652ae2 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:3f4115cd8c26a17f6bf8ea49f1ff5b875382bda5a6d46281c70c886e802666b0 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:4e75c42518bb46376cfe0b4fbaa3da1d8f1cea99f706736f1b0b04a3ac554db2 + sizeBytes: 344201616 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:58a7511f549448f6f86280559069bc57f5c754877ebec69da5bbc7ad55e42162 + sizeBytes: 344201616 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:7f60a750d15cda9918e9172e529270ce78c670751d4027f6adc6bdc84ec2d884 + sizeBytes: 344201436 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:6fc25c08212652c7539caaf0f6d913d929f84c54767f20066657ce0f4e6a51e0 + sizeBytes: 344193424 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:4e93825950c831ce6d2b65c9a80921c8860035e39a4b384d38d40f7d2cb2a4ee + sizeBytes: 344185232 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:842216399613774640a4605202d446cf61bd48ff20e12391a0239cbc6a8f2c77 + sizeBytes: 344185052 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:8ee2bb6fc5484373227b17e377fc226d8d19be11d38d6dbc304970bd46bc929b + sizeBytes: 344159662 + - names: + - gcr.io/nathanmittler-istio-test/pilot@sha256:b62e9f12609b89892bb38c858936f76d81aa3ccdc91a3961309f900c1c4f574b + sizeBytes: 307722351 + - names: + - gcr.io/nathanmittler-istio-test/pilot@sha256:2445d3c2839825be2decbafcd3f2668bdf148ba9acbbb855810006a58899f320 + sizeBytes: 307722351 + - names: + - gcr.io/nathanmittler-istio-test/pilot@sha256:ea8e501811c06674bb4b4622862e2d12e700f5edadc01a050030a0b33a6435a6 + sizeBytes: 307722351 nodeInfo: architecture: amd64 bootID: 8f772c7c-09eb-41eb-8bb5-76ef214eaaa1 @@ -952,17 +1099,17 @@ status: systemUUID: F325F89C-D295-BDCD-A652-FD40F0049E32 `) -func datasetV1NodeYamlSkipBytes() ([]byte, error) { - return _datasetV1NodeYamlSkip, nil +func datasetV1NodeYamlBytes() ([]byte, error) { + return _datasetV1NodeYaml, nil } -func datasetV1NodeYamlSkip() (*asset, error) { - bytes, err := datasetV1NodeYamlSkipBytes() +func datasetV1NodeYaml() (*asset, error) { + bytes, err := datasetV1NodeYamlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "dataset/v1/node.yaml.skip", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{name: "dataset/v1/node.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1015,187 +1162,193 @@ func datasetV1Node_expectedJson() (*asset, error) { return a, nil } -var _datasetV1PodYamlSkip = []byte(`apiVersion: v1 +var _datasetV1PodYaml = []byte(`apiVersion: v1 kind: Pod metadata: annotations: scheduler.alpha.kubernetes.io/critical-pod: "" seccomp.security.alpha.kubernetes.io/pod: docker/default - creationTimestamp: "2018-12-03T16:59:57Z" + creationTimestamp: 2018-12-03T16:59:57Z generateName: kube-dns-548976df6c- labels: k8s-app: kube-dns pod-template-hash: "1045328927" name: kube-dns-548976df6c-d9kkv ownerReferences: - - apiVersion: apps/v1 - blockOwnerDeletion: true - controller: true - kind: ReplicaSet - name: kube-dns-548976df6c - uid: b589a851-f71b-11e8-af4f-42010a800072 + - apiVersion: apps/v1 + blockOwnerDeletion: true + controller: true + kind: ReplicaSet + name: kube-dns-548976df6c + uid: b589a851-f71b-11e8-af4f-42010a800072 resourceVersion: "50572715" selfLink: /api/v1/namespaces/kube-system/pods/kube-dns-548976df6c-d9kkv uid: dd4bbbd4-f71c-11e8-af4f-42010a800072 spec: containers: - - args: - - --domain=cluster.local. - - --dns-port=10053 - - --config-dir=/kube-dns-config - - --v=2 - env: - - name: PROMETHEUS_PORT - value: "10055" - image: k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13 - imagePullPolicy: IfNotPresent - livenessProbe: - failureThreshold: 5 - handler: - httpGet: - path: /healthcheck/kubedns - port: - intVal: 10054 - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: kubedns - ports: - - containerPort: 10053 - name: dns-local - protocol: UDP - - containerPort: 10053 - name: dns-tcp-local - protocol: TCP - - containerPort: 10055 - name: metrics - protocol: TCP - readinessProbe: - failureThreshold: 3 - handler: - httpGet: - path: /readiness - port: - intVal: 8081 - scheme: HTTP - initialDelaySeconds: 3 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /kube-dns-config - name: kube-dns-config - - mountPath: /var/run/secrets/kubernetes.io/serviceaccount - name: kube-dns-token-lwn8l - readOnly: true - - args: - - -v=2 - - -logtostderr - - -configDir=/etc/k8s/dns/dnsmasq-nanny - - -restartDnsmasq=true - - -- - - -k - - --cache-size=1000 - - --no-negcache - - --log-facility=- - - --server=/cluster.local/127.0.0.1#10053 - - --server=/in-addr.arpa/127.0.0.1#10053 - - --server=/ip6.arpa/127.0.0.1#10053 - image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13 - imagePullPolicy: IfNotPresent - livenessProbe: - failureThreshold: 5 - handler: - httpGet: - path: /healthcheck/dnsmasq - port: - intVal: 10054 - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: dnsmasq - ports: - - containerPort: 53 - name: dns - protocol: UDP - - containerPort: 53 - name: dns-tcp - protocol: TCP - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /etc/k8s/dns/dnsmasq-nanny - name: kube-dns-config - - mountPath: /var/run/secrets/kubernetes.io/serviceaccount - name: kube-dns-token-lwn8l - readOnly: true - - args: - - --v=2 - - --logtostderr - - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV - - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV - image: k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13 - imagePullPolicy: IfNotPresent - livenessProbe: - failureThreshold: 5 - handler: - httpGet: - path: /metrics - port: - intVal: 10054 - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: sidecar - ports: - - containerPort: 10054 - name: metrics - protocol: TCP - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/run/secrets/kubernetes.io/serviceaccount - name: kube-dns-token-lwn8l - readOnly: true - - command: - - /monitor - - --component=kubedns - - --target-port=10054 - - --stackdriver-prefix=container.googleapis.com/internal/addons - - --api-override=https://monitoring.googleapis.com/ - - --whitelisted-metrics=probe_kubedns_latency_ms,probe_kubedns_errors,dnsmasq_misses,dnsmasq_hits - - --pod-id=$(POD_NAME) - - --namespace-id=$(POD_NAMESPACE) - - --v=2 - env: - - name: POD_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.namespace - image: gcr.io/google-containers/prometheus-to-sd:v0.2.3 - imagePullPolicy: IfNotPresent - name: prometheus-to-sd - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/run/secrets/kubernetes.io/serviceaccount - name: kube-dns-token-lwn8l - readOnly: true + - args: + - --domain=cluster.local. + - --dns-port=10053 + - --config-dir=/kube-dns-config + - --v=2 + env: + - name: PROMETHEUS_PORT + value: "10055" + image: k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthcheck/kubedns + port: 10054 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: kubedns + ports: + - containerPort: 10053 + name: dns-local + protocol: UDP + - containerPort: 10053 + name: dns-tcp-local + protocol: TCP + - containerPort: 10055 + name: metrics + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /readiness + port: 8081 + scheme: HTTP + initialDelaySeconds: 3 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: + limits: + memory: 170Mi + requests: + cpu: 100m + memory: 70Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /kube-dns-config + name: kube-dns-config + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + - args: + - -v=2 + - -logtostderr + - -configDir=/etc/k8s/dns/dnsmasq-nanny + - -restartDnsmasq=true + - -- + - -k + - --cache-size=1000 + - --no-negcache + - --log-facility=- + - --server=/cluster.local/127.0.0.1#10053 + - --server=/in-addr.arpa/127.0.0.1#10053 + - --server=/ip6.arpa/127.0.0.1#10053 + image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthcheck/dnsmasq + port: 10054 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: dnsmasq + ports: + - containerPort: 53 + name: dns + protocol: UDP + - containerPort: 53 + name: dns-tcp + protocol: TCP + resources: + requests: + cpu: 150m + memory: 20Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /etc/k8s/dns/dnsmasq-nanny + name: kube-dns-config + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + - args: + - --v=2 + - --logtostderr + - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV + - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV + image: k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 5 + httpGet: + path: /metrics + port: 10054 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: sidecar + ports: + - containerPort: 10054 + name: metrics + protocol: TCP + resources: + requests: + cpu: 10m + memory: 20Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + - command: + - /monitor + - --component=kubedns + - --target-port=10054 + - --stackdriver-prefix=container.googleapis.com/internal/addons + - --api-override=https://monitoring.googleapis.com/ + - --whitelisted-metrics=probe_kubedns_latency_ms,probe_kubedns_errors,dnsmasq_misses,dnsmasq_hits + - --pod-id=$(POD_NAME) + - --namespace-id=$(POD_NAMESPACE) + - --v=2 + env: + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + image: gcr.io/google-containers/prometheus-to-sd:v0.2.3 + imagePullPolicy: IfNotPresent + name: prometheus-to-sd + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true dnsPolicy: Default nodeName: gke-istio-test-default-pool-866a0405-ftch priority: 2000000000 @@ -1205,104 +1358,105 @@ spec: securityContext: {} serviceAccount: kube-dns serviceAccountName: kube-dns - terminationGracePeriodSeconds: "30" + terminationGracePeriodSeconds: 30 tolerations: - - key: CriticalAddonsOnly - operator: Exists - - effect: NoExecute - key: node.kubernetes.io/not-ready - operator: Exists - tolerationSeconds: "300" - - effect: NoExecute - key: node.kubernetes.io/unreachable - operator: Exists - tolerationSeconds: "300" + - key: CriticalAddonsOnly + operator: Exists + - effect: NoExecute + key: node.kubernetes.io/not-ready + operator: Exists + tolerationSeconds: 300 + - effect: NoExecute + key: node.kubernetes.io/unreachable + operator: Exists + tolerationSeconds: 300 volumes: - - name: kube-dns-config - volumeSource: - configMap: - defaultMode: 420 - localObjectReference: - name: kube-dns - optional: true - - name: kube-dns-token-lwn8l - volumeSource: - secret: - defaultMode: 420 - secretName: kube-dns-token-lwn8l + - configMap: + defaultMode: 420 + name: kube-dns + optional: true + name: kube-dns-config + - name: kube-dns-token-lwn8l + secret: + defaultMode: 420 + secretName: kube-dns-token-lwn8l status: conditions: - - lastProbeTime: null - lastTransitionTime: "2018-12-03T17:00:00Z" - status: "True" - type: Initialized - - lastProbeTime: null - lastTransitionTime: "2018-12-03T17:00:20Z" - status: "True" - type: Ready - - lastProbeTime: null - lastTransitionTime: null - status: "True" - type: ContainersReady - - lastProbeTime: null - lastTransitionTime: "2018-12-03T16:59:57Z" - status: "True" - type: PodScheduled + - lastProbeTime: null + lastTransitionTime: 2018-12-03T17:00:00Z + status: "True" + type: Initialized + - lastProbeTime: null + lastTransitionTime: 2018-12-03T17:00:20Z + status: "True" + type: Ready + - lastProbeTime: null + lastTransitionTime: null + status: "True" + type: ContainersReady + - lastProbeTime: null + lastTransitionTime: 2018-12-03T16:59:57Z + status: "True" + type: PodScheduled containerStatuses: - - containerID: docker://676f6c98bfa136315c4ccf0fe40e7a56cbf9ac85128e94310eae82f191246b3e - image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13 - imageID: docker-pullable://k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64@sha256:45df3e8e0c551bd0c79cdba48ae6677f817971dcbd1eeed7fd1f9a35118410e4 - lastState: {} - name: dnsmasq - ready: true - state: - running: - startedAt: "2018-12-03T17:00:14Z" - - containerID: docker://93fd0664e150982dad0481c5260183308a7035a2f938ec50509d586ed586a107 - image: k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13 - imageID: docker-pullable://k8s.gcr.io/k8s-dns-kube-dns-amd64@sha256:618a82fa66cf0c75e4753369a6999032372be7308866fc9afb381789b1e5ad52 - lastState: {} - name: kubedns - ready: true - state: - running: - startedAt: "2018-12-03T17:00:10Z" - - containerID: docker://e823b79a0a48af75f2eebb1c89ba4c31e8c1ee67ee0d917ac7b4891b67d2cd0f - image: gcr.io/google-containers/prometheus-to-sd:v0.2.3 - imageID: docker-pullable://gcr.io/google-containers/prometheus-to-sd@sha256:be220ec4a66275442f11d420033c106bb3502a3217a99c806eef3cf9858788a2 - lastState: {} - name: prometheus-to-sd - ready: true - state: - running: - startedAt: "2018-12-03T17:00:18Z" - - containerID: docker://74223c401a8dac04b8bd29cdfedcb216881791b4e84bb80a15714991dd18735e - image: k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13 - imageID: docker-pullable://k8s.gcr.io/k8s-dns-sidecar-amd64@sha256:cedc8fe2098dffc26d17f64061296b7aa54258a31513b6c52df271a98bb522b3 - lastState: {} - name: sidecar - ready: true - state: - running: - startedAt: "2018-12-03T17:00:16Z" + - containerID: docker://676f6c98bfa136315c4ccf0fe40e7a56cbf9ac85128e94310eae82f191246b3e + image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13 + imageID: docker-pullable://k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64@sha256:45df3e8e0c551bd0c79cdba48ae6677f817971dcbd1eeed7fd1f9a35118410e4 + lastState: {} + name: dnsmasq + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:14Z + - containerID: docker://93fd0664e150982dad0481c5260183308a7035a2f938ec50509d586ed586a107 + image: k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13 + imageID: docker-pullable://k8s.gcr.io/k8s-dns-kube-dns-amd64@sha256:618a82fa66cf0c75e4753369a6999032372be7308866fc9afb381789b1e5ad52 + lastState: {} + name: kubedns + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:10Z + - containerID: docker://e823b79a0a48af75f2eebb1c89ba4c31e8c1ee67ee0d917ac7b4891b67d2cd0f + image: gcr.io/google-containers/prometheus-to-sd:v0.2.3 + imageID: docker-pullable://gcr.io/google-containers/prometheus-to-sd@sha256:be220ec4a66275442f11d420033c106bb3502a3217a99c806eef3cf9858788a2 + lastState: {} + name: prometheus-to-sd + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:18Z + - containerID: docker://74223c401a8dac04b8bd29cdfedcb216881791b4e84bb80a15714991dd18735e + image: k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13 + imageID: docker-pullable://k8s.gcr.io/k8s-dns-sidecar-amd64@sha256:cedc8fe2098dffc26d17f64061296b7aa54258a31513b6c52df271a98bb522b3 + lastState: {} + name: sidecar + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:16Z hostIP: 10.128.0.5 phase: Running podIP: 10.40.1.4 qosClass: Burstable - startTime: "2018-12-03T17:00:00Z" + startTime: 2018-12-03T17:00:00Z `) -func datasetV1PodYamlSkipBytes() ([]byte, error) { - return _datasetV1PodYamlSkip, nil +func datasetV1PodYamlBytes() ([]byte, error) { + return _datasetV1PodYaml, nil } -func datasetV1PodYamlSkip() (*asset, error) { - bytes, err := datasetV1PodYamlSkipBytes() +func datasetV1PodYaml() (*asset, error) { + bytes, err := datasetV1PodYamlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "dataset/v1/pod.yaml.skip", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{name: "dataset/v1/pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1310,7 +1464,7 @@ func datasetV1PodYamlSkip() (*asset, error) { var _datasetV1Pod_expectedJson = []byte(`{ "k8s/core/v1/pods": [ { - "TypeURL": "type.googleapis.com/k8s.io.api.core.v1.PodSpec", + "TypeURL": "type.googleapis.com/k8s.io.api.core.v1.Pod", "Metadata": { "name": "kube-dns-548976df6c-d9kkv", "annotations": { @@ -1323,268 +1477,405 @@ var _datasetV1Pod_expectedJson = []byte(`{ } }, "Body": { - "containers": [ - { - "args": [ - "--domain=cluster.local.", - "--dns-port=10053", - "--config-dir=/kube-dns-config", - "--v=2" - ], - "env": [ - { - "name": "PROMETHEUS_PORT", - "value": "10055" - } - ], - "image": "k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13", - "imagePullPolicy": "IfNotPresent", - "livenessProbe": { - "failureThreshold": 5, - "httpGet": { - "path": "/healthcheck/kubedns", - "port": 10054, - "scheme": "HTTP" - }, - "initialDelaySeconds": 60, - "periodSeconds": 10, - "successThreshold": 1, - "timeoutSeconds": 5 - }, - "name": "kubedns", - "ports": [ - { - "containerPort": 10053, - "name": "dns-local", - "protocol": "UDP" + "metadata": { + "annotations": { + "scheduler.alpha.kubernetes.io/critical-pod": "", + "seccomp.security.alpha.kubernetes.io/pod": "docker/default" + }, + "creationTimestamp": "2018-12-03T16:59:57Z", + "generateName": "kube-dns-548976df6c-", + "labels": { + "k8s-app": "kube-dns", + "pod-template-hash": "1045328927" + }, + "name": "kube-dns-548976df6c-d9kkv", + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ReplicaSet", + "name": "kube-dns-548976df6c", + "uid": "b589a851-f71b-11e8-af4f-42010a800072" + } + ], + "resourceVersion": "50572715", + "selfLink": "/api/v1/namespaces/kube-system/pods/kube-dns-548976df6c-d9kkv", + "uid": "dd4bbbd4-f71c-11e8-af4f-42010a800072" + }, + "spec": { + "containers": [ + { + "args": [ + "--domain=cluster.local.", + "--dns-port=10053", + "--config-dir=/kube-dns-config", + "--v=2" + ], + "env": [ + { + "name": "PROMETHEUS_PORT", + "value": "10055" + } + ], + "image": "k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13", + "imagePullPolicy": "IfNotPresent", + "livenessProbe": { + "failureThreshold": 5, + "httpGet": { + "path": "/healthcheck/kubedns", + "port": 10054, + "scheme": "HTTP" + }, + "initialDelaySeconds": 60, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 5 }, - { - "containerPort": 10053, - "name": "dns-tcp-local", - "protocol": "TCP" + "name": "kubedns", + "ports": [ + { + "containerPort": 10053, + "name": "dns-local", + "protocol": "UDP" + }, + { + "containerPort": 10053, + "name": "dns-tcp-local", + "protocol": "TCP" + }, + { + "containerPort": 10055, + "name": "metrics", + "protocol": "TCP" + } + ], + "readinessProbe": { + "failureThreshold": 3, + "httpGet": { + "path": "/readiness", + "port": 8081, + "scheme": "HTTP" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 5 }, - { - "containerPort": 10055, - "name": "metrics", - "protocol": "TCP" - } - ], - "readinessProbe": { - "failureThreshold": 3, - "httpGet": { - "path": "/readiness", - "port": 8081, - "scheme": "HTTP" + "resources": { + "limits": { + "memory": "170Mi" + }, + "requests": { + "cpu": "100m", + "memory": "70Mi" + } }, - "initialDelaySeconds": 3, - "periodSeconds": 10, - "successThreshold": 1, - "timeoutSeconds": 5 + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/kube-dns-config", + "name": "kube-dns-config" + }, + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-dns-token-lwn8l", + "readOnly": true + } + ] }, - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - "volumeMounts": [ - { - "mountPath": "/kube-dns-config", - "name": "kube-dns-config" + { + "args": [ + "-v=2", + "-logtostderr", + "-configDir=/etc/k8s/dns/dnsmasq-nanny", + "-restartDnsmasq=true", + "--", + "-k", + "--cache-size=1000", + "--no-negcache", + "--log-facility=-", + "--server=/cluster.local/127.0.0.1#10053", + "--server=/in-addr.arpa/127.0.0.1#10053", + "--server=/ip6.arpa/127.0.0.1#10053" + ], + "image": "k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13", + "imagePullPolicy": "IfNotPresent", + "livenessProbe": { + "failureThreshold": 5, + "httpGet": { + "path": "/healthcheck/dnsmasq", + "port": 10054, + "scheme": "HTTP" + }, + "initialDelaySeconds": 60, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 5 }, - { - "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", - "name": "kube-dns-token-lwn8l", - "readOnly": true - } - ] - }, - { - "args": [ - "-v=2", - "-logtostderr", - "-configDir=/etc/k8s/dns/dnsmasq-nanny", - "-restartDnsmasq=true", - "--", - "-k", - "--cache-size=1000", - "--no-negcache", - "--log-facility=-", - "--server=/cluster.local/127.0.0.1#10053", - "--server=/in-addr.arpa/127.0.0.1#10053", - "--server=/ip6.arpa/127.0.0.1#10053" - ], - "image": "k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13", - "imagePullPolicy": "IfNotPresent", - "livenessProbe": { - "failureThreshold": 5, - "httpGet": { - "path": "/healthcheck/dnsmasq", - "port": 10054, - "scheme": "HTTP" + "name": "dnsmasq", + "ports": [ + { + "containerPort": 53, + "name": "dns", + "protocol": "UDP" + }, + { + "containerPort": 53, + "name": "dns-tcp", + "protocol": "TCP" + } + ], + "resources": { + "requests": { + "cpu": "150m", + "memory": "20Mi" + } }, - "initialDelaySeconds": 60, - "periodSeconds": 10, - "successThreshold": 1, - "timeoutSeconds": 5 + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/etc/k8s/dns/dnsmasq-nanny", + "name": "kube-dns-config" + }, + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-dns-token-lwn8l", + "readOnly": true + } + ] }, - "name": "dnsmasq", - "ports": [ - { - "containerPort": 53, - "name": "dns", - "protocol": "UDP" - }, - { - "containerPort": 53, - "name": "dns-tcp", - "protocol": "TCP" - } - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - "volumeMounts": [ - { - "mountPath": "/etc/k8s/dns/dnsmasq-nanny", - "name": "kube-dns-config" + { + "args": [ + "--v=2", + "--logtostderr", + "--probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV", + "--probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV" + ], + "image": "k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13", + "imagePullPolicy": "IfNotPresent", + "livenessProbe": { + "failureThreshold": 5, + "httpGet": { + "path": "/metrics", + "port": 10054, + "scheme": "HTTP" + }, + "initialDelaySeconds": 60, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 5 }, - { - "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", - "name": "kube-dns-token-lwn8l", - "readOnly": true - } - ] - }, - { - "args": [ - "--v=2", - "--logtostderr", - "--probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV", - "--probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV" - ], - "image": "k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13", - "imagePullPolicy": "IfNotPresent", - "livenessProbe": { - "failureThreshold": 5, - "httpGet": { - "path": "/metrics", - "port": 10054, - "scheme": "HTTP" + "name": "sidecar", + "ports": [ + { + "containerPort": 10054, + "name": "metrics", + "protocol": "TCP" + } + ], + "resources": { + "requests": { + "cpu": "10m", + "memory": "20Mi" + } }, - "initialDelaySeconds": 60, - "periodSeconds": 10, - "successThreshold": 1, - "timeoutSeconds": 5 + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-dns-token-lwn8l", + "readOnly": true + } + ] }, - "name": "sidecar", - "ports": [ - { - "containerPort": 10054, - "name": "metrics", - "protocol": "TCP" - } - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - "volumeMounts": [ - { - "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", - "name": "kube-dns-token-lwn8l", - "readOnly": true - } - ] - }, - { - "command": [ - "/monitor", - "--component=kubedns", - "--target-port=10054", - "--stackdriver-prefix=container.googleapis.com/internal/addons", - "--api-override=https://monitoring.googleapis.com/", - "--whitelisted-metrics=probe_kubedns_latency_ms,probe_kubedns_errors,dnsmasq_misses,dnsmasq_hits", - "--pod-id=$(POD_NAME)", - "--namespace-id=$(POD_NAMESPACE)", - "--v=2" - ], - "env": [ - { - "name": "POD_NAME", - "valueFrom": { - "fieldRef": { - "apiVersion": "v1", - "fieldPath": "metadata.name" + { + "command": [ + "/monitor", + "--component=kubedns", + "--target-port=10054", + "--stackdriver-prefix=container.googleapis.com/internal/addons", + "--api-override=https://monitoring.googleapis.com/", + "--whitelisted-metrics=probe_kubedns_latency_ms,probe_kubedns_errors,dnsmasq_misses,dnsmasq_hits", + "--pod-id=$(POD_NAME)", + "--namespace-id=$(POD_NAMESPACE)", + "--v=2" + ], + "env": [ + { + "name": "POD_NAME", + "valueFrom": { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.name" + } + } + }, + { + "name": "POD_NAMESPACE", + "valueFrom": { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.namespace" + } } } + ], + "image": "gcr.io/google-containers/prometheus-to-sd:v0.2.3", + "imagePullPolicy": "IfNotPresent", + "name": "prometheus-to-sd", + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-dns-token-lwn8l", + "readOnly": true + } + ] + } + ], + "dnsPolicy": "Default", + "nodeName": "gke-istio-test-default-pool-866a0405-ftch", + "priority": 2000000000, + "priorityClassName": "system-cluster-critical", + "restartPolicy": "Always", + "schedulerName": "default-scheduler", + "securityContext": {}, + "serviceAccount": "kube-dns", + "serviceAccountName": "kube-dns", + "terminationGracePeriodSeconds": 30, + "tolerations": [ + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + }, + { + "effect": "NoExecute", + "key": "node.kubernetes.io/not-ready", + "operator": "Exists", + "tolerationSeconds": 300 + }, + { + "effect": "NoExecute", + "key": "node.kubernetes.io/unreachable", + "operator": "Exists", + "tolerationSeconds": 300 + } + ], + "volumes": [ + { + "configMap": { + "defaultMode": 420, + "name": "kube-dns", + "optional": true }, - { - "name": "POD_NAMESPACE", - "valueFrom": { - "fieldRef": { - "apiVersion": "v1", - "fieldPath": "metadata.namespace" - } + "name": "kube-dns-config" + }, + { + "name": "kube-dns-token-lwn8l", + "secret": { + "defaultMode": 420, + "secretName": "kube-dns-token-lwn8l" + } + } + ] + }, + "status": { + "conditions": [ + { + "lastProbeTime": null, + "lastTransitionTime": "2018-12-03T17:00:00Z", + "status": "True", + "type": "Initialized" + }, + { + "lastProbeTime": null, + "lastTransitionTime": "2018-12-03T17:00:20Z", + "status": "True", + "type": "Ready" + }, + { + "lastProbeTime": null, + "lastTransitionTime": null, + "status": "True", + "type": "ContainersReady" + }, + { + "lastProbeTime": null, + "lastTransitionTime": "2018-12-03T16:59:57Z", + "status": "True", + "type": "PodScheduled" + } + ], + "containerStatuses": [ + { + "containerID": "docker://676f6c98bfa136315c4ccf0fe40e7a56cbf9ac85128e94310eae82f191246b3e", + "image": "k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13", + "imageID": "docker-pullable://k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64@sha256:45df3e8e0c551bd0c79cdba48ae6677f817971dcbd1eeed7fd1f9a35118410e4", + "lastState": {}, + "name": "dnsmasq", + "ready": true, + "restartCount": 0, + "state": { + "running": { + "startedAt": "2018-12-03T17:00:14Z" } } - ], - "image": "gcr.io/google-containers/prometheus-to-sd:v0.2.3", - "imagePullPolicy": "IfNotPresent", - "name": "prometheus-to-sd", - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - "volumeMounts": [ - { - "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", - "name": "kube-dns-token-lwn8l", - "readOnly": true + }, + { + "containerID": "docker://93fd0664e150982dad0481c5260183308a7035a2f938ec50509d586ed586a107", + "image": "k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13", + "imageID": "docker-pullable://k8s.gcr.io/k8s-dns-kube-dns-amd64@sha256:618a82fa66cf0c75e4753369a6999032372be7308866fc9afb381789b1e5ad52", + "lastState": {}, + "name": "kubedns", + "ready": true, + "restartCount": 0, + "state": { + "running": { + "startedAt": "2018-12-03T17:00:10Z" + } } - ] - } - ], - "dnsPolicy": "Default", - "nodeName": "gke-istio-test-default-pool-866a0405-ftch", - "priority": 2000000000, - "priorityClassName": "system-cluster-critical", - "restartPolicy": "Always", - "schedulerName": "default-scheduler", - "securityContext": {}, - "serviceAccount": "kube-dns", - "serviceAccountName": "kube-dns", - "terminationGracePeriodSeconds": 30, - "tolerations": [ - { - "key": "CriticalAddonsOnly", - "operator": "Exists" - }, - { - "effect": "NoExecute", - "key": "node.kubernetes.io/not-ready", - "operator": "Exists", - "tolerationSeconds": 300 - }, - { - "effect": "NoExecute", - "key": "node.kubernetes.io/unreachable", - "operator": "Exists", - "tolerationSeconds": 300 - } - ], - "volumes": [ - { - "configMap": { - "defaultMode": 420, - "name": "kube-dns", - "optional": true }, - "name": "kube-dns-config" - }, - { - "name": "kube-dns-token-lwn8l", - "secret": { - "defaultMode": 420, - "secretName": "kube-dns-token-lwn8l" + { + "containerID": "docker://e823b79a0a48af75f2eebb1c89ba4c31e8c1ee67ee0d917ac7b4891b67d2cd0f", + "image": "gcr.io/google-containers/prometheus-to-sd:v0.2.3", + "imageID": "docker-pullable://gcr.io/google-containers/prometheus-to-sd@sha256:be220ec4a66275442f11d420033c106bb3502a3217a99c806eef3cf9858788a2", + "lastState": {}, + "name": "prometheus-to-sd", + "ready": true, + "restartCount": 0, + "state": { + "running": { + "startedAt": "2018-12-03T17:00:18Z" + } + } + }, + { + "containerID": "docker://74223c401a8dac04b8bd29cdfedcb216881791b4e84bb80a15714991dd18735e", + "image": "k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13", + "imageID": "docker-pullable://k8s.gcr.io/k8s-dns-sidecar-amd64@sha256:cedc8fe2098dffc26d17f64061296b7aa54258a31513b6c52df271a98bb522b3", + "lastState": {}, + "name": "sidecar", + "ready": true, + "restartCount": 0, + "state": { + "running": { + "startedAt": "2018-12-03T17:00:16Z" + } + } } - } - ] + ], + "hostIP": "10.128.0.5", + "phase": "Running", + "podIP": "10.40.1.4", + "qosClass": "Burstable", + "startTime": "2018-12-03T17:00:00Z" + } } } ] @@ -1606,6 +1897,114 @@ func datasetV1Pod_expectedJson() (*asset, error) { return a, nil } +var _datasetV1ServiceYaml = []byte(`apiVersion: v1 +kind: Service +metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"addonmanager.kubernetes.io/mode":"Reconcile","k8s-app":"kube-dns","kubernetes.io/cluster-service":"true","kubernetes.io/name":"KubeDNS"},"name":"kube-dns","namespace":"kube-system"},"spec":{"clusterIP":"10.43.240.10","ports":[{"name":"dns","port":53,"protocol":"UDP"},{"name":"dns-tcp","port":53,"protocol":"TCP"}],"selector":{"k8s-app":"kube-dns"}}} + creationTimestamp: 2018-02-12T15:48:44Z + labels: + addonmanager.kubernetes.io/mode: Reconcile + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: KubeDNS + name: kube-dns + resourceVersion: "274" + selfLink: /api/v1/namespaces/kube-system/services/kube-dns + uid: 3497d702-100c-11e8-a600-42010a8002c3 +spec: + clusterIP: 10.43.240.10 + ports: + - name: dns + port: 53 + protocol: UDP + targetPort: 53 + - name: dns-tcp + port: 53 + protocol: TCP + targetPort: 53 + selector: + k8s-app: kube-dns + sessionAffinity: None + type: ClusterIP +status: + loadBalancer: {} +`) + +func datasetV1ServiceYamlBytes() ([]byte, error) { + return _datasetV1ServiceYaml, nil +} + +func datasetV1ServiceYaml() (*asset, error) { + bytes, err := datasetV1ServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "dataset/v1/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _datasetV1Service_expectedJson = []byte(`{ + "k8s/core/v1/services": [ + { + "TypeURL": "type.googleapis.com/k8s.io.api.core.v1.ServiceSpec", + "Metadata": { + "name": "kube-dns", + "annotations": { + "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"addonmanager.kubernetes.io/mode\":\"Reconcile\",\"k8s-app\":\"kube-dns\",\"kubernetes.io/cluster-service\":\"true\",\"kubernetes.io/name\":\"KubeDNS\"},\"name\":\"kube-dns\",\"namespace\":\"kube-system\"},\"spec\":{\"clusterIP\":\"10.43.240.10\",\"ports\":[{\"name\":\"dns\",\"port\":53,\"protocol\":\"UDP\"},{\"name\":\"dns-tcp\",\"port\":53,\"protocol\":\"TCP\"}],\"selector\":{\"k8s-app\":\"kube-dns\"}}}\n" + }, + "labels": { + "addonmanager.kubernetes.io/mode": "Reconcile", + "k8s-app": "kube-dns", + "kubernetes.io/cluster-service": "true", + "kubernetes.io/name": "KubeDNS" + } + }, + "Body": { + "clusterIP": "10.43.240.10", + "ports": [ + { + "name": "dns", + "port": 53, + "protocol": "UDP", + "targetPort": 53 + }, + { + "name": "dns-tcp", + "port": 53, + "protocol": "TCP", + "targetPort": 53 + } + ], + "selector": { + "k8s-app": "kube-dns" + }, + "sessionAffinity": "None", + "type": "ClusterIP" + } + } + ] +} +`) + +func datasetV1Service_expectedJsonBytes() ([]byte, error) { + return _datasetV1Service_expectedJson, nil +} + +func datasetV1Service_expectedJson() (*asset, error) { + bytes, err := datasetV1Service_expectedJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "dataset/v1/service_expected.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + // Asset loads and returns the asset for the given name. // It returns an error if the asset could not be found or // could not be loaded. @@ -1672,10 +2071,14 @@ var _bindata = map[string]func() (*asset, error){ "dataset/networking.istio.io/v1alpha3/destinationRule_expected.json": datasetNetworkingIstioIoV1alpha3Destinationrule_expectedJson, "dataset/networking.istio.io/v1alpha3/gateway.yaml": datasetNetworkingIstioIoV1alpha3GatewayYaml, "dataset/networking.istio.io/v1alpha3/gateway_expected.json": datasetNetworkingIstioIoV1alpha3Gateway_expectedJson, - "dataset/v1/node.yaml.skip": datasetV1NodeYamlSkip, + "dataset/v1/endpoints.yaml": datasetV1EndpointsYaml, + "dataset/v1/endpoints_expected.json": datasetV1Endpoints_expectedJson, + "dataset/v1/node.yaml": datasetV1NodeYaml, "dataset/v1/node_expected.json": datasetV1Node_expectedJson, - "dataset/v1/pod.yaml.skip": datasetV1PodYamlSkip, + "dataset/v1/pod.yaml": datasetV1PodYaml, "dataset/v1/pod_expected.json": datasetV1Pod_expectedJson, + "dataset/v1/service.yaml": datasetV1ServiceYaml, + "dataset/v1/service_expected.json": datasetV1Service_expectedJson, } // AssetDir returns the file names below a certain @@ -1746,10 +2149,14 @@ var _bintree = &bintree{nil, map[string]*bintree{ }}, }}, "v1": &bintree{nil, map[string]*bintree{ - "node.yaml.skip": &bintree{datasetV1NodeYamlSkip, map[string]*bintree{}}, + "endpoints.yaml": &bintree{datasetV1EndpointsYaml, map[string]*bintree{}}, + "endpoints_expected.json": &bintree{datasetV1Endpoints_expectedJson, map[string]*bintree{}}, + "node.yaml": &bintree{datasetV1NodeYaml, map[string]*bintree{}}, "node_expected.json": &bintree{datasetV1Node_expectedJson, map[string]*bintree{}}, - "pod.yaml.skip": &bintree{datasetV1PodYamlSkip, map[string]*bintree{}}, + "pod.yaml": &bintree{datasetV1PodYaml, map[string]*bintree{}}, "pod_expected.json": &bintree{datasetV1Pod_expectedJson, map[string]*bintree{}}, + "service.yaml": &bintree{datasetV1ServiceYaml, map[string]*bintree{}}, + "service_expected.json": &bintree{datasetV1Service_expectedJson, map[string]*bintree{}}, }}, }}, }} diff --git a/galley/pkg/testing/testdata/dataset/v1/endpoints.yaml b/galley/pkg/testing/testdata/dataset/v1/endpoints.yaml new file mode 100644 index 000000000000..f9a07a40e109 --- /dev/null +++ b/galley/pkg/testing/testdata/dataset/v1/endpoints.yaml @@ -0,0 +1,38 @@ +apiVersion: v1 +kind: Endpoints +metadata: + creationTimestamp: 2018-02-12T15:48:44Z + labels: + addonmanager.kubernetes.io/mode: Reconcile + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: KubeDNS + name: kube-dns + resourceVersion: "50573380" + selfLink: /api/v1/namespaces/kube-system/endpoints/kube-dns + uid: 34991433-100c-11e8-a600-42010a8002c3 +subsets: +- addresses: + - ip: 10.40.0.5 + nodeName: gke-istio-test-default-pool-866a0405-420r + targetRef: + kind: Pod + name: kube-dns-548976df6c-kxnhb + namespace: kube-system + resourceVersion: "50573379" + uid: 66b0ca7d-f71d-11e8-af4f-42010a800072 + - ip: 10.40.1.4 + nodeName: gke-istio-test-default-pool-866a0405-ftch + targetRef: + kind: Pod + name: kube-dns-548976df6c-d9kkv + namespace: kube-system + resourceVersion: "50572715" + uid: dd4bbbd4-f71c-11e8-af4f-42010a800072 + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP diff --git a/galley/pkg/testing/testdata/dataset/v1/endpoints_expected.json b/galley/pkg/testing/testdata/dataset/v1/endpoints_expected.json new file mode 100644 index 000000000000..e42f1e6c9e9a --- /dev/null +++ b/galley/pkg/testing/testdata/dataset/v1/endpoints_expected.json @@ -0,0 +1,71 @@ +{ + "k8s/core/v1/endpoints": [ + { + "TypeURL": "type.googleapis.com/k8s.io.api.core.v1.Endpoints", + "Metadata": { + "name": "kube-dns", + "labels": { + "addonmanager.kubernetes.io/mode": "Reconcile", + "k8s-app": "kube-dns", + "kubernetes.io/cluster-service": "true", + "kubernetes.io/name": "KubeDNS" + } + }, + "Body": { + "metadata": { + "creationTimestamp": "2018-02-12T15:48:44Z", + "labels": { + "addonmanager.kubernetes.io/mode": "Reconcile", + "k8s-app": "kube-dns", + "kubernetes.io/cluster-service": "true", + "kubernetes.io/name": "KubeDNS" + }, + "name": "kube-dns", + "resourceVersion": "50573380", + "selfLink": "/api/v1/namespaces/kube-system/endpoints/kube-dns", + "uid": "34991433-100c-11e8-a600-42010a8002c3" + }, + "subsets": [ + { + "addresses": [ + { + "ip": "10.40.0.5", + "nodeName": "gke-istio-test-default-pool-866a0405-420r", + "targetRef": { + "kind": "Pod", + "name": "kube-dns-548976df6c-kxnhb", + "namespace": "kube-system", + "resourceVersion": "50573379", + "uid": "66b0ca7d-f71d-11e8-af4f-42010a800072" + } + }, + { + "ip": "10.40.1.4", + "nodeName": "gke-istio-test-default-pool-866a0405-ftch", + "targetRef": { + "kind": "Pod", + "name": "kube-dns-548976df6c-d9kkv", + "namespace": "kube-system", + "resourceVersion": "50572715", + "uid": "dd4bbbd4-f71c-11e8-af4f-42010a800072" + } + } + ], + "ports": [ + { + "name": "dns", + "port": 53, + "protocol": "UDP" + }, + { + "name": "dns-tcp", + "port": 53, + "protocol": "TCP" + } + ] + } + ] + } + } + ] +} diff --git a/galley/pkg/testing/testdata/dataset/v1/node.yaml b/galley/pkg/testing/testdata/dataset/v1/node.yaml new file mode 100644 index 000000000000..0c7cb33d22b2 --- /dev/null +++ b/galley/pkg/testing/testdata/dataset/v1/node.yaml @@ -0,0 +1,191 @@ +apiVersion: v1 +kind: Node +metadata: + annotations: + container.googleapis.com/instance_id: "2787417306096525587" + node.alpha.kubernetes.io/ttl: "0" + volumes.kubernetes.io/controller-managed-attach-detach: "true" + creationTimestamp: 2018-10-05T19:40:48Z + labels: + beta.kubernetes.io/arch: amd64 + beta.kubernetes.io/fluentd-ds-ready: "true" + beta.kubernetes.io/instance-type: n1-standard-4 + beta.kubernetes.io/os: linux + cloud.google.com/gke-nodepool: default-pool + cloud.google.com/gke-os-distribution: cos + failure-domain.beta.kubernetes.io/region: us-central1 + failure-domain.beta.kubernetes.io/zone: us-central1-a + kubernetes.io/hostname: gke-istio-test-default-pool-866a0405-420r + name: gke-istio-test-default-pool-866a0405-420r + resourceVersion: "60695251" + selfLink: /api/v1/nodes/gke-istio-test-default-pool-866a0405-420r + uid: 8f63dfef-c8d6-11e8-8901-42010a800278 +spec: + externalID: "1929748586650271976" + podCIDR: 10.40.0.0/24 + providerID: gce://nathanmittler-istio-test/us-central1-a/gke-istio-test-default-pool-866a0405-420r +status: + addresses: + - address: 10.128.0.4 + type: InternalIP + - address: 35.238.214.129 + type: ExternalIP + - address: gke-istio-test-default-pool-866a0405-420r + type: Hostname + allocatable: + cpu: 3920m + ephemeral-storage: "47093746742" + hugepages-2Mi: "0" + memory: 12699980Ki + pods: "110" + capacity: + cpu: "4" + ephemeral-storage: 98868448Ki + hugepages-2Mi: "0" + memory: 15399244Ki + pods: "110" + conditions: + - lastHeartbeatTime: 2019-01-15T17:36:51Z + lastTransitionTime: 2018-12-03T17:00:58Z + message: node is functioning properly + reason: UnregisterNetDevice + status: "False" + type: FrequentUnregisterNetDevice + - lastHeartbeatTime: 2019-01-15T17:36:51Z + lastTransitionTime: 2018-12-03T16:55:56Z + message: kernel has no deadlock + reason: KernelHasNoDeadlock + status: "False" + type: KernelDeadlock + - lastHeartbeatTime: 2018-10-05T19:40:58Z + lastTransitionTime: 2018-10-05T19:40:58Z + message: RouteController created a route + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:55:57Z + message: kubelet has sufficient disk space available + reason: KubeletHasSufficientDisk + status: "False" + type: OutOfDisk + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:55:57Z + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:55:57Z + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-10-05T19:40:48Z + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: 2019-01-15T17:37:32Z + lastTransitionTime: 2018-12-03T16:56:07Z + message: kubelet is posting ready status. AppArmor enabled + reason: KubeletReady + status: "True" + type: Ready + daemonEndpoints: + kubeletEndpoint: + Port: 10250 + images: + - names: + - gcr.io/stackdriver-agents/stackdriver-logging-agent@sha256:a33f69d0034fdce835a1eb7df8a051ea74323f3fc30d911bbd2e3f2aef09fc93 + - gcr.io/stackdriver-agents/stackdriver-logging-agent:0.3-1.5.34-1-k8s-1 + sizeBytes: 554981103 + - names: + - istio/examples-bookinfo-reviews-v3@sha256:8c0385f0ca799e655d8770b52cb4618ba54e8966a0734ab1aeb6e8b14e171a3b + - istio/examples-bookinfo-reviews-v3:1.9.0 + sizeBytes: 525074812 + - names: + - istio/examples-bookinfo-reviews-v2@sha256:d2483dcb235b27309680177726e4e86905d66e47facaf1d57ed590b2bf95c8ad + - istio/examples-bookinfo-reviews-v2:1.9.0 + sizeBytes: 525074812 + - names: + - istio/examples-bookinfo-reviews-v1@sha256:920d46b3c526376b28b90d0e895ca7682d36132e6338301fcbcd567ef81bde05 + - istio/examples-bookinfo-reviews-v1:1.9.0 + sizeBytes: 525074812 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:8cea2c055dd3d3ab78f99584256efcc1cff7d8ddbed11cded404e9d164235502 + sizeBytes: 448337138 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:9949bc22667ef88e54ae91700a64bf1459e8c14ed92b870b7ec2f630e14cf3c1 + sizeBytes: 446407220 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:fc1f957cfa26673768be8fa865066f730f22fde98a6e80654d00f755a643b507 + sizeBytes: 446407220 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:23a52850819d5196d66e8e20f4f63f314f779716f830e1d109ad0e24b1f0df43 + sizeBytes: 446407220 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:e338c2c5cbc379db24c5b2d67a4acc9cca9a069c2927217fca0ce7cbc582d312 + - gcr.io/nathanmittler-istio-test/proxyv2:latest + sizeBytes: 446398900 + - names: + - gcr.io/istio-release/proxyv2@sha256:dec972eab4f46c974feec1563ea484ad4995edf55ea91d42e148c5db04b3d4d2 + - gcr.io/istio-release/proxyv2:master-latest-daily + sizeBytes: 353271308 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:cb4a29362ff9014bf1d96e0ce2bb6337bf034908bb4a8d48af0628a4d8d64413 + sizeBytes: 344543156 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:9d502fd29961bc3464f7906ac0e86b07edf01cf4892352ef780e55b3525fb0b8 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:cdd2f527b4bd392b533d2d0e62c257c19d5a35a6b5fc3512aa327c560866aec1 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:6ec1dced4cee8569c77817927938fa4341f939e0dddab511bc3ee8724d652ae2 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:3f4115cd8c26a17f6bf8ea49f1ff5b875382bda5a6d46281c70c886e802666b0 + sizeBytes: 344257154 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:4e75c42518bb46376cfe0b4fbaa3da1d8f1cea99f706736f1b0b04a3ac554db2 + sizeBytes: 344201616 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:58a7511f549448f6f86280559069bc57f5c754877ebec69da5bbc7ad55e42162 + sizeBytes: 344201616 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:7f60a750d15cda9918e9172e529270ce78c670751d4027f6adc6bdc84ec2d884 + sizeBytes: 344201436 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:6fc25c08212652c7539caaf0f6d913d929f84c54767f20066657ce0f4e6a51e0 + sizeBytes: 344193424 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:4e93825950c831ce6d2b65c9a80921c8860035e39a4b384d38d40f7d2cb2a4ee + sizeBytes: 344185232 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:842216399613774640a4605202d446cf61bd48ff20e12391a0239cbc6a8f2c77 + sizeBytes: 344185052 + - names: + - gcr.io/nathanmittler-istio-test/proxyv2@sha256:8ee2bb6fc5484373227b17e377fc226d8d19be11d38d6dbc304970bd46bc929b + sizeBytes: 344159662 + - names: + - gcr.io/nathanmittler-istio-test/pilot@sha256:b62e9f12609b89892bb38c858936f76d81aa3ccdc91a3961309f900c1c4f574b + sizeBytes: 307722351 + - names: + - gcr.io/nathanmittler-istio-test/pilot@sha256:2445d3c2839825be2decbafcd3f2668bdf148ba9acbbb855810006a58899f320 + sizeBytes: 307722351 + - names: + - gcr.io/nathanmittler-istio-test/pilot@sha256:ea8e501811c06674bb4b4622862e2d12e700f5edadc01a050030a0b33a6435a6 + sizeBytes: 307722351 + nodeInfo: + architecture: amd64 + bootID: 8f772c7c-09eb-41eb-8bb5-76ef214eaaa1 + containerRuntimeVersion: docker://17.3.2 + kernelVersion: 4.14.65+ + kubeProxyVersion: v1.11.3-gke.18 + kubeletVersion: v1.11.3-gke.18 + machineID: f325f89cd295bdcda652fd40f0049e32 + operatingSystem: linux + osImage: Container-Optimized OS from Google + systemUUID: F325F89C-D295-BDCD-A652-FD40F0049E32 diff --git a/galley/pkg/testing/testdata/dataset/v1/node.yaml.skip b/galley/pkg/testing/testdata/dataset/v1/node.yaml.skip deleted file mode 100644 index b5367a06cc68..000000000000 --- a/galley/pkg/testing/testdata/dataset/v1/node.yaml.skip +++ /dev/null @@ -1,191 +0,0 @@ -apiVersion: v1 -kind: Node -metadata: - annotations: - container.googleapis.com/instance_id: "2787417306096525587" - node.alpha.kubernetes.io/ttl: "0" - volumes.kubernetes.io/controller-managed-attach-detach: "true" - creationTimestamp: 2018-10-05T19:40:48Z - labels: - beta.kubernetes.io/arch: amd64 - beta.kubernetes.io/fluentd-ds-ready: "true" - beta.kubernetes.io/instance-type: n1-standard-4 - beta.kubernetes.io/os: linux - cloud.google.com/gke-nodepool: default-pool - cloud.google.com/gke-os-distribution: cos - failure-domain.beta.kubernetes.io/region: us-central1 - failure-domain.beta.kubernetes.io/zone: us-central1-a - kubernetes.io/hostname: gke-istio-test-default-pool-866a0405-420r - name: gke-istio-test-default-pool-866a0405-420r - resourceVersion: "59148590" - selfLink: /api/v1/nodes/gke-istio-test-default-pool-866a0405-420r - uid: 8f63dfef-c8d6-11e8-8901-42010a800278 -spec: - externalID: "1929748586650271976" - podCIDR: 10.40.0.0/24 - providerID: gce://nathanmittler-istio-test/us-central1-a/gke-istio-test-default-pool-866a0405-420r -status: - addresses: - - address: 10.128.0.4 - type: InternalIP - - address: 35.238.214.129 - type: ExternalIP - - address: gke-istio-test-default-pool-866a0405-420r - type: Hostname - allocatable: - cpu: 3920m - ephemeral-storage: "47093746742" - hugepages-2Mi: "0" - memory: 12699980Ki - pods: "110" - capacity: - cpu: "4" - ephemeral-storage: 98868448Ki - hugepages-2Mi: "0" - memory: 15399244Ki - pods: "110" - conditions: - - lastHeartbeatTime: 2019-01-08T18:09:08Z - lastTransitionTime: 2018-12-03T17:00:58Z - message: node is functioning properly - reason: UnregisterNetDevice - status: "False" - type: FrequentUnregisterNetDevice - - lastHeartbeatTime: 2019-01-08T18:09:08Z - lastTransitionTime: 2018-12-03T16:55:56Z - message: kernel has no deadlock - reason: KernelHasNoDeadlock - status: "False" - type: KernelDeadlock - - lastHeartbeatTime: 2018-10-05T19:40:58Z - lastTransitionTime: 2018-10-05T19:40:58Z - message: RouteController created a route - reason: RouteCreated - status: "False" - type: NetworkUnavailable - - lastHeartbeatTime: 2019-01-08T18:09:39Z - lastTransitionTime: 2018-12-03T16:55:57Z - message: kubelet has sufficient disk space available - reason: KubeletHasSufficientDisk - status: "False" - type: OutOfDisk - - lastHeartbeatTime: 2019-01-08T18:09:39Z - lastTransitionTime: 2018-12-03T16:55:57Z - message: kubelet has sufficient memory available - reason: KubeletHasSufficientMemory - status: "False" - type: MemoryPressure - - lastHeartbeatTime: 2019-01-08T18:09:39Z - lastTransitionTime: 2018-12-03T16:55:57Z - message: kubelet has no disk pressure - reason: KubeletHasNoDiskPressure - status: "False" - type: DiskPressure - - lastHeartbeatTime: 2019-01-08T18:09:39Z - lastTransitionTime: 2018-10-05T19:40:48Z - message: kubelet has sufficient PID available - reason: KubeletHasSufficientPID - status: "False" - type: PIDPressure - - lastHeartbeatTime: 2019-01-08T18:09:39Z - lastTransitionTime: 2018-12-03T16:56:07Z - message: kubelet is posting ready status. AppArmor enabled - reason: KubeletReady - status: "True" - type: Ready - daemonEndpoints: - kubeletEndpoint: - Port: 10250 - images: - - names: - - gcr.io/stackdriver-agents/stackdriver-logging-agent@sha256:a33f69d0034fdce835a1eb7df8a051ea74323f3fc30d911bbd2e3f2aef09fc93 - - gcr.io/stackdriver-agents/stackdriver-logging-agent:0.3-1.5.34-1-k8s-1 - sizeBytes: 554981103 - - names: - - istio/examples-bookinfo-reviews-v3@sha256:8c0385f0ca799e655d8770b52cb4618ba54e8966a0734ab1aeb6e8b14e171a3b - - istio/examples-bookinfo-reviews-v3:1.9.0 - sizeBytes: 525074812 - - names: - - istio/examples-bookinfo-reviews-v2@sha256:d2483dcb235b27309680177726e4e86905d66e47facaf1d57ed590b2bf95c8ad - - istio/examples-bookinfo-reviews-v2:1.9.0 - sizeBytes: 525074812 - - names: - - istio/examples-bookinfo-reviews-v1@sha256:920d46b3c526376b28b90d0e895ca7682d36132e6338301fcbcd567ef81bde05 - - istio/examples-bookinfo-reviews-v1:1.9.0 - sizeBytes: 525074812 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:8cea2c055dd3d3ab78f99584256efcc1cff7d8ddbed11cded404e9d164235502 - sizeBytes: 448337138 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:9949bc22667ef88e54ae91700a64bf1459e8c14ed92b870b7ec2f630e14cf3c1 - sizeBytes: 446407220 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:fc1f957cfa26673768be8fa865066f730f22fde98a6e80654d00f755a643b507 - sizeBytes: 446407220 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:23a52850819d5196d66e8e20f4f63f314f779716f830e1d109ad0e24b1f0df43 - sizeBytes: 446407220 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:e338c2c5cbc379db24c5b2d67a4acc9cca9a069c2927217fca0ce7cbc582d312 - - gcr.io/nathanmittler-istio-test/proxyv2:latest - sizeBytes: 446398900 - - names: - - gcr.io/istio-release/proxyv2@sha256:dec972eab4f46c974feec1563ea484ad4995edf55ea91d42e148c5db04b3d4d2 - - gcr.io/istio-release/proxyv2:master-latest-daily - sizeBytes: 353271308 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:cb4a29362ff9014bf1d96e0ce2bb6337bf034908bb4a8d48af0628a4d8d64413 - sizeBytes: 344543156 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:3f4115cd8c26a17f6bf8ea49f1ff5b875382bda5a6d46281c70c886e802666b0 - sizeBytes: 344257154 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:cdd2f527b4bd392b533d2d0e62c257c19d5a35a6b5fc3512aa327c560866aec1 - sizeBytes: 344257154 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:6ec1dced4cee8569c77817927938fa4341f939e0dddab511bc3ee8724d652ae2 - sizeBytes: 344257154 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:9d502fd29961bc3464f7906ac0e86b07edf01cf4892352ef780e55b3525fb0b8 - sizeBytes: 344257154 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:4e75c42518bb46376cfe0b4fbaa3da1d8f1cea99f706736f1b0b04a3ac554db2 - sizeBytes: 344201616 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:58a7511f549448f6f86280559069bc57f5c754877ebec69da5bbc7ad55e42162 - sizeBytes: 344201616 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:7f60a750d15cda9918e9172e529270ce78c670751d4027f6adc6bdc84ec2d884 - sizeBytes: 344201436 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:6fc25c08212652c7539caaf0f6d913d929f84c54767f20066657ce0f4e6a51e0 - sizeBytes: 344193424 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:4e93825950c831ce6d2b65c9a80921c8860035e39a4b384d38d40f7d2cb2a4ee - sizeBytes: 344185232 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:842216399613774640a4605202d446cf61bd48ff20e12391a0239cbc6a8f2c77 - sizeBytes: 344185052 - - names: - - gcr.io/nathanmittler-istio-test/proxyv2@sha256:8ee2bb6fc5484373227b17e377fc226d8d19be11d38d6dbc304970bd46bc929b - sizeBytes: 344159662 - - names: - - gcr.io/nathanmittler-istio-test/pilot@sha256:111e432396950e01835c23471660968c37928c38bb08f2d53b820bbfe7cbd558 - sizeBytes: 307722351 - - names: - - gcr.io/nathanmittler-istio-test/pilot@sha256:2445d3c2839825be2decbafcd3f2668bdf148ba9acbbb855810006a58899f320 - sizeBytes: 307722351 - - names: - - gcr.io/nathanmittler-istio-test/pilot@sha256:b62e9f12609b89892bb38c858936f76d81aa3ccdc91a3961309f900c1c4f574b - sizeBytes: 307722351 - nodeInfo: - architecture: amd64 - bootID: 8f772c7c-09eb-41eb-8bb5-76ef214eaaa1 - containerRuntimeVersion: docker://17.3.2 - kernelVersion: 4.14.65+ - kubeProxyVersion: v1.11.3-gke.18 - kubeletVersion: v1.11.3-gke.18 - machineID: f325f89cd295bdcda652fd40f0049e32 - operatingSystem: linux - osImage: Container-Optimized OS from Google - systemUUID: F325F89C-D295-BDCD-A652-FD40F0049E32 diff --git a/galley/pkg/testing/testdata/dataset/v1/pod.yaml b/galley/pkg/testing/testdata/dataset/v1/pod.yaml new file mode 100644 index 000000000000..58fdbd19e1e1 --- /dev/null +++ b/galley/pkg/testing/testdata/dataset/v1/pod.yaml @@ -0,0 +1,282 @@ +apiVersion: v1 +kind: Pod +metadata: + annotations: + scheduler.alpha.kubernetes.io/critical-pod: "" + seccomp.security.alpha.kubernetes.io/pod: docker/default + creationTimestamp: 2018-12-03T16:59:57Z + generateName: kube-dns-548976df6c- + labels: + k8s-app: kube-dns + pod-template-hash: "1045328927" + name: kube-dns-548976df6c-d9kkv + ownerReferences: + - apiVersion: apps/v1 + blockOwnerDeletion: true + controller: true + kind: ReplicaSet + name: kube-dns-548976df6c + uid: b589a851-f71b-11e8-af4f-42010a800072 + resourceVersion: "50572715" + selfLink: /api/v1/namespaces/kube-system/pods/kube-dns-548976df6c-d9kkv + uid: dd4bbbd4-f71c-11e8-af4f-42010a800072 +spec: + containers: + - args: + - --domain=cluster.local. + - --dns-port=10053 + - --config-dir=/kube-dns-config + - --v=2 + env: + - name: PROMETHEUS_PORT + value: "10055" + image: k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthcheck/kubedns + port: 10054 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: kubedns + ports: + - containerPort: 10053 + name: dns-local + protocol: UDP + - containerPort: 10053 + name: dns-tcp-local + protocol: TCP + - containerPort: 10055 + name: metrics + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /readiness + port: 8081 + scheme: HTTP + initialDelaySeconds: 3 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: + limits: + memory: 170Mi + requests: + cpu: 100m + memory: 70Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /kube-dns-config + name: kube-dns-config + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + - args: + - -v=2 + - -logtostderr + - -configDir=/etc/k8s/dns/dnsmasq-nanny + - -restartDnsmasq=true + - -- + - -k + - --cache-size=1000 + - --no-negcache + - --log-facility=- + - --server=/cluster.local/127.0.0.1#10053 + - --server=/in-addr.arpa/127.0.0.1#10053 + - --server=/ip6.arpa/127.0.0.1#10053 + image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthcheck/dnsmasq + port: 10054 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: dnsmasq + ports: + - containerPort: 53 + name: dns + protocol: UDP + - containerPort: 53 + name: dns-tcp + protocol: TCP + resources: + requests: + cpu: 150m + memory: 20Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /etc/k8s/dns/dnsmasq-nanny + name: kube-dns-config + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + - args: + - --v=2 + - --logtostderr + - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV + - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV + image: k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 5 + httpGet: + path: /metrics + port: 10054 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: sidecar + ports: + - containerPort: 10054 + name: metrics + protocol: TCP + resources: + requests: + cpu: 10m + memory: 20Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + - command: + - /monitor + - --component=kubedns + - --target-port=10054 + - --stackdriver-prefix=container.googleapis.com/internal/addons + - --api-override=https://monitoring.googleapis.com/ + - --whitelisted-metrics=probe_kubedns_latency_ms,probe_kubedns_errors,dnsmasq_misses,dnsmasq_hits + - --pod-id=$(POD_NAME) + - --namespace-id=$(POD_NAMESPACE) + - --v=2 + env: + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + image: gcr.io/google-containers/prometheus-to-sd:v0.2.3 + imagePullPolicy: IfNotPresent + name: prometheus-to-sd + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-dns-token-lwn8l + readOnly: true + dnsPolicy: Default + nodeName: gke-istio-test-default-pool-866a0405-ftch + priority: 2000000000 + priorityClassName: system-cluster-critical + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + serviceAccount: kube-dns + serviceAccountName: kube-dns + terminationGracePeriodSeconds: 30 + tolerations: + - key: CriticalAddonsOnly + operator: Exists + - effect: NoExecute + key: node.kubernetes.io/not-ready + operator: Exists + tolerationSeconds: 300 + - effect: NoExecute + key: node.kubernetes.io/unreachable + operator: Exists + tolerationSeconds: 300 + volumes: + - configMap: + defaultMode: 420 + name: kube-dns + optional: true + name: kube-dns-config + - name: kube-dns-token-lwn8l + secret: + defaultMode: 420 + secretName: kube-dns-token-lwn8l +status: + conditions: + - lastProbeTime: null + lastTransitionTime: 2018-12-03T17:00:00Z + status: "True" + type: Initialized + - lastProbeTime: null + lastTransitionTime: 2018-12-03T17:00:20Z + status: "True" + type: Ready + - lastProbeTime: null + lastTransitionTime: null + status: "True" + type: ContainersReady + - lastProbeTime: null + lastTransitionTime: 2018-12-03T16:59:57Z + status: "True" + type: PodScheduled + containerStatuses: + - containerID: docker://676f6c98bfa136315c4ccf0fe40e7a56cbf9ac85128e94310eae82f191246b3e + image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13 + imageID: docker-pullable://k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64@sha256:45df3e8e0c551bd0c79cdba48ae6677f817971dcbd1eeed7fd1f9a35118410e4 + lastState: {} + name: dnsmasq + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:14Z + - containerID: docker://93fd0664e150982dad0481c5260183308a7035a2f938ec50509d586ed586a107 + image: k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13 + imageID: docker-pullable://k8s.gcr.io/k8s-dns-kube-dns-amd64@sha256:618a82fa66cf0c75e4753369a6999032372be7308866fc9afb381789b1e5ad52 + lastState: {} + name: kubedns + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:10Z + - containerID: docker://e823b79a0a48af75f2eebb1c89ba4c31e8c1ee67ee0d917ac7b4891b67d2cd0f + image: gcr.io/google-containers/prometheus-to-sd:v0.2.3 + imageID: docker-pullable://gcr.io/google-containers/prometheus-to-sd@sha256:be220ec4a66275442f11d420033c106bb3502a3217a99c806eef3cf9858788a2 + lastState: {} + name: prometheus-to-sd + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:18Z + - containerID: docker://74223c401a8dac04b8bd29cdfedcb216881791b4e84bb80a15714991dd18735e + image: k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13 + imageID: docker-pullable://k8s.gcr.io/k8s-dns-sidecar-amd64@sha256:cedc8fe2098dffc26d17f64061296b7aa54258a31513b6c52df271a98bb522b3 + lastState: {} + name: sidecar + ready: true + restartCount: 0 + state: + running: + startedAt: 2018-12-03T17:00:16Z + hostIP: 10.128.0.5 + phase: Running + podIP: 10.40.1.4 + qosClass: Burstable + startTime: 2018-12-03T17:00:00Z diff --git a/galley/pkg/testing/testdata/dataset/v1/pod.yaml.skip b/galley/pkg/testing/testdata/dataset/v1/pod.yaml.skip deleted file mode 100644 index f3138251daa6..000000000000 --- a/galley/pkg/testing/testdata/dataset/v1/pod.yaml.skip +++ /dev/null @@ -1,275 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - annotations: - scheduler.alpha.kubernetes.io/critical-pod: "" - seccomp.security.alpha.kubernetes.io/pod: docker/default - creationTimestamp: "2018-12-03T16:59:57Z" - generateName: kube-dns-548976df6c- - labels: - k8s-app: kube-dns - pod-template-hash: "1045328927" - name: kube-dns-548976df6c-d9kkv - ownerReferences: - - apiVersion: apps/v1 - blockOwnerDeletion: true - controller: true - kind: ReplicaSet - name: kube-dns-548976df6c - uid: b589a851-f71b-11e8-af4f-42010a800072 - resourceVersion: "50572715" - selfLink: /api/v1/namespaces/kube-system/pods/kube-dns-548976df6c-d9kkv - uid: dd4bbbd4-f71c-11e8-af4f-42010a800072 -spec: - containers: - - args: - - --domain=cluster.local. - - --dns-port=10053 - - --config-dir=/kube-dns-config - - --v=2 - env: - - name: PROMETHEUS_PORT - value: "10055" - image: k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13 - imagePullPolicy: IfNotPresent - livenessProbe: - failureThreshold: 5 - handler: - httpGet: - path: /healthcheck/kubedns - port: - intVal: 10054 - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: kubedns - ports: - - containerPort: 10053 - name: dns-local - protocol: UDP - - containerPort: 10053 - name: dns-tcp-local - protocol: TCP - - containerPort: 10055 - name: metrics - protocol: TCP - readinessProbe: - failureThreshold: 3 - handler: - httpGet: - path: /readiness - port: - intVal: 8081 - scheme: HTTP - initialDelaySeconds: 3 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /kube-dns-config - name: kube-dns-config - - mountPath: /var/run/secrets/kubernetes.io/serviceaccount - name: kube-dns-token-lwn8l - readOnly: true - - args: - - -v=2 - - -logtostderr - - -configDir=/etc/k8s/dns/dnsmasq-nanny - - -restartDnsmasq=true - - -- - - -k - - --cache-size=1000 - - --no-negcache - - --log-facility=- - - --server=/cluster.local/127.0.0.1#10053 - - --server=/in-addr.arpa/127.0.0.1#10053 - - --server=/ip6.arpa/127.0.0.1#10053 - image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13 - imagePullPolicy: IfNotPresent - livenessProbe: - failureThreshold: 5 - handler: - httpGet: - path: /healthcheck/dnsmasq - port: - intVal: 10054 - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: dnsmasq - ports: - - containerPort: 53 - name: dns - protocol: UDP - - containerPort: 53 - name: dns-tcp - protocol: TCP - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /etc/k8s/dns/dnsmasq-nanny - name: kube-dns-config - - mountPath: /var/run/secrets/kubernetes.io/serviceaccount - name: kube-dns-token-lwn8l - readOnly: true - - args: - - --v=2 - - --logtostderr - - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV - - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV - image: k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13 - imagePullPolicy: IfNotPresent - livenessProbe: - failureThreshold: 5 - handler: - httpGet: - path: /metrics - port: - intVal: 10054 - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: sidecar - ports: - - containerPort: 10054 - name: metrics - protocol: TCP - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/run/secrets/kubernetes.io/serviceaccount - name: kube-dns-token-lwn8l - readOnly: true - - command: - - /monitor - - --component=kubedns - - --target-port=10054 - - --stackdriver-prefix=container.googleapis.com/internal/addons - - --api-override=https://monitoring.googleapis.com/ - - --whitelisted-metrics=probe_kubedns_latency_ms,probe_kubedns_errors,dnsmasq_misses,dnsmasq_hits - - --pod-id=$(POD_NAME) - - --namespace-id=$(POD_NAMESPACE) - - --v=2 - env: - - name: POD_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.namespace - image: gcr.io/google-containers/prometheus-to-sd:v0.2.3 - imagePullPolicy: IfNotPresent - name: prometheus-to-sd - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/run/secrets/kubernetes.io/serviceaccount - name: kube-dns-token-lwn8l - readOnly: true - dnsPolicy: Default - nodeName: gke-istio-test-default-pool-866a0405-ftch - priority: 2000000000 - priorityClassName: system-cluster-critical - restartPolicy: Always - schedulerName: default-scheduler - securityContext: {} - serviceAccount: kube-dns - serviceAccountName: kube-dns - terminationGracePeriodSeconds: "30" - tolerations: - - key: CriticalAddonsOnly - operator: Exists - - effect: NoExecute - key: node.kubernetes.io/not-ready - operator: Exists - tolerationSeconds: "300" - - effect: NoExecute - key: node.kubernetes.io/unreachable - operator: Exists - tolerationSeconds: "300" - volumes: - - name: kube-dns-config - volumeSource: - configMap: - defaultMode: 420 - localObjectReference: - name: kube-dns - optional: true - - name: kube-dns-token-lwn8l - volumeSource: - secret: - defaultMode: 420 - secretName: kube-dns-token-lwn8l -status: - conditions: - - lastProbeTime: null - lastTransitionTime: "2018-12-03T17:00:00Z" - status: "True" - type: Initialized - - lastProbeTime: null - lastTransitionTime: "2018-12-03T17:00:20Z" - status: "True" - type: Ready - - lastProbeTime: null - lastTransitionTime: null - status: "True" - type: ContainersReady - - lastProbeTime: null - lastTransitionTime: "2018-12-03T16:59:57Z" - status: "True" - type: PodScheduled - containerStatuses: - - containerID: docker://676f6c98bfa136315c4ccf0fe40e7a56cbf9ac85128e94310eae82f191246b3e - image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13 - imageID: docker-pullable://k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64@sha256:45df3e8e0c551bd0c79cdba48ae6677f817971dcbd1eeed7fd1f9a35118410e4 - lastState: {} - name: dnsmasq - ready: true - state: - running: - startedAt: "2018-12-03T17:00:14Z" - - containerID: docker://93fd0664e150982dad0481c5260183308a7035a2f938ec50509d586ed586a107 - image: k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13 - imageID: docker-pullable://k8s.gcr.io/k8s-dns-kube-dns-amd64@sha256:618a82fa66cf0c75e4753369a6999032372be7308866fc9afb381789b1e5ad52 - lastState: {} - name: kubedns - ready: true - state: - running: - startedAt: "2018-12-03T17:00:10Z" - - containerID: docker://e823b79a0a48af75f2eebb1c89ba4c31e8c1ee67ee0d917ac7b4891b67d2cd0f - image: gcr.io/google-containers/prometheus-to-sd:v0.2.3 - imageID: docker-pullable://gcr.io/google-containers/prometheus-to-sd@sha256:be220ec4a66275442f11d420033c106bb3502a3217a99c806eef3cf9858788a2 - lastState: {} - name: prometheus-to-sd - ready: true - state: - running: - startedAt: "2018-12-03T17:00:18Z" - - containerID: docker://74223c401a8dac04b8bd29cdfedcb216881791b4e84bb80a15714991dd18735e - image: k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13 - imageID: docker-pullable://k8s.gcr.io/k8s-dns-sidecar-amd64@sha256:cedc8fe2098dffc26d17f64061296b7aa54258a31513b6c52df271a98bb522b3 - lastState: {} - name: sidecar - ready: true - state: - running: - startedAt: "2018-12-03T17:00:16Z" - hostIP: 10.128.0.5 - phase: Running - podIP: 10.40.1.4 - qosClass: Burstable - startTime: "2018-12-03T17:00:00Z" diff --git a/galley/pkg/testing/testdata/dataset/v1/pod_expected.json b/galley/pkg/testing/testdata/dataset/v1/pod_expected.json index 5e5f3822ca99..a7992dbc7a3f 100644 --- a/galley/pkg/testing/testdata/dataset/v1/pod_expected.json +++ b/galley/pkg/testing/testdata/dataset/v1/pod_expected.json @@ -1,7 +1,7 @@ { "k8s/core/v1/pods": [ { - "TypeURL": "type.googleapis.com/k8s.io.api.core.v1.PodSpec", + "TypeURL": "type.googleapis.com/k8s.io.api.core.v1.Pod", "Metadata": { "name": "kube-dns-548976df6c-d9kkv", "annotations": { @@ -14,268 +14,405 @@ } }, "Body": { - "containers": [ - { - "args": [ - "--domain=cluster.local.", - "--dns-port=10053", - "--config-dir=/kube-dns-config", - "--v=2" - ], - "env": [ - { - "name": "PROMETHEUS_PORT", - "value": "10055" - } - ], - "image": "k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13", - "imagePullPolicy": "IfNotPresent", - "livenessProbe": { - "failureThreshold": 5, - "httpGet": { - "path": "/healthcheck/kubedns", - "port": 10054, - "scheme": "HTTP" - }, - "initialDelaySeconds": 60, - "periodSeconds": 10, - "successThreshold": 1, - "timeoutSeconds": 5 - }, - "name": "kubedns", - "ports": [ - { - "containerPort": 10053, - "name": "dns-local", - "protocol": "UDP" + "metadata": { + "annotations": { + "scheduler.alpha.kubernetes.io/critical-pod": "", + "seccomp.security.alpha.kubernetes.io/pod": "docker/default" + }, + "creationTimestamp": "2018-12-03T16:59:57Z", + "generateName": "kube-dns-548976df6c-", + "labels": { + "k8s-app": "kube-dns", + "pod-template-hash": "1045328927" + }, + "name": "kube-dns-548976df6c-d9kkv", + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ReplicaSet", + "name": "kube-dns-548976df6c", + "uid": "b589a851-f71b-11e8-af4f-42010a800072" + } + ], + "resourceVersion": "50572715", + "selfLink": "/api/v1/namespaces/kube-system/pods/kube-dns-548976df6c-d9kkv", + "uid": "dd4bbbd4-f71c-11e8-af4f-42010a800072" + }, + "spec": { + "containers": [ + { + "args": [ + "--domain=cluster.local.", + "--dns-port=10053", + "--config-dir=/kube-dns-config", + "--v=2" + ], + "env": [ + { + "name": "PROMETHEUS_PORT", + "value": "10055" + } + ], + "image": "k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13", + "imagePullPolicy": "IfNotPresent", + "livenessProbe": { + "failureThreshold": 5, + "httpGet": { + "path": "/healthcheck/kubedns", + "port": 10054, + "scheme": "HTTP" + }, + "initialDelaySeconds": 60, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 5 }, - { - "containerPort": 10053, - "name": "dns-tcp-local", - "protocol": "TCP" + "name": "kubedns", + "ports": [ + { + "containerPort": 10053, + "name": "dns-local", + "protocol": "UDP" + }, + { + "containerPort": 10053, + "name": "dns-tcp-local", + "protocol": "TCP" + }, + { + "containerPort": 10055, + "name": "metrics", + "protocol": "TCP" + } + ], + "readinessProbe": { + "failureThreshold": 3, + "httpGet": { + "path": "/readiness", + "port": 8081, + "scheme": "HTTP" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 5 }, - { - "containerPort": 10055, - "name": "metrics", - "protocol": "TCP" - } - ], - "readinessProbe": { - "failureThreshold": 3, - "httpGet": { - "path": "/readiness", - "port": 8081, - "scheme": "HTTP" + "resources": { + "limits": { + "memory": "170Mi" + }, + "requests": { + "cpu": "100m", + "memory": "70Mi" + } }, - "initialDelaySeconds": 3, - "periodSeconds": 10, - "successThreshold": 1, - "timeoutSeconds": 5 + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/kube-dns-config", + "name": "kube-dns-config" + }, + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-dns-token-lwn8l", + "readOnly": true + } + ] }, - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - "volumeMounts": [ - { - "mountPath": "/kube-dns-config", - "name": "kube-dns-config" + { + "args": [ + "-v=2", + "-logtostderr", + "-configDir=/etc/k8s/dns/dnsmasq-nanny", + "-restartDnsmasq=true", + "--", + "-k", + "--cache-size=1000", + "--no-negcache", + "--log-facility=-", + "--server=/cluster.local/127.0.0.1#10053", + "--server=/in-addr.arpa/127.0.0.1#10053", + "--server=/ip6.arpa/127.0.0.1#10053" + ], + "image": "k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13", + "imagePullPolicy": "IfNotPresent", + "livenessProbe": { + "failureThreshold": 5, + "httpGet": { + "path": "/healthcheck/dnsmasq", + "port": 10054, + "scheme": "HTTP" + }, + "initialDelaySeconds": 60, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 5 }, - { - "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", - "name": "kube-dns-token-lwn8l", - "readOnly": true - } - ] - }, - { - "args": [ - "-v=2", - "-logtostderr", - "-configDir=/etc/k8s/dns/dnsmasq-nanny", - "-restartDnsmasq=true", - "--", - "-k", - "--cache-size=1000", - "--no-negcache", - "--log-facility=-", - "--server=/cluster.local/127.0.0.1#10053", - "--server=/in-addr.arpa/127.0.0.1#10053", - "--server=/ip6.arpa/127.0.0.1#10053" - ], - "image": "k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13", - "imagePullPolicy": "IfNotPresent", - "livenessProbe": { - "failureThreshold": 5, - "httpGet": { - "path": "/healthcheck/dnsmasq", - "port": 10054, - "scheme": "HTTP" + "name": "dnsmasq", + "ports": [ + { + "containerPort": 53, + "name": "dns", + "protocol": "UDP" + }, + { + "containerPort": 53, + "name": "dns-tcp", + "protocol": "TCP" + } + ], + "resources": { + "requests": { + "cpu": "150m", + "memory": "20Mi" + } }, - "initialDelaySeconds": 60, - "periodSeconds": 10, - "successThreshold": 1, - "timeoutSeconds": 5 + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/etc/k8s/dns/dnsmasq-nanny", + "name": "kube-dns-config" + }, + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-dns-token-lwn8l", + "readOnly": true + } + ] }, - "name": "dnsmasq", - "ports": [ - { - "containerPort": 53, - "name": "dns", - "protocol": "UDP" + { + "args": [ + "--v=2", + "--logtostderr", + "--probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV", + "--probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV" + ], + "image": "k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13", + "imagePullPolicy": "IfNotPresent", + "livenessProbe": { + "failureThreshold": 5, + "httpGet": { + "path": "/metrics", + "port": 10054, + "scheme": "HTTP" + }, + "initialDelaySeconds": 60, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 5 }, - { - "containerPort": 53, - "name": "dns-tcp", - "protocol": "TCP" - } - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - "volumeMounts": [ - { - "mountPath": "/etc/k8s/dns/dnsmasq-nanny", - "name": "kube-dns-config" - }, - { - "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", - "name": "kube-dns-token-lwn8l", - "readOnly": true - } - ] - }, - { - "args": [ - "--v=2", - "--logtostderr", - "--probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV", - "--probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV" - ], - "image": "k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13", - "imagePullPolicy": "IfNotPresent", - "livenessProbe": { - "failureThreshold": 5, - "httpGet": { - "path": "/metrics", - "port": 10054, - "scheme": "HTTP" + "name": "sidecar", + "ports": [ + { + "containerPort": 10054, + "name": "metrics", + "protocol": "TCP" + } + ], + "resources": { + "requests": { + "cpu": "10m", + "memory": "20Mi" + } }, - "initialDelaySeconds": 60, - "periodSeconds": 10, - "successThreshold": 1, - "timeoutSeconds": 5 + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-dns-token-lwn8l", + "readOnly": true + } + ] }, - "name": "sidecar", - "ports": [ - { - "containerPort": 10054, - "name": "metrics", - "protocol": "TCP" - } - ], - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - "volumeMounts": [ - { - "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", - "name": "kube-dns-token-lwn8l", - "readOnly": true - } - ] - }, - { - "command": [ - "/monitor", - "--component=kubedns", - "--target-port=10054", - "--stackdriver-prefix=container.googleapis.com/internal/addons", - "--api-override=https://monitoring.googleapis.com/", - "--whitelisted-metrics=probe_kubedns_latency_ms,probe_kubedns_errors,dnsmasq_misses,dnsmasq_hits", - "--pod-id=$(POD_NAME)", - "--namespace-id=$(POD_NAMESPACE)", - "--v=2" - ], - "env": [ - { - "name": "POD_NAME", - "valueFrom": { - "fieldRef": { - "apiVersion": "v1", - "fieldPath": "metadata.name" + { + "command": [ + "/monitor", + "--component=kubedns", + "--target-port=10054", + "--stackdriver-prefix=container.googleapis.com/internal/addons", + "--api-override=https://monitoring.googleapis.com/", + "--whitelisted-metrics=probe_kubedns_latency_ms,probe_kubedns_errors,dnsmasq_misses,dnsmasq_hits", + "--pod-id=$(POD_NAME)", + "--namespace-id=$(POD_NAMESPACE)", + "--v=2" + ], + "env": [ + { + "name": "POD_NAME", + "valueFrom": { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.name" + } } + }, + { + "name": "POD_NAMESPACE", + "valueFrom": { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.namespace" + } + } + } + ], + "image": "gcr.io/google-containers/prometheus-to-sd:v0.2.3", + "imagePullPolicy": "IfNotPresent", + "name": "prometheus-to-sd", + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "name": "kube-dns-token-lwn8l", + "readOnly": true } + ] + } + ], + "dnsPolicy": "Default", + "nodeName": "gke-istio-test-default-pool-866a0405-ftch", + "priority": 2000000000, + "priorityClassName": "system-cluster-critical", + "restartPolicy": "Always", + "schedulerName": "default-scheduler", + "securityContext": {}, + "serviceAccount": "kube-dns", + "serviceAccountName": "kube-dns", + "terminationGracePeriodSeconds": 30, + "tolerations": [ + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + }, + { + "effect": "NoExecute", + "key": "node.kubernetes.io/not-ready", + "operator": "Exists", + "tolerationSeconds": 300 + }, + { + "effect": "NoExecute", + "key": "node.kubernetes.io/unreachable", + "operator": "Exists", + "tolerationSeconds": 300 + } + ], + "volumes": [ + { + "configMap": { + "defaultMode": 420, + "name": "kube-dns", + "optional": true }, - { - "name": "POD_NAMESPACE", - "valueFrom": { - "fieldRef": { - "apiVersion": "v1", - "fieldPath": "metadata.namespace" - } + "name": "kube-dns-config" + }, + { + "name": "kube-dns-token-lwn8l", + "secret": { + "defaultMode": 420, + "secretName": "kube-dns-token-lwn8l" + } + } + ] + }, + "status": { + "conditions": [ + { + "lastProbeTime": null, + "lastTransitionTime": "2018-12-03T17:00:00Z", + "status": "True", + "type": "Initialized" + }, + { + "lastProbeTime": null, + "lastTransitionTime": "2018-12-03T17:00:20Z", + "status": "True", + "type": "Ready" + }, + { + "lastProbeTime": null, + "lastTransitionTime": null, + "status": "True", + "type": "ContainersReady" + }, + { + "lastProbeTime": null, + "lastTransitionTime": "2018-12-03T16:59:57Z", + "status": "True", + "type": "PodScheduled" + } + ], + "containerStatuses": [ + { + "containerID": "docker://676f6c98bfa136315c4ccf0fe40e7a56cbf9ac85128e94310eae82f191246b3e", + "image": "k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.13", + "imageID": "docker-pullable://k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64@sha256:45df3e8e0c551bd0c79cdba48ae6677f817971dcbd1eeed7fd1f9a35118410e4", + "lastState": {}, + "name": "dnsmasq", + "ready": true, + "restartCount": 0, + "state": { + "running": { + "startedAt": "2018-12-03T17:00:14Z" } } - ], - "image": "gcr.io/google-containers/prometheus-to-sd:v0.2.3", - "imagePullPolicy": "IfNotPresent", - "name": "prometheus-to-sd", - "resources": {}, - "terminationMessagePath": "/dev/termination-log", - "terminationMessagePolicy": "File", - "volumeMounts": [ - { - "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", - "name": "kube-dns-token-lwn8l", - "readOnly": true + }, + { + "containerID": "docker://93fd0664e150982dad0481c5260183308a7035a2f938ec50509d586ed586a107", + "image": "k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.13", + "imageID": "docker-pullable://k8s.gcr.io/k8s-dns-kube-dns-amd64@sha256:618a82fa66cf0c75e4753369a6999032372be7308866fc9afb381789b1e5ad52", + "lastState": {}, + "name": "kubedns", + "ready": true, + "restartCount": 0, + "state": { + "running": { + "startedAt": "2018-12-03T17:00:10Z" + } } - ] - } - ], - "dnsPolicy": "Default", - "nodeName": "gke-istio-test-default-pool-866a0405-ftch", - "priority": 2000000000, - "priorityClassName": "system-cluster-critical", - "restartPolicy": "Always", - "schedulerName": "default-scheduler", - "securityContext": {}, - "serviceAccount": "kube-dns", - "serviceAccountName": "kube-dns", - "terminationGracePeriodSeconds": 30, - "tolerations": [ - { - "key": "CriticalAddonsOnly", - "operator": "Exists" - }, - { - "effect": "NoExecute", - "key": "node.kubernetes.io/not-ready", - "operator": "Exists", - "tolerationSeconds": 300 - }, - { - "effect": "NoExecute", - "key": "node.kubernetes.io/unreachable", - "operator": "Exists", - "tolerationSeconds": 300 - } - ], - "volumes": [ - { - "configMap": { - "defaultMode": 420, - "name": "kube-dns", - "optional": true }, - "name": "kube-dns-config" - }, - { - "name": "kube-dns-token-lwn8l", - "secret": { - "defaultMode": 420, - "secretName": "kube-dns-token-lwn8l" + { + "containerID": "docker://e823b79a0a48af75f2eebb1c89ba4c31e8c1ee67ee0d917ac7b4891b67d2cd0f", + "image": "gcr.io/google-containers/prometheus-to-sd:v0.2.3", + "imageID": "docker-pullable://gcr.io/google-containers/prometheus-to-sd@sha256:be220ec4a66275442f11d420033c106bb3502a3217a99c806eef3cf9858788a2", + "lastState": {}, + "name": "prometheus-to-sd", + "ready": true, + "restartCount": 0, + "state": { + "running": { + "startedAt": "2018-12-03T17:00:18Z" + } + } + }, + { + "containerID": "docker://74223c401a8dac04b8bd29cdfedcb216881791b4e84bb80a15714991dd18735e", + "image": "k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.13", + "imageID": "docker-pullable://k8s.gcr.io/k8s-dns-sidecar-amd64@sha256:cedc8fe2098dffc26d17f64061296b7aa54258a31513b6c52df271a98bb522b3", + "lastState": {}, + "name": "sidecar", + "ready": true, + "restartCount": 0, + "state": { + "running": { + "startedAt": "2018-12-03T17:00:16Z" + } + } } - } - ] + ], + "hostIP": "10.128.0.5", + "phase": "Running", + "podIP": "10.40.1.4", + "qosClass": "Burstable", + "startTime": "2018-12-03T17:00:00Z" + } } } ] diff --git a/galley/pkg/testing/testdata/dataset/v1/service.yaml b/galley/pkg/testing/testdata/dataset/v1/service.yaml new file mode 100644 index 000000000000..f4eb5626bdec --- /dev/null +++ b/galley/pkg/testing/testdata/dataset/v1/service.yaml @@ -0,0 +1,33 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"addonmanager.kubernetes.io/mode":"Reconcile","k8s-app":"kube-dns","kubernetes.io/cluster-service":"true","kubernetes.io/name":"KubeDNS"},"name":"kube-dns","namespace":"kube-system"},"spec":{"clusterIP":"10.43.240.10","ports":[{"name":"dns","port":53,"protocol":"UDP"},{"name":"dns-tcp","port":53,"protocol":"TCP"}],"selector":{"k8s-app":"kube-dns"}}} + creationTimestamp: 2018-02-12T15:48:44Z + labels: + addonmanager.kubernetes.io/mode: Reconcile + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: KubeDNS + name: kube-dns + resourceVersion: "274" + selfLink: /api/v1/namespaces/kube-system/services/kube-dns + uid: 3497d702-100c-11e8-a600-42010a8002c3 +spec: + clusterIP: 10.43.240.10 + ports: + - name: dns + port: 53 + protocol: UDP + targetPort: 53 + - name: dns-tcp + port: 53 + protocol: TCP + targetPort: 53 + selector: + k8s-app: kube-dns + sessionAffinity: None + type: ClusterIP +status: + loadBalancer: {} diff --git a/galley/pkg/testing/testdata/dataset/v1/service_expected.json b/galley/pkg/testing/testdata/dataset/v1/service_expected.json new file mode 100644 index 000000000000..19591090dc16 --- /dev/null +++ b/galley/pkg/testing/testdata/dataset/v1/service_expected.json @@ -0,0 +1,41 @@ +{ + "k8s/core/v1/services": [ + { + "TypeURL": "type.googleapis.com/k8s.io.api.core.v1.ServiceSpec", + "Metadata": { + "name": "kube-dns", + "annotations": { + "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"addonmanager.kubernetes.io/mode\":\"Reconcile\",\"k8s-app\":\"kube-dns\",\"kubernetes.io/cluster-service\":\"true\",\"kubernetes.io/name\":\"KubeDNS\"},\"name\":\"kube-dns\",\"namespace\":\"kube-system\"},\"spec\":{\"clusterIP\":\"10.43.240.10\",\"ports\":[{\"name\":\"dns\",\"port\":53,\"protocol\":\"UDP\"},{\"name\":\"dns-tcp\",\"port\":53,\"protocol\":\"TCP\"}],\"selector\":{\"k8s-app\":\"kube-dns\"}}}\n" + }, + "labels": { + "addonmanager.kubernetes.io/mode": "Reconcile", + "k8s-app": "kube-dns", + "kubernetes.io/cluster-service": "true", + "kubernetes.io/name": "KubeDNS" + } + }, + "Body": { + "clusterIP": "10.43.240.10", + "ports": [ + { + "name": "dns", + "port": 53, + "protocol": "UDP", + "targetPort": 53 + }, + { + "name": "dns-tcp", + "port": 53, + "protocol": "TCP", + "targetPort": 53 + } + ], + "selector": { + "k8s-app": "kube-dns" + }, + "sessionAffinity": "None", + "type": "ClusterIP" + } + } + ] +} diff --git a/galley/tools/gen-meta/metadata.yaml b/galley/tools/gen-meta/metadata.yaml index 9ece5256be13..5731678bd8fb 100644 --- a/galley/tools/gen-meta/metadata.yaml +++ b/galley/tools/gen-meta/metadata.yaml @@ -33,10 +33,18 @@ resources: singular: "pod" plural: "pods" version: "v1" - proto: "k8s.io.api.core.v1.PodSpec" + proto: "k8s.io.api.core.v1.Pod" protoPackage: "k8s.io/api/core/v1" collection: "k8s/core/v1/pods" + - kind: "Endpoints" + singular: "endpoints" + plural: "endpoints" + version: "v1" + proto: "k8s.io.api.core.v1.Endpoints" + protoPackage: "k8s.io/api/core/v1" + collection: "k8s/core/v1/endpoints" + - kind: "VirtualService" singular: "virtualservice" plural: "virtualservices" @@ -327,15 +335,6 @@ resources: protoPackage: "github.com/gogo/protobuf/types" collection: "istio/config/v1alpha2/legacy/redisquotas" - - kind: "servicecontrol" - singular: "servicecontrol" - plural: "servicecontrols" - group: "config.istio.io" - version: "v1alpha2" - proto: "type.googleapis.com/google.protobuf.Struct" - protoPackage: "github.com/gogo/protobuf/types" - collection: "istio/config/v1alpha2/legacy/servicecontrols" - - kind: "signalfx" group: "config.istio.io" plural: "signalfxs" @@ -462,15 +461,6 @@ resources: protoPackage: "github.com/gogo/protobuf/types" collection: "istio/config/v1alpha2/legacy/reportnothings" - - kind: "servicecontrolreport" - singular: "servicecontrolreport" - plural: "servicecontrolreports" - group: "config.istio.io" - version: "v1alpha2" - proto: "type.googleapis.com/google.protobuf.Struct" - protoPackage: "github.com/gogo/protobuf/types" - collection: "istio/config/v1alpha2/legacy/servicecontrolreports" - - kind: "tracespan" singular: "tracespan" plural: "tracespans" diff --git a/install/kubernetes/helm/istio-init/files/crd-10.yaml b/install/kubernetes/helm/istio-init/files/crd-10.yaml index f728bd8ece7a..9bf99369b7a3 100644 --- a/install/kubernetes/helm/istio-init/files/crd-10.yaml +++ b/install/kubernetes/helm/istio-init/files/crd-10.yaml @@ -83,7 +83,7 @@ spec: - istio-io - networking-istio-io scope: Namespaced - version: v1alpha3 + version: v1alpha3 --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition @@ -575,29 +575,6 @@ spec: --- kind: CustomResourceDefinition apiVersion: apiextensions.k8s.io/v1beta1 -metadata: - name: servicecontrols.config.istio.io - labels: - app: mixer - package: servicecontrol - istio: mixer-adapter - chart: istio - heritage: Tiller - release: istio -spec: - group: config.istio.io - names: - kind: servicecontrol - plural: servicecontrols - singular: servicecontrol - categories: - - istio-io - - policy-istio-io - scope: Namespaced - version: v1alpha2 ---- -kind: CustomResourceDefinition -apiVersion: apiextensions.k8s.io/v1beta1 metadata: name: signalfxs.config.istio.io labels: @@ -943,29 +920,6 @@ spec: --- kind: CustomResourceDefinition apiVersion: apiextensions.k8s.io/v1beta1 -metadata: - name: servicecontrolreports.config.istio.io - labels: - app: mixer - package: servicecontrolreport - istio: mixer-instance - chart: istio - heritage: Tiller - release: istio -spec: - group: config.istio.io - names: - kind: servicecontrolreport - plural: servicecontrolreports - singular: servicecontrolreport - categories: - - istio-io - - policy-istio-io - scope: Namespaced - version: v1alpha2 ---- -kind: CustomResourceDefinition -apiVersion: apiextensions.k8s.io/v1beta1 metadata: name: tracespans.config.istio.io labels: diff --git a/install/kubernetes/helm/istio-remote/values.yaml b/install/kubernetes/helm/istio-remote/values.yaml index 276ed55f5e6b..6d7e0ee4c08e 100644 --- a/install/kubernetes/helm/istio-remote/values.yaml +++ b/install/kubernetes/helm/istio-remote/values.yaml @@ -117,7 +117,7 @@ global: envoyStatsd: # If enabled is set to true, host and port must also be provided. Istio no longer provides a statsd collector. enabled: false - host: # example: statsd-svc + host: # example: statsd-svc.istio-system port: # example: 9125 # Specify which tracer to use. One of: lightstep, zipkin diff --git a/install/kubernetes/helm/istio/templates/configmap.yaml b/install/kubernetes/helm/istio/templates/configmap.yaml index e8cb76f894b3..3f95358011c4 100644 --- a/install/kubernetes/helm/istio/templates/configmap.yaml +++ b/install/kubernetes/helm/istio/templates/configmap.yaml @@ -151,7 +151,7 @@ data: {{- if .Values.global.proxy.envoyStatsd.enabled }} # # Statsd metrics collector converts statsd metrics into Prometheus metrics. - statsdUdpAddress: {{ .Values.global.proxy.envoyStatsd.host }}.{{ .Release.Namespace }}:{{ .Values.global.proxy.envoyStatsd.port }} + statsdUdpAddress: {{ .Values.global.proxy.envoyStatsd.host }}:{{ .Values.global.proxy.envoyStatsd.port }} {{- end }} {{- if .Values.global.controlPlaneSecurityEnabled }} diff --git a/install/kubernetes/helm/istio/templates/sidecar-injector-configmap.yaml b/install/kubernetes/helm/istio/templates/sidecar-injector-configmap.yaml index 64274758296a..44e552e17f84 100644 --- a/install/kubernetes/helm/istio/templates/sidecar-injector-configmap.yaml +++ b/install/kubernetes/helm/istio/templates/sidecar-injector-configmap.yaml @@ -17,6 +17,7 @@ data: rewriteAppHTTPProbe: {{ .Values.sidecarInjectorWebhook.rewriteAppHTTPProbe }} {{- if or (not .Values.istio_cni.enabled) .Values.global.proxy.enableCoreDump }} initContainers: + {{ "[[ if ne (annotation .ObjectMeta `sidecar.istio.io/interceptionMode` .ProxyConfig.InterceptionMode) \"NONE\" ]]" }} {{- if not .Values.istio_cni.enabled }} - name: istio-init {{- if contains "/" .Values.global.proxy_init.image }} @@ -56,6 +57,7 @@ data: {{- end }} restartPolicy: Always {{- end }} + {{ "[[ end -]]" }} {{- if eq .Values.global.proxy.enableCoreDump true }} - name: enable-core-dump args: diff --git a/install/kubernetes/helm/istio/values-istio-example-sds-vault.yaml b/install/kubernetes/helm/istio/values-istio-example-sds-vault.yaml index 6e88206646f0..68e9a1fd6b7e 100644 --- a/install/kubernetes/helm/istio/values-istio-example-sds-vault.yaml +++ b/install/kubernetes/helm/istio/values-istio-example-sds-vault.yaml @@ -22,6 +22,7 @@ nodeagent: # of a testing Vault server. CA_ADDR: "https://35.233.249.249:8200" CA_PROVIDER: "VaultCA" + VALID_TOKEN: true # https://35.233.249.249:8200 is the IP address and the port number # of a testing Vault server. VAULT_ADDR: "https://35.233.249.249:8200" diff --git a/install/kubernetes/helm/istio/values-istio-gateways.yaml b/install/kubernetes/helm/istio/values-istio-gateways.yaml index 4e6237fe776e..6305b7806066 100644 --- a/install/kubernetes/helm/istio/values-istio-gateways.yaml +++ b/install/kubernetes/helm/istio/values-istio-gateways.yaml @@ -19,7 +19,7 @@ global: envoyStatsd: # If enabled is set to true, host and port must also be provided. Istio no longer provides a statsd collector. enabled: false - host: # example: statsd-svc + host: # example: statsd-svc.istio-system port: # example: 9125 diff --git a/install/kubernetes/helm/istio/values-istio-minimal.yaml b/install/kubernetes/helm/istio/values-istio-minimal.yaml index 343a9be6defa..eb92536e8058 100644 --- a/install/kubernetes/helm/istio/values-istio-minimal.yaml +++ b/install/kubernetes/helm/istio/values-istio-minimal.yaml @@ -38,7 +38,7 @@ global: envoyStatsd: # If enabled is set to true, host and port must also be provided. Istio no longer provides a statsd collector. enabled: false - host: # example: statsd-svc + host: # example: statsd-svc.istio-system port: # example: 9125 useMCP: false diff --git a/install/kubernetes/helm/istio/values-istio-one-namespace-auth.yaml b/install/kubernetes/helm/istio/values-istio-one-namespace-auth.yaml index fcd2b86db0b9..640dbf009b50 100644 --- a/install/kubernetes/helm/istio/values-istio-one-namespace-auth.yaml +++ b/install/kubernetes/helm/istio/values-istio-one-namespace-auth.yaml @@ -15,6 +15,5 @@ global: # Default is 10s second refreshInterval: 1s -istiotesting: - oneNameSpace: true - + # Restrict the applications in one namespace the controller manages + oneNamespace: true diff --git a/install/kubernetes/helm/istio/values-istio-one-namespace.yaml b/install/kubernetes/helm/istio/values-istio-one-namespace.yaml index 7e690f33d4e7..6ebed044bf3f 100644 --- a/install/kubernetes/helm/istio/values-istio-one-namespace.yaml +++ b/install/kubernetes/helm/istio/values-istio-one-namespace.yaml @@ -15,6 +15,5 @@ global: # Default is 10s second refreshInterval: 1s -istiotesting: - oneNameSpace: true - + # Restrict the applications in one namespace the controller manages + oneNamespace: true diff --git a/install/kubernetes/helm/istio/values-istio-sds-auth.yaml b/install/kubernetes/helm/istio/values-istio-sds-auth.yaml index 4b55021a9256..3e5b6c7d1fe4 100644 --- a/install/kubernetes/helm/istio/values-istio-sds-auth.yaml +++ b/install/kubernetes/helm/istio/values-istio-sds-auth.yaml @@ -19,4 +19,5 @@ nodeagent: image: node-agent-k8s env: CA_PROVIDER: "Citadel" - CA_ADDR: "istio-citadel:8060" \ No newline at end of file + CA_ADDR: "istio-citadel:8060" + VALID_TOKEN: true \ No newline at end of file diff --git a/install/kubernetes/helm/istio/values.yaml b/install/kubernetes/helm/istio/values.yaml index 91890f1dc28a..2b7c1a6d29c2 100644 --- a/install/kubernetes/helm/istio/values.yaml +++ b/install/kubernetes/helm/istio/values.yaml @@ -198,7 +198,7 @@ global: envoyStatsd: # If enabled is set to true, host and port must also be provided. Istio no longer provides a statsd collector. enabled: false - host: # example: statsd-svc + host: # example: statsd-svc.istio-system port: # example: 9125 # Specify which tracer to use. One of: lightstep, zipkin diff --git a/install/kubernetes/helm/subcharts/galley/templates/validatingwebhookconfiguration.yaml.tpl b/install/kubernetes/helm/subcharts/galley/templates/validatingwebhookconfiguration.yaml.tpl index beba8f2f54b2..3c32332b0f09 100644 --- a/install/kubernetes/helm/subcharts/galley/templates/validatingwebhookconfiguration.yaml.tpl +++ b/install/kubernetes/helm/subcharts/galley/templates/validatingwebhookconfiguration.yaml.tpl @@ -92,7 +92,6 @@ webhooks: - opas - prometheuses - rbacs - - servicecontrols - solarwindses - stackdrivers - cloudwatches @@ -108,7 +107,6 @@ webhooks: - metrics - quotas - reportnothings - - servicecontrolreports - tracespans failurePolicy: Fail {{- end }} diff --git a/install/kubernetes/helm/subcharts/grafana/dashboards/galley-dashboard.json b/install/kubernetes/helm/subcharts/grafana/dashboards/galley-dashboard.json index 8c20ebceb026..75b09fabb046 100644 --- a/install/kubernetes/helm/subcharts/grafana/dashboards/galley-dashboard.json +++ b/install/kubernetes/helm/subcharts/grafana/dashboards/galley-dashboard.json @@ -1,34 +1,4 @@ { - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "5.2.3" - }, - { - "type": "panel", - "id": "graph", - "name": "Graph", - "version": "5.0.0" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "5.0.0" - } - ], "annotations": { "list": [ { @@ -45,7 +15,6 @@ "editable": false, "gnetId": null, "graphTooltip": 0, - "id": null, "links": [], "panels": [ { @@ -94,6 +63,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Galley Versions", "tooltip": { @@ -240,6 +210,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Memory", "tooltip": { @@ -338,6 +309,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "CPU", "tooltip": { @@ -429,6 +401,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Disk", "tooltip": { @@ -507,11 +480,27 @@ "expr": "go_goroutines{job=\"galley\"}", "format": "time_series", "intervalFactor": 2, + "legendFormat": "goroutines_total", "refId": "A" + }, + { + "expr": "galley_mcp_source_clients_total", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "clients_total", + "refId": "B" + }, + { + "expr": "go_goroutines{job=\"galley\"}/galley_mcp_source_clients_total", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "avg_goroutines_per_client", + "refId": "C" } ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Goroutines", "tooltip": { @@ -623,6 +612,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Event Rates", "tooltip": { @@ -721,6 +711,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Timer Rates", "tooltip": { @@ -826,6 +817,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Events Per Snapshot", "tooltip": { @@ -910,6 +902,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "State Type Instances", "tooltip": { @@ -1014,6 +1007,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Validation Webhook Certificate", "tooltip": { @@ -1105,6 +1099,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Resource Validation", "tooltip": { @@ -1189,6 +1184,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Validation HTTP Errors", "tooltip": { @@ -1277,14 +1273,14 @@ "steppedLine": false, "targets": [ { - "expr": "rate(galley_kube_source_listener_handle_event_success_total[1m]) * 60", + "expr": "rate(galley_source_kube_event_success_total[1m]) * 60", "format": "time_series", "intervalFactor": 1, "legendFormat": "Success", "refId": "A" }, { - "expr": "rate(galley_kube_source_listener_handle_event_error_total[1m]) * 60", + "expr": "rate(galley_source_kube_event_error_total[1m]) * 60", "format": "time_series", "intervalFactor": 1, "legendFormat": "Error", @@ -1293,6 +1289,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Source Event Rate", "tooltip": { @@ -1368,7 +1365,7 @@ "steppedLine": false, "targets": [ { - "expr": "rate(galley_kube_source_source_converter_success_total[1m]) * 60", + "expr": "rate(galley_source_kube_dynamic_converter_success_total[1m]) * 60", "format": "time_series", "intervalFactor": 1, "legendFormat": "{apiVersion=\"{{apiVersion}}\",group=\"{{group}}\",kind=\"{{kind}}\"}", @@ -1377,6 +1374,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Kubernetes Object Conversion Successes", "tooltip": { @@ -1452,7 +1450,7 @@ "steppedLine": false, "targets": [ { - "expr": "rate(galley_kube_source_source_converter_failure_total[1m]) * 60", + "expr": "rate(galley_source_kube_dynamic_converter_failure_total[1m]) * 60", "format": "time_series", "intervalFactor": 1, "legendFormat": "Error", @@ -1461,6 +1459,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Kubernetes Object Conversion Failures", "tooltip": { @@ -1549,7 +1548,7 @@ "steppedLine": false, "targets": [ { - "expr": "sum(galley_mcp_server_clients_total)", + "expr": "sum(galley_mcp_source_clients_total)", "format": "time_series", "intervalFactor": 1, "legendFormat": "Clients", @@ -1558,6 +1557,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Connected Clients", "tooltip": { @@ -1633,7 +1633,7 @@ "steppedLine": false, "targets": [ { - "expr": "rate(galley_mcp_server_request_acks_total[1m]) * 60", + "expr": "sum by(collection)(irate(galley_mcp_source_request_acks_total[1m]) * 60)", "format": "time_series", "intervalFactor": 1, "legendFormat": "", @@ -1642,6 +1642,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Request ACKs", "tooltip": { @@ -1717,7 +1718,7 @@ "steppedLine": false, "targets": [ { - "expr": "rate(galley_mcp_server_request_nacks_total[1m]) * 60", + "expr": "rate(galley_mcp_source_request_nacks_total[1m]) * 60", "format": "time_series", "intervalFactor": 1, "refId": "A" @@ -1725,6 +1726,7 @@ ], "thresholds": [], "timeFrom": null, + "timeRegions": [], "timeShift": null, "title": "Request NACKs", "tooltip": { @@ -1764,7 +1766,7 @@ } } ], - "refresh": "5s", + "refresh": false, "schemaVersion": 16, "style": "dark", "tags": [], @@ -1772,8 +1774,8 @@ "list": [] }, "time": { - "from": "now-5m", - "to": "now" + "from": "2019-01-23T20:37:30.445Z", + "to": "2019-01-23T20:47:30.445Z" }, "timepicker": { "refresh_intervals": [ @@ -1803,5 +1805,5 @@ "timezone": "", "title": "Istio Galley Dashboard", "uid": "TSEY6jLmk", - "version": 3 + "version": 1 } diff --git a/install/kubernetes/helm/subcharts/grafana/templates/gateway.yaml b/install/kubernetes/helm/subcharts/grafana/templates/gateway.yaml index 717476979b57..8be9e4111dab 100644 --- a/install/kubernetes/helm/subcharts/grafana/templates/gateway.yaml +++ b/install/kubernetes/helm/subcharts/grafana/templates/gateway.yaml @@ -54,7 +54,7 @@ spec: hosts: - "*" gateways: - - istio-grafana-gateway + - {{ .Release.Namespace }}/istio-grafana-gateway http: - match: - port: 15031 diff --git a/install/kubernetes/helm/subcharts/kiali/templates/clusterrole.yaml b/install/kubernetes/helm/subcharts/kiali/templates/clusterrole.yaml index 207e53ec1d28..d0fb9b0da183 100644 --- a/install/kubernetes/helm/subcharts/kiali/templates/clusterrole.yaml +++ b/install/kubernetes/helm/subcharts/kiali/templates/clusterrole.yaml @@ -52,8 +52,6 @@ rules: - rbacs - reportnothings - rules - - servicecontrolreports - - servicecontrols - solarwindses - stackdrivers - statsds diff --git a/install/kubernetes/helm/subcharts/kiali/templates/gateway.yaml b/install/kubernetes/helm/subcharts/kiali/templates/gateway.yaml index 5a193a0a67aa..ca0183ddcc09 100644 --- a/install/kubernetes/helm/subcharts/kiali/templates/gateway.yaml +++ b/install/kubernetes/helm/subcharts/kiali/templates/gateway.yaml @@ -54,7 +54,7 @@ spec: hosts: - "*" gateways: - - istio-kiali-gateway + - {{ .Release.Namespace }}/istio-kiali-gateway http: - match: - port: 15029 diff --git a/install/kubernetes/helm/subcharts/mixer/templates/config.yaml b/install/kubernetes/helm/subcharts/mixer/templates/config.yaml index 19cda10bc2f1..471075f98e2e 100644 --- a/install/kubernetes/helm/subcharts/mixer/templates/config.yaml +++ b/install/kubernetes/helm/subcharts/mixer/templates/config.yaml @@ -150,8 +150,6 @@ spec: valueType: STRING source.owner: valueType: STRING - source.service: # DEPRECATED - valueType: STRING source.serviceAccount: valueType: STRING source.services: @@ -176,8 +174,6 @@ spec: valueType: STRING destination.namespace: valueType: STRING - destination.service: # DEPRECATED - valueType: STRING destination.service.uid: valueType: STRING destination.service.name: diff --git a/install/kubernetes/helm/subcharts/prometheus/templates/deployment.yaml b/install/kubernetes/helm/subcharts/prometheus/templates/deployment.yaml index 310b0e739310..7a3511e9d179 100644 --- a/install/kubernetes/helm/subcharts/prometheus/templates/deployment.yaml +++ b/install/kubernetes/helm/subcharts/prometheus/templates/deployment.yaml @@ -28,6 +28,16 @@ spec: serviceAccountName: prometheus {{- if .Values.global.priorityClassName }} priorityClassName: "{{ .Values.global.priorityClassName }}" +{{- end }} +{{- if .Values.security.enabled }} + initContainers: + - name: prom-init + image: "busybox" + command: ['sh', '-c', 'counter=0; until [ "$counter" -ge 30 ]; do if [ -d /etc/istio-certs ]; then exit 0; else echo waiting for istio certs && sleep 1 && counter=$((counter+1)); fi; done; exit 1;'] + imagePullPolicy: {{ .Values.global.imagePullPolicy }} + volumeMounts: + - mountPath: /etc/istio-certs + name: istio-certs {{- end }} containers: - name: prometheus diff --git a/install/kubernetes/helm/subcharts/prometheus/templates/gateway.yaml b/install/kubernetes/helm/subcharts/prometheus/templates/gateway.yaml index 5f92943b47ae..dda91697bf06 100644 --- a/install/kubernetes/helm/subcharts/prometheus/templates/gateway.yaml +++ b/install/kubernetes/helm/subcharts/prometheus/templates/gateway.yaml @@ -54,7 +54,7 @@ spec: hosts: - "*" gateways: - - istio-prometheus-gateway + - {{ .Release.Namespace }}/istio-prometheus-gateway http: - match: - port: 15030 diff --git a/install/kubernetes/helm/subcharts/prometheus/templates/tests/test-prometheus-connection.yaml b/install/kubernetes/helm/subcharts/prometheus/templates/tests/test-prometheus-connection.yaml index ffb25549379b..5f11de15f2a6 100644 --- a/install/kubernetes/helm/subcharts/prometheus/templates/tests/test-prometheus-connection.yaml +++ b/install/kubernetes/helm/subcharts/prometheus/templates/tests/test-prometheus-connection.yaml @@ -23,7 +23,7 @@ spec: image: {{ .Values.global.hub }}/{{ .Values.global.proxy.image }}:{{ .Values.global.tag }} imagePullPolicy: "{{ .Values.global.imagePullPolicy }}" command: ['curl'] - args: ['http://prometheus:9090'] + args: ['http://prometheus:9090/-/ready'] restartPolicy: Never affinity: {{- include "nodeaffinity" . | indent 4 }} diff --git a/install/kubernetes/helm/subcharts/prometheus/values.yaml b/install/kubernetes/helm/subcharts/prometheus/values.yaml index 6ec26548859e..e8874181c44e 100644 --- a/install/kubernetes/helm/subcharts/prometheus/values.yaml +++ b/install/kubernetes/helm/subcharts/prometheus/values.yaml @@ -35,3 +35,6 @@ service: gateway: enabled: false + +security: + enabled: true diff --git a/install/kubernetes/helm/subcharts/tracing/templates/gateway.yaml b/install/kubernetes/helm/subcharts/tracing/templates/gateway.yaml index 1aafcaf9b9ad..f532cf16ee56 100644 --- a/install/kubernetes/helm/subcharts/tracing/templates/gateway.yaml +++ b/install/kubernetes/helm/subcharts/tracing/templates/gateway.yaml @@ -39,7 +39,7 @@ spec: hosts: - "*" gateways: - - istio-tracing-gateway + - {{ .Release.Namespace }}/istio-tracing-gateway http: - match: - port: 15032 diff --git a/install/kubernetes/helm/subcharts/tracing/values.yaml b/install/kubernetes/helm/subcharts/tracing/values.yaml index b2f4f71b7b2b..3e26026035e0 100644 --- a/install/kubernetes/helm/subcharts/tracing/values.yaml +++ b/install/kubernetes/helm/subcharts/tracing/values.yaml @@ -8,7 +8,7 @@ nodeSelector: {} jaeger: hub: docker.io/jaegertracing - tag: 1.8 + tag: 1.9 memory: max_traces: 50000 diff --git a/istio.deps b/istio.deps index ca30280b9e0e..23346e0d6762 100644 --- a/istio.deps +++ b/istio.deps @@ -4,13 +4,13 @@ "name": "PROXY_REPO_SHA", "repoName": "proxy", "file": "", - "lastStableSHA": "d2d0c62a045d12924180082e8e4b6fbe0a20de1d" + "lastStableSHA": "7738fa3d506d3a1a7be002c1f06377e6516bc245" }, { "_comment": "", "name": "CNI_REPO_SHA", "repoName": "cni", "file": "", - "lastStableSHA": "2a46a60f8f14d0e17082977f2d097462a8bf7d91" + "lastStableSHA": "de2ae6dcce2cd3ac55823b9aa099c2b462a8ba6e" } ] diff --git a/istioctl/cmd/istioctl/kubeinject.go b/istioctl/cmd/istioctl/kubeinject.go index 79939ace3e05..379ef3eb6bac 100644 --- a/istioctl/cmd/istioctl/kubeinject.go +++ b/istioctl/cmd/istioctl/kubeinject.go @@ -254,6 +254,10 @@ istioctl kube-inject -f deployment.yaml -o deployment-injected.yaml --injectConf return err } } + err = model.ValidateMeshConfig(meshConfig) + if err != nil { + return err + } var sidecarTemplate string diff --git a/mixer/adapter/inventory.gen.go b/mixer/adapter/inventory.gen.go index 700adee713e0..b762b938e636 100644 --- a/mixer/adapter/inventory.gen.go +++ b/mixer/adapter/inventory.gen.go @@ -31,7 +31,6 @@ import ( prometheus "istio.io/istio/mixer/adapter/prometheus" rbac "istio.io/istio/mixer/adapter/rbac" redisquota "istio.io/istio/mixer/adapter/redisquota" - servicecontrol "istio.io/istio/mixer/adapter/servicecontrol" signalfx "istio.io/istio/mixer/adapter/signalfx" solarwinds "istio.io/istio/mixer/adapter/solarwinds" stackdriver "istio.io/istio/mixer/adapter/stackdriver" @@ -57,7 +56,6 @@ func Inventory() []adptr.InfoFn { prometheus.GetInfo, rbac.GetInfo, redisquota.GetInfo, - servicecontrol.GetInfo, signalfx.GetInfo, solarwinds.GetInfo, stackdriver.GetInfo, diff --git a/mixer/adapter/inventory.yaml b/mixer/adapter/inventory.yaml index f1eac4fd82a9..75d92fb32214 100644 --- a/mixer/adapter/inventory.yaml +++ b/mixer/adapter/inventory.yaml @@ -12,7 +12,6 @@ opa: "istio.io/istio/mixer/adapter/opa" prometheus: "istio.io/istio/mixer/adapter/prometheus" rbac: "istio.io/istio/mixer/adapter/rbac" redisquota: "istio.io/istio/mixer/adapter/redisquota" -servicecontrol: "istio.io/istio/mixer/adapter/servicecontrol" signalfx: "istio.io/istio/mixer/adapter/signalfx" solarwinds: "istio.io/istio/mixer/adapter/solarwinds" stackdriver: "istio.io/istio/mixer/adapter/stackdriver" diff --git a/mixer/adapter/list/list.go b/mixer/adapter/list/list.go index 451046b8e433..61f41db2621e 100644 --- a/mixer/adapter/list/list.go +++ b/mixer/adapter/list/list.go @@ -264,12 +264,13 @@ func (h *handler) purgeList() { h.lock.Unlock() } -func (h *handler) hasData() bool { +func (h *handler) hasData() (bool, error) { h.lock.Lock() result := h.list != nil + err := h.lastFetchError h.lock.Unlock() - return result + return result, err } func getCheckResult(config config.Params, code rpc.Code, msg string) adapter.CheckResult { diff --git a/mixer/adapter/list/list_test.go b/mixer/adapter/list/list_test.go index 8822ca17b029..f09021eef355 100644 --- a/mixer/adapter/list/list_test.go +++ b/mixer/adapter/list/list_test.go @@ -503,7 +503,8 @@ func TestRefreshAndPurge(t *testing.T) { // wait for the list to have been populated for { time.Sleep(1 * time.Millisecond) - if h.hasData() { + result, _ := h.hasData() + if result { // list has been populated break } @@ -521,8 +522,9 @@ func TestRefreshAndPurge(t *testing.T) { // wait for the list to have been purged for { time.Sleep(1 * time.Millisecond) - if !h.hasData() { - // list has been purged + result, err := h.hasData() + if !result && err != nil { + // list has been purged and failed to reload break } } diff --git a/mixer/adapter/servicecontrol/checkprocessor.go b/mixer/adapter/servicecontrol/checkprocessor.go deleted file mode 100644 index 2b69fb1324db..000000000000 --- a/mixer/adapter/servicecontrol/checkprocessor.go +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "context" - "errors" - "fmt" - "math" - "time" - - rpc "github.com/gogo/googleapis/google/rpc" - "github.com/pborman/uuid" - sc "google.golang.org/api/servicecontrol/v1" - - "istio.io/istio/mixer/adapter/servicecontrol/config" - "istio.io/istio/mixer/pkg/adapter" - "istio.io/istio/mixer/pkg/status" - "istio.io/istio/mixer/template/apikey" - "istio.io/istio/pkg/cache" -) - -// checkImpl implements checkProcessor interface, handles doCheck call to Google ServiceControl backend. -type checkImpl struct { - env adapter.Env - checkResultExpiration time.Duration - // A LRU cache, keyed by checkCacheKey struct and value is of type *sc.CheckResponse - responseCache cache.ExpiringCache - runtimeConfig *config.RuntimeConfig - serviceConfig *config.GcpServiceSetting - client serviceControlClient -} - -// Cache key used with checkImpl.responseCache. The cache is at handler level, so it stores check responses for multiple -// GCP services. -type checkCacheKey struct { - googleServiceName string - consumerID string - operation string -} - -// ProcessCheck processes check call and converts CheckResponse to adapter.CheckResult. -func (c *checkImpl) ProcessCheck(ctx context.Context, instance *apikey.Instance) (adapter.CheckResult, error) { - if instance.ApiKey == "" || instance.ApiOperation == "" { - return c.checkResult( - status.WithInvalidArgument( - fmt.Sprintf( - "instance:%s, api key and api operation must not be empty", instance.Name))), nil - } - consumerID := generateConsumerIDFromAPIKey(instance.ApiKey) - response, err := c.doCheck(consumerID, instance.ApiOperation, instance.Timestamp) - if err != nil { - return c.checkResult(status.WithPermissionDenied(err.Error())), nil - } - - return c.responseToCheckResult(response) -} - -// ResolveConsumerProjectID resolves consumer project ID from consumer ID and operation name. -func (c *checkImpl) ResolveConsumerProjectID(consumerID, opName string) (string, error) { - response, err := c.doCheck(consumerID, opName, time.Now()) - if err != nil { - return "", nil - } - - if response == nil || response.CheckInfo == nil || response.CheckInfo.ConsumerInfo == nil { - return "", errors.New("consumer info missing from CheckResponse") - } - - return fmt.Sprintf("project_number:%d", - response.CheckInfo.ConsumerInfo.ProjectNumber), nil -} - -// doCheck calls Check on Google ServiceControl client. -func (c *checkImpl) doCheck(consumerID, operationName string, timestamp time.Time) (*sc.CheckResponse, error) { - cacheKey := checkCacheKey{ - googleServiceName: c.serviceConfig.GoogleServiceName, - consumerID: consumerID, - operation: operationName, - } - - cachedResponse, found := c.responseCache.Get(cacheKey) - if found { - return cachedResponse.(*sc.CheckResponse), nil - } - - request := &sc.CheckRequest{ - Operation: &sc.Operation{ - OperationId: uuid.New(), - OperationName: operationName, - StartTime: timestamp.Format(time.RFC3339), - ConsumerId: consumerID, - }, - } - - if c.env.Logger().DebugEnabled() { - if requestDetail, err := toFormattedJSON(request); err == nil { - c.env.Logger().Debugf("request: %v", requestDetail) - } - } - - response, err := c.client.Check(c.serviceConfig.GoogleServiceName, request) - if err != nil { - return nil, err - } - - if c.env.Logger().DebugEnabled() { - if responseDetail, err := toFormattedJSON(response); err == nil { - c.env.Logger().Debugf("response: %v", responseDetail) - } - } - - c.responseCache.Set(cacheKey, response) - return response, nil -} - -// responseToCheckResult converts ServiceControl CheckResponse to Mixer CheckerResult -func (c *checkImpl) responseToCheckResult(response *sc.CheckResponse) (adapter.CheckResult, error) { - result := c.checkResult(status.OK) - - if response.ServerResponse.HTTPStatusCode != 200 { - code := toRPCCode(response.ServerResponse.HTTPStatusCode) - result.Status = status.New(code) - } - - if len(response.CheckErrors) > 0 { - checkError := response.CheckErrors[0] - result.Status = status.WithMessage(serviceControlErrorToRPCCode(checkError.Code), - fmt.Sprintf("%s: %s", checkError.Code, checkError.Detail)) - } - - return result, nil -} - -func (c *checkImpl) checkResult(status rpc.Status) adapter.CheckResult { - return adapter.CheckResult{ - Status: status, - ValidDuration: c.checkResultExpiration, - ValidUseCount: math.MaxInt32, - } -} - -func newCheckProcessor(meshServiceName string, ctx *handlerContext) (*checkImpl, error) { - serviceConfig, found := ctx.serviceConfigIndex[meshServiceName] - if !found { - return nil, fmt.Errorf("unknown mesh service %v", meshServiceName) - } - - return &checkImpl{ - ctx.env, - toDuration(ctx.config.RuntimeConfig.CheckResultExpiration), - ctx.checkResponseCache, - ctx.config.RuntimeConfig, - serviceConfig, - ctx.client, - }, nil -} diff --git a/mixer/adapter/servicecontrol/checkprocessor_test.go b/mixer/adapter/servicecontrol/checkprocessor_test.go deleted file mode 100644 index 5bb8b5c9f5ee..000000000000 --- a/mixer/adapter/servicecontrol/checkprocessor_test.go +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "context" - "fmt" - "math" - "reflect" - "testing" - "time" - - rpc "github.com/gogo/googleapis/google/rpc" - pbtypes "github.com/gogo/protobuf/types" - "google.golang.org/api/googleapi" - sc "google.golang.org/api/servicecontrol/v1" - - "istio.io/istio/mixer/adapter/servicecontrol/config" - "istio.io/istio/mixer/pkg/adapter" - at "istio.io/istio/mixer/pkg/adapter/test" - "istio.io/istio/mixer/pkg/status" - "istio.io/istio/mixer/template/apikey" -) - -const meshServiceName = "test_service" -const gcpServiceName = "test_service.cloud.goog" -const gcpConsumerProjectNumber = 12345 - -type checkProcessorTest struct { - testConfig config.Params - mockClient *mockSvcctrlClient - checkProc *checkImpl -} - -func checkProcessorTestSetup(t *testing.T) *checkProcessorTest { - test := &checkProcessorTest{ - testConfig: config.Params{ - RuntimeConfig: &config.RuntimeConfig{ - CheckCacheSize: 10, - CheckResultExpiration: &pbtypes.Duration{ - Seconds: 300, - }, - }, - ServiceConfigs: []*config.GcpServiceSetting{ - { - MeshServiceName: meshServiceName, - GoogleServiceName: gcpServiceName, - }, - }, - }, - mockClient: &mockSvcctrlClient{}, - } - - ctx := initializeHandlerContext(at.NewEnv(t), &test.testConfig, test.mockClient) - - checkProc, err := newCheckProcessor(meshServiceName, ctx) - if err != nil { - t.Fatalf(`fail to create test checkProcessor %v`, err) - } - - test.checkProc = checkProc - return test -} - -func TestProcessCheck(t *testing.T) { - test := checkProcessorTestSetup(t) - response := &sc.CheckResponse{ - ServerResponse: googleapi.ServerResponse{ - HTTPStatusCode: 200, - }, - CheckInfo: &sc.CheckInfo{ - ConsumerInfo: &sc.ConsumerInfo{ - ProjectNumber: gcpConsumerProjectNumber, - }, - }, - } - - expectedResult := &adapter.CheckResult{ - Status: status.OK, - ValidDuration: test.checkProc.checkResultExpiration, - ValidUseCount: math.MaxInt32, - } - - testProcessCheck(test, response, expectedResult, t) - // Call again with nil response to test check cache. - testProcessCheck(test, nil, expectedResult, t) -} - -func TestProcessCheckFailedHTTPCode(t *testing.T) { - test := checkProcessorTestSetup(t) - response := &sc.CheckResponse{ - ServerResponse: googleapi.ServerResponse{ - HTTPStatusCode: 403, - }, - CheckInfo: &sc.CheckInfo{ - ConsumerInfo: &sc.ConsumerInfo{ - ProjectNumber: gcpConsumerProjectNumber, - }, - }, - } - - expectedResult := &adapter.CheckResult{ - Status: status.New(rpc.PERMISSION_DENIED), - ValidDuration: test.checkProc.checkResultExpiration, - ValidUseCount: math.MaxInt32, - } - - testProcessCheck(test, response, expectedResult, t) -} - -func TestProcessCheckWithError(t *testing.T) { - test := checkProcessorTestSetup(t) - response := &sc.CheckResponse{ - ServerResponse: googleapi.ServerResponse{ - HTTPStatusCode: 200, - }, - CheckErrors: []*sc.CheckError{ - { - Code: "PERMISSION_DENIED", - Detail: "check failed", - }, - }, - } - - expectedResult := &adapter.CheckResult{ - Status: status.WithPermissionDenied("PERMISSION_DENIED: check failed"), - ValidDuration: test.checkProc.checkResultExpiration, - ValidUseCount: math.MaxInt32, - } - - testProcessCheck(test, response, expectedResult, t) -} - -func TestResolveConsumerProjectID(t *testing.T) { - test := checkProcessorTestSetup(t) - test.mockClient.setCheckResponse(&sc.CheckResponse{ - ServerResponse: googleapi.ServerResponse{ - HTTPStatusCode: 200, - }, - CheckInfo: &sc.CheckInfo{ - ConsumerInfo: &sc.ConsumerInfo{ - ProjectNumber: gcpConsumerProjectNumber, - }, - }, - }) - { - id, err := test.checkProc.ResolveConsumerProjectID(apiKeyPrefix+"test_key", "/echo") - if err != nil { - t.Fatalf(`ResolveConsumerProjectID(...) failed with error %v`, err) - } - if id != fmt.Sprintf("project_number:%d", gcpConsumerProjectNumber) { - t.Errorf(`unexpected consumer project ID:%v`, id) - } - } - { - // Repeat the same test but set injected response to nil. Without check cache, the following - // test would fail. - test.mockClient.checkResponse = nil - id, err := test.checkProc.ResolveConsumerProjectID(apiKeyPrefix+"test_key", "/echo") - test.mockClient.setCheckResponse(nil) - if err != nil { - t.Fatalf(`ResolveConsumerProjectID(...) failed with error %v`, err) - } - if id != fmt.Sprintf("project_number:%d", gcpConsumerProjectNumber) { - t.Errorf(`unexpected consumer project ID:%v`, id) - } - } -} - -func testProcessCheck(test *checkProcessorTest, injectedResponse *sc.CheckResponse, - expectedResult *adapter.CheckResult, t *testing.T) { - - instance := apikey.Instance{ - ApiOperation: "/echo", - ApiKey: "test_key", - Timestamp: time.Now(), - } - - test.mockClient.setCheckResponse(injectedResponse) - result, _ := test.checkProc.ProcessCheck(context.Background(), &instance) - if !reflect.DeepEqual(*expectedResult, result) { - t.Errorf(`expect to get result %v, but get %v`, *expectedResult, result) - } -} diff --git a/mixer/adapter/servicecontrol/client.go b/mixer/adapter/servicecontrol/client.go deleted file mode 100644 index e8ab5f5906ff..000000000000 --- a/mixer/adapter/servicecontrol/client.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "errors" - "io/ioutil" - "net/http" - - "golang.org/x/net/context" - "golang.org/x/oauth2" - "golang.org/x/oauth2/google" - sc "google.golang.org/api/servicecontrol/v1" -) - -type client struct { - serviceControl *sc.Service -} - -func (c *client) Check(serviceName string, request *sc.CheckRequest) (*sc.CheckResponse, error) { - return c.serviceControl.Services.Check(serviceName, request).Do() -} - -func (c *client) Report(serviceName string, request *sc.ReportRequest) (*sc.ReportResponse, error) { - return c.serviceControl.Services.Report(serviceName, request).Do() -} - -func (c *client) AllocateQuota(serviceName string, request *sc.AllocateQuotaRequest) (*sc.AllocateQuotaResponse, error) { - return c.serviceControl.Services.AllocateQuota(serviceName, request).Do() -} - -func getTokenSource(ctx context.Context, jsonKey []byte) (oauth2.TokenSource, error) { - jwtCfg, err := google.JWTConfigFromJSON(jsonKey, sc.CloudPlatformScope, sc.ServicecontrolScope) - if err != nil { - return nil, err - } - return jwtCfg.TokenSource(ctx), nil -} - -func getRawTokenBytes(credential string) ([]byte, error) { - return ioutil.ReadFile(credential) -} - -// Creates a service control client. The client is authenticated with service control with Oauth2. -func newClient(credentialPath string) (serviceControlClient, error) { - token, err := getRawTokenBytes(credentialPath) - if err != nil { - return nil, err - } - - ctx := context.WithValue(context.Background(), oauth2.HTTPClient, &http.Client{ - Transport: http.DefaultTransport}) - - tokenSrc, err := getTokenSource(ctx, token) - if err != nil { - return nil, err - } - - httpClient := oauth2.NewClient(ctx, tokenSrc) - if httpClient == nil { - return nil, nil - } - - svcClient, err := sc.New(httpClient) - if err != nil { - return nil, errors.New("fail to create ServiceControl client") - } - - return &client{svcClient}, nil -} diff --git a/mixer/adapter/servicecontrol/config/adapter.servicecontrol.config.pb.html b/mixer/adapter/servicecontrol/config/adapter.servicecontrol.config.pb.html deleted file mode 100644 index 9f4ddd2a1a5f..000000000000 --- a/mixer/adapter/servicecontrol/config/adapter.servicecontrol.config.pb.html +++ /dev/null @@ -1,181 +0,0 @@ ---- -title: Service Control -description: Adapter that delivers logs and metrics to Google Service Control. -location: https://istio.io/docs/reference/config/policy-and-telemetry/adapters/servicecontrol.html -layout: protoc-gen-docs -generator: protoc-gen-docs -supported_templates: servicecontrolreport,quota,apikey -aliases: - - /docs/reference/config/adapters/servicecontrol.html -number_of_entries: 4 ---- -

The servicecontrol adapter delivers logs and metrics to -Google Service Control.

- -

This adapter supports the servicecontrolreport template, -the quota template, -and the apikey template.

- -

GcpServiceSetting

-
-

Adapter setting for a managed GCP service.

- - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
meshServiceNamestring -

Local service name on the mesh, which matches destination.service attribute.

- -
googleServiceNamestring -

Fully qualified GCP service name.

- -
quotasQuota[] -

Quota configs

- -
-
-

Params

-
-

Configuration format for the servicecontrol adapter.

- -

Sample adapter config:

- -
apiVersion: "config.istio.io/v1alpha2"
-kind: servicecontrol
-metadata:
-  name: testhandler
-  namespace: istio-system
-spec:
-  runtime_config:
-    check_cache_size: 200
-    check_result_expiration: 60s
-  credential_path: "/path/to/token.json"
-  service_configs:
-    - mesh_service_name: "echo.local.svc"
-      google_service_name: "echo.endpoints.cloud.goog"
-      quotas:
-        - name: ratelimit.quota.istio-system
-          google_quota_metric_name: read-requests
-          expiration: 1m
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
runtimeConfigRuntimeConfig -
credentialPathstring -

A path to JSON token file, usually mounted as Kubernetes secret on pod.

- -
serviceConfigsGcpServiceSetting[] -
-
-

Quota

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
namestring -

Istio quota name.

- -
googleQuotaMetricNamestring -

The corresponding Google quota metric name.

- -
expirationgoogle.protobuf.Duration -

Quota token expiration time period.

- -
-
-

RuntimeConfig

-
-

Adapter runtime config parameters.

- - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
checkCacheSizeint32 -
checkResultExpirationgoogle.protobuf.Duration -
-
diff --git a/mixer/adapter/servicecontrol/config/config.pb.go b/mixer/adapter/servicecontrol/config/config.pb.go deleted file mode 100644 index addbdbb55322..000000000000 --- a/mixer/adapter/servicecontrol/config/config.pb.go +++ /dev/null @@ -1,1100 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: mixer/adapter/servicecontrol/config/config.proto - -/* - Package config is a generated protocol buffer package. - - The `servicecontrol` adapter delivers logs and metrics to - [Google Service Control](https://cloud.google.com/service-control). - - This adapter supports the [servicecontrolreport template](https://istio.io/docs/reference/config/policy-and-telemetry/templates/servicecontrolreport/), - the [quota template](https://istio.io/docs/reference/config/policy-and-telemetry/templates/quota/), - and the [apikey template](https://istio.io/docs/reference/config/policy-and-telemetry/templates/apikey/). - - It is generated from these files: - mixer/adapter/servicecontrol/config/config.proto - - It has these top-level messages: - RuntimeConfig - Quota - GcpServiceSetting - Params -*/ -package config - -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "github.com/gogo/protobuf/gogoproto" -import google_protobuf1 "github.com/gogo/protobuf/types" - -import strings "strings" -import reflect "reflect" - -import io "io" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package - -// Adapter runtime config parameters. -type RuntimeConfig struct { - CheckCacheSize int32 `protobuf:"varint,1,opt,name=check_cache_size,json=checkCacheSize,proto3" json:"check_cache_size,omitempty"` - CheckResultExpiration *google_protobuf1.Duration `protobuf:"bytes,2,opt,name=check_result_expiration,json=checkResultExpiration" json:"check_result_expiration,omitempty"` -} - -func (m *RuntimeConfig) Reset() { *m = RuntimeConfig{} } -func (*RuntimeConfig) ProtoMessage() {} -func (*RuntimeConfig) Descriptor() ([]byte, []int) { return fileDescriptorConfig, []int{0} } - -type Quota struct { - // Istio quota name. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The corresponding Google quota metric name. - GoogleQuotaMetricName string `protobuf:"bytes,2,opt,name=google_quota_metric_name,json=googleQuotaMetricName,proto3" json:"google_quota_metric_name,omitempty"` - // Quota token expiration time period. - Expiration *google_protobuf1.Duration `protobuf:"bytes,3,opt,name=expiration" json:"expiration,omitempty"` -} - -func (m *Quota) Reset() { *m = Quota{} } -func (*Quota) ProtoMessage() {} -func (*Quota) Descriptor() ([]byte, []int) { return fileDescriptorConfig, []int{1} } - -// Adapter setting for a managed GCP service. -type GcpServiceSetting struct { - // Local service name on the mesh, which matches destination.service attribute. - MeshServiceName string `protobuf:"bytes,1,opt,name=mesh_service_name,json=meshServiceName,proto3" json:"mesh_service_name,omitempty"` - // Fully qualified GCP service name. - GoogleServiceName string `protobuf:"bytes,2,opt,name=google_service_name,json=googleServiceName,proto3" json:"google_service_name,omitempty"` - // Quota configs - Quotas []*Quota `protobuf:"bytes,3,rep,name=quotas" json:"quotas,omitempty"` -} - -func (m *GcpServiceSetting) Reset() { *m = GcpServiceSetting{} } -func (*GcpServiceSetting) ProtoMessage() {} -func (*GcpServiceSetting) Descriptor() ([]byte, []int) { return fileDescriptorConfig, []int{2} } - -// Configuration format for the `servicecontrol` adapter. -// -// Sample adapter config: -// -// ```yaml -// apiVersion: "config.istio.io/v1alpha2" -// kind: servicecontrol -// metadata: -// name: testhandler -// namespace: istio-system -// spec: -// runtime_config: -// check_cache_size: 200 -// check_result_expiration: 60s -// credential_path: "/path/to/token.json" -// service_configs: -// - mesh_service_name: "echo.local.svc" -// google_service_name: "echo.endpoints.cloud.goog" -// quotas: -// - name: ratelimit.quota.istio-system -// google_quota_metric_name: read-requests -// expiration: 1m -// ``` -type Params struct { - RuntimeConfig *RuntimeConfig `protobuf:"bytes,1,opt,name=runtime_config,json=runtimeConfig" json:"runtime_config,omitempty"` - // A path to JSON token file, usually mounted as Kubernetes secret on pod. - CredentialPath string `protobuf:"bytes,2,opt,name=credential_path,json=credentialPath,proto3" json:"credential_path,omitempty"` - ServiceConfigs []*GcpServiceSetting `protobuf:"bytes,3,rep,name=service_configs,json=serviceConfigs" json:"service_configs,omitempty"` -} - -func (m *Params) Reset() { *m = Params{} } -func (*Params) ProtoMessage() {} -func (*Params) Descriptor() ([]byte, []int) { return fileDescriptorConfig, []int{3} } - -func init() { - proto.RegisterType((*RuntimeConfig)(nil), "adapter.servicecontrol.config.RuntimeConfig") - proto.RegisterType((*Quota)(nil), "adapter.servicecontrol.config.Quota") - proto.RegisterType((*GcpServiceSetting)(nil), "adapter.servicecontrol.config.GcpServiceSetting") - proto.RegisterType((*Params)(nil), "adapter.servicecontrol.config.Params") -} -func (m *RuntimeConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RuntimeConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.CheckCacheSize != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintConfig(dAtA, i, uint64(m.CheckCacheSize)) - } - if m.CheckResultExpiration != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintConfig(dAtA, i, uint64(m.CheckResultExpiration.Size())) - n1, err := m.CheckResultExpiration.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - return i, nil -} - -func (m *Quota) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Quota) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintConfig(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.GoogleQuotaMetricName) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintConfig(dAtA, i, uint64(len(m.GoogleQuotaMetricName))) - i += copy(dAtA[i:], m.GoogleQuotaMetricName) - } - if m.Expiration != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintConfig(dAtA, i, uint64(m.Expiration.Size())) - n2, err := m.Expiration.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - return i, nil -} - -func (m *GcpServiceSetting) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GcpServiceSetting) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.MeshServiceName) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintConfig(dAtA, i, uint64(len(m.MeshServiceName))) - i += copy(dAtA[i:], m.MeshServiceName) - } - if len(m.GoogleServiceName) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintConfig(dAtA, i, uint64(len(m.GoogleServiceName))) - i += copy(dAtA[i:], m.GoogleServiceName) - } - if len(m.Quotas) > 0 { - for _, msg := range m.Quotas { - dAtA[i] = 0x1a - i++ - i = encodeVarintConfig(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *Params) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Params) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RuntimeConfig != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintConfig(dAtA, i, uint64(m.RuntimeConfig.Size())) - n3, err := m.RuntimeConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if len(m.CredentialPath) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintConfig(dAtA, i, uint64(len(m.CredentialPath))) - i += copy(dAtA[i:], m.CredentialPath) - } - if len(m.ServiceConfigs) > 0 { - for _, msg := range m.ServiceConfigs { - dAtA[i] = 0x1a - i++ - i = encodeVarintConfig(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func encodeVarintConfig(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *RuntimeConfig) Size() (n int) { - var l int - _ = l - if m.CheckCacheSize != 0 { - n += 1 + sovConfig(uint64(m.CheckCacheSize)) - } - if m.CheckResultExpiration != nil { - l = m.CheckResultExpiration.Size() - n += 1 + l + sovConfig(uint64(l)) - } - return n -} - -func (m *Quota) Size() (n int) { - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovConfig(uint64(l)) - } - l = len(m.GoogleQuotaMetricName) - if l > 0 { - n += 1 + l + sovConfig(uint64(l)) - } - if m.Expiration != nil { - l = m.Expiration.Size() - n += 1 + l + sovConfig(uint64(l)) - } - return n -} - -func (m *GcpServiceSetting) Size() (n int) { - var l int - _ = l - l = len(m.MeshServiceName) - if l > 0 { - n += 1 + l + sovConfig(uint64(l)) - } - l = len(m.GoogleServiceName) - if l > 0 { - n += 1 + l + sovConfig(uint64(l)) - } - if len(m.Quotas) > 0 { - for _, e := range m.Quotas { - l = e.Size() - n += 1 + l + sovConfig(uint64(l)) - } - } - return n -} - -func (m *Params) Size() (n int) { - var l int - _ = l - if m.RuntimeConfig != nil { - l = m.RuntimeConfig.Size() - n += 1 + l + sovConfig(uint64(l)) - } - l = len(m.CredentialPath) - if l > 0 { - n += 1 + l + sovConfig(uint64(l)) - } - if len(m.ServiceConfigs) > 0 { - for _, e := range m.ServiceConfigs { - l = e.Size() - n += 1 + l + sovConfig(uint64(l)) - } - } - return n -} - -func sovConfig(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozConfig(x uint64) (n int) { - return sovConfig(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *RuntimeConfig) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&RuntimeConfig{`, - `CheckCacheSize:` + fmt.Sprintf("%v", this.CheckCacheSize) + `,`, - `CheckResultExpiration:` + strings.Replace(fmt.Sprintf("%v", this.CheckResultExpiration), "Duration", "google_protobuf1.Duration", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Quota) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Quota{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `GoogleQuotaMetricName:` + fmt.Sprintf("%v", this.GoogleQuotaMetricName) + `,`, - `Expiration:` + strings.Replace(fmt.Sprintf("%v", this.Expiration), "Duration", "google_protobuf1.Duration", 1) + `,`, - `}`, - }, "") - return s -} -func (this *GcpServiceSetting) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GcpServiceSetting{`, - `MeshServiceName:` + fmt.Sprintf("%v", this.MeshServiceName) + `,`, - `GoogleServiceName:` + fmt.Sprintf("%v", this.GoogleServiceName) + `,`, - `Quotas:` + strings.Replace(fmt.Sprintf("%v", this.Quotas), "Quota", "Quota", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Params) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Params{`, - `RuntimeConfig:` + strings.Replace(fmt.Sprintf("%v", this.RuntimeConfig), "RuntimeConfig", "RuntimeConfig", 1) + `,`, - `CredentialPath:` + fmt.Sprintf("%v", this.CredentialPath) + `,`, - `ServiceConfigs:` + strings.Replace(fmt.Sprintf("%v", this.ServiceConfigs), "GcpServiceSetting", "GcpServiceSetting", 1) + `,`, - `}`, - }, "") - return s -} -func valueToStringConfig(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *RuntimeConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RuntimeConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RuntimeConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CheckCacheSize", wireType) - } - m.CheckCacheSize = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CheckCacheSize |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CheckResultExpiration", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfig - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CheckResultExpiration == nil { - m.CheckResultExpiration = &google_protobuf1.Duration{} - } - if err := m.CheckResultExpiration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConfig(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConfig - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Quota) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Quota: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Quota: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConfig - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GoogleQuotaMetricName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConfig - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.GoogleQuotaMetricName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Expiration", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfig - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Expiration == nil { - m.Expiration = &google_protobuf1.Duration{} - } - if err := m.Expiration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConfig(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConfig - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GcpServiceSetting) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GcpServiceSetting: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GcpServiceSetting: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MeshServiceName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConfig - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.MeshServiceName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GoogleServiceName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConfig - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.GoogleServiceName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Quotas", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfig - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Quotas = append(m.Quotas, &Quota{}) - if err := m.Quotas[len(m.Quotas)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConfig(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConfig - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Params) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Params: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfig - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RuntimeConfig == nil { - m.RuntimeConfig = &RuntimeConfig{} - } - if err := m.RuntimeConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CredentialPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConfig - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CredentialPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceConfigs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfig - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfig - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceConfigs = append(m.ServiceConfigs, &GcpServiceSetting{}) - if err := m.ServiceConfigs[len(m.ServiceConfigs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConfig(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConfig - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipConfig(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowConfig - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowConfig - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowConfig - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthConfig - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowConfig - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipConfig(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthConfig = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowConfig = fmt.Errorf("proto: integer overflow") -) - -func init() { - proto.RegisterFile("mixer/adapter/servicecontrol/config/config.proto", fileDescriptorConfig) -} - -var fileDescriptorConfig = []byte{ - // 489 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x41, 0x6f, 0xd3, 0x30, - 0x14, 0xc7, 0xe3, 0x95, 0x55, 0xc2, 0xd5, 0x5a, 0x6a, 0x98, 0x28, 0x93, 0xb0, 0xaa, 0x0a, 0x89, - 0x0a, 0x21, 0x67, 0x2a, 0x07, 0x40, 0xe2, 0xc4, 0x40, 0x9c, 0x40, 0x5b, 0x7a, 0x82, 0x8b, 0xe5, - 0xb9, 0x5e, 0x62, 0xd1, 0xc4, 0xc1, 0x71, 0xd0, 0xb4, 0x13, 0x1f, 0x00, 0x09, 0x3e, 0x06, 0x17, - 0xbe, 0xc7, 0x8e, 0x3b, 0x72, 0x24, 0xe1, 0xc2, 0x71, 0x1f, 0x01, 0xc5, 0x76, 0xa1, 0x11, 0xd2, - 0x7a, 0x8a, 0xf3, 0xde, 0xef, 0xfd, 0xdf, 0xff, 0xf9, 0x19, 0xee, 0xa7, 0xf2, 0x54, 0xe8, 0x90, - 0x2d, 0x58, 0x6e, 0x84, 0x0e, 0x0b, 0xa1, 0x3f, 0x4a, 0x2e, 0xb8, 0xca, 0x8c, 0x56, 0xcb, 0x90, - 0xab, 0xec, 0x44, 0xc6, 0xfe, 0x43, 0x72, 0xad, 0x8c, 0x42, 0x77, 0x3d, 0x4b, 0xda, 0x2c, 0x71, - 0xd0, 0xde, 0xad, 0x58, 0xc5, 0xca, 0x92, 0x61, 0x73, 0x72, 0x45, 0x7b, 0x38, 0x56, 0x2a, 0x5e, - 0x8a, 0xd0, 0xfe, 0x1d, 0x97, 0x27, 0xe1, 0xa2, 0xd4, 0xcc, 0x48, 0x95, 0xb9, 0xfc, 0xe4, 0x33, - 0x80, 0x3b, 0x51, 0x99, 0x19, 0x99, 0x8a, 0x03, 0xab, 0x83, 0xa6, 0xf0, 0x06, 0x4f, 0x04, 0x7f, - 0x4f, 0x39, 0xe3, 0x89, 0xa0, 0x85, 0x3c, 0x13, 0x23, 0x30, 0x06, 0xd3, 0xed, 0xa8, 0x6f, 0xe3, - 0x07, 0x4d, 0x78, 0x2e, 0xcf, 0x04, 0x3a, 0x82, 0xb7, 0x1d, 0xa9, 0x45, 0x51, 0x2e, 0x0d, 0x15, - 0xa7, 0xb9, 0x74, 0xe2, 0xa3, 0xad, 0x31, 0x98, 0xf6, 0x66, 0x77, 0x88, 0xeb, 0x4e, 0x56, 0xdd, - 0xc9, 0x0b, 0xdf, 0x3d, 0xda, 0xb5, 0x95, 0x91, 0x2d, 0x7c, 0xf9, 0xb7, 0x6e, 0xf2, 0x05, 0xc0, - 0xed, 0xa3, 0x52, 0x19, 0x86, 0x10, 0xbc, 0x96, 0xb1, 0xd4, 0xb5, 0xbe, 0x1e, 0xd9, 0x33, 0x7a, - 0x0c, 0x47, 0x4e, 0x90, 0x7e, 0x68, 0x18, 0x9a, 0x0a, 0xa3, 0x25, 0xa7, 0x96, 0xdb, 0xb2, 0xdc, - 0xae, 0xcb, 0x5b, 0x89, 0xd7, 0x36, 0xfb, 0xa6, 0x29, 0x7c, 0x0a, 0xe1, 0x9a, 0xb9, 0xce, 0x26, - 0x73, 0x6b, 0xf0, 0xe4, 0x3b, 0x80, 0xc3, 0x57, 0x3c, 0x9f, 0xbb, 0x3b, 0x9f, 0x0b, 0x63, 0x64, - 0x16, 0xa3, 0x07, 0x70, 0x98, 0x8a, 0x22, 0xa1, 0x7e, 0x15, 0x74, 0xcd, 0xea, 0xa0, 0x49, 0x78, - 0xdc, 0x36, 0x27, 0xf0, 0xa6, 0x77, 0xdd, 0xa2, 0x9d, 0xe1, 0xa1, 0x4b, 0xad, 0xf3, 0xcf, 0x60, - 0xd7, 0x8e, 0x57, 0x8c, 0x3a, 0xe3, 0xce, 0xb4, 0x37, 0xbb, 0x47, 0xae, 0x5c, 0x3c, 0xb1, 0xc3, - 0x46, 0xbe, 0x66, 0x52, 0x01, 0xd8, 0x3d, 0x64, 0x9a, 0xa5, 0x05, 0x9a, 0xc3, 0xbe, 0x76, 0xab, - 0xa5, 0x0e, 0xb5, 0x0e, 0x7b, 0xb3, 0x87, 0x1b, 0x04, 0x5b, 0xef, 0x21, 0xda, 0xd1, 0xad, 0xe7, - 0x71, 0x1f, 0x0e, 0xb8, 0x16, 0x0b, 0x91, 0x19, 0xc9, 0x96, 0x34, 0x67, 0x26, 0xf1, 0x93, 0xf4, - 0xff, 0x85, 0x0f, 0x99, 0x49, 0xd0, 0x5b, 0x38, 0x58, 0xcd, 0xeb, 0x74, 0x57, 0xf3, 0xec, 0x6f, - 0x68, 0xff, 0xdf, 0x6d, 0x47, 0x7d, 0x0f, 0x3a, 0x0b, 0xc5, 0xf3, 0x27, 0xe7, 0x15, 0x0e, 0x2e, - 0x2a, 0x1c, 0xfc, 0xa8, 0x70, 0x70, 0x59, 0xe1, 0xe0, 0x53, 0x8d, 0xc1, 0xb7, 0x1a, 0x07, 0xe7, - 0x35, 0x06, 0x17, 0x35, 0x06, 0x3f, 0x6b, 0x0c, 0x7e, 0xd7, 0x38, 0xb8, 0xac, 0x31, 0xf8, 0xfa, - 0x0b, 0x07, 0xef, 0xba, 0x4e, 0xfb, 0xb8, 0x6b, 0x97, 0xfd, 0xe8, 0x4f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x89, 0x8a, 0x04, 0x79, 0x7e, 0x03, 0x00, 0x00, -} diff --git a/mixer/adapter/servicecontrol/config/config.proto b/mixer/adapter/servicecontrol/config/config.proto deleted file mode 100644 index 762f6e5b7309..000000000000 --- a/mixer/adapter/servicecontrol/config/config.proto +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -// $title: Service Control -// $description: Adapter that delivers logs and metrics to Google Service Control. -// $location: https://istio.io/docs/reference/config/policy-and-telemetry/adapters/servicecontrol.html -// $supported_templates: servicecontrolreport,quota,apikey -// $aliases: -// $ - /docs/reference/config/adapters/servicecontrol.html - -// The `servicecontrol` adapter delivers logs and metrics to -// [Google Service Control](https://cloud.google.com/service-control). -// -// This adapter supports the [servicecontrolreport template](https://istio.io/docs/reference/config/policy-and-telemetry/templates/servicecontrolreport/), -// the [quota template](https://istio.io/docs/reference/config/policy-and-telemetry/templates/quota/), -// and the [apikey template](https://istio.io/docs/reference/config/policy-and-telemetry/templates/apikey/). -package adapter.servicecontrol.config; - -import "gogoproto/gogo.proto"; -import "google/protobuf/duration.proto"; - -option go_package = "config"; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.equal_all) = false; -option (gogoproto.gostring_all) = false; - -// Adapter runtime config parameters. -message RuntimeConfig { - int32 check_cache_size = 1; - google.protobuf.Duration check_result_expiration = 2; -} - -message Quota { - // Istio quota name. - string name = 1; - // The corresponding Google quota metric name. - string google_quota_metric_name = 2; - // Quota token expiration time period. - google.protobuf.Duration expiration = 3; -} - -// Adapter setting for a managed GCP service. -message GcpServiceSetting { - // Local service name on the mesh, which matches destination.service attribute. - string mesh_service_name = 1; - - // Fully qualified GCP service name. - string google_service_name = 2; - - // Quota configs - repeated Quota quotas = 3; -} - -// Configuration format for the `servicecontrol` adapter. -// -// Sample adapter config: -// -// ```yaml -// apiVersion: "config.istio.io/v1alpha2" -// kind: servicecontrol -// metadata: -// name: testhandler -// namespace: istio-system -// spec: -// runtime_config: -// check_cache_size: 200 -// check_result_expiration: 60s -// credential_path: "/path/to/token.json" -// service_configs: -// - mesh_service_name: "echo.local.svc" -// google_service_name: "echo.endpoints.cloud.goog" -// quotas: -// - name: ratelimit.quota.istio-system -// google_quota_metric_name: read-requests -// expiration: 1m -// ``` -message Params { - RuntimeConfig runtime_config = 1; - // A path to JSON token file, usually mounted as Kubernetes secret on pod. - string credential_path = 2; - repeated GcpServiceSetting service_configs = 3; -} diff --git a/mixer/adapter/servicecontrol/config/config.proto_descriptor b/mixer/adapter/servicecontrol/config/config.proto_descriptor deleted file mode 100644 index 4f88a39cc1b2..000000000000 Binary files a/mixer/adapter/servicecontrol/config/config.proto_descriptor and /dev/null differ diff --git a/mixer/adapter/servicecontrol/config/servicecontrol.yaml b/mixer/adapter/servicecontrol/config/servicecontrol.yaml deleted file mode 100644 index ec491c3c3615..000000000000 --- a/mixer/adapter/servicecontrol/config/servicecontrol.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# this config is created through command -# mixgen adapter -c $GOPATH/src/istio.io/istio/mixer/adapter/servicecontrol/config/config.proto_descriptor -o $GOPATH/src/istio.io/istio/mixer/adapter/servicecontrol/config -n servicecontrol -t apikey -t servicecontrolreport -t quota -apiVersion: "config.istio.io/v1alpha2" -kind: adapter -metadata: - name: servicecontrol - namespace: istio-system -spec: - description: - session_based: true - templates: - - apikey - - servicecontrolreport - - quota - config: CvD6AgogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiJNChFGaWxlRGVzY3JpcHRvclNldBI4CgRmaWxlGAEgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG9SBGZpbGUi5AQKE0ZpbGVEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIYCgdwYWNrYWdlGAIgASgJUgdwYWNrYWdlEh4KCmRlcGVuZGVuY3kYAyADKAlSCmRlcGVuZGVuY3kSKwoRcHVibGljX2RlcGVuZGVuY3kYCiADKAVSEHB1YmxpY0RlcGVuZGVuY3kSJwoPd2Vha19kZXBlbmRlbmN5GAsgAygFUg53ZWFrRGVwZW5kZW5jeRJDCgxtZXNzYWdlX3R5cGUYBCADKAsyIC5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvUgttZXNzYWdlVHlwZRJBCgllbnVtX3R5cGUYBSADKAsyJC5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b1IIZW51bVR5cGUSQQoHc2VydmljZRgGIAMoCzInLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvUgdzZXJ2aWNlEkMKCWV4dGVuc2lvbhgHIAMoCzIlLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b1IJZXh0ZW5zaW9uEjYKB29wdGlvbnMYCCABKAsyHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnNSB29wdGlvbnMSSQoQc291cmNlX2NvZGVfaW5mbxgJIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb1IOc291cmNlQ29kZUluZm8SFgoGc3ludGF4GAwgASgJUgZzeW50YXgiuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQifAoVRXh0ZW5zaW9uUmFuZ2VPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIimAYKFEZpZWxkRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAMgASgFUgZudW1iZXISQQoFbGFiZWwYBCABKA4yKy5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWxSBWxhYmVsEj4KBHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZVIEdHlwZRIbCgl0eXBlX25hbWUYBiABKAlSCHR5cGVOYW1lEhoKCGV4dGVuZGVlGAIgASgJUghleHRlbmRlZRIjCg1kZWZhdWx0X3ZhbHVlGAcgASgJUgxkZWZhdWx0VmFsdWUSHwoLb25lb2ZfaW5kZXgYCSABKAVSCm9uZW9mSW5kZXgSGwoJanNvbl9uYW1lGAogASgJUghqc29uTmFtZRI3CgdvcHRpb25zGAggASgLMh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc1IHb3B0aW9ucyK2AgoEVHlwZRIPCgtUWVBFX0RPVUJMRRABEg4KClRZUEVfRkxPQVQQAhIOCgpUWVBFX0lOVDY0EAMSDwoLVFlQRV9VSU5UNjQQBBIOCgpUWVBFX0lOVDMyEAUSEAoMVFlQRV9GSVhFRDY0EAYSEAoMVFlQRV9GSVhFRDMyEAcSDQoJVFlQRV9CT09MEAgSDwoLVFlQRV9TVFJJTkcQCRIOCgpUWVBFX0dST1VQEAoSEAoMVFlQRV9NRVNTQUdFEAsSDgoKVFlQRV9CWVRFUxAMEg8KC1RZUEVfVUlOVDMyEA0SDQoJVFlQRV9FTlVNEA4SEQoNVFlQRV9TRklYRUQzMhAPEhEKDVRZUEVfU0ZJWEVENjQQEBIPCgtUWVBFX1NJTlQzMhAREg8KC1RZUEVfU0lOVDY0EBIiQwoFTGFiZWwSEgoOTEFCRUxfT1BUSU9OQUwQARISCg5MQUJFTF9SRVFVSVJFRBACEhIKDkxBQkVMX1JFUEVBVEVEEAMiYwoUT25lb2ZEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI3CgdvcHRpb25zGAIgASgLMh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc1IHb3B0aW9ucyLjAgoTRW51bURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEj8KBXZhbHVlGAIgAygLMikuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b1IFdmFsdWUSNgoHb3B0aW9ucxgDIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc1IHb3B0aW9ucxJdCg5yZXNlcnZlZF9yYW5nZRgEIAMoCzI2Lmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYBSADKAlSDHJlc2VydmVkTmFtZRo7ChFFbnVtUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQigwEKGEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEhYKBm51bWJlchgCIAEoBVIGbnVtYmVyEjsKB29wdGlvbnMYAyABKAsyIS5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc1IHb3B0aW9ucyKnAQoWU2VydmljZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEj4KBm1ldGhvZBgCIAMoCzImLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG9SBm1ldGhvZBI5CgdvcHRpb25zGAMgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zUgdvcHRpb25zIokCChVNZXRob2REZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIdCgppbnB1dF90eXBlGAIgASgJUglpbnB1dFR5cGUSHwoLb3V0cHV0X3R5cGUYAyABKAlSCm91dHB1dFR5cGUSOAoHb3B0aW9ucxgEIAEoCzIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zUgdvcHRpb25zEjAKEGNsaWVudF9zdHJlYW1pbmcYBSABKAg6BWZhbHNlUg9jbGllbnRTdHJlYW1pbmcSMAoQc2VydmVyX3N0cmVhbWluZxgGIAEoCDoFZmFsc2VSD3NlcnZlclN0cmVhbWluZyK5CAoLRmlsZU9wdGlvbnMSIQoMamF2YV9wYWNrYWdlGAEgASgJUgtqYXZhUGFja2FnZRIwChRqYXZhX291dGVyX2NsYXNzbmFtZRgIIAEoCVISamF2YU91dGVyQ2xhc3NuYW1lEjUKE2phdmFfbXVsdGlwbGVfZmlsZXMYCiABKAg6BWZhbHNlUhFqYXZhTXVsdGlwbGVGaWxlcxJECh1qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaBgUIAEoCEICGAFSGWphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2gSOgoWamF2YV9zdHJpbmdfY2hlY2tfdXRmOBgbIAEoCDoFZmFsc2VSE2phdmFTdHJpbmdDaGVja1V0ZjgSUwoMb3B0aW1pemVfZm9yGAkgASgOMikuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZToFU1BFRURSC29wdGltaXplRm9yEh0KCmdvX3BhY2thZ2UYCyABKAlSCWdvUGFja2FnZRI1ChNjY19nZW5lcmljX3NlcnZpY2VzGBAgASgIOgVmYWxzZVIRY2NHZW5lcmljU2VydmljZXMSOQoVamF2YV9nZW5lcmljX3NlcnZpY2VzGBEgASgIOgVmYWxzZVITamF2YUdlbmVyaWNTZXJ2aWNlcxI1ChNweV9nZW5lcmljX3NlcnZpY2VzGBIgASgIOgVmYWxzZVIRcHlHZW5lcmljU2VydmljZXMSNwoUcGhwX2dlbmVyaWNfc2VydmljZXMYKiABKAg6BWZhbHNlUhJwaHBHZW5lcmljU2VydmljZXMSJQoKZGVwcmVjYXRlZBgXIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSLwoQY2NfZW5hYmxlX2FyZW5hcxgfIAEoCDoFZmFsc2VSDmNjRW5hYmxlQXJlbmFzEioKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJUg9vYmpjQ2xhc3NQcmVmaXgSKQoQY3NoYXJwX25hbWVzcGFjZRglIAEoCVIPY3NoYXJwTmFtZXNwYWNlEiEKDHN3aWZ0X3ByZWZpeBgnIAEoCVILc3dpZnRQcmVmaXgSKAoQcGhwX2NsYXNzX3ByZWZpeBgoIAEoCVIOcGhwQ2xhc3NQcmVmaXgSIwoNcGhwX25hbWVzcGFjZRgpIAEoCVIMcGhwTmFtZXNwYWNlElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIjoKDE9wdGltaXplTW9kZRIJCgVTUEVFRBABEg0KCUNPREVfU0laRRACEhAKDExJVEVfUlVOVElNRRADKgkI6AcQgICAgAJKBAgmECci0QIKDk1lc3NhZ2VPcHRpb25zEjwKF21lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0GAEgASgIOgVmYWxzZVIUbWVzc2FnZVNldFdpcmVGb3JtYXQSTAofbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvchgCIAEoCDoFZmFsc2VSHG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3ISJQoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSGwoJbWFwX2VudHJ5GAcgASgIUghtYXBFbnRyeRJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQICBAJSgQICRAKIuIDCgxGaWVsZE9wdGlvbnMSQQoFY3R5cGUYASABKA4yIy5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlOgZTVFJJTkdSBWN0eXBlEhYKBnBhY2tlZBgCIAEoCFIGcGFja2VkEkcKBmpzdHlwZRgGIAEoDjIkLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOglKU19OT1JNQUxSBmpzdHlwZRIZCgRsYXp5GAUgASgIOgVmYWxzZVIEbGF6eRIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIZCgR3ZWFrGAogASgIOgVmYWxzZVIEd2VhaxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiIvCgVDVHlwZRIKCgZTVFJJTkcQABIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0KCUpTX05PUk1BTBAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACKgkI6AcQgICAgAJKBAgEEAUicwoMT25lb2ZPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIiwAEKC0VudW1PcHRpb25zEh8KC2FsbG93X2FsaWFzGAIgASgIUgphbGxvd0FsaWFzEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgFEAYingEKEEVudW1WYWx1ZU9wdGlvbnMSJQoKZGVwcmVjYXRlZBgBIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiKcAQoOU2VydmljZU9wdGlvbnMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiLgAgoNTWV0aG9kT3B0aW9ucxIlCgpkZXByZWNhdGVkGCEgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJxChFpZGVtcG90ZW5jeV9sZXZlbBgiIAEoDjIvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWw6E0lERU1QT1RFTkNZX1VOS05PV05SEGlkZW1wb3RlbmN5TGV2ZWwSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iUAoQSWRlbXBvdGVuY3lMZXZlbBIXChNJREVNUE9URU5DWV9VTktOT1dOEAASEwoPTk9fU0lERV9FRkZFQ1RTEAESDgoKSURFTVBPVEVOVBACKgkI6AcQgICAgAIimgMKE1VuaW50ZXJwcmV0ZWRPcHRpb24SQQoEbmFtZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0UgRuYW1lEikKEGlkZW50aWZpZXJfdmFsdWUYAyABKAlSD2lkZW50aWZpZXJWYWx1ZRIsChJwb3NpdGl2ZV9pbnRfdmFsdWUYBCABKARSEHBvc2l0aXZlSW50VmFsdWUSLAoSbmVnYXRpdmVfaW50X3ZhbHVlGAUgASgDUhBuZWdhdGl2ZUludFZhbHVlEiEKDGRvdWJsZV92YWx1ZRgGIAEoAVILZG91YmxlVmFsdWUSIQoMc3RyaW5nX3ZhbHVlGAcgASgMUgtzdHJpbmdWYWx1ZRInCg9hZ2dyZWdhdGVfdmFsdWUYCCABKAlSDmFnZ3JlZ2F0ZVZhbHVlGkoKCE5hbWVQYXJ0EhsKCW5hbWVfcGFydBgBIAIoCVIIbmFtZVBhcnQSIQoMaXNfZXh0ZW5zaW9uGAIgAigIUgtpc0V4dGVuc2lvbiKnAgoOU291cmNlQ29kZUluZm8SRAoIbG9jYXRpb24YASADKAsyKC5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb25SCGxvY2F0aW9uGs4BCghMb2NhdGlvbhIWCgRwYXRoGAEgAygFQgIQAVIEcGF0aBIWCgRzcGFuGAIgAygFQgIQAVIEc3BhbhIpChBsZWFkaW5nX2NvbW1lbnRzGAMgASgJUg9sZWFkaW5nQ29tbWVudHMSKwoRdHJhaWxpbmdfY29tbWVudHMYBCABKAlSEHRyYWlsaW5nQ29tbWVudHMSOgoZbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cxgGIAMoCVIXbGVhZGluZ0RldGFjaGVkQ29tbWVudHMi0QEKEUdlbmVyYXRlZENvZGVJbmZvEk0KCmFubm90YXRpb24YASADKAsyLS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvblIKYW5ub3RhdGlvbhptCgpBbm5vdGF0aW9uEhYKBHBhdGgYASADKAVCAhABUgRwYXRoEh8KC3NvdXJjZV9maWxlGAIgASgJUgpzb3VyY2VGaWxlEhQKBWJlZ2luGAMgASgFUgViZWdpbhIQCgNlbmQYBCABKAVSA2VuZEKPAQoTY29tLmdvb2dsZS5wcm90b2J1ZkIQRGVzY3JpcHRvclByb3Rvc0gBWj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90b2MtZ2VuLWdvL2Rlc2NyaXB0b3I7ZGVzY3JpcHRvcvgBAaICA0dQQqoCGkdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uSqrAAgoHEgUnAOcGAQqqDwoBDBIDJwASMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoy2wIgQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQogIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5CiAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCgogVGhlIG1lc3NhZ2VzIGluIHRoaXMgZmlsZSBkZXNjcmliZSB0aGUgZGVmaW5pdGlvbnMgZm91bmQgaW4gLnByb3RvIGZpbGVzLgogQSB2YWxpZCAucHJvdG8gZmlsZSBjYW4gYmUgdHJhbnNsYXRlZCBkaXJlY3RseSB0byBhIEZpbGVEZXNjcmlwdG9yUHJvdG8KIHdpdGhvdXQgYW55IG90aGVyIGluZm9ybWF0aW9uIChlLmcuIHdpdGhvdXQgcmVhZGluZyBpdHMgaW1wb3J0cykuCgoICgECEgMpCBcKCAoBCBIDKgBVCgsKBAjnBwASAyoAVQoMCgUI5wcAAhIDKgcRCg0KBgjnBwACABIDKgcRCg4KBwjnBwACAAESAyoHEQoMCgUI5wcABxIDKhRUCggKAQgSAysALAoLCgQI5wcBEgMrACwKDAoFCOcHAQISAysHEwoNCgYI5wcBAgASAysHEwoOCgcI5wcBAgABEgMrBxMKDAoFCOcHAQcSAysWKwoICgEIEgMsADEKCwoECOcHAhIDLAAxCgwKBQjnBwICEgMsBxsKDQoGCOcHAgIAEgMsBxsKDgoHCOcHAgIAARIDLAcbCgwKBQjnBwIHEgMsHjAKCAoBCBIDLQA3CgsKBAjnBwMSAy0ANwoMCgUI5wcDAhIDLQcXCg0KBgjnBwMCABIDLQcXCg4KBwjnBwMCAAESAy0HFwoMCgUI5wcDBxIDLRo2CggKAQgSAy4AIQoLCgQI5wcEEgMuACEKDAoFCOcHBAISAy4HGAoNCgYI5wcEAgASAy4HGAoOCgcI5wcEAgABEgMuBxgKDAoFCOcHBAcSAy4bIAoICgEIEgMvAB8KCwoECOcHBRIDLwAfCgwKBQjnBwUCEgMvBxcKDQoGCOcHBQIAEgMvBxcKDgoHCOcHBQIAARIDLwcXCgwKBQjnBwUDEgMvGh4KCAoBCBIDMwAcCoEBCgQI5wcGEgMzABwadCBkZXNjcmlwdG9yLnByb3RvIG11c3QgYmUgb3B0aW1pemVkIGZvciBzcGVlZCBiZWNhdXNlIHJlZmxlY3Rpb24tYmFzZWQKIGFsZ29yaXRobXMgZG9uJ3Qgd29yayBkdXJpbmcgYm9vdHN0cmFwcGluZy4KCgwKBQjnBwYCEgMzBxMKDQoGCOcHBgIAEgMzBxMKDgoHCOcHBgIAARIDMwcTCgwKBQjnBwYDEgMzFhsKagoCBAASBDcAOQEaXiBUaGUgcHJvdG9jb2wgY29tcGlsZXIgY2FuIG91dHB1dCBhIEZpbGVEZXNjcmlwdG9yU2V0IGNvbnRhaW5pbmcgdGhlIC5wcm90bwogZmlsZXMgaXQgcGFyc2VzLgoKCgoDBAABEgM3CBkKCwoEBAACABIDOAIoCgwKBQQAAgAEEgM4AgoKDAoFBAACAAYSAzgLHgoMCgUEAAIAARIDOB8jCgwKBQQAAgADEgM4JicKLwoCBAESBDwAWQEaIyBEZXNjcmliZXMgYSBjb21wbGV0ZSAucHJvdG8gZmlsZS4KCgoKAwQBARIDPAgbCjkKBAQBAgASAz0CGyIsIGZpbGUgbmFtZSwgcmVsYXRpdmUgdG8gcm9vdCBvZiBzb3VyY2UgdHJlZQoKDAoFBAECAAQSAz0CCgoMCgUEAQIABRIDPQsRCgwKBQQBAgABEgM9EhYKDAoFBAECAAMSAz0ZGgoqCgQEAQIBEgM+Ah4iHSBlLmcuICJmb28iLCAiZm9vLmJhciIsIGV0Yy4KCgwKBQQBAgEEEgM+AgoKDAoFBAECAQUSAz4LEQoMCgUEAQIBARIDPhIZCgwKBQQBAgEDEgM+HB0KNAoEBAECAhIDQQIhGicgTmFtZXMgb2YgZmlsZXMgaW1wb3J0ZWQgYnkgdGhpcyBmaWxlLgoKDAoFBAECAgQSA0ECCgoMCgUEAQICBRIDQQsRCgwKBQQBAgIBEgNBEhwKDAoFBAECAgMSA0EfIApRCgQEAQIDEgNDAigaRCBJbmRleGVzIG9mIHRoZSBwdWJsaWMgaW1wb3J0ZWQgZmlsZXMgaW4gdGhlIGRlcGVuZGVuY3kgbGlzdCBhYm92ZS4KCgwKBQQBAgMEEgNDAgoKDAoFBAECAwUSA0MLEAoMCgUEAQIDARIDQxEiCgwKBQQBAgMDEgNDJScKegoEBAECBBIDRgImGm0gSW5kZXhlcyBvZiB0aGUgd2VhayBpbXBvcnRlZCBmaWxlcyBpbiB0aGUgZGVwZW5kZW5jeSBsaXN0LgogRm9yIEdvb2dsZS1pbnRlcm5hbCBtaWdyYXRpb24gb25seS4gRG8gbm90IHVzZS4KCgwKBQQBAgQEEgNGAgoKDAoFBAECBAUSA0YLEAoMCgUEAQIEARIDRhEgCgwKBQQBAgQDEgNGIyUKNgoEBAECBRIDSQIsGikgQWxsIHRvcC1sZXZlbCBkZWZpbml0aW9ucyBpbiB0aGlzIGZpbGUuCgoMCgUEAQIFBBIDSQIKCgwKBQQBAgUGEgNJCxoKDAoFBAECBQESA0kbJwoMCgUEAQIFAxIDSSorCgsKBAQBAgYSA0oCLQoMCgUEAQIGBBIDSgIKCgwKBQQBAgYGEgNKCx4KDAoFBAECBgESA0ofKAoMCgUEAQIGAxIDSissCgsKBAQBAgcSA0sCLgoMCgUEAQIHBBIDSwIKCgwKBQQBAgcGEgNLCyEKDAoFBAECBwESA0siKQoMCgUEAQIHAxIDSywtCgsKBAQBAggSA0wCLgoMCgUEAQIIBBIDTAIKCgwKBQQBAggGEgNMCx8KDAoFBAECCAESA0wgKQoMCgUEAQIIAxIDTCwtCgsKBAQBAgkSA04CIwoMCgUEAQIJBBIDTgIKCgwKBQQBAgkGEgNOCxYKDAoFBAECCQESA04XHgoMCgUEAQIJAxIDTiEiCvQBCgQEAQIKEgNUAi8a5gEgVGhpcyBmaWVsZCBjb250YWlucyBvcHRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgc291cmNlIGNvZGUuCiBZb3UgbWF5IHNhZmVseSByZW1vdmUgdGhpcyBlbnRpcmUgZmllbGQgd2l0aG91dCBoYXJtaW5nIHJ1bnRpbWUKIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRlc2NyaXB0b3JzIC0tIHRoZSBpbmZvcm1hdGlvbiBpcyBuZWVkZWQgb25seSBieQogZGV2ZWxvcG1lbnQgdG9vbHMuCgoMCgUEAQIKBBIDVAIKCgwKBQQBAgoGEgNUCxkKDAoFBAECCgESA1QaKgoMCgUEAQIKAxIDVC0uCl0KBAQBAgsSA1gCHhpQIFRoZSBzeW50YXggb2YgdGhlIHByb3RvIGZpbGUuCiBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmUgInByb3RvMiIgYW5kICJwcm90bzMiLgoKDAoFBAECCwQSA1gCCgoMCgUEAQILBRIDWAsRCgwKBQQBAgsBEgNYEhgKDAoFBAECCwMSA1gbHQonCgIEAhIEXAB8ARobIERlc2NyaWJlcyBhIG1lc3NhZ2UgdHlwZS4KCgoKAwQCARIDXAgXCgsKBAQCAgASA10CGwoMCgUEAgIABBIDXQIKCgwKBQQCAgAFEgNdCxEKDAoFBAICAAESA10SFgoMCgUEAgIAAxIDXRkaCgsKBAQCAgESA18CKgoMCgUEAgIBBBIDXwIKCgwKBQQCAgEGEgNfCx8KDAoFBAICAQESA18gJQoMCgUEAgIBAxIDXygpCgsKBAQCAgISA2ACLgoMCgUEAgICBBIDYAIKCgwKBQQCAgIGEgNgCx8KDAoFBAICAgESA2AgKQoMCgUEAgICAxIDYCwtCgsKBAQCAgMSA2ICKwoMCgUEAgIDBBIDYgIKCgwKBQQCAgMGEgNiCxoKDAoFBAICAwESA2IbJgoMCgUEAgIDAxIDYikqCgsKBAQCAgQSA2MCLQoMCgUEAgIEBBIDYwIKCgwKBQQCAgQGEgNjCx4KDAoFBAICBAESA2MfKAoMCgUEAgIEAxIDYyssCgwKBAQCAwASBGUCagMKDAoFBAIDAAESA2UKGAoNCgYEAgMAAgASA2YEHQoOCgcEAgMAAgAEEgNmBAwKDgoHBAIDAAIABRIDZg0SCg4KBwQCAwACAAESA2YTGAoOCgcEAgMAAgADEgNmGxwKDQoGBAIDAAIBEgNnBBsKDgoHBAIDAAIBBBIDZwQMCg4KBwQCAwACAQUSA2cNEgoOCgcEAgMAAgEBEgNnExYKDgoHBAIDAAIBAxIDZxkaCg0KBgQCAwACAhIDaQQvCg4KBwQCAwACAgQSA2kEDAoOCgcEAgMAAgIGEgNpDSIKDgoHBAIDAAICARIDaSMqCg4KBwQCAwACAgMSA2ktLgoLCgQEAgIFEgNrAi4KDAoFBAICBQQSA2sCCgoMCgUEAgIFBhIDawsZCgwKBQQCAgUBEgNrGikKDAoFBAICBQMSA2ssLQoLCgQEAgIGEgNtAi8KDAoFBAICBgQSA20CCgoMCgUEAgIGBhIDbQsfCgwKBQQCAgYBEgNtICoKDAoFBAICBgMSA20tLgoLCgQEAgIHEgNvAiYKDAoFBAICBwQSA28CCgoMCgUEAgIHBhIDbwsZCgwKBQQCAgcBEgNvGiEKDAoFBAICBwMSA28kJQqqAQoEBAIDARIEdAJ3AxqbASBSYW5nZSBvZiByZXNlcnZlZCB0YWcgbnVtYmVycy4gUmVzZXJ2ZWQgdGFnIG51bWJlcnMgbWF5IG5vdCBiZSB1c2VkIGJ5CiBmaWVsZHMgb3IgZXh0ZW5zaW9uIHJhbmdlcyBpbiB0aGUgc2FtZSBtZXNzYWdlLiBSZXNlcnZlZCByYW5nZXMgbWF5CiBub3Qgb3ZlcmxhcC4KCgwKBQQCAwEBEgN0ChcKGwoGBAIDAQIAEgN1BB0iDCBJbmNsdXNpdmUuCgoOCgcEAgMBAgAEEgN1BAwKDgoHBAIDAQIABRIDdQ0SCg4KBwQCAwECAAESA3UTGAoOCgcEAgMBAgADEgN1GxwKGwoGBAIDAQIBEgN2BBsiDCBFeGNsdXNpdmUuCgoOCgcEAgMBAgEEEgN2BAwKDgoHBAIDAQIBBRIDdg0SCg4KBwQCAwECAQESA3YTFgoOCgcEAgMBAgEDEgN2GRoKCwoEBAICCBIDeAIsCgwKBQQCAggEEgN4AgoKDAoFBAICCAYSA3gLGAoMCgUEAgIIARIDeBknCgwKBQQCAggDEgN4KisKggEKBAQCAgkSA3sCJRp1IFJlc2VydmVkIGZpZWxkIG5hbWVzLCB3aGljaCBtYXkgbm90IGJlIHVzZWQgYnkgZmllbGRzIGluIHRoZSBzYW1lIG1lc3NhZ2UuCiBBIGdpdmVuIG5hbWUgbWF5IG9ubHkgYmUgcmVzZXJ2ZWQgb25jZS4KCgwKBQQCAgkEEgN7AgoKDAoFBAICCQUSA3sLEQoMCgUEAgIJARIDexIfCgwKBQQCAgkDEgN7IiQKCwoCBAMSBX4AhAEBCgoKAwQDARIDfggdCk8KBAQDAgASBIABAjoaQSBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4KCg0KBQQDAgAEEgSAAQIKCg0KBQQDAgAGEgSAAQseCg0KBQQDAgABEgSAAR8zCg0KBQQDAgADEgSAATY5CloKAwQDBRIEgwECGRpNIENsaWVudHMgY2FuIGRlZmluZSBjdXN0b20gb3B0aW9ucyBpbiBleHRlbnNpb25zIG9mIHRoaXMgbWVzc2FnZS4gU2VlIGFib3ZlLgoKDAoEBAMFABIEgwENGAoNCgUEAwUAARIEgwENEQoNCgUEAwUAAhIEgwEVGAozCgIEBBIGhwEA1QEBGiUgRGVzY3JpYmVzIGEgZmllbGQgd2l0aGluIGEgbWVzc2FnZS4KCgsKAwQEARIEhwEIHAoOCgQEBAQAEgaIAQKnAQMKDQoFBAQEAAESBIgBBwsKUwoGBAQEAAIAEgSLAQQcGkMgMCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzLgogT3JkZXIgaXMgd2VpcmQgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4KCg8KBwQEBAACAAESBIsBBA8KDwoHBAQEAAIAAhIEiwEaGwoOCgYEBAQAAgESBIwBBBwKDwoHBAQEAAIBARIEjAEEDgoPCgcEBAQAAgECEgSMARobCncKBgQEBAACAhIEjwEEHBpnIE5vdCBaaWdaYWcgZW5jb2RlZC4gIE5lZ2F0aXZlIG51bWJlcnMgdGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQ2NCBpZgogbmVnYXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuCgoPCgcEBAQAAgIBEgSPAQQOCg8KBwQEBAACAgISBI8BGhsKDgoGBAQEAAIDEgSQAQQcCg8KBwQEBAACAwESBJABBA8KDwoHBAQEAAIDAhIEkAEaGwp3CgYEBAQAAgQSBJMBBBwaZyBOb3QgWmlnWmFnIGVuY29kZWQuICBOZWdhdGl2ZSBudW1iZXJzIHRha2UgMTAgYnl0ZXMuICBVc2UgVFlQRV9TSU5UMzIgaWYKIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LgoKDwoHBAQEAAIEARIEkwEEDgoPCgcEBAQAAgQCEgSTARobCg4KBgQEBAACBRIElAEEHAoPCgcEBAQAAgUBEgSUAQQQCg8KBwQEBAACBQISBJQBGhsKDgoGBAQEAAIGEgSVAQQcCg8KBwQEBAACBgESBJUBBBAKDwoHBAQEAAIGAhIElQEaGwoOCgYEBAQAAgcSBJYBBBwKDwoHBAQEAAIHARIElgEEDQoPCgcEBAQAAgcCEgSWARobCg4KBgQEBAACCBIElwEEHAoPCgcEBAQAAggBEgSXAQQPCg8KBwQEBAACCAISBJcBGhsK4gEKBgQEBAACCRIEnAEEHRrRASBUYWctZGVsaW1pdGVkIGFnZ3JlZ2F0ZS4KIEdyb3VwIHR5cGUgaXMgZGVwcmVjYXRlZCBhbmQgbm90IHN1cHBvcnRlZCBpbiBwcm90bzMuIEhvd2V2ZXIsIFByb3RvMwogaW1wbGVtZW50YXRpb25zIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHBhcnNlIHRoZSBncm91cCB3aXJlIGZvcm1hdCBhbmQKIHRyZWF0IGdyb3VwIGZpZWxkcyBhcyB1bmtub3duIGZpZWxkcy4KCg8KBwQEBAACCQESBJwBBA4KDwoHBAQEAAIJAhIEnAEaHAotCgYEBAQAAgoSBJ0BBB0iHSBMZW5ndGgtZGVsaW1pdGVkIGFnZ3JlZ2F0ZS4KCg8KBwQEBAACCgESBJ0BBBAKDwoHBAQEAAIKAhIEnQEaHAojCgYEBAQAAgsSBKABBB0aEyBOZXcgaW4gdmVyc2lvbiAyLgoKDwoHBAQEAAILARIEoAEEDgoPCgcEBAQAAgsCEgSgARocCg4KBgQEBAACDBIEoQEEHQoPCgcEBAQAAgwBEgShAQQPCg8KBwQEBAACDAISBKEBGhwKDgoGBAQEAAINEgSiAQQdCg8KBwQEBAACDQESBKIBBA0KDwoHBAQEAAINAhIEogEaHAoOCgYEBAQAAg4SBKMBBB0KDwoHBAQEAAIOARIEowEEEQoPCgcEBAQAAg4CEgSjARocCg4KBgQEBAACDxIEpAEEHQoPCgcEBAQAAg8BEgSkAQQRCg8KBwQEBAACDwISBKQBGhwKJwoGBAQEAAIQEgSlAQQdIhcgVXNlcyBaaWdaYWcgZW5jb2RpbmcuCgoPCgcEBAQAAhABEgSlAQQPCg8KBwQEBAACEAISBKUBGhwKJwoGBAQEAAIREgSmAQQdIhcgVXNlcyBaaWdaYWcgZW5jb2RpbmcuCgoPCgcEBAQAAhEBEgSmAQQPCg8KBwQEBAACEQISBKYBGhwKDgoEBAQEARIGqQECrgEDCg0KBQQEBAEBEgSpAQcMCioKBgQEBAECABIEqwEEHBoaIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9ycwoKDwoHBAQEAQIAARIEqwEEEgoPCgcEBAQBAgACEgSrARobCg4KBgQEBAECARIErAEEHAoPCgcEBAQBAgEBEgSsAQQSCg8KBwQEBAECAQISBKwBGhsKDgoGBAQEAQICEgStAQQcCg8KBwQEBAECAgESBK0BBBIKDwoHBAQEAQICAhIErQEaGwoMCgQEBAIAEgSwAQIbCg0KBQQEAgAEEgSwAQIKCg0KBQQEAgAFEgSwAQsRCg0KBQQEAgABEgSwARIWCg0KBQQEAgADEgSwARkaCgwKBAQEAgESBLEBAhwKDQoFBAQCAQQSBLEBAgoKDQoFBAQCAQUSBLEBCxAKDQoFBAQCAQESBLEBERcKDQoFBAQCAQMSBLEBGhsKDAoEBAQCAhIEsgECGwoNCgUEBAICBBIEsgECCgoNCgUEBAICBhIEsgELEAoNCgUEBAICARIEsgERFgoNCgUEBAICAxIEsgEZGgqcAQoEBAQCAxIEtgECGRqNASBJZiB0eXBlX25hbWUgaXMgc2V0LCB0aGlzIG5lZWQgbm90IGJlIHNldC4gIElmIGJvdGggdGhpcyBhbmQgdHlwZV9uYW1lCiBhcmUgc2V0LCB0aGlzIG11c3QgYmUgb25lIG9mIFRZUEVfRU5VTSwgVFlQRV9NRVNTQUdFIG9yIFRZUEVfR1JPVVAuCgoNCgUEBAIDBBIEtgECCgoNCgUEBAIDBhIEtgELDwoNCgUEBAIDARIEtgEQFAoNCgUEBAIDAxIEtgEXGAq3AgoEBAQCBBIEvQECIBqoAiBGb3IgbWVzc2FnZSBhbmQgZW51bSB0eXBlcywgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZS4gIElmIHRoZSBuYW1lCiBzdGFydHMgd2l0aCBhICcuJywgaXQgaXMgZnVsbHktcXVhbGlmaWVkLiAgT3RoZXJ3aXNlLCBDKystbGlrZSBzY29waW5nCiBydWxlcyBhcmUgdXNlZCB0byBmaW5kIHRoZSB0eXBlIChpLmUuIGZpcnN0IHRoZSBuZXN0ZWQgdHlwZXMgd2l0aGluIHRoaXMKIG1lc3NhZ2UgYXJlIHNlYXJjaGVkLCB0aGVuIHdpdGhpbiB0aGUgcGFyZW50LCBvbiB1cCB0byB0aGUgcm9vdAogbmFtZXNwYWNlKS4KCg0KBQQEAgQEEgS9AQIKCg0KBQQEAgQFEgS9AQsRCg0KBQQEAgQBEgS9ARIbCg0KBQQEAgQDEgS9AR4fCn4KBAQEAgUSBMEBAh8acCBGb3IgZXh0ZW5zaW9ucywgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBiZWluZyBleHRlbmRlZC4gIEl0IGlzCiByZXNvbHZlZCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgdHlwZV9uYW1lLgoKDQoFBAQCBQQSBMEBAgoKDQoFBAQCBQUSBMEBCxEKDQoFBAQCBQESBMEBEhoKDQoFBAQCBQMSBMEBHR4KsQIKBAQEAgYSBMgBAiQaogIgRm9yIG51bWVyaWMgdHlwZXMsIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS4KIEZvciBib29sZWFucywgInRydWUiIG9yICJmYWxzZSIuCiBGb3Igc3RyaW5ncywgY29udGFpbnMgdGhlIGRlZmF1bHQgdGV4dCBjb250ZW50cyAobm90IGVzY2FwZWQgaW4gYW55IHdheSkuCiBGb3IgYnl0ZXMsIGNvbnRhaW5zIHRoZSBDIGVzY2FwZWQgdmFsdWUuICBBbGwgYnl0ZXMgPj0gMTI4IGFyZSBlc2NhcGVkLgogVE9ETyhrZW50b24pOiAgQmFzZS02NCBlbmNvZGU/CgoNCgUEBAIGBBIEyAECCgoNCgUEBAIGBRIEyAELEQoNCgUEBAIGARIEyAESHwoNCgUEBAIGAxIEyAEiIwqEAQoEBAQCBxIEzAECIRp2IElmIHNldCwgZ2l2ZXMgdGhlIGluZGV4IG9mIGEgb25lb2YgaW4gdGhlIGNvbnRhaW5pbmcgdHlwZSdzIG9uZW9mX2RlY2wKIGxpc3QuICBUaGlzIGZpZWxkIGlzIGEgbWVtYmVyIG9mIHRoYXQgb25lb2YuCgoNCgUEBAIHBBIEzAECCgoNCgUEBAIHBRIEzAELEAoNCgUEBAIHARIEzAERHAoNCgUEBAIHAxIEzAEfIAr6AQoEBAQCCBIE0gECIRrrASBKU09OIG5hbWUgb2YgdGhpcyBmaWVsZC4gVGhlIHZhbHVlIGlzIHNldCBieSBwcm90b2NvbCBjb21waWxlci4gSWYgdGhlCiB1c2VyIGhhcyBzZXQgYSAianNvbl9uYW1lIiBvcHRpb24gb24gdGhpcyBmaWVsZCwgdGhhdCBvcHRpb24ncyB2YWx1ZQogd2lsbCBiZSB1c2VkLiBPdGhlcndpc2UsIGl0J3MgZGVkdWNlZCBmcm9tIHRoZSBmaWVsZCdzIG5hbWUgYnkgY29udmVydGluZwogaXQgdG8gY2FtZWxDYXNlLgoKDQoFBAQCCAQSBNIBAgoKDQoFBAQCCAUSBNIBCxEKDQoFBAQCCAESBNIBEhsKDQoFBAQCCAMSBNIBHiAKDAoEBAQCCRIE1AECJAoNCgUEBAIJBBIE1AECCgoNCgUEBAIJBhIE1AELFwoNCgUEBAIJARIE1AEYHwoNCgUEBAIJAxIE1AEiIwoiCgIEBRIG2AEA2wEBGhQgRGVzY3JpYmVzIGEgb25lb2YuCgoLCgMEBQESBNgBCBwKDAoEBAUCABIE2QECGwoNCgUEBQIABBIE2QECCgoNCgUEBQIABRIE2QELEQoNCgUEBQIAARIE2QESFgoNCgUEBQIAAxIE2QEZGgoMCgQEBQIBEgTaAQIkCg0KBQQFAgEEEgTaAQIKCg0KBQQFAgEGEgTaAQsXCg0KBQQFAgEBEgTaARgfCg0KBQQFAgEDEgTaASIjCicKAgQGEgbeAQD4AQEaGSBEZXNjcmliZXMgYW4gZW51bSB0eXBlLgoKCwoDBAYBEgTeAQgbCgwKBAQGAgASBN8BAhsKDQoFBAYCAAQSBN8BAgoKDQoFBAYCAAUSBN8BCxEKDQoFBAYCAAESBN8BEhYKDQoFBAYCAAMSBN8BGRoKDAoEBAYCARIE4QECLgoNCgUEBgIBBBIE4QECCgoNCgUEBgIBBhIE4QELIwoNCgUEBgIBARIE4QEkKQoNCgUEBgIBAxIE4QEsLQoMCgQEBgICEgTjAQIjCg0KBQQGAgIEEgTjAQIKCg0KBQQGAgIGEgTjAQsWCg0KBQQGAgIBEgTjARceCg0KBQQGAgIDEgTjASEiCq8CCgQEBgMAEgbrAQLuAQMangIgUmFuZ2Ugb2YgcmVzZXJ2ZWQgbnVtZXJpYyB2YWx1ZXMuIFJlc2VydmVkIHZhbHVlcyBtYXkgbm90IGJlIHVzZWQgYnkKIGVudHJpZXMgaW4gdGhlIHNhbWUgZW51bS4gUmVzZXJ2ZWQgcmFuZ2VzIG1heSBub3Qgb3ZlcmxhcC4KCiBOb3RlIHRoYXQgdGhpcyBpcyBkaXN0aW5jdCBmcm9tIERlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlIGluIHRoYXQgaXQKIGlzIGluY2x1c2l2ZSBzdWNoIHRoYXQgaXQgY2FuIGFwcHJvcHJpYXRlbHkgcmVwcmVzZW50IHRoZSBlbnRpcmUgaW50MzIKIGRvbWFpbi4KCg0KBQQGAwABEgTrAQobChwKBgQGAwACABIE7AEEHSIMIEluY2x1c2l2ZS4KCg8KBwQGAwACAAQSBOwBBAwKDwoHBAYDAAIABRIE7AENEgoPCgcEBgMAAgABEgTsARMYCg8KBwQGAwACAAMSBOwBGxwKHAoGBAYDAAIBEgTtAQQbIgwgSW5jbHVzaXZlLgoKDwoHBAYDAAIBBBIE7QEEDAoPCgcEBgMAAgEFEgTtAQ0SCg8KBwQGAwACAQESBO0BExYKDwoHBAYDAAIBAxIE7QEZGgqqAQoEBAYCAxIE8wECMBqbASBSYW5nZSBvZiByZXNlcnZlZCBudW1lcmljIHZhbHVlcy4gUmVzZXJ2ZWQgbnVtZXJpYyB2YWx1ZXMgbWF5IG5vdCBiZSB1c2VkCiBieSBlbnVtIHZhbHVlcyBpbiB0aGUgc2FtZSBlbnVtIGRlY2xhcmF0aW9uLiBSZXNlcnZlZCByYW5nZXMgbWF5IG5vdAogb3ZlcmxhcC4KCg0KBQQGAgMEEgTzAQIKCg0KBQQGAgMGEgTzAQscCg0KBQQGAgMBEgTzAR0rCg0KBQQGAgMDEgTzAS4vCmwKBAQGAgQSBPcBAiQaXiBSZXNlcnZlZCBlbnVtIHZhbHVlIG5hbWVzLCB3aGljaCBtYXkgbm90IGJlIHJldXNlZC4gQSBnaXZlbiBuYW1lIG1heSBvbmx5CiBiZSByZXNlcnZlZCBvbmNlLgoKDQoFBAYCBAQSBPcBAgoKDQoFBAYCBAUSBPcBCxEKDQoFBAYCBAESBPcBEh8KDQoFBAYCBAMSBPcBIiMKMQoCBAcSBvsBAIACARojIERlc2NyaWJlcyBhIHZhbHVlIHdpdGhpbiBhbiBlbnVtLgoKCwoDBAcBEgT7AQggCgwKBAQHAgASBPwBAhsKDQoFBAcCAAQSBPwBAgoKDQoFBAcCAAUSBPwBCxEKDQoFBAcCAAESBPwBEhYKDQoFBAcCAAMSBPwBGRoKDAoEBAcCARIE/QECHAoNCgUEBwIBBBIE/QECCgoNCgUEBwIBBRIE/QELEAoNCgUEBwIBARIE/QERFwoNCgUEBwIBAxIE/QEaGwoMCgQEBwICEgT/AQIoCg0KBQQHAgIEEgT/AQIKCg0KBQQHAgIGEgT/AQsbCg0KBQQHAgIBEgT/ARwjCg0KBQQHAgIDEgT/ASYnCiQKAgQIEgaDAgCIAgEaFiBEZXNjcmliZXMgYSBzZXJ2aWNlLgoKCwoDBAgBEgSDAggeCgwKBAQIAgASBIQCAhsKDQoFBAgCAAQSBIQCAgoKDQoFBAgCAAUSBIQCCxEKDQoFBAgCAAESBIQCEhYKDQoFBAgCAAMSBIQCGRoKDAoEBAgCARIEhQICLAoNCgUECAIBBBIEhQICCgoNCgUECAIBBhIEhQILIAoNCgUECAIBARIEhQIhJwoNCgUECAIBAxIEhQIqKwoMCgQECAICEgSHAgImCg0KBQQIAgIEEgSHAgIKCg0KBQQIAgIGEgSHAgsZCg0KBQQIAgIBEgSHAhohCg0KBQQIAgIDEgSHAiQlCjAKAgQJEgaLAgCZAgEaIiBEZXNjcmliZXMgYSBtZXRob2Qgb2YgYSBzZXJ2aWNlLgoKCwoDBAkBEgSLAggdCgwKBAQJAgASBIwCAhsKDQoFBAkCAAQSBIwCAgoKDQoFBAkCAAUSBIwCCxEKDQoFBAkCAAESBIwCEhYKDQoFBAkCAAMSBIwCGRoKlwEKBAQJAgESBJACAiEaiAEgSW5wdXQgYW5kIG91dHB1dCB0eXBlIG5hbWVzLiAgVGhlc2UgYXJlIHJlc29sdmVkIGluIHRoZSBzYW1lIHdheSBhcwogRmllbGREZXNjcmlwdG9yUHJvdG8udHlwZV9uYW1lLCBidXQgbXVzdCByZWZlciB0byBhIG1lc3NhZ2UgdHlwZS4KCg0KBQQJAgEEEgSQAgIKCg0KBQQJAgEFEgSQAgsRCg0KBQQJAgEBEgSQAhIcCg0KBQQJAgEDEgSQAh8gCgwKBAQJAgISBJECAiIKDQoFBAkCAgQSBJECAgoKDQoFBAkCAgUSBJECCxEKDQoFBAkCAgESBJECEh0KDQoFBAkCAgMSBJECICEKDAoEBAkCAxIEkwICJQoNCgUECQIDBBIEkwICCgoNCgUECQIDBhIEkwILGAoNCgUECQIDARIEkwIZIAoNCgUECQIDAxIEkwIjJApFCgQECQIEEgSWAgI1GjcgSWRlbnRpZmllcyBpZiBjbGllbnQgc3RyZWFtcyBtdWx0aXBsZSBjbGllbnQgbWVzc2FnZXMKCg0KBQQJAgQEEgSWAgIKCg0KBQQJAgQFEgSWAgsPCg0KBQQJAgQBEgSWAhAgCg0KBQQJAgQDEgSWAiMkCg0KBQQJAgQIEgSWAiU0Cg0KBQQJAgQHEgSWAi4zCkUKBAQJAgUSBJgCAjUaNyBJZGVudGlmaWVzIGlmIHNlcnZlciBzdHJlYW1zIG11bHRpcGxlIHNlcnZlciBtZXNzYWdlcwoKDQoFBAkCBQQSBJgCAgoKDQoFBAkCBQUSBJgCCw8KDQoFBAkCBQESBJgCECAKDQoFBAkCBQMSBJgCIyQKDQoFBAkCBQgSBJgCJTQKDQoFBAkCBQcSBJgCLjMKrw4KAgQKEga9AgCsAwEyTiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBPcHRpb25zCjLQDSBFYWNoIG9mIHRoZSBkZWZpbml0aW9ucyBhYm92ZSBtYXkgaGF2ZSAib3B0aW9ucyIgYXR0YWNoZWQuICBUaGVzZSBhcmUKIGp1c3QgYW5ub3RhdGlvbnMgd2hpY2ggbWF5IGNhdXNlIGNvZGUgdG8gYmUgZ2VuZXJhdGVkIHNsaWdodGx5IGRpZmZlcmVudGx5CiBvciBtYXkgY29udGFpbiBoaW50cyBmb3IgY29kZSB0aGF0IG1hbmlwdWxhdGVzIHByb3RvY29sIG1lc3NhZ2VzLgoKIENsaWVudHMgbWF5IGRlZmluZSBjdXN0b20gb3B0aW9ucyBhcyBleHRlbnNpb25zIG9mIHRoZSAqT3B0aW9ucyBtZXNzYWdlcy4KIFRoZXNlIGV4dGVuc2lvbnMgbWF5IG5vdCB5ZXQgYmUga25vd24gYXQgcGFyc2luZyB0aW1lLCBzbyB0aGUgcGFyc2VyIGNhbm5vdAogc3RvcmUgdGhlIHZhbHVlcyBpbiB0aGVtLiAgSW5zdGVhZCBpdCBzdG9yZXMgdGhlbSBpbiBhIGZpZWxkIGluIHRoZSAqT3B0aW9ucwogbWVzc2FnZSBjYWxsZWQgdW5pbnRlcnByZXRlZF9vcHRpb24uIFRoaXMgZmllbGQgbXVzdCBoYXZlIHRoZSBzYW1lIG5hbWUKIGFjcm9zcyBhbGwgKk9wdGlvbnMgbWVzc2FnZXMuIFdlIHRoZW4gdXNlIHRoaXMgZmllbGQgdG8gcG9wdWxhdGUgdGhlCiBleHRlbnNpb25zIHdoZW4gd2UgYnVpbGQgYSBkZXNjcmlwdG9yLCBhdCB3aGljaCBwb2ludCBhbGwgcHJvdG9zIGhhdmUgYmVlbgogcGFyc2VkIGFuZCBzbyBhbGwgZXh0ZW5zaW9ucyBhcmUga25vd24uCgogRXh0ZW5zaW9uIG51bWJlcnMgZm9yIGN1c3RvbSBvcHRpb25zIG1heSBiZSBjaG9zZW4gYXMgZm9sbG93czoKICogRm9yIG9wdGlvbnMgd2hpY2ggd2lsbCBvbmx5IGJlIHVzZWQgd2l0aGluIGEgc2luZ2xlIGFwcGxpY2F0aW9uIG9yCiAgIG9yZ2FuaXphdGlvbiwgb3IgZm9yIGV4cGVyaW1lbnRhbCBvcHRpb25zLCB1c2UgZmllbGQgbnVtYmVycyA1MDAwMAogICB0aHJvdWdoIDk5OTk5LiAgSXQgaXMgdXAgdG8geW91IHRvIGVuc3VyZSB0aGF0IHlvdSBkbyBub3QgdXNlIHRoZQogICBzYW1lIG51bWJlciBmb3IgbXVsdGlwbGUgb3B0aW9ucy4KICogRm9yIG9wdGlvbnMgd2hpY2ggd2lsbCBiZSBwdWJsaXNoZWQgYW5kIHVzZWQgcHVibGljbHkgYnkgbXVsdGlwbGUKICAgaW5kZXBlbmRlbnQgZW50aXRpZXMsIGUtbWFpbCBwcm90b2J1Zi1nbG9iYWwtZXh0ZW5zaW9uLXJlZ2lzdHJ5QGdvb2dsZS5jb20KICAgdG8gcmVzZXJ2ZSBleHRlbnNpb24gbnVtYmVycy4gU2ltcGx5IHByb3ZpZGUgeW91ciBwcm9qZWN0IG5hbWUgKGUuZy4KICAgT2JqZWN0aXZlLUMgcGx1Z2luKSBhbmQgeW91ciBwcm9qZWN0IHdlYnNpdGUgKGlmIGF2YWlsYWJsZSkgLS0gdGhlcmUncyBubwogICBuZWVkIHRvIGV4cGxhaW4gaG93IHlvdSBpbnRlbmQgdG8gdXNlIHRoZW0uIFVzdWFsbHkgeW91IG9ubHkgbmVlZCBvbmUKICAgZXh0ZW5zaW9uIG51bWJlci4gWW91IGNhbiBkZWNsYXJlIG11bHRpcGxlIG9wdGlvbnMgd2l0aCBvbmx5IG9uZSBleHRlbnNpb24KICAgbnVtYmVyIGJ5IHB1dHRpbmcgdGhlbSBpbiBhIHN1Yi1tZXNzYWdlLiBTZWUgdGhlIEN1c3RvbSBPcHRpb25zIHNlY3Rpb24gb2YKICAgdGhlIGRvY3MgZm9yIGV4YW1wbGVzOgogICBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8jb3B0aW9ucwogICBJZiB0aGlzIHR1cm5zIG91dCB0byBiZSBwb3B1bGFyLCBhIHdlYiBzZXJ2aWNlIHdpbGwgYmUgc2V0IHVwCiAgIHRvIGF1dG9tYXRpY2FsbHkgYXNzaWduIG9wdGlvbiBudW1iZXJzLgoKCwoDBAoBEgS9AggTCvQBCgQECgIAEgTDAgIjGuUBIFNldHMgdGhlIEphdmEgcGFja2FnZSB3aGVyZSBjbGFzc2VzIGdlbmVyYXRlZCBmcm9tIHRoaXMgLnByb3RvIHdpbGwgYmUKIHBsYWNlZC4gIEJ5IGRlZmF1bHQsIHRoZSBwcm90byBwYWNrYWdlIGlzIHVzZWQsIGJ1dCB0aGlzIGlzIG9mdGVuCiBpbmFwcHJvcHJpYXRlIGJlY2F1c2UgcHJvdG8gcGFja2FnZXMgZG8gbm90IG5vcm1hbGx5IHN0YXJ0IHdpdGggYmFja3dhcmRzCiBkb21haW4gbmFtZXMuCgoNCgUECgIABBIEwwICCgoNCgUECgIABRIEwwILEQoNCgUECgIAARIEwwISHgoNCgUECgIAAxIEwwIhIgq/AgoEBAoCARIEywICKxqwAiBJZiBzZXQsIGFsbCB0aGUgY2xhc3NlcyBmcm9tIHRoZSAucHJvdG8gZmlsZSBhcmUgd3JhcHBlZCBpbiBhIHNpbmdsZQogb3V0ZXIgY2xhc3Mgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gIFRoaXMgYXBwbGllcyB0byBib3RoIFByb3RvMQogKGVxdWl2YWxlbnQgdG8gdGhlIG9sZCAiLS1vbmVfamF2YV9maWxlIiBvcHRpb24pIGFuZCBQcm90bzIgKHdoZXJlCiBhIC5wcm90byBhbHdheXMgdHJhbnNsYXRlcyB0byBhIHNpbmdsZSBjbGFzcywgYnV0IHlvdSBtYXkgd2FudCB0bwogZXhwbGljaXRseSBjaG9vc2UgdGhlIGNsYXNzIG5hbWUpLgoKDQoFBAoCAQQSBMsCAgoKDQoFBAoCAQUSBMsCCxEKDQoFBAoCAQESBMsCEiYKDQoFBAoCAQMSBMsCKSoKowMKBAQKAgISBNMCAjkalAMgSWYgc2V0IHRydWUsIHRoZW4gdGhlIEphdmEgY29kZSBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBhIHNlcGFyYXRlIC5qYXZhCiBmaWxlIGZvciBlYWNoIHRvcC1sZXZlbCBtZXNzYWdlLCBlbnVtLCBhbmQgc2VydmljZSBkZWZpbmVkIGluIHRoZSAucHJvdG8KIGZpbGUuICBUaHVzLCB0aGVzZSB0eXBlcyB3aWxsICpub3QqIGJlIG5lc3RlZCBpbnNpZGUgdGhlIG91dGVyIGNsYXNzCiBuYW1lZCBieSBqYXZhX291dGVyX2NsYXNzbmFtZS4gIEhvd2V2ZXIsIHRoZSBvdXRlciBjbGFzcyB3aWxsIHN0aWxsIGJlCiBnZW5lcmF0ZWQgdG8gY29udGFpbiB0aGUgZmlsZSdzIGdldERlc2NyaXB0b3IoKSBtZXRob2QgYXMgd2VsbCBhcyBhbnkKIHRvcC1sZXZlbCBleHRlbnNpb25zIGRlZmluZWQgaW4gdGhlIGZpbGUuCgoNCgUECgICBBIE0wICCgoNCgUECgICBRIE0wILDwoNCgUECgICARIE0wIQIwoNCgUECgICAxIE0wImKAoNCgUECgICCBIE0wIpOAoNCgUECgICBxIE0wIyNwopCgQECgIDEgTWAgJFGhsgVGhpcyBvcHRpb24gZG9lcyBub3RoaW5nLgoKDQoFBAoCAwQSBNYCAgoKDQoFBAoCAwUSBNYCCw8KDQoFBAoCAwESBNYCEC0KDQoFBAoCAwMSBNYCMDIKDQoFBAoCAwgSBNYCM0QKEAoIBAoCAwjnBwASBNYCNEMKEQoJBAoCAwjnBwACEgTWAjQ+ChIKCgQKAgMI5wcAAgASBNYCND4KEwoLBAoCAwjnBwACAAESBNYCND4KEQoJBAoCAwjnBwADEgTWAj9DCuYCCgQECgIEEgTeAgI8GtcCIElmIHNldCB0cnVlLCB0aGVuIHRoZSBKYXZhMiBjb2RlIGdlbmVyYXRvciB3aWxsIGdlbmVyYXRlIGNvZGUgdGhhdAogdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuZXZlciBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYXNzaWduIGEgbm9uLVVURi04CiBieXRlIHNlcXVlbmNlIHRvIGEgc3RyaW5nIGZpZWxkLgogTWVzc2FnZSByZWZsZWN0aW9uIHdpbGwgZG8gdGhlIHNhbWUuCiBIb3dldmVyLCBhbiBleHRlbnNpb24gZmllbGQgc3RpbGwgYWNjZXB0cyBub24tVVRGLTggYnl0ZSBzZXF1ZW5jZXMuCiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHdoZW4gdXNlZCB3aXRoIHRoZSBsaXRlIHJ1bnRpbWUuCgoNCgUECgIEBBIE3gICCgoNCgUECgIEBRIE3gILDwoNCgUECgIEARIE3gIQJgoNCgUECgIEAxIE3gIpKwoNCgUECgIECBIE3gIsOwoNCgUECgIEBxIE3gI1OgpMCgQECgQAEgbiAgLnAgMaPCBHZW5lcmF0ZWQgY2xhc3NlcyBjYW4gYmUgb3B0aW1pemVkIGZvciBzcGVlZCBvciBjb2RlIHNpemUuCgoNCgUECgQAARIE4gIHEwpECgYECgQAAgASBOMCBA4iNCBHZW5lcmF0ZSBjb21wbGV0ZSBjb2RlIGZvciBwYXJzaW5nLCBzZXJpYWxpemF0aW9uLAoKDwoHBAoEAAIAARIE4wIECQoPCgcECgQAAgACEgTjAgwNCkcKBgQKBAACARIE5QIEEhoGIGV0Yy4KIi8gVXNlIFJlZmxlY3Rpb25PcHMgdG8gaW1wbGVtZW50IHRoZXNlIG1ldGhvZHMuCgoPCgcECgQAAgEBEgTlAgQNCg8KBwQKBAACAQISBOUCEBEKRwoGBAoEAAICEgTmAgQVIjcgR2VuZXJhdGUgY29kZSB1c2luZyBNZXNzYWdlTGl0ZSBhbmQgdGhlIGxpdGUgcnVudGltZS4KCg8KBwQKBAACAgESBOYCBBAKDwoHBAoEAAICAhIE5gITFAoMCgQECgIFEgToAgI5Cg0KBQQKAgUEEgToAgIKCg0KBQQKAgUGEgToAgsXCg0KBQQKAgUBEgToAhgkCg0KBQQKAgUDEgToAicoCg0KBQQKAgUIEgToAik4Cg0KBQQKAgUHEgToAjI3CuICCgQECgIGEgTvAgIiGtMCIFNldHMgdGhlIEdvIHBhY2thZ2Ugd2hlcmUgc3RydWN0cyBnZW5lcmF0ZWQgZnJvbSB0aGlzIC5wcm90byB3aWxsIGJlCiBwbGFjZWQuIElmIG9taXR0ZWQsIHRoZSBHbyBwYWNrYWdlIHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBmb2xsb3dpbmc6CiAgIC0gVGhlIGJhc2VuYW1lIG9mIHRoZSBwYWNrYWdlIGltcG9ydCBwYXRoLCBpZiBwcm92aWRlZC4KICAgLSBPdGhlcndpc2UsIHRoZSBwYWNrYWdlIHN0YXRlbWVudCBpbiB0aGUgLnByb3RvIGZpbGUsIGlmIHByZXNlbnQuCiAgIC0gT3RoZXJ3aXNlLCB0aGUgYmFzZW5hbWUgb2YgdGhlIC5wcm90byBmaWxlLCB3aXRob3V0IGV4dGVuc2lvbi4KCg0KBQQKAgYEEgTvAgIKCg0KBQQKAgYFEgTvAgsRCg0KBQQKAgYBEgTvAhIcCg0KBQQKAgYDEgTvAh8hCtQECgQECgIHEgT9AgI5GsUEIFNob3VsZCBnZW5lcmljIHNlcnZpY2VzIGJlIGdlbmVyYXRlZCBpbiBlYWNoIGxhbmd1YWdlPyAgIkdlbmVyaWMiIHNlcnZpY2VzCiBhcmUgbm90IHNwZWNpZmljIHRvIGFueSBwYXJ0aWN1bGFyIFJQQyBzeXN0ZW0uICBUaGV5IGFyZSBnZW5lcmF0ZWQgYnkgdGhlCiBtYWluIGNvZGUgZ2VuZXJhdG9ycyBpbiBlYWNoIGxhbmd1YWdlICh3aXRob3V0IGFkZGl0aW9uYWwgcGx1Z2lucykuCiBHZW5lcmljIHNlcnZpY2VzIHdlcmUgdGhlIG9ubHkga2luZCBvZiBzZXJ2aWNlIGdlbmVyYXRpb24gc3VwcG9ydGVkIGJ5CiBlYXJseSB2ZXJzaW9ucyBvZiBnb29nbGUucHJvdG9idWYuCgogR2VuZXJpYyBzZXJ2aWNlcyBhcmUgbm93IGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB1c2luZyBwbHVnaW5zCiB0aGF0IGdlbmVyYXRlIGNvZGUgc3BlY2lmaWMgdG8geW91ciBwYXJ0aWN1bGFyIFJQQyBzeXN0ZW0uICBUaGVyZWZvcmUsCiB0aGVzZSBkZWZhdWx0IHRvIGZhbHNlLiAgT2xkIGNvZGUgd2hpY2ggZGVwZW5kcyBvbiBnZW5lcmljIHNlcnZpY2VzIHNob3VsZAogZXhwbGljaXRseSBzZXQgdGhlbSB0byB0cnVlLgoKDQoFBAoCBwQSBP0CAgoKDQoFBAoCBwUSBP0CCw8KDQoFBAoCBwESBP0CECMKDQoFBAoCBwMSBP0CJigKDQoFBAoCBwgSBP0CKTgKDQoFBAoCBwcSBP0CMjcKDAoEBAoCCBIE/gICOwoNCgUECgIIBBIE/gICCgoNCgUECgIIBRIE/gILDwoNCgUECgIIARIE/gIQJQoNCgUECgIIAxIE/gIoKgoNCgUECgIICBIE/gIrOgoNCgUECgIIBxIE/gI0OQoMCgQECgIJEgT/AgI5Cg0KBQQKAgkEEgT/AgIKCg0KBQQKAgkFEgT/AgsPCg0KBQQKAgkBEgT/AhAjCg0KBQQKAgkDEgT/AiYoCg0KBQQKAgkIEgT/Aik4Cg0KBQQKAgkHEgT/AjI3CgwKBAQKAgoSBIADAjoKDQoFBAoCCgQSBIADAgoKDQoFBAoCCgUSBIADCw8KDQoFBAoCCgESBIADECQKDQoFBAoCCgMSBIADJykKDQoFBAoCCggSBIADKjkKDQoFBAoCCgcSBIADMzgK8wEKBAQKAgsSBIYDAjAa5AEgSXMgdGhpcyBmaWxlIGRlcHJlY2F0ZWQ/CiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCiBmb3IgZXZlcnl0aGluZyBpbiB0aGUgZmlsZSwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5CiBsZWFzdCwgdGhpcyBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIGZpbGVzLgoKDQoFBAoCCwQSBIYDAgoKDQoFBAoCCwUSBIYDCw8KDQoFBAoCCwESBIYDEBoKDQoFBAoCCwMSBIYDHR8KDQoFBAoCCwgSBIYDIC8KDQoFBAoCCwcSBIYDKS4KfwoEBAoCDBIEigMCNhpxIEVuYWJsZXMgdGhlIHVzZSBvZiBhcmVuYXMgZm9yIHRoZSBwcm90byBtZXNzYWdlcyBpbiB0aGlzIGZpbGUuIFRoaXMgYXBwbGllcwogb25seSB0byBnZW5lcmF0ZWQgY2xhc3NlcyBmb3IgQysrLgoKDQoFBAoCDAQSBIoDAgoKDQoFBAoCDAUSBIoDCw8KDQoFBAoCDAESBIoDECAKDQoFBAoCDAMSBIoDIyUKDQoFBAoCDAgSBIoDJjUKDQoFBAoCDAcSBIoDLzQKkgEKBAQKAg0SBI8DAikagwEgU2V0cyB0aGUgb2JqZWN0aXZlIGMgY2xhc3MgcHJlZml4IHdoaWNoIGlzIHByZXBlbmRlZCB0byBhbGwgb2JqZWN0aXZlIGMKIGdlbmVyYXRlZCBjbGFzc2VzIGZyb20gdGhpcyAucHJvdG8uIFRoZXJlIGlzIG5vIGRlZmF1bHQuCgoNCgUECgINBBIEjwMCCgoNCgUECgINBRIEjwMLEQoNCgUECgINARIEjwMSIwoNCgUECgINAxIEjwMmKApJCgQECgIOEgSSAwIoGjsgTmFtZXNwYWNlIGZvciBnZW5lcmF0ZWQgY2xhc3NlczsgZGVmYXVsdHMgdG8gdGhlIHBhY2thZ2UuCgoNCgUECgIOBBIEkgMCCgoNCgUECgIOBRIEkgMLEQoNCgUECgIOARIEkgMSIgoNCgUECgIOAxIEkgMlJwqRAgoEBAoCDxIEmAMCJBqCAiBCeSBkZWZhdWx0IFN3aWZ0IGdlbmVyYXRvcnMgd2lsbCB0YWtlIHRoZSBwcm90byBwYWNrYWdlIGFuZCBDYW1lbENhc2UgaXQKIHJlcGxhY2luZyAnLicgd2l0aCB1bmRlcnNjb3JlIGFuZCB1c2UgdGhhdCB0byBwcmVmaXggdGhlIHR5cGVzL3N5bWJvbHMKIGRlZmluZWQuIFdoZW4gdGhpcyBvcHRpb25zIGlzIHByb3ZpZGVkLCB0aGV5IHdpbGwgdXNlIHRoaXMgdmFsdWUgaW5zdGVhZAogdG8gcHJlZml4IHRoZSB0eXBlcy9zeW1ib2xzIGRlZmluZWQuCgoNCgUECgIPBBIEmAMCCgoNCgUECgIPBRIEmAMLEQoNCgUECgIPARIEmAMSHgoNCgUECgIPAxIEmAMhIwp+CgQECgIQEgScAwIoGnAgU2V0cyB0aGUgcGhwIGNsYXNzIHByZWZpeCB3aGljaCBpcyBwcmVwZW5kZWQgdG8gYWxsIHBocCBnZW5lcmF0ZWQgY2xhc3NlcwogZnJvbSB0aGlzIC5wcm90by4gRGVmYXVsdCBpcyBlbXB0eS4KCg0KBQQKAhAEEgScAwIKCg0KBQQKAhAFEgScAwsRCg0KBQQKAhABEgScAxIiCg0KBQQKAhADEgScAyUnCr4BCgQECgIREgShAwIlGq8BIFVzZSB0aGlzIG9wdGlvbiB0byBjaGFuZ2UgdGhlIG5hbWVzcGFjZSBvZiBwaHAgZ2VuZXJhdGVkIGNsYXNzZXMuIERlZmF1bHQKIGlzIGVtcHR5LiBXaGVuIHRoaXMgb3B0aW9uIGlzIGVtcHR5LCB0aGUgcGFja2FnZSBuYW1lIHdpbGwgYmUgdXNlZCBmb3IKIGRldGVybWluaW5nIHRoZSBuYW1lc3BhY2UuCgoNCgUECgIRBBIEoQMCCgoNCgUECgIRBRIEoQMLEQoNCgUECgIRARIEoQMSHwoNCgUECgIRAxIEoQMiJAp8CgQECgISEgSlAwI6Gm4gVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLgogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgIk9wdGlvbnMiIHNlY3Rpb24gYWJvdmUuCgoNCgUECgISBBIEpQMCCgoNCgUECgISBhIEpQMLHgoNCgUECgISARIEpQMfMwoNCgUECgISAxIEpQM2OQqHAQoDBAoFEgSpAwIZGnogQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLgogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgIk9wdGlvbnMiIHNlY3Rpb24gYWJvdmUuCgoMCgQECgUAEgSpAw0YCg0KBQQKBQABEgSpAw0RCg0KBQQKBQACEgSpAxUYCgsKAwQKCRIEqwMLDgoMCgQECgkAEgSrAwsNCg0KBQQKCQABEgSrAwsNCg0KBQQKCQACEgSrAwsNCgwKAgQLEgauAwDtAwEKCwoDBAsBEgSuAwgWCtgFCgQECwIAEgTBAwI8GskFIFNldCB0cnVlIHRvIHVzZSB0aGUgb2xkIHByb3RvMSBNZXNzYWdlU2V0IHdpcmUgZm9ybWF0IGZvciBleHRlbnNpb25zLgogVGhpcyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTWVzc2FnZVNldCB3aXJlCiBmb3JtYXQuICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBmb3IgYW55IG90aGVyIHJlYXNvbjogIEl0J3MgbGVzcwogZWZmaWNpZW50LCBoYXMgZmV3ZXIgZmVhdHVyZXMsIGFuZCBpcyBtb3JlIGNvbXBsaWNhdGVkLgoKIFRoZSBtZXNzYWdlIG11c3QgYmUgZGVmaW5lZCBleGFjdGx5IGFzIGZvbGxvd3M6CiAgIG1lc3NhZ2UgRm9vIHsKICAgICBvcHRpb24gbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQgPSB0cnVlOwogICAgIGV4dGVuc2lvbnMgNCB0byBtYXg7CiAgIH0KIE5vdGUgdGhhdCB0aGUgbWVzc2FnZSBjYW5ub3QgaGF2ZSBhbnkgZGVmaW5lZCBmaWVsZHM7IE1lc3NhZ2VTZXRzIG9ubHkKIGhhdmUgZXh0ZW5zaW9ucy4KCiBBbGwgZXh0ZW5zaW9ucyBvZiB5b3VyIHR5cGUgbXVzdCBiZSBzaW5ndWxhciBtZXNzYWdlczsgZS5nLiB0aGV5IGNhbm5vdAogYmUgaW50MzJzLCBlbnVtcywgb3IgcmVwZWF0ZWQgbWVzc2FnZXMuCgogQmVjYXVzZSB0aGlzIGlzIGFuIG9wdGlvbiwgdGhlIGFib3ZlIHR3byByZXN0cmljdGlvbnMgYXJlIG5vdCBlbmZvcmNlZCBieQogdGhlIHByb3RvY29sIGNvbXBpbGVyLgoKDQoFBAsCAAQSBMEDAgoKDQoFBAsCAAUSBMEDCw8KDQoFBAsCAAESBMEDECcKDQoFBAsCAAMSBMEDKisKDQoFBAsCAAgSBMEDLDsKDQoFBAsCAAcSBMEDNToK6wEKBAQLAgESBMYDAkQa3AEgRGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgdGhlIHN0YW5kYXJkICJkZXNjcmlwdG9yKCkiIGFjY2Vzc29yLCB3aGljaCBjYW4KIGNvbmZsaWN0IHdpdGggYSBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLiAgVGhpcyBpcyBtZWFudCB0byBtYWtlIG1pZ3JhdGlvbgogZnJvbSBwcm90bzEgZWFzaWVyOyBuZXcgY29kZSBzaG91bGQgYXZvaWQgZmllbGRzIG5hbWVkICJkZXNjcmlwdG9yIi4KCg0KBQQLAgEEEgTGAwIKCg0KBQQLAgEFEgTGAwsPCg0KBQQLAgEBEgTGAxAvCg0KBQQLAgEDEgTGAzIzCg0KBQQLAgEIEgTGAzRDCg0KBQQLAgEHEgTGAz1CCu4BCgQECwICEgTMAwIvGt8BIElzIHRoaXMgbWVzc2FnZSBkZXByZWNhdGVkPwogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9ucwogZm9yIHRoZSBtZXNzYWdlLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsCiB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgbWVzc2FnZXMuCgoNCgUECwICBBIEzAMCCgoNCgUECwICBRIEzAMLDwoNCgUECwICARIEzAMQGgoNCgUECwICAxIEzAMdHgoNCgUECwICCBIEzAMfLgoNCgUECwICBxIEzAMoLQqeBgoEBAsCAxIE4wMCHhqPBiBXaGV0aGVyIHRoZSBtZXNzYWdlIGlzIGFuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1hcCBlbnRyeSB0eXBlIGZvciB0aGUKIG1hcHMgZmllbGQuCgogRm9yIG1hcHMgZmllbGRzOgogICAgIG1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IG1hcF9maWVsZCA9IDE7CiBUaGUgcGFyc2VkIGRlc2NyaXB0b3IgbG9va3MgbGlrZToKICAgICBtZXNzYWdlIE1hcEZpZWxkRW50cnkgewogICAgICAgICBvcHRpb24gbWFwX2VudHJ5ID0gdHJ1ZTsKICAgICAgICAgb3B0aW9uYWwgS2V5VHlwZSBrZXkgPSAxOwogICAgICAgICBvcHRpb25hbCBWYWx1ZVR5cGUgdmFsdWUgPSAyOwogICAgIH0KICAgICByZXBlYXRlZCBNYXBGaWVsZEVudHJ5IG1hcF9maWVsZCA9IDE7CgogSW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2Ugbm90IHRvIGdlbmVyYXRlIHRoZSBtYXBfZW50cnk9dHJ1ZSBtZXNzYWdlLCBidXQKIHVzZSBhIG5hdGl2ZSBtYXAgaW4gdGhlIHRhcmdldCBsYW5ndWFnZSB0byBob2xkIHRoZSBrZXlzIGFuZCB2YWx1ZXMuCiBUaGUgcmVmbGVjdGlvbiBBUElzIGluIHN1Y2ggaW1wbGVtZW50aW9ucyBzdGlsbCBuZWVkIHRvIHdvcmsgYXMKIGlmIHRoZSBmaWVsZCBpcyBhIHJlcGVhdGVkIG1lc3NhZ2UgZmllbGQuCgogTk9URTogRG8gbm90IHNldCB0aGUgb3B0aW9uIGluIC5wcm90byBmaWxlcy4gQWx3YXlzIHVzZSB0aGUgbWFwcyBzeW50YXgKIGluc3RlYWQuIFRoZSBvcHRpb24gc2hvdWxkIG9ubHkgYmUgaW1wbGljaXRseSBzZXQgYnkgdGhlIHByb3RvIGNvbXBpbGVyCiBwYXJzZXIuCgoNCgUECwIDBBIE4wMCCgoNCgUECwIDBRIE4wMLDwoNCgUECwIDARIE4wMQGQoNCgUECwIDAxIE4wMcHQokCgMECwkSBOUDCw0iFyBqYXZhbGl0ZV9zZXJpYWxpemFibGUKCgwKBAQLCQASBOUDCwwKDQoFBAsJAAESBOUDCwwKDQoFBAsJAAISBOUDCwwKHwoDBAsJEgTmAwsNIhIgamF2YW5hbm9fYXNfbGl0ZQoKDAoEBAsJARIE5gMLDAoNCgUECwkBARIE5gMLDAoNCgUECwkBAhIE5gMLDApPCgQECwIEEgTpAwI6GkEgVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCgoNCgUECwIEBBIE6QMCCgoNCgUECwIEBhIE6QMLHgoNCgUECwIEARIE6QMfMwoNCgUECwIEAxIE6QM2OQpaCgMECwUSBOwDAhkaTSBDbGllbnRzIGNhbiBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgaW4gZXh0ZW5zaW9ucyBvZiB0aGlzIG1lc3NhZ2UuIFNlZSBhYm92ZS4KCgwKBAQLBQASBOwDDRgKDQoFBAsFAAESBOwDDREKDQoFBAsFAAISBOwDFRgKDAoCBAwSBu8DAMoEAQoLCgMEDAESBO8DCBQKowIKBAQMAgASBPQDAi4alAIgVGhlIGN0eXBlIG9wdGlvbiBpbnN0cnVjdHMgdGhlIEMrKyBjb2RlIGdlbmVyYXRvciB0byB1c2UgYSBkaWZmZXJlbnQKIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaWVsZCB0aGFuIGl0IG5vcm1hbGx5IHdvdWxkLiAgU2VlIHRoZSBzcGVjaWZpYwogb3B0aW9ucyBiZWxvdy4gIFRoaXMgb3B0aW9uIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gdGhlIG9wZW4gc291cmNlCiByZWxlYXNlIC0tIHNvcnJ5LCB3ZSdsbCB0cnkgdG8gaW5jbHVkZSBpdCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIQoKDQoFBAwCAAQSBPQDAgoKDQoFBAwCAAYSBPQDCxAKDQoFBAwCAAESBPQDERYKDQoFBAwCAAMSBPQDGRoKDQoFBAwCAAgSBPQDGy0KDQoFBAwCAAcSBPQDJiwKDgoEBAwEABIG9QMC/AMDCg0KBQQMBAABEgT1AwcMCh8KBgQMBAACABIE9wMEDxoPIERlZmF1bHQgbW9kZS4KCg8KBwQMBAACAAESBPcDBAoKDwoHBAwEAAIAAhIE9wMNDgoOCgYEDAQAAgESBPkDBA0KDwoHBAwEAAIBARIE+QMECAoPCgcEDAQAAgECEgT5AwsMCg4KBgQMBAACAhIE+wMEFQoPCgcEDAQAAgIBEgT7AwQQCg8KBwQMBAACAgISBPsDExQK2gIKBAQMAgESBIIEAhsaywIgVGhlIHBhY2tlZCBvcHRpb24gY2FuIGJlIGVuYWJsZWQgZm9yIHJlcGVhdGVkIHByaW1pdGl2ZSBmaWVsZHMgdG8gZW5hYmxlCiBhIG1vcmUgZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9uIHRoZSB3aXJlLiBSYXRoZXIgdGhhbiByZXBlYXRlZGx5CiB3cml0aW5nIHRoZSB0YWcgYW5kIHR5cGUgZm9yIGVhY2ggZWxlbWVudCwgdGhlIGVudGlyZSBhcnJheSBpcyBlbmNvZGVkIGFzCiBhIHNpbmdsZSBsZW5ndGgtZGVsaW1pdGVkIGJsb2IuIEluIHByb3RvMywgb25seSBleHBsaWNpdCBzZXR0aW5nIGl0IHRvCiBmYWxzZSB3aWxsIGF2b2lkIHVzaW5nIHBhY2tlZCBlbmNvZGluZy4KCg0KBQQMAgEEEgSCBAIKCg0KBQQMAgEFEgSCBAsPCg0KBQQMAgEBEgSCBBAWCg0KBQQMAgEDEgSCBBkaCpoFCgQEDAICEgSPBAIzGosFIFRoZSBqc3R5cGUgb3B0aW9uIGRldGVybWluZXMgdGhlIEphdmFTY3JpcHQgdHlwZSB1c2VkIGZvciB2YWx1ZXMgb2YgdGhlCiBmaWVsZC4gIFRoZSBvcHRpb24gaXMgcGVybWl0dGVkIG9ubHkgZm9yIDY0IGJpdCBpbnRlZ3JhbCBhbmQgZml4ZWQgdHlwZXMKIChpbnQ2NCwgdWludDY0LCBzaW50NjQsIGZpeGVkNjQsIHNmaXhlZDY0KS4gIEEgZmllbGQgd2l0aCBqc3R5cGUgSlNfU1RSSU5HCiBpcyByZXByZXNlbnRlZCBhcyBKYXZhU2NyaXB0IHN0cmluZywgd2hpY2ggYXZvaWRzIGxvc3Mgb2YgcHJlY2lzaW9uIHRoYXQKIGNhbiBoYXBwZW4gd2hlbiBhIGxhcmdlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGZsb2F0aW5nIHBvaW50IEphdmFTY3JpcHQuCiBTcGVjaWZ5aW5nIEpTX05VTUJFUiBmb3IgdGhlIGpzdHlwZSBjYXVzZXMgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGNvZGUgdG8KIHVzZSB0aGUgSmF2YVNjcmlwdCAibnVtYmVyIiB0eXBlLiAgVGhlIGJlaGF2aW9yIG9mIHRoZSBkZWZhdWx0IG9wdGlvbgogSlNfTk9STUFMIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KCiBUaGlzIG9wdGlvbiBpcyBhbiBlbnVtIHRvIHBlcm1pdCBhZGRpdGlvbmFsIHR5cGVzIHRvIGJlIGFkZGVkLCBlLmcuCiBnb29nLm1hdGguSW50ZWdlci4KCg0KBQQMAgIEEgSPBAIKCg0KBQQMAgIGEgSPBAsRCg0KBQQMAgIBEgSPBBIYCg0KBQQMAgIDEgSPBBscCg0KBQQMAgIIEgSPBB0yCg0KBQQMAgIHEgSPBCgxCg4KBAQMBAESBpAEApkEAwoNCgUEDAQBARIEkAQHDQonCgYEDAQBAgASBJIEBBIaFyBVc2UgdGhlIGRlZmF1bHQgdHlwZS4KCg8KBwQMBAECAAESBJIEBA0KDwoHBAwEAQIAAhIEkgQQEQopCgYEDAQBAgESBJUEBBIaGSBVc2UgSmF2YVNjcmlwdCBzdHJpbmdzLgoKDwoHBAwEAQIBARIElQQEDQoPCgcEDAQBAgECEgSVBBARCikKBgQMBAECAhIEmAQEEhoZIFVzZSBKYXZhU2NyaXB0IG51bWJlcnMuCgoPCgcEDAQBAgIBEgSYBAQNCg8KBwQMBAECAgISBJgEEBEK7wwKBAQMAgMSBLcEAika4AwgU2hvdWxkIHRoaXMgZmllbGQgYmUgcGFyc2VkIGxhemlseT8gIExhenkgYXBwbGllcyBvbmx5IHRvIG1lc3NhZ2UtdHlwZQogZmllbGRzLiAgSXQgbWVhbnMgdGhhdCB3aGVuIHRoZSBvdXRlciBtZXNzYWdlIGlzIGluaXRpYWxseSBwYXJzZWQsIHRoZQogaW5uZXIgbWVzc2FnZSdzIGNvbnRlbnRzIHdpbGwgbm90IGJlIHBhcnNlZCBidXQgaW5zdGVhZCBzdG9yZWQgaW4gZW5jb2RlZAogZm9ybS4gIFRoZSBpbm5lciBtZXNzYWdlIHdpbGwgYWN0dWFsbHkgYmUgcGFyc2VkIHdoZW4gaXQgaXMgZmlyc3QgYWNjZXNzZWQuCgogVGhpcyBpcyBvbmx5IGEgaGludC4gIEltcGxlbWVudGF0aW9ucyBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byB1c2UKIGVhZ2VyIG9yIGxhenkgcGFyc2luZyByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbi4gIEhvd2V2ZXIsCiBzZXR0aW5nIHRoaXMgb3B0aW9uIHRydWUgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvdG9jb2wgYXV0aG9yIGJlbGlldmVzIHRoYXQKIHVzaW5nIGxhenkgcGFyc2luZyBvbiB0aGlzIGZpZWxkIGlzIHdvcnRoIHRoZSBhZGRpdGlvbmFsIGJvb2trZWVwaW5nCiBvdmVyaGVhZCB0eXBpY2FsbHkgbmVlZGVkIHRvIGltcGxlbWVudCBpdC4KCiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIHB1YmxpYyBpbnRlcmZhY2Ugb2YgYW55IGdlbmVyYXRlZCBjb2RlOwogYWxsIG1ldGhvZCBzaWduYXR1cmVzIHJlbWFpbiB0aGUgc2FtZS4gIEZ1cnRoZXJtb3JlLCB0aHJlYWQtc2FmZXR5IG9mIHRoZQogaW50ZXJmYWNlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzIG9wdGlvbjsgY29uc3QgbWV0aG9kcyByZW1haW4gc2FmZSB0bwogY2FsbCBmcm9tIG11bHRpcGxlIHRocmVhZHMgY29uY3VycmVudGx5LCB3aGlsZSBub24tY29uc3QgbWV0aG9kcyBjb250aW51ZQogdG8gcmVxdWlyZSBleGNsdXNpdmUgYWNjZXNzLgoKCiBOb3RlIHRoYXQgaW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2Ugbm90IHRvIGNoZWNrIHJlcXVpcmVkIGZpZWxkcyB3aXRoaW4KIGEgbGF6eSBzdWItbWVzc2FnZS4gIFRoYXQgaXMsIGNhbGxpbmcgSXNJbml0aWFsaXplZCgpIG9uIHRoZSBvdXRlciBtZXNzYWdlCiBtYXkgcmV0dXJuIHRydWUgZXZlbiBpZiB0aGUgaW5uZXIgbWVzc2FnZSBoYXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuCiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG90aGVyd2lzZSB0aGUgaW5uZXIgbWVzc2FnZSB3b3VsZCBoYXZlIHRvIGJlCiBwYXJzZWQgaW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgY2hlY2ssIGRlZmVhdGluZyB0aGUgcHVycG9zZSBvZiBsYXp5CiBwYXJzaW5nLiAgQW4gaW1wbGVtZW50YXRpb24gd2hpY2ggY2hvb3NlcyBub3QgdG8gY2hlY2sgcmVxdWlyZWQgZmllbGRzCiBtdXN0IGJlIGNvbnNpc3RlbnQgYWJvdXQgaXQuICBUaGF0IGlzLCBmb3IgYW55IHBhcnRpY3VsYXIgc3ViLW1lc3NhZ2UsIHRoZQogaW1wbGVtZW50YXRpb24gbXVzdCBlaXRoZXIgKmFsd2F5cyogY2hlY2sgaXRzIHJlcXVpcmVkIGZpZWxkcywgb3IgKm5ldmVyKgogY2hlY2sgaXRzIHJlcXVpcmVkIGZpZWxkcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBoYXMKIGJlZW4gcGFyc2VkLgoKDQoFBAwCAwQSBLcEAgoKDQoFBAwCAwUSBLcECw8KDQoFBAwCAwESBLcEEBQKDQoFBAwCAwMSBLcEFxgKDQoFBAwCAwgSBLcEGSgKDQoFBAwCAwcSBLcEIicK6AEKBAQMAgQSBL0EAi8a2QEgSXMgdGhpcyBmaWVsZCBkZXByZWNhdGVkPwogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9ucwogZm9yIGFjY2Vzc29ycywgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LCB0aGlzCiBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIGZpZWxkcy4KCg0KBQQMAgQEEgS9BAIKCg0KBQQMAgQFEgS9BAsPCg0KBQQMAgQBEgS9BBAaCg0KBQQMAgQDEgS9BB0eCg0KBQQMAgQIEgS9BB8uCg0KBQQMAgQHEgS9BCgtCj8KBAQMAgUSBMAEAioaMSBGb3IgR29vZ2xlLWludGVybmFsIG1pZ3JhdGlvbiBvbmx5LiBEbyBub3QgdXNlLgoKDQoFBAwCBQQSBMAEAgoKDQoFBAwCBQUSBMAECw8KDQoFBAwCBQESBMAEEBQKDQoFBAwCBQMSBMAEFxkKDQoFBAwCBQgSBMAEGikKDQoFBAwCBQcSBMAEIygKTwoEBAwCBhIExAQCOhpBIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLgoKDQoFBAwCBgQSBMQEAgoKDQoFBAwCBgYSBMQECx4KDQoFBAwCBgESBMQEHzMKDQoFBAwCBgMSBMQENjkKWgoDBAwFEgTHBAIZGk0gQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLiBTZWUgYWJvdmUuCgoMCgQEDAUAEgTHBA0YCg0KBQQMBQABEgTHBA0RCg0KBQQMBQACEgTHBBUYChwKAwQMCRIEyQQLDSIPIHJlbW92ZWQganR5cGUKCgwKBAQMCQASBMkECwwKDQoFBAwJAAESBMkECwwKDQoFBAwJAAISBMkECwwKDAoCBA0SBswEANIEAQoLCgMEDQESBMwECBQKTwoEBA0CABIEzgQCOhpBIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLgoKDQoFBA0CAAQSBM4EAgoKDQoFBA0CAAYSBM4ECx4KDQoFBA0CAAESBM4EHzMKDQoFBA0CAAMSBM4ENjkKWgoDBA0FEgTRBAIZGk0gQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLiBTZWUgYWJvdmUuCgoMCgQEDQUAEgTRBA0YCg0KBQQNBQABEgTRBA0RCg0KBQQNBQACEgTRBBUYCgwKAgQOEgbUBADnBAEKCwoDBA4BEgTUBAgTCmAKBAQOAgASBNgEAiAaUiBTZXQgdGhpcyBvcHRpb24gdG8gdHJ1ZSB0byBhbGxvdyBtYXBwaW5nIGRpZmZlcmVudCB0YWcgbmFtZXMgdG8gdGhlIHNhbWUKIHZhbHVlLgoKDQoFBA4CAAQSBNgEAgoKDQoFBA4CAAUSBNgECw8KDQoFBA4CAAESBNgEEBsKDQoFBA4CAAMSBNgEHh8K5QEKBAQOAgESBN4EAi8a1gEgSXMgdGhpcyBlbnVtIGRlcHJlY2F0ZWQ/CiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCiBmb3IgdGhlIGVudW0sIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCwgdGhpcwogaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBlbnVtcy4KCg0KBQQOAgEEEgTeBAIKCg0KBQQOAgEFEgTeBAsPCg0KBQQOAgEBEgTeBBAaCg0KBQQOAgEDEgTeBB0eCg0KBQQOAgEIEgTeBB8uCg0KBQQOAgEHEgTeBCgtCh8KAwQOCRIE4AQLDSISIGphdmFuYW5vX2FzX2xpdGUKCgwKBAQOCQASBOAECwwKDQoFBA4JAAESBOAECwwKDQoFBA4JAAISBOAECwwKTwoEBA4CAhIE4wQCOhpBIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLgoKDQoFBA4CAgQSBOMEAgoKDQoFBA4CAgYSBOMECx4KDQoFBA4CAgESBOMEHzMKDQoFBA4CAgMSBOMENjkKWgoDBA4FEgTmBAIZGk0gQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLiBTZWUgYWJvdmUuCgoMCgQEDgUAEgTmBA0YCg0KBQQOBQABEgTmBA0RCg0KBQQOBQACEgTmBBUYCgwKAgQPEgbpBAD1BAEKCwoDBA8BEgTpBAgYCvcBCgQEDwIAEgTuBAIvGugBIElzIHRoaXMgZW51bSB2YWx1ZSBkZXByZWNhdGVkPwogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9ucwogZm9yIHRoZSBlbnVtIHZhbHVlLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsCiB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgZW51bSB2YWx1ZXMuCgoNCgUEDwIABBIE7gQCCgoNCgUEDwIABRIE7gQLDwoNCgUEDwIAARIE7gQQGgoNCgUEDwIAAxIE7gQdHgoNCgUEDwIACBIE7gQfLgoNCgUEDwIABxIE7gQoLQpPCgQEDwIBEgTxBAI6GkEgVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCgoNCgUEDwIBBBIE8QQCCgoNCgUEDwIBBhIE8QQLHgoNCgUEDwIBARIE8QQfMwoNCgUEDwIBAxIE8QQ2OQpaCgMEDwUSBPQEAhkaTSBDbGllbnRzIGNhbiBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgaW4gZXh0ZW5zaW9ucyBvZiB0aGlzIG1lc3NhZ2UuIFNlZSBhYm92ZS4KCgwKBAQPBQASBPQEDRgKDQoFBA8FAAESBPQEDREKDQoFBA8FAAISBPQEFRgKDAoCBBASBvcEAIkFAQoLCgMEEAESBPcECBYK2QMKBAQQAgASBIIFAjAa3wEgSXMgdGhpcyBzZXJ2aWNlIGRlcHJlY2F0ZWQ/CiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCiBmb3IgdGhlIHNlcnZpY2UsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCwKIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBzZXJ2aWNlcy4KMugBIE5vdGU6ICBGaWVsZCBudW1iZXJzIDEgdGhyb3VnaCAzMiBhcmUgcmVzZXJ2ZWQgZm9yIEdvb2dsZSdzIGludGVybmFsIFJQQwogICBmcmFtZXdvcmsuICBXZSBhcG9sb2dpemUgZm9yIGhvYXJkaW5nIHRoZXNlIG51bWJlcnMgdG8gb3Vyc2VsdmVzLCBidXQKICAgd2Ugd2VyZSBhbHJlYWR5IHVzaW5nIHRoZW0gbG9uZyBiZWZvcmUgd2UgZGVjaWRlZCB0byByZWxlYXNlIFByb3RvY29sCiAgIEJ1ZmZlcnMuCgoNCgUEEAIABBIEggUCCgoNCgUEEAIABRIEggULDwoNCgUEEAIAARIEggUQGgoNCgUEEAIAAxIEggUdHwoNCgUEEAIACBIEggUgLwoNCgUEEAIABxIEggUpLgpPCgQEEAIBEgSFBQI6GkEgVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCgoNCgUEEAIBBBIEhQUCCgoNCgUEEAIBBhIEhQULHgoNCgUEEAIBARIEhQUfMwoNCgUEEAIBAxIEhQU2OQpaCgMEEAUSBIgFAhkaTSBDbGllbnRzIGNhbiBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgaW4gZXh0ZW5zaW9ucyBvZiB0aGlzIG1lc3NhZ2UuIFNlZSBhYm92ZS4KCgwKBAQQBQASBIgFDRgKDQoFBBAFAAESBIgFDREKDQoFBBAFAAISBIgFFRgKDAoCBBESBosFAKgFAQoLCgMEEQESBIsFCBUK1gMKBAQRAgASBJYFAjAa3AEgSXMgdGhpcyBtZXRob2QgZGVwcmVjYXRlZD8KIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnMKIGZvciB0aGUgbWV0aG9kLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsCiB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgbWV0aG9kcy4KMugBIE5vdGU6ICBGaWVsZCBudW1iZXJzIDEgdGhyb3VnaCAzMiBhcmUgcmVzZXJ2ZWQgZm9yIEdvb2dsZSdzIGludGVybmFsIFJQQwogICBmcmFtZXdvcmsuICBXZSBhcG9sb2dpemUgZm9yIGhvYXJkaW5nIHRoZXNlIG51bWJlcnMgdG8gb3Vyc2VsdmVzLCBidXQKICAgd2Ugd2VyZSBhbHJlYWR5IHVzaW5nIHRoZW0gbG9uZyBiZWZvcmUgd2UgZGVjaWRlZCB0byByZWxlYXNlIFByb3RvY29sCiAgIEJ1ZmZlcnMuCgoNCgUEEQIABBIElgUCCgoNCgUEEQIABRIElgULDwoNCgUEEQIAARIElgUQGgoNCgUEEQIAAxIElgUdHwoNCgUEEQIACBIElgUgLwoNCgUEEQIABxIElgUpLgrwAQoEBBEEABIGmwUCnwUDGt8BIElzIHRoaXMgbWV0aG9kIHNpZGUtZWZmZWN0LWZyZWUgKG9yIHNhZmUgaW4gSFRUUCBwYXJsYW5jZSksIG9yIGlkZW1wb3RlbnQsCiBvciBuZWl0aGVyPyBIVFRQIGJhc2VkIFJQQyBpbXBsZW1lbnRhdGlvbiBtYXkgY2hvb3NlIEdFVCB2ZXJiIGZvciBzYWZlCiBtZXRob2RzLCBhbmQgUFVUIHZlcmIgZm9yIGlkZW1wb3RlbnQgbWV0aG9kcyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFBPU1QuCgoNCgUEEQQAARIEmwUHFwoOCgYEEQQAAgASBJwFBBwKDwoHBBEEAAIAARIEnAUEFwoPCgcEEQQAAgACEgScBRobCiQKBgQRBAACARIEnQUEHCIUIGltcGxpZXMgaWRlbXBvdGVudAoKDwoHBBEEAAIBARIEnQUEEwoPCgcEEQQAAgECEgSdBRobCjcKBgQRBAACAhIEngUEHCInIGlkZW1wb3RlbnQsIGJ1dCBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMKCg8KBwQRBAACAgESBJ4FBA4KDwoHBBEEAAICAhIEngUaGwoOCgQEEQIBEgagBQKhBScKDQoFBBECAQQSBKAFAgoKDQoFBBECAQYSBKAFCxsKDQoFBBECAQESBKAFHC0KDQoFBBECAQMSBKEFBggKDQoFBBECAQgSBKEFCSYKDQoFBBECAQcSBKEFEiUKTwoEBBECAhIEpAUCOhpBIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLgoKDQoFBBECAgQSBKQFAgoKDQoFBBECAgYSBKQFCx4KDQoFBBECAgESBKQFHzMKDQoFBBECAgMSBKQFNjkKWgoDBBEFEgSnBQIZGk0gQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLiBTZWUgYWJvdmUuCgoMCgQEEQUAEgSnBQ0YCg0KBQQRBQABEgSnBQ0RCg0KBQQRBQACEgSnBRUYCosDCgIEEhIGsQUAxQUBGvwCIEEgbWVzc2FnZSByZXByZXNlbnRpbmcgYSBvcHRpb24gdGhlIHBhcnNlciBkb2VzIG5vdCByZWNvZ25pemUuIFRoaXMgb25seQogYXBwZWFycyBpbiBvcHRpb25zIHByb3RvcyBjcmVhdGVkIGJ5IHRoZSBjb21waWxlcjo6UGFyc2VyIGNsYXNzLgogRGVzY3JpcHRvclBvb2wgcmVzb2x2ZXMgdGhlc2Ugd2hlbiBidWlsZGluZyBEZXNjcmlwdG9yIG9iamVjdHMuIFRoZXJlZm9yZSwKIG9wdGlvbnMgcHJvdG9zIGluIGRlc2NyaXB0b3Igb2JqZWN0cyAoZS5nLiByZXR1cm5lZCBieSBEZXNjcmlwdG9yOjpvcHRpb25zKCksCiBvciBwcm9kdWNlZCBieSBEZXNjcmlwdG9yOjpDb3B5VG8oKSkgd2lsbCBuZXZlciBoYXZlIFVuaW50ZXJwcmV0ZWRPcHRpb25zCiBpbiB0aGVtLgoKCwoDBBIBEgSxBQgbCssCCgQEEgMAEga3BQK6BQMaugIgVGhlIG5hbWUgb2YgdGhlIHVuaW50ZXJwcmV0ZWQgb3B0aW9uLiAgRWFjaCBzdHJpbmcgcmVwcmVzZW50cyBhIHNlZ21lbnQgaW4KIGEgZG90LXNlcGFyYXRlZCBuYW1lLiAgaXNfZXh0ZW5zaW9uIGlzIHRydWUgaWZmIGEgc2VnbWVudCByZXByZXNlbnRzIGFuCiBleHRlbnNpb24gKGRlbm90ZWQgd2l0aCBwYXJlbnRoZXNlcyBpbiBvcHRpb25zIHNwZWNzIGluIC5wcm90byBmaWxlcykuCiBFLmcuLHsgWyJmb28iLCBmYWxzZV0sIFsiYmFyLmJheiIsIHRydWVdLCBbInF1eCIsIGZhbHNlXSB9IHJlcHJlc2VudHMKICJmb28uKGJhci5iYXopLnF1eCIuCgoNCgUEEgMAARIEtwUKEgoOCgYEEgMAAgASBLgFBCIKDwoHBBIDAAIABBIEuAUEDAoPCgcEEgMAAgAFEgS4BQ0TCg8KBwQSAwACAAESBLgFFB0KDwoHBBIDAAIAAxIEuAUgIQoOCgYEEgMAAgESBLkFBCMKDwoHBBIDAAIBBBIEuQUEDAoPCgcEEgMAAgEFEgS5BQ0RCg8KBwQSAwACAQESBLkFEh4KDwoHBBIDAAIBAxIEuQUhIgoMCgQEEgIAEgS7BQIdCg0KBQQSAgAEEgS7BQIKCg0KBQQSAgAGEgS7BQsTCg0KBQQSAgABEgS7BRQYCg0KBQQSAgADEgS7BRscCpwBCgQEEgIBEgS/BQInGo0BIFRoZSB2YWx1ZSBvZiB0aGUgdW5pbnRlcnByZXRlZCBvcHRpb24sIGluIHdoYXRldmVyIHR5cGUgdGhlIHRva2VuaXplcgogaWRlbnRpZmllZCBpdCBhcyBkdXJpbmcgcGFyc2luZy4gRXhhY3RseSBvbmUgb2YgdGhlc2Ugc2hvdWxkIGJlIHNldC4KCg0KBQQSAgEEEgS/BQIKCg0KBQQSAgEFEgS/BQsRCg0KBQQSAgEBEgS/BRIiCg0KBQQSAgEDEgS/BSUmCgwKBAQSAgISBMAFAikKDQoFBBICAgQSBMAFAgoKDQoFBBICAgUSBMAFCxEKDQoFBBICAgESBMAFEiQKDQoFBBICAgMSBMAFJygKDAoEBBICAxIEwQUCKAoNCgUEEgIDBBIEwQUCCgoNCgUEEgIDBRIEwQULEAoNCgUEEgIDARIEwQURIwoNCgUEEgIDAxIEwQUmJwoMCgQEEgIEEgTCBQIjCg0KBQQSAgQEEgTCBQIKCg0KBQQSAgQFEgTCBQsRCg0KBQQSAgQBEgTCBRIeCg0KBQQSAgQDEgTCBSEiCgwKBAQSAgUSBMMFAiIKDQoFBBICBQQSBMMFAgoKDQoFBBICBQUSBMMFCxAKDQoFBBICBQESBMMFER0KDQoFBBICBQMSBMMFICEKDAoEBBICBhIExAUCJgoNCgUEEgIGBBIExAUCCgoNCgUEEgIGBRIExAULEQoNCgUEEgIGARIExAUSIQoNCgUEEgIGAxIExAUkJQraAQoCBBMSBswFAM0GARpqIEVuY2Fwc3VsYXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgZnJvbSB3aGljaCBhCiBGaWxlRGVzY3JpcHRvclByb3RvIHdhcyBnZW5lcmF0ZWQuCjJgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIE9wdGlvbmFsIHNvdXJjZSBjb2RlIGluZm8KCgsKAwQTARIEzAUIFgqCEQoEBBMCABIE+AUCIRrzECBBIExvY2F0aW9uIGlkZW50aWZpZXMgYSBwaWVjZSBvZiBzb3VyY2UgY29kZSBpbiBhIC5wcm90byBmaWxlIHdoaWNoCiBjb3JyZXNwb25kcyB0byBhIHBhcnRpY3VsYXIgZGVmaW5pdGlvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQKIHRvIGJlIHVzZWZ1bCB0byBJREVzLCBjb2RlIGluZGV4ZXJzLCBkb2N1bWVudGF0aW9uIGdlbmVyYXRvcnMsIGFuZCBzaW1pbGFyCiB0b29scy4KCiBGb3IgZXhhbXBsZSwgc2F5IHdlIGhhdmUgYSBmaWxlIGxpa2U6CiAgIG1lc3NhZ2UgRm9vIHsKICAgICBvcHRpb25hbCBzdHJpbmcgZm9vID0gMTsKICAgfQogTGV0J3MgbG9vayBhdCBqdXN0IHRoZSBmaWVsZCBkZWZpbml0aW9uOgogICBvcHRpb25hbCBzdHJpbmcgZm9vID0gMTsKICAgXiAgICAgICBeXiAgICAgXl4gIF4gIF5eXgogICBhICAgICAgIGJjICAgICBkZSAgZiAgZ2hpCiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgogICBzcGFuICAgcGF0aCAgICAgICAgICAgICAgIHJlcHJlc2VudHMKICAgW2EsaSkgIFsgNCwgMCwgMiwgMCBdICAgICBUaGUgd2hvbGUgZmllbGQgZGVmaW5pdGlvbi4KICAgW2EsYikgIFsgNCwgMCwgMiwgMCwgNCBdICBUaGUgbGFiZWwgKG9wdGlvbmFsKS4KICAgW2MsZCkgIFsgNCwgMCwgMiwgMCwgNSBdICBUaGUgdHlwZSAoc3RyaW5nKS4KICAgW2UsZikgIFsgNCwgMCwgMiwgMCwgMSBdICBUaGUgbmFtZSAoZm9vKS4KICAgW2csaCkgIFsgNCwgMCwgMiwgMCwgMyBdICBUaGUgbnVtYmVyICgxKS4KCiBOb3RlczoKIC0gQSBsb2NhdGlvbiBtYXkgcmVmZXIgdG8gYSByZXBlYXRlZCBmaWVsZCBpdHNlbGYgKGkuZS4gbm90IHRvIGFueQogICBwYXJ0aWN1bGFyIGluZGV4IHdpdGhpbiBpdCkuICBUaGlzIGlzIHVzZWQgd2hlbmV2ZXIgYSBzZXQgb2YgZWxlbWVudHMgYXJlCiAgIGxvZ2ljYWxseSBlbmNsb3NlZCBpbiBhIHNpbmdsZSBjb2RlIHNlZ21lbnQuICBGb3IgZXhhbXBsZSwgYW4gZW50aXJlCiAgIGV4dGVuZCBibG9jayAocG9zc2libHkgY29udGFpbmluZyBtdWx0aXBsZSBleHRlbnNpb24gZGVmaW5pdGlvbnMpIHdpbGwKICAgaGF2ZSBhbiBvdXRlciBsb2NhdGlvbiB3aG9zZSBwYXRoIHJlZmVycyB0byB0aGUgImV4dGVuc2lvbnMiIHJlcGVhdGVkCiAgIGZpZWxkIHdpdGhvdXQgYW4gaW5kZXguCiAtIE11bHRpcGxlIGxvY2F0aW9ucyBtYXkgaGF2ZSB0aGUgc2FtZSBwYXRoLiAgVGhpcyBoYXBwZW5zIHdoZW4gYSBzaW5nbGUKICAgbG9naWNhbCBkZWNsYXJhdGlvbiBpcyBzcHJlYWQgb3V0IGFjcm9zcyBtdWx0aXBsZSBwbGFjZXMuICBUaGUgbW9zdAogICBvYnZpb3VzIGV4YW1wbGUgaXMgdGhlICJleHRlbmQiIGJsb2NrIGFnYWluIC0tIHRoZXJlIG1heSBiZSBtdWx0aXBsZQogICBleHRlbmQgYmxvY2tzIGluIHRoZSBzYW1lIHNjb3BlLCBlYWNoIG9mIHdoaWNoIHdpbGwgaGF2ZSB0aGUgc2FtZSBwYXRoLgogLSBBIGxvY2F0aW9uJ3Mgc3BhbiBpcyBub3QgYWx3YXlzIGEgc3Vic2V0IG9mIGl0cyBwYXJlbnQncyBzcGFuLiAgRm9yCiAgIGV4YW1wbGUsIHRoZSAiZXh0ZW5kZWUiIG9mIGFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbiBhcHBlYXJzIGF0IHRoZQogICBiZWdpbm5pbmcgb2YgdGhlICJleHRlbmQiIGJsb2NrIGFuZCBpcyBzaGFyZWQgYnkgYWxsIGV4dGVuc2lvbnMgd2l0aGluCiAgIHRoZSBibG9jay4KIC0gSnVzdCBiZWNhdXNlIGEgbG9jYXRpb24ncyBzcGFuIGlzIGEgc3Vic2V0IG9mIHNvbWUgb3RoZXIgbG9jYXRpb24ncyBzcGFuCiAgIGRvZXMgbm90IG1lYW4gdGhhdCBpdCBpcyBhIGRlc2NlbmRlbnQuICBGb3IgZXhhbXBsZSwgYSAiZ3JvdXAiIGRlZmluZXMKICAgYm90aCBhIHR5cGUgYW5kIGEgZmllbGQgaW4gYSBzaW5nbGUgZGVjbGFyYXRpb24uICBUaHVzLCB0aGUgbG9jYXRpb25zCiAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgYW5kIGZpZWxkIGFuZCB0aGVpciBjb21wb25lbnRzIHdpbGwgb3ZlcmxhcC4KIC0gQ29kZSB3aGljaCB0cmllcyB0byBpbnRlcnByZXQgbG9jYXRpb25zIHNob3VsZCBwcm9iYWJseSBiZSBkZXNpZ25lZCB0bwogICBpZ25vcmUgdGhvc2UgdGhhdCBpdCBkb2Vzbid0IHVuZGVyc3RhbmQsIGFzIG1vcmUgdHlwZXMgb2YgbG9jYXRpb25zIGNvdWxkCiAgIGJlIHJlY29yZGVkIGluIHRoZSBmdXR1cmUuCgoNCgUEEwIABBIE+AUCCgoNCgUEEwIABhIE+AULEwoNCgUEEwIAARIE+AUUHAoNCgUEEwIAAxIE+AUfIAoOCgQEEwMAEgb5BQLMBgMKDQoFBBMDAAESBPkFChIKgwcKBgQTAwACABIEkQYEKhryBiBJZGVudGlmaWVzIHdoaWNoIHBhcnQgb2YgdGhlIEZpbGVEZXNjcmlwdG9yUHJvdG8gd2FzIGRlZmluZWQgYXQgdGhpcwogbG9jYXRpb24uCgogRWFjaCBlbGVtZW50IGlzIGEgZmllbGQgbnVtYmVyIG9yIGFuIGluZGV4LiAgVGhleSBmb3JtIGEgcGF0aCBmcm9tCiB0aGUgcm9vdCBGaWxlRGVzY3JpcHRvclByb3RvIHRvIHRoZSBwbGFjZSB3aGVyZSB0aGUgZGVmaW5pdGlvbi4gIEZvcgogZXhhbXBsZSwgdGhpcyBwYXRoOgogICBbIDQsIDMsIDIsIDcsIDEgXQogcmVmZXJzIHRvOgogICBmaWxlLm1lc3NhZ2VfdHlwZSgzKSAgLy8gNCwgMwogICAgICAgLmZpZWxkKDcpICAgICAgICAgLy8gMiwgNwogICAgICAgLm5hbWUoKSAgICAgICAgICAgLy8gMQogVGhpcyBpcyBiZWNhdXNlIEZpbGVEZXNjcmlwdG9yUHJvdG8ubWVzc2FnZV90eXBlIGhhcyBmaWVsZCBudW1iZXIgNDoKICAgcmVwZWF0ZWQgRGVzY3JpcHRvclByb3RvIG1lc3NhZ2VfdHlwZSA9IDQ7CiBhbmQgRGVzY3JpcHRvclByb3RvLmZpZWxkIGhhcyBmaWVsZCBudW1iZXIgMjoKICAgcmVwZWF0ZWQgRmllbGREZXNjcmlwdG9yUHJvdG8gZmllbGQgPSAyOwogYW5kIEZpZWxkRGVzY3JpcHRvclByb3RvLm5hbWUgaGFzIGZpZWxkIG51bWJlciAxOgogICBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7CgogVGh1cywgdGhlIGFib3ZlIHBhdGggZ2l2ZXMgdGhlIGxvY2F0aW9uIG9mIGEgZmllbGQgbmFtZS4gIElmIHdlIHJlbW92ZWQKIHRoZSBsYXN0IGVsZW1lbnQ6CiAgIFsgNCwgMywgMiwgNyBdCiB0aGlzIHBhdGggcmVmZXJzIHRvIHRoZSB3aG9sZSBmaWVsZCBkZWNsYXJhdGlvbiAoZnJvbSB0aGUgYmVnaW5uaW5nCiBvZiB0aGUgbGFiZWwgdG8gdGhlIHRlcm1pbmF0aW5nIHNlbWljb2xvbikuCgoPCgcEEwMAAgAEEgSRBgQMCg8KBwQTAwACAAUSBJEGDRIKDwoHBBMDAAIAARIEkQYTFwoPCgcEEwMAAgADEgSRBhobCg8KBwQTAwACAAgSBJEGHCkKEgoKBBMDAAIACOcHABIEkQYdKAoTCgsEEwMAAgAI5wcAAhIEkQYdIwoUCgwEEwMAAgAI5wcAAgASBJEGHSMKFQoNBBMDAAIACOcHAAIAARIEkQYdIwoTCgsEEwMAAgAI5wcAAxIEkQYkKArSAgoGBBMDAAIBEgSYBgQqGsECIEFsd2F5cyBoYXMgZXhhY3RseSB0aHJlZSBvciBmb3VyIGVsZW1lbnRzOiBzdGFydCBsaW5lLCBzdGFydCBjb2x1bW4sCiBlbmQgbGluZSAob3B0aW9uYWwsIG90aGVyd2lzZSBhc3N1bWVkIHNhbWUgYXMgc3RhcnQgbGluZSksIGVuZCBjb2x1bW4uCiBUaGVzZSBhcmUgcGFja2VkIGludG8gYSBzaW5nbGUgZmllbGQgZm9yIGVmZmljaWVuY3kuICBOb3RlIHRoYXQgbGluZQogYW5kIGNvbHVtbiBudW1iZXJzIGFyZSB6ZXJvLWJhc2VkIC0tIHR5cGljYWxseSB5b3Ugd2lsbCB3YW50IHRvIGFkZAogMSB0byBlYWNoIGJlZm9yZSBkaXNwbGF5aW5nIHRvIGEgdXNlci4KCg8KBwQTAwACAQQSBJgGBAwKDwoHBBMDAAIBBRIEmAYNEgoPCgcEEwMAAgEBEgSYBhMXCg8KBwQTAwACAQMSBJgGGhsKDwoHBBMDAAIBCBIEmAYcKQoSCgoEEwMAAgEI5wcAEgSYBh0oChMKCwQTAwACAQjnBwACEgSYBh0jChQKDAQTAwACAQjnBwACABIEmAYdIwoVCg0EEwMAAgEI5wcAAgABEgSYBh0jChMKCwQTAwACAQjnBwADEgSYBiQoCqUMCgYEEwMAAgISBMkGBCkalAwgSWYgdGhpcyBTb3VyY2VDb2RlSW5mbyByZXByZXNlbnRzIGEgY29tcGxldGUgZGVjbGFyYXRpb24sIHRoZXNlIGFyZSBhbnkKIGNvbW1lbnRzIGFwcGVhcmluZyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiB3aGljaCBhcHBlYXIgdG8gYmUKIGF0dGFjaGVkIHRvIHRoZSBkZWNsYXJhdGlvbi4KCiBBIHNlcmllcyBvZiBsaW5lIGNvbW1lbnRzIGFwcGVhcmluZyBvbiBjb25zZWN1dGl2ZSBsaW5lcywgd2l0aCBubyBvdGhlcgogdG9rZW5zIGFwcGVhcmluZyBvbiB0aG9zZSBsaW5lcywgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlIGNvbW1lbnQuCgogbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cyB3aWxsIGtlZXAgcGFyYWdyYXBocyBvZiBjb21tZW50cyB0aGF0IGFwcGVhcgogYmVmb3JlIChidXQgbm90IGNvbm5lY3RlZCB0bykgdGhlIGN1cnJlbnQgZWxlbWVudC4gRWFjaCBwYXJhZ3JhcGgsCiBzZXBhcmF0ZWQgYnkgZW1wdHkgbGluZXMsIHdpbGwgYmUgb25lIGNvbW1lbnQgZWxlbWVudCBpbiB0aGUgcmVwZWF0ZWQKIGZpZWxkLgoKIE9ubHkgdGhlIGNvbW1lbnQgY29udGVudCBpcyBwcm92aWRlZDsgY29tbWVudCBtYXJrZXJzIChlLmcuIC8vKSBhcmUKIHN0cmlwcGVkIG91dC4gIEZvciBibG9jayBjb21tZW50cywgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBhbiBhc3Rlcmlzawogd2lsbCBiZSBzdHJpcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIG90aGVyIHRoYW4gdGhlIGZpcnN0LgogTmV3bGluZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuCgogRXhhbXBsZXM6CgogICBvcHRpb25hbCBpbnQzMiBmb28gPSAxOyAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBmb28uCiAgIC8vIENvbW1lbnQgYXR0YWNoZWQgdG8gYmFyLgogICBvcHRpb25hbCBpbnQzMiBiYXIgPSAyOwoKICAgb3B0aW9uYWwgc3RyaW5nIGJheiA9IDM7CiAgIC8vIENvbW1lbnQgYXR0YWNoZWQgdG8gYmF6LgogICAvLyBBbm90aGVyIGxpbmUgYXR0YWNoZWQgdG8gYmF6LgoKICAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBxdXguCiAgIC8vCiAgIC8vIEFub3RoZXIgbGluZSBhdHRhY2hlZCB0byBxdXguCiAgIG9wdGlvbmFsIGRvdWJsZSBxdXggPSA0OwoKICAgLy8gRGV0YWNoZWQgY29tbWVudCBmb3IgY29yZ2UuIFRoaXMgaXMgbm90IGxlYWRpbmcgb3IgdHJhaWxpbmcgY29tbWVudHMKICAgLy8gdG8gcXV4IG9yIGNvcmdlIGJlY2F1c2UgdGhlcmUgYXJlIGJsYW5rIGxpbmVzIHNlcGFyYXRpbmcgaXQgZnJvbQogICAvLyBib3RoLgoKICAgLy8gRGV0YWNoZWQgY29tbWVudCBmb3IgY29yZ2UgcGFyYWdyYXBoIDIuCgogICBvcHRpb25hbCBzdHJpbmcgY29yZ2UgPSA1OwogICAvKiBCbG9jayBjb21tZW50IGF0dGFjaGVkCiAgICAqIHRvIGNvcmdlLiAgTGVhZGluZyBhc3Rlcmlza3MKICAgICogd2lsbCBiZSByZW1vdmVkLiAqLwogICAvKiBCbG9jayBjb21tZW50IGF0dGFjaGVkIHRvCiAgICAqIGdyYXVsdC4gKi8KICAgb3B0aW9uYWwgaW50MzIgZ3JhdWx0ID0gNjsKCiAgIC8vIGlnbm9yZWQgZGV0YWNoZWQgY29tbWVudHMuCgoPCgcEEwMAAgIEEgTJBgQMCg8KBwQTAwACAgUSBMkGDRMKDwoHBBMDAAICARIEyQYUJAoPCgcEEwMAAgIDEgTJBicoCg4KBgQTAwACAxIEygYEKgoPCgcEEwMAAgMEEgTKBgQMCg8KBwQTAwACAwUSBMoGDRMKDwoHBBMDAAIDARIEygYUJQoPCgcEEwMAAgMDEgTKBigpCg4KBgQTAwACBBIEywYEMgoPCgcEEwMAAgQEEgTLBgQMCg8KBwQTAwACBAUSBMsGDRMKDwoHBBMDAAIEARIEywYULQoPCgcEEwMAAgQDEgTLBjAxCu4BCgIEFBIG0gYA5wYBGt8BIERlc2NyaWJlcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZ2VuZXJhdGVkIGNvZGUgYW5kIGl0cyBvcmlnaW5hbCBzb3VyY2UKIGZpbGUuIEEgR2VuZXJhdGVkQ29kZUluZm8gbWVzc2FnZSBpcyBhc3NvY2lhdGVkIHdpdGggb25seSBvbmUgZ2VuZXJhdGVkCiBzb3VyY2UgZmlsZSwgYnV0IG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gZGlmZmVyZW50IHNvdXJjZSAucHJvdG8gZmlsZXMuCgoLCgMEFAESBNIGCBkKeAoEBBQCABIE1QYCJRpqIEFuIEFubm90YXRpb24gY29ubmVjdHMgc29tZSBzcGFuIG9mIHRleHQgaW4gZ2VuZXJhdGVkIGNvZGUgdG8gYW4gZWxlbWVudAogb2YgaXRzIGdlbmVyYXRpbmcgLnByb3RvIGZpbGUuCgoNCgUEFAIABBIE1QYCCgoNCgUEFAIABhIE1QYLFQoNCgUEFAIAARIE1QYWIAoNCgUEFAIAAxIE1QYjJAoOCgQEFAMAEgbWBgLmBgMKDQoFBBQDAAESBNYGChQKjwEKBgQUAwACABIE2QYEKhp/IElkZW50aWZpZXMgdGhlIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSAucHJvdG8gZmlsZS4gVGhpcyBmaWVsZAogaXMgZm9ybWF0dGVkIHRoZSBzYW1lIGFzIFNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnBhdGguCgoPCgcEFAMAAgAEEgTZBgQMCg8KBwQUAwACAAUSBNkGDRIKDwoHBBQDAAIAARIE2QYTFwoPCgcEFAMAAgADEgTZBhobCg8KBwQUAwACAAgSBNkGHCkKEgoKBBQDAAIACOcHABIE2QYdKAoTCgsEFAMAAgAI5wcAAhIE2QYdIwoUCgwEFAMAAgAI5wcAAgASBNkGHSMKFQoNBBQDAAIACOcHAAIAARIE2QYdIwoTCgsEFAMAAgAI5wcAAxIE2QYkKApPCgYEFAMAAgESBNwGBCQaPyBJZGVudGlmaWVzIHRoZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSAucHJvdG8uCgoPCgcEFAMAAgEEEgTcBgQMCg8KBwQUAwACAQUSBNwGDRMKDwoHBBQDAAIBARIE3AYUHwoPCgcEFAMAAgEDEgTcBiIjCncKBgQUAwACAhIE4AYEHRpnIElkZW50aWZpZXMgdGhlIHN0YXJ0aW5nIG9mZnNldCBpbiBieXRlcyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUKIHRoYXQgcmVsYXRlcyB0byB0aGUgaWRlbnRpZmllZCBvYmplY3QuCgoPCgcEFAMAAgIEEgTgBgQMCg8KBwQUAwACAgUSBOAGDRIKDwoHBBQDAAICARIE4AYTGAoPCgcEFAMAAgIDEgTgBhscCtsBCgYEFAMAAgMSBOUGBBsaygEgSWRlbnRpZmllcyB0aGUgZW5kaW5nIG9mZnNldCBpbiBieXRlcyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgdGhhdAogcmVsYXRlcyB0byB0aGUgaWRlbnRpZmllZCBvZmZzZXQuIFRoZSBlbmQgb2Zmc2V0IHNob3VsZCBiZSBvbmUgcGFzdAogdGhlIGxhc3QgcmVsZXZhbnQgYnl0ZSAoc28gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCA9IGVuZCAtIGJlZ2luKS4KCg8KBwQUAwACAwQSBOUGBAwKDwoHBBQDAAIDBRIE5QYNEgoPCgcEFAMAAgMBEgTlBhMWCg8KBwQUAwACAwMSBOUGGRoKqV0KFGdvZ29wcm90by9nb2dvLnByb3RvEglnb2dvcHJvdG8aIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvOk4KE2dvcHJvdG9fZW51bV9wcmVmaXgSHC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMYseQDIAEoCFIRZ29wcm90b0VudW1QcmVmaXg6UgoVZ29wcm90b19lbnVtX3N0cmluZ2VyEhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zGMXkAyABKAhSE2dvcHJvdG9FbnVtU3RyaW5nZXI6QwoNZW51bV9zdHJpbmdlchIcLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucxjG5AMgASgIUgxlbnVtU3RyaW5nZXI6RwoPZW51bV9jdXN0b21uYW1lEhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zGMfkAyABKAlSDmVudW1DdXN0b21uYW1lOjoKCGVudW1kZWNsEhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zGMjkAyABKAhSCGVudW1kZWNsOlYKFGVudW12YWx1ZV9jdXN0b21uYW1lEiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMY0YMEIAEoCVITZW51bXZhbHVlQ3VzdG9tbmFtZTpOChNnb3Byb3RvX2dldHRlcnNfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGJnsAyABKAhSEWdvcHJvdG9HZXR0ZXJzQWxsOlUKF2dvcHJvdG9fZW51bV9wcmVmaXhfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGJrsAyABKAhSFGdvcHJvdG9FbnVtUHJlZml4QWxsOlAKFGdvcHJvdG9fc3RyaW5nZXJfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGJvsAyABKAhSEmdvcHJvdG9TdHJpbmdlckFsbDpKChF2ZXJib3NlX2VxdWFsX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxic7AMgASgIUg92ZXJib3NlRXF1YWxBbGw6OQoIZmFjZV9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYnewDIAEoCFIHZmFjZUFsbDpBCgxnb3N0cmluZ19hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYnuwDIAEoCFILZ29zdHJpbmdBbGw6QQoMcG9wdWxhdGVfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGJ/sAyABKAhSC3BvcHVsYXRlQWxsOkEKDHN0cmluZ2VyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxig7AMgASgIUgtzdHJpbmdlckFsbDo/Cgtvbmx5b25lX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxih7AMgASgIUgpvbmx5b25lQWxsOjsKCWVxdWFsX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxil7AMgASgIUghlcXVhbEFsbDpHCg9kZXNjcmlwdGlvbl9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYpuwDIAEoCFIOZGVzY3JpcHRpb25BbGw6PwoLdGVzdGdlbl9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYp+wDIAEoCFIKdGVzdGdlbkFsbDpBCgxiZW5jaGdlbl9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYqOwDIAEoCFILYmVuY2hnZW5BbGw6QwoNbWFyc2hhbGVyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxip7AMgASgIUgxtYXJzaGFsZXJBbGw6RwoPdW5tYXJzaGFsZXJfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGKrsAyABKAhSDnVubWFyc2hhbGVyQWxsOlAKFHN0YWJsZV9tYXJzaGFsZXJfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGKvsAyABKAhSEnN0YWJsZU1hcnNoYWxlckFsbDo7CglzaXplcl9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYrOwDIAEoCFIIc2l6ZXJBbGw6WQoZZ29wcm90b19lbnVtX3N0cmluZ2VyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxit7AMgASgIUhZnb3Byb3RvRW51bVN0cmluZ2VyQWxsOkoKEWVudW1fc3RyaW5nZXJfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGK7sAyABKAhSD2VudW1TdHJpbmdlckFsbDpQChR1bnNhZmVfbWFyc2hhbGVyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxiv7AMgASgIUhJ1bnNhZmVNYXJzaGFsZXJBbGw6VAoWdW5zYWZlX3VubWFyc2hhbGVyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxiw7AMgASgIUhR1bnNhZmVVbm1hcnNoYWxlckFsbDpbChpnb3Byb3RvX2V4dGVuc2lvbnNfbWFwX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxix7AMgASgIUhdnb3Byb3RvRXh0ZW5zaW9uc01hcEFsbDpYChhnb3Byb3RvX3VucmVjb2duaXplZF9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYsuwDIAEoCFIWZ29wcm90b1VucmVjb2duaXplZEFsbDpJChBnb2dvcHJvdG9faW1wb3J0EhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGLPsAyABKAhSD2dvZ29wcm90b0ltcG9ydDpFCg5wcm90b3NpemVyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxi07AMgASgIUg1wcm90b3NpemVyQWxsOj8KC2NvbXBhcmVfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGLXsAyABKAhSCmNvbXBhcmVBbGw6QQoMdHlwZWRlY2xfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGLbsAyABKAhSC3R5cGVkZWNsQWxsOkEKDGVudW1kZWNsX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxi37AMgASgIUgtlbnVtZGVjbEFsbDpRChRnb3Byb3RvX3JlZ2lzdHJhdGlvbhIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxi47AMgASgIUhNnb3Byb3RvUmVnaXN0cmF0aW9uOkcKD21lc3NhZ2VuYW1lX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxi57AMgASgIUg5tZXNzYWdlbmFtZUFsbDpKCg9nb3Byb3RvX2dldHRlcnMSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYgfQDIAEoCFIOZ29wcm90b0dldHRlcnM6TAoQZ29wcm90b19zdHJpbmdlchIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiD9AMgASgIUg9nb3Byb3RvU3RyaW5nZXI6RgoNdmVyYm9zZV9lcXVhbBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiE9AMgASgIUgx2ZXJib3NlRXF1YWw6NQoEZmFjZRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiF9AMgASgIUgRmYWNlOj0KCGdvc3RyaW5nEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGIb0AyABKAhSCGdvc3RyaW5nOj0KCHBvcHVsYXRlEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGIf0AyABKAhSCHBvcHVsYXRlOj0KCHN0cmluZ2VyEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGMCLBCABKAhSCHN0cmluZ2VyOjsKB29ubHlvbmUSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYifQDIAEoCFIHb25seW9uZTo3CgVlcXVhbBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiN9AMgASgIUgVlcXVhbDpDCgtkZXNjcmlwdGlvbhIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiO9AMgASgIUgtkZXNjcmlwdGlvbjo7Cgd0ZXN0Z2VuEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGI/0AyABKAhSB3Rlc3RnZW46PQoIYmVuY2hnZW4SHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYkPQDIAEoCFIIYmVuY2hnZW46PwoJbWFyc2hhbGVyEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJH0AyABKAhSCW1hcnNoYWxlcjpDCgt1bm1hcnNoYWxlchIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiS9AMgASgIUgt1bm1hcnNoYWxlcjpMChBzdGFibGVfbWFyc2hhbGVyEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJP0AyABKAhSD3N0YWJsZU1hcnNoYWxlcjo3CgVzaXplchIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiU9AMgASgIUgVzaXplcjpMChB1bnNhZmVfbWFyc2hhbGVyEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJf0AyABKAhSD3Vuc2FmZU1hcnNoYWxlcjpQChJ1bnNhZmVfdW5tYXJzaGFsZXISHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYmPQDIAEoCFIRdW5zYWZlVW5tYXJzaGFsZXI6VwoWZ29wcm90b19leHRlbnNpb25zX21hcBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiZ9AMgASgIUhRnb3Byb3RvRXh0ZW5zaW9uc01hcDpUChRnb3Byb3RvX3VucmVjb2duaXplZBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxia9AMgASgIUhNnb3Byb3RvVW5yZWNvZ25pemVkOkEKCnByb3Rvc2l6ZXISHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYnPQDIAEoCFIKcHJvdG9zaXplcjo7Cgdjb21wYXJlEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJ30AyABKAhSB2NvbXBhcmU6PQoIdHlwZWRlY2wSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYnvQDIAEoCFIIdHlwZWRlY2w6QwoLbWVzc2FnZW5hbWUSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYofQDIAEoCFILbWVzc2FnZW5hbWU6OwoIbnVsbGFibGUSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGOn7AyABKAhSCG51bGxhYmxlOjUKBWVtYmVkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxjq+wMgASgIUgVlbWJlZDo/CgpjdXN0b210eXBlEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxjr+wMgASgJUgpjdXN0b210eXBlOj8KCmN1c3RvbW5hbWUSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGOz7AyABKAlSCmN1c3RvbW5hbWU6OQoHanNvbnRhZxIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMY7fsDIAEoCVIHanNvbnRhZzo7Cghtb3JldGFncxIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMY7vsDIAEoCVIIbW9yZXRhZ3M6OwoIY2FzdHR5cGUSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGO/7AyABKAlSCGNhc3R0eXBlOjkKB2Nhc3RrZXkSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGPD7AyABKAlSB2Nhc3RrZXk6PQoJY2FzdHZhbHVlEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxjx+wMgASgJUgljYXN0dmFsdWU6OQoHc3RkdGltZRIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMY8vsDIAEoCFIHc3RkdGltZTpBCgtzdGRkdXJhdGlvbhIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMY8/sDIAEoCFILc3RkZHVyYXRpb25CRQoTY29tLmdvb2dsZS5wcm90b2J1ZkIKR29Hb1Byb3Rvc1oiZ2l0aHViLmNvbS9nb2dvL3Byb3RvYnVmL2dvZ29wcm90b0qaNQoHEgUcAIcBAQr8CgoBDBIDHAASMvEKIFByb3RvY29sIEJ1ZmZlcnMgZm9yIEdvIHdpdGggR2FkZ2V0cwoKIENvcHlyaWdodCAoYykgMjAxMywgVGhlIEdvR28gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIGh0dHA6Ly9naXRodWIuY29tL2dvZ28vcHJvdG9idWYKCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgoKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCgoICgECEgMdCBEKCQoCAwASAx8HKQoICgEIEgMhACwKCwoECOcHABIDIQAsCgwKBQjnBwACEgMhBxMKDQoGCOcHAAIAEgMhBxMKDgoHCOcHAAIAARIDIQcTCgwKBQjnBwAHEgMhFisKCAoBCBIDIgArCgsKBAjnBwESAyIAKwoMCgUI5wcBAhIDIgcbCg0KBgjnBwECABIDIgcbCg4KBwjnBwECAAESAyIHGwoMCgUI5wcBBxIDIh4qCggKAQgSAyMAOQoLCgQI5wcCEgMjADkKDAoFCOcHAgISAyMHEQoNCgYI5wcCAgASAyMHEQoOCgcI5wcCAgABEgMjBxEKDAoFCOcHAgcSAyMUOAoJCgEHEgQlACsBCgkKAgcAEgMmCDIKCgoDBwACEgMlByIKCgoDBwAEEgMmCBAKCgoDBwAFEgMmERUKCgoDBwABEgMmFikKCgoDBwADEgMmLDEKCQoCBwESAycINAoKCgMHAQISAyUHIgoKCgMHAQQSAycIEAoKCgMHAQUSAycRFQoKCgMHAQESAycWKwoKCgMHAQMSAycuMwoJCgIHAhIDKAgsCgoKAwcCAhIDJQciCgoKAwcCBBIDKAgQCgoKAwcCBRIDKBEVCgoKAwcCARIDKBYjCgoKAwcCAxIDKCYrCgkKAgcDEgMpCDAKCgoDBwMCEgMlByIKCgoDBwMEEgMpCBAKCgoDBwMFEgMpERcKCgoDBwMBEgMpGCcKCgoDBwMDEgMpKi8KCQoCBwQSAyoIJwoKCgMHBAISAyUHIgoKCgMHBAQSAyoIEAoKCgMHBAUSAyoRFQoKCgMHBAESAyoWHgoKCgMHBAMSAyohJgoJCgEHEgQtAC8BCgkKAgcFEgMuCDUKCgoDBwUCEgMtBycKCgoDBwUEEgMuCBAKCgoDBwUFEgMuERcKCgoDBwUBEgMuGCwKCgoDBwUDEgMuLzQKCQoBBxIEMQBWAQoJCgIHBhIDMggyCgoKAwcGAhIDMQciCgoKAwcGBBIDMggQCgoKAwcGBRIDMhEVCgoKAwcGARIDMhYpCgoKAwcGAxIDMiwxCgkKAgcHEgMzCDYKCgoDBwcCEgMxByIKCgoDBwcEEgMzCBAKCgoDBwcFEgMzERUKCgoDBwcBEgMzFi0KCgoDBwcDEgMzMDUKCQoCBwgSAzQIMwoKCgMHCAISAzEHIgoKCgMHCAQSAzQIEAoKCgMHCAUSAzQRFQoKCgMHCAESAzQWKgoKCgMHCAMSAzQtMgoJCgIHCRIDNQgwCgoKAwcJAhIDMQciCgoKAwcJBBIDNQgQCgoKAwcJBRIDNREVCgoKAwcJARIDNRYnCgoKAwcJAxIDNSovCgkKAgcKEgM2CCcKCgoDBwoCEgMxByIKCgoDBwoEEgM2CBAKCgoDBwoFEgM2ERUKCgoDBwoBEgM2Fh4KCgoDBwoDEgM2ISYKCQoCBwsSAzcIKwoKCgMHCwISAzEHIgoKCgMHCwQSAzcIEAoKCgMHCwUSAzcRFQoKCgMHCwESAzcWIgoKCgMHCwMSAzclKgoJCgIHDBIDOAgrCgoKAwcMAhIDMQciCgoKAwcMBBIDOAgQCgoKAwcMBRIDOBEVCgoKAwcMARIDOBYiCgoKAwcMAxIDOCUqCgkKAgcNEgM5CCsKCgoDBw0CEgMxByIKCgoDBw0EEgM5CBAKCgoDBw0FEgM5ERUKCgoDBw0BEgM5FiIKCgoDBw0DEgM5JSoKCQoCBw4SAzoIKgoKCgMHDgISAzEHIgoKCgMHDgQSAzoIEAoKCgMHDgUSAzoRFQoKCgMHDgESAzoWIQoKCgMHDgMSAzokKQoJCgIHDxIDPAgoCgoKAwcPAhIDMQciCgoKAwcPBBIDPAgQCgoKAwcPBRIDPBEVCgoKAwcPARIDPBYfCgoKAwcPAxIDPCInCgkKAgcQEgM9CC4KCgoDBxACEgMxByIKCgoDBxAEEgM9CBAKCgoDBxAFEgM9ERUKCgoDBxABEgM9FiUKCgoDBxADEgM9KC0KCQoCBxESAz4IKgoKCgMHEQISAzEHIgoKCgMHEQQSAz4IEAoKCgMHEQUSAz4RFQoKCgMHEQESAz4WIQoKCgMHEQMSAz4kKQoJCgIHEhIDPwgrCgoKAwcSAhIDMQciCgoKAwcSBBIDPwgQCgoKAwcSBRIDPxEVCgoKAwcSARIDPxYiCgoKAwcSAxIDPyUqCgkKAgcTEgNACCwKCgoDBxMCEgMxByIKCgoDBxMEEgNACBAKCgoDBxMFEgNAERUKCgoDBxMBEgNAFiMKCgoDBxMDEgNAJisKCQoCBxQSA0EILgoKCgMHFAISAzEHIgoKCgMHFAQSA0EIEAoKCgMHFAUSA0ERFQoKCgMHFAESA0EWJQoKCgMHFAMSA0EoLQoJCgIHFRIDQggzCgoKAwcVAhIDMQciCgoKAwcVBBIDQggQCgoKAwcVBRIDQhEVCgoKAwcVARIDQhYqCgoKAwcVAxIDQi0yCgkKAgcWEgNECCgKCgoDBxYCEgMxByIKCgoDBxYEEgNECBAKCgoDBxYFEgNEERUKCgoDBxYBEgNEFh8KCgoDBxYDEgNEIicKCQoCBxcSA0YIOAoKCgMHFwISAzEHIgoKCgMHFwQSA0YIEAoKCgMHFwUSA0YRFQoKCgMHFwESA0YWLwoKCgMHFwMSA0YyNwoJCgIHGBIDRwgwCgoKAwcYAhIDMQciCgoKAwcYBBIDRwgQCgoKAwcYBRIDRxEVCgoKAwcYARIDRxYnCgoKAwcYAxIDRyovCgkKAgcZEgNJCDMKCgoDBxkCEgMxByIKCgoDBxkEEgNJCBAKCgoDBxkFEgNJERUKCgoDBxkBEgNJFioKCgoDBxkDEgNJLTIKCQoCBxoSA0oINQoKCgMHGgISAzEHIgoKCgMHGgQSA0oIEAoKCgMHGgUSA0oRFQoKCgMHGgESA0oWLAoKCgMHGgMSA0ovNAoJCgIHGxIDTAg5CgoKAwcbAhIDMQciCgoKAwcbBBIDTAgQCgoKAwcbBRIDTBEVCgoKAwcbARIDTBYwCgoKAwcbAxIDTDM4CgkKAgccEgNNCDcKCgoDBxwCEgMxByIKCgoDBxwEEgNNCBAKCgoDBxwFEgNNERUKCgoDBxwBEgNNFi4KCgoDBxwDEgNNMTYKCQoCBx0SA04ILwoKCgMHHQISAzEHIgoKCgMHHQQSA04IEAoKCgMHHQUSA04RFQoKCgMHHQESA04WJgoKCgMHHQMSA04pLgoJCgIHHhIDTwgtCgoKAwceAhIDMQciCgoKAwceBBIDTwgQCgoKAwceBRIDTxEVCgoKAwceARIDTxYkCgoKAwceAxIDTycsCgkKAgcfEgNQCCoKCgoDBx8CEgMxByIKCgoDBx8EEgNQCBAKCgoDBx8FEgNQERUKCgoDBx8BEgNQFiEKCgoDBx8DEgNQJCkKCQoCByASA1EEJwoKCgMHIAISAzEHIgoKCgMHIAQSA1EEDAoKCgMHIAUSA1ENEQoKCgMHIAESA1ESHgoKCgMHIAMSA1EhJgoJCgIHIRIDUgQnCgoKAwchAhIDMQciCgoKAwchBBIDUgQMCgoKAwchBRIDUg0RCgoKAwchARIDUhIeCgoKAwchAxIDUiEmCgkKAgciEgNUCDMKCgoDByICEgMxByIKCgoDByIEEgNUCBAKCgoDByIFEgNUERUKCgoDByIBEgNUFioKCgoDByIDEgNULTIKCQoCByMSA1UILgoKCgMHIwISAzEHIgoKCgMHIwQSA1UIEAoKCgMHIwUSA1URFQoKCgMHIwESA1UWJQoKCgMHIwMSA1UoLQoJCgEHEgRYAHgBCgkKAgckEgNZCC4KCgoDByQCEgNYByUKCgoDByQEEgNZCBAKCgoDByQFEgNZERUKCgoDByQBEgNZFiUKCgoDByQDEgNZKC0KCQoCByUSA1oILwoKCgMHJQISA1gHJQoKCgMHJQQSA1oIEAoKCgMHJQUSA1oRFQoKCgMHJQESA1oWJgoKCgMHJQMSA1opLgoJCgIHJhIDWwgsCgoKAwcmAhIDWAclCgoKAwcmBBIDWwgQCgoKAwcmBRIDWxEVCgoKAwcmARIDWxYjCgoKAwcmAxIDWyYrCgkKAgcnEgNcCCMKCgoDBycCEgNYByUKCgoDBycEEgNcCBAKCgoDBycFEgNcERUKCgoDBycBEgNcFhoKCgoDBycDEgNcHSIKCQoCBygSA10IJwoKCgMHKAISA1gHJQoKCgMHKAQSA10IEAoKCgMHKAUSA10RFQoKCgMHKAESA10WHgoKCgMHKAMSA10hJgoJCgIHKRIDXggnCgoKAwcpAhIDWAclCgoKAwcpBBIDXggQCgoKAwcpBRIDXhEVCgoKAwcpARIDXhYeCgoKAwcpAxIDXiEmCgkKAgcqEgNfCCcKCgoDByoCEgNYByUKCgoDByoEEgNfCBAKCgoDByoFEgNfERUKCgoDByoBEgNfFh4KCgoDByoDEgNfISYKCQoCBysSA2AIJgoKCgMHKwISA1gHJQoKCgMHKwQSA2AIEAoKCgMHKwUSA2ARFQoKCgMHKwESA2AWHQoKCgMHKwMSA2AgJQoJCgIHLBIDYggkCgoKAwcsAhIDWAclCgoKAwcsBBIDYggQCgoKAwcsBRIDYhEVCgoKAwcsARIDYhYbCgoKAwcsAxIDYh4jCgkKAgctEgNjCCoKCgoDBy0CEgNYByUKCgoDBy0EEgNjCBAKCgoDBy0FEgNjERUKCgoDBy0BEgNjFiEKCgoDBy0DEgNjJCkKCQoCBy4SA2QIJgoKCgMHLgISA1gHJQoKCgMHLgQSA2QIEAoKCgMHLgUSA2QRFQoKCgMHLgESA2QWHQoKCgMHLgMSA2QgJQoJCgIHLxIDZQgnCgoKAwcvAhIDWAclCgoKAwcvBBIDZQgQCgoKAwcvBRIDZREVCgoKAwcvARIDZRYeCgoKAwcvAxIDZSEmCgkKAgcwEgNmCCgKCgoDBzACEgNYByUKCgoDBzAEEgNmCBAKCgoDBzAFEgNmERUKCgoDBzABEgNmFh8KCgoDBzADEgNmIicKCQoCBzESA2cIKgoKCgMHMQISA1gHJQoKCgMHMQQSA2cIEAoKCgMHMQUSA2cRFQoKCgMHMQESA2cWIQoKCgMHMQMSA2ckKQoJCgIHMhIDaAgvCgoKAwcyAhIDWAclCgoKAwcyBBIDaAgQCgoKAwcyBRIDaBEVCgoKAwcyARIDaBYmCgoKAwcyAxIDaCkuCgkKAgczEgNqCCQKCgoDBzMCEgNYByUKCgoDBzMEEgNqCBAKCgoDBzMFEgNqERUKCgoDBzMBEgNqFhsKCgoDBzMDEgNqHiMKCQoCBzQSA2wILwoKCgMHNAISA1gHJQoKCgMHNAQSA2wIEAoKCgMHNAUSA2wRFQoKCgMHNAESA2wWJgoKCgMHNAMSA2wpLgoJCgIHNRIDbQgxCgoKAwc1AhIDWAclCgoKAwc1BBIDbQgQCgoKAwc1BRIDbREVCgoKAwc1ARIDbRYoCgoKAwc1AxIDbSswCgkKAgc2EgNvCDUKCgoDBzYCEgNYByUKCgoDBzYEEgNvCBAKCgoDBzYFEgNvERUKCgoDBzYBEgNvFiwKCgoDBzYDEgNvLzQKCQoCBzcSA3AIMwoKCgMHNwISA1gHJQoKCgMHNwQSA3AIEAoKCgMHNwUSA3ARFQoKCgMHNwESA3AWKgoKCgMHNwMSA3AtMgoJCgIHOBIDcggpCgoKAwc4AhIDWAclCgoKAwc4BBIDcggQCgoKAwc4BRIDchEVCgoKAwc4ARIDchYgCgoKAwc4AxIDciMoCgkKAgc5EgNzCCYKCgoDBzkCEgNYByUKCgoDBzkEEgNzCBAKCgoDBzkFEgNzERUKCgoDBzkBEgNzFh0KCgoDBzkDEgNzICUKCQoCBzoSA3UIJwoKCgMHOgISA1gHJQoKCgMHOgQSA3UIEAoKCgMHOgUSA3URFQoKCgMHOgESA3UWHgoKCgMHOgMSA3UhJgoJCgIHOxIDdwgqCgoKAwc7AhIDWAclCgoKAwc7BBIDdwgQCgoKAwc7BRIDdxEVCgoKAwc7ARIDdxYhCgoKAwc7AxIDdyQpCgoKAQcSBXoAhwEBCgkKAgc8EgN7CCcKCgoDBzwCEgN6ByMKCgoDBzwEEgN7CBAKCgoDBzwFEgN7ERUKCgoDBzwBEgN7Fh4KCgoDBzwDEgN7ISYKCQoCBz0SA3wIJAoKCgMHPQISA3oHIwoKCgMHPQQSA3wIEAoKCgMHPQUSA3wRFQoKCgMHPQESA3wWGwoKCgMHPQMSA3weIwoJCgIHPhIDfQgrCgoKAwc+AhIDegcjCgoKAwc+BBIDfQgQCgoKAwc+BRIDfREXCgoKAwc+ARIDfRgiCgoKAwc+AxIDfSUqCgkKAgc/EgN+CCsKCgoDBz8CEgN6ByMKCgoDBz8EEgN+CBAKCgoDBz8FEgN+ERcKCgoDBz8BEgN+GCIKCgoDBz8DEgN+JSoKCQoCB0ASA38IKAoKCgMHQAISA3oHIwoKCgMHQAQSA38IEAoKCgMHQAUSA38RFwoKCgMHQAESA38YHwoKCgMHQAMSA38iJwoKCgIHQRIEgAEIKQoKCgMHQQISA3oHIwoLCgMHQQQSBIABCBAKCwoDB0EFEgSAAREXCgsKAwdBARIEgAEYIAoLCgMHQQMSBIABIygKCgoCB0ISBIEBCCkKCgoDB0ICEgN6ByMKCwoDB0IEEgSBAQgQCgsKAwdCBRIEgQERFwoLCgMHQgESBIEBGCAKCwoDB0IDEgSBASMoCgoKAgdDEgSCAQgoCgoKAwdDAhIDegcjCgsKAwdDBBIEggEIEAoLCgMHQwUSBIIBERcKCwoDB0MBEgSCARgfCgsKAwdDAxIEggEiJwoKCgIHRBIEgwEIKgoKCgMHRAISA3oHIwoLCgMHRAQSBIMBCBAKCwoDB0QFEgSDAREXCgsKAwdEARIEgwEYIQoLCgMHRAMSBIMBJCkKCgoCB0USBIUBCCYKCgoDB0UCEgN6ByMKCwoDB0UEEgSFAQgQCgsKAwdFBRIEhQERFQoLCgMHRQESBIUBFh0KCwoDB0UDEgSFASAlCgoKAgdGEgSGAQgqCgoKAwdGAhIDegcjCgsKAwdGBBIEhgEIEAoLCgMHRgUSBIYBERUKCwoDB0YBEgSGARYhCgsKAwdGAxIEhgEkKQqaKQoeZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvEg9nb29nbGUucHJvdG9idWYiOgoIRHVyYXRpb24SGAoHc2Vjb25kcxgBIAEoA1IHc2Vjb25kcxIUCgVuYW5vcxgCIAEoBVIFbmFub3NCfAoTY29tLmdvb2dsZS5wcm90b2J1ZkINRHVyYXRpb25Qcm90b1ABWipnaXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wdHlwZXMvZHVyYXRpb274AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNKpCcKBhIEHgB0AQrMDAoBDBIDHgASMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKCAoBAhIDIAgXCggKAQgSAyIAOwoLCgQI5wcAEgMiADsKDAoFCOcHAAISAyIHFwoNCgYI5wcAAgASAyIHFwoOCgcI5wcAAgABEgMiBxcKDAoFCOcHAAcSAyIaOgoICgEIEgMjAB8KCwoECOcHARIDIwAfCgwKBQjnBwECEgMjBxcKDQoGCOcHAQIAEgMjBxcKDgoHCOcHAQIAARIDIwcXCgwKBQjnBwEDEgMjGh4KCAoBCBIDJABBCgsKBAjnBwISAyQAQQoMCgUI5wcCAhIDJAcRCg0KBgjnBwICABIDJAcRCg4KBwjnBwICAAESAyQHEQoMCgUI5wcCBxIDJBRACggKAQgSAyUALAoLCgQI5wcDEgMlACwKDAoFCOcHAwISAyUHEwoNCgYI5wcDAgASAyUHEwoOCgcI5wcDAgABEgMlBxMKDAoFCOcHAwcSAyUWKwoICgEIEgMmAC4KCwoECOcHBBIDJgAuCgwKBQjnBwQCEgMmBxsKDQoGCOcHBAIAEgMmBxsKDgoHCOcHBAIAARIDJgcbCgwKBQjnBwQHEgMmHi0KCAoBCBIDJwAiCgsKBAjnBwUSAycAIgoMCgUI5wcFAhIDJwcaCg0KBgjnBwUCABIDJwcaCg4KBwjnBwUCAAESAycHGgoMCgUI5wcFAxIDJx0hCggKAQgSAygAIQoLCgQI5wcGEgMoACEKDAoFCOcHBgISAygHGAoNCgYI5wcGAgASAygHGAoOCgcI5wcGAgABEgMoBxgKDAoFCOcHBgcSAygbIAqfEAoCBAASBGYAdAEakhAgQSBEdXJhdGlvbiByZXByZXNlbnRzIGEgc2lnbmVkLCBmaXhlZC1sZW5ndGggc3BhbiBvZiB0aW1lIHJlcHJlc2VudGVkCiBhcyBhIGNvdW50IG9mIHNlY29uZHMgYW5kIGZyYWN0aW9ucyBvZiBzZWNvbmRzIGF0IG5hbm9zZWNvbmQKIHJlc29sdXRpb24uIEl0IGlzIGluZGVwZW5kZW50IG9mIGFueSBjYWxlbmRhciBhbmQgY29uY2VwdHMgbGlrZSAiZGF5Igogb3IgIm1vbnRoIi4gSXQgaXMgcmVsYXRlZCB0byBUaW1lc3RhbXAgaW4gdGhhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCiB0d28gVGltZXN0YW1wIHZhbHVlcyBpcyBhIER1cmF0aW9uIGFuZCBpdCBjYW4gYmUgYWRkZWQgb3Igc3VidHJhY3RlZAogZnJvbSBhIFRpbWVzdGFtcC4gUmFuZ2UgaXMgYXBwcm94aW1hdGVseSArLTEwLDAwMCB5ZWFycy4KCiAjIEV4YW1wbGVzCgogRXhhbXBsZSAxOiBDb21wdXRlIER1cmF0aW9uIGZyb20gdHdvIFRpbWVzdGFtcHMgaW4gcHNldWRvIGNvZGUuCgogICAgIFRpbWVzdGFtcCBzdGFydCA9IC4uLjsKICAgICBUaW1lc3RhbXAgZW5kID0gLi4uOwogICAgIER1cmF0aW9uIGR1cmF0aW9uID0gLi4uOwoKICAgICBkdXJhdGlvbi5zZWNvbmRzID0gZW5kLnNlY29uZHMgLSBzdGFydC5zZWNvbmRzOwogICAgIGR1cmF0aW9uLm5hbm9zID0gZW5kLm5hbm9zIC0gc3RhcnQubmFub3M7CgogICAgIGlmIChkdXJhdGlvbi5zZWNvbmRzIDwgMCAmJiBkdXJhdGlvbi5uYW5vcyA+IDApIHsKICAgICAgIGR1cmF0aW9uLnNlY29uZHMgKz0gMTsKICAgICAgIGR1cmF0aW9uLm5hbm9zIC09IDEwMDAwMDAwMDA7CiAgICAgfSBlbHNlIGlmIChkdXJhdGlvbnMuc2Vjb25kcyA+IDAgJiYgZHVyYXRpb24ubmFub3MgPCAwKSB7CiAgICAgICBkdXJhdGlvbi5zZWNvbmRzIC09IDE7CiAgICAgICBkdXJhdGlvbi5uYW5vcyArPSAxMDAwMDAwMDAwOwogICAgIH0KCiBFeGFtcGxlIDI6IENvbXB1dGUgVGltZXN0YW1wIGZyb20gVGltZXN0YW1wICsgRHVyYXRpb24gaW4gcHNldWRvIGNvZGUuCgogICAgIFRpbWVzdGFtcCBzdGFydCA9IC4uLjsKICAgICBEdXJhdGlvbiBkdXJhdGlvbiA9IC4uLjsKICAgICBUaW1lc3RhbXAgZW5kID0gLi4uOwoKICAgICBlbmQuc2Vjb25kcyA9IHN0YXJ0LnNlY29uZHMgKyBkdXJhdGlvbi5zZWNvbmRzOwogICAgIGVuZC5uYW5vcyA9IHN0YXJ0Lm5hbm9zICsgZHVyYXRpb24ubmFub3M7CgogICAgIGlmIChlbmQubmFub3MgPCAwKSB7CiAgICAgICBlbmQuc2Vjb25kcyAtPSAxOwogICAgICAgZW5kLm5hbm9zICs9IDEwMDAwMDAwMDA7CiAgICAgfSBlbHNlIGlmIChlbmQubmFub3MgPj0gMTAwMDAwMDAwMCkgewogICAgICAgZW5kLnNlY29uZHMgKz0gMTsKICAgICAgIGVuZC5uYW5vcyAtPSAxMDAwMDAwMDAwOwogICAgIH0KCiBFeGFtcGxlIDM6IENvbXB1dGUgRHVyYXRpb24gZnJvbSBkYXRldGltZS50aW1lZGVsdGEgaW4gUHl0aG9uLgoKICAgICB0ZCA9IGRhdGV0aW1lLnRpbWVkZWx0YShkYXlzPTMsIG1pbnV0ZXM9MTApCiAgICAgZHVyYXRpb24gPSBEdXJhdGlvbigpCiAgICAgZHVyYXRpb24uRnJvbVRpbWVkZWx0YSh0ZCkKCiAjIEpTT04gTWFwcGluZwoKIEluIEpTT04gZm9ybWF0LCB0aGUgRHVyYXRpb24gdHlwZSBpcyBlbmNvZGVkIGFzIGEgc3RyaW5nIHJhdGhlciB0aGFuIGFuCiBvYmplY3QsIHdoZXJlIHRoZSBzdHJpbmcgZW5kcyBpbiB0aGUgc3VmZml4ICJzIiAoaW5kaWNhdGluZyBzZWNvbmRzKSBhbmQKIGlzIHByZWNlZGVkIGJ5IHRoZSBudW1iZXIgb2Ygc2Vjb25kcywgd2l0aCBuYW5vc2Vjb25kcyBleHByZXNzZWQgYXMKIGZyYWN0aW9uYWwgc2Vjb25kcy4gRm9yIGV4YW1wbGUsIDMgc2Vjb25kcyB3aXRoIDAgbmFub3NlY29uZHMgc2hvdWxkIGJlCiBlbmNvZGVkIGluIEpTT04gZm9ybWF0IGFzICIzcyIsIHdoaWxlIDMgc2Vjb25kcyBhbmQgMSBuYW5vc2Vjb25kIHNob3VsZAogYmUgZXhwcmVzc2VkIGluIEpTT04gZm9ybWF0IGFzICIzLjAwMDAwMDAwMXMiLCBhbmQgMyBzZWNvbmRzIGFuZCAxCiBtaWNyb3NlY29uZCBzaG91bGQgYmUgZXhwcmVzc2VkIGluIEpTT04gZm9ybWF0IGFzICIzLjAwMDAwMXMiLgoKCgoKCgMEAAESA2YIEArcAQoEBAACABIDawIUGs4BIFNpZ25lZCBzZWNvbmRzIG9mIHRoZSBzcGFuIG9mIHRpbWUuIE11c3QgYmUgZnJvbSAtMzE1LDU3NiwwMDAsMDAwCiB0byArMzE1LDU3NiwwMDAsMDAwIGluY2x1c2l2ZS4gTm90ZTogdGhlc2UgYm91bmRzIGFyZSBjb21wdXRlZCBmcm9tOgogNjAgc2VjL21pbiAqIDYwIG1pbi9ociAqIDI0IGhyL2RheSAqIDM2NS4yNSBkYXlzL3llYXIgKiAxMDAwMCB5ZWFycwoKDQoFBAACAAQSBGsCZhIKDAoFBAACAAUSA2sCBwoMCgUEAAIAARIDawgPCgwKBQQAAgADEgNrEhMKgwMKBAQAAgESA3MCEhr1AiBTaWduZWQgZnJhY3Rpb25zIG9mIGEgc2Vjb25kIGF0IG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBvZiB0aGUgc3Bhbgogb2YgdGltZS4gRHVyYXRpb25zIGxlc3MgdGhhbiBvbmUgc2Vjb25kIGFyZSByZXByZXNlbnRlZCB3aXRoIGEgMAogYHNlY29uZHNgIGZpZWxkIGFuZCBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGBuYW5vc2AgZmllbGQuIEZvciBkdXJhdGlvbnMKIG9mIG9uZSBzZWNvbmQgb3IgbW9yZSwgYSBub24temVybyB2YWx1ZSBmb3IgdGhlIGBuYW5vc2AgZmllbGQgbXVzdCBiZQogb2YgdGhlIHNhbWUgc2lnbiBhcyB0aGUgYHNlY29uZHNgIGZpZWxkLiBNdXN0IGJlIGZyb20gLTk5OSw5OTksOTk5CiB0byArOTk5LDk5OSw5OTkgaW5jbHVzaXZlLgoKDQoFBAACAQQSBHMCaxQKDAoFBAACAQUSA3MCBwoMCgUEAAIBARIDcwgNCgwKBQQAAgEDEgNzEBFiBnByb3RvMwqcIwowbWl4ZXIvYWRhcHRlci9zZXJ2aWNlY29udHJvbC9jb25maWcvY29uZmlnLnByb3RvEh1hZGFwdGVyLnNlcnZpY2Vjb250cm9sLmNvbmZpZxoUZ29nb3Byb3RvL2dvZ28ucHJvdG8aHmdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90byKMAQoNUnVudGltZUNvbmZpZxIoChBjaGVja19jYWNoZV9zaXplGAEgASgFUg5jaGVja0NhY2hlU2l6ZRJRChdjaGVja19yZXN1bHRfZXhwaXJhdGlvbhgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblIVY2hlY2tSZXN1bHRFeHBpcmF0aW9uIo8BCgVRdW90YRISCgRuYW1lGAEgASgJUgRuYW1lEjcKGGdvb2dsZV9xdW90YV9tZXRyaWNfbmFtZRgCIAEoCVIVZ29vZ2xlUXVvdGFNZXRyaWNOYW1lEjkKCmV4cGlyYXRpb24YAyABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25SCmV4cGlyYXRpb24irQEKEUdjcFNlcnZpY2VTZXR0aW5nEioKEW1lc2hfc2VydmljZV9uYW1lGAEgASgJUg9tZXNoU2VydmljZU5hbWUSLgoTZ29vZ2xlX3NlcnZpY2VfbmFtZRgCIAEoCVIRZ29vZ2xlU2VydmljZU5hbWUSPAoGcXVvdGFzGAMgAygLMiQuYWRhcHRlci5zZXJ2aWNlY29udHJvbC5jb25maWcuUXVvdGFSBnF1b3RhcyLhAQoGUGFyYW1zElMKDnJ1bnRpbWVfY29uZmlnGAEgASgLMiwuYWRhcHRlci5zZXJ2aWNlY29udHJvbC5jb25maWcuUnVudGltZUNvbmZpZ1INcnVudGltZUNvbmZpZxInCg9jcmVkZW50aWFsX3BhdGgYAiABKAlSDmNyZWRlbnRpYWxQYXRoElkKD3NlcnZpY2VfY29uZmlncxgDIAMoCzIwLmFkYXB0ZXIuc2VydmljZWNvbnRyb2wuY29uZmlnLkdjcFNlcnZpY2VTZXR0aW5nUg5zZXJ2aWNlQ29uZmlnc0IUWgZjb25maWfI4R4AqOIeAPDhHgBKvxwKBhIEDgBeAQq/BAoBDBIDDgASMrQEIENvcHlyaWdodCAyMDE3IElzdGlvIEF1dGhvcnMKCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCsUGCgECEgMdCCUa6gMgVGhlIGBzZXJ2aWNlY29udHJvbGAgYWRhcHRlciBkZWxpdmVycyBsb2dzIGFuZCBtZXRyaWNzIHRvCiBbR29vZ2xlIFNlcnZpY2UgQ29udHJvbF0oaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3NlcnZpY2UtY29udHJvbCkuCgogVGhpcyBhZGFwdGVyIHN1cHBvcnRzIHRoZSBbc2VydmljZWNvbnRyb2xyZXBvcnQgdGVtcGxhdGVdKGh0dHBzOi8vaXN0aW8uaW8vZG9jcy9yZWZlcmVuY2UvY29uZmlnL3BvbGljeS1hbmQtdGVsZW1ldHJ5L3RlbXBsYXRlcy9zZXJ2aWNlY29udHJvbHJlcG9ydC8pLAogdGhlIFtxdW90YSB0ZW1wbGF0ZV0oaHR0cHM6Ly9pc3Rpby5pby9kb2NzL3JlZmVyZW5jZS9jb25maWcvcG9saWN5LWFuZC10ZWxlbWV0cnkvdGVtcGxhdGVzL3F1b3RhLyksCiBhbmQgdGhlIFthcGlrZXkgdGVtcGxhdGVdKGh0dHBzOi8vaXN0aW8uaW8vZG9jcy9yZWZlcmVuY2UvY29uZmlnL3BvbGljeS1hbmQtdGVsZW1ldHJ5L3RlbXBsYXRlcy9hcGlrZXkvKS4KMs0CICR0aXRsZTogU2VydmljZSBDb250cm9sCiAkZGVzY3JpcHRpb246IEFkYXB0ZXIgdGhhdCBkZWxpdmVycyBsb2dzIGFuZCBtZXRyaWNzIHRvIEdvb2dsZSBTZXJ2aWNlIENvbnRyb2wuCiAkbG9jYXRpb246IGh0dHBzOi8vaXN0aW8uaW8vZG9jcy9yZWZlcmVuY2UvY29uZmlnL3BvbGljeS1hbmQtdGVsZW1ldHJ5L2FkYXB0ZXJzL3NlcnZpY2Vjb250cm9sLmh0bWwKICRzdXBwb3J0ZWRfdGVtcGxhdGVzOiBzZXJ2aWNlY29udHJvbHJlcG9ydCxxdW90YSxhcGlrZXkKICRhbGlhc2VzOgogJCAgLSAvZG9jcy9yZWZlcmVuY2UvY29uZmlnL2FkYXB0ZXJzL3NlcnZpY2Vjb250cm9sLmh0bWwKCgkKAgMAEgMfBx0KCQoCAwESAyAHJwoICgEIEgMiAB0KCwoECOcHABIDIgAdCgwKBQjnBwACEgMiBxEKDQoGCOcHAAIAEgMiBxEKDgoHCOcHAAIAARIDIgcRCgwKBQjnBwAHEgMiFBwKCAoBCBIDIwAvCgsKBAjnBwESAyMALwoMCgUI5wcBAhIDIwcmCg0KBgjnBwECABIDIwcmCg4KBwjnBwECAAESAyMIJQoMCgUI5wcBAxIDIykuCggKAQgSAyQAJQoLCgQI5wcCEgMkACUKDAoFCOcHAgISAyQHHAoNCgYI5wcCAgASAyQHHAoOCgcI5wcCAgABEgMkCBsKDAoFCOcHAgMSAyQfJAoICgEIEgMlACgKCwoECOcHAxIDJQAoCgwKBQjnBwMCEgMlBx8KDQoGCOcHAwIAEgMlBx8KDgoHCOcHAwIAARIDJQgeCgwKBQjnBwMDEgMlIicKMAoCBAASBCgAKwEaJCBBZGFwdGVyIHJ1bnRpbWUgY29uZmlnIHBhcmFtZXRlcnMuCgoKCgMEAAESAygIFQoLCgQEAAIAEgMpBB8KDQoFBAACAAQSBCkEKBcKDAoFBAACAAUSAykECQoMCgUEAAIAARIDKQoaCgwKBQQAAgADEgMpHR4KCwoEBAACARIDKgQ5Cg0KBQQAAgEEEgQqBCkfCgwKBQQAAgEGEgMqBBwKDAoFBAACAQESAyodNAoMCgUEAAIBAxIDKjc4CgoKAgQBEgQtADQBCgoKAwQBARIDLQgNCiAKBAQBAgASAy8EFBoTIElzdGlvIHF1b3RhIG5hbWUuCgoNCgUEAQIABBIELwQtDwoMCgUEAQIABRIDLwQKCgwKBQQBAgABEgMvCw8KDAoFBAECAAMSAy8SEwo6CgQEAQIBEgMxBCgaLSBUaGUgY29ycmVzcG9uZGluZyBHb29nbGUgcXVvdGEgbWV0cmljIG5hbWUuCgoNCgUEAQIBBBIEMQQvFAoMCgUEAQIBBRIDMQQKCgwKBQQBAgEBEgMxCyMKDAoFBAECAQMSAzEmJwoyCgQEAQICEgMzBCwaJSBRdW90YSB0b2tlbiBleHBpcmF0aW9uIHRpbWUgcGVyaW9kLgoKDQoFBAECAgQSBDMEMSgKDAoFBAECAgYSAzMEHAoMCgUEAQICARIDMx0nCgwKBQQBAgIDEgMzKisKOAoCBAISBDcAQAEaLCBBZGFwdGVyIHNldHRpbmcgZm9yIGEgbWFuYWdlZCBHQ1Agc2VydmljZS4KCgoKAwQCARIDNwgZClsKBAQCAgASAzkEIRpOIExvY2FsIHNlcnZpY2UgbmFtZSBvbiB0aGUgbWVzaCwgd2hpY2ggbWF0Y2hlcyBkZXN0aW5hdGlvbi5zZXJ2aWNlIGF0dHJpYnV0ZS4KCg0KBQQCAgAEEgQ5BDcbCgwKBQQCAgAFEgM5BAoKDAoFBAICAAESAzkLHAoMCgUEAgIAAxIDOR8gCjAKBAQCAgESAzwEIxojIEZ1bGx5IHF1YWxpZmllZCBHQ1Agc2VydmljZSBuYW1lLgoKDQoFBAICAQQSBDwEOSEKDAoFBAICAQUSAzwECgoMCgUEAgIBARIDPAseCgwKBQQCAgEDEgM8ISIKHAoEBAICAhIDPwQeGg8gUXVvdGEgY29uZmlncwoKDAoFBAICAgQSAz8EDAoMCgUEAgICBhIDPw0SCgwKBQQCAgIBEgM/ExkKDAoFBAICAgMSAz8cHQroBAoCBAMSBFkAXgEa2wQgQ29uZmlndXJhdGlvbiBmb3JtYXQgZm9yIHRoZSBgc2VydmljZWNvbnRyb2xgIGFkYXB0ZXIuCgogU2FtcGxlIGFkYXB0ZXIgY29uZmlnOgoKIGBgYHlhbWwKIGFwaVZlcnNpb246ICJjb25maWcuaXN0aW8uaW8vdjFhbHBoYTIiCiBraW5kOiBzZXJ2aWNlY29udHJvbAogbWV0YWRhdGE6CiAgIG5hbWU6IHRlc3RoYW5kbGVyCiAgIG5hbWVzcGFjZTogaXN0aW8tc3lzdGVtCiBzcGVjOgogICBydW50aW1lX2NvbmZpZzoKICAgICBjaGVja19jYWNoZV9zaXplOiAyMDAKICAgICBjaGVja19yZXN1bHRfZXhwaXJhdGlvbjogNjBzCiAgIGNyZWRlbnRpYWxfcGF0aDogIi9wYXRoL3RvL3Rva2VuLmpzb24iCiAgIHNlcnZpY2VfY29uZmlnczoKICAgICAtIG1lc2hfc2VydmljZV9uYW1lOiAiZWNoby5sb2NhbC5zdmMiCiAgICAgICBnb29nbGVfc2VydmljZV9uYW1lOiAiZWNoby5lbmRwb2ludHMuY2xvdWQuZ29vZyIKICAgICAgIHF1b3RhczoKICAgICAgICAgLSBuYW1lOiByYXRlbGltaXQucXVvdGEuaXN0aW8tc3lzdGVtCiAgICAgICAgICAgZ29vZ2xlX3F1b3RhX21ldHJpY19uYW1lOiByZWFkLXJlcXVlc3RzCiAgICAgICAgICAgZXhwaXJhdGlvbjogMW0KIGBgYAoKCgoDBAMBEgNZCA4KCwoEBAMCABIDWgQlCg0KBQQDAgAEEgRaBFkQCgwKBQQDAgAGEgNaBBEKDAoFBAMCAAESA1oSIAoMCgUEAwIAAxIDWiMkClYKBAQDAgESA1wEHxpJIEEgcGF0aCB0byBKU09OIHRva2VuIGZpbGUsIHVzdWFsbHkgbW91bnRlZCBhcyBLdWJlcm5ldGVzIHNlY3JldCBvbiBwb2QuCgoNCgUEAwIBBBIEXARaJQoMCgUEAwIBBRIDXAQKCgwKBQQDAgEBEgNcCxoKDAoFBAMCAQMSA1wdHgoLCgQEAwICEgNdBDMKDAoFBAMCAgQSA10EDAoMCgUEAwICBhIDXQ0eCgwKBQQDAgIBEgNdHy4KDAoFBAMCAgMSA10xMmIGcHJvdG8z ---- diff --git a/mixer/adapter/servicecontrol/distValueBuilder.go b/mixer/adapter/servicecontrol/distValueBuilder.go deleted file mode 100644 index 01a73fe37407..000000000000 --- a/mixer/adapter/servicecontrol/distValueBuilder.go +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "errors" - "math" - - sc "google.golang.org/api/servicecontrol/v1" -) - -type ( - // Option defines how the exponential distribution value bucket is constructed. For detail, - // see https://godoc.org/google.golang.org/api/servicecontrol/v1#ExponentialBuckets and - // the reference implementation in - // https://github.com/cloudendpoints/esp/blob/master/src/api_manager/service_control/proto.cc - distValueBuilderOption struct { - buckets int64 - growth float64 - scale float64 - } - - // A builder that generates distribute value based on given option. - distValueBuilder struct { - option distValueBuilderOption - dist *sc.Distribution - } -) - -var ( - // We use the same parameter as in Google ESP implementation. - // Option for time-based bucket - timeOption = distValueBuilderOption{ - 29, - 2.0, - 1e-6, - } - // Option for size-based bucket - sizeOption = distValueBuilderOption{ - 8, - 10.0, - 1, - } -) - -// addSample adds a sample to distribution value. -func (b *distValueBuilder) addSample(value float64) { - b.updateCommonStatistics(value) - b.UpdateExponentialBucketCount(value) -} - -// updateCommonStatistics updates common statistics such as mean, min/max when a sample is added. -func (b *distValueBuilder) updateCommonStatistics(value float64) { - dist := b.dist - if dist.Count == 0 { - dist.Minimum = value - dist.Maximum = value - dist.Mean = value - dist.SumOfSquaredDeviation = 0.0 - } else { - dist.Minimum = math.Min(dist.Minimum, value) - dist.Maximum = math.Max(dist.Maximum, value) - // We use a well known online variance method to calculate square sum deviation. - // https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance - delta := value - dist.Mean - dist.Mean += delta / (float64(dist.Count) + 1.0) - delta2 := value - dist.Mean - dist.SumOfSquaredDeviation += delta * delta2 - } - dist.Count++ -} - -// UpdateExponentialBucketCount updates sample account in an exponential bucket distribution value. -func (b *distValueBuilder) UpdateExponentialBucketCount(value float64) { - dist := b.dist - var idx int64 - if value >= dist.ExponentialBuckets.Scale { - idx = 1 + - int64(math.Log(value/dist.ExponentialBuckets.Scale)/ - math.Log(dist.ExponentialBuckets.GrowthFactor)) - if idx > dist.ExponentialBuckets.NumFiniteBuckets+1 { - idx = dist.ExponentialBuckets.NumFiniteBuckets + 1 - } - } - dist.BucketCounts[idx]++ -} - -// build builds a distribution value from a builder. -func (b *distValueBuilder) build() *sc.Distribution { - return b.dist -} - -func newDistValueBuilder(option distValueBuilderOption) (distValueBuilder, error) { - if option.buckets <= 0 || option.growth <= 1.0 || option.scale <= 0 { - return distValueBuilder{}, errors.New("invalid distValueBuilderOption") - } - return distValueBuilder{ - option, - &sc.Distribution{ - // Add 2, because we need to take care -inf, and +inf - BucketCounts: make([]int64, option.buckets+2), - Count: 0, - ExponentialBuckets: &sc.ExponentialBuckets{ - GrowthFactor: option.growth, - NumFiniteBuckets: option.buckets, - Scale: option.scale, - }, - Maximum: 0.0, - Mean: 0.0, - Minimum: 0.0, - SumOfSquaredDeviation: 0.0, - }, - }, nil -} diff --git a/mixer/adapter/servicecontrol/distValueBuilder_test.go b/mixer/adapter/servicecontrol/distValueBuilder_test.go deleted file mode 100644 index 977ba847dd87..000000000000 --- a/mixer/adapter/servicecontrol/distValueBuilder_test.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "math" - "reflect" - "testing" - - "google.golang.org/api/googleapi" - sc "google.golang.org/api/servicecontrol/v1" -) - -var option = distValueBuilderOption{ - 8, - 10, - 1, -} - -const tolerance = 1e-5 - -func meanValue(values []float64) float64 { - sum := 0.0 - for _, value := range values { - sum += value - } - return sum / float64(len(values)) -} - -func squareDeviationSum(values []float64) float64 { - if len(values) <= 1 { - return 0.0 - } - - mean := meanValue(values) - result := 0.0 - for _, value := range values { - result += math.Pow(value-mean, 2.0) - } - return result -} - -func TestNewDistValueBuilder(t *testing.T) { - b, err := newDistValueBuilder(option) - - if err != nil { - t.Fatalf(`newDistValueBuilder() failed with %v`, err) - } - - expected := sc.Distribution{ - BucketCounts: make([]int64, option.buckets+2), - Count: 0, - ExponentialBuckets: &sc.ExponentialBuckets{ - GrowthFactor: option.growth, - NumFiniteBuckets: option.buckets, - Scale: option.scale, - }, - Maximum: 0.0, - Mean: 0.0, - Minimum: 0.0, - SumOfSquaredDeviation: 0.0, - } - if !reflect.DeepEqual(expected, *b.dist) { - t.Errorf(`expected distribution value %v, but get %v`, expected, *b.dist) - } -} - -func TestBuildDistribution(t *testing.T) { - b, err := newDistValueBuilder(option) - if err != nil { - t.Fatalf(`newDistValueBuilder() failed with %v`, err) - } - - testValues := []float64{10.0, 11.0, 100.0} - for _, value := range testValues { - b.addSample(value) - } - - dist := b.build() - if dist.Count != int64(len(testValues)) { - t.Errorf(`expect dist.Count == %v', but get: %v`, len(testValues), dist.Count) - } - if math.Abs(dist.Minimum-10.0) > tolerance { - t.Errorf(`expect dist.Minimum == 10.0, but get: %v`, dist.Minimum) - } - if math.Abs(dist.Maximum-100.0) > tolerance { - t.Errorf(`expect dist.Maximum == 100.0, but get: %v`, dist.Maximum) - } - expectedMean := meanValue(testValues) - if math.Abs(dist.Mean-expectedMean) > tolerance { - t.Errorf(`expect dist.Mean == %v, but get: %v`, expectedMean, dist.Mean) - } - expectedSumOfSquaredDeviation := squareDeviationSum(testValues) - if math.Abs(dist.SumOfSquaredDeviation-expectedSumOfSquaredDeviation) > tolerance { - t.Errorf(`expect dist.SumOfSquaredDeviation == %v, but get: %v`, - expectedSumOfSquaredDeviation, dist.SumOfSquaredDeviation) - } - expectedBucketCount := googleapi.Int64s{0, 0, 2, 1, 0, 0, 0, 0, 0, 0} - if !reflect.DeepEqual(expectedBucketCount, dist.BucketCounts) { - t.Errorf(`incorrect dist.BucketCounts, expect: %v, get: %v`, - expectedBucketCount, dist.BucketCounts) - } -} diff --git a/mixer/adapter/servicecontrol/handler.go b/mixer/adapter/servicecontrol/handler.go deleted file mode 100644 index 002cde8257f9..000000000000 --- a/mixer/adapter/servicecontrol/handler.go +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "context" - "errors" - "fmt" - "io" - "sync" - - multierror "github.com/hashicorp/go-multierror" - sc "google.golang.org/api/servicecontrol/v1" - - "istio.io/istio/mixer/adapter/servicecontrol/config" - "istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport" - "istio.io/istio/mixer/pkg/adapter" - "istio.io/istio/mixer/pkg/status" - "istio.io/istio/mixer/template/apikey" - "istio.io/istio/mixer/template/quota" - "istio.io/istio/pkg/cache" -) - -type ( - serviceControlClient interface { - Check(googleServiceName string, request *sc.CheckRequest) (*sc.CheckResponse, error) - Report(googleServiceName string, request *sc.ReportRequest) (*sc.ReportResponse, error) - AllocateQuota(googleServiceName string, request *sc.AllocateQuotaRequest) (*sc.AllocateQuotaResponse, error) - } - - checkProcessor interface { - ProcessCheck(ctx context.Context, instance *apikey.Instance) (adapter.CheckResult, error) - } - - reportProcessor interface { - io.Closer - ProcessReport(ctx context.Context, instances []*servicecontrolreport.Instance) error - } - - quotaProcessor interface { - ProcessQuota(ctx context.Context, instances *quota.Instance, args adapter.QuotaArgs) (adapter.QuotaResult, error) - } - - serviceProcessor struct { - checkProcessor - reportProcessor - quotaProcessor - } - - handlerContext struct { - env adapter.Env - config *config.Params - // A map keyed by mesh service name to service config in adapter config - serviceConfigIndex map[string]*config.GcpServiceSetting - checkDataShape map[string]*apikey.Type - reportDataShape map[string]*servicecontrolreport.Type - checkResponseCache cache.ExpiringCache // A LRU cache for check response - client serviceControlClient - } - - handler struct { - ctx *handlerContext - - // lock protects svcProcMap. - lock sync.Mutex - // Istio mesh service name to serviceProcessor map. Each serviceProcessor instance handles a single - // service. - svcProcMap map[string]*serviceProcessor - } -) - -func newServiceProcessor(meshServiceName string, ctx *handlerContext) (*serviceProcessor, error) { - checkProc, err := newCheckProcessor(meshServiceName, ctx) - if err != nil { - return nil, err - } - - reportProc, err := newReportProcessor(meshServiceName, ctx, checkProc) - if err != nil { - return nil, err - } - quotaProc, err := newQuotaProcessor(meshServiceName, ctx) - if err != nil { - return nil, err - } - - return &serviceProcessor{ - checkProcessor: checkProc, - reportProcessor: reportProc, - quotaProcessor: quotaProc, - }, nil -} - -// HandleApiKey handles apikey check. -// nolint:golint -// Disable lint warning of HandleApiKey name -func (h *handler) HandleApiKey(ctx context.Context, instance *apikey.Instance) (adapter.CheckResult, error) { - svcProc, err := h.getServiceProcessor(instance.Api) - if err != nil { - return adapter.CheckResult{ - Status: status.WithPermissionDenied(err.Error()), - }, nil - } - return svcProc.ProcessCheck(ctx, instance) -} - -// HandleServicecontrolReport handles reporting metrics and logs. -func (h *handler) HandleServicecontrolReport(ctx context.Context, instances []*servicecontrolreport.Instance) error { - // TODO: this is inefficient as it dispatches each report individually, instead of grouping them by the service - for _, instance := range instances { - svcProc, err := h.getServiceProcessor(instance.ApiService) - if err != nil { - return err - } - if err = svcProc.ProcessReport(ctx, []*servicecontrolreport.Instance{instance}); err != nil { - return err - } - } - return nil -} - -// HandleQuota handles rate limiting quota. -func (h *handler) HandleQuota(ctx context.Context, instance *quota.Instance, - args adapter.QuotaArgs) (adapter.QuotaResult, error) { - - /* - svcProc, err := h.getServiceProcessor(instance.Api) - if err != nil { - return adapter.QuotaResult{ - // This map to rpc.INTERNAL. - Status: status.WithError(err), - }, nil - } - return svcProc.ProcessQuota(ctx, instance, args) - */ - return adapter.QuotaResult{}, errors.New("not implemented") -} - -// Close closes a handler. -// TODO(manlinl): Run svcProc.Close in goroutine after reportProcessor implements buffering. -func (h *handler) Close() error { - var errors *multierror.Error - - h.lock.Lock() - defer h.lock.Lock() - for _, svcProc := range h.svcProcMap { - if err := svcProc.Close(); err != nil { - errors = multierror.Append(errors, err) - } - } - - return errors.ErrorOrNil() -} - -func (h *handler) getServiceProcessor(serviceFullName string) (*serviceProcessor, error) { - if _, ok := h.ctx.serviceConfigIndex[serviceFullName]; !ok { - return nil, fmt.Errorf("unknown service %v", serviceFullName) - } - - h.lock.Lock() - defer h.lock.Unlock() - svcProc, found := h.svcProcMap[serviceFullName] - if found { - return svcProc, nil - } - - svcProc, err := newServiceProcessor(serviceFullName, h.ctx) - if err != nil { - return nil, err - } - h.svcProcMap[serviceFullName] = svcProc - return svcProc, nil -} - -func newHandler(ctx *handlerContext) *handler { - return &handler{ - ctx: ctx, - svcProcMap: make(map[string]*serviceProcessor, len(ctx.config.ServiceConfigs)), - } -} diff --git a/mixer/adapter/servicecontrol/handler_test.go b/mixer/adapter/servicecontrol/handler_test.go deleted file mode 100644 index 85d3809cb485..000000000000 --- a/mixer/adapter/servicecontrol/handler_test.go +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "context" - "errors" - "reflect" - "testing" - "time" - - "istio.io/istio/mixer/adapter/servicecontrol/config" - "istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport" - "istio.io/istio/mixer/pkg/adapter" - at "istio.io/istio/mixer/pkg/adapter/test" - "istio.io/istio/mixer/pkg/status" - "istio.io/istio/mixer/template/apikey" - "istio.io/istio/mixer/template/quota" -) - -type mockProcessor struct { - checkResult *adapter.CheckResult - reportError error - quotaResult *adapter.QuotaResult -} - -func (p *mockProcessor) ProcessCheck(ctx context.Context, instance *apikey.Instance) (adapter.CheckResult, error) { - if p.checkResult == nil { - return adapter.CheckResult{}, errors.New("injected error") - } - return *p.checkResult, nil -} - -func (p *mockProcessor) ProcessReport(ctx context.Context, instances []*servicecontrolreport.Instance) error { - return p.reportError -} - -func (p *mockProcessor) ProcessQuota(ctx context.Context, - instance *quota.Instance, args adapter.QuotaArgs) (adapter.QuotaResult, error) { - if p.quotaResult == nil { - return adapter.QuotaResult{}, errors.New("injected error") - } - return *p.quotaResult, nil -} - -func (p *mockProcessor) Close() error { - return nil -} - -func TestHandleApiKey(t *testing.T) { - instance := apikey.Instance{ - Api: "test_service", - ApiOperation: "/echo", - ApiKey: "test_key", - Timestamp: time.Now(), - } - - mock := &mockProcessor{} - h := getTestHandler(mock, t) - mock.checkResult = &adapter.CheckResult{ - Status: status.OK, - } - - result, err := h.HandleApiKey(context.Background(), &instance) - if err != nil || !reflect.DeepEqual(*mock.checkResult, result) { - t.Errorf(`expect check result %v, but get %v`, *mock.checkResult, result) - } -} - -func TestHandleReport(t *testing.T) { - now := time.Now() - instances := []*servicecontrolreport.Instance{ - { - ApiVersion: "v1", - ApiOperation: "echo.foo.bar", - ApiProtocol: "gRPC", - ApiService: "test_service", - ApiKey: "test_key", - RequestTime: now, - RequestMethod: "POST", - RequestPath: "/blah", - RequestBytes: 10, - ResponseTime: now, - ResponseCode: 200, - ResponseBytes: 100, - ResponseLatency: time.Duration(1) * time.Second, - }, - } - mock := &mockProcessor{} - h := getTestHandler(mock, t) - err := h.HandleServicecontrolReport(context.Background(), instances) - if err != nil { - t.Errorf(`expect success but failed with %v`, err) - } -} - -func TestHandleQuota(t *testing.T) { - instance := quota.Instance{ - Name: "ratelimit.quota.istio-system", - Dimensions: map[string]interface{}{ - "api_key": "api-key", - "api_operation": "echo", - }, - } - - mock := &mockProcessor{} - h := getTestHandler(mock, t) - mock.quotaResult = &adapter.QuotaResult{ - Status: status.OK, - ValidDuration: time.Minute, - Amount: 10, - } - _, _ = h.HandleQuota(context.Background(), &instance, adapter.QuotaArgs{}) - - /* - if err != nil || !reflect.DeepEqual(*mock.quotaResult, result) { - t.Errorf(`expect quota result %v, but get %v`, *mock.checkResult, result) - } - */ -} - -func TestUnknownService(t *testing.T) { - h := getTestHandler(&mockProcessor{}, t) - delete(h.ctx.serviceConfigIndex, "test_service") - delete(h.svcProcMap, "test_service") - _, err := h.getServiceProcessor("test_service") - if err == nil { - t.Errorf(`expect non-nil error`) - } -} - -func TestNewHandler(t *testing.T) { - ctx := &handlerContext{ - env: at.NewEnv(t), - config: &config.Params{ - ServiceConfigs: []*config.GcpServiceSetting{ - { - MeshServiceName: "test_service", - GoogleServiceName: "echo.googleapi.com", - }, - }, - }, - serviceConfigIndex: map[string]*config.GcpServiceSetting{ - "test_service": { - MeshServiceName: "test_service", - GoogleServiceName: "echo.googleapi.com", - }, - }, - } - - h := newHandler(ctx) - if !reflect.DeepEqual(*ctx, *h.ctx) { - t.Errorf(`handler not initialized with handleContext`) - } - - if h.svcProcMap == nil { - t.Errorf(`handler.svcProcMap not initialized`) - } -} - -func getTestHandler(mock *mockProcessor, t *testing.T) *handler { - return &handler{ - ctx: &handlerContext{ - env: at.NewEnv(t), - serviceConfigIndex: map[string]*config.GcpServiceSetting{ - "test_service": { - MeshServiceName: "test_service", - GoogleServiceName: "echo.googleapi.com", - }, - }, - }, - svcProcMap: map[string]*serviceProcessor{ - "test_service": { - checkProcessor: mock, - reportProcessor: mock, - quotaProcessor: mock, - }, - }, - } -} diff --git a/mixer/adapter/servicecontrol/metrics.go b/mixer/adapter/servicecontrol/metrics.go deleted file mode 100644 index 1871f5dfbe86..000000000000 --- a/mixer/adapter/servicecontrol/metrics.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -var supportedMetrics = []metricDef{ - // Producer destination metrics - { - name: "serviceruntime.googleapis.com/api/producer/request_count", - valueGenerator: generateRequestCount, - labels: []string{ - "/protocol", - "/response_code", - "/response_code_class", - "/status_code"}, - }, - { - name: "serviceruntime.googleapis.com/api/producer/backend_latencies", - valueGenerator: generateBackendLatencies, - labels: []string{}, - }, - { - name: "serviceruntime.googleapis.com/api/producer/request_sizes", - valueGenerator: generateRequestSize, - labels: []string{}, - }, - // by consumer metrics - { - name: "serviceruntime.googleapis.com/api/producer/by_consumer/request_count", - valueGenerator: generateRequestCount, - labels: []string{ - "/credential_id", - "/protocol", - "/response_code", - "/response_code_class", - "/status_code", - }, - }, - // Consumer destination metrics - { - name: "serviceruntime.googleapis.com/api/consumer/request_count", - valueGenerator: generateRequestCount, - labels: []string{ - "/credential_id", - "/protocol", - "/response_code", - "/response_code_class", - "/status_code", - }, - }, - { - name: "serviceruntime.googleapis.com/api/consumer/backend_latencies", - valueGenerator: generateBackendLatencies, - labels: []string{"/credential_id"}, - }, -} diff --git a/mixer/adapter/servicecontrol/quotaprocessor.go b/mixer/adapter/servicecontrol/quotaprocessor.go deleted file mode 100644 index d1c617a9bfce..000000000000 --- a/mixer/adapter/servicecontrol/quotaprocessor.go +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -// Sample quota config: -// ''' -// apiVersion: "config.istio.io/v1alpha2" -// kind: quota -// metadata: -// name: qutoa-name -// namespace: istio-system -// spec: -// dimensions: -// api_operation : api.operation -// api_key : api.key -// ''' - -import ( - "context" - "fmt" - "time" - - rpc "github.com/gogo/googleapis/google/rpc" - "github.com/pborman/uuid" - sc "google.golang.org/api/servicecontrol/v1" - - "istio.io/istio/mixer/adapter/servicecontrol/config" - "istio.io/istio/mixer/pkg/adapter" - "istio.io/istio/mixer/pkg/status" - "istio.io/istio/mixer/template/quota" -) - -const ( - // Dimension name used in Quota instance config - apiKeyDimension = "api_key" - apiOperationDimension = "api_operation" - - // Google Service Control quota mode - quotaModeNormal = "NORMAL" - quotaModeBestEffort = "BEST_EFFORT" - - // Metric and label returned by Google Service Control containing quota allocation result. - quotaAllocationResultMetric = "serviceruntime.googleapis.com/api/consumer/quota_used_count" - quotaNameLabel = "/quota_name" -) - -// Implementation of quotaProcessor interface -type quotaImpl struct { - env adapter.Env - serviceSetting *config.GcpServiceSetting - // An index from Istio quota name to quota config in serviceSetting - quotaIndex map[string]*config.Quota - client serviceControlClient -} - -func getQuotaMode(args adapter.QuotaArgs) string { - if args.BestEffort { - return quotaModeBestEffort - } - return quotaModeNormal -} - -func createQuotaResult(status rpc.Status, expiration time.Duration, amount int64) adapter.QuotaResult { - return adapter.QuotaResult{ - Status: status, - ValidDuration: expiration, - Amount: amount, - } -} - -func quotaResultFromQuotaError(quotaErr *sc.QuotaError, quotaCfg *config.Quota) adapter.QuotaResult { - code := serviceControlErrorToRPCCode(quotaErr.Code) - return createQuotaResult(status.WithMessage(code, quotaErr.Description), - toDuration(quotaCfg.Expiration), 0) -} - -func makeQuotaResult(response *sc.AllocateQuotaResponse, quotaCfg *config.Quota, - args *adapter.QuotaArgs) adapter.QuotaResult { - succeeded := response.AllocateErrors == nil || len(response.AllocateErrors) == 0 - if !succeeded { - return quotaResultFromQuotaError(response.AllocateErrors[0], quotaCfg) - } - - // If quota metric is not found in response, just return the request quota amount - if response.QuotaMetrics == nil || len(response.QuotaMetrics) == 0 { - return createQuotaResult(status.OK, toDuration(quotaCfg.Expiration), args.QuotaAmount) - } - - return createQuotaResult(status.OK, toDuration(quotaCfg.Expiration), - getAllocatedQuotaAmount(args, response.QuotaMetrics, quotaCfg)) -} - -func buildAllocateRequest(instance *quota.Instance, - args adapter.QuotaArgs, quotaCfg *config.Quota) (*sc.AllocateQuotaRequest, error) { - rawAPIKey, ok := dimensionToString(instance.Dimensions, apiKeyDimension) - if !ok { - return nil, fmt.Errorf("dimension %v not found in instance %v", apiKeyDimension, *instance) - } - - apiOperation, ok := dimensionToString(instance.Dimensions, apiOperationDimension) - if !ok { - return nil, fmt.Errorf("dimension %v not found in instance %v", apiOperationDimension, *instance) - } - - // If GoogleQuotaMetric name is not set in config, assume Istio quota name is Google's quota metric name. - metricName := quotaCfg.GoogleQuotaMetricName - if metricName == "" { - metricName = quotaCfg.Name - } - apiKey := generateConsumerIDFromAPIKey(rawAPIKey) - op := &sc.QuotaOperation{ - ConsumerId: apiKey, - MethodName: apiOperation, - OperationId: uuid.New(), - QuotaMetrics: []*sc.MetricValueSet{ - { - MetricName: metricName, - MetricValues: []*sc.MetricValue{ - { - Int64Value: getInt64Address(args.QuotaAmount), - }, - }, - }, - }, - QuotaMode: getQuotaMode(args), - } - - return &sc.AllocateQuotaRequest{ - AllocateOperation: op, - }, nil -} - -func getAllocatedQuotaAmount(args *adapter.QuotaArgs, quotaMetrics []*sc.MetricValueSet, - quotaCfg *config.Quota) int64 { - // Initialize allocated amount to requested amount - var amount = args.QuotaAmount - for _, metric := range quotaMetrics { - if metric.MetricName == quotaAllocationResultMetric && - metric.MetricValues != nil { - for _, value := range metric.MetricValues { - if value.Labels != nil && value.Labels[quotaNameLabel] == quotaCfg.GoogleQuotaMetricName { - amount = *value.Int64Value - break - } - } - } - } - return amount -} - -// ProcessQuota calls Google ServiceControl client to allocate requested quota. -// TODO(manlinl): Support handling multiple QuotaArgs once Mixer supports it. And implement retry on retriable error. -// nolint: vetshadow -func (p *quotaImpl) ProcessQuota(ctx context.Context, - instance *quota.Instance, args adapter.QuotaArgs) (adapter.QuotaResult, error) { - quotaCfg, found := p.quotaIndex[instance.Name] - if !found { - errMsg := "unknown quota name: " + instance.Name - return createQuotaResult( - status.WithInvalidArgument(errMsg), time.Minute, 0), - fmt.Errorf(errMsg) - } - - quotaDuration := toDuration(quotaCfg.Expiration) - request, err := buildAllocateRequest(instance, args, quotaCfg) - if err != nil { - return createQuotaResult(status.WithInvalidArgument(err.Error()), - quotaDuration, 0), err - } - - if p.env.Logger().DebugEnabled() { - if requestDetail, err := toFormattedJSON(request); err == nil { - p.env.Logger().Debugf("Quota request :%v", requestDetail) - } - } - - response, err := p.client.AllocateQuota( - p.serviceSetting.GoogleServiceName, request) - if err != nil { - err = p.env.Logger().Errorf("allocate quota failed: %v", err) - return createQuotaResult(status.WithError(err), - quotaDuration, 0), err - } - - if p.env.Logger().DebugEnabled() { - if responseDetail, err := toFormattedJSON(response); err == nil { - p.env.Logger().Debugf("response :%v", responseDetail) - } - } - - return makeQuotaResult(response, quotaCfg, &args), nil -} - -func newQuotaProcessor(meshServiceName string, ctx *handlerContext) (*quotaImpl, error) { - svcCfg, found := ctx.serviceConfigIndex[meshServiceName] - if !found { - return nil, fmt.Errorf("mesh service not found: %s", meshServiceName) - } - - processor := "aImpl{ - ctx.env, - svcCfg, - make(map[string]*config.Quota), - ctx.client, - } - - for _, quotaCfg := range svcCfg.Quotas { - processor.quotaIndex[quotaCfg.Name] = quotaCfg - } - return processor, nil -} diff --git a/mixer/adapter/servicecontrol/quotaprocessor_test.go b/mixer/adapter/servicecontrol/quotaprocessor_test.go deleted file mode 100644 index 9aefc5ef2057..000000000000 --- a/mixer/adapter/servicecontrol/quotaprocessor_test.go +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "context" - "reflect" - "testing" - "time" - - rpc "github.com/gogo/googleapis/google/rpc" - pbtypes "github.com/gogo/protobuf/types" - sc "google.golang.org/api/servicecontrol/v1" - - "istio.io/istio/mixer/adapter/servicecontrol/config" - "istio.io/istio/mixer/pkg/adapter" - at "istio.io/istio/mixer/pkg/adapter/test" - "istio.io/istio/mixer/pkg/status" - "istio.io/istio/mixer/template/quota" -) - -type quotaTest struct { - processor *quotaImpl - client *mockSvcctrlClient - instance quota.Instance -} - -type quotaTestCase struct { - args adapter.QuotaArgs - expectedRequest string - response *sc.AllocateQuotaResponse - expectedResult adapter.QuotaResult -} - -func setupQuotaTest(t *testing.T) *quotaTest { - svcCfg := &config.GcpServiceSetting{ - Quotas: []*config.Quota{ - { - "ratelimit.quota.istio-system", - "read-requests", - &pbtypes.Duration{ - Seconds: 60, - }, - }, - }, - } - - mockClient := &mockSvcctrlClient{} - ctx := &handlerContext{ - env: at.NewEnv(t), - serviceConfigIndex: map[string]*config.GcpServiceSetting{ - svcCfg.MeshServiceName: svcCfg, - }, - client: mockClient, - } - - proc, err := newQuotaProcessor(svcCfg.MeshServiceName, ctx) - if err != nil { - t.Fatalf("fail to create test quota processor: %v", err) - } - - return "aTest{ - proc, - mockClient, - quota.Instance{ - Name: "ratelimit.quota.istio-system", - Dimensions: map[string]interface{}{ - "api_key": "api-key", - "api_operation": "echo", - }, - }, - } -} - -func TestProcessQuota(t *testing.T) { - testCases := []*quotaTestCase{ - { - args: adapter.QuotaArgs{ - DeduplicationID: "-1-", - QuotaAmount: 25, - BestEffort: true, - }, - expectedRequest: ` - { - "consumerId":"api_key:api-key", - "methodName":"echo", - "quotaMetrics":[ - { - "metricName":"read-requests", - "metricValues":[ - { - "int64Value":"25" - } - ] - } - ], - "quotaMode":"BEST_EFFORT" - }`, - response: &sc.AllocateQuotaResponse{ - OperationId: "cc56c90f-155f-4907-9461-64ed764fcbc1", - QuotaMetrics: []*sc.MetricValueSet{ - { - MetricName: "serviceruntime.googleapis.com/api/consumer/quota_used_count", - MetricValues: []*sc.MetricValue{ - { - Int64Value: getInt64Address(10), - Labels: map[string]string{ - "/quota_name": "read-requests", - }, - }, - }, - }, - }, - }, - expectedResult: createQuotaResult(status.OK, time.Duration(60)*time.Second, 10), - }, - { - args: adapter.QuotaArgs{ - DeduplicationID: "-2-", - QuotaAmount: 15, - }, - expectedRequest: ` - { - "consumerId":"api_key:api-key", - "methodName":"echo", - "quotaMetrics":[ - { - "metricName":"read-requests", - "metricValues":[ - { - "int64Value":"15" - } - ] - } - ], - "quotaMode":"NORMAL" - }`, - response: &sc.AllocateQuotaResponse{ - OperationId: "cc56c90f-155f-4907-9461-64ed764fcbc1", - QuotaMetrics: []*sc.MetricValueSet{ - { - MetricName: "serviceruntime.googleapis.com/api/consumer/quota_used_count", - MetricValues: []*sc.MetricValue{ - { - Int64Value: getInt64Address(15), - Labels: map[string]string{ - "/quota_name": "read-requests", - }, - }, - }, - }, - }, - }, - expectedResult: createQuotaResult(status.OK, time.Duration(60)*time.Second, 15), - }, - { - args: adapter.QuotaArgs{ - DeduplicationID: "-2-", - QuotaAmount: 15, - }, - expectedRequest: ` - { - "consumerId":"api_key:api-key", - "methodName":"echo", - "quotaMetrics":[ - { - "metricName":"read-requests", - "metricValues":[ - { - "int64Value":"15" - } - ] - } - ], - "quotaMode":"NORMAL" - }`, - response: &sc.AllocateQuotaResponse{ - OperationId: "cc56c90f-155f-4907-9461-64ed764fcbc1", - AllocateErrors: []*sc.QuotaError{ - { - Code: "RESOURCE_EXHAUSTED", - Description: "out of quota", - }, - }, - }, - expectedResult: createQuotaResult(status.WithMessage(rpc.RESOURCE_EXHAUSTED, "out of quota"), - time.Duration(60)*time.Second, 15), - }, - } - - for _, testCase := range testCases { - quotaTestImpl(testCase, t) - } -} - -func TestInvalidInstance(t *testing.T) { - test := setupQuotaTest(t) - delete(test.instance.Dimensions, "api_key") - result, err := test.processor.ProcessQuota(context.Background(), &test.instance, adapter.QuotaArgs{ - DeduplicationID: "-1-", - BestEffort: false, - QuotaAmount: 10, - }) - if err == nil { - t.Errorf(`expect error but get nil`) - } - if result.Status.Code != int32(rpc.INVALID_ARGUMENT) { - t.Errorf(`expect invalid argument error, but get %v`, result) - } -} - -func quotaTestImpl(testCase *quotaTestCase, t *testing.T) { - test := setupQuotaTest(t) - test.client.setQuotaAllocateRespone(testCase.response) - result, err := test.processor.ProcessQuota(context.Background(), &test.instance, testCase.args) - if test.client.allocateQuotaRequest != nil && err != nil { - t.Errorf(`unexpected quota allocate error %v`, err) - } - - test.client.allocateQuotaRequest.AllocateOperation.OperationId = "" - allocOp, err := test.client.allocateQuotaRequest.AllocateOperation.MarshalJSON() - if err != nil { - t.Errorf("fail to marshal JSON %v", err) - } - - if !compareJSON(string(allocOp), testCase.expectedRequest) { - t.Errorf("expect request: %v, but get: %v", testCase.expectedRequest, string(allocOp)) - } - - if err != nil && testCase.response != nil { - t.Errorf("unexpected error: %v, injected response:%v", err, *testCase.response) - } - - if err != nil && !reflect.DeepEqual(testCase.expectedResult, result) { - t.Errorf("expecte checkResult: %v, but get %v", testCase.expectedRequest, result) - } -} diff --git a/mixer/adapter/servicecontrol/reportbuilder.go b/mixer/adapter/servicecontrol/reportbuilder.go deleted file mode 100644 index 651c94d4f030..000000000000 --- a/mixer/adapter/servicecontrol/reportbuilder.go +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "encoding/json" - "strconv" - "time" - - rpc "github.com/gogo/googleapis/google/rpc" - sc "google.golang.org/api/servicecontrol/v1" - - "istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport" -) - -const ( - endPointsLogName = "endpoints_log" - endPointsLogSeverityInfo = "INFO" - endPointsLogSeverityError = "ERROR" - endPointsLogErrorCauseAuth = "AUTH" - endPointsLogErrorCauseApplication = "APPLICATION" - endPointsMessage = "Method:" -) - -type ( - consumerProjectIDResolver interface { - // ResolveConsumerProjectID resolves consumer project ID from API key and operation. - ResolveConsumerProjectID(rawAPIKey, OpName string) (string, error) - } - - // Label generator function prototype - generateLabelFunc func(instance *servicecontrolreport.Instance) (string, bool) - // Metric value generator function prototype - generateMetricValueFunc func(instance *servicecontrolreport.Instance) (*sc.MetricValue, error) - - // A definition for a metric - metricDef struct { - name string - valueGenerator generateMetricValueFunc - labels []string - } - - // JSON payload - logPayload struct { - URL string `json:"url,omitempty"` - APIName string `json:"api_name,omitempty"` - APIVersion string `json:"api_version,omitempty"` - APIOperation string `json:"api_operation,omitempty"` - APIKey string `json:"api_key,omitempty"` - HTTPMethod string `json:"http_method,omitempty"` - RequestSizeInBytes int64 `json:"request_size_in_bytes,omitempty"` - HTTPResponseCode int64 `json:"http_response_code,omitempty"` - ResponseSizeInBytes int64 `json:"response_size_in_bytes,omitempty"` - RequestLatencyInMS int64 `json:"request_latency_in_ms,omitempty"` - Timestamp string `json:"timestamp,omitempty"` - Location string `json:"location,omitempty"` - LogMessage string `json:"log_message,omitempty"` - ErrorCause string `json:"error_cause,omitempty"` - } - - // reportBuilder builds metrics and logs from a single Google ServiceControl report template instance. - reportBuilder struct { - supportedMetrics []metricDef - instance *servicecontrolreport.Instance - resolver consumerProjectIDResolver - } -) - -// A map from label to its generator function -var labelGeneratorMap = map[string]generateLabelFunc{ - "/consumer_id": generateConsumerID, - "/credential_id": generateCredentialID, - "/error_type": generateErrorType, - "/protocol": generateProtocol, - "/response_code": generateResponseCode, - "/response_code_class": generateResponseCodeClass, - "/status_code": generateStatusCode, -} - -// Error types based on HTTP status code -var errorTypes = []string{ - "0xx", "1xx", "2xx", "3xx", "4xx", - "5xx", "6xx", "7xx", "8xx", "9xx"} - -// Well-known metric labels generator functions -func generateConsumerID(instance *servicecontrolreport.Instance) (string, bool) { - if instance.ApiKey == "" { - return "", false - } - return generateConsumerIDFromAPIKey(instance.ApiKey), true -} - -func generateCredentialID(instance *servicecontrolreport.Instance) (string, bool) { - if instance.ApiKey == "" { - return "", false - } - return "apiKey:" + instance.ApiKey, true -} - -func generateErrorType(instance *servicecontrolreport.Instance) (string, bool) { - if instance.ResponseCode < 400 || instance.ResponseCode >= 1000 { - return "", false - } - return errorTypes[instance.ResponseCode/100], true -} - -func generateProtocol(instance *servicecontrolreport.Instance) (string, bool) { - return instance.ApiProtocol, instance.ApiProtocol != "" -} - -func generateResponseCode(instance *servicecontrolreport.Instance) (string, bool) { - return strconv.Itoa(int(instance.ResponseCode)), true -} - -func generateResponseCodeClass(instance *servicecontrolreport.Instance) (string, bool) { - if instance.ResponseCode < 0 || instance.ResponseCode >= 1000 { - return "", false - } - return errorTypes[instance.ResponseCode/100], true -} - -func generateStatusCode(instance *servicecontrolreport.Instance) (string, bool) { - rpcCode := toRPCCode(int(instance.ResponseCode)) - return strconv.Itoa(int(rpcCode)), true -} - -// Helpers to generate metric value. -func generateRequestCount(instance *servicecontrolreport.Instance) (*sc.MetricValue, error) { - return &sc.MetricValue{ - StartTime: instance.RequestTime.UTC().Format(time.RFC3339Nano), - EndTime: instance.ResponseTime.UTC().Format(time.RFC3339Nano), - Int64Value: getInt64Address(1), - }, nil -} - -func generateRequestSize(instance *servicecontrolreport.Instance) (*sc.MetricValue, error) { - builder, err := newDistValueBuilder(sizeOption) - if err != nil { - return nil, err - } - - requestSize := float64(instance.RequestBytes) - builder.addSample(requestSize) - return &sc.MetricValue{ - StartTime: instance.RequestTime.UTC().Format(time.RFC3339Nano), - EndTime: instance.ResponseTime.UTC().Format(time.RFC3339Nano), - DistributionValue: builder.build(), - }, nil -} - -func generateBackendLatencies(instance *servicecontrolreport.Instance) (*sc.MetricValue, error) { - builder, err := newDistValueBuilder(timeOption) - if err != nil { - return nil, nil - } - - // latency in second - latency := float64(instance.ResponseLatency/time.Microsecond) / 1000000.0 - builder.addSample(latency) - return &sc.MetricValue{ - StartTime: instance.RequestTime.UTC().Format(time.RFC3339Nano), - EndTime: instance.ResponseTime.UTC().Format(time.RFC3339Nano), - DistributionValue: builder.build(), - }, nil -} - -// Helpers to generate EndPoints log entry -func generateLogSeverity(httpCode int) string { - if httpCode >= 400 { - return endPointsLogSeverityError - } - return endPointsLogSeverityInfo -} - -func generateLogMessage(instance *servicecontrolreport.Instance) string { - if instance.ApiOperation == "" { - return "" - } - return endPointsMessage + instance.ApiOperation -} - -func generateLogErrorCause(instance *servicecontrolreport.Instance) string { - if instance.ResponseCode < 400 { - return "" - } else if toRPCCode(int(instance.ResponseCode)) == rpc.PERMISSION_DENIED { - return endPointsLogErrorCauseAuth - } - return endPointsLogErrorCauseApplication -} - -/////// reportBuilder methods /////// -func (b *reportBuilder) build(op *sc.Operation) { - b.addMetricValues(op) - b.addLogEntry(op) -} - -// addMetricValues adds metric value sets to operation -// TODO(manlinl): if API key is missing, don't include consumer metrics. -func (b *reportBuilder) addMetricValues(op *sc.Operation) { - if b.supportedMetrics == nil { - return - } - - op.Labels = b.generateAPIResourceLabels() - metricValueSets := make([]*sc.MetricValueSet, 0, len(b.supportedMetrics)) - for _, metric := range b.supportedMetrics { - metricSet := new(sc.MetricValueSet) - metricSet.MetricName = metric.name - metricValue, innerErr := metric.valueGenerator(b.instance) - // Skip if error or not need to include this metric. - if innerErr != nil || metricValue == nil { - continue - } - - for _, label := range metric.labels { - b.addMetricLabel(label, op) - } - - metricSet.MetricValues = []*sc.MetricValue{metricValue} - metricValueSets = append(metricValueSets, metricSet) - } - - op.MetricValueSets = metricValueSets -} - -func (b *reportBuilder) addMetricLabel(label string, op *sc.Operation) { - if op.Labels == nil { - panic(`op.Labels should have been initialized`) - } - - if _, found := op.Labels[label]; found { - return - } - - labelGenerator, found := labelGeneratorMap[label] - if found { - labelValue, ok := labelGenerator(b.instance) - if ok { - op.Labels[label] = labelValue - } - } -} - -// addLogEntry adds Endpoint log entry to operation -func (b *reportBuilder) addLogEntry(op *sc.Operation) { - payload, err := b.generateLogJSONPayload() - if err != nil { - return - } - - log := &sc.LogEntry{ - Name: endPointsLogName, - Timestamp: b.instance.RequestTime.UTC().Format(time.RFC3339Nano), - Severity: generateLogSeverity(int(b.instance.ResponseCode)), - StructPayload: payload, - } - - if op.LogEntries == nil { - op.LogEntries = []*sc.LogEntry{log} - } else { - op.LogEntries = append(op.LogEntries, log) - } -} - -func (b *reportBuilder) generateLogJSONPayload() ([]byte, error) { - payload := logPayload{} - payload.APIKey = b.instance.ApiKey - payload.APIName = b.instance.ApiService - payload.APIOperation = b.instance.ApiOperation - payload.HTTPMethod = b.instance.RequestMethod - payload.RequestSizeInBytes = b.instance.RequestBytes - payload.HTTPResponseCode = b.instance.ResponseCode - payload.RequestLatencyInMS = int64(b.instance.ResponseLatency / time.Millisecond) - payload.Timestamp = b.instance.RequestTime.UTC().Format(time.RFC3339Nano) - payload.Location = "global" - payload.LogMessage = generateLogMessage(b.instance) - payload.ErrorCause = generateLogErrorCause(b.instance) - return json.Marshal(payload) -} - -func (b *reportBuilder) generateAPIResourceLabels() map[string]string { - labels := make(map[string]string) - if b.instance.ApiKey != "" { - consumerID := generateConsumerIDFromAPIKey(b.instance.ApiKey) - if b.instance.ApiOperation != "" { - consumerProjID, err := b.resolver.ResolveConsumerProjectID(consumerID, b.instance.ApiOperation) - if err == nil { - labels["serviceruntime.googleapis.com/consumer_project"] = consumerProjID - } - } - } - - if b.instance.ApiVersion != "" { - labels["serviceruntime.googleapis.com/api_version"] = b.instance.ApiVersion - } - - if b.instance.ApiOperation != "" { - labels["serviceruntime.googleapis.com/api_method"] = b.instance.ApiOperation - } - - // TODO(manlinl): Read location from GCE metadata server. - labels["cloud.googleapis.com/location"] = "global" - return labels -} - -func newReportBuilder(instance *servicecontrolreport.Instance, supportedMetrics []metricDef, - resolver consumerProjectIDResolver) *reportBuilder { - return &reportBuilder{ - supportedMetrics, - instance, - resolver, - } -} diff --git a/mixer/adapter/servicecontrol/reportbuilder_test.go b/mixer/adapter/servicecontrol/reportbuilder_test.go deleted file mode 100644 index 91959bcb8dde..000000000000 --- a/mixer/adapter/servicecontrol/reportbuilder_test.go +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "reflect" - "testing" - "time" - - sc "google.golang.org/api/servicecontrol/v1" - - "istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport" -) - -func getTestReportBuilder() *reportBuilder { - requestTime, _ := time.Parse(time.RFC3339Nano, "2017-10-21T17:09:05.000Z") - responseTime, _ := time.Parse(time.RFC3339Nano, "2017-10-21T17:09:05.100Z") - - return &reportBuilder{ - supportedMetrics: []metricDef{ - { - name: "test_request_count", - valueGenerator: generateRequestCount, - labels: []string{ - "/consumer_id", - "/credential_id", - "/error_type", - "/protocol", - "/response_code", - "/response_code_class", - "/status_code", - }, - }, - { - name: "test_request_size", - valueGenerator: generateRequestSize, - labels: []string{}, - }, - { - name: "test_backend_latency", - valueGenerator: generateBackendLatencies, - labels: []string{}, - }, - }, - instance: &servicecontrolreport.Instance{ - ApiVersion: "v1.0", - ApiOperation: "echo", - ApiProtocol: "REST", - ApiService: "echo.test.com", - ApiKey: "test_key", - RequestTime: requestTime, - RequestMethod: "POST", - RequestPath: "echo.test.com/echo", - RequestBytes: 10, - ResponseTime: responseTime, - ResponseCode: 200, - ResponseBytes: 1024, - ResponseLatency: 1 * time.Microsecond, - }, - resolver: &mockConsumerProjectIDResolver{ - consumerProjectID: "test_consumer_project", - }, - } -} - -func TestBuildLogEntry(t *testing.T) { - rb := getTestReportBuilder() - op := &sc.Operation{} - rb.addLogEntry(op) - - if len(op.LogEntries) != 1 { - t.Errorf(`len(op.LogEntries) != 1`) - } - - expected := - `{ - "api_name":"echo.test.com", - "api_operation":"echo", - "api_key":"test_key", - "http_method":"POST", - "request_size_in_bytes":10, - "http_response_code":200, - "timestamp":"2017-10-21T17:09:05Z", - "location":"global", - "log_message":"Method:echo" - }` - - actual := string(op.LogEntries[0].StructPayload) - if !compareJSON(expected, actual) { - t.Errorf("expect payload %v, but get %v", expected, actual) - } -} - -func TestBuildMetricValue(t *testing.T) { - rb := getTestReportBuilder() - op := &sc.Operation{} - rb.addMetricValues(op) - expected := - `{ - "labels":{ - "cloud.googleapis.com/location":"global", - "serviceruntime.googleapis.com/api_method":"echo", - "serviceruntime.googleapis.com/api_version":"v1.0", - "serviceruntime.googleapis.com/consumer_project":"test_consumer_project", - "/consumer_id":"api_key:test_key", - "/credential_id":"apiKey:test_key", - "/protocol":"REST", - "/response_code":"200", - "/response_code_class":"2xx", - "/status_code":"0" - }, - "metricValueSets":[ - { - "metricName":"test_request_count", - "metricValues":[ - { - "endTime":"2017-10-21T17:09:05.1Z", - "int64Value":"1", - "startTime":"2017-10-21T17:09:05Z" - } - ] - }, - { - "metricName":"test_request_size", - "metricValues":[ - { - "distributionValue":{ - "bucketCounts":[ - "0","0","1","0","0","0","0","0","0","0" - ], - "count":"1", - "exponentialBuckets":{ - "growthFactor":10, - "numFiniteBuckets":8, - "scale":1 - }, - "maximum":10, - "mean":10, - "minimum":10 - }, - "endTime":"2017-10-21T17:09:05.1Z", - "startTime":"2017-10-21T17:09:05Z" - } - ] - }, - { - "metricName":"test_backend_latency", - "metricValues":[ - { - "distributionValue":{ - "bucketCounts":[ - "0","1","0","0","0","0","0","0","0","0", - "0","0","0","0","0","0","0","0","0","0", - "0","0","0","0","0","0","0","0","0","0", - "0"], - "count":"1", - "exponentialBuckets":{ - "growthFactor":2, - "numFiniteBuckets":29, - "scale":0.000001 - }, - "maximum":0.000001, - "mean":0.000001, - "minimum":0.000001 - }, - "endTime":"2017-10-21T17:09:05.1Z", - "startTime":"2017-10-21T17:09:05Z" - } - ] - } - ] - }` - actual, _ := op.MarshalJSON() - if !compareJSON(expected, string(actual)) { - t.Errorf(`expect Operation: %v but get %v`, expected, string(actual)) - } -} - -func TestGenerateConsumerID(t *testing.T) { - rb := getTestReportBuilder() - id, ok := generateConsumerID(rb.instance) - if !ok || id != "api_key:test_key" { - t.Errorf(`unexpected consumer ID: (%v, %v)`, id, ok) - } - rb.instance.ApiKey = "" - id, ok = generateConsumerID(rb.instance) - if ok || id != "" { - t.Errorf(`unexpected consumer ID: (%v, %v)`, id, ok) - } -} - -func TestGenerateCredentialID(t *testing.T) { - rb := getTestReportBuilder() - id, ok := generateCredentialID(rb.instance) - if !ok || id != "apiKey:test_key" { - t.Errorf(`unexpected credential ID: (%v, %v)`, id, ok) - } - rb.instance.ApiKey = "" - id, ok = generateCredentialID(rb.instance) - if ok || id != "" { - t.Errorf(`unexpected credential ID: (%v, %v)`, id, ok) - } -} - -func TestGenerateErrorType(t *testing.T) { - rb := getTestReportBuilder() - errType, ok := generateErrorType(rb.instance) - if ok || errType != "" { - t.Error(`expect no error, but an error type is returned`) - } - rb.instance.ResponseCode = 500 - errType, ok = generateErrorType(rb.instance) - if !ok || errType != "5xx" { - t.Errorf(`expect error type: 5xx, but get (%v, %v)`, errType, ok) - } -} - -func TestGenerateProtocol(t *testing.T) { - rb := getTestReportBuilder() - protocol, ok := generateProtocol(rb.instance) - if !ok || protocol != "REST" { - t.Errorf(`expect REST, but get (%v, %v)`, protocol, ok) - } -} - -func TestGenerateResponseCodeClass(t *testing.T) { - rb := getTestReportBuilder() - class, ok := generateResponseCodeClass(rb.instance) - if !ok || class != "2xx" { - t.Errorf(`expect 2xx class, but get (%v, %v)`, class, ok) - } -} - -func TestGenerateLogSeverity(t *testing.T) { - severity := generateLogSeverity(399) - if severity != endPointsLogSeverityInfo { - t.Errorf(`unexpected serverity %v`, severity) - } - severity = generateLogSeverity(400) - if severity != endPointsLogSeverityError { - t.Errorf(`unexpected serverity %v`, severity) - } -} - -func TestGenerateLogMessage(t *testing.T) { - rb := getTestReportBuilder() - msg := generateLogMessage(rb.instance) - if msg != endPointsMessage+rb.instance.ApiOperation { - t.Errorf(`unexpected log message: %v`, msg) - } - rb.instance.ApiOperation = "" - msg = generateLogMessage(rb.instance) - if msg != "" { - t.Errorf(`unexpected log message: %v`, msg) - } -} - -func TestGenerateLogErrorCause(t *testing.T) { - rb := getTestReportBuilder() - if generateLogErrorCause(rb.instance) != "" { - t.Error(`expect no error cause when HTTP code = 200`) - } - rb.instance.ResponseCode = 403 - if generateLogErrorCause(rb.instance) != endPointsLogErrorCauseAuth { - t.Error(`expect to get auth error when HTTP code = 403`) - } - rb.instance.ResponseCode = 500 - if generateLogErrorCause(rb.instance) != endPointsLogErrorCauseApplication { - t.Error(`expect to get application error when HTTP code = 500`) - } -} - -func TestNewReportBuilder(t *testing.T) { - instance := new(servicecontrolreport.Instance) - metrics := []metricDef{ - { - name: "test_metric", - valueGenerator: generateRequestCount, - labels: []string{ - "/status_code", - }, - }, - } - resolver := new(mockConsumerProjectIDResolver) - builder := newReportBuilder(instance, metrics, resolver) - expectedBuilder := reportBuilder{ - metrics, - instance, - resolver, - } - if builder == nil || !reflect.DeepEqual(expectedBuilder, *builder) { - t.Errorf(`expect to get %v, but get %v`, expectedBuilder, *builder) - } -} diff --git a/mixer/adapter/servicecontrol/reportprocessor.go b/mixer/adapter/servicecontrol/reportprocessor.go deleted file mode 100644 index 6adc71efc48e..000000000000 --- a/mixer/adapter/servicecontrol/reportprocessor.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "context" - "fmt" - "time" - - "github.com/pborman/uuid" - sc "google.golang.org/api/servicecontrol/v1" - - "istio.io/istio/mixer/adapter/servicecontrol/config" - "istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport" - "istio.io/istio/mixer/pkg/adapter" -) - -type ( - reportImpl struct { - env adapter.Env - serviceConfig *config.GcpServiceSetting - client serviceControlClient - resolver consumerProjectIDResolver - } -) - -// ProcessReport processes servicecontrolreport data point and send metrics and logs via Google ServiceControl API. -func (r *reportImpl) ProcessReport(ctx context.Context, instances []*servicecontrolreport.Instance) error { - logger := r.env.Logger() - for _, inst := range instances { - builder := newReportBuilder(inst, supportedMetrics, r.resolver) - op := initializeOperation(inst) - builder.build(op) - if len(op.MetricValueSets) == 0 && len(op.LogEntries) == 0 { - logger.Warningf("no metric or log entry is generated, dimensions: %v", inst) - continue - } - r.scheduleReport(op) - } - return nil -} - -func (r *reportImpl) Close() error { - return nil -} - -// TODO(manlinl): Retry if report is failed to send. -func (r *reportImpl) scheduleReport(op *sc.Operation) { - r.env.ScheduleWork(func() { - logger := r.env.Logger() - request := &sc.ReportRequest{ - Operations: []*sc.Operation{op}, - } - - response, err := r.client.Report(r.serviceConfig.GoogleServiceName, request) - if err != nil || response.ReportErrors != nil { - _ = logger.Errorf("fail to send report: %v", err) - } - - if logger.DebugEnabled() { - if requestDetail, err := toFormattedJSON(request); err == nil { - logger.Debugf("request: %v", requestDetail) - } - if response != nil { - if responseDetail, err := toFormattedJSON(response); err == nil { - logger.Infof("response:%v", responseDetail) - } - } - } - }) -} - -func initializeOperation(inst *servicecontrolreport.Instance) *sc.Operation { - op := &sc.Operation{} - op.ConsumerId, _ = generateConsumerID(inst) - op.OperationId = uuid.New() - op.OperationName = inst.ApiOperation - - op.StartTime = inst.RequestTime.UTC().Format(time.RFC3339Nano) - op.EndTime = inst.ResponseTime.UTC().Format(time.RFC3339Nano) - return op -} - -func newReportProcessor(meshServiceName string, ctx *handlerContext, - resolver consumerProjectIDResolver) (*reportImpl, error) { - serviceConfig, found := ctx.serviceConfigIndex[meshServiceName] - if !found { - return nil, fmt.Errorf("unknown mesh service:%v", meshServiceName) - } - return &reportImpl{ - ctx.env, - serviceConfig, - ctx.client, - resolver, - }, nil -} diff --git a/mixer/adapter/servicecontrol/reportprocessor_test.go b/mixer/adapter/servicecontrol/reportprocessor_test.go deleted file mode 100644 index 9c157f66f0b0..000000000000 --- a/mixer/adapter/servicecontrol/reportprocessor_test.go +++ /dev/null @@ -1,284 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "context" - "reflect" - "testing" - "time" - - "google.golang.org/api/googleapi" - sc "google.golang.org/api/servicecontrol/v1" - - "istio.io/istio/mixer/adapter/servicecontrol/config" - "istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport" - at "istio.io/istio/mixer/pkg/adapter/test" -) - -type reportTest struct { - inst *servicecontrolreport.Instance - env *at.Env - client *mockSvcctrlClient - processor *reportImpl -} - -func setupReportTest(t *testing.T) *reportTest { - requestTime, err := time.Parse(time.RFC3339, "2017-11-01T17:00:00Z") - if err != nil { - t.Fatalf("fail to initialize test") - } - responseTime, err := time.Parse(time.RFC3339, "2017-11-01T17:00:01Z") - if err != nil { - t.Fatalf("fail to initialize test") - } - - mockClient := &mockSvcctrlClient{} - mockEnv := at.NewEnv(t) - test := &reportTest{ - inst: &servicecontrolreport.Instance{ - ApiVersion: "v1", - ApiOperation: "echo.foo.bar", - ApiProtocol: "gRPC", - ApiService: "echo.googleapi.com", - ApiKey: "test_key", - RequestTime: requestTime, - RequestMethod: "POST", - RequestPath: "/blah", - RequestBytes: 10, - ResponseTime: responseTime, - ResponseCode: 200, - ResponseBytes: 100, - ResponseLatency: time.Duration(1) * time.Second, - }, - env: mockEnv, - client: mockClient, - processor: &reportImpl{ - env: mockEnv, - serviceConfig: &config.GcpServiceSetting{ - MeshServiceName: "echo", - GoogleServiceName: "echo.googleapi.com", - }, - client: mockClient, - resolver: &mockConsumerProjectIDResolver{ - consumerProjectID: "project_number:123", - }, - }, - } - return test -} - -func TestReport(t *testing.T) { - test := setupReportTest(t) - test.client.setReportResponse(&sc.ReportResponse{ - ServerResponse: googleapi.ServerResponse{ - HTTPStatusCode: 200, - }, - }) - if err := test.processor.ProcessReport(context.Background(), []*servicecontrolreport.Instance{test.inst}); err != nil { - t.Errorf("Expecting success, got %v", err) - } - <-test.env.GetDoneChan() - if test.client.reportRequest == nil { - t.Error("report request failed") - } - expectedReport := ` - { - "operations":[ - { - "consumerId":"api_key:test_key", - "endTime":"2017-11-01T17:00:01Z", - "labels":{ - "/credential_id":"apiKey:test_key", - "/protocol":"gRPC", - "/response_code":"200", - "/response_code_class":"2xx", - "/status_code":"0", - "cloud.googleapis.com/location":"global", - "serviceruntime.googleapis.com/api_method":"echo.foo.bar", - "serviceruntime.googleapis.com/api_version":"v1", - "serviceruntime.googleapis.com/consumer_project": "project_number:123" - }, - "logEntries":[ - { - "name":"endpoints_log", - "severity":"INFO", - "structPayload":{ - "api_name":"echo.googleapi.com", - "api_operation":"echo.foo.bar", - "api_key":"test_key", - "http_method":"POST", - "request_size_in_bytes":10, - "http_response_code":200, - "request_latency_in_ms":1000, - "timestamp":"2017-11-01T17:00:00Z", - "location":"global", - "log_message":"Method:echo.foo.bar" - }, - "timestamp":"2017-11-01T17:00:00Z" - } - ], - "metricValueSets":[ - { - "metricName":"serviceruntime.googleapis.com/api/producer/request_count", - "metricValues":[ - { - "endTime":"2017-11-01T17:00:01Z", - "int64Value":"1", - "startTime":"2017-11-01T17:00:00Z" - } - ] - }, - { - "metricName":"serviceruntime.googleapis.com/api/producer/backend_latencies", - "metricValues":[ - { - "distributionValue":{ - "bucketCounts":[ - "0","0","0","0","0","0","0","0","0","0", - "0","0","0","0","0","0","0","0","0","0", - "1","0","0","0","0","0","0","0","0","0", - "0" - ], - "count":"1", - "exponentialBuckets":{ - "growthFactor":2, - "numFiniteBuckets":29, - "scale":0.000001 - }, - "maximum":1, - "mean":1, - "minimum":1 - }, - "endTime":"2017-11-01T17:00:01Z", - "startTime":"2017-11-01T17:00:00Z" - } - ] - }, - { - "metricName": "serviceruntime.googleapis.com/api/producer/request_sizes", - "metricValues": [ - { - "distributionValue": { - "bucketCounts": [ - "0","0","1","0","0","0","0","0","0","0" - ], - "count": "1", - "exponentialBuckets": { - "growthFactor": 10, - "numFiniteBuckets": 8, - "scale": 1 - }, - "maximum": 10, - "mean": 10, - "minimum": 10 - }, - "endTime": "2017-11-01T17:00:01Z", - "startTime": "2017-11-01T17:00:00Z" - } - ] - }, - { - "metricName":"serviceruntime.googleapis.com/api/producer/by_consumer/request_count", - "metricValues":[ - { - "endTime":"2017-11-01T17:00:01Z", - "int64Value":"1", - "startTime":"2017-11-01T17:00:00Z" - } - ] - }, - { - "metricName":"serviceruntime.googleapis.com/api/consumer/request_count", - "metricValues":[ - { - "endTime":"2017-11-01T17:00:01Z", - "int64Value":"1", - "startTime":"2017-11-01T17:00:00Z" - } - ] - }, - { - "metricName":"serviceruntime.googleapis.com/api/consumer/backend_latencies", - "metricValues":[ - { - "distributionValue":{ - "bucketCounts":[ - "0","0","0","0","0","0","0","0","0","0", - "0","0","0","0","0","0","0","0","0","0", - "1","0","0","0","0","0","0","0","0","0", - "0" - ], - "count":"1", - "exponentialBuckets":{ - "growthFactor":2, - "numFiniteBuckets":29, - "scale":0.000001 - }, - "maximum":1, - "mean":1, - "minimum":1 - }, - "endTime":"2017-11-01T17:00:01Z", - "startTime":"2017-11-01T17:00:00Z" - } - ] - } - ], - "operationName":"echo.foo.bar", - "startTime":"2017-11-01T17:00:00Z" - } - ] - }` - actualRequest := test.client.reportRequest - if actualRequest.Operations == nil || len(actualRequest.Operations) != 1 { - t.Error(`operation is not found or more than one operations exist in request`) - } - // Clear UUID in operation ID before verification - actualRequest.Operations[0].OperationId = "" - actualRequestJSON, _ := actualRequest.MarshalJSON() - - if !compareJSON(expectedReport, string(actualRequestJSON)) { - t.Errorf(`expect report actualRequest: %v, but get %v`, expectedReport, string(actualRequestJSON)) - } -} - -func TestNewReportProcessor(t *testing.T) { - ctx := &handlerContext{ - env: at.NewEnv(t), - client: new(mockSvcctrlClient), - serviceConfigIndex: map[string]*config.GcpServiceSetting{ - "echo": { - MeshServiceName: "echo", - GoogleServiceName: "echo.googleapi.com", - }, - }, - } - resolver := new(mockConsumerProjectIDResolver) - processor, err := newReportProcessor("echo", ctx, resolver) - if err != nil { - t.Fatalf(`fail to create reportProcessor %v`, err) - } - - expectedProcessor := &reportImpl{ - env: ctx.env, - serviceConfig: ctx.serviceConfigIndex["echo"], - client: ctx.client, - resolver: resolver, - } - if !reflect.DeepEqual(expectedProcessor, processor) { - t.Errorf(`expect %v but get %v`, *expectedProcessor, *processor) - } -} diff --git a/mixer/adapter/servicecontrol/servicecontrol.go b/mixer/adapter/servicecontrol/servicecontrol.go deleted file mode 100644 index 52311d968a45..000000000000 --- a/mixer/adapter/servicecontrol/servicecontrol.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// nolint: lll -//go:generate $GOPATH/src/istio.io/istio/bin/mixer_codegen.sh -a mixer/adapter/servicecontrol/config/config.proto -x "-n servicecontrol -t apikey -t servicecontrolreport -t quota" -//go:generate $GOPATH/src/istio.io/istio/bin/mixer_codegen.sh -t mixer/adapter/servicecontrol/template/servicecontrolreport/template.proto - -package servicecontrol - -import ( - "context" - "errors" - "fmt" - - pbtypes "github.com/gogo/protobuf/types" - multierror "github.com/hashicorp/go-multierror" - - "istio.io/istio/mixer/adapter/servicecontrol/config" - "istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport" - "istio.io/istio/mixer/pkg/adapter" - "istio.io/istio/mixer/template/apikey" - "istio.io/istio/mixer/template/quota" - "istio.io/istio/pkg/cache" -) - -// servicecontrol adapter builder -type builder struct { - config *config.Params // Handler config - checkDataShape map[string]*apikey.Type - reportDataShape map[string]*servicecontrolreport.Type - quotaDataShape map[string]*quota.Type -} - -////// Builder method from supported template ////// - -// SetApiKeyTypes sets apiKey template data type. -// nolint:golint -func (b *builder) SetApiKeyTypes(types map[string]*apikey.Type) { - b.checkDataShape = types -} - -// SetServicecontrolReportTypes sets servicecontrolreport template data type. -func (b *builder) SetServicecontrolReportTypes(types map[string]*servicecontrolreport.Type) { - b.reportDataShape = types -} - -// SetQuotaTypes sets qutoa template data type. -func (b *builder) SetQuotaTypes(types map[string]*quota.Type) { - b.quotaDataShape = types -} - -////// adapter.HandlerBuilder interface ////// - -// SetAdapterConfig sets adapter config on builder. -func (b *builder) SetAdapterConfig(cfg adapter.Config) { - b.config = cfg.(*config.Params) - if b.config == nil { - panic("fail to convert to config proto") - } -} - -// Validate validates adapter config. -func (b *builder) Validate() *adapter.ConfigErrors { - result := validateRuntimeConfig(b.config.RuntimeConfig) - result = multierror.Append(result, validateGcpServiceSetting(b.config.ServiceConfigs)) - if result.ErrorOrNil() != nil { - return &adapter.ConfigErrors{Multi: result} - } - return nil -} - -func validateRuntimeConfig(config *config.RuntimeConfig) *multierror.Error { - var result *multierror.Error - if config == nil { - result = multierror.Append(result, errors.New("config is nil")) - return result - } - - if config.CheckResultExpiration == nil { - result = multierror.Append(result, errors.New("config.CheckResultExpiration is nil")) - return result - } - exp, err := pbtypes.DurationFromProto(config.CheckResultExpiration) - if err != nil { - result = multierror.Append(result, err) - } else if exp <= 0 { - result = multierror.Append( - result, fmt.Errorf("expect positive CheckResultExpiration, but get %v", exp)) - } - - return result -} - -func validateGcpServiceSetting(settings []*config.GcpServiceSetting) *multierror.Error { - var result *multierror.Error - if len(settings) == 0 { - result = multierror.Append(result, errors.New("settings is nil or empty")) - return result - } - for _, setting := range settings { - if setting.MeshServiceName == "" || setting.GoogleServiceName == "" { - result = multierror.Append(result, - errors.New("settings.MeshServiceName and settings.GoogleServiceName must be non-empty")) - } - - if setting.Quotas != nil { - for _, qCfg := range setting.Quotas { - if qCfg.Name == "" { - result = multierror.Append(result, errors.New("encountered an empty QuotaName")) - } - if qCfg.Expiration == nil { - result = multierror.Append(result, errors.New("quota expiration is nil")) - } else { - expiration, err := pbtypes.DurationFromProto(qCfg.Expiration) - if err != nil { - result = multierror.Append(result, err) - } else if expiration <= 0 { - result = multierror.Append( - result, fmt.Errorf( - `quota must have positive expiration, but get %v`, expiration)) - } - } - } - } - } - return result -} - -// Build builds an adapter handler. -func (b *builder) Build(context context.Context, env adapter.Env) (adapter.Handler, error) { - var _ apikey.HandlerBuilder = (*builder)(nil) - var _ servicecontrolreport.HandlerBuilder = (*builder)(nil) - var _ quota.HandlerBuilder = (*builder)(nil) - - client, err := newClient(b.config.CredentialPath) - if err != nil { - return nil, err - } - - ctx := initializeHandlerContext(env, b.config, client) - ctx.checkDataShape = b.checkDataShape - ctx.reportDataShape = b.reportDataShape - return newHandler(ctx), nil -} - -func initializeHandlerContext(env adapter.Env, adapterCfg *config.Params, - client serviceControlClient) *handlerContext { - - configIndex := make(map[string]*config.GcpServiceSetting, len(adapterCfg.ServiceConfigs)) - for _, cfg := range adapterCfg.ServiceConfigs { - configIndex[cfg.MeshServiceName] = cfg - } - - cacheExp := toDuration(adapterCfg.RuntimeConfig.CheckResultExpiration) - // Set eviction interval to half of expiration time. That said the cache would scan and evict expired entries every - // half of expiation time period. - checkCache := cache.NewLRU(cacheExp, cacheExp/2, adapterCfg.RuntimeConfig.CheckCacheSize) - - return &handlerContext{ - env: env, - config: adapterCfg, - serviceConfigIndex: configIndex, - checkResponseCache: checkCache, - client: client, - } -} - -// GetInfo registers Adapter with Mixer. -func GetInfo() adapter.Info { - return adapter.Info{ - Name: "servicecontrol", - Impl: "istio.io/istio/mixer/adapter/servicecontrol", - Description: "Interface to Google Service Control", - SupportedTemplates: []string{ - apikey.TemplateName, - servicecontrolreport.TemplateName, - quota.TemplateName, - }, - DefaultConfig: &config.Params{}, - NewBuilder: func() adapter.HandlerBuilder { return &builder{} }, - } -} diff --git a/mixer/adapter/servicecontrol/servicecontrol_test.go b/mixer/adapter/servicecontrol/servicecontrol_test.go deleted file mode 100644 index a3d21bb89a85..000000000000 --- a/mixer/adapter/servicecontrol/servicecontrol_test.go +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "reflect" - "testing" - - pbtypes "github.com/gogo/protobuf/types" - - "istio.io/istio/mixer/adapter/servicecontrol/config" - "istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport" - at "istio.io/istio/mixer/pkg/adapter/test" - "istio.io/istio/mixer/template/apikey" - "istio.io/istio/mixer/template/quota" -) - -func TestInitializeHandlerContext(t *testing.T) { - adapterCfg := getTestAdapterConfig() - ctx := initializeHandlerContext(at.NewEnv(t), adapterCfg, &mockSvcctrlClient{}) - - expectedIdx := map[string]*config.GcpServiceSetting{ - "service_a": adapterCfg.ServiceConfigs[0], - "service_b": adapterCfg.ServiceConfigs[1], - } - if !reflect.DeepEqual(expectedIdx, ctx.serviceConfigIndex) { - t.Errorf("expect serviceConfigIndex :%v, but get %v", - expectedIdx, ctx.serviceConfigIndex) - } - if ctx.checkResponseCache == nil { - t.Errorf("fail to initialize check cache") - } -} - -func TestConfigValidation(t *testing.T) { - - { - b := getTestBuilder() - err := b.Validate() - if err != nil { - t.Errorf(`valid config, but get error %v`, err.Multi) - } - } - - invalidBuilders := []*builder{ - func() *builder { - b := getTestBuilder() - b.config.RuntimeConfig = nil - return b - }(), - func() *builder { - b := getTestBuilder() - b.config.ServiceConfigs = []*config.GcpServiceSetting{} - return b - }(), - func() *builder { - b := getTestBuilder() - b.config.ServiceConfigs = nil - return b - }(), - func() *builder { - b := getTestBuilder() - b.config.ServiceConfigs[0].MeshServiceName = "" - return b - }(), - func() *builder { - b := getTestBuilder() - b.config.ServiceConfigs[0].GoogleServiceName = "" - return b - }(), - func() *builder { - b := getTestBuilder() - b.config.ServiceConfigs[0].Quotas[0].Name = "" - return b - }(), - func() *builder { - b := getTestBuilder() - b.config.ServiceConfigs[0].Quotas[0].Expiration = nil - return b - }(), - func() *builder { - b := getTestBuilder() - expiration := b.config.ServiceConfigs[0].Quotas[0].Expiration - expiration.Seconds = 0 - expiration.Nanos = 0 - return b - }(), - } - - for _, b := range invalidBuilders { - err := b.Validate() - if err == nil { - t.Errorf(`fail to detect invalid config: %v`, *b.config) - } - } -} - -func TestGetInfo(t *testing.T) { - info := GetInfo() - expectedSupportedTemplate := []string{ - apikey.TemplateName, - servicecontrolreport.TemplateName, - quota.TemplateName, - } - if !reflect.DeepEqual(expectedSupportedTemplate, info.SupportedTemplates) { - t.Errorf("expected supported templates: %v, but get %v", - expectedSupportedTemplate, - info.SupportedTemplates) - } -} - -func getTestAdapterConfig() *config.Params { - return &config.Params{ - RuntimeConfig: &config.RuntimeConfig{CheckCacheSize: 10, - CheckResultExpiration: &pbtypes.Duration{ - Seconds: 10, - }, - }, - ServiceConfigs: []*config.GcpServiceSetting{ - { - MeshServiceName: "service_a", - GoogleServiceName: "service_a.googleapi.com", - Quotas: []*config.Quota{ - { - // nolint: goimports - Name: "request-count", - GoogleQuotaMetricName: "request-metric", - Expiration: &pbtypes.Duration{ - Seconds: 10, - }, - }, - }, - }, - { - MeshServiceName: "service_b", - GoogleServiceName: "service_b.googleapi.com", - }, - }, - } -} - -func getTestBuilder() *builder { - return &builder{ - config: getTestAdapterConfig(), - } -} diff --git a/mixer/adapter/servicecontrol/template/servicecontrolreport/servicecontrolReport.pb.html b/mixer/adapter/servicecontrol/template/servicecontrolreport/servicecontrolReport.pb.html deleted file mode 100644 index 2b2ba63b4a3e..000000000000 --- a/mixer/adapter/servicecontrol/template/servicecontrolreport/servicecontrolReport.pb.html +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Service Control Report -description: A template used by the Google Service Control adapter. -location: https://istio.io/docs/reference/config/policy-and-telemetry/templates/servicecontrolreport.html -layout: protoc-gen-docs -generator: protoc-gen-docs -aliases: - - /docs/reference/config/adapters/servicecontrolreport.html -number_of_entries: 1 ---- -

The servicecontrolreport template is used by the Google Service Control -adapter.

- -

Example config:

- -
apiVersion: "config.istio.io/v1alpha2"
-kind: servicecontrolreport
-metadata:
-  name: report
-  namespace: istio-system
-spec:
-  api_version : api.version | ""
-  api_operation : api.operation | ""
-  api_protocol : api.protocol | ""
-  api_service : api.service | ""
-  api_key : api.key | ""
-  request_time : request.time
-  request_method : request.method
-  request_path : request.path
-  request_bytes: request.size
-  response_time : response.time
-  response_code : response.code | 520
-  response_bytes : response.size | 0
-  response_latency : response.duration | "0ms"
-
- -

Template

-
-

A template used by Google Service Control (servicecontrol) adapter. The adapter -generates metrics and logentry for each request based on the data point -defined by this template.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
apiVersionstring -
apiOperationstring -
apiProtocolstring -
apiServicestring -
apiKeystring -
requestTimeistio.policy.v1beta1.TimeStamp -
requestMethodstring -
requestPathstring -
requestBytesint64 -
responseTimeistio.policy.v1beta1.TimeStamp -
responseCodeint64 -
responseBytesint64 -
responseLatencyistio.policy.v1beta1.Duration -
-
diff --git a/mixer/adapter/servicecontrol/template/servicecontrolreport/template.proto b/mixer/adapter/servicecontrol/template/servicecontrolreport/template.proto deleted file mode 100644 index 109cea5c13e6..000000000000 --- a/mixer/adapter/servicecontrol/template/servicecontrolreport/template.proto +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -// $title: Service Control Report -// $description: A template used by the Google Service Control adapter. -// $location: https://istio.io/docs/reference/config/policy-and-telemetry/templates/servicecontrolreport.html -// $aliases: -// $ - /docs/reference/config/adapters/servicecontrolreport.html - -// The `servicecontrolreport` template is used by the [Google Service Control](https://istio.io/docs/reference/config/policy-and-telemetry/adapters/servicecontrol/) -// adapter. -// -// Example config: -// -// ```yaml -// apiVersion: "config.istio.io/v1alpha2" -// kind: servicecontrolreport -// metadata: -// name: report -// namespace: istio-system -// spec: -// api_version : api.version | "" -// api_operation : api.operation | "" -// api_protocol : api.protocol | "" -// api_service : api.service | "" -// api_key : api.key | "" -// request_time : request.time -// request_method : request.method -// request_path : request.path -// request_bytes: request.size -// response_time : response.time -// response_code : response.code | 520 -// response_bytes : response.size | 0 -// response_latency : response.duration | "0ms" -// ``` -package servicecontrolReport; - -import "policy/v1beta1/type.proto"; -import "mixer/adapter/model/v1beta1/extensions.proto"; - -option (istio.mixer.adapter.model.v1beta1.template_variety) = TEMPLATE_VARIETY_REPORT; - -// A template used by Google Service Control (servicecontrol) adapter. The adapter -// generates metrics and logentry for each request based on the data point -// defined by this template. -message Template { - string api_version = 1; - string api_operation = 2; - string api_protocol = 3; - string api_service = 4; - string api_key = 5; - - istio.policy.v1beta1.TimeStamp request_time = 6; - string request_method = 7; - string request_path = 8; - int64 request_bytes = 9; - - istio.policy.v1beta1.TimeStamp response_time = 10; - int64 response_code = 11; - int64 response_bytes = 12; - istio.policy.v1beta1.Duration response_latency = 13; -} diff --git a/mixer/adapter/servicecontrol/template/servicecontrolreport/template.yaml b/mixer/adapter/servicecontrol/template/servicecontrolreport/template.yaml deleted file mode 100644 index c6f5a36c5132..000000000000 --- a/mixer/adapter/servicecontrol/template/servicecontrolreport/template.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# this config is created through command -# mixgen template -d $GOPATH/src/istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.descriptor_set -o $GOPATH/src/istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport/template.yaml -n servicecontrolreport -apiVersion: "config.istio.io/v1alpha2" -kind: template -metadata: - name: servicecontrolreport - namespace: istio-system -spec: - descriptor: "CvD6AgogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiJNChFGaWxlRGVzY3JpcHRvclNldBI4CgRmaWxlGAEgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkZpbGVEZXNjcmlwdG9yUHJvdG9SBGZpbGUi5AQKE0ZpbGVEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIYCgdwYWNrYWdlGAIgASgJUgdwYWNrYWdlEh4KCmRlcGVuZGVuY3kYAyADKAlSCmRlcGVuZGVuY3kSKwoRcHVibGljX2RlcGVuZGVuY3kYCiADKAVSEHB1YmxpY0RlcGVuZGVuY3kSJwoPd2Vha19kZXBlbmRlbmN5GAsgAygFUg53ZWFrRGVwZW5kZW5jeRJDCgxtZXNzYWdlX3R5cGUYBCADKAsyIC5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvUgttZXNzYWdlVHlwZRJBCgllbnVtX3R5cGUYBSADKAsyJC5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b1IIZW51bVR5cGUSQQoHc2VydmljZRgGIAMoCzInLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvUgdzZXJ2aWNlEkMKCWV4dGVuc2lvbhgHIAMoCzIlLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b1IJZXh0ZW5zaW9uEjYKB29wdGlvbnMYCCABKAsyHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnNSB29wdGlvbnMSSQoQc291cmNlX2NvZGVfaW5mbxgJIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb1IOc291cmNlQ29kZUluZm8SFgoGc3ludGF4GAwgASgJUgZzeW50YXgiuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQifAoVRXh0ZW5zaW9uUmFuZ2VPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIimAYKFEZpZWxkRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAMgASgFUgZudW1iZXISQQoFbGFiZWwYBCABKA4yKy5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWxSBWxhYmVsEj4KBHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZVIEdHlwZRIbCgl0eXBlX25hbWUYBiABKAlSCHR5cGVOYW1lEhoKCGV4dGVuZGVlGAIgASgJUghleHRlbmRlZRIjCg1kZWZhdWx0X3ZhbHVlGAcgASgJUgxkZWZhdWx0VmFsdWUSHwoLb25lb2ZfaW5kZXgYCSABKAVSCm9uZW9mSW5kZXgSGwoJanNvbl9uYW1lGAogASgJUghqc29uTmFtZRI3CgdvcHRpb25zGAggASgLMh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc1IHb3B0aW9ucyK2AgoEVHlwZRIPCgtUWVBFX0RPVUJMRRABEg4KClRZUEVfRkxPQVQQAhIOCgpUWVBFX0lOVDY0EAMSDwoLVFlQRV9VSU5UNjQQBBIOCgpUWVBFX0lOVDMyEAUSEAoMVFlQRV9GSVhFRDY0EAYSEAoMVFlQRV9GSVhFRDMyEAcSDQoJVFlQRV9CT09MEAgSDwoLVFlQRV9TVFJJTkcQCRIOCgpUWVBFX0dST1VQEAoSEAoMVFlQRV9NRVNTQUdFEAsSDgoKVFlQRV9CWVRFUxAMEg8KC1RZUEVfVUlOVDMyEA0SDQoJVFlQRV9FTlVNEA4SEQoNVFlQRV9TRklYRUQzMhAPEhEKDVRZUEVfU0ZJWEVENjQQEBIPCgtUWVBFX1NJTlQzMhAREg8KC1RZUEVfU0lOVDY0EBIiQwoFTGFiZWwSEgoOTEFCRUxfT1BUSU9OQUwQARISCg5MQUJFTF9SRVFVSVJFRBACEhIKDkxBQkVMX1JFUEVBVEVEEAMiYwoUT25lb2ZEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI3CgdvcHRpb25zGAIgASgLMh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc1IHb3B0aW9ucyLjAgoTRW51bURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEj8KBXZhbHVlGAIgAygLMikuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b1IFdmFsdWUSNgoHb3B0aW9ucxgDIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc1IHb3B0aW9ucxJdCg5yZXNlcnZlZF9yYW5nZRgEIAMoCzI2Lmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYBSADKAlSDHJlc2VydmVkTmFtZRo7ChFFbnVtUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQigwEKGEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEhYKBm51bWJlchgCIAEoBVIGbnVtYmVyEjsKB29wdGlvbnMYAyABKAsyIS5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc1IHb3B0aW9ucyKnAQoWU2VydmljZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEj4KBm1ldGhvZBgCIAMoCzImLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG9SBm1ldGhvZBI5CgdvcHRpb25zGAMgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zUgdvcHRpb25zIokCChVNZXRob2REZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIdCgppbnB1dF90eXBlGAIgASgJUglpbnB1dFR5cGUSHwoLb3V0cHV0X3R5cGUYAyABKAlSCm91dHB1dFR5cGUSOAoHb3B0aW9ucxgEIAEoCzIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zUgdvcHRpb25zEjAKEGNsaWVudF9zdHJlYW1pbmcYBSABKAg6BWZhbHNlUg9jbGllbnRTdHJlYW1pbmcSMAoQc2VydmVyX3N0cmVhbWluZxgGIAEoCDoFZmFsc2VSD3NlcnZlclN0cmVhbWluZyK5CAoLRmlsZU9wdGlvbnMSIQoMamF2YV9wYWNrYWdlGAEgASgJUgtqYXZhUGFja2FnZRIwChRqYXZhX291dGVyX2NsYXNzbmFtZRgIIAEoCVISamF2YU91dGVyQ2xhc3NuYW1lEjUKE2phdmFfbXVsdGlwbGVfZmlsZXMYCiABKAg6BWZhbHNlUhFqYXZhTXVsdGlwbGVGaWxlcxJECh1qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaBgUIAEoCEICGAFSGWphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2gSOgoWamF2YV9zdHJpbmdfY2hlY2tfdXRmOBgbIAEoCDoFZmFsc2VSE2phdmFTdHJpbmdDaGVja1V0ZjgSUwoMb3B0aW1pemVfZm9yGAkgASgOMikuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZToFU1BFRURSC29wdGltaXplRm9yEh0KCmdvX3BhY2thZ2UYCyABKAlSCWdvUGFja2FnZRI1ChNjY19nZW5lcmljX3NlcnZpY2VzGBAgASgIOgVmYWxzZVIRY2NHZW5lcmljU2VydmljZXMSOQoVamF2YV9nZW5lcmljX3NlcnZpY2VzGBEgASgIOgVmYWxzZVITamF2YUdlbmVyaWNTZXJ2aWNlcxI1ChNweV9nZW5lcmljX3NlcnZpY2VzGBIgASgIOgVmYWxzZVIRcHlHZW5lcmljU2VydmljZXMSNwoUcGhwX2dlbmVyaWNfc2VydmljZXMYKiABKAg6BWZhbHNlUhJwaHBHZW5lcmljU2VydmljZXMSJQoKZGVwcmVjYXRlZBgXIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSLwoQY2NfZW5hYmxlX2FyZW5hcxgfIAEoCDoFZmFsc2VSDmNjRW5hYmxlQXJlbmFzEioKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJUg9vYmpjQ2xhc3NQcmVmaXgSKQoQY3NoYXJwX25hbWVzcGFjZRglIAEoCVIPY3NoYXJwTmFtZXNwYWNlEiEKDHN3aWZ0X3ByZWZpeBgnIAEoCVILc3dpZnRQcmVmaXgSKAoQcGhwX2NsYXNzX3ByZWZpeBgoIAEoCVIOcGhwQ2xhc3NQcmVmaXgSIwoNcGhwX25hbWVzcGFjZRgpIAEoCVIMcGhwTmFtZXNwYWNlElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIjoKDE9wdGltaXplTW9kZRIJCgVTUEVFRBABEg0KCUNPREVfU0laRRACEhAKDExJVEVfUlVOVElNRRADKgkI6AcQgICAgAJKBAgmECci0QIKDk1lc3NhZ2VPcHRpb25zEjwKF21lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0GAEgASgIOgVmYWxzZVIUbWVzc2FnZVNldFdpcmVGb3JtYXQSTAofbm9fc3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvchgCIAEoCDoFZmFsc2VSHG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3ISJQoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSGwoJbWFwX2VudHJ5GAcgASgIUghtYXBFbnRyeRJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQICBAJSgQICRAKIuIDCgxGaWVsZE9wdGlvbnMSQQoFY3R5cGUYASABKA4yIy5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkNUeXBlOgZTVFJJTkdSBWN0eXBlEhYKBnBhY2tlZBgCIAEoCFIGcGFja2VkEkcKBmpzdHlwZRgGIAEoDjIkLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuSlNUeXBlOglKU19OT1JNQUxSBmpzdHlwZRIZCgRsYXp5GAUgASgIOgVmYWxzZVIEbGF6eRIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIZCgR3ZWFrGAogASgIOgVmYWxzZVIEd2VhaxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiIvCgVDVHlwZRIKCgZTVFJJTkcQABIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0KCUpTX05PUk1BTBAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACKgkI6AcQgICAgAJKBAgEEAUicwoMT25lb2ZPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIiwAEKC0VudW1PcHRpb25zEh8KC2FsbG93X2FsaWFzGAIgASgIUgphbGxvd0FsaWFzEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgFEAYingEKEEVudW1WYWx1ZU9wdGlvbnMSJQoKZGVwcmVjYXRlZBgBIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiKcAQoOU2VydmljZU9wdGlvbnMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiLgAgoNTWV0aG9kT3B0aW9ucxIlCgpkZXByZWNhdGVkGCEgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJxChFpZGVtcG90ZW5jeV9sZXZlbBgiIAEoDjIvLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zLklkZW1wb3RlbmN5TGV2ZWw6E0lERU1QT1RFTkNZX1VOS05PV05SEGlkZW1wb3RlbmN5TGV2ZWwSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iUAoQSWRlbXBvdGVuY3lMZXZlbBIXChNJREVNUE9URU5DWV9VTktOT1dOEAASEwoPTk9fU0lERV9FRkZFQ1RTEAESDgoKSURFTVBPVEVOVBACKgkI6AcQgICAgAIimgMKE1VuaW50ZXJwcmV0ZWRPcHRpb24SQQoEbmFtZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uLk5hbWVQYXJ0UgRuYW1lEikKEGlkZW50aWZpZXJfdmFsdWUYAyABKAlSD2lkZW50aWZpZXJWYWx1ZRIsChJwb3NpdGl2ZV9pbnRfdmFsdWUYBCABKARSEHBvc2l0aXZlSW50VmFsdWUSLAoSbmVnYXRpdmVfaW50X3ZhbHVlGAUgASgDUhBuZWdhdGl2ZUludFZhbHVlEiEKDGRvdWJsZV92YWx1ZRgGIAEoAVILZG91YmxlVmFsdWUSIQoMc3RyaW5nX3ZhbHVlGAcgASgMUgtzdHJpbmdWYWx1ZRInCg9hZ2dyZWdhdGVfdmFsdWUYCCABKAlSDmFnZ3JlZ2F0ZVZhbHVlGkoKCE5hbWVQYXJ0EhsKCW5hbWVfcGFydBgBIAIoCVIIbmFtZVBhcnQSIQoMaXNfZXh0ZW5zaW9uGAIgAigIUgtpc0V4dGVuc2lvbiKnAgoOU291cmNlQ29kZUluZm8SRAoIbG9jYXRpb24YASADKAsyKC5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb25SCGxvY2F0aW9uGs4BCghMb2NhdGlvbhIWCgRwYXRoGAEgAygFQgIQAVIEcGF0aBIWCgRzcGFuGAIgAygFQgIQAVIEc3BhbhIpChBsZWFkaW5nX2NvbW1lbnRzGAMgASgJUg9sZWFkaW5nQ29tbWVudHMSKwoRdHJhaWxpbmdfY29tbWVudHMYBCABKAlSEHRyYWlsaW5nQ29tbWVudHMSOgoZbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cxgGIAMoCVIXbGVhZGluZ0RldGFjaGVkQ29tbWVudHMi0QEKEUdlbmVyYXRlZENvZGVJbmZvEk0KCmFubm90YXRpb24YASADKAsyLS5nb29nbGUucHJvdG9idWYuR2VuZXJhdGVkQ29kZUluZm8uQW5ub3RhdGlvblIKYW5ub3RhdGlvbhptCgpBbm5vdGF0aW9uEhYKBHBhdGgYASADKAVCAhABUgRwYXRoEh8KC3NvdXJjZV9maWxlGAIgASgJUgpzb3VyY2VGaWxlEhQKBWJlZ2luGAMgASgFUgViZWdpbhIQCgNlbmQYBCABKAVSA2VuZEKPAQoTY29tLmdvb2dsZS5wcm90b2J1ZkIQRGVzY3JpcHRvclByb3Rvc0gBWj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90b2MtZ2VuLWdvL2Rlc2NyaXB0b3I7ZGVzY3JpcHRvcvgBAaICA0dQQqoCGkdvb2dsZS5Qcm90b2J1Zi5SZWZsZWN0aW9uSqrAAgoHEgUnAOcGAQqqDwoBDBIDJwASMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoy2wIgQXV0aG9yOiBrZW50b25AZ29vZ2xlLmNvbSAoS2VudG9uIFZhcmRhKQogIEJhc2VkIG9uIG9yaWdpbmFsIFByb3RvY29sIEJ1ZmZlcnMgZGVzaWduIGJ5CiAgU2FuamF5IEdoZW1hd2F0LCBKZWZmIERlYW4sIGFuZCBvdGhlcnMuCgogVGhlIG1lc3NhZ2VzIGluIHRoaXMgZmlsZSBkZXNjcmliZSB0aGUgZGVmaW5pdGlvbnMgZm91bmQgaW4gLnByb3RvIGZpbGVzLgogQSB2YWxpZCAucHJvdG8gZmlsZSBjYW4gYmUgdHJhbnNsYXRlZCBkaXJlY3RseSB0byBhIEZpbGVEZXNjcmlwdG9yUHJvdG8KIHdpdGhvdXQgYW55IG90aGVyIGluZm9ybWF0aW9uIChlLmcuIHdpdGhvdXQgcmVhZGluZyBpdHMgaW1wb3J0cykuCgoICgECEgMpCBcKCAoBCBIDKgBVCgsKBAjnBwASAyoAVQoMCgUI5wcAAhIDKgcRCg0KBgjnBwACABIDKgcRCg4KBwjnBwACAAESAyoHEQoMCgUI5wcABxIDKhRUCggKAQgSAysALAoLCgQI5wcBEgMrACwKDAoFCOcHAQISAysHEwoNCgYI5wcBAgASAysHEwoOCgcI5wcBAgABEgMrBxMKDAoFCOcHAQcSAysWKwoICgEIEgMsADEKCwoECOcHAhIDLAAxCgwKBQjnBwICEgMsBxsKDQoGCOcHAgIAEgMsBxsKDgoHCOcHAgIAARIDLAcbCgwKBQjnBwIHEgMsHjAKCAoBCBIDLQA3CgsKBAjnBwMSAy0ANwoMCgUI5wcDAhIDLQcXCg0KBgjnBwMCABIDLQcXCg4KBwjnBwMCAAESAy0HFwoMCgUI5wcDBxIDLRo2CggKAQgSAy4AIQoLCgQI5wcEEgMuACEKDAoFCOcHBAISAy4HGAoNCgYI5wcEAgASAy4HGAoOCgcI5wcEAgABEgMuBxgKDAoFCOcHBAcSAy4bIAoICgEIEgMvAB8KCwoECOcHBRIDLwAfCgwKBQjnBwUCEgMvBxcKDQoGCOcHBQIAEgMvBxcKDgoHCOcHBQIAARIDLwcXCgwKBQjnBwUDEgMvGh4KCAoBCBIDMwAcCoEBCgQI5wcGEgMzABwadCBkZXNjcmlwdG9yLnByb3RvIG11c3QgYmUgb3B0aW1pemVkIGZvciBzcGVlZCBiZWNhdXNlIHJlZmxlY3Rpb24tYmFzZWQKIGFsZ29yaXRobXMgZG9uJ3Qgd29yayBkdXJpbmcgYm9vdHN0cmFwcGluZy4KCgwKBQjnBwYCEgMzBxMKDQoGCOcHBgIAEgMzBxMKDgoHCOcHBgIAARIDMwcTCgwKBQjnBwYDEgMzFhsKagoCBAASBDcAOQEaXiBUaGUgcHJvdG9jb2wgY29tcGlsZXIgY2FuIG91dHB1dCBhIEZpbGVEZXNjcmlwdG9yU2V0IGNvbnRhaW5pbmcgdGhlIC5wcm90bwogZmlsZXMgaXQgcGFyc2VzLgoKCgoDBAABEgM3CBkKCwoEBAACABIDOAIoCgwKBQQAAgAEEgM4AgoKDAoFBAACAAYSAzgLHgoMCgUEAAIAARIDOB8jCgwKBQQAAgADEgM4JicKLwoCBAESBDwAWQEaIyBEZXNjcmliZXMgYSBjb21wbGV0ZSAucHJvdG8gZmlsZS4KCgoKAwQBARIDPAgbCjkKBAQBAgASAz0CGyIsIGZpbGUgbmFtZSwgcmVsYXRpdmUgdG8gcm9vdCBvZiBzb3VyY2UgdHJlZQoKDAoFBAECAAQSAz0CCgoMCgUEAQIABRIDPQsRCgwKBQQBAgABEgM9EhYKDAoFBAECAAMSAz0ZGgoqCgQEAQIBEgM+Ah4iHSBlLmcuICJmb28iLCAiZm9vLmJhciIsIGV0Yy4KCgwKBQQBAgEEEgM+AgoKDAoFBAECAQUSAz4LEQoMCgUEAQIBARIDPhIZCgwKBQQBAgEDEgM+HB0KNAoEBAECAhIDQQIhGicgTmFtZXMgb2YgZmlsZXMgaW1wb3J0ZWQgYnkgdGhpcyBmaWxlLgoKDAoFBAECAgQSA0ECCgoMCgUEAQICBRIDQQsRCgwKBQQBAgIBEgNBEhwKDAoFBAECAgMSA0EfIApRCgQEAQIDEgNDAigaRCBJbmRleGVzIG9mIHRoZSBwdWJsaWMgaW1wb3J0ZWQgZmlsZXMgaW4gdGhlIGRlcGVuZGVuY3kgbGlzdCBhYm92ZS4KCgwKBQQBAgMEEgNDAgoKDAoFBAECAwUSA0MLEAoMCgUEAQIDARIDQxEiCgwKBQQBAgMDEgNDJScKegoEBAECBBIDRgImGm0gSW5kZXhlcyBvZiB0aGUgd2VhayBpbXBvcnRlZCBmaWxlcyBpbiB0aGUgZGVwZW5kZW5jeSBsaXN0LgogRm9yIEdvb2dsZS1pbnRlcm5hbCBtaWdyYXRpb24gb25seS4gRG8gbm90IHVzZS4KCgwKBQQBAgQEEgNGAgoKDAoFBAECBAUSA0YLEAoMCgUEAQIEARIDRhEgCgwKBQQBAgQDEgNGIyUKNgoEBAECBRIDSQIsGikgQWxsIHRvcC1sZXZlbCBkZWZpbml0aW9ucyBpbiB0aGlzIGZpbGUuCgoMCgUEAQIFBBIDSQIKCgwKBQQBAgUGEgNJCxoKDAoFBAECBQESA0kbJwoMCgUEAQIFAxIDSSorCgsKBAQBAgYSA0oCLQoMCgUEAQIGBBIDSgIKCgwKBQQBAgYGEgNKCx4KDAoFBAECBgESA0ofKAoMCgUEAQIGAxIDSissCgsKBAQBAgcSA0sCLgoMCgUEAQIHBBIDSwIKCgwKBQQBAgcGEgNLCyEKDAoFBAECBwESA0siKQoMCgUEAQIHAxIDSywtCgsKBAQBAggSA0wCLgoMCgUEAQIIBBIDTAIKCgwKBQQBAggGEgNMCx8KDAoFBAECCAESA0wgKQoMCgUEAQIIAxIDTCwtCgsKBAQBAgkSA04CIwoMCgUEAQIJBBIDTgIKCgwKBQQBAgkGEgNOCxYKDAoFBAECCQESA04XHgoMCgUEAQIJAxIDTiEiCvQBCgQEAQIKEgNUAi8a5gEgVGhpcyBmaWVsZCBjb250YWlucyBvcHRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgc291cmNlIGNvZGUuCiBZb3UgbWF5IHNhZmVseSByZW1vdmUgdGhpcyBlbnRpcmUgZmllbGQgd2l0aG91dCBoYXJtaW5nIHJ1bnRpbWUKIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRlc2NyaXB0b3JzIC0tIHRoZSBpbmZvcm1hdGlvbiBpcyBuZWVkZWQgb25seSBieQogZGV2ZWxvcG1lbnQgdG9vbHMuCgoMCgUEAQIKBBIDVAIKCgwKBQQBAgoGEgNUCxkKDAoFBAECCgESA1QaKgoMCgUEAQIKAxIDVC0uCl0KBAQBAgsSA1gCHhpQIFRoZSBzeW50YXggb2YgdGhlIHByb3RvIGZpbGUuCiBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmUgInByb3RvMiIgYW5kICJwcm90bzMiLgoKDAoFBAECCwQSA1gCCgoMCgUEAQILBRIDWAsRCgwKBQQBAgsBEgNYEhgKDAoFBAECCwMSA1gbHQonCgIEAhIEXAB8ARobIERlc2NyaWJlcyBhIG1lc3NhZ2UgdHlwZS4KCgoKAwQCARIDXAgXCgsKBAQCAgASA10CGwoMCgUEAgIABBIDXQIKCgwKBQQCAgAFEgNdCxEKDAoFBAICAAESA10SFgoMCgUEAgIAAxIDXRkaCgsKBAQCAgESA18CKgoMCgUEAgIBBBIDXwIKCgwKBQQCAgEGEgNfCx8KDAoFBAICAQESA18gJQoMCgUEAgIBAxIDXygpCgsKBAQCAgISA2ACLgoMCgUEAgICBBIDYAIKCgwKBQQCAgIGEgNgCx8KDAoFBAICAgESA2AgKQoMCgUEAgICAxIDYCwtCgsKBAQCAgMSA2ICKwoMCgUEAgIDBBIDYgIKCgwKBQQCAgMGEgNiCxoKDAoFBAICAwESA2IbJgoMCgUEAgIDAxIDYikqCgsKBAQCAgQSA2MCLQoMCgUEAgIEBBIDYwIKCgwKBQQCAgQGEgNjCx4KDAoFBAICBAESA2MfKAoMCgUEAgIEAxIDYyssCgwKBAQCAwASBGUCagMKDAoFBAIDAAESA2UKGAoNCgYEAgMAAgASA2YEHQoOCgcEAgMAAgAEEgNmBAwKDgoHBAIDAAIABRIDZg0SCg4KBwQCAwACAAESA2YTGAoOCgcEAgMAAgADEgNmGxwKDQoGBAIDAAIBEgNnBBsKDgoHBAIDAAIBBBIDZwQMCg4KBwQCAwACAQUSA2cNEgoOCgcEAgMAAgEBEgNnExYKDgoHBAIDAAIBAxIDZxkaCg0KBgQCAwACAhIDaQQvCg4KBwQCAwACAgQSA2kEDAoOCgcEAgMAAgIGEgNpDSIKDgoHBAIDAAICARIDaSMqCg4KBwQCAwACAgMSA2ktLgoLCgQEAgIFEgNrAi4KDAoFBAICBQQSA2sCCgoMCgUEAgIFBhIDawsZCgwKBQQCAgUBEgNrGikKDAoFBAICBQMSA2ssLQoLCgQEAgIGEgNtAi8KDAoFBAICBgQSA20CCgoMCgUEAgIGBhIDbQsfCgwKBQQCAgYBEgNtICoKDAoFBAICBgMSA20tLgoLCgQEAgIHEgNvAiYKDAoFBAICBwQSA28CCgoMCgUEAgIHBhIDbwsZCgwKBQQCAgcBEgNvGiEKDAoFBAICBwMSA28kJQqqAQoEBAIDARIEdAJ3AxqbASBSYW5nZSBvZiByZXNlcnZlZCB0YWcgbnVtYmVycy4gUmVzZXJ2ZWQgdGFnIG51bWJlcnMgbWF5IG5vdCBiZSB1c2VkIGJ5CiBmaWVsZHMgb3IgZXh0ZW5zaW9uIHJhbmdlcyBpbiB0aGUgc2FtZSBtZXNzYWdlLiBSZXNlcnZlZCByYW5nZXMgbWF5CiBub3Qgb3ZlcmxhcC4KCgwKBQQCAwEBEgN0ChcKGwoGBAIDAQIAEgN1BB0iDCBJbmNsdXNpdmUuCgoOCgcEAgMBAgAEEgN1BAwKDgoHBAIDAQIABRIDdQ0SCg4KBwQCAwECAAESA3UTGAoOCgcEAgMBAgADEgN1GxwKGwoGBAIDAQIBEgN2BBsiDCBFeGNsdXNpdmUuCgoOCgcEAgMBAgEEEgN2BAwKDgoHBAIDAQIBBRIDdg0SCg4KBwQCAwECAQESA3YTFgoOCgcEAgMBAgEDEgN2GRoKCwoEBAICCBIDeAIsCgwKBQQCAggEEgN4AgoKDAoFBAICCAYSA3gLGAoMCgUEAgIIARIDeBknCgwKBQQCAggDEgN4KisKggEKBAQCAgkSA3sCJRp1IFJlc2VydmVkIGZpZWxkIG5hbWVzLCB3aGljaCBtYXkgbm90IGJlIHVzZWQgYnkgZmllbGRzIGluIHRoZSBzYW1lIG1lc3NhZ2UuCiBBIGdpdmVuIG5hbWUgbWF5IG9ubHkgYmUgcmVzZXJ2ZWQgb25jZS4KCgwKBQQCAgkEEgN7AgoKDAoFBAICCQUSA3sLEQoMCgUEAgIJARIDexIfCgwKBQQCAgkDEgN7IiQKCwoCBAMSBX4AhAEBCgoKAwQDARIDfggdCk8KBAQDAgASBIABAjoaQSBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4KCg0KBQQDAgAEEgSAAQIKCg0KBQQDAgAGEgSAAQseCg0KBQQDAgABEgSAAR8zCg0KBQQDAgADEgSAATY5CloKAwQDBRIEgwECGRpNIENsaWVudHMgY2FuIGRlZmluZSBjdXN0b20gb3B0aW9ucyBpbiBleHRlbnNpb25zIG9mIHRoaXMgbWVzc2FnZS4gU2VlIGFib3ZlLgoKDAoEBAMFABIEgwENGAoNCgUEAwUAARIEgwENEQoNCgUEAwUAAhIEgwEVGAozCgIEBBIGhwEA1QEBGiUgRGVzY3JpYmVzIGEgZmllbGQgd2l0aGluIGEgbWVzc2FnZS4KCgsKAwQEARIEhwEIHAoOCgQEBAQAEgaIAQKnAQMKDQoFBAQEAAESBIgBBwsKUwoGBAQEAAIAEgSLAQQcGkMgMCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzLgogT3JkZXIgaXMgd2VpcmQgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4KCg8KBwQEBAACAAESBIsBBA8KDwoHBAQEAAIAAhIEiwEaGwoOCgYEBAQAAgESBIwBBBwKDwoHBAQEAAIBARIEjAEEDgoPCgcEBAQAAgECEgSMARobCncKBgQEBAACAhIEjwEEHBpnIE5vdCBaaWdaYWcgZW5jb2RlZC4gIE5lZ2F0aXZlIG51bWJlcnMgdGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQ2NCBpZgogbmVnYXRpdmUgdmFsdWVzIGFyZSBsaWtlbHkuCgoPCgcEBAQAAgIBEgSPAQQOCg8KBwQEBAACAgISBI8BGhsKDgoGBAQEAAIDEgSQAQQcCg8KBwQEBAACAwESBJABBA8KDwoHBAQEAAIDAhIEkAEaGwp3CgYEBAQAAgQSBJMBBBwaZyBOb3QgWmlnWmFnIGVuY29kZWQuICBOZWdhdGl2ZSBudW1iZXJzIHRha2UgMTAgYnl0ZXMuICBVc2UgVFlQRV9TSU5UMzIgaWYKIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LgoKDwoHBAQEAAIEARIEkwEEDgoPCgcEBAQAAgQCEgSTARobCg4KBgQEBAACBRIElAEEHAoPCgcEBAQAAgUBEgSUAQQQCg8KBwQEBAACBQISBJQBGhsKDgoGBAQEAAIGEgSVAQQcCg8KBwQEBAACBgESBJUBBBAKDwoHBAQEAAIGAhIElQEaGwoOCgYEBAQAAgcSBJYBBBwKDwoHBAQEAAIHARIElgEEDQoPCgcEBAQAAgcCEgSWARobCg4KBgQEBAACCBIElwEEHAoPCgcEBAQAAggBEgSXAQQPCg8KBwQEBAACCAISBJcBGhsK4gEKBgQEBAACCRIEnAEEHRrRASBUYWctZGVsaW1pdGVkIGFnZ3JlZ2F0ZS4KIEdyb3VwIHR5cGUgaXMgZGVwcmVjYXRlZCBhbmQgbm90IHN1cHBvcnRlZCBpbiBwcm90bzMuIEhvd2V2ZXIsIFByb3RvMwogaW1wbGVtZW50YXRpb25zIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHBhcnNlIHRoZSBncm91cCB3aXJlIGZvcm1hdCBhbmQKIHRyZWF0IGdyb3VwIGZpZWxkcyBhcyB1bmtub3duIGZpZWxkcy4KCg8KBwQEBAACCQESBJwBBA4KDwoHBAQEAAIJAhIEnAEaHAotCgYEBAQAAgoSBJ0BBB0iHSBMZW5ndGgtZGVsaW1pdGVkIGFnZ3JlZ2F0ZS4KCg8KBwQEBAACCgESBJ0BBBAKDwoHBAQEAAIKAhIEnQEaHAojCgYEBAQAAgsSBKABBB0aEyBOZXcgaW4gdmVyc2lvbiAyLgoKDwoHBAQEAAILARIEoAEEDgoPCgcEBAQAAgsCEgSgARocCg4KBgQEBAACDBIEoQEEHQoPCgcEBAQAAgwBEgShAQQPCg8KBwQEBAACDAISBKEBGhwKDgoGBAQEAAINEgSiAQQdCg8KBwQEBAACDQESBKIBBA0KDwoHBAQEAAINAhIEogEaHAoOCgYEBAQAAg4SBKMBBB0KDwoHBAQEAAIOARIEowEEEQoPCgcEBAQAAg4CEgSjARocCg4KBgQEBAACDxIEpAEEHQoPCgcEBAQAAg8BEgSkAQQRCg8KBwQEBAACDwISBKQBGhwKJwoGBAQEAAIQEgSlAQQdIhcgVXNlcyBaaWdaYWcgZW5jb2RpbmcuCgoPCgcEBAQAAhABEgSlAQQPCg8KBwQEBAACEAISBKUBGhwKJwoGBAQEAAIREgSmAQQdIhcgVXNlcyBaaWdaYWcgZW5jb2RpbmcuCgoPCgcEBAQAAhEBEgSmAQQPCg8KBwQEBAACEQISBKYBGhwKDgoEBAQEARIGqQECrgEDCg0KBQQEBAEBEgSpAQcMCioKBgQEBAECABIEqwEEHBoaIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9ycwoKDwoHBAQEAQIAARIEqwEEEgoPCgcEBAQBAgACEgSrARobCg4KBgQEBAECARIErAEEHAoPCgcEBAQBAgEBEgSsAQQSCg8KBwQEBAECAQISBKwBGhsKDgoGBAQEAQICEgStAQQcCg8KBwQEBAECAgESBK0BBBIKDwoHBAQEAQICAhIErQEaGwoMCgQEBAIAEgSwAQIbCg0KBQQEAgAEEgSwAQIKCg0KBQQEAgAFEgSwAQsRCg0KBQQEAgABEgSwARIWCg0KBQQEAgADEgSwARkaCgwKBAQEAgESBLEBAhwKDQoFBAQCAQQSBLEBAgoKDQoFBAQCAQUSBLEBCxAKDQoFBAQCAQESBLEBERcKDQoFBAQCAQMSBLEBGhsKDAoEBAQCAhIEsgECGwoNCgUEBAICBBIEsgECCgoNCgUEBAICBhIEsgELEAoNCgUEBAICARIEsgERFgoNCgUEBAICAxIEsgEZGgqcAQoEBAQCAxIEtgECGRqNASBJZiB0eXBlX25hbWUgaXMgc2V0LCB0aGlzIG5lZWQgbm90IGJlIHNldC4gIElmIGJvdGggdGhpcyBhbmQgdHlwZV9uYW1lCiBhcmUgc2V0LCB0aGlzIG11c3QgYmUgb25lIG9mIFRZUEVfRU5VTSwgVFlQRV9NRVNTQUdFIG9yIFRZUEVfR1JPVVAuCgoNCgUEBAIDBBIEtgECCgoNCgUEBAIDBhIEtgELDwoNCgUEBAIDARIEtgEQFAoNCgUEBAIDAxIEtgEXGAq3AgoEBAQCBBIEvQECIBqoAiBGb3IgbWVzc2FnZSBhbmQgZW51bSB0eXBlcywgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZS4gIElmIHRoZSBuYW1lCiBzdGFydHMgd2l0aCBhICcuJywgaXQgaXMgZnVsbHktcXVhbGlmaWVkLiAgT3RoZXJ3aXNlLCBDKystbGlrZSBzY29waW5nCiBydWxlcyBhcmUgdXNlZCB0byBmaW5kIHRoZSB0eXBlIChpLmUuIGZpcnN0IHRoZSBuZXN0ZWQgdHlwZXMgd2l0aGluIHRoaXMKIG1lc3NhZ2UgYXJlIHNlYXJjaGVkLCB0aGVuIHdpdGhpbiB0aGUgcGFyZW50LCBvbiB1cCB0byB0aGUgcm9vdAogbmFtZXNwYWNlKS4KCg0KBQQEAgQEEgS9AQIKCg0KBQQEAgQFEgS9AQsRCg0KBQQEAgQBEgS9ARIbCg0KBQQEAgQDEgS9AR4fCn4KBAQEAgUSBMEBAh8acCBGb3IgZXh0ZW5zaW9ucywgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBiZWluZyBleHRlbmRlZC4gIEl0IGlzCiByZXNvbHZlZCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgdHlwZV9uYW1lLgoKDQoFBAQCBQQSBMEBAgoKDQoFBAQCBQUSBMEBCxEKDQoFBAQCBQESBMEBEhoKDQoFBAQCBQMSBMEBHR4KsQIKBAQEAgYSBMgBAiQaogIgRm9yIG51bWVyaWMgdHlwZXMsIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS4KIEZvciBib29sZWFucywgInRydWUiIG9yICJmYWxzZSIuCiBGb3Igc3RyaW5ncywgY29udGFpbnMgdGhlIGRlZmF1bHQgdGV4dCBjb250ZW50cyAobm90IGVzY2FwZWQgaW4gYW55IHdheSkuCiBGb3IgYnl0ZXMsIGNvbnRhaW5zIHRoZSBDIGVzY2FwZWQgdmFsdWUuICBBbGwgYnl0ZXMgPj0gMTI4IGFyZSBlc2NhcGVkLgogVE9ETyhrZW50b24pOiAgQmFzZS02NCBlbmNvZGU/CgoNCgUEBAIGBBIEyAECCgoNCgUEBAIGBRIEyAELEQoNCgUEBAIGARIEyAESHwoNCgUEBAIGAxIEyAEiIwqEAQoEBAQCBxIEzAECIRp2IElmIHNldCwgZ2l2ZXMgdGhlIGluZGV4IG9mIGEgb25lb2YgaW4gdGhlIGNvbnRhaW5pbmcgdHlwZSdzIG9uZW9mX2RlY2wKIGxpc3QuICBUaGlzIGZpZWxkIGlzIGEgbWVtYmVyIG9mIHRoYXQgb25lb2YuCgoNCgUEBAIHBBIEzAECCgoNCgUEBAIHBRIEzAELEAoNCgUEBAIHARIEzAERHAoNCgUEBAIHAxIEzAEfIAr6AQoEBAQCCBIE0gECIRrrASBKU09OIG5hbWUgb2YgdGhpcyBmaWVsZC4gVGhlIHZhbHVlIGlzIHNldCBieSBwcm90b2NvbCBjb21waWxlci4gSWYgdGhlCiB1c2VyIGhhcyBzZXQgYSAianNvbl9uYW1lIiBvcHRpb24gb24gdGhpcyBmaWVsZCwgdGhhdCBvcHRpb24ncyB2YWx1ZQogd2lsbCBiZSB1c2VkLiBPdGhlcndpc2UsIGl0J3MgZGVkdWNlZCBmcm9tIHRoZSBmaWVsZCdzIG5hbWUgYnkgY29udmVydGluZwogaXQgdG8gY2FtZWxDYXNlLgoKDQoFBAQCCAQSBNIBAgoKDQoFBAQCCAUSBNIBCxEKDQoFBAQCCAESBNIBEhsKDQoFBAQCCAMSBNIBHiAKDAoEBAQCCRIE1AECJAoNCgUEBAIJBBIE1AECCgoNCgUEBAIJBhIE1AELFwoNCgUEBAIJARIE1AEYHwoNCgUEBAIJAxIE1AEiIwoiCgIEBRIG2AEA2wEBGhQgRGVzY3JpYmVzIGEgb25lb2YuCgoLCgMEBQESBNgBCBwKDAoEBAUCABIE2QECGwoNCgUEBQIABBIE2QECCgoNCgUEBQIABRIE2QELEQoNCgUEBQIAARIE2QESFgoNCgUEBQIAAxIE2QEZGgoMCgQEBQIBEgTaAQIkCg0KBQQFAgEEEgTaAQIKCg0KBQQFAgEGEgTaAQsXCg0KBQQFAgEBEgTaARgfCg0KBQQFAgEDEgTaASIjCicKAgQGEgbeAQD4AQEaGSBEZXNjcmliZXMgYW4gZW51bSB0eXBlLgoKCwoDBAYBEgTeAQgbCgwKBAQGAgASBN8BAhsKDQoFBAYCAAQSBN8BAgoKDQoFBAYCAAUSBN8BCxEKDQoFBAYCAAESBN8BEhYKDQoFBAYCAAMSBN8BGRoKDAoEBAYCARIE4QECLgoNCgUEBgIBBBIE4QECCgoNCgUEBgIBBhIE4QELIwoNCgUEBgIBARIE4QEkKQoNCgUEBgIBAxIE4QEsLQoMCgQEBgICEgTjAQIjCg0KBQQGAgIEEgTjAQIKCg0KBQQGAgIGEgTjAQsWCg0KBQQGAgIBEgTjARceCg0KBQQGAgIDEgTjASEiCq8CCgQEBgMAEgbrAQLuAQMangIgUmFuZ2Ugb2YgcmVzZXJ2ZWQgbnVtZXJpYyB2YWx1ZXMuIFJlc2VydmVkIHZhbHVlcyBtYXkgbm90IGJlIHVzZWQgYnkKIGVudHJpZXMgaW4gdGhlIHNhbWUgZW51bS4gUmVzZXJ2ZWQgcmFuZ2VzIG1heSBub3Qgb3ZlcmxhcC4KCiBOb3RlIHRoYXQgdGhpcyBpcyBkaXN0aW5jdCBmcm9tIERlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlIGluIHRoYXQgaXQKIGlzIGluY2x1c2l2ZSBzdWNoIHRoYXQgaXQgY2FuIGFwcHJvcHJpYXRlbHkgcmVwcmVzZW50IHRoZSBlbnRpcmUgaW50MzIKIGRvbWFpbi4KCg0KBQQGAwABEgTrAQobChwKBgQGAwACABIE7AEEHSIMIEluY2x1c2l2ZS4KCg8KBwQGAwACAAQSBOwBBAwKDwoHBAYDAAIABRIE7AENEgoPCgcEBgMAAgABEgTsARMYCg8KBwQGAwACAAMSBOwBGxwKHAoGBAYDAAIBEgTtAQQbIgwgSW5jbHVzaXZlLgoKDwoHBAYDAAIBBBIE7QEEDAoPCgcEBgMAAgEFEgTtAQ0SCg8KBwQGAwACAQESBO0BExYKDwoHBAYDAAIBAxIE7QEZGgqqAQoEBAYCAxIE8wECMBqbASBSYW5nZSBvZiByZXNlcnZlZCBudW1lcmljIHZhbHVlcy4gUmVzZXJ2ZWQgbnVtZXJpYyB2YWx1ZXMgbWF5IG5vdCBiZSB1c2VkCiBieSBlbnVtIHZhbHVlcyBpbiB0aGUgc2FtZSBlbnVtIGRlY2xhcmF0aW9uLiBSZXNlcnZlZCByYW5nZXMgbWF5IG5vdAogb3ZlcmxhcC4KCg0KBQQGAgMEEgTzAQIKCg0KBQQGAgMGEgTzAQscCg0KBQQGAgMBEgTzAR0rCg0KBQQGAgMDEgTzAS4vCmwKBAQGAgQSBPcBAiQaXiBSZXNlcnZlZCBlbnVtIHZhbHVlIG5hbWVzLCB3aGljaCBtYXkgbm90IGJlIHJldXNlZC4gQSBnaXZlbiBuYW1lIG1heSBvbmx5CiBiZSByZXNlcnZlZCBvbmNlLgoKDQoFBAYCBAQSBPcBAgoKDQoFBAYCBAUSBPcBCxEKDQoFBAYCBAESBPcBEh8KDQoFBAYCBAMSBPcBIiMKMQoCBAcSBvsBAIACARojIERlc2NyaWJlcyBhIHZhbHVlIHdpdGhpbiBhbiBlbnVtLgoKCwoDBAcBEgT7AQggCgwKBAQHAgASBPwBAhsKDQoFBAcCAAQSBPwBAgoKDQoFBAcCAAUSBPwBCxEKDQoFBAcCAAESBPwBEhYKDQoFBAcCAAMSBPwBGRoKDAoEBAcCARIE/QECHAoNCgUEBwIBBBIE/QECCgoNCgUEBwIBBRIE/QELEAoNCgUEBwIBARIE/QERFwoNCgUEBwIBAxIE/QEaGwoMCgQEBwICEgT/AQIoCg0KBQQHAgIEEgT/AQIKCg0KBQQHAgIGEgT/AQsbCg0KBQQHAgIBEgT/ARwjCg0KBQQHAgIDEgT/ASYnCiQKAgQIEgaDAgCIAgEaFiBEZXNjcmliZXMgYSBzZXJ2aWNlLgoKCwoDBAgBEgSDAggeCgwKBAQIAgASBIQCAhsKDQoFBAgCAAQSBIQCAgoKDQoFBAgCAAUSBIQCCxEKDQoFBAgCAAESBIQCEhYKDQoFBAgCAAMSBIQCGRoKDAoEBAgCARIEhQICLAoNCgUECAIBBBIEhQICCgoNCgUECAIBBhIEhQILIAoNCgUECAIBARIEhQIhJwoNCgUECAIBAxIEhQIqKwoMCgQECAICEgSHAgImCg0KBQQIAgIEEgSHAgIKCg0KBQQIAgIGEgSHAgsZCg0KBQQIAgIBEgSHAhohCg0KBQQIAgIDEgSHAiQlCjAKAgQJEgaLAgCZAgEaIiBEZXNjcmliZXMgYSBtZXRob2Qgb2YgYSBzZXJ2aWNlLgoKCwoDBAkBEgSLAggdCgwKBAQJAgASBIwCAhsKDQoFBAkCAAQSBIwCAgoKDQoFBAkCAAUSBIwCCxEKDQoFBAkCAAESBIwCEhYKDQoFBAkCAAMSBIwCGRoKlwEKBAQJAgESBJACAiEaiAEgSW5wdXQgYW5kIG91dHB1dCB0eXBlIG5hbWVzLiAgVGhlc2UgYXJlIHJlc29sdmVkIGluIHRoZSBzYW1lIHdheSBhcwogRmllbGREZXNjcmlwdG9yUHJvdG8udHlwZV9uYW1lLCBidXQgbXVzdCByZWZlciB0byBhIG1lc3NhZ2UgdHlwZS4KCg0KBQQJAgEEEgSQAgIKCg0KBQQJAgEFEgSQAgsRCg0KBQQJAgEBEgSQAhIcCg0KBQQJAgEDEgSQAh8gCgwKBAQJAgISBJECAiIKDQoFBAkCAgQSBJECAgoKDQoFBAkCAgUSBJECCxEKDQoFBAkCAgESBJECEh0KDQoFBAkCAgMSBJECICEKDAoEBAkCAxIEkwICJQoNCgUECQIDBBIEkwICCgoNCgUECQIDBhIEkwILGAoNCgUECQIDARIEkwIZIAoNCgUECQIDAxIEkwIjJApFCgQECQIEEgSWAgI1GjcgSWRlbnRpZmllcyBpZiBjbGllbnQgc3RyZWFtcyBtdWx0aXBsZSBjbGllbnQgbWVzc2FnZXMKCg0KBQQJAgQEEgSWAgIKCg0KBQQJAgQFEgSWAgsPCg0KBQQJAgQBEgSWAhAgCg0KBQQJAgQDEgSWAiMkCg0KBQQJAgQIEgSWAiU0Cg0KBQQJAgQHEgSWAi4zCkUKBAQJAgUSBJgCAjUaNyBJZGVudGlmaWVzIGlmIHNlcnZlciBzdHJlYW1zIG11bHRpcGxlIHNlcnZlciBtZXNzYWdlcwoKDQoFBAkCBQQSBJgCAgoKDQoFBAkCBQUSBJgCCw8KDQoFBAkCBQESBJgCECAKDQoFBAkCBQMSBJgCIyQKDQoFBAkCBQgSBJgCJTQKDQoFBAkCBQcSBJgCLjMKrw4KAgQKEga9AgCsAwEyTiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBPcHRpb25zCjLQDSBFYWNoIG9mIHRoZSBkZWZpbml0aW9ucyBhYm92ZSBtYXkgaGF2ZSAib3B0aW9ucyIgYXR0YWNoZWQuICBUaGVzZSBhcmUKIGp1c3QgYW5ub3RhdGlvbnMgd2hpY2ggbWF5IGNhdXNlIGNvZGUgdG8gYmUgZ2VuZXJhdGVkIHNsaWdodGx5IGRpZmZlcmVudGx5CiBvciBtYXkgY29udGFpbiBoaW50cyBmb3IgY29kZSB0aGF0IG1hbmlwdWxhdGVzIHByb3RvY29sIG1lc3NhZ2VzLgoKIENsaWVudHMgbWF5IGRlZmluZSBjdXN0b20gb3B0aW9ucyBhcyBleHRlbnNpb25zIG9mIHRoZSAqT3B0aW9ucyBtZXNzYWdlcy4KIFRoZXNlIGV4dGVuc2lvbnMgbWF5IG5vdCB5ZXQgYmUga25vd24gYXQgcGFyc2luZyB0aW1lLCBzbyB0aGUgcGFyc2VyIGNhbm5vdAogc3RvcmUgdGhlIHZhbHVlcyBpbiB0aGVtLiAgSW5zdGVhZCBpdCBzdG9yZXMgdGhlbSBpbiBhIGZpZWxkIGluIHRoZSAqT3B0aW9ucwogbWVzc2FnZSBjYWxsZWQgdW5pbnRlcnByZXRlZF9vcHRpb24uIFRoaXMgZmllbGQgbXVzdCBoYXZlIHRoZSBzYW1lIG5hbWUKIGFjcm9zcyBhbGwgKk9wdGlvbnMgbWVzc2FnZXMuIFdlIHRoZW4gdXNlIHRoaXMgZmllbGQgdG8gcG9wdWxhdGUgdGhlCiBleHRlbnNpb25zIHdoZW4gd2UgYnVpbGQgYSBkZXNjcmlwdG9yLCBhdCB3aGljaCBwb2ludCBhbGwgcHJvdG9zIGhhdmUgYmVlbgogcGFyc2VkIGFuZCBzbyBhbGwgZXh0ZW5zaW9ucyBhcmUga25vd24uCgogRXh0ZW5zaW9uIG51bWJlcnMgZm9yIGN1c3RvbSBvcHRpb25zIG1heSBiZSBjaG9zZW4gYXMgZm9sbG93czoKICogRm9yIG9wdGlvbnMgd2hpY2ggd2lsbCBvbmx5IGJlIHVzZWQgd2l0aGluIGEgc2luZ2xlIGFwcGxpY2F0aW9uIG9yCiAgIG9yZ2FuaXphdGlvbiwgb3IgZm9yIGV4cGVyaW1lbnRhbCBvcHRpb25zLCB1c2UgZmllbGQgbnVtYmVycyA1MDAwMAogICB0aHJvdWdoIDk5OTk5LiAgSXQgaXMgdXAgdG8geW91IHRvIGVuc3VyZSB0aGF0IHlvdSBkbyBub3QgdXNlIHRoZQogICBzYW1lIG51bWJlciBmb3IgbXVsdGlwbGUgb3B0aW9ucy4KICogRm9yIG9wdGlvbnMgd2hpY2ggd2lsbCBiZSBwdWJsaXNoZWQgYW5kIHVzZWQgcHVibGljbHkgYnkgbXVsdGlwbGUKICAgaW5kZXBlbmRlbnQgZW50aXRpZXMsIGUtbWFpbCBwcm90b2J1Zi1nbG9iYWwtZXh0ZW5zaW9uLXJlZ2lzdHJ5QGdvb2dsZS5jb20KICAgdG8gcmVzZXJ2ZSBleHRlbnNpb24gbnVtYmVycy4gU2ltcGx5IHByb3ZpZGUgeW91ciBwcm9qZWN0IG5hbWUgKGUuZy4KICAgT2JqZWN0aXZlLUMgcGx1Z2luKSBhbmQgeW91ciBwcm9qZWN0IHdlYnNpdGUgKGlmIGF2YWlsYWJsZSkgLS0gdGhlcmUncyBubwogICBuZWVkIHRvIGV4cGxhaW4gaG93IHlvdSBpbnRlbmQgdG8gdXNlIHRoZW0uIFVzdWFsbHkgeW91IG9ubHkgbmVlZCBvbmUKICAgZXh0ZW5zaW9uIG51bWJlci4gWW91IGNhbiBkZWNsYXJlIG11bHRpcGxlIG9wdGlvbnMgd2l0aCBvbmx5IG9uZSBleHRlbnNpb24KICAgbnVtYmVyIGJ5IHB1dHRpbmcgdGhlbSBpbiBhIHN1Yi1tZXNzYWdlLiBTZWUgdGhlIEN1c3RvbSBPcHRpb25zIHNlY3Rpb24gb2YKICAgdGhlIGRvY3MgZm9yIGV4YW1wbGVzOgogICBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8jb3B0aW9ucwogICBJZiB0aGlzIHR1cm5zIG91dCB0byBiZSBwb3B1bGFyLCBhIHdlYiBzZXJ2aWNlIHdpbGwgYmUgc2V0IHVwCiAgIHRvIGF1dG9tYXRpY2FsbHkgYXNzaWduIG9wdGlvbiBudW1iZXJzLgoKCwoDBAoBEgS9AggTCvQBCgQECgIAEgTDAgIjGuUBIFNldHMgdGhlIEphdmEgcGFja2FnZSB3aGVyZSBjbGFzc2VzIGdlbmVyYXRlZCBmcm9tIHRoaXMgLnByb3RvIHdpbGwgYmUKIHBsYWNlZC4gIEJ5IGRlZmF1bHQsIHRoZSBwcm90byBwYWNrYWdlIGlzIHVzZWQsIGJ1dCB0aGlzIGlzIG9mdGVuCiBpbmFwcHJvcHJpYXRlIGJlY2F1c2UgcHJvdG8gcGFja2FnZXMgZG8gbm90IG5vcm1hbGx5IHN0YXJ0IHdpdGggYmFja3dhcmRzCiBkb21haW4gbmFtZXMuCgoNCgUECgIABBIEwwICCgoNCgUECgIABRIEwwILEQoNCgUECgIAARIEwwISHgoNCgUECgIAAxIEwwIhIgq/AgoEBAoCARIEywICKxqwAiBJZiBzZXQsIGFsbCB0aGUgY2xhc3NlcyBmcm9tIHRoZSAucHJvdG8gZmlsZSBhcmUgd3JhcHBlZCBpbiBhIHNpbmdsZQogb3V0ZXIgY2xhc3Mgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gIFRoaXMgYXBwbGllcyB0byBib3RoIFByb3RvMQogKGVxdWl2YWxlbnQgdG8gdGhlIG9sZCAiLS1vbmVfamF2YV9maWxlIiBvcHRpb24pIGFuZCBQcm90bzIgKHdoZXJlCiBhIC5wcm90byBhbHdheXMgdHJhbnNsYXRlcyB0byBhIHNpbmdsZSBjbGFzcywgYnV0IHlvdSBtYXkgd2FudCB0bwogZXhwbGljaXRseSBjaG9vc2UgdGhlIGNsYXNzIG5hbWUpLgoKDQoFBAoCAQQSBMsCAgoKDQoFBAoCAQUSBMsCCxEKDQoFBAoCAQESBMsCEiYKDQoFBAoCAQMSBMsCKSoKowMKBAQKAgISBNMCAjkalAMgSWYgc2V0IHRydWUsIHRoZW4gdGhlIEphdmEgY29kZSBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBhIHNlcGFyYXRlIC5qYXZhCiBmaWxlIGZvciBlYWNoIHRvcC1sZXZlbCBtZXNzYWdlLCBlbnVtLCBhbmQgc2VydmljZSBkZWZpbmVkIGluIHRoZSAucHJvdG8KIGZpbGUuICBUaHVzLCB0aGVzZSB0eXBlcyB3aWxsICpub3QqIGJlIG5lc3RlZCBpbnNpZGUgdGhlIG91dGVyIGNsYXNzCiBuYW1lZCBieSBqYXZhX291dGVyX2NsYXNzbmFtZS4gIEhvd2V2ZXIsIHRoZSBvdXRlciBjbGFzcyB3aWxsIHN0aWxsIGJlCiBnZW5lcmF0ZWQgdG8gY29udGFpbiB0aGUgZmlsZSdzIGdldERlc2NyaXB0b3IoKSBtZXRob2QgYXMgd2VsbCBhcyBhbnkKIHRvcC1sZXZlbCBleHRlbnNpb25zIGRlZmluZWQgaW4gdGhlIGZpbGUuCgoNCgUECgICBBIE0wICCgoNCgUECgICBRIE0wILDwoNCgUECgICARIE0wIQIwoNCgUECgICAxIE0wImKAoNCgUECgICCBIE0wIpOAoNCgUECgICBxIE0wIyNwopCgQECgIDEgTWAgJFGhsgVGhpcyBvcHRpb24gZG9lcyBub3RoaW5nLgoKDQoFBAoCAwQSBNYCAgoKDQoFBAoCAwUSBNYCCw8KDQoFBAoCAwESBNYCEC0KDQoFBAoCAwMSBNYCMDIKDQoFBAoCAwgSBNYCM0QKEAoIBAoCAwjnBwASBNYCNEMKEQoJBAoCAwjnBwACEgTWAjQ+ChIKCgQKAgMI5wcAAgASBNYCND4KEwoLBAoCAwjnBwACAAESBNYCND4KEQoJBAoCAwjnBwADEgTWAj9DCuYCCgQECgIEEgTeAgI8GtcCIElmIHNldCB0cnVlLCB0aGVuIHRoZSBKYXZhMiBjb2RlIGdlbmVyYXRvciB3aWxsIGdlbmVyYXRlIGNvZGUgdGhhdAogdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuZXZlciBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYXNzaWduIGEgbm9uLVVURi04CiBieXRlIHNlcXVlbmNlIHRvIGEgc3RyaW5nIGZpZWxkLgogTWVzc2FnZSByZWZsZWN0aW9uIHdpbGwgZG8gdGhlIHNhbWUuCiBIb3dldmVyLCBhbiBleHRlbnNpb24gZmllbGQgc3RpbGwgYWNjZXB0cyBub24tVVRGLTggYnl0ZSBzZXF1ZW5jZXMuCiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHdoZW4gdXNlZCB3aXRoIHRoZSBsaXRlIHJ1bnRpbWUuCgoNCgUECgIEBBIE3gICCgoNCgUECgIEBRIE3gILDwoNCgUECgIEARIE3gIQJgoNCgUECgIEAxIE3gIpKwoNCgUECgIECBIE3gIsOwoNCgUECgIEBxIE3gI1OgpMCgQECgQAEgbiAgLnAgMaPCBHZW5lcmF0ZWQgY2xhc3NlcyBjYW4gYmUgb3B0aW1pemVkIGZvciBzcGVlZCBvciBjb2RlIHNpemUuCgoNCgUECgQAARIE4gIHEwpECgYECgQAAgASBOMCBA4iNCBHZW5lcmF0ZSBjb21wbGV0ZSBjb2RlIGZvciBwYXJzaW5nLCBzZXJpYWxpemF0aW9uLAoKDwoHBAoEAAIAARIE4wIECQoPCgcECgQAAgACEgTjAgwNCkcKBgQKBAACARIE5QIEEhoGIGV0Yy4KIi8gVXNlIFJlZmxlY3Rpb25PcHMgdG8gaW1wbGVtZW50IHRoZXNlIG1ldGhvZHMuCgoPCgcECgQAAgEBEgTlAgQNCg8KBwQKBAACAQISBOUCEBEKRwoGBAoEAAICEgTmAgQVIjcgR2VuZXJhdGUgY29kZSB1c2luZyBNZXNzYWdlTGl0ZSBhbmQgdGhlIGxpdGUgcnVudGltZS4KCg8KBwQKBAACAgESBOYCBBAKDwoHBAoEAAICAhIE5gITFAoMCgQECgIFEgToAgI5Cg0KBQQKAgUEEgToAgIKCg0KBQQKAgUGEgToAgsXCg0KBQQKAgUBEgToAhgkCg0KBQQKAgUDEgToAicoCg0KBQQKAgUIEgToAik4Cg0KBQQKAgUHEgToAjI3CuICCgQECgIGEgTvAgIiGtMCIFNldHMgdGhlIEdvIHBhY2thZ2Ugd2hlcmUgc3RydWN0cyBnZW5lcmF0ZWQgZnJvbSB0aGlzIC5wcm90byB3aWxsIGJlCiBwbGFjZWQuIElmIG9taXR0ZWQsIHRoZSBHbyBwYWNrYWdlIHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBmb2xsb3dpbmc6CiAgIC0gVGhlIGJhc2VuYW1lIG9mIHRoZSBwYWNrYWdlIGltcG9ydCBwYXRoLCBpZiBwcm92aWRlZC4KICAgLSBPdGhlcndpc2UsIHRoZSBwYWNrYWdlIHN0YXRlbWVudCBpbiB0aGUgLnByb3RvIGZpbGUsIGlmIHByZXNlbnQuCiAgIC0gT3RoZXJ3aXNlLCB0aGUgYmFzZW5hbWUgb2YgdGhlIC5wcm90byBmaWxlLCB3aXRob3V0IGV4dGVuc2lvbi4KCg0KBQQKAgYEEgTvAgIKCg0KBQQKAgYFEgTvAgsRCg0KBQQKAgYBEgTvAhIcCg0KBQQKAgYDEgTvAh8hCtQECgQECgIHEgT9AgI5GsUEIFNob3VsZCBnZW5lcmljIHNlcnZpY2VzIGJlIGdlbmVyYXRlZCBpbiBlYWNoIGxhbmd1YWdlPyAgIkdlbmVyaWMiIHNlcnZpY2VzCiBhcmUgbm90IHNwZWNpZmljIHRvIGFueSBwYXJ0aWN1bGFyIFJQQyBzeXN0ZW0uICBUaGV5IGFyZSBnZW5lcmF0ZWQgYnkgdGhlCiBtYWluIGNvZGUgZ2VuZXJhdG9ycyBpbiBlYWNoIGxhbmd1YWdlICh3aXRob3V0IGFkZGl0aW9uYWwgcGx1Z2lucykuCiBHZW5lcmljIHNlcnZpY2VzIHdlcmUgdGhlIG9ubHkga2luZCBvZiBzZXJ2aWNlIGdlbmVyYXRpb24gc3VwcG9ydGVkIGJ5CiBlYXJseSB2ZXJzaW9ucyBvZiBnb29nbGUucHJvdG9idWYuCgogR2VuZXJpYyBzZXJ2aWNlcyBhcmUgbm93IGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB1c2luZyBwbHVnaW5zCiB0aGF0IGdlbmVyYXRlIGNvZGUgc3BlY2lmaWMgdG8geW91ciBwYXJ0aWN1bGFyIFJQQyBzeXN0ZW0uICBUaGVyZWZvcmUsCiB0aGVzZSBkZWZhdWx0IHRvIGZhbHNlLiAgT2xkIGNvZGUgd2hpY2ggZGVwZW5kcyBvbiBnZW5lcmljIHNlcnZpY2VzIHNob3VsZAogZXhwbGljaXRseSBzZXQgdGhlbSB0byB0cnVlLgoKDQoFBAoCBwQSBP0CAgoKDQoFBAoCBwUSBP0CCw8KDQoFBAoCBwESBP0CECMKDQoFBAoCBwMSBP0CJigKDQoFBAoCBwgSBP0CKTgKDQoFBAoCBwcSBP0CMjcKDAoEBAoCCBIE/gICOwoNCgUECgIIBBIE/gICCgoNCgUECgIIBRIE/gILDwoNCgUECgIIARIE/gIQJQoNCgUECgIIAxIE/gIoKgoNCgUECgIICBIE/gIrOgoNCgUECgIIBxIE/gI0OQoMCgQECgIJEgT/AgI5Cg0KBQQKAgkEEgT/AgIKCg0KBQQKAgkFEgT/AgsPCg0KBQQKAgkBEgT/AhAjCg0KBQQKAgkDEgT/AiYoCg0KBQQKAgkIEgT/Aik4Cg0KBQQKAgkHEgT/AjI3CgwKBAQKAgoSBIADAjoKDQoFBAoCCgQSBIADAgoKDQoFBAoCCgUSBIADCw8KDQoFBAoCCgESBIADECQKDQoFBAoCCgMSBIADJykKDQoFBAoCCggSBIADKjkKDQoFBAoCCgcSBIADMzgK8wEKBAQKAgsSBIYDAjAa5AEgSXMgdGhpcyBmaWxlIGRlcHJlY2F0ZWQ/CiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCiBmb3IgZXZlcnl0aGluZyBpbiB0aGUgZmlsZSwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5CiBsZWFzdCwgdGhpcyBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIGZpbGVzLgoKDQoFBAoCCwQSBIYDAgoKDQoFBAoCCwUSBIYDCw8KDQoFBAoCCwESBIYDEBoKDQoFBAoCCwMSBIYDHR8KDQoFBAoCCwgSBIYDIC8KDQoFBAoCCwcSBIYDKS4KfwoEBAoCDBIEigMCNhpxIEVuYWJsZXMgdGhlIHVzZSBvZiBhcmVuYXMgZm9yIHRoZSBwcm90byBtZXNzYWdlcyBpbiB0aGlzIGZpbGUuIFRoaXMgYXBwbGllcwogb25seSB0byBnZW5lcmF0ZWQgY2xhc3NlcyBmb3IgQysrLgoKDQoFBAoCDAQSBIoDAgoKDQoFBAoCDAUSBIoDCw8KDQoFBAoCDAESBIoDECAKDQoFBAoCDAMSBIoDIyUKDQoFBAoCDAgSBIoDJjUKDQoFBAoCDAcSBIoDLzQKkgEKBAQKAg0SBI8DAikagwEgU2V0cyB0aGUgb2JqZWN0aXZlIGMgY2xhc3MgcHJlZml4IHdoaWNoIGlzIHByZXBlbmRlZCB0byBhbGwgb2JqZWN0aXZlIGMKIGdlbmVyYXRlZCBjbGFzc2VzIGZyb20gdGhpcyAucHJvdG8uIFRoZXJlIGlzIG5vIGRlZmF1bHQuCgoNCgUECgINBBIEjwMCCgoNCgUECgINBRIEjwMLEQoNCgUECgINARIEjwMSIwoNCgUECgINAxIEjwMmKApJCgQECgIOEgSSAwIoGjsgTmFtZXNwYWNlIGZvciBnZW5lcmF0ZWQgY2xhc3NlczsgZGVmYXVsdHMgdG8gdGhlIHBhY2thZ2UuCgoNCgUECgIOBBIEkgMCCgoNCgUECgIOBRIEkgMLEQoNCgUECgIOARIEkgMSIgoNCgUECgIOAxIEkgMlJwqRAgoEBAoCDxIEmAMCJBqCAiBCeSBkZWZhdWx0IFN3aWZ0IGdlbmVyYXRvcnMgd2lsbCB0YWtlIHRoZSBwcm90byBwYWNrYWdlIGFuZCBDYW1lbENhc2UgaXQKIHJlcGxhY2luZyAnLicgd2l0aCB1bmRlcnNjb3JlIGFuZCB1c2UgdGhhdCB0byBwcmVmaXggdGhlIHR5cGVzL3N5bWJvbHMKIGRlZmluZWQuIFdoZW4gdGhpcyBvcHRpb25zIGlzIHByb3ZpZGVkLCB0aGV5IHdpbGwgdXNlIHRoaXMgdmFsdWUgaW5zdGVhZAogdG8gcHJlZml4IHRoZSB0eXBlcy9zeW1ib2xzIGRlZmluZWQuCgoNCgUECgIPBBIEmAMCCgoNCgUECgIPBRIEmAMLEQoNCgUECgIPARIEmAMSHgoNCgUECgIPAxIEmAMhIwp+CgQECgIQEgScAwIoGnAgU2V0cyB0aGUgcGhwIGNsYXNzIHByZWZpeCB3aGljaCBpcyBwcmVwZW5kZWQgdG8gYWxsIHBocCBnZW5lcmF0ZWQgY2xhc3NlcwogZnJvbSB0aGlzIC5wcm90by4gRGVmYXVsdCBpcyBlbXB0eS4KCg0KBQQKAhAEEgScAwIKCg0KBQQKAhAFEgScAwsRCg0KBQQKAhABEgScAxIiCg0KBQQKAhADEgScAyUnCr4BCgQECgIREgShAwIlGq8BIFVzZSB0aGlzIG9wdGlvbiB0byBjaGFuZ2UgdGhlIG5hbWVzcGFjZSBvZiBwaHAgZ2VuZXJhdGVkIGNsYXNzZXMuIERlZmF1bHQKIGlzIGVtcHR5LiBXaGVuIHRoaXMgb3B0aW9uIGlzIGVtcHR5LCB0aGUgcGFja2FnZSBuYW1lIHdpbGwgYmUgdXNlZCBmb3IKIGRldGVybWluaW5nIHRoZSBuYW1lc3BhY2UuCgoNCgUECgIRBBIEoQMCCgoNCgUECgIRBRIEoQMLEQoNCgUECgIRARIEoQMSHwoNCgUECgIRAxIEoQMiJAp8CgQECgISEgSlAwI6Gm4gVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLgogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgIk9wdGlvbnMiIHNlY3Rpb24gYWJvdmUuCgoNCgUECgISBBIEpQMCCgoNCgUECgISBhIEpQMLHgoNCgUECgISARIEpQMfMwoNCgUECgISAxIEpQM2OQqHAQoDBAoFEgSpAwIZGnogQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLgogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgIk9wdGlvbnMiIHNlY3Rpb24gYWJvdmUuCgoMCgQECgUAEgSpAw0YCg0KBQQKBQABEgSpAw0RCg0KBQQKBQACEgSpAxUYCgsKAwQKCRIEqwMLDgoMCgQECgkAEgSrAwsNCg0KBQQKCQABEgSrAwsNCg0KBQQKCQACEgSrAwsNCgwKAgQLEgauAwDtAwEKCwoDBAsBEgSuAwgWCtgFCgQECwIAEgTBAwI8GskFIFNldCB0cnVlIHRvIHVzZSB0aGUgb2xkIHByb3RvMSBNZXNzYWdlU2V0IHdpcmUgZm9ybWF0IGZvciBleHRlbnNpb25zLgogVGhpcyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTWVzc2FnZVNldCB3aXJlCiBmb3JtYXQuICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBmb3IgYW55IG90aGVyIHJlYXNvbjogIEl0J3MgbGVzcwogZWZmaWNpZW50LCBoYXMgZmV3ZXIgZmVhdHVyZXMsIGFuZCBpcyBtb3JlIGNvbXBsaWNhdGVkLgoKIFRoZSBtZXNzYWdlIG11c3QgYmUgZGVmaW5lZCBleGFjdGx5IGFzIGZvbGxvd3M6CiAgIG1lc3NhZ2UgRm9vIHsKICAgICBvcHRpb24gbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQgPSB0cnVlOwogICAgIGV4dGVuc2lvbnMgNCB0byBtYXg7CiAgIH0KIE5vdGUgdGhhdCB0aGUgbWVzc2FnZSBjYW5ub3QgaGF2ZSBhbnkgZGVmaW5lZCBmaWVsZHM7IE1lc3NhZ2VTZXRzIG9ubHkKIGhhdmUgZXh0ZW5zaW9ucy4KCiBBbGwgZXh0ZW5zaW9ucyBvZiB5b3VyIHR5cGUgbXVzdCBiZSBzaW5ndWxhciBtZXNzYWdlczsgZS5nLiB0aGV5IGNhbm5vdAogYmUgaW50MzJzLCBlbnVtcywgb3IgcmVwZWF0ZWQgbWVzc2FnZXMuCgogQmVjYXVzZSB0aGlzIGlzIGFuIG9wdGlvbiwgdGhlIGFib3ZlIHR3byByZXN0cmljdGlvbnMgYXJlIG5vdCBlbmZvcmNlZCBieQogdGhlIHByb3RvY29sIGNvbXBpbGVyLgoKDQoFBAsCAAQSBMEDAgoKDQoFBAsCAAUSBMEDCw8KDQoFBAsCAAESBMEDECcKDQoFBAsCAAMSBMEDKisKDQoFBAsCAAgSBMEDLDsKDQoFBAsCAAcSBMEDNToK6wEKBAQLAgESBMYDAkQa3AEgRGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgdGhlIHN0YW5kYXJkICJkZXNjcmlwdG9yKCkiIGFjY2Vzc29yLCB3aGljaCBjYW4KIGNvbmZsaWN0IHdpdGggYSBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLiAgVGhpcyBpcyBtZWFudCB0byBtYWtlIG1pZ3JhdGlvbgogZnJvbSBwcm90bzEgZWFzaWVyOyBuZXcgY29kZSBzaG91bGQgYXZvaWQgZmllbGRzIG5hbWVkICJkZXNjcmlwdG9yIi4KCg0KBQQLAgEEEgTGAwIKCg0KBQQLAgEFEgTGAwsPCg0KBQQLAgEBEgTGAxAvCg0KBQQLAgEDEgTGAzIzCg0KBQQLAgEIEgTGAzRDCg0KBQQLAgEHEgTGAz1CCu4BCgQECwICEgTMAwIvGt8BIElzIHRoaXMgbWVzc2FnZSBkZXByZWNhdGVkPwogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9ucwogZm9yIHRoZSBtZXNzYWdlLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsCiB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgbWVzc2FnZXMuCgoNCgUECwICBBIEzAMCCgoNCgUECwICBRIEzAMLDwoNCgUECwICARIEzAMQGgoNCgUECwICAxIEzAMdHgoNCgUECwICCBIEzAMfLgoNCgUECwICBxIEzAMoLQqeBgoEBAsCAxIE4wMCHhqPBiBXaGV0aGVyIHRoZSBtZXNzYWdlIGlzIGFuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1hcCBlbnRyeSB0eXBlIGZvciB0aGUKIG1hcHMgZmllbGQuCgogRm9yIG1hcHMgZmllbGRzOgogICAgIG1hcDxLZXlUeXBlLCBWYWx1ZVR5cGU+IG1hcF9maWVsZCA9IDE7CiBUaGUgcGFyc2VkIGRlc2NyaXB0b3IgbG9va3MgbGlrZToKICAgICBtZXNzYWdlIE1hcEZpZWxkRW50cnkgewogICAgICAgICBvcHRpb24gbWFwX2VudHJ5ID0gdHJ1ZTsKICAgICAgICAgb3B0aW9uYWwgS2V5VHlwZSBrZXkgPSAxOwogICAgICAgICBvcHRpb25hbCBWYWx1ZVR5cGUgdmFsdWUgPSAyOwogICAgIH0KICAgICByZXBlYXRlZCBNYXBGaWVsZEVudHJ5IG1hcF9maWVsZCA9IDE7CgogSW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2Ugbm90IHRvIGdlbmVyYXRlIHRoZSBtYXBfZW50cnk9dHJ1ZSBtZXNzYWdlLCBidXQKIHVzZSBhIG5hdGl2ZSBtYXAgaW4gdGhlIHRhcmdldCBsYW5ndWFnZSB0byBob2xkIHRoZSBrZXlzIGFuZCB2YWx1ZXMuCiBUaGUgcmVmbGVjdGlvbiBBUElzIGluIHN1Y2ggaW1wbGVtZW50aW9ucyBzdGlsbCBuZWVkIHRvIHdvcmsgYXMKIGlmIHRoZSBmaWVsZCBpcyBhIHJlcGVhdGVkIG1lc3NhZ2UgZmllbGQuCgogTk9URTogRG8gbm90IHNldCB0aGUgb3B0aW9uIGluIC5wcm90byBmaWxlcy4gQWx3YXlzIHVzZSB0aGUgbWFwcyBzeW50YXgKIGluc3RlYWQuIFRoZSBvcHRpb24gc2hvdWxkIG9ubHkgYmUgaW1wbGljaXRseSBzZXQgYnkgdGhlIHByb3RvIGNvbXBpbGVyCiBwYXJzZXIuCgoNCgUECwIDBBIE4wMCCgoNCgUECwIDBRIE4wMLDwoNCgUECwIDARIE4wMQGQoNCgUECwIDAxIE4wMcHQokCgMECwkSBOUDCw0iFyBqYXZhbGl0ZV9zZXJpYWxpemFibGUKCgwKBAQLCQASBOUDCwwKDQoFBAsJAAESBOUDCwwKDQoFBAsJAAISBOUDCwwKHwoDBAsJEgTmAwsNIhIgamF2YW5hbm9fYXNfbGl0ZQoKDAoEBAsJARIE5gMLDAoNCgUECwkBARIE5gMLDAoNCgUECwkBAhIE5gMLDApPCgQECwIEEgTpAwI6GkEgVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCgoNCgUECwIEBBIE6QMCCgoNCgUECwIEBhIE6QMLHgoNCgUECwIEARIE6QMfMwoNCgUECwIEAxIE6QM2OQpaCgMECwUSBOwDAhkaTSBDbGllbnRzIGNhbiBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgaW4gZXh0ZW5zaW9ucyBvZiB0aGlzIG1lc3NhZ2UuIFNlZSBhYm92ZS4KCgwKBAQLBQASBOwDDRgKDQoFBAsFAAESBOwDDREKDQoFBAsFAAISBOwDFRgKDAoCBAwSBu8DAMoEAQoLCgMEDAESBO8DCBQKowIKBAQMAgASBPQDAi4alAIgVGhlIGN0eXBlIG9wdGlvbiBpbnN0cnVjdHMgdGhlIEMrKyBjb2RlIGdlbmVyYXRvciB0byB1c2UgYSBkaWZmZXJlbnQKIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaWVsZCB0aGFuIGl0IG5vcm1hbGx5IHdvdWxkLiAgU2VlIHRoZSBzcGVjaWZpYwogb3B0aW9ucyBiZWxvdy4gIFRoaXMgb3B0aW9uIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gdGhlIG9wZW4gc291cmNlCiByZWxlYXNlIC0tIHNvcnJ5LCB3ZSdsbCB0cnkgdG8gaW5jbHVkZSBpdCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIQoKDQoFBAwCAAQSBPQDAgoKDQoFBAwCAAYSBPQDCxAKDQoFBAwCAAESBPQDERYKDQoFBAwCAAMSBPQDGRoKDQoFBAwCAAgSBPQDGy0KDQoFBAwCAAcSBPQDJiwKDgoEBAwEABIG9QMC/AMDCg0KBQQMBAABEgT1AwcMCh8KBgQMBAACABIE9wMEDxoPIERlZmF1bHQgbW9kZS4KCg8KBwQMBAACAAESBPcDBAoKDwoHBAwEAAIAAhIE9wMNDgoOCgYEDAQAAgESBPkDBA0KDwoHBAwEAAIBARIE+QMECAoPCgcEDAQAAgECEgT5AwsMCg4KBgQMBAACAhIE+wMEFQoPCgcEDAQAAgIBEgT7AwQQCg8KBwQMBAACAgISBPsDExQK2gIKBAQMAgESBIIEAhsaywIgVGhlIHBhY2tlZCBvcHRpb24gY2FuIGJlIGVuYWJsZWQgZm9yIHJlcGVhdGVkIHByaW1pdGl2ZSBmaWVsZHMgdG8gZW5hYmxlCiBhIG1vcmUgZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9uIHRoZSB3aXJlLiBSYXRoZXIgdGhhbiByZXBlYXRlZGx5CiB3cml0aW5nIHRoZSB0YWcgYW5kIHR5cGUgZm9yIGVhY2ggZWxlbWVudCwgdGhlIGVudGlyZSBhcnJheSBpcyBlbmNvZGVkIGFzCiBhIHNpbmdsZSBsZW5ndGgtZGVsaW1pdGVkIGJsb2IuIEluIHByb3RvMywgb25seSBleHBsaWNpdCBzZXR0aW5nIGl0IHRvCiBmYWxzZSB3aWxsIGF2b2lkIHVzaW5nIHBhY2tlZCBlbmNvZGluZy4KCg0KBQQMAgEEEgSCBAIKCg0KBQQMAgEFEgSCBAsPCg0KBQQMAgEBEgSCBBAWCg0KBQQMAgEDEgSCBBkaCpoFCgQEDAICEgSPBAIzGosFIFRoZSBqc3R5cGUgb3B0aW9uIGRldGVybWluZXMgdGhlIEphdmFTY3JpcHQgdHlwZSB1c2VkIGZvciB2YWx1ZXMgb2YgdGhlCiBmaWVsZC4gIFRoZSBvcHRpb24gaXMgcGVybWl0dGVkIG9ubHkgZm9yIDY0IGJpdCBpbnRlZ3JhbCBhbmQgZml4ZWQgdHlwZXMKIChpbnQ2NCwgdWludDY0LCBzaW50NjQsIGZpeGVkNjQsIHNmaXhlZDY0KS4gIEEgZmllbGQgd2l0aCBqc3R5cGUgSlNfU1RSSU5HCiBpcyByZXByZXNlbnRlZCBhcyBKYXZhU2NyaXB0IHN0cmluZywgd2hpY2ggYXZvaWRzIGxvc3Mgb2YgcHJlY2lzaW9uIHRoYXQKIGNhbiBoYXBwZW4gd2hlbiBhIGxhcmdlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGZsb2F0aW5nIHBvaW50IEphdmFTY3JpcHQuCiBTcGVjaWZ5aW5nIEpTX05VTUJFUiBmb3IgdGhlIGpzdHlwZSBjYXVzZXMgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGNvZGUgdG8KIHVzZSB0aGUgSmF2YVNjcmlwdCAibnVtYmVyIiB0eXBlLiAgVGhlIGJlaGF2aW9yIG9mIHRoZSBkZWZhdWx0IG9wdGlvbgogSlNfTk9STUFMIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KCiBUaGlzIG9wdGlvbiBpcyBhbiBlbnVtIHRvIHBlcm1pdCBhZGRpdGlvbmFsIHR5cGVzIHRvIGJlIGFkZGVkLCBlLmcuCiBnb29nLm1hdGguSW50ZWdlci4KCg0KBQQMAgIEEgSPBAIKCg0KBQQMAgIGEgSPBAsRCg0KBQQMAgIBEgSPBBIYCg0KBQQMAgIDEgSPBBscCg0KBQQMAgIIEgSPBB0yCg0KBQQMAgIHEgSPBCgxCg4KBAQMBAESBpAEApkEAwoNCgUEDAQBARIEkAQHDQonCgYEDAQBAgASBJIEBBIaFyBVc2UgdGhlIGRlZmF1bHQgdHlwZS4KCg8KBwQMBAECAAESBJIEBA0KDwoHBAwEAQIAAhIEkgQQEQopCgYEDAQBAgESBJUEBBIaGSBVc2UgSmF2YVNjcmlwdCBzdHJpbmdzLgoKDwoHBAwEAQIBARIElQQEDQoPCgcEDAQBAgECEgSVBBARCikKBgQMBAECAhIEmAQEEhoZIFVzZSBKYXZhU2NyaXB0IG51bWJlcnMuCgoPCgcEDAQBAgIBEgSYBAQNCg8KBwQMBAECAgISBJgEEBEK7wwKBAQMAgMSBLcEAika4AwgU2hvdWxkIHRoaXMgZmllbGQgYmUgcGFyc2VkIGxhemlseT8gIExhenkgYXBwbGllcyBvbmx5IHRvIG1lc3NhZ2UtdHlwZQogZmllbGRzLiAgSXQgbWVhbnMgdGhhdCB3aGVuIHRoZSBvdXRlciBtZXNzYWdlIGlzIGluaXRpYWxseSBwYXJzZWQsIHRoZQogaW5uZXIgbWVzc2FnZSdzIGNvbnRlbnRzIHdpbGwgbm90IGJlIHBhcnNlZCBidXQgaW5zdGVhZCBzdG9yZWQgaW4gZW5jb2RlZAogZm9ybS4gIFRoZSBpbm5lciBtZXNzYWdlIHdpbGwgYWN0dWFsbHkgYmUgcGFyc2VkIHdoZW4gaXQgaXMgZmlyc3QgYWNjZXNzZWQuCgogVGhpcyBpcyBvbmx5IGEgaGludC4gIEltcGxlbWVudGF0aW9ucyBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byB1c2UKIGVhZ2VyIG9yIGxhenkgcGFyc2luZyByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbi4gIEhvd2V2ZXIsCiBzZXR0aW5nIHRoaXMgb3B0aW9uIHRydWUgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvdG9jb2wgYXV0aG9yIGJlbGlldmVzIHRoYXQKIHVzaW5nIGxhenkgcGFyc2luZyBvbiB0aGlzIGZpZWxkIGlzIHdvcnRoIHRoZSBhZGRpdGlvbmFsIGJvb2trZWVwaW5nCiBvdmVyaGVhZCB0eXBpY2FsbHkgbmVlZGVkIHRvIGltcGxlbWVudCBpdC4KCiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIHB1YmxpYyBpbnRlcmZhY2Ugb2YgYW55IGdlbmVyYXRlZCBjb2RlOwogYWxsIG1ldGhvZCBzaWduYXR1cmVzIHJlbWFpbiB0aGUgc2FtZS4gIEZ1cnRoZXJtb3JlLCB0aHJlYWQtc2FmZXR5IG9mIHRoZQogaW50ZXJmYWNlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzIG9wdGlvbjsgY29uc3QgbWV0aG9kcyByZW1haW4gc2FmZSB0bwogY2FsbCBmcm9tIG11bHRpcGxlIHRocmVhZHMgY29uY3VycmVudGx5LCB3aGlsZSBub24tY29uc3QgbWV0aG9kcyBjb250aW51ZQogdG8gcmVxdWlyZSBleGNsdXNpdmUgYWNjZXNzLgoKCiBOb3RlIHRoYXQgaW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2Ugbm90IHRvIGNoZWNrIHJlcXVpcmVkIGZpZWxkcyB3aXRoaW4KIGEgbGF6eSBzdWItbWVzc2FnZS4gIFRoYXQgaXMsIGNhbGxpbmcgSXNJbml0aWFsaXplZCgpIG9uIHRoZSBvdXRlciBtZXNzYWdlCiBtYXkgcmV0dXJuIHRydWUgZXZlbiBpZiB0aGUgaW5uZXIgbWVzc2FnZSBoYXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuCiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG90aGVyd2lzZSB0aGUgaW5uZXIgbWVzc2FnZSB3b3VsZCBoYXZlIHRvIGJlCiBwYXJzZWQgaW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgY2hlY2ssIGRlZmVhdGluZyB0aGUgcHVycG9zZSBvZiBsYXp5CiBwYXJzaW5nLiAgQW4gaW1wbGVtZW50YXRpb24gd2hpY2ggY2hvb3NlcyBub3QgdG8gY2hlY2sgcmVxdWlyZWQgZmllbGRzCiBtdXN0IGJlIGNvbnNpc3RlbnQgYWJvdXQgaXQuICBUaGF0IGlzLCBmb3IgYW55IHBhcnRpY3VsYXIgc3ViLW1lc3NhZ2UsIHRoZQogaW1wbGVtZW50YXRpb24gbXVzdCBlaXRoZXIgKmFsd2F5cyogY2hlY2sgaXRzIHJlcXVpcmVkIGZpZWxkcywgb3IgKm5ldmVyKgogY2hlY2sgaXRzIHJlcXVpcmVkIGZpZWxkcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBoYXMKIGJlZW4gcGFyc2VkLgoKDQoFBAwCAwQSBLcEAgoKDQoFBAwCAwUSBLcECw8KDQoFBAwCAwESBLcEEBQKDQoFBAwCAwMSBLcEFxgKDQoFBAwCAwgSBLcEGSgKDQoFBAwCAwcSBLcEIicK6AEKBAQMAgQSBL0EAi8a2QEgSXMgdGhpcyBmaWVsZCBkZXByZWNhdGVkPwogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9ucwogZm9yIGFjY2Vzc29ycywgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LCB0aGlzCiBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIGZpZWxkcy4KCg0KBQQMAgQEEgS9BAIKCg0KBQQMAgQFEgS9BAsPCg0KBQQMAgQBEgS9BBAaCg0KBQQMAgQDEgS9BB0eCg0KBQQMAgQIEgS9BB8uCg0KBQQMAgQHEgS9BCgtCj8KBAQMAgUSBMAEAioaMSBGb3IgR29vZ2xlLWludGVybmFsIG1pZ3JhdGlvbiBvbmx5LiBEbyBub3QgdXNlLgoKDQoFBAwCBQQSBMAEAgoKDQoFBAwCBQUSBMAECw8KDQoFBAwCBQESBMAEEBQKDQoFBAwCBQMSBMAEFxkKDQoFBAwCBQgSBMAEGikKDQoFBAwCBQcSBMAEIygKTwoEBAwCBhIExAQCOhpBIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLgoKDQoFBAwCBgQSBMQEAgoKDQoFBAwCBgYSBMQECx4KDQoFBAwCBgESBMQEHzMKDQoFBAwCBgMSBMQENjkKWgoDBAwFEgTHBAIZGk0gQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLiBTZWUgYWJvdmUuCgoMCgQEDAUAEgTHBA0YCg0KBQQMBQABEgTHBA0RCg0KBQQMBQACEgTHBBUYChwKAwQMCRIEyQQLDSIPIHJlbW92ZWQganR5cGUKCgwKBAQMCQASBMkECwwKDQoFBAwJAAESBMkECwwKDQoFBAwJAAISBMkECwwKDAoCBA0SBswEANIEAQoLCgMEDQESBMwECBQKTwoEBA0CABIEzgQCOhpBIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLgoKDQoFBA0CAAQSBM4EAgoKDQoFBA0CAAYSBM4ECx4KDQoFBA0CAAESBM4EHzMKDQoFBA0CAAMSBM4ENjkKWgoDBA0FEgTRBAIZGk0gQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLiBTZWUgYWJvdmUuCgoMCgQEDQUAEgTRBA0YCg0KBQQNBQABEgTRBA0RCg0KBQQNBQACEgTRBBUYCgwKAgQOEgbUBADnBAEKCwoDBA4BEgTUBAgTCmAKBAQOAgASBNgEAiAaUiBTZXQgdGhpcyBvcHRpb24gdG8gdHJ1ZSB0byBhbGxvdyBtYXBwaW5nIGRpZmZlcmVudCB0YWcgbmFtZXMgdG8gdGhlIHNhbWUKIHZhbHVlLgoKDQoFBA4CAAQSBNgEAgoKDQoFBA4CAAUSBNgECw8KDQoFBA4CAAESBNgEEBsKDQoFBA4CAAMSBNgEHh8K5QEKBAQOAgESBN4EAi8a1gEgSXMgdGhpcyBlbnVtIGRlcHJlY2F0ZWQ/CiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCiBmb3IgdGhlIGVudW0sIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCwgdGhpcwogaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBlbnVtcy4KCg0KBQQOAgEEEgTeBAIKCg0KBQQOAgEFEgTeBAsPCg0KBQQOAgEBEgTeBBAaCg0KBQQOAgEDEgTeBB0eCg0KBQQOAgEIEgTeBB8uCg0KBQQOAgEHEgTeBCgtCh8KAwQOCRIE4AQLDSISIGphdmFuYW5vX2FzX2xpdGUKCgwKBAQOCQASBOAECwwKDQoFBA4JAAESBOAECwwKDQoFBA4JAAISBOAECwwKTwoEBA4CAhIE4wQCOhpBIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLgoKDQoFBA4CAgQSBOMEAgoKDQoFBA4CAgYSBOMECx4KDQoFBA4CAgESBOMEHzMKDQoFBA4CAgMSBOMENjkKWgoDBA4FEgTmBAIZGk0gQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLiBTZWUgYWJvdmUuCgoMCgQEDgUAEgTmBA0YCg0KBQQOBQABEgTmBA0RCg0KBQQOBQACEgTmBBUYCgwKAgQPEgbpBAD1BAEKCwoDBA8BEgTpBAgYCvcBCgQEDwIAEgTuBAIvGugBIElzIHRoaXMgZW51bSB2YWx1ZSBkZXByZWNhdGVkPwogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9ucwogZm9yIHRoZSBlbnVtIHZhbHVlLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsCiB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgZW51bSB2YWx1ZXMuCgoNCgUEDwIABBIE7gQCCgoNCgUEDwIABRIE7gQLDwoNCgUEDwIAARIE7gQQGgoNCgUEDwIAAxIE7gQdHgoNCgUEDwIACBIE7gQfLgoNCgUEDwIABxIE7gQoLQpPCgQEDwIBEgTxBAI6GkEgVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCgoNCgUEDwIBBBIE8QQCCgoNCgUEDwIBBhIE8QQLHgoNCgUEDwIBARIE8QQfMwoNCgUEDwIBAxIE8QQ2OQpaCgMEDwUSBPQEAhkaTSBDbGllbnRzIGNhbiBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgaW4gZXh0ZW5zaW9ucyBvZiB0aGlzIG1lc3NhZ2UuIFNlZSBhYm92ZS4KCgwKBAQPBQASBPQEDRgKDQoFBA8FAAESBPQEDREKDQoFBA8FAAISBPQEFRgKDAoCBBASBvcEAIkFAQoLCgMEEAESBPcECBYK2QMKBAQQAgASBIIFAjAa3wEgSXMgdGhpcyBzZXJ2aWNlIGRlcHJlY2F0ZWQ/CiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zCiBmb3IgdGhlIHNlcnZpY2UsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCwKIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBzZXJ2aWNlcy4KMugBIE5vdGU6ICBGaWVsZCBudW1iZXJzIDEgdGhyb3VnaCAzMiBhcmUgcmVzZXJ2ZWQgZm9yIEdvb2dsZSdzIGludGVybmFsIFJQQwogICBmcmFtZXdvcmsuICBXZSBhcG9sb2dpemUgZm9yIGhvYXJkaW5nIHRoZXNlIG51bWJlcnMgdG8gb3Vyc2VsdmVzLCBidXQKICAgd2Ugd2VyZSBhbHJlYWR5IHVzaW5nIHRoZW0gbG9uZyBiZWZvcmUgd2UgZGVjaWRlZCB0byByZWxlYXNlIFByb3RvY29sCiAgIEJ1ZmZlcnMuCgoNCgUEEAIABBIEggUCCgoNCgUEEAIABRIEggULDwoNCgUEEAIAARIEggUQGgoNCgUEEAIAAxIEggUdHwoNCgUEEAIACBIEggUgLwoNCgUEEAIABxIEggUpLgpPCgQEEAIBEgSFBQI6GkEgVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuCgoNCgUEEAIBBBIEhQUCCgoNCgUEEAIBBhIEhQULHgoNCgUEEAIBARIEhQUfMwoNCgUEEAIBAxIEhQU2OQpaCgMEEAUSBIgFAhkaTSBDbGllbnRzIGNhbiBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgaW4gZXh0ZW5zaW9ucyBvZiB0aGlzIG1lc3NhZ2UuIFNlZSBhYm92ZS4KCgwKBAQQBQASBIgFDRgKDQoFBBAFAAESBIgFDREKDQoFBBAFAAISBIgFFRgKDAoCBBESBosFAKgFAQoLCgMEEQESBIsFCBUK1gMKBAQRAgASBJYFAjAa3AEgSXMgdGhpcyBtZXRob2QgZGVwcmVjYXRlZD8KIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnMKIGZvciB0aGUgbWV0aG9kLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsCiB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgbWV0aG9kcy4KMugBIE5vdGU6ICBGaWVsZCBudW1iZXJzIDEgdGhyb3VnaCAzMiBhcmUgcmVzZXJ2ZWQgZm9yIEdvb2dsZSdzIGludGVybmFsIFJQQwogICBmcmFtZXdvcmsuICBXZSBhcG9sb2dpemUgZm9yIGhvYXJkaW5nIHRoZXNlIG51bWJlcnMgdG8gb3Vyc2VsdmVzLCBidXQKICAgd2Ugd2VyZSBhbHJlYWR5IHVzaW5nIHRoZW0gbG9uZyBiZWZvcmUgd2UgZGVjaWRlZCB0byByZWxlYXNlIFByb3RvY29sCiAgIEJ1ZmZlcnMuCgoNCgUEEQIABBIElgUCCgoNCgUEEQIABRIElgULDwoNCgUEEQIAARIElgUQGgoNCgUEEQIAAxIElgUdHwoNCgUEEQIACBIElgUgLwoNCgUEEQIABxIElgUpLgrwAQoEBBEEABIGmwUCnwUDGt8BIElzIHRoaXMgbWV0aG9kIHNpZGUtZWZmZWN0LWZyZWUgKG9yIHNhZmUgaW4gSFRUUCBwYXJsYW5jZSksIG9yIGlkZW1wb3RlbnQsCiBvciBuZWl0aGVyPyBIVFRQIGJhc2VkIFJQQyBpbXBsZW1lbnRhdGlvbiBtYXkgY2hvb3NlIEdFVCB2ZXJiIGZvciBzYWZlCiBtZXRob2RzLCBhbmQgUFVUIHZlcmIgZm9yIGlkZW1wb3RlbnQgbWV0aG9kcyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFBPU1QuCgoNCgUEEQQAARIEmwUHFwoOCgYEEQQAAgASBJwFBBwKDwoHBBEEAAIAARIEnAUEFwoPCgcEEQQAAgACEgScBRobCiQKBgQRBAACARIEnQUEHCIUIGltcGxpZXMgaWRlbXBvdGVudAoKDwoHBBEEAAIBARIEnQUEEwoPCgcEEQQAAgECEgSdBRobCjcKBgQRBAACAhIEngUEHCInIGlkZW1wb3RlbnQsIGJ1dCBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMKCg8KBwQRBAACAgESBJ4FBA4KDwoHBBEEAAICAhIEngUaGwoOCgQEEQIBEgagBQKhBScKDQoFBBECAQQSBKAFAgoKDQoFBBECAQYSBKAFCxsKDQoFBBECAQESBKAFHC0KDQoFBBECAQMSBKEFBggKDQoFBBECAQgSBKEFCSYKDQoFBBECAQcSBKEFEiUKTwoEBBECAhIEpAUCOhpBIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLgoKDQoFBBECAgQSBKQFAgoKDQoFBBECAgYSBKQFCx4KDQoFBBECAgESBKQFHzMKDQoFBBECAgMSBKQFNjkKWgoDBBEFEgSnBQIZGk0gQ2xpZW50cyBjYW4gZGVmaW5lIGN1c3RvbSBvcHRpb25zIGluIGV4dGVuc2lvbnMgb2YgdGhpcyBtZXNzYWdlLiBTZWUgYWJvdmUuCgoMCgQEEQUAEgSnBQ0YCg0KBQQRBQABEgSnBQ0RCg0KBQQRBQACEgSnBRUYCosDCgIEEhIGsQUAxQUBGvwCIEEgbWVzc2FnZSByZXByZXNlbnRpbmcgYSBvcHRpb24gdGhlIHBhcnNlciBkb2VzIG5vdCByZWNvZ25pemUuIFRoaXMgb25seQogYXBwZWFycyBpbiBvcHRpb25zIHByb3RvcyBjcmVhdGVkIGJ5IHRoZSBjb21waWxlcjo6UGFyc2VyIGNsYXNzLgogRGVzY3JpcHRvclBvb2wgcmVzb2x2ZXMgdGhlc2Ugd2hlbiBidWlsZGluZyBEZXNjcmlwdG9yIG9iamVjdHMuIFRoZXJlZm9yZSwKIG9wdGlvbnMgcHJvdG9zIGluIGRlc2NyaXB0b3Igb2JqZWN0cyAoZS5nLiByZXR1cm5lZCBieSBEZXNjcmlwdG9yOjpvcHRpb25zKCksCiBvciBwcm9kdWNlZCBieSBEZXNjcmlwdG9yOjpDb3B5VG8oKSkgd2lsbCBuZXZlciBoYXZlIFVuaW50ZXJwcmV0ZWRPcHRpb25zCiBpbiB0aGVtLgoKCwoDBBIBEgSxBQgbCssCCgQEEgMAEga3BQK6BQMaugIgVGhlIG5hbWUgb2YgdGhlIHVuaW50ZXJwcmV0ZWQgb3B0aW9uLiAgRWFjaCBzdHJpbmcgcmVwcmVzZW50cyBhIHNlZ21lbnQgaW4KIGEgZG90LXNlcGFyYXRlZCBuYW1lLiAgaXNfZXh0ZW5zaW9uIGlzIHRydWUgaWZmIGEgc2VnbWVudCByZXByZXNlbnRzIGFuCiBleHRlbnNpb24gKGRlbm90ZWQgd2l0aCBwYXJlbnRoZXNlcyBpbiBvcHRpb25zIHNwZWNzIGluIC5wcm90byBmaWxlcykuCiBFLmcuLHsgWyJmb28iLCBmYWxzZV0sIFsiYmFyLmJheiIsIHRydWVdLCBbInF1eCIsIGZhbHNlXSB9IHJlcHJlc2VudHMKICJmb28uKGJhci5iYXopLnF1eCIuCgoNCgUEEgMAARIEtwUKEgoOCgYEEgMAAgASBLgFBCIKDwoHBBIDAAIABBIEuAUEDAoPCgcEEgMAAgAFEgS4BQ0TCg8KBwQSAwACAAESBLgFFB0KDwoHBBIDAAIAAxIEuAUgIQoOCgYEEgMAAgESBLkFBCMKDwoHBBIDAAIBBBIEuQUEDAoPCgcEEgMAAgEFEgS5BQ0RCg8KBwQSAwACAQESBLkFEh4KDwoHBBIDAAIBAxIEuQUhIgoMCgQEEgIAEgS7BQIdCg0KBQQSAgAEEgS7BQIKCg0KBQQSAgAGEgS7BQsTCg0KBQQSAgABEgS7BRQYCg0KBQQSAgADEgS7BRscCpwBCgQEEgIBEgS/BQInGo0BIFRoZSB2YWx1ZSBvZiB0aGUgdW5pbnRlcnByZXRlZCBvcHRpb24sIGluIHdoYXRldmVyIHR5cGUgdGhlIHRva2VuaXplcgogaWRlbnRpZmllZCBpdCBhcyBkdXJpbmcgcGFyc2luZy4gRXhhY3RseSBvbmUgb2YgdGhlc2Ugc2hvdWxkIGJlIHNldC4KCg0KBQQSAgEEEgS/BQIKCg0KBQQSAgEFEgS/BQsRCg0KBQQSAgEBEgS/BRIiCg0KBQQSAgEDEgS/BSUmCgwKBAQSAgISBMAFAikKDQoFBBICAgQSBMAFAgoKDQoFBBICAgUSBMAFCxEKDQoFBBICAgESBMAFEiQKDQoFBBICAgMSBMAFJygKDAoEBBICAxIEwQUCKAoNCgUEEgIDBBIEwQUCCgoNCgUEEgIDBRIEwQULEAoNCgUEEgIDARIEwQURIwoNCgUEEgIDAxIEwQUmJwoMCgQEEgIEEgTCBQIjCg0KBQQSAgQEEgTCBQIKCg0KBQQSAgQFEgTCBQsRCg0KBQQSAgQBEgTCBRIeCg0KBQQSAgQDEgTCBSEiCgwKBAQSAgUSBMMFAiIKDQoFBBICBQQSBMMFAgoKDQoFBBICBQUSBMMFCxAKDQoFBBICBQESBMMFER0KDQoFBBICBQMSBMMFICEKDAoEBBICBhIExAUCJgoNCgUEEgIGBBIExAUCCgoNCgUEEgIGBRIExAULEQoNCgUEEgIGARIExAUSIQoNCgUEEgIGAxIExAUkJQraAQoCBBMSBswFAM0GARpqIEVuY2Fwc3VsYXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgZnJvbSB3aGljaCBhCiBGaWxlRGVzY3JpcHRvclByb3RvIHdhcyBnZW5lcmF0ZWQuCjJgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIE9wdGlvbmFsIHNvdXJjZSBjb2RlIGluZm8KCgsKAwQTARIEzAUIFgqCEQoEBBMCABIE+AUCIRrzECBBIExvY2F0aW9uIGlkZW50aWZpZXMgYSBwaWVjZSBvZiBzb3VyY2UgY29kZSBpbiBhIC5wcm90byBmaWxlIHdoaWNoCiBjb3JyZXNwb25kcyB0byBhIHBhcnRpY3VsYXIgZGVmaW5pdGlvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgaW50ZW5kZWQKIHRvIGJlIHVzZWZ1bCB0byBJREVzLCBjb2RlIGluZGV4ZXJzLCBkb2N1bWVudGF0aW9uIGdlbmVyYXRvcnMsIGFuZCBzaW1pbGFyCiB0b29scy4KCiBGb3IgZXhhbXBsZSwgc2F5IHdlIGhhdmUgYSBmaWxlIGxpa2U6CiAgIG1lc3NhZ2UgRm9vIHsKICAgICBvcHRpb25hbCBzdHJpbmcgZm9vID0gMTsKICAgfQogTGV0J3MgbG9vayBhdCBqdXN0IHRoZSBmaWVsZCBkZWZpbml0aW9uOgogICBvcHRpb25hbCBzdHJpbmcgZm9vID0gMTsKICAgXiAgICAgICBeXiAgICAgXl4gIF4gIF5eXgogICBhICAgICAgIGJjICAgICBkZSAgZiAgZ2hpCiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgogICBzcGFuICAgcGF0aCAgICAgICAgICAgICAgIHJlcHJlc2VudHMKICAgW2EsaSkgIFsgNCwgMCwgMiwgMCBdICAgICBUaGUgd2hvbGUgZmllbGQgZGVmaW5pdGlvbi4KICAgW2EsYikgIFsgNCwgMCwgMiwgMCwgNCBdICBUaGUgbGFiZWwgKG9wdGlvbmFsKS4KICAgW2MsZCkgIFsgNCwgMCwgMiwgMCwgNSBdICBUaGUgdHlwZSAoc3RyaW5nKS4KICAgW2UsZikgIFsgNCwgMCwgMiwgMCwgMSBdICBUaGUgbmFtZSAoZm9vKS4KICAgW2csaCkgIFsgNCwgMCwgMiwgMCwgMyBdICBUaGUgbnVtYmVyICgxKS4KCiBOb3RlczoKIC0gQSBsb2NhdGlvbiBtYXkgcmVmZXIgdG8gYSByZXBlYXRlZCBmaWVsZCBpdHNlbGYgKGkuZS4gbm90IHRvIGFueQogICBwYXJ0aWN1bGFyIGluZGV4IHdpdGhpbiBpdCkuICBUaGlzIGlzIHVzZWQgd2hlbmV2ZXIgYSBzZXQgb2YgZWxlbWVudHMgYXJlCiAgIGxvZ2ljYWxseSBlbmNsb3NlZCBpbiBhIHNpbmdsZSBjb2RlIHNlZ21lbnQuICBGb3IgZXhhbXBsZSwgYW4gZW50aXJlCiAgIGV4dGVuZCBibG9jayAocG9zc2libHkgY29udGFpbmluZyBtdWx0aXBsZSBleHRlbnNpb24gZGVmaW5pdGlvbnMpIHdpbGwKICAgaGF2ZSBhbiBvdXRlciBsb2NhdGlvbiB3aG9zZSBwYXRoIHJlZmVycyB0byB0aGUgImV4dGVuc2lvbnMiIHJlcGVhdGVkCiAgIGZpZWxkIHdpdGhvdXQgYW4gaW5kZXguCiAtIE11bHRpcGxlIGxvY2F0aW9ucyBtYXkgaGF2ZSB0aGUgc2FtZSBwYXRoLiAgVGhpcyBoYXBwZW5zIHdoZW4gYSBzaW5nbGUKICAgbG9naWNhbCBkZWNsYXJhdGlvbiBpcyBzcHJlYWQgb3V0IGFjcm9zcyBtdWx0aXBsZSBwbGFjZXMuICBUaGUgbW9zdAogICBvYnZpb3VzIGV4YW1wbGUgaXMgdGhlICJleHRlbmQiIGJsb2NrIGFnYWluIC0tIHRoZXJlIG1heSBiZSBtdWx0aXBsZQogICBleHRlbmQgYmxvY2tzIGluIHRoZSBzYW1lIHNjb3BlLCBlYWNoIG9mIHdoaWNoIHdpbGwgaGF2ZSB0aGUgc2FtZSBwYXRoLgogLSBBIGxvY2F0aW9uJ3Mgc3BhbiBpcyBub3QgYWx3YXlzIGEgc3Vic2V0IG9mIGl0cyBwYXJlbnQncyBzcGFuLiAgRm9yCiAgIGV4YW1wbGUsIHRoZSAiZXh0ZW5kZWUiIG9mIGFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbiBhcHBlYXJzIGF0IHRoZQogICBiZWdpbm5pbmcgb2YgdGhlICJleHRlbmQiIGJsb2NrIGFuZCBpcyBzaGFyZWQgYnkgYWxsIGV4dGVuc2lvbnMgd2l0aGluCiAgIHRoZSBibG9jay4KIC0gSnVzdCBiZWNhdXNlIGEgbG9jYXRpb24ncyBzcGFuIGlzIGEgc3Vic2V0IG9mIHNvbWUgb3RoZXIgbG9jYXRpb24ncyBzcGFuCiAgIGRvZXMgbm90IG1lYW4gdGhhdCBpdCBpcyBhIGRlc2NlbmRlbnQuICBGb3IgZXhhbXBsZSwgYSAiZ3JvdXAiIGRlZmluZXMKICAgYm90aCBhIHR5cGUgYW5kIGEgZmllbGQgaW4gYSBzaW5nbGUgZGVjbGFyYXRpb24uICBUaHVzLCB0aGUgbG9jYXRpb25zCiAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgYW5kIGZpZWxkIGFuZCB0aGVpciBjb21wb25lbnRzIHdpbGwgb3ZlcmxhcC4KIC0gQ29kZSB3aGljaCB0cmllcyB0byBpbnRlcnByZXQgbG9jYXRpb25zIHNob3VsZCBwcm9iYWJseSBiZSBkZXNpZ25lZCB0bwogICBpZ25vcmUgdGhvc2UgdGhhdCBpdCBkb2Vzbid0IHVuZGVyc3RhbmQsIGFzIG1vcmUgdHlwZXMgb2YgbG9jYXRpb25zIGNvdWxkCiAgIGJlIHJlY29yZGVkIGluIHRoZSBmdXR1cmUuCgoNCgUEEwIABBIE+AUCCgoNCgUEEwIABhIE+AULEwoNCgUEEwIAARIE+AUUHAoNCgUEEwIAAxIE+AUfIAoOCgQEEwMAEgb5BQLMBgMKDQoFBBMDAAESBPkFChIKgwcKBgQTAwACABIEkQYEKhryBiBJZGVudGlmaWVzIHdoaWNoIHBhcnQgb2YgdGhlIEZpbGVEZXNjcmlwdG9yUHJvdG8gd2FzIGRlZmluZWQgYXQgdGhpcwogbG9jYXRpb24uCgogRWFjaCBlbGVtZW50IGlzIGEgZmllbGQgbnVtYmVyIG9yIGFuIGluZGV4LiAgVGhleSBmb3JtIGEgcGF0aCBmcm9tCiB0aGUgcm9vdCBGaWxlRGVzY3JpcHRvclByb3RvIHRvIHRoZSBwbGFjZSB3aGVyZSB0aGUgZGVmaW5pdGlvbi4gIEZvcgogZXhhbXBsZSwgdGhpcyBwYXRoOgogICBbIDQsIDMsIDIsIDcsIDEgXQogcmVmZXJzIHRvOgogICBmaWxlLm1lc3NhZ2VfdHlwZSgzKSAgLy8gNCwgMwogICAgICAgLmZpZWxkKDcpICAgICAgICAgLy8gMiwgNwogICAgICAgLm5hbWUoKSAgICAgICAgICAgLy8gMQogVGhpcyBpcyBiZWNhdXNlIEZpbGVEZXNjcmlwdG9yUHJvdG8ubWVzc2FnZV90eXBlIGhhcyBmaWVsZCBudW1iZXIgNDoKICAgcmVwZWF0ZWQgRGVzY3JpcHRvclByb3RvIG1lc3NhZ2VfdHlwZSA9IDQ7CiBhbmQgRGVzY3JpcHRvclByb3RvLmZpZWxkIGhhcyBmaWVsZCBudW1iZXIgMjoKICAgcmVwZWF0ZWQgRmllbGREZXNjcmlwdG9yUHJvdG8gZmllbGQgPSAyOwogYW5kIEZpZWxkRGVzY3JpcHRvclByb3RvLm5hbWUgaGFzIGZpZWxkIG51bWJlciAxOgogICBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7CgogVGh1cywgdGhlIGFib3ZlIHBhdGggZ2l2ZXMgdGhlIGxvY2F0aW9uIG9mIGEgZmllbGQgbmFtZS4gIElmIHdlIHJlbW92ZWQKIHRoZSBsYXN0IGVsZW1lbnQ6CiAgIFsgNCwgMywgMiwgNyBdCiB0aGlzIHBhdGggcmVmZXJzIHRvIHRoZSB3aG9sZSBmaWVsZCBkZWNsYXJhdGlvbiAoZnJvbSB0aGUgYmVnaW5uaW5nCiBvZiB0aGUgbGFiZWwgdG8gdGhlIHRlcm1pbmF0aW5nIHNlbWljb2xvbikuCgoPCgcEEwMAAgAEEgSRBgQMCg8KBwQTAwACAAUSBJEGDRIKDwoHBBMDAAIAARIEkQYTFwoPCgcEEwMAAgADEgSRBhobCg8KBwQTAwACAAgSBJEGHCkKEgoKBBMDAAIACOcHABIEkQYdKAoTCgsEEwMAAgAI5wcAAhIEkQYdIwoUCgwEEwMAAgAI5wcAAgASBJEGHSMKFQoNBBMDAAIACOcHAAIAARIEkQYdIwoTCgsEEwMAAgAI5wcAAxIEkQYkKArSAgoGBBMDAAIBEgSYBgQqGsECIEFsd2F5cyBoYXMgZXhhY3RseSB0aHJlZSBvciBmb3VyIGVsZW1lbnRzOiBzdGFydCBsaW5lLCBzdGFydCBjb2x1bW4sCiBlbmQgbGluZSAob3B0aW9uYWwsIG90aGVyd2lzZSBhc3N1bWVkIHNhbWUgYXMgc3RhcnQgbGluZSksIGVuZCBjb2x1bW4uCiBUaGVzZSBhcmUgcGFja2VkIGludG8gYSBzaW5nbGUgZmllbGQgZm9yIGVmZmljaWVuY3kuICBOb3RlIHRoYXQgbGluZQogYW5kIGNvbHVtbiBudW1iZXJzIGFyZSB6ZXJvLWJhc2VkIC0tIHR5cGljYWxseSB5b3Ugd2lsbCB3YW50IHRvIGFkZAogMSB0byBlYWNoIGJlZm9yZSBkaXNwbGF5aW5nIHRvIGEgdXNlci4KCg8KBwQTAwACAQQSBJgGBAwKDwoHBBMDAAIBBRIEmAYNEgoPCgcEEwMAAgEBEgSYBhMXCg8KBwQTAwACAQMSBJgGGhsKDwoHBBMDAAIBCBIEmAYcKQoSCgoEEwMAAgEI5wcAEgSYBh0oChMKCwQTAwACAQjnBwACEgSYBh0jChQKDAQTAwACAQjnBwACABIEmAYdIwoVCg0EEwMAAgEI5wcAAgABEgSYBh0jChMKCwQTAwACAQjnBwADEgSYBiQoCqUMCgYEEwMAAgISBMkGBCkalAwgSWYgdGhpcyBTb3VyY2VDb2RlSW5mbyByZXByZXNlbnRzIGEgY29tcGxldGUgZGVjbGFyYXRpb24sIHRoZXNlIGFyZSBhbnkKIGNvbW1lbnRzIGFwcGVhcmluZyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiB3aGljaCBhcHBlYXIgdG8gYmUKIGF0dGFjaGVkIHRvIHRoZSBkZWNsYXJhdGlvbi4KCiBBIHNlcmllcyBvZiBsaW5lIGNvbW1lbnRzIGFwcGVhcmluZyBvbiBjb25zZWN1dGl2ZSBsaW5lcywgd2l0aCBubyBvdGhlcgogdG9rZW5zIGFwcGVhcmluZyBvbiB0aG9zZSBsaW5lcywgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlIGNvbW1lbnQuCgogbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cyB3aWxsIGtlZXAgcGFyYWdyYXBocyBvZiBjb21tZW50cyB0aGF0IGFwcGVhcgogYmVmb3JlIChidXQgbm90IGNvbm5lY3RlZCB0bykgdGhlIGN1cnJlbnQgZWxlbWVudC4gRWFjaCBwYXJhZ3JhcGgsCiBzZXBhcmF0ZWQgYnkgZW1wdHkgbGluZXMsIHdpbGwgYmUgb25lIGNvbW1lbnQgZWxlbWVudCBpbiB0aGUgcmVwZWF0ZWQKIGZpZWxkLgoKIE9ubHkgdGhlIGNvbW1lbnQgY29udGVudCBpcyBwcm92aWRlZDsgY29tbWVudCBtYXJrZXJzIChlLmcuIC8vKSBhcmUKIHN0cmlwcGVkIG91dC4gIEZvciBibG9jayBjb21tZW50cywgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBhbiBhc3Rlcmlzawogd2lsbCBiZSBzdHJpcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIG90aGVyIHRoYW4gdGhlIGZpcnN0LgogTmV3bGluZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuCgogRXhhbXBsZXM6CgogICBvcHRpb25hbCBpbnQzMiBmb28gPSAxOyAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBmb28uCiAgIC8vIENvbW1lbnQgYXR0YWNoZWQgdG8gYmFyLgogICBvcHRpb25hbCBpbnQzMiBiYXIgPSAyOwoKICAgb3B0aW9uYWwgc3RyaW5nIGJheiA9IDM7CiAgIC8vIENvbW1lbnQgYXR0YWNoZWQgdG8gYmF6LgogICAvLyBBbm90aGVyIGxpbmUgYXR0YWNoZWQgdG8gYmF6LgoKICAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBxdXguCiAgIC8vCiAgIC8vIEFub3RoZXIgbGluZSBhdHRhY2hlZCB0byBxdXguCiAgIG9wdGlvbmFsIGRvdWJsZSBxdXggPSA0OwoKICAgLy8gRGV0YWNoZWQgY29tbWVudCBmb3IgY29yZ2UuIFRoaXMgaXMgbm90IGxlYWRpbmcgb3IgdHJhaWxpbmcgY29tbWVudHMKICAgLy8gdG8gcXV4IG9yIGNvcmdlIGJlY2F1c2UgdGhlcmUgYXJlIGJsYW5rIGxpbmVzIHNlcGFyYXRpbmcgaXQgZnJvbQogICAvLyBib3RoLgoKICAgLy8gRGV0YWNoZWQgY29tbWVudCBmb3IgY29yZ2UgcGFyYWdyYXBoIDIuCgogICBvcHRpb25hbCBzdHJpbmcgY29yZ2UgPSA1OwogICAvKiBCbG9jayBjb21tZW50IGF0dGFjaGVkCiAgICAqIHRvIGNvcmdlLiAgTGVhZGluZyBhc3Rlcmlza3MKICAgICogd2lsbCBiZSByZW1vdmVkLiAqLwogICAvKiBCbG9jayBjb21tZW50IGF0dGFjaGVkIHRvCiAgICAqIGdyYXVsdC4gKi8KICAgb3B0aW9uYWwgaW50MzIgZ3JhdWx0ID0gNjsKCiAgIC8vIGlnbm9yZWQgZGV0YWNoZWQgY29tbWVudHMuCgoPCgcEEwMAAgIEEgTJBgQMCg8KBwQTAwACAgUSBMkGDRMKDwoHBBMDAAICARIEyQYUJAoPCgcEEwMAAgIDEgTJBicoCg4KBgQTAwACAxIEygYEKgoPCgcEEwMAAgMEEgTKBgQMCg8KBwQTAwACAwUSBMoGDRMKDwoHBBMDAAIDARIEygYUJQoPCgcEEwMAAgMDEgTKBigpCg4KBgQTAwACBBIEywYEMgoPCgcEEwMAAgQEEgTLBgQMCg8KBwQTAwACBAUSBMsGDRMKDwoHBBMDAAIEARIEywYULQoPCgcEEwMAAgQDEgTLBjAxCu4BCgIEFBIG0gYA5wYBGt8BIERlc2NyaWJlcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZ2VuZXJhdGVkIGNvZGUgYW5kIGl0cyBvcmlnaW5hbCBzb3VyY2UKIGZpbGUuIEEgR2VuZXJhdGVkQ29kZUluZm8gbWVzc2FnZSBpcyBhc3NvY2lhdGVkIHdpdGggb25seSBvbmUgZ2VuZXJhdGVkCiBzb3VyY2UgZmlsZSwgYnV0IG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gZGlmZmVyZW50IHNvdXJjZSAucHJvdG8gZmlsZXMuCgoLCgMEFAESBNIGCBkKeAoEBBQCABIE1QYCJRpqIEFuIEFubm90YXRpb24gY29ubmVjdHMgc29tZSBzcGFuIG9mIHRleHQgaW4gZ2VuZXJhdGVkIGNvZGUgdG8gYW4gZWxlbWVudAogb2YgaXRzIGdlbmVyYXRpbmcgLnByb3RvIGZpbGUuCgoNCgUEFAIABBIE1QYCCgoNCgUEFAIABhIE1QYLFQoNCgUEFAIAARIE1QYWIAoNCgUEFAIAAxIE1QYjJAoOCgQEFAMAEgbWBgLmBgMKDQoFBBQDAAESBNYGChQKjwEKBgQUAwACABIE2QYEKhp/IElkZW50aWZpZXMgdGhlIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSAucHJvdG8gZmlsZS4gVGhpcyBmaWVsZAogaXMgZm9ybWF0dGVkIHRoZSBzYW1lIGFzIFNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uLnBhdGguCgoPCgcEFAMAAgAEEgTZBgQMCg8KBwQUAwACAAUSBNkGDRIKDwoHBBQDAAIAARIE2QYTFwoPCgcEFAMAAgADEgTZBhobCg8KBwQUAwACAAgSBNkGHCkKEgoKBBQDAAIACOcHABIE2QYdKAoTCgsEFAMAAgAI5wcAAhIE2QYdIwoUCgwEFAMAAgAI5wcAAgASBNkGHSMKFQoNBBQDAAIACOcHAAIAARIE2QYdIwoTCgsEFAMAAgAI5wcAAxIE2QYkKApPCgYEFAMAAgESBNwGBCQaPyBJZGVudGlmaWVzIHRoZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSAucHJvdG8uCgoPCgcEFAMAAgEEEgTcBgQMCg8KBwQUAwACAQUSBNwGDRMKDwoHBBQDAAIBARIE3AYUHwoPCgcEFAMAAgEDEgTcBiIjCncKBgQUAwACAhIE4AYEHRpnIElkZW50aWZpZXMgdGhlIHN0YXJ0aW5nIG9mZnNldCBpbiBieXRlcyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUKIHRoYXQgcmVsYXRlcyB0byB0aGUgaWRlbnRpZmllZCBvYmplY3QuCgoPCgcEFAMAAgIEEgTgBgQMCg8KBwQUAwACAgUSBOAGDRIKDwoHBBQDAAICARIE4AYTGAoPCgcEFAMAAgIDEgTgBhscCtsBCgYEFAMAAgMSBOUGBBsaygEgSWRlbnRpZmllcyB0aGUgZW5kaW5nIG9mZnNldCBpbiBieXRlcyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgdGhhdAogcmVsYXRlcyB0byB0aGUgaWRlbnRpZmllZCBvZmZzZXQuIFRoZSBlbmQgb2Zmc2V0IHNob3VsZCBiZSBvbmUgcGFzdAogdGhlIGxhc3QgcmVsZXZhbnQgYnl0ZSAoc28gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCA9IGVuZCAtIGJlZ2luKS4KCg8KBwQUAwACAwQSBOUGBAwKDwoHBBQDAAIDBRIE5QYNEgoPCgcEFAMAAgMBEgTlBhMWCg8KBwQUAwACAwMSBOUGGRoKqV0KFGdvZ29wcm90by9nb2dvLnByb3RvEglnb2dvcHJvdG8aIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvOk4KE2dvcHJvdG9fZW51bV9wcmVmaXgSHC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMYseQDIAEoCFIRZ29wcm90b0VudW1QcmVmaXg6UgoVZ29wcm90b19lbnVtX3N0cmluZ2VyEhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zGMXkAyABKAhSE2dvcHJvdG9FbnVtU3RyaW5nZXI6QwoNZW51bV9zdHJpbmdlchIcLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucxjG5AMgASgIUgxlbnVtU3RyaW5nZXI6RwoPZW51bV9jdXN0b21uYW1lEhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zGMfkAyABKAlSDmVudW1DdXN0b21uYW1lOjoKCGVudW1kZWNsEhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zGMjkAyABKAhSCGVudW1kZWNsOlYKFGVudW12YWx1ZV9jdXN0b21uYW1lEiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMY0YMEIAEoCVITZW51bXZhbHVlQ3VzdG9tbmFtZTpOChNnb3Byb3RvX2dldHRlcnNfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGJnsAyABKAhSEWdvcHJvdG9HZXR0ZXJzQWxsOlUKF2dvcHJvdG9fZW51bV9wcmVmaXhfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGJrsAyABKAhSFGdvcHJvdG9FbnVtUHJlZml4QWxsOlAKFGdvcHJvdG9fc3RyaW5nZXJfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGJvsAyABKAhSEmdvcHJvdG9TdHJpbmdlckFsbDpKChF2ZXJib3NlX2VxdWFsX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxic7AMgASgIUg92ZXJib3NlRXF1YWxBbGw6OQoIZmFjZV9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYnewDIAEoCFIHZmFjZUFsbDpBCgxnb3N0cmluZ19hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYnuwDIAEoCFILZ29zdHJpbmdBbGw6QQoMcG9wdWxhdGVfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGJ/sAyABKAhSC3BvcHVsYXRlQWxsOkEKDHN0cmluZ2VyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxig7AMgASgIUgtzdHJpbmdlckFsbDo/Cgtvbmx5b25lX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxih7AMgASgIUgpvbmx5b25lQWxsOjsKCWVxdWFsX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxil7AMgASgIUghlcXVhbEFsbDpHCg9kZXNjcmlwdGlvbl9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYpuwDIAEoCFIOZGVzY3JpcHRpb25BbGw6PwoLdGVzdGdlbl9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYp+wDIAEoCFIKdGVzdGdlbkFsbDpBCgxiZW5jaGdlbl9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYqOwDIAEoCFILYmVuY2hnZW5BbGw6QwoNbWFyc2hhbGVyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxip7AMgASgIUgxtYXJzaGFsZXJBbGw6RwoPdW5tYXJzaGFsZXJfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGKrsAyABKAhSDnVubWFyc2hhbGVyQWxsOlAKFHN0YWJsZV9tYXJzaGFsZXJfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGKvsAyABKAhSEnN0YWJsZU1hcnNoYWxlckFsbDo7CglzaXplcl9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYrOwDIAEoCFIIc2l6ZXJBbGw6WQoZZ29wcm90b19lbnVtX3N0cmluZ2VyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxit7AMgASgIUhZnb3Byb3RvRW51bVN0cmluZ2VyQWxsOkoKEWVudW1fc3RyaW5nZXJfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGK7sAyABKAhSD2VudW1TdHJpbmdlckFsbDpQChR1bnNhZmVfbWFyc2hhbGVyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxiv7AMgASgIUhJ1bnNhZmVNYXJzaGFsZXJBbGw6VAoWdW5zYWZlX3VubWFyc2hhbGVyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxiw7AMgASgIUhR1bnNhZmVVbm1hcnNoYWxlckFsbDpbChpnb3Byb3RvX2V4dGVuc2lvbnNfbWFwX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxix7AMgASgIUhdnb3Byb3RvRXh0ZW5zaW9uc01hcEFsbDpYChhnb3Byb3RvX3VucmVjb2duaXplZF9hbGwSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYsuwDIAEoCFIWZ29wcm90b1VucmVjb2duaXplZEFsbDpJChBnb2dvcHJvdG9faW1wb3J0EhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGLPsAyABKAhSD2dvZ29wcm90b0ltcG9ydDpFCg5wcm90b3NpemVyX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxi07AMgASgIUg1wcm90b3NpemVyQWxsOj8KC2NvbXBhcmVfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGLXsAyABKAhSCmNvbXBhcmVBbGw6QQoMdHlwZWRlY2xfYWxsEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGLbsAyABKAhSC3R5cGVkZWNsQWxsOkEKDGVudW1kZWNsX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxi37AMgASgIUgtlbnVtZGVjbEFsbDpRChRnb3Byb3RvX3JlZ2lzdHJhdGlvbhIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxi47AMgASgIUhNnb3Byb3RvUmVnaXN0cmF0aW9uOkcKD21lc3NhZ2VuYW1lX2FsbBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxi57AMgASgIUg5tZXNzYWdlbmFtZUFsbDpKCg9nb3Byb3RvX2dldHRlcnMSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYgfQDIAEoCFIOZ29wcm90b0dldHRlcnM6TAoQZ29wcm90b19zdHJpbmdlchIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiD9AMgASgIUg9nb3Byb3RvU3RyaW5nZXI6RgoNdmVyYm9zZV9lcXVhbBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiE9AMgASgIUgx2ZXJib3NlRXF1YWw6NQoEZmFjZRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiF9AMgASgIUgRmYWNlOj0KCGdvc3RyaW5nEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGIb0AyABKAhSCGdvc3RyaW5nOj0KCHBvcHVsYXRlEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGIf0AyABKAhSCHBvcHVsYXRlOj0KCHN0cmluZ2VyEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGMCLBCABKAhSCHN0cmluZ2VyOjsKB29ubHlvbmUSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYifQDIAEoCFIHb25seW9uZTo3CgVlcXVhbBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiN9AMgASgIUgVlcXVhbDpDCgtkZXNjcmlwdGlvbhIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiO9AMgASgIUgtkZXNjcmlwdGlvbjo7Cgd0ZXN0Z2VuEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGI/0AyABKAhSB3Rlc3RnZW46PQoIYmVuY2hnZW4SHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYkPQDIAEoCFIIYmVuY2hnZW46PwoJbWFyc2hhbGVyEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJH0AyABKAhSCW1hcnNoYWxlcjpDCgt1bm1hcnNoYWxlchIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiS9AMgASgIUgt1bm1hcnNoYWxlcjpMChBzdGFibGVfbWFyc2hhbGVyEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJP0AyABKAhSD3N0YWJsZU1hcnNoYWxlcjo3CgVzaXplchIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiU9AMgASgIUgVzaXplcjpMChB1bnNhZmVfbWFyc2hhbGVyEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJf0AyABKAhSD3Vuc2FmZU1hcnNoYWxlcjpQChJ1bnNhZmVfdW5tYXJzaGFsZXISHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYmPQDIAEoCFIRdW5zYWZlVW5tYXJzaGFsZXI6VwoWZ29wcm90b19leHRlbnNpb25zX21hcBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiZ9AMgASgIUhRnb3Byb3RvRXh0ZW5zaW9uc01hcDpUChRnb3Byb3RvX3VucmVjb2duaXplZBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxia9AMgASgIUhNnb3Byb3RvVW5yZWNvZ25pemVkOkEKCnByb3Rvc2l6ZXISHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYnPQDIAEoCFIKcHJvdG9zaXplcjo7Cgdjb21wYXJlEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJ30AyABKAhSB2NvbXBhcmU6PQoIdHlwZWRlY2wSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYnvQDIAEoCFIIdHlwZWRlY2w6QwoLbWVzc2FnZW5hbWUSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYofQDIAEoCFILbWVzc2FnZW5hbWU6OwoIbnVsbGFibGUSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGOn7AyABKAhSCG51bGxhYmxlOjUKBWVtYmVkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxjq+wMgASgIUgVlbWJlZDo/CgpjdXN0b210eXBlEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxjr+wMgASgJUgpjdXN0b210eXBlOj8KCmN1c3RvbW5hbWUSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGOz7AyABKAlSCmN1c3RvbW5hbWU6OQoHanNvbnRhZxIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMY7fsDIAEoCVIHanNvbnRhZzo7Cghtb3JldGFncxIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMY7vsDIAEoCVIIbW9yZXRhZ3M6OwoIY2FzdHR5cGUSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGO/7AyABKAlSCGNhc3R0eXBlOjkKB2Nhc3RrZXkSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGPD7AyABKAlSB2Nhc3RrZXk6PQoJY2FzdHZhbHVlEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxjx+wMgASgJUgljYXN0dmFsdWU6OQoHc3RkdGltZRIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMY8vsDIAEoCFIHc3RkdGltZTpBCgtzdGRkdXJhdGlvbhIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMY8/sDIAEoCFILc3RkZHVyYXRpb25CRQoTY29tLmdvb2dsZS5wcm90b2J1ZkIKR29Hb1Byb3Rvc1oiZ2l0aHViLmNvbS9nb2dvL3Byb3RvYnVmL2dvZ29wcm90b0qaNQoHEgUcAIcBAQr8CgoBDBIDHAASMvEKIFByb3RvY29sIEJ1ZmZlcnMgZm9yIEdvIHdpdGggR2FkZ2V0cwoKIENvcHlyaWdodCAoYykgMjAxMywgVGhlIEdvR28gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIGh0dHA6Ly9naXRodWIuY29tL2dvZ28vcHJvdG9idWYKCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgoKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCgoICgECEgMdCBEKCQoCAwASAx8HKQoICgEIEgMhACwKCwoECOcHABIDIQAsCgwKBQjnBwACEgMhBxMKDQoGCOcHAAIAEgMhBxMKDgoHCOcHAAIAARIDIQcTCgwKBQjnBwAHEgMhFisKCAoBCBIDIgArCgsKBAjnBwESAyIAKwoMCgUI5wcBAhIDIgcbCg0KBgjnBwECABIDIgcbCg4KBwjnBwECAAESAyIHGwoMCgUI5wcBBxIDIh4qCggKAQgSAyMAOQoLCgQI5wcCEgMjADkKDAoFCOcHAgISAyMHEQoNCgYI5wcCAgASAyMHEQoOCgcI5wcCAgABEgMjBxEKDAoFCOcHAgcSAyMUOAoJCgEHEgQlACsBCgkKAgcAEgMmCDIKCgoDBwACEgMlByIKCgoDBwAEEgMmCBAKCgoDBwAFEgMmERUKCgoDBwABEgMmFikKCgoDBwADEgMmLDEKCQoCBwESAycINAoKCgMHAQISAyUHIgoKCgMHAQQSAycIEAoKCgMHAQUSAycRFQoKCgMHAQESAycWKwoKCgMHAQMSAycuMwoJCgIHAhIDKAgsCgoKAwcCAhIDJQciCgoKAwcCBBIDKAgQCgoKAwcCBRIDKBEVCgoKAwcCARIDKBYjCgoKAwcCAxIDKCYrCgkKAgcDEgMpCDAKCgoDBwMCEgMlByIKCgoDBwMEEgMpCBAKCgoDBwMFEgMpERcKCgoDBwMBEgMpGCcKCgoDBwMDEgMpKi8KCQoCBwQSAyoIJwoKCgMHBAISAyUHIgoKCgMHBAQSAyoIEAoKCgMHBAUSAyoRFQoKCgMHBAESAyoWHgoKCgMHBAMSAyohJgoJCgEHEgQtAC8BCgkKAgcFEgMuCDUKCgoDBwUCEgMtBycKCgoDBwUEEgMuCBAKCgoDBwUFEgMuERcKCgoDBwUBEgMuGCwKCgoDBwUDEgMuLzQKCQoBBxIEMQBWAQoJCgIHBhIDMggyCgoKAwcGAhIDMQciCgoKAwcGBBIDMggQCgoKAwcGBRIDMhEVCgoKAwcGARIDMhYpCgoKAwcGAxIDMiwxCgkKAgcHEgMzCDYKCgoDBwcCEgMxByIKCgoDBwcEEgMzCBAKCgoDBwcFEgMzERUKCgoDBwcBEgMzFi0KCgoDBwcDEgMzMDUKCQoCBwgSAzQIMwoKCgMHCAISAzEHIgoKCgMHCAQSAzQIEAoKCgMHCAUSAzQRFQoKCgMHCAESAzQWKgoKCgMHCAMSAzQtMgoJCgIHCRIDNQgwCgoKAwcJAhIDMQciCgoKAwcJBBIDNQgQCgoKAwcJBRIDNREVCgoKAwcJARIDNRYnCgoKAwcJAxIDNSovCgkKAgcKEgM2CCcKCgoDBwoCEgMxByIKCgoDBwoEEgM2CBAKCgoDBwoFEgM2ERUKCgoDBwoBEgM2Fh4KCgoDBwoDEgM2ISYKCQoCBwsSAzcIKwoKCgMHCwISAzEHIgoKCgMHCwQSAzcIEAoKCgMHCwUSAzcRFQoKCgMHCwESAzcWIgoKCgMHCwMSAzclKgoJCgIHDBIDOAgrCgoKAwcMAhIDMQciCgoKAwcMBBIDOAgQCgoKAwcMBRIDOBEVCgoKAwcMARIDOBYiCgoKAwcMAxIDOCUqCgkKAgcNEgM5CCsKCgoDBw0CEgMxByIKCgoDBw0EEgM5CBAKCgoDBw0FEgM5ERUKCgoDBw0BEgM5FiIKCgoDBw0DEgM5JSoKCQoCBw4SAzoIKgoKCgMHDgISAzEHIgoKCgMHDgQSAzoIEAoKCgMHDgUSAzoRFQoKCgMHDgESAzoWIQoKCgMHDgMSAzokKQoJCgIHDxIDPAgoCgoKAwcPAhIDMQciCgoKAwcPBBIDPAgQCgoKAwcPBRIDPBEVCgoKAwcPARIDPBYfCgoKAwcPAxIDPCInCgkKAgcQEgM9CC4KCgoDBxACEgMxByIKCgoDBxAEEgM9CBAKCgoDBxAFEgM9ERUKCgoDBxABEgM9FiUKCgoDBxADEgM9KC0KCQoCBxESAz4IKgoKCgMHEQISAzEHIgoKCgMHEQQSAz4IEAoKCgMHEQUSAz4RFQoKCgMHEQESAz4WIQoKCgMHEQMSAz4kKQoJCgIHEhIDPwgrCgoKAwcSAhIDMQciCgoKAwcSBBIDPwgQCgoKAwcSBRIDPxEVCgoKAwcSARIDPxYiCgoKAwcSAxIDPyUqCgkKAgcTEgNACCwKCgoDBxMCEgMxByIKCgoDBxMEEgNACBAKCgoDBxMFEgNAERUKCgoDBxMBEgNAFiMKCgoDBxMDEgNAJisKCQoCBxQSA0EILgoKCgMHFAISAzEHIgoKCgMHFAQSA0EIEAoKCgMHFAUSA0ERFQoKCgMHFAESA0EWJQoKCgMHFAMSA0EoLQoJCgIHFRIDQggzCgoKAwcVAhIDMQciCgoKAwcVBBIDQggQCgoKAwcVBRIDQhEVCgoKAwcVARIDQhYqCgoKAwcVAxIDQi0yCgkKAgcWEgNECCgKCgoDBxYCEgMxByIKCgoDBxYEEgNECBAKCgoDBxYFEgNEERUKCgoDBxYBEgNEFh8KCgoDBxYDEgNEIicKCQoCBxcSA0YIOAoKCgMHFwISAzEHIgoKCgMHFwQSA0YIEAoKCgMHFwUSA0YRFQoKCgMHFwESA0YWLwoKCgMHFwMSA0YyNwoJCgIHGBIDRwgwCgoKAwcYAhIDMQciCgoKAwcYBBIDRwgQCgoKAwcYBRIDRxEVCgoKAwcYARIDRxYnCgoKAwcYAxIDRyovCgkKAgcZEgNJCDMKCgoDBxkCEgMxByIKCgoDBxkEEgNJCBAKCgoDBxkFEgNJERUKCgoDBxkBEgNJFioKCgoDBxkDEgNJLTIKCQoCBxoSA0oINQoKCgMHGgISAzEHIgoKCgMHGgQSA0oIEAoKCgMHGgUSA0oRFQoKCgMHGgESA0oWLAoKCgMHGgMSA0ovNAoJCgIHGxIDTAg5CgoKAwcbAhIDMQciCgoKAwcbBBIDTAgQCgoKAwcbBRIDTBEVCgoKAwcbARIDTBYwCgoKAwcbAxIDTDM4CgkKAgccEgNNCDcKCgoDBxwCEgMxByIKCgoDBxwEEgNNCBAKCgoDBxwFEgNNERUKCgoDBxwBEgNNFi4KCgoDBxwDEgNNMTYKCQoCBx0SA04ILwoKCgMHHQISAzEHIgoKCgMHHQQSA04IEAoKCgMHHQUSA04RFQoKCgMHHQESA04WJgoKCgMHHQMSA04pLgoJCgIHHhIDTwgtCgoKAwceAhIDMQciCgoKAwceBBIDTwgQCgoKAwceBRIDTxEVCgoKAwceARIDTxYkCgoKAwceAxIDTycsCgkKAgcfEgNQCCoKCgoDBx8CEgMxByIKCgoDBx8EEgNQCBAKCgoDBx8FEgNQERUKCgoDBx8BEgNQFiEKCgoDBx8DEgNQJCkKCQoCByASA1EEJwoKCgMHIAISAzEHIgoKCgMHIAQSA1EEDAoKCgMHIAUSA1ENEQoKCgMHIAESA1ESHgoKCgMHIAMSA1EhJgoJCgIHIRIDUgQnCgoKAwchAhIDMQciCgoKAwchBBIDUgQMCgoKAwchBRIDUg0RCgoKAwchARIDUhIeCgoKAwchAxIDUiEmCgkKAgciEgNUCDMKCgoDByICEgMxByIKCgoDByIEEgNUCBAKCgoDByIFEgNUERUKCgoDByIBEgNUFioKCgoDByIDEgNULTIKCQoCByMSA1UILgoKCgMHIwISAzEHIgoKCgMHIwQSA1UIEAoKCgMHIwUSA1URFQoKCgMHIwESA1UWJQoKCgMHIwMSA1UoLQoJCgEHEgRYAHgBCgkKAgckEgNZCC4KCgoDByQCEgNYByUKCgoDByQEEgNZCBAKCgoDByQFEgNZERUKCgoDByQBEgNZFiUKCgoDByQDEgNZKC0KCQoCByUSA1oILwoKCgMHJQISA1gHJQoKCgMHJQQSA1oIEAoKCgMHJQUSA1oRFQoKCgMHJQESA1oWJgoKCgMHJQMSA1opLgoJCgIHJhIDWwgsCgoKAwcmAhIDWAclCgoKAwcmBBIDWwgQCgoKAwcmBRIDWxEVCgoKAwcmARIDWxYjCgoKAwcmAxIDWyYrCgkKAgcnEgNcCCMKCgoDBycCEgNYByUKCgoDBycEEgNcCBAKCgoDBycFEgNcERUKCgoDBycBEgNcFhoKCgoDBycDEgNcHSIKCQoCBygSA10IJwoKCgMHKAISA1gHJQoKCgMHKAQSA10IEAoKCgMHKAUSA10RFQoKCgMHKAESA10WHgoKCgMHKAMSA10hJgoJCgIHKRIDXggnCgoKAwcpAhIDWAclCgoKAwcpBBIDXggQCgoKAwcpBRIDXhEVCgoKAwcpARIDXhYeCgoKAwcpAxIDXiEmCgkKAgcqEgNfCCcKCgoDByoCEgNYByUKCgoDByoEEgNfCBAKCgoDByoFEgNfERUKCgoDByoBEgNfFh4KCgoDByoDEgNfISYKCQoCBysSA2AIJgoKCgMHKwISA1gHJQoKCgMHKwQSA2AIEAoKCgMHKwUSA2ARFQoKCgMHKwESA2AWHQoKCgMHKwMSA2AgJQoJCgIHLBIDYggkCgoKAwcsAhIDWAclCgoKAwcsBBIDYggQCgoKAwcsBRIDYhEVCgoKAwcsARIDYhYbCgoKAwcsAxIDYh4jCgkKAgctEgNjCCoKCgoDBy0CEgNYByUKCgoDBy0EEgNjCBAKCgoDBy0FEgNjERUKCgoDBy0BEgNjFiEKCgoDBy0DEgNjJCkKCQoCBy4SA2QIJgoKCgMHLgISA1gHJQoKCgMHLgQSA2QIEAoKCgMHLgUSA2QRFQoKCgMHLgESA2QWHQoKCgMHLgMSA2QgJQoJCgIHLxIDZQgnCgoKAwcvAhIDWAclCgoKAwcvBBIDZQgQCgoKAwcvBRIDZREVCgoKAwcvARIDZRYeCgoKAwcvAxIDZSEmCgkKAgcwEgNmCCgKCgoDBzACEgNYByUKCgoDBzAEEgNmCBAKCgoDBzAFEgNmERUKCgoDBzABEgNmFh8KCgoDBzADEgNmIicKCQoCBzESA2cIKgoKCgMHMQISA1gHJQoKCgMHMQQSA2cIEAoKCgMHMQUSA2cRFQoKCgMHMQESA2cWIQoKCgMHMQMSA2ckKQoJCgIHMhIDaAgvCgoKAwcyAhIDWAclCgoKAwcyBBIDaAgQCgoKAwcyBRIDaBEVCgoKAwcyARIDaBYmCgoKAwcyAxIDaCkuCgkKAgczEgNqCCQKCgoDBzMCEgNYByUKCgoDBzMEEgNqCBAKCgoDBzMFEgNqERUKCgoDBzMBEgNqFhsKCgoDBzMDEgNqHiMKCQoCBzQSA2wILwoKCgMHNAISA1gHJQoKCgMHNAQSA2wIEAoKCgMHNAUSA2wRFQoKCgMHNAESA2wWJgoKCgMHNAMSA2wpLgoJCgIHNRIDbQgxCgoKAwc1AhIDWAclCgoKAwc1BBIDbQgQCgoKAwc1BRIDbREVCgoKAwc1ARIDbRYoCgoKAwc1AxIDbSswCgkKAgc2EgNvCDUKCgoDBzYCEgNYByUKCgoDBzYEEgNvCBAKCgoDBzYFEgNvERUKCgoDBzYBEgNvFiwKCgoDBzYDEgNvLzQKCQoCBzcSA3AIMwoKCgMHNwISA1gHJQoKCgMHNwQSA3AIEAoKCgMHNwUSA3ARFQoKCgMHNwESA3AWKgoKCgMHNwMSA3AtMgoJCgIHOBIDcggpCgoKAwc4AhIDWAclCgoKAwc4BBIDcggQCgoKAwc4BRIDchEVCgoKAwc4ARIDchYgCgoKAwc4AxIDciMoCgkKAgc5EgNzCCYKCgoDBzkCEgNYByUKCgoDBzkEEgNzCBAKCgoDBzkFEgNzERUKCgoDBzkBEgNzFh0KCgoDBzkDEgNzICUKCQoCBzoSA3UIJwoKCgMHOgISA1gHJQoKCgMHOgQSA3UIEAoKCgMHOgUSA3URFQoKCgMHOgESA3UWHgoKCgMHOgMSA3UhJgoJCgIHOxIDdwgqCgoKAwc7AhIDWAclCgoKAwc7BBIDdwgQCgoKAwc7BRIDdxEVCgoKAwc7ARIDdxYhCgoKAwc7AxIDdyQpCgoKAQcSBXoAhwEBCgkKAgc8EgN7CCcKCgoDBzwCEgN6ByMKCgoDBzwEEgN7CBAKCgoDBzwFEgN7ERUKCgoDBzwBEgN7Fh4KCgoDBzwDEgN7ISYKCQoCBz0SA3wIJAoKCgMHPQISA3oHIwoKCgMHPQQSA3wIEAoKCgMHPQUSA3wRFQoKCgMHPQESA3wWGwoKCgMHPQMSA3weIwoJCgIHPhIDfQgrCgoKAwc+AhIDegcjCgoKAwc+BBIDfQgQCgoKAwc+BRIDfREXCgoKAwc+ARIDfRgiCgoKAwc+AxIDfSUqCgkKAgc/EgN+CCsKCgoDBz8CEgN6ByMKCgoDBz8EEgN+CBAKCgoDBz8FEgN+ERcKCgoDBz8BEgN+GCIKCgoDBz8DEgN+JSoKCQoCB0ASA38IKAoKCgMHQAISA3oHIwoKCgMHQAQSA38IEAoKCgMHQAUSA38RFwoKCgMHQAESA38YHwoKCgMHQAMSA38iJwoKCgIHQRIEgAEIKQoKCgMHQQISA3oHIwoLCgMHQQQSBIABCBAKCwoDB0EFEgSAAREXCgsKAwdBARIEgAEYIAoLCgMHQQMSBIABIygKCgoCB0ISBIEBCCkKCgoDB0ICEgN6ByMKCwoDB0IEEgSBAQgQCgsKAwdCBRIEgQERFwoLCgMHQgESBIEBGCAKCwoDB0IDEgSBASMoCgoKAgdDEgSCAQgoCgoKAwdDAhIDegcjCgsKAwdDBBIEggEIEAoLCgMHQwUSBIIBERcKCwoDB0MBEgSCARgfCgsKAwdDAxIEggEiJwoKCgIHRBIEgwEIKgoKCgMHRAISA3oHIwoLCgMHRAQSBIMBCBAKCwoDB0QFEgSDAREXCgsKAwdEARIEgwEYIQoLCgMHRAMSBIMBJCkKCgoCB0USBIUBCCYKCgoDB0UCEgN6ByMKCwoDB0UEEgSFAQgQCgsKAwdFBRIEhQERFQoLCgMHRQESBIUBFh0KCwoDB0UDEgSFASAlCgoKAgdGEgSGAQgqCgoKAwdGAhIDegcjCgsKAwdGBBIEhgEIEAoLCgMHRgUSBIYBERUKCwoDB0YBEgSGARYhCgsKAwdGAxIEhgEkKQqMFwosbWl4ZXIvYWRhcHRlci9tb2RlbC92MWJldGExL2V4dGVuc2lvbnMucHJvdG8SIWlzdGlvLm1peGVyLmFkYXB0ZXIubW9kZWwudjFiZXRhMRogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8quAEKD1RlbXBsYXRlVmFyaWV0eRIaChZURU1QTEFURV9WQVJJRVRZX0NIRUNLEAASGwoXVEVNUExBVEVfVkFSSUVUWV9SRVBPUlQQARIaChZURU1QTEFURV9WQVJJRVRZX1FVT1RBEAISKAokVEVNUExBVEVfVkFSSUVUWV9BVFRSSUJVVEVfR0VORVJBVE9SEAMSJgoiVEVNUExBVEVfVkFSSUVUWV9DSEVDS19XSVRIX09VVFBVVBAEOn4KEHRlbXBsYXRlX3ZhcmlldHkSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYr8q8IiABKA4yMi5pc3Rpby5taXhlci5hZGFwdGVyLm1vZGVsLnYxYmV0YTEuVGVtcGxhdGVWYXJpZXR5Ug90ZW1wbGF0ZVZhcmlldHk6RAoNdGVtcGxhdGVfbmFtZRIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxjQy7wiIAEoCVIMdGVtcGxhdGVOYW1lQipaKGlzdGlvLmlvL2FwaS9taXhlci9hZGFwdGVyL21vZGVsL3YxYmV0YTFK4RIKBhIEDgAyAQq/BAoBDBIDDgASMrQEIENvcHlyaWdodCAyMDE4IElzdGlvIEF1dGhvcnMKCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCggKAQISAxAIKQoICgEIEgMSAD0KCwoECOcHABIDEgA9CgwKBQjnBwACEgMSBxEKDQoGCOcHAAIAEgMSBxEKDgoHCOcHAAIAARIDEgcRCgwKBQjnBwAHEgMSEjwKCQoCAwASAxQHKQp5CgIFABIEGAAoARptIFRoZSBhdmFpbGFibGUgdmFyaWV0aWVzIG9mIHRlbXBsYXRlcywgY29udHJvbGxpbmcgdGhlIHNlbWFudGljcyBvZiB3aGF0IGFuIGFkYXB0ZXIgZG9lcyB3aXRoIGVhY2ggaW5zdGFuY2UuCgoKCgMFAAESAxgFFArHAQoEBQACABIDGwQfGrkBIE1ha2VzIHRoZSB0ZW1wbGF0ZSBhcHBsaWNhYmxlIGZvciBNaXhlcidzIGNoZWNrIGNhbGxzLiBJbnN0YW5jZXMgb2Ygc3VjaCB0ZW1wbGF0ZSBhcmUgY3JlYXRlZCBkdXJpbmcKIGNoZWNrIGNhbGxzIGluIE1peGVyIGFuZCBwYXNzZWQgdG8gdGhlIGhhbmRsZXJzIGJhc2VkIG9uIHRoZSBydWxlIGNvbmZpZ3VyYXRpb25zLgoKDAoFBQACAAESAxsEGgoMCgUFAAIAAhIDGx0eCskBCgQFAAIBEgMeBCAauwEgTWFrZXMgdGhlIHRlbXBsYXRlIGFwcGxpY2FibGUgZm9yIE1peGVyJ3MgcmVwb3J0IGNhbGxzLiBJbnN0YW5jZXMgb2Ygc3VjaCB0ZW1wbGF0ZSBhcmUgY3JlYXRlZCBkdXJpbmcKIHJlcG9ydCBjYWxscyBpbiBNaXhlciBhbmQgcGFzc2VkIHRvIHRoZSBoYW5kbGVycyBiYXNlZCBvbiB0aGUgcnVsZSBjb25maWd1cmF0aW9ucy4KCgwKBQUAAgEBEgMeBBsKDAoFBQACAQISAx4eHwrNAQoEBQACAhIDIQQfGr8BIE1ha2VzIHRoZSB0ZW1wbGF0ZSBhcHBsaWNhYmxlIGZvciBNaXhlcidzIHF1b3RhIGNhbGxzLiBJbnN0YW5jZXMgb2Ygc3VjaCB0ZW1wbGF0ZSBhcmUgY3JlYXRlZCBkdXJpbmcKIHF1b3RhIGNoZWNrIGNhbGxzIGluIE1peGVyIGFuZCBwYXNzZWQgdG8gdGhlIGhhbmRsZXJzIGJhc2VkIG9uIHRoZSBydWxlIGNvbmZpZ3VyYXRpb25zLgoKDAoFBQACAgESAyEEGgoMCgUFAAICAhIDIR0eCusBCgQFAAIDEgMkBC0a3QEgTWFrZXMgdGhlIHRlbXBsYXRlIGFwcGxpY2FibGUgZm9yIE1peGVyJ3MgYXR0cmlidXRlIGdlbmVyYXRpb24gcGhhc2UuIEluc3RhbmNlcyBvZiBzdWNoIHRlbXBsYXRlIGFyZSBjcmVhdGVkIGR1cmluZwogcHJlLXByb2Nlc3NpbmcgYXR0cmlidXRlIGdlbmVyYXRpb24gcGhhc2UgYW5kIHBhc3NlZCB0byB0aGUgaGFuZGxlcnMgYmFzZWQgb24gdGhlIHJ1bGUgY29uZmlndXJhdGlvbnMuCgoMCgUFAAIDARIDJAQoCgwKBQUAAgMCEgMkKywKugEKBAUAAgQSAycEKxqsASBNYWtlcyB0aGUgdGVtcGxhdGUgYXBwbGljYWJsZSBmb3IgTWl4ZXIncyBjaGVjayBjYWxscy4gSW5zdGFuY2VzIG9mIHN1Y2ggdGVtcGxhdGUgYXJlIGNyZWF0ZWQgZHVyaW5nCiBjaGVjayBjYWxscyBpbiBNaXhlciBhbmQgcGFzc2VkIHRvIHRoZSBoYW5kbGVycyB0aGF0IHByb2R1Y2UgdmFsdWVzLgoKDAoFBQACBAESAycEJgoMCgUFAAIEAhIDJykqCjEKAQcSBCsAMgEaJiBGaWxlIGxldmVsIG9wdGlvbnMgZm9yIHRoZSB0ZW1wbGF0ZS4KCjYKAgcAEgMtBDAaKyBSZXF1aXJlZDogb3B0aW9uIGZvciB0aGUgVGVtcGxhdGVWYXJpZXR5LgoKCgoDBwACEgMrByIKCwoDBwAEEgQtBCskCgoKAwcABhIDLQQTCgoKAwcAARIDLRQkCgoKAwcAAxIDLScvCqQBCgIHARIDMQQkGpgBIE9wdGlvbmFsOiBvcHRpb24gZm9yIHRoZSB0ZW1wbGF0ZSBuYW1lLgogSWYgbm90IHNwZWNpZmllZCwgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgdGVtcGxhdGUgcHJvdG8ncyBwYWNrYWdlIG5hbWUgaXMgdXNlZCB0bwogZGVyaXZlIHRoZSB0ZW1wbGF0ZSBuYW1lLgoKCgoDBwECEgMrByIKCwoDBwEEEgQxBC0wCgoKAwcBBRIDMQQKCgoKAwcBARIDMQsYCgoKAwcBAxIDMRsjYgZwcm90bzMK3CwKGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiI2CgNBbnkSGQoIdHlwZV91cmwYASABKAlSB3R5cGVVcmwSFAoFdmFsdWUYAiABKAxSBXZhbHVlQm8KE2NvbS5nb29nbGUucHJvdG9idWZCCEFueVByb3RvUAFaJWdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3B0eXBlcy9hbnmiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNK/CoKBxIFHgCUAQEKzAwKAQwSAx4AEjLBDCBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCggKAQISAyAIFwoICgEIEgMiADsKCwoECOcHABIDIgA7CgwKBQjnBwACEgMiBxcKDQoGCOcHAAIAEgMiBxcKDgoHCOcHAAIAARIDIgcXCgwKBQjnBwAHEgMiGjoKCAoBCBIDIwA8CgsKBAjnBwESAyMAPAoMCgUI5wcBAhIDIwcRCg0KBgjnBwECABIDIwcRCg4KBwjnBwECAAESAyMHEQoMCgUI5wcBBxIDIxQ7CggKAQgSAyQALAoLCgQI5wcCEgMkACwKDAoFCOcHAgISAyQHEwoNCgYI5wcCAgASAyQHEwoOCgcI5wcCAgABEgMkBxMKDAoFCOcHAgcSAyQWKwoICgEIEgMlACkKCwoECOcHAxIDJQApCgwKBQjnBwMCEgMlBxsKDQoGCOcHAwIAEgMlBxsKDgoHCOcHAwIAARIDJQcbCgwKBQjnBwMHEgMlHigKCAoBCBIDJgAiCgsKBAjnBwQSAyYAIgoMCgUI5wcEAhIDJgcaCg0KBgjnBwQCABIDJgcaCg4KBwjnBwQCAAESAyYHGgoMCgUI5wcEAxIDJh0hCggKAQgSAycAIQoLCgQI5wcFEgMnACEKDAoFCOcHBQISAycHGAoNCgYI5wcFAgASAycHGAoOCgcI5wcFAgABEgMnBxgKDAoFCOcHBQcSAycbIArkEAoCBAASBXkAlAEBGtYQIGBBbnlgIGNvbnRhaW5zIGFuIGFyYml0cmFyeSBzZXJpYWxpemVkIHByb3RvY29sIGJ1ZmZlciBtZXNzYWdlIGFsb25nIHdpdGggYQogVVJMIHRoYXQgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBzZXJpYWxpemVkIG1lc3NhZ2UuCgogUHJvdG9idWYgbGlicmFyeSBwcm92aWRlcyBzdXBwb3J0IHRvIHBhY2svdW5wYWNrIEFueSB2YWx1ZXMgaW4gdGhlIGZvcm0KIG9mIHV0aWxpdHkgZnVuY3Rpb25zIG9yIGFkZGl0aW9uYWwgZ2VuZXJhdGVkIG1ldGhvZHMgb2YgdGhlIEFueSB0eXBlLgoKIEV4YW1wbGUgMTogUGFjayBhbmQgdW5wYWNrIGEgbWVzc2FnZSBpbiBDKysuCgogICAgIEZvbyBmb28gPSAuLi47CiAgICAgQW55IGFueTsKICAgICBhbnkuUGFja0Zyb20oZm9vKTsKICAgICAuLi4KICAgICBpZiAoYW55LlVucGFja1RvKCZmb28pKSB7CiAgICAgICAuLi4KICAgICB9CgogRXhhbXBsZSAyOiBQYWNrIGFuZCB1bnBhY2sgYSBtZXNzYWdlIGluIEphdmEuCgogICAgIEZvbyBmb28gPSAuLi47CiAgICAgQW55IGFueSA9IEFueS5wYWNrKGZvbyk7CiAgICAgLi4uCiAgICAgaWYgKGFueS5pcyhGb28uY2xhc3MpKSB7CiAgICAgICBmb28gPSBhbnkudW5wYWNrKEZvby5jbGFzcyk7CiAgICAgfQoKICBFeGFtcGxlIDM6IFBhY2sgYW5kIHVucGFjayBhIG1lc3NhZ2UgaW4gUHl0aG9uLgoKICAgICBmb28gPSBGb28oLi4uKQogICAgIGFueSA9IEFueSgpCiAgICAgYW55LlBhY2soZm9vKQogICAgIC4uLgogICAgIGlmIGFueS5JcyhGb28uREVTQ1JJUFRPUik6CiAgICAgICBhbnkuVW5wYWNrKGZvbykKICAgICAgIC4uLgoKICBFeGFtcGxlIDQ6IFBhY2sgYW5kIHVucGFjayBhIG1lc3NhZ2UgaW4gR28KCiAgICAgIGZvbyA6PSAmcGIuRm9vey4uLn0KICAgICAgYW55LCBlcnIgOj0gcHR5cGVzLk1hcnNoYWxBbnkoZm9vKQogICAgICAuLi4KICAgICAgZm9vIDo9ICZwYi5Gb297fQogICAgICBpZiBlcnIgOj0gcHR5cGVzLlVubWFyc2hhbEFueShhbnksIGZvbyk7IGVyciAhPSBuaWwgewogICAgICAgIC4uLgogICAgICB9CgogVGhlIHBhY2sgbWV0aG9kcyBwcm92aWRlZCBieSBwcm90b2J1ZiBsaWJyYXJ5IHdpbGwgYnkgZGVmYXVsdCB1c2UKICd0eXBlLmdvb2dsZWFwaXMuY29tL2Z1bGwudHlwZS5uYW1lJyBhcyB0aGUgdHlwZSBVUkwgYW5kIHRoZSB1bnBhY2sKIG1ldGhvZHMgb25seSB1c2UgdGhlIGZ1bGx5IHF1YWxpZmllZCB0eXBlIG5hbWUgYWZ0ZXIgdGhlIGxhc3QgJy8nCiBpbiB0aGUgdHlwZSBVUkwsIGZvciBleGFtcGxlICJmb28uYmFyLmNvbS94L3kueiIgd2lsbCB5aWVsZCB0eXBlCiBuYW1lICJ5LnoiLgoKCiBKU09OCiA9PT09CiBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhbiBgQW55YCB2YWx1ZSB1c2VzIHRoZSByZWd1bGFyCiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGVzZXJpYWxpemVkLCBlbWJlZGRlZCBtZXNzYWdlLCB3aXRoIGFuCiBhZGRpdGlvbmFsIGZpZWxkIGBAdHlwZWAgd2hpY2ggY29udGFpbnMgdGhlIHR5cGUgVVJMLiBFeGFtcGxlOgoKICAgICBwYWNrYWdlIGdvb2dsZS5wcm9maWxlOwogICAgIG1lc3NhZ2UgUGVyc29uIHsKICAgICAgIHN0cmluZyBmaXJzdF9uYW1lID0gMTsKICAgICAgIHN0cmluZyBsYXN0X25hbWUgPSAyOwogICAgIH0KCiAgICAgewogICAgICAgIkB0eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb2ZpbGUuUGVyc29uIiwKICAgICAgICJmaXJzdE5hbWUiOiA8c3RyaW5nPiwKICAgICAgICJsYXN0TmFtZSI6IDxzdHJpbmc+CiAgICAgfQoKIElmIHRoZSBlbWJlZGRlZCBtZXNzYWdlIHR5cGUgaXMgd2VsbC1rbm93biBhbmQgaGFzIGEgY3VzdG9tIEpTT04KIHJlcHJlc2VudGF0aW9uLCB0aGF0IHJlcHJlc2VudGF0aW9uIHdpbGwgYmUgZW1iZWRkZWQgYWRkaW5nIGEgZmllbGQKIGB2YWx1ZWAgd2hpY2ggaG9sZHMgdGhlIGN1c3RvbSBKU09OIGluIGFkZGl0aW9uIHRvIHRoZSBgQHR5cGVgCiBmaWVsZC4gRXhhbXBsZSAoZm9yIG1lc3NhZ2UgW2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbl1bXSk6CgogICAgIHsKICAgICAgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiIsCiAgICAgICAidmFsdWUiOiAiMS4yMTJzIgogICAgIH0KCgoKCgMEAAESA3kICwrkBwoEBAACABIEkAECFhrVByBBIFVSTC9yZXNvdXJjZSBuYW1lIHdob3NlIGNvbnRlbnQgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZQogc2VyaWFsaXplZCBwcm90b2NvbCBidWZmZXIgbWVzc2FnZS4KCiBGb3IgVVJMcyB3aGljaCB1c2UgdGhlIHNjaGVtZSBgaHR0cGAsIGBodHRwc2AsIG9yIG5vIHNjaGVtZSwgdGhlCiBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFuZCBpbnRlcnByZXRhdGlvbnMgYXBwbHk6CgogKiBJZiBubyBzY2hlbWUgaXMgcHJvdmlkZWQsIGBodHRwc2AgaXMgYXNzdW1lZC4KICogVGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgVVJMJ3MgcGF0aCBtdXN0IHJlcHJlc2VudCB0aGUgZnVsbHkKICAgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHR5cGUgKGFzIGluIGBwYXRoL2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbmApLgogICBUaGUgbmFtZSBzaG91bGQgYmUgaW4gYSBjYW5vbmljYWwgZm9ybSAoZS5nLiwgbGVhZGluZyAiLiIgaXMKICAgbm90IGFjY2VwdGVkKS4KICogQW4gSFRUUCBHRVQgb24gdGhlIFVSTCBtdXN0IHlpZWxkIGEgW2dvb2dsZS5wcm90b2J1Zi5UeXBlXVtdCiAgIHZhbHVlIGluIGJpbmFyeSBmb3JtYXQsIG9yIHByb2R1Y2UgYW4gZXJyb3IuCiAqIEFwcGxpY2F0aW9ucyBhcmUgYWxsb3dlZCB0byBjYWNoZSBsb29rdXAgcmVzdWx0cyBiYXNlZCBvbiB0aGUKICAgVVJMLCBvciBoYXZlIHRoZW0gcHJlY29tcGlsZWQgaW50byBhIGJpbmFyeSB0byBhdm9pZCBhbnkKICAgbG9va3VwLiBUaGVyZWZvcmUsIGJpbmFyeSBjb21wYXRpYmlsaXR5IG5lZWRzIHRvIGJlIHByZXNlcnZlZAogICBvbiBjaGFuZ2VzIHRvIHR5cGVzLiAoVXNlIHZlcnNpb25lZCB0eXBlIG5hbWVzIHRvIG1hbmFnZQogICBicmVha2luZyBjaGFuZ2VzLikKCiBTY2hlbWVzIG90aGVyIHRoYW4gYGh0dHBgLCBgaHR0cHNgIChvciB0aGUgZW1wdHkgc2NoZW1lKSBtaWdodCBiZQogdXNlZCB3aXRoIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHNlbWFudGljcy4KCgoOCgUEAAIABBIFkAECeQ0KDQoFBAACAAUSBJABAggKDQoFBAACAAESBJABCREKDQoFBAACAAMSBJABFBUKVwoEBAACARIEkwECEhpJIE11c3QgYmUgYSB2YWxpZCBzZXJpYWxpemVkIHByb3RvY29sIGJ1ZmZlciBvZiB0aGUgYWJvdmUgc3BlY2lmaWVkIHR5cGUuCgoPCgUEAAIBBBIGkwECkAEWCg0KBQQAAgEFEgSTAQIHCg0KBQQAAgEBEgSTAQgNCg0KBQQAAgEDEgSTARARYgZwcm90bzMKngkKKG1peGVyL2FkYXB0ZXIvbW9kZWwvdjFiZXRhMS9yZXBvcnQucHJvdG8SIWlzdGlvLm1peGVyLmFkYXB0ZXIubW9kZWwudjFiZXRhMRoUZ29nb3Byb3RvL2dvZ28ucHJvdG8iDgoMUmVwb3J0UmVzdWx0QjZaKGlzdGlvLmlvL2FwaS9taXhlci9hZGFwdGVyL21vZGVsL3YxYmV0YTHI4R4AqOIeAPDhHgBK6AcKBhIEDgAbFwq/BAoBDBIDDgASMrQEIENvcHlyaWdodCAyMDE4IElzdGlvIEF1dGhvcnMKCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCggKAQISAxAIKQoICgEIEgMSAD0KCwoECOcHABIDEgA9CgwKBQjnBwACEgMSBxEKDQoGCOcHAAIAEgMSBxEKDgoHCOcHAAIAARIDEgcRCgwKBQjnBwAHEgMSEjwKCQoCAwASAxQHHQoICgEIEgMWAC8KCwoECOcHARIDFgAvCgwKBQjnBwECEgMWByYKDQoGCOcHAQIAEgMWByYKDgoHCOcHAQIAARIDFgglCgwKBQjnBwEDEgMWKS4KCAoBCBIDFwAlCgsKBAjnBwISAxcAJQoMCgUI5wcCAhIDFwccCg0KBgjnBwICABIDFwccCg4KBwjnBwICAAESAxcIGwoMCgUI5wcCAxIDFx8kCggKAQgSAxgAKAoLCgQI5wcDEgMYACgKDAoFCOcHAwISAxgHHwoNCgYI5wcDAgASAxgHHwoOCgcI5wcDAgABEgMYCB4KDAoFCOcHAwMSAxgiJwozCgIEABIDGwAXGiggRXhwcmVzc2VzIHRoZSByZXN1bHQgb2YgYSByZXBvcnQgY2FsbC4KCgoKAwQAARIDGwgUYgZwcm90bzMKmikKHmdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIjoKCER1cmF0aW9uEhgKB3NlY29uZHMYASABKANSB3NlY29uZHMSFAoFbmFub3MYAiABKAVSBW5hbm9zQnwKE2NvbS5nb29nbGUucHJvdG9idWZCDUR1cmF0aW9uUHJvdG9QAVoqZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHR5cGVzL2R1cmF0aW9u+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzSqQnCgYSBB4AdAEKzAwKAQwSAx4AEjLBDCBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCggKAQISAyAIFwoICgEIEgMiADsKCwoECOcHABIDIgA7CgwKBQjnBwACEgMiBxcKDQoGCOcHAAIAEgMiBxcKDgoHCOcHAAIAARIDIgcXCgwKBQjnBwAHEgMiGjoKCAoBCBIDIwAfCgsKBAjnBwESAyMAHwoMCgUI5wcBAhIDIwcXCg0KBgjnBwECABIDIwcXCg4KBwjnBwECAAESAyMHFwoMCgUI5wcBAxIDIxoeCggKAQgSAyQAQQoLCgQI5wcCEgMkAEEKDAoFCOcHAgISAyQHEQoNCgYI5wcCAgASAyQHEQoOCgcI5wcCAgABEgMkBxEKDAoFCOcHAgcSAyQUQAoICgEIEgMlACwKCwoECOcHAxIDJQAsCgwKBQjnBwMCEgMlBxMKDQoGCOcHAwIAEgMlBxMKDgoHCOcHAwIAARIDJQcTCgwKBQjnBwMHEgMlFisKCAoBCBIDJgAuCgsKBAjnBwQSAyYALgoMCgUI5wcEAhIDJgcbCg0KBgjnBwQCABIDJgcbCg4KBwjnBwQCAAESAyYHGwoMCgUI5wcEBxIDJh4tCggKAQgSAycAIgoLCgQI5wcFEgMnACIKDAoFCOcHBQISAycHGgoNCgYI5wcFAgASAycHGgoOCgcI5wcFAgABEgMnBxoKDAoFCOcHBQMSAycdIQoICgEIEgMoACEKCwoECOcHBhIDKAAhCgwKBQjnBwYCEgMoBxgKDQoGCOcHBgIAEgMoBxgKDgoHCOcHBgIAARIDKAcYCgwKBQjnBwYHEgMoGyAKnxAKAgQAEgRmAHQBGpIQIEEgRHVyYXRpb24gcmVwcmVzZW50cyBhIHNpZ25lZCwgZml4ZWQtbGVuZ3RoIHNwYW4gb2YgdGltZSByZXByZXNlbnRlZAogYXMgYSBjb3VudCBvZiBzZWNvbmRzIGFuZCBmcmFjdGlvbnMgb2Ygc2Vjb25kcyBhdCBuYW5vc2Vjb25kCiByZXNvbHV0aW9uLiBJdCBpcyBpbmRlcGVuZGVudCBvZiBhbnkgY2FsZW5kYXIgYW5kIGNvbmNlcHRzIGxpa2UgImRheSIKIG9yICJtb250aCIuIEl0IGlzIHJlbGF0ZWQgdG8gVGltZXN0YW1wIGluIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgogdHdvIFRpbWVzdGFtcCB2YWx1ZXMgaXMgYSBEdXJhdGlvbiBhbmQgaXQgY2FuIGJlIGFkZGVkIG9yIHN1YnRyYWN0ZWQKIGZyb20gYSBUaW1lc3RhbXAuIFJhbmdlIGlzIGFwcHJveGltYXRlbHkgKy0xMCwwMDAgeWVhcnMuCgogIyBFeGFtcGxlcwoKIEV4YW1wbGUgMTogQ29tcHV0ZSBEdXJhdGlvbiBmcm9tIHR3byBUaW1lc3RhbXBzIGluIHBzZXVkbyBjb2RlLgoKICAgICBUaW1lc3RhbXAgc3RhcnQgPSAuLi47CiAgICAgVGltZXN0YW1wIGVuZCA9IC4uLjsKICAgICBEdXJhdGlvbiBkdXJhdGlvbiA9IC4uLjsKCiAgICAgZHVyYXRpb24uc2Vjb25kcyA9IGVuZC5zZWNvbmRzIC0gc3RhcnQuc2Vjb25kczsKICAgICBkdXJhdGlvbi5uYW5vcyA9IGVuZC5uYW5vcyAtIHN0YXJ0Lm5hbm9zOwoKICAgICBpZiAoZHVyYXRpb24uc2Vjb25kcyA8IDAgJiYgZHVyYXRpb24ubmFub3MgPiAwKSB7CiAgICAgICBkdXJhdGlvbi5zZWNvbmRzICs9IDE7CiAgICAgICBkdXJhdGlvbi5uYW5vcyAtPSAxMDAwMDAwMDAwOwogICAgIH0gZWxzZSBpZiAoZHVyYXRpb25zLnNlY29uZHMgPiAwICYmIGR1cmF0aW9uLm5hbm9zIDwgMCkgewogICAgICAgZHVyYXRpb24uc2Vjb25kcyAtPSAxOwogICAgICAgZHVyYXRpb24ubmFub3MgKz0gMTAwMDAwMDAwMDsKICAgICB9CgogRXhhbXBsZSAyOiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIFRpbWVzdGFtcCArIER1cmF0aW9uIGluIHBzZXVkbyBjb2RlLgoKICAgICBUaW1lc3RhbXAgc3RhcnQgPSAuLi47CiAgICAgRHVyYXRpb24gZHVyYXRpb24gPSAuLi47CiAgICAgVGltZXN0YW1wIGVuZCA9IC4uLjsKCiAgICAgZW5kLnNlY29uZHMgPSBzdGFydC5zZWNvbmRzICsgZHVyYXRpb24uc2Vjb25kczsKICAgICBlbmQubmFub3MgPSBzdGFydC5uYW5vcyArIGR1cmF0aW9uLm5hbm9zOwoKICAgICBpZiAoZW5kLm5hbm9zIDwgMCkgewogICAgICAgZW5kLnNlY29uZHMgLT0gMTsKICAgICAgIGVuZC5uYW5vcyArPSAxMDAwMDAwMDAwOwogICAgIH0gZWxzZSBpZiAoZW5kLm5hbm9zID49IDEwMDAwMDAwMDApIHsKICAgICAgIGVuZC5zZWNvbmRzICs9IDE7CiAgICAgICBlbmQubmFub3MgLT0gMTAwMDAwMDAwMDsKICAgICB9CgogRXhhbXBsZSAzOiBDb21wdXRlIER1cmF0aW9uIGZyb20gZGF0ZXRpbWUudGltZWRlbHRhIGluIFB5dGhvbi4KCiAgICAgdGQgPSBkYXRldGltZS50aW1lZGVsdGEoZGF5cz0zLCBtaW51dGVzPTEwKQogICAgIGR1cmF0aW9uID0gRHVyYXRpb24oKQogICAgIGR1cmF0aW9uLkZyb21UaW1lZGVsdGEodGQpCgogIyBKU09OIE1hcHBpbmcKCiBJbiBKU09OIGZvcm1hdCwgdGhlIER1cmF0aW9uIHR5cGUgaXMgZW5jb2RlZCBhcyBhIHN0cmluZyByYXRoZXIgdGhhbiBhbgogb2JqZWN0LCB3aGVyZSB0aGUgc3RyaW5nIGVuZHMgaW4gdGhlIHN1ZmZpeCAicyIgKGluZGljYXRpbmcgc2Vjb25kcykgYW5kCiBpcyBwcmVjZWRlZCBieSB0aGUgbnVtYmVyIG9mIHNlY29uZHMsIHdpdGggbmFub3NlY29uZHMgZXhwcmVzc2VkIGFzCiBmcmFjdGlvbmFsIHNlY29uZHMuIEZvciBleGFtcGxlLCAzIHNlY29uZHMgd2l0aCAwIG5hbm9zZWNvbmRzIHNob3VsZCBiZQogZW5jb2RlZCBpbiBKU09OIGZvcm1hdCBhcyAiM3MiLCB3aGlsZSAzIHNlY29uZHMgYW5kIDEgbmFub3NlY29uZCBzaG91bGQKIGJlIGV4cHJlc3NlZCBpbiBKU09OIGZvcm1hdCBhcyAiMy4wMDAwMDAwMDFzIiwgYW5kIDMgc2Vjb25kcyBhbmQgMQogbWljcm9zZWNvbmQgc2hvdWxkIGJlIGV4cHJlc3NlZCBpbiBKU09OIGZvcm1hdCBhcyAiMy4wMDAwMDFzIi4KCgoKCgoDBAABEgNmCBAK3AEKBAQAAgASA2sCFBrOASBTaWduZWQgc2Vjb25kcyBvZiB0aGUgc3BhbiBvZiB0aW1lLiBNdXN0IGJlIGZyb20gLTMxNSw1NzYsMDAwLDAwMAogdG8gKzMxNSw1NzYsMDAwLDAwMCBpbmNsdXNpdmUuIE5vdGU6IHRoZXNlIGJvdW5kcyBhcmUgY29tcHV0ZWQgZnJvbToKIDYwIHNlYy9taW4gKiA2MCBtaW4vaHIgKiAyNCBoci9kYXkgKiAzNjUuMjUgZGF5cy95ZWFyICogMTAwMDAgeWVhcnMKCg0KBQQAAgAEEgRrAmYSCgwKBQQAAgAFEgNrAgcKDAoFBAACAAESA2sIDwoMCgUEAAIAAxIDaxITCoMDCgQEAAIBEgNzAhIa9QIgU2lnbmVkIGZyYWN0aW9ucyBvZiBhIHNlY29uZCBhdCBuYW5vc2Vjb25kIHJlc29sdXRpb24gb2YgdGhlIHNwYW4KIG9mIHRpbWUuIER1cmF0aW9ucyBsZXNzIHRoYW4gb25lIHNlY29uZCBhcmUgcmVwcmVzZW50ZWQgd2l0aCBhIDAKIGBzZWNvbmRzYCBmaWVsZCBhbmQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBgbmFub3NgIGZpZWxkLiBGb3IgZHVyYXRpb25zCiBvZiBvbmUgc2Vjb25kIG9yIG1vcmUsIGEgbm9uLXplcm8gdmFsdWUgZm9yIHRoZSBgbmFub3NgIGZpZWxkIG11c3QgYmUKIG9mIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGBzZWNvbmRzYCBmaWVsZC4gTXVzdCBiZSBmcm9tIC05OTksOTk5LDk5OQogdG8gKzk5OSw5OTksOTk5IGluY2x1c2l2ZS4KCg0KBQQAAgEEEgRzAmsUCgwKBQQAAgEFEgNzAgcKDAoFBAACAQESA3MIDQoMCgUEAAIBAxIDcxARYgZwcm90bzMKwzEKH2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiI7CglUaW1lc3RhbXASGAoHc2Vjb25kcxgBIAEoA1IHc2Vjb25kcxIUCgVuYW5vcxgCIAEoBVIFbmFub3NCfgoTY29tLmdvb2dsZS5wcm90b2J1ZkIOVGltZXN0YW1wUHJvdG9QAVorZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHR5cGVzL3RpbWVzdGFtcPgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc0rJLwoHEgUeAIQBAQrMDAoBDBIDHgASMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKCAoBAhIDIAgXCggKAQgSAyIAOwoLCgQI5wcAEgMiADsKDAoFCOcHAAISAyIHFwoNCgYI5wcAAgASAyIHFwoOCgcI5wcAAgABEgMiBxcKDAoFCOcHAAcSAyIaOgoICgEIEgMjAB8KCwoECOcHARIDIwAfCgwKBQjnBwECEgMjBxcKDQoGCOcHAQIAEgMjBxcKDgoHCOcHAQIAARIDIwcXCgwKBQjnBwEDEgMjGh4KCAoBCBIDJABCCgsKBAjnBwISAyQAQgoMCgUI5wcCAhIDJAcRCg0KBgjnBwICABIDJAcRCg4KBwjnBwICAAESAyQHEQoMCgUI5wcCBxIDJBRBCggKAQgSAyUALAoLCgQI5wcDEgMlACwKDAoFCOcHAwISAyUHEwoNCgYI5wcDAgASAyUHEwoOCgcI5wcDAgABEgMlBxMKDAoFCOcHAwcSAyUWKwoICgEIEgMmAC8KCwoECOcHBBIDJgAvCgwKBQjnBwQCEgMmBxsKDQoGCOcHBAIAEgMmBxsKDgoHCOcHBAIAARIDJgcbCgwKBQjnBwQHEgMmHi4KCAoBCBIDJwAiCgsKBAjnBwUSAycAIgoMCgUI5wcFAhIDJwcaCg0KBgjnBwUCABIDJwcaCg4KBwjnBwUCAAESAycHGgoMCgUI5wcFAxIDJx0hCggKAQgSAygAIQoLCgQI5wcGEgMoACEKDAoFCOcHBgISAygHGAoNCgYI5wcGAgASAygHGAoOCgcI5wcGAgABEgMoBxgKDAoFCOcHBgcSAygbIAqdGgoCBAASBXgAhAEBGo8aIEEgVGltZXN0YW1wIHJlcHJlc2VudHMgYSBwb2ludCBpbiB0aW1lIGluZGVwZW5kZW50IG9mIGFueSB0aW1lIHpvbmUKIG9yIGNhbGVuZGFyLCByZXByZXNlbnRlZCBhcyBzZWNvbmRzIGFuZCBmcmFjdGlvbnMgb2Ygc2Vjb25kcyBhdAogbmFub3NlY29uZCByZXNvbHV0aW9uIGluIFVUQyBFcG9jaCB0aW1lLiBJdCBpcyBlbmNvZGVkIHVzaW5nIHRoZQogUHJvbGVwdGljIEdyZWdvcmlhbiBDYWxlbmRhciB3aGljaCBleHRlbmRzIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIKIGJhY2t3YXJkcyB0byB5ZWFyIG9uZS4gSXQgaXMgZW5jb2RlZCBhc3N1bWluZyBhbGwgbWludXRlcyBhcmUgNjAKIHNlY29uZHMgbG9uZywgaS5lLiBsZWFwIHNlY29uZHMgYXJlICJzbWVhcmVkIiBzbyB0aGF0IG5vIGxlYXAgc2Vjb25kCiB0YWJsZSBpcyBuZWVkZWQgZm9yIGludGVycHJldGF0aW9uLiBSYW5nZSBpcyBmcm9tCiAwMDAxLTAxLTAxVDAwOjAwOjAwWiB0byA5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTk5OVouCiBCeSByZXN0cmljdGluZyB0byB0aGF0IHJhbmdlLCB3ZSBlbnN1cmUgdGhhdCB3ZSBjYW4gY29udmVydCB0bwogYW5kIGZyb20gIFJGQyAzMzM5IGRhdGUgc3RyaW5ncy4KIFNlZSBbaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzMzMzkudHh0XShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzMzOS50eHQpLgoKICMgRXhhbXBsZXMKCiBFeGFtcGxlIDE6IENvbXB1dGUgVGltZXN0YW1wIGZyb20gUE9TSVggYHRpbWUoKWAuCgogICAgIFRpbWVzdGFtcCB0aW1lc3RhbXA7CiAgICAgdGltZXN0YW1wLnNldF9zZWNvbmRzKHRpbWUoTlVMTCkpOwogICAgIHRpbWVzdGFtcC5zZXRfbmFub3MoMCk7CgogRXhhbXBsZSAyOiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIFBPU0lYIGBnZXR0aW1lb2ZkYXkoKWAuCgogICAgIHN0cnVjdCB0aW1ldmFsIHR2OwogICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwoKICAgICBUaW1lc3RhbXAgdGltZXN0YW1wOwogICAgIHRpbWVzdGFtcC5zZXRfc2Vjb25kcyh0di50dl9zZWMpOwogICAgIHRpbWVzdGFtcC5zZXRfbmFub3ModHYudHZfdXNlYyAqIDEwMDApOwoKIEV4YW1wbGUgMzogQ29tcHV0ZSBUaW1lc3RhbXAgZnJvbSBXaW4zMiBgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKWAuCgogICAgIEZJTEVUSU1FIGZ0OwogICAgIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7CiAgICAgVUlOVDY0IHRpY2tzID0gKCgoVUlOVDY0KWZ0LmR3SGlnaERhdGVUaW1lKSA8PCAzMikgfCBmdC5kd0xvd0RhdGVUaW1lOwoKICAgICAvLyBBIFdpbmRvd3MgdGljayBpcyAxMDAgbmFub3NlY29uZHMuIFdpbmRvd3MgZXBvY2ggMTYwMS0wMS0wMVQwMDowMDowMFoKICAgICAvLyBpcyAxMTY0NDQ3MzYwMCBzZWNvbmRzIGJlZm9yZSBVbml4IGVwb2NoIDE5NzAtMDEtMDFUMDA6MDA6MDBaLgogICAgIFRpbWVzdGFtcCB0aW1lc3RhbXA7CiAgICAgdGltZXN0YW1wLnNldF9zZWNvbmRzKChJTlQ2NCkgKCh0aWNrcyAvIDEwMDAwMDAwKSAtIDExNjQ0NDczNjAwTEwpKTsKICAgICB0aW1lc3RhbXAuc2V0X25hbm9zKChJTlQzMikgKCh0aWNrcyAlIDEwMDAwMDAwKSAqIDEwMCkpOwoKIEV4YW1wbGUgNDogQ29tcHV0ZSBUaW1lc3RhbXAgZnJvbSBKYXZhIGBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKWAuCgogICAgIGxvbmcgbWlsbGlzID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CgogICAgIFRpbWVzdGFtcCB0aW1lc3RhbXAgPSBUaW1lc3RhbXAubmV3QnVpbGRlcigpLnNldFNlY29uZHMobWlsbGlzIC8gMTAwMCkKICAgICAgICAgLnNldE5hbm9zKChpbnQpICgobWlsbGlzICUgMTAwMCkgKiAxMDAwMDAwKSkuYnVpbGQoKTsKCgogRXhhbXBsZSA1OiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIGN1cnJlbnQgdGltZSBpbiBQeXRob24uCgogICAgIHRpbWVzdGFtcCA9IFRpbWVzdGFtcCgpCiAgICAgdGltZXN0YW1wLkdldEN1cnJlbnRUaW1lKCkKCiAjIEpTT04gTWFwcGluZwoKIEluIEpTT04gZm9ybWF0LCB0aGUgVGltZXN0YW1wIHR5cGUgaXMgZW5jb2RlZCBhcyBhIHN0cmluZyBpbiB0aGUKIFtSRkMgMzMzOV0oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzMzMzkudHh0KSBmb3JtYXQuIFRoYXQgaXMsIHRoZQogZm9ybWF0IGlzICJ7eWVhcn0te21vbnRofS17ZGF5fVR7aG91cn06e21pbn06e3NlY31bLntmcmFjX3NlY31dWiIKIHdoZXJlIHt5ZWFyfSBpcyBhbHdheXMgZXhwcmVzc2VkIHVzaW5nIGZvdXIgZGlnaXRzIHdoaWxlIHttb250aH0sIHtkYXl9LAoge2hvdXJ9LCB7bWlufSwgYW5kIHtzZWN9IGFyZSB6ZXJvLXBhZGRlZCB0byB0d28gZGlnaXRzIGVhY2guIFRoZSBmcmFjdGlvbmFsCiBzZWNvbmRzLCB3aGljaCBjYW4gZ28gdXAgdG8gOSBkaWdpdHMgKGkuZS4gdXAgdG8gMSBuYW5vc2Vjb25kIHJlc29sdXRpb24pLAogYXJlIG9wdGlvbmFsLiBUaGUgIloiIHN1ZmZpeCBpbmRpY2F0ZXMgdGhlIHRpbWV6b25lICgiVVRDIik7IHRoZSB0aW1lem9uZQogaXMgcmVxdWlyZWQsIHRob3VnaCBvbmx5IFVUQyAoYXMgaW5kaWNhdGVkIGJ5ICJaIikgaXMgcHJlc2VudGx5IHN1cHBvcnRlZC4KCiBGb3IgZXhhbXBsZSwgIjIwMTctMDEtMTVUMDE6MzA6MTUuMDFaIiBlbmNvZGVzIDE1LjAxIHNlY29uZHMgcGFzdAogMDE6MzAgVVRDIG9uIEphbnVhcnkgMTUsIDIwMTcuCgogSW4gSmF2YVNjcmlwdCwgb25lIGNhbiBjb252ZXJ0IGEgRGF0ZSBvYmplY3QgdG8gdGhpcyBmb3JtYXQgdXNpbmcgdGhlCiBzdGFuZGFyZCBbdG9JU09TdHJpbmcoKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZS90b0lTT1N0cmluZ10KIG1ldGhvZC4gSW4gUHl0aG9uLCBhIHN0YW5kYXJkIGBkYXRldGltZS5kYXRldGltZWAgb2JqZWN0IGNhbiBiZSBjb252ZXJ0ZWQKIHRvIHRoaXMgZm9ybWF0IHVzaW5nIFtgc3RyZnRpbWVgXShodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuc3RyZnRpbWUpCiB3aXRoIHRoZSB0aW1lIGZvcm1hdCBzcGVjICclWS0lbS0lZFQlSDolTTolUy4lZlonLiBMaWtld2lzZSwgaW4gSmF2YSwgb25lCiBjYW4gdXNlIHRoZSBKb2RhIFRpbWUncyBbYElTT0RhdGVUaW1lRm9ybWF0LmRhdGVUaW1lKClgXSgKIGh0dHA6Ly93d3cuam9kYS5vcmcvam9kYS10aW1lL2FwaWRvY3Mvb3JnL2pvZGEvdGltZS9mb3JtYXQvSVNPRGF0ZVRpbWVGb3JtYXQuaHRtbCNkYXRlVGltZS0tKQogdG8gb2J0YWluIGEgZm9ybWF0dGVyIGNhcGFibGUgb2YgZ2VuZXJhdGluZyB0aW1lc3RhbXBzIGluIHRoaXMgZm9ybWF0LgoKCgoKCgMEAAESA3gIEQqcAQoEBAACABIDfQIUGo4BIFJlcHJlc2VudHMgc2Vjb25kcyBvZiBVVEMgdGltZSBzaW5jZSBVbml4IGVwb2NoCiAxOTcwLTAxLTAxVDAwOjAwOjAwWi4gTXVzdCBiZSBmcm9tIDAwMDEtMDEtMDFUMDA6MDA6MDBaIHRvCiA5OTk5LTEyLTMxVDIzOjU5OjU5WiBpbmNsdXNpdmUuCgoNCgUEAAIABBIEfQJ4EwoMCgUEAAIABRIDfQIHCgwKBQQAAgABEgN9CA8KDAoFBAACAAMSA30SEwrlAQoEBAACARIEgwECEhrWASBOb24tbmVnYXRpdmUgZnJhY3Rpb25zIG9mIGEgc2Vjb25kIGF0IG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4gTmVnYXRpdmUKIHNlY29uZCB2YWx1ZXMgd2l0aCBmcmFjdGlvbnMgbXVzdCBzdGlsbCBoYXZlIG5vbi1uZWdhdGl2ZSBuYW5vcyB2YWx1ZXMKIHRoYXQgY291bnQgZm9yd2FyZCBpbiB0aW1lLiBNdXN0IGJlIGZyb20gMCB0byA5OTksOTk5LDk5OQogaW5jbHVzaXZlLgoKDgoFBAACAQQSBYMBAn0UCg0KBQQAAgEFEgSDAQIHCg0KBQQAAgEBEgSDAQgNCg0KBQQAAgEDEgSDARARYgZwcm90bzMK0jEKGXBvbGljeS92MWJldGExL3R5cGUucHJvdG8SFGlzdGlvLnBvbGljeS52MWJldGExGh5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8aH2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8i1wQKBVZhbHVlEiMKDHN0cmluZ192YWx1ZRgBIAEoCUgAUgtzdHJpbmdWYWx1ZRIhCgtpbnQ2NF92YWx1ZRgCIAEoA0gAUgppbnQ2NFZhbHVlEiMKDGRvdWJsZV92YWx1ZRgDIAEoAUgAUgtkb3VibGVWYWx1ZRIfCgpib29sX3ZhbHVlGAQgASgISABSCWJvb2xWYWx1ZRJLChBpcF9hZGRyZXNzX3ZhbHVlGAUgASgLMh8uaXN0aW8ucG9saWN5LnYxYmV0YTEuSVBBZGRyZXNzSABSDmlwQWRkcmVzc1ZhbHVlEkoKD3RpbWVzdGFtcF92YWx1ZRgGIAEoCzIfLmlzdGlvLnBvbGljeS52MWJldGExLlRpbWVTdGFtcEgAUg50aW1lc3RhbXBWYWx1ZRJHCg5kdXJhdGlvbl92YWx1ZRgHIAEoCzIeLmlzdGlvLnBvbGljeS52MWJldGExLkR1cmF0aW9uSABSDWR1cmF0aW9uVmFsdWUSVAoTZW1haWxfYWRkcmVzc192YWx1ZRgIIAEoCzIiLmlzdGlvLnBvbGljeS52MWJldGExLkVtYWlsQWRkcmVzc0gAUhFlbWFpbEFkZHJlc3NWYWx1ZRJFCg5kbnNfbmFtZV92YWx1ZRgJIAEoCzIdLmlzdGlvLnBvbGljeS52MWJldGExLkROU05hbWVIAFIMZG5zTmFtZVZhbHVlEjgKCXVyaV92YWx1ZRgKIAEoCzIZLmlzdGlvLnBvbGljeS52MWJldGExLlVyaUgAUgh1cmlWYWx1ZUIHCgV2YWx1ZSIhCglJUEFkZHJlc3MSFAoFdmFsdWUYASABKAxSBXZhbHVlIjsKCER1cmF0aW9uEi8KBXZhbHVlGAEgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUgV2YWx1ZSI9CglUaW1lU3RhbXASMAoFdmFsdWUYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgV2YWx1ZSIfCgdETlNOYW1lEhQKBXZhbHVlGAEgASgJUgV2YWx1ZSIkCgxFbWFpbEFkZHJlc3MSFAoFdmFsdWUYASABKAlSBXZhbHVlIhsKA1VyaRIUCgV2YWx1ZRgBIAEoCVIFdmFsdWVCHVobaXN0aW8uaW8vYXBpL3BvbGljeS92MWJldGExStkpCgcSBQ4AgwEBCr8ECgEMEgMOABIytAQgQ29weXJpZ2h0IDIwMTggSXN0aW8gQXV0aG9ycwoKIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKqAIKAQISAxUIHBpOIERlc2NyaWJlcyB0aGUgcnVsZXMgdXNlZCB0byBjb25maWd1cmUgTWl4ZXIncyBwb2xpY3kgYW5kIHRlbGVtZXRyeSBmZWF0dXJlcy4KMs0BICR0aXRsZTogUnVsZXMKICRkZXNjcmlwdGlvbjogRGVzY3JpYmVzIHRoZSBydWxlcyB1c2VkIHRvIGNvbmZpZ3VyZSBNaXhlcidzIHBvbGljeSBhbmQgdGVsZW1ldHJ5IGZlYXR1cmVzLgogJGxvY2F0aW9uOiBodHRwczovL2lzdGlvLmlvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZy9wb2xpY3ktYW5kLXRlbGVtZXRyeS9pc3Rpby5wb2xpY3kudjFiZXRhMS5odG1sCgoICgEIEgMXADAKCwoECOcHABIDFwAwCgwKBQjnBwACEgMXBxEKDQoGCOcHAAIAEgMXBxEKDgoHCOcHAAIAARIDFwcRCgwKBQjnBwAHEgMXEi8KCQoCAwASAxkHJwoJCgIDARIDGgcoCsgGCgIEABIEJQBFARq7BiBBbiBpbnN0YW5jZSBmaWVsZCBvZiB0eXBlIFZhbHVlIGRlbm90ZXMgdGhhdCB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIGZpZWxkIGlzIG9mIGR5bmFtaWMgdHlwZSBhbmQgY2FuIGV2YWxhdXRlIHRvIGFueQogW1ZhbHVlVHlwZV1baXN0aW8ucG9saWN5LnYxYmV0YTEuVmFsdWVUeXBlXSBlbnVtIHZhbHVlcy4gRm9yIGV4YW1wbGUsIHdoZW4KIGF1dGhvcmluZyBhbiBpbnN0YW5jZSBjb25maWd1cmF0aW9uIGZvciBhIHRlbXBsYXRlIHRoYXQgaGFzIGEgZmllbGQgYGRhdGFgIG9mIHR5cGUgYGlzdGlvLnBvbGljeS52MWJldGExLlZhbHVlYCwKIGJvdGggb2YgdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucyBhcmUgdmFsaWQgYGRhdGE6IHNvdXJjZS5pcCB8IGlwKCIwLjAuMC4wIilgLCBgZGF0YTogcmVxdWVzdC5pZCB8ICIiYDsKIHRoZSByZXN1bHRpbmcgdHlwZSBpcyBlaXRoZXIgVmFsdWVUeXBlLklQX0FERFJFU1Mgb3IgVmFsdWVUeXBlLlNUUklORyBmb3IgdGhlIHR3byBjYXNlcyByZXNwZWN0aXZlbHkuCgogT2JqZWN0cyBvZiB0eXBlIFZhbHVlIGFyZSBhbHNvIHBhc3NlZCB0byB0aGUgYWRhcHRlcnMgZHVyaW5nIHJlcXVlc3QtdGltZS4gVGhlcmUgaXMgYSAxOjEgbWFwcGluZyBiZXR3ZWVuCiBvbmVvZiBmaWVsZHMgaW4gYFZhbHVlYCBhbmQgZW51bSB2YWx1ZXMgaW5zaWRlIGBWYWx1ZVR5cGVgLiBEZXBlbmRpbmcgb24gdGhlIGV4cHJlc3Npb24ncyBldmFsdWF0ZWQgYFZhbHVlVHlwZWAsCiB0aGUgZXF1aXZhbGVudCBvbmVvZiBmaWVsZCBpbiBgVmFsdWVgIGlzIHBvcHVsYXRlZCBieSBNaXhlciBhbmQgcGFzc2VkIHRvIHRoZSBhZGFwdGVycy4KCgoKAwQAARIDJQgNCgwKBAQACAASBCYERAUKDAoFBAAIAAESAyYKDwotCgQEAAIAEgMoCCAaICBVc2VkIGZvciB2YWx1ZXMgb2YgdHlwZSBTVFJJTkcKCgwKBQQAAgAFEgMoCA4KDAoFBAACAAESAygPGwoMCgUEAAIAAxIDKB4fCiwKBAQAAgESAysIHhofIFVzZWQgZm9yIHZhbHVlcyBvZiB0eXBlIElOVDY0CgoMCgUEAAIBBRIDKwgNCgwKBQQAAgEBEgMrDhkKDAoFBAACAQMSAyscHQotCgQEAAICEgMuCCAaICBVc2VkIGZvciB2YWx1ZXMgb2YgdHlwZSBET1VCTEUKCgwKBQQAAgIFEgMuCA4KDAoFBAACAgESAy4PGwoMCgUEAAICAxIDLh4fCisKBAQAAgMSAzEIHBoeIFVzZWQgZm9yIHZhbHVlcyBvZiB0eXBlIEJPT0wKCgwKBQQAAgMFEgMxCAwKDAoFBAACAwESAzENFwoMCgUEAAIDAxIDMRobCjAKBAQAAgQSAzQIJxojIFVzZWQgZm9yIHZhbHVlcyBvZiB0eXBlIElQQWRkcmVzcwoKDAoFBAACBAYSAzQIEQoMCgUEAAIEARIDNBIiCgwKBQQAAgQDEgM0JSYKMAoEBAACBRIDNwgmGiMgVXNlZCBmb3IgdmFsdWVzIG9mIHR5cGUgVElNRVNUQU1QCgoMCgUEAAIFBhIDNwgRCgwKBQQAAgUBEgM3EiEKDAoFBAACBQMSAzckJQovCgQEAAIGEgM6CCQaIiBVc2VkIGZvciB2YWx1ZXMgb2YgdHlwZSBEVVJBVElPTgoKDAoFBAACBgYSAzoIEAoMCgUEAAIGARIDOhEfCgwKBQQAAgYDEgM6IiMKMwoEBAACBxIDPQgtGiYgVXNlZCBmb3IgdmFsdWVzIG9mIHR5cGUgRW1haWxBZGRyZXNzCgoMCgUEAAIHBhIDPQgUCgwKBQQAAgcBEgM9FSgKDAoFBAACBwMSAz0rLAouCgQEAAIIEgNACCMaISBVc2VkIGZvciB2YWx1ZXMgb2YgdHlwZSBETlNOYW1lCgoMCgUEAAIIBhIDQAgPCgwKBQQAAggBEgNAEB4KDAoFBAACCAMSA0AhIgoqCgQEAAIJEgNDCBsaHSBVc2VkIGZvciB2YWx1ZXMgb2YgdHlwZSBVcmkKCgwKBQQAAgkGEgNDCAsKDAoFBAACCQESA0MMFQoMCgUEAAIJAxIDQxgaCqsCCgIEARIETABPARqeAiBBbiBpbnN0YW5jZSBmaWVsZCBvZiB0eXBlIElQQWRkcmVzcyBkZW5vdGVzIHRoYXQgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZCBtdXN0IGV2YWxhdXRlIHRvCiBbVmFsdWVUeXBlLklQX0FERFJFU1NdW2lzdGlvLnBvbGljeS52MWJldGExLlZhbHVlVHlwZS5JUF9BRERSRVNTXQoKIE9iamVjdHMgb2YgdHlwZSBJUEFkZHJlc3MgYXJlIGFsc28gcGFzc2VkIHRvIHRoZSBhZGFwdGVycyBkdXJpbmcgcmVxdWVzdC10aW1lIGZvciB0aGUgaW5zdGFuY2UgZmllbGRzIG9mCiB0eXBlIElQQWRkcmVzcwoKCgoDBAEBEgNMCBEKKgoEBAECABIDTgQUGh0gSVBBZGRyZXNzIGVuY29kZWQgYXMgYnl0ZXMuCgoNCgUEAQIABBIETgRMEwoMCgUEAQIABRIDTgQJCgwKBQQBAgABEgNOCg8KDAoFBAECAAMSA04SEwqkAgoCBAISBFYAWQEalwIgQW4gaW5zdGFuY2UgZmllbGQgb2YgdHlwZSBEdXJhdGlvbiBkZW5vdGVzIHRoYXQgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZCBtdXN0IGV2YWxhdXRlIHRvCiBbVmFsdWVUeXBlLkRVUkFUSU9OXVtpc3Rpby5wb2xpY3kudjFiZXRhMS5WYWx1ZVR5cGUuRFVSQVRJT05dCgogT2JqZWN0cyBvZiB0eXBlIER1cmF0aW9uIGFyZSBhbHNvIHBhc3NlZCB0byB0aGUgYWRhcHRlcnMgZHVyaW5nIHJlcXVlc3QtdGltZSBmb3IgdGhlIGluc3RhbmNlIGZpZWxkcyBvZgogdHlwZSBEdXJhdGlvbgoKCgoDBAIBEgNWCBAKPAoEBAICABIDWAQnGi8gRHVyYXRpb24gZW5jb2RlZCBhcyBnb29nbGUucHJvdG9idWYuRHVyYXRpb24uCgoNCgUEAgIABBIEWARWEgoMCgUEAgIABhIDWAQcCgwKBQQCAgABEgNYHSIKDAoFBAICAAMSA1glJgqpAgoCBAMSBGAAYwEanAIgQW4gaW5zdGFuY2UgZmllbGQgb2YgdHlwZSBUaW1lU3RhbXAgZGVub3RlcyB0aGF0IHRoZSBleHByZXNzaW9uIGZvciB0aGUgZmllbGQgbXVzdCBldmFsYXV0ZSB0bwogW1ZhbHVlVHlwZS5USU1FU1RBTVBdW2lzdGlvLnBvbGljeS52MWJldGExLlZhbHVlVHlwZS5USU1FU1RBTVBdCgogT2JqZWN0cyBvZiB0eXBlIFRpbWVTdGFtcCBhcmUgYWxzbyBwYXNzZWQgdG8gdGhlIGFkYXB0ZXJzIGR1cmluZyByZXF1ZXN0LXRpbWUgZm9yIHRoZSBpbnN0YW5jZSBmaWVsZHMgb2YKIHR5cGUgVGltZVN0YW1wCgoKCgMEAwESA2AIEQo+CgQEAwIAEgNiBCgaMSBUaW1lU3RhbXAgZW5jb2RlZCBhcyBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wLgoKDQoFBAMCAAQSBGIEYBMKDAoFBAMCAAYSA2IEHQoMCgUEAwIAARIDYh4jCgwKBQQDAgADEgNiJicKoQIKAgQEEgRqAG0BGpQCIEFuIGluc3RhbmNlIGZpZWxkIG9mIHR5cGUgRE5TTmFtZSBkZW5vdGVzIHRoYXQgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZCBtdXN0IGV2YWxhdXRlIHRvCiBbVmFsdWVUeXBlLkROU19OQU1FXVtpc3Rpby5wb2xpY3kudjFiZXRhMS5WYWx1ZVR5cGUuRE5TX05BTUVdCgogT2JqZWN0cyBvZiB0eXBlIEROU05hbWUgYXJlIGFsc28gcGFzc2VkIHRvIHRoZSBhZGFwdGVycyBkdXJpbmcgcmVxdWVzdC10aW1lIGZvciB0aGUgaW5zdGFuY2UgZmllbGRzIG9mCiB0eXBlIEROU05hbWUKCgoKAwQEARIDaggPCikKBAQEAgASA2wEFRocIEROU05hbWUgZW5jb2RlZCBhcyBzdHJpbmcuCgoNCgUEBAIABBIEbARqEQoMCgUEBAIABRIDbAQKCgwKBQQEAgABEgNsCxAKDAoFBAQCAAMSA2wTFArbAgoCBAUSBHUAeAEazgIgRE8gTk9UIFVTRSAhISBVbmRlciBEZXZlbG9wbWVudAogQW4gaW5zdGFuY2UgZmllbGQgb2YgdHlwZSBFbWFpbEFkZHJlc3MgZGVub3RlcyB0aGF0IHRoZSBleHByZXNzaW9uIGZvciB0aGUgZmllbGQgbXVzdCBldmFsYXV0ZSB0bwogW1ZhbHVlVHlwZS5FTUFJTF9BRERSRVNTXVtpc3Rpby5wb2xpY3kudjFiZXRhMS5WYWx1ZVR5cGUuRU1BSUxfQUREUkVTU10KCiBPYmplY3RzIG9mIHR5cGUgRW1haWxBZGRyZXNzIGFyZSBhbHNvIHBhc3NlZCB0byB0aGUgYWRhcHRlcnMgZHVyaW5nIHJlcXVlc3QtdGltZSBmb3IgdGhlIGluc3RhbmNlIGZpZWxkcyBvZgogdHlwZSBFbWFpbEFkZHJlc3MKCgoKAwQFARIDdQgUCi4KBAQFAgASA3cEFRohIEVtYWlsQWRkcmVzcyBlbmNvZGVkIGFzIHN0cmluZy4KCg0KBQQFAgAEEgR3BHUWCgwKBQQFAgAFEgN3BAoKDAoFBAUCAAESA3cLEAoMCgUEBQIAAxIDdxMUCq4CCgIEBhIGgAEAgwEBGp8CIERPIE5PVCBVU0UgISEgVW5kZXIgRGV2ZWxvcG1lbnQKIEFuIGluc3RhbmNlIGZpZWxkIG9mIHR5cGUgVXJpIGRlbm90ZXMgdGhhdCB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIGZpZWxkIG11c3QgZXZhbGF1dGUgdG8KIFtWYWx1ZVR5cGUuVVJJXVtpc3Rpby5wb2xpY3kudjFiZXRhMS5WYWx1ZVR5cGUuVVJJXQoKIE9iamVjdHMgb2YgdHlwZSBVcmkgYXJlIGFsc28gcGFzc2VkIHRvIHRoZSBhZGFwdGVycyBkdXJpbmcgcmVxdWVzdC10aW1lIGZvciB0aGUgaW5zdGFuY2UgZmllbGRzIG9mCiB0eXBlIFVyaQoKCwoDBAYBEgSAAQgLCiYKBAQGAgASBIIBBBUaGCBVcmkgZW5jb2RlZCBhcyBzdHJpbmcuCgoPCgUEBgIABBIGggEEgAENCg0KBQQGAgAFEgSCAQQKCg0KBQQGAgABEgSCAQsQCg0KBQQGAgADEgSCARMUYgZwcm90bzMKgD0KWW1peGVyL2FkYXB0ZXIvc2VydmljZWNvbnRyb2wvdGVtcGxhdGUvc2VydmljZWNvbnRyb2xyZXBvcnQvdGVtcGxhdGVfaGFuZGxlcl9zZXJ2aWNlLnByb3RvEhRzZXJ2aWNlY29udHJvbHJlcG9ydBoUZ29nb3Byb3RvL2dvZ28ucHJvdG8aLG1peGVyL2FkYXB0ZXIvbW9kZWwvdjFiZXRhMS9leHRlbnNpb25zLnByb3RvGhlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvGihtaXhlci9hZGFwdGVyL21vZGVsL3YxYmV0YTEvcmVwb3J0LnByb3RvGhlwb2xpY3kvdjFiZXRhMS90eXBlLnByb3RvIrwBCiFIYW5kbGVTZXJ2aWNlY29udHJvbFJlcG9ydFJlcXVlc3QSPwoJaW5zdGFuY2VzGAEgAygLMiEuc2VydmljZWNvbnRyb2xyZXBvcnQuSW5zdGFuY2VNc2dSCWluc3RhbmNlcxI7Cg5hZGFwdGVyX2NvbmZpZxgCIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSDWFkYXB0ZXJDb25maWcSGQoIZGVkdXBfaWQYAyABKAlSB2RlZHVwSWQi1wQKC0luc3RhbmNlTXNnEhUKBG5hbWUYr8q8IiABKAlSBG5hbWUSHwoLYXBpX3ZlcnNpb24YASABKAlSCmFwaVZlcnNpb24SIwoNYXBpX29wZXJhdGlvbhgCIAEoCVIMYXBpT3BlcmF0aW9uEiEKDGFwaV9wcm90b2NvbBgDIAEoCVILYXBpUHJvdG9jb2wSHwoLYXBpX3NlcnZpY2UYBCABKAlSCmFwaVNlcnZpY2USFwoHYXBpX2tleRgFIAEoCVIGYXBpS2V5EkIKDHJlcXVlc3RfdGltZRgGIAEoCzIfLmlzdGlvLnBvbGljeS52MWJldGExLlRpbWVTdGFtcFILcmVxdWVzdFRpbWUSJQoOcmVxdWVzdF9tZXRob2QYByABKAlSDXJlcXVlc3RNZXRob2QSIQoMcmVxdWVzdF9wYXRoGAggASgJUgtyZXF1ZXN0UGF0aBIjCg1yZXF1ZXN0X2J5dGVzGAkgASgDUgxyZXF1ZXN0Qnl0ZXMSRAoNcmVzcG9uc2VfdGltZRgKIAEoCzIfLmlzdGlvLnBvbGljeS52MWJldGExLlRpbWVTdGFtcFIMcmVzcG9uc2VUaW1lEiMKDXJlc3BvbnNlX2NvZGUYCyABKANSDHJlc3BvbnNlQ29kZRIlCg5yZXNwb25zZV9ieXRlcxgMIAEoA1INcmVzcG9uc2VCeXRlcxJJChByZXNwb25zZV9sYXRlbmN5GA0gASgLMh4uaXN0aW8ucG9saWN5LnYxYmV0YTEuRHVyYXRpb25SD3Jlc3BvbnNlTGF0ZW5jeSIGCgRUeXBlIuADCg1JbnN0YW5jZVBhcmFtEh8KC2FwaV92ZXJzaW9uGAEgASgJUgphcGlWZXJzaW9uEiMKDWFwaV9vcGVyYXRpb24YAiABKAlSDGFwaU9wZXJhdGlvbhIhCgxhcGlfcHJvdG9jb2wYAyABKAlSC2FwaVByb3RvY29sEh8KC2FwaV9zZXJ2aWNlGAQgASgJUgphcGlTZXJ2aWNlEhcKB2FwaV9rZXkYBSABKAlSBmFwaUtleRIhCgxyZXF1ZXN0X3RpbWUYBiABKAlSC3JlcXVlc3RUaW1lEiUKDnJlcXVlc3RfbWV0aG9kGAcgASgJUg1yZXF1ZXN0TWV0aG9kEiEKDHJlcXVlc3RfcGF0aBgIIAEoCVILcmVxdWVzdFBhdGgSIwoNcmVxdWVzdF9ieXRlcxgJIAEoCVIMcmVxdWVzdEJ5dGVzEiMKDXJlc3BvbnNlX3RpbWUYCiABKAlSDHJlc3BvbnNlVGltZRIjCg1yZXNwb25zZV9jb2RlGAsgASgJUgxyZXNwb25zZUNvZGUSJQoOcmVzcG9uc2VfYnl0ZXMYDCABKAlSDXJlc3BvbnNlQnl0ZXMSKQoQcmVzcG9uc2VfbGF0ZW5jeRgNIAEoCVIPcmVzcG9uc2VMYXRlbmN5MqwBCiFIYW5kbGVTZXJ2aWNlY29udHJvbFJlcG9ydFNlcnZpY2UShgEKGkhhbmRsZVNlcnZpY2Vjb250cm9sUmVwb3J0Ejcuc2VydmljZWNvbnRyb2xyZXBvcnQuSGFuZGxlU2VydmljZWNvbnRyb2xSZXBvcnRSZXF1ZXN0Gi8uaXN0aW8ubWl4ZXIuYWRhcHRlci5tb2RlbC52MWJldGExLlJlcG9ydFJlc3VsdEIs+NLkkwIBgt3kkwIUc2VydmljZWNvbnRyb2xyZXBvcnTI4R4AqOIeAPDhHgBK/y4KBxIFEAC/AQEK8gQKAQwSAxAAEjK0BCBDb3B5cmlnaHQgMjAxNyBJc3RpbyBBdXRob3JzCgogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCjIxIFRISVMgRklMRSBJUyBBVVRPTUFUSUNBTExZIEdFTkVSQVRFRCBCWSBNSVhHRU4uCgrYBwoBAhIDMQgcGs0HIFRoZSBgc2VydmljZWNvbnRyb2xyZXBvcnRgIHRlbXBsYXRlIGlzIHVzZWQgYnkgdGhlIFtHb29nbGUgU2VydmljZSBDb250cm9sXShodHRwczovL2lzdGlvLmlvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZy9wb2xpY3ktYW5kLXRlbGVtZXRyeS9hZGFwdGVycy9zZXJ2aWNlY29udHJvbC8pCiBhZGFwdGVyLgogCiBFeGFtcGxlIGNvbmZpZzoKIAogYGBgeWFtbAogYXBpVmVyc2lvbjogImNvbmZpZy5pc3Rpby5pby92MWFscGhhMiIKIGtpbmQ6IHNlcnZpY2Vjb250cm9scmVwb3J0CiBtZXRhZGF0YToKICAgbmFtZTogcmVwb3J0CiAgIG5hbWVzcGFjZTogaXN0aW8tc3lzdGVtCiBzcGVjOgogICBhcGlfdmVyc2lvbiA6IGFwaS52ZXJzaW9uIHwgIiIKICAgYXBpX29wZXJhdGlvbiA6IGFwaS5vcGVyYXRpb24gfCAiIgogICBhcGlfcHJvdG9jb2wgOiBhcGkucHJvdG9jb2wgfCAiIgogICBhcGlfc2VydmljZSA6IGFwaS5zZXJ2aWNlIHwgIiIKICAgYXBpX2tleSA6IGFwaS5rZXkgfCAiIgogICByZXF1ZXN0X3RpbWUgOiByZXF1ZXN0LnRpbWUKICAgcmVxdWVzdF9tZXRob2QgOiByZXF1ZXN0Lm1ldGhvZAogICByZXF1ZXN0X3BhdGggOiByZXF1ZXN0LnBhdGgKICAgcmVxdWVzdF9ieXRlczogcmVxdWVzdC5zaXplCiAgIHJlc3BvbnNlX3RpbWUgOiByZXNwb25zZS50aW1lCiAgIHJlc3BvbnNlX2NvZGUgOiByZXNwb25zZS5jb2RlIHwgNTIwCiAgIHJlc3BvbnNlX2J5dGVzIDogcmVzcG9uc2Uuc2l6ZSB8IDAKICAgcmVzcG9uc2VfbGF0ZW5jeSA6IHJlc3BvbnNlLmR1cmF0aW9uIHwgIjBtcyIKIGBgYAoKIEEgdGVtcGxhdGUgdXNlZCBieSBHb29nbGUgU2VydmljZSBDb250cm9sIChzZXJ2aWNlY29udHJvbCkgYWRhcHRlci4gVGhlIGFkYXB0ZXIKIGdlbmVyYXRlcyBtZXRyaWNzIGFuZCBsb2dlbnRyeSBmb3IgZWFjaCByZXF1ZXN0IGJhc2VkIG9uIHRoZSBkYXRhIHBvaW50CiBkZWZpbmVkIGJ5IHRoaXMgdGVtcGxhdGUuCgoJCgIDABIDNAcdCgkKAgMBEgM1BzUKCQoCAwISAzYHIgoJCgIDAxIDNwcxCgkKAgMEEgM4ByIKCAoBCBIDOgBWCgsKBAjnBwASAzoAVgoMCgUI5wcAAhIDOgc7Cg0KBgjnBwACABIDOgc7Cg4KBwjnBwACAAESAzoIOgoMCgUI5wcAAxIDOj5VCggKAQgSAzsAUgoLCgQI5wcBEgM7AFIKDAoFCOcHAQISAzsHOAoNCgYI5wcBAgASAzsHOAoOCgcI5wcBAgABEgM7CDcKDAoFCOcHAQcSAzs7UQoICgEIEgM9AC8KCwoECOcHAhIDPQAvCgwKBQjnBwICEgM9ByYKDQoGCOcHAgIAEgM9ByYKDgoHCOcHAgIAARIDPQglCgwKBQjnBwIDEgM9KS4KCAoBCBIDPgAlCgsKBAjnBwMSAz4AJQoMCgUI5wcDAhIDPgccCg0KBgjnBwMCABIDPgccCg4KBwjnBwMCAAESAz4IGwoMCgUI5wcDAxIDPh8kCggKAQgSAz8AKAoLCgQI5wcEEgM/ACgKDAoFCOcHBAISAz8HHwoNCgYI5wcEAgASAz8HHwoOCgcI5wcEAgABEgM/CB4KDAoFCOcHBAMSAz8iJwqPAQoCBgASBEIARgEaggEgSGFuZGxlU2VydmljZWNvbnRyb2xSZXBvcnRTZXJ2aWNlIGlzIGltcGxlbWVudGVkIGJ5IGJhY2tlbmRzIHRoYXQgd2FudHMgdG8gaGFuZGxlIHJlcXVlc3QtdGltZSAnc2VydmljZWNvbnRyb2xyZXBvcnQnIGluc3RhbmNlcy4KCgoKAwYAARIDQggpCogBCgQGAAIAEgNEBH8aeyBIYW5kbGVTZXJ2aWNlY29udHJvbFJlcG9ydCBpcyBjYWxsZWQgYnkgTWl4ZXIgYXQgcmVxdWVzdC10aW1lIHRvIGRlbGl2ZXIgJ3NlcnZpY2Vjb250cm9scmVwb3J0JyBpbnN0YW5jZXMgdG8gdGhlIGJhY2tlbmQuCgoMCgUGAAIAARIDRAgiCgwKBQYAAgACEgNEI0QKDAoFBgACAAMSA0RPfQpECgIEABIESQBYARo4IFJlcXVlc3QgbWVzc2FnZSBmb3IgSGFuZGxlU2VydmljZWNvbnRyb2xSZXBvcnQgbWV0aG9kLgoKCgoDBAABEgNJCCkKMAoEBAACABIDTAQnGiMgJ3NlcnZpY2Vjb250cm9scmVwb3J0JyBpbnN0YW5jZXMuCgoMCgUEAAIABBIDTAQMCgwKBQQAAgAGEgNMDRgKDAoFBAACAAESA0wZIgoMCgUEAAIAAxIDTCUmCrkECgQEAAIBEgNUBCsaqwQgQWRhcHRlciBzcGVjaWZpYyBoYW5kbGVyIGNvbmZpZ3VyYXRpb24uCgogTm90ZTogQmFja2VuZHMgY2FuIGFsc28gaW1wbGVtZW50IFtJbmZyYXN0cnVjdHVyZUJhY2tlbmRdW2h0dHBzOi8vaXN0aW8uaW8vZG9jcy9yZWZlcmVuY2UvY29uZmlnL21peGVyL2lzdGlvLm1peGVyLmFkYXB0ZXIubW9kZWwudjFiZXRhMS5odG1sI0luZnJhc3RydWN0dXJlQmFja2VuZF0KIHNlcnZpY2UgYW5kIHRoZXJlZm9yZSBvcHQgdG8gcmVjZWl2ZSBoYW5kbGVyIGNvbmZpZ3VyYXRpb24gZHVyaW5nIHNlc3Npb24gY3JlYXRpb24gdGhyb3VnaCBbSW5mcmFzdHJ1Y3R1cmVCYWNrZW5kLkNyZWF0ZVNlc3Npb25dW1RPRE86IExpbmsgdG8gdGhpcyBmcmFnbWVudF0KIGNhbGwuIEluIHRoYXQgY2FzZSwgYWRhcHRlcl9jb25maWcgd2lsbCBoYXZlIHR5cGVfdXJsIGFzICdnb29nbGUucHJvdG9idWYuQW55LnR5cGVfdXJsJyBhbmQgd291bGQgY29udGFpbiBzdHJpbmcKIHZhbHVlIG9mIHNlc3Npb25faWQgKHJldHVybmVkIGZyb20gSW5mcmFzdHJ1Y3R1cmVCYWNrZW5kLkNyZWF0ZVNlc3Npb24pLgoKDQoFBAACAQQSBFQETCcKDAoFBAACAQYSA1QEFwoMCgUEAAIBARIDVBgmCgwKBQQAAgEDEgNUKSoKOgoEBAACAhIDVwQYGi0gSWQgdG8gZGVkdXBlIGlkZW50aWNhbCByZXF1ZXN0cyBmcm9tIE1peGVyLgoKDQoFBAACAgQSBFcEVCsKDAoFBAACAgUSA1cECgoMCgUEAAICARIDVwsTCgwKBQQAAgIDEgNXFhcK0wEKAgQBEgVgAIwBARrFASBDb250YWlucyBpbnN0YW5jZSBwYXlsb2FkIGZvciAnc2VydmljZWNvbnRyb2xyZXBvcnQnIHRlbXBsYXRlLiBUaGlzIGlzIHBhc3NlZCB0byBpbmZyYXN0cnVjdHVyZSBiYWNrZW5kcyBkdXJpbmcgcmVxdWVzdC10aW1lCiB0aHJvdWdoIEhhbmRsZVNlcnZpY2Vjb250cm9sUmVwb3J0U2VydmljZS5IYW5kbGVTZXJ2aWNlY29udHJvbFJlcG9ydC4KCgoKAwQBARIDYAgTCkIKBAQBAgASA2MEGxo1IE5hbWUgb2YgdGhlIGluc3RhbmNlIGFzIHNwZWNpZmllZCBpbiBjb25maWd1cmF0aW9uLgoKDQoFBAECAAQSBGMEYBUKDAoFBAECAAUSA2MECgoMCgUEAQIAARIDYwsPCgwKBQQBAgADEgNjEhoKCwoEBAECARIDZgQbCg0KBQQBAgEEEgRmBGMbCgwKBQQBAgEFEgNmBAoKDAoFBAECAQESA2YLFgoMCgUEAQIBAxIDZhkaCgsKBAQBAgISA2kEHQoNCgUEAQICBBIEaQRmGwoMCgUEAQICBRIDaQQKCgwKBQQBAgIBEgNpCxgKDAoFBAECAgMSA2kbHAoLCgQEAQIDEgNsBBwKDQoFBAECAwQSBGwEaR0KDAoFBAECAwUSA2wECgoMCgUEAQIDARIDbAsXCgwKBQQBAgMDEgNsGhsKCwoEBAECBBIDbwQbCg0KBQQBAgQEEgRvBGwcCgwKBQQBAgQFEgNvBAoKDAoFBAECBAESA28LFgoMCgUEAQIEAxIDbxkaCgsKBAQBAgUSA3IEFwoNCgUEAQIFBBIEcgRvGwoMCgUEAQIFBRIDcgQKCgwKBQQBAgUBEgNyCxIKDAoFBAECBQMSA3IVFgoLCgQEAQIGEgN1BDQKDQoFBAECBgQSBHUEchcKDAoFBAECBgYSA3UEIgoMCgUEAQIGARIDdSMvCgwKBQQBAgYDEgN1MjMKCwoEBAECBxIDeAQeCg0KBQQBAgcEEgR4BHU0CgwKBQQBAgcFEgN4BAoKDAoFBAECBwESA3gLGQoMCgUEAQIHAxIDeBwdCgsKBAQBAggSA3sEHAoNCgUEAQIIBBIEewR4HgoMCgUEAQIIBRIDewQKCgwKBQQBAggBEgN7CxcKDAoFBAECCAMSA3saGwoLCgQEAQIJEgN+BBwKDQoFBAECCQQSBH4EexwKDAoFBAECCQUSA34ECQoMCgUEAQIJARIDfgoXCgwKBQQBAgkDEgN+GhsKDAoEBAECChIEgQEENgoOCgUEAQIKBBIFgQEEfhwKDQoFBAECCgYSBIEBBCIKDQoFBAECCgESBIEBIzAKDQoFBAECCgMSBIEBMzUKDAoEBAECCxIEhAEEHQoPCgUEAQILBBIGhAEEgQE2Cg0KBQQBAgsFEgSEAQQJCg0KBQQBAgsBEgSEAQoXCg0KBQQBAgsDEgSEARocCgwKBAQBAgwSBIcBBB4KDwoFBAECDAQSBocBBIQBHQoNCgUEAQIMBRIEhwEECQoNCgUEAQIMARIEhwEKGAoNCgUEAQIMAxIEhwEbHQoMCgQEAQINEgSKAQQ4Cg8KBQQBAg0EEgaKAQSHAR4KDQoFBAECDQYSBIoBBCEKDQoFBAECDQESBIoBIjIKDQoFBAECDQMSBIoBNTcKgAIKAgQCEgaQAQCSAQEa8QEgQ29udGFpbnMgaW5mZXJyZWQgdHlwZSBpbmZvcm1hdGlvbiBhYm91dCBzcGVjaWZpYyBpbnN0YW5jZSBvZiAnc2VydmljZWNvbnRyb2xyZXBvcnQnIHRlbXBsYXRlLiBUaGlzIGlzIHBhc3NlZCB0bwogaW5mcmFzdHJ1Y3R1cmUgYmFja2VuZHMgZHVyaW5nIGNvbmZpZ3VyYXRpb24tdGltZSB0aHJvdWdoIFtJbmZyYXN0cnVjdHVyZUJhY2tlbmQuQ3JlYXRlU2Vzc2lvbl1bVE9ETzogTGluayB0byB0aGlzIGZyYWdtZW50XS4KCgsKAwQCARIEkAEIDApdCgIEAxIGlgEAvwEBGk8gUmVwcmVzZW50cyBpbnN0YW5jZSBjb25maWd1cmF0aW9uIHNjaGVtYSBmb3IgJ3NlcnZpY2Vjb250cm9scmVwb3J0JyB0ZW1wbGF0ZS4KCgsKAwQDARIElgEIFQoMCgQEAwIAEgSZAQQbCg8KBQQDAgAEEgaZAQSWARcKDQoFBAMCAAUSBJkBBAoKDQoFBAMCAAESBJkBCxYKDQoFBAMCAAMSBJkBGRoKDAoEBAMCARIEnAEEHQoPCgUEAwIBBBIGnAEEmQEbCg0KBQQDAgEFEgScAQQKCg0KBQQDAgEBEgScAQsYCg0KBQQDAgEDEgScARscCgwKBAQDAgISBJ8BBBwKDwoFBAMCAgQSBp8BBJwBHQoNCgUEAwICBRIEnwEECgoNCgUEAwICARIEnwELFwoNCgUEAwICAxIEnwEaGwoMCgQEAwIDEgSiAQQbCg8KBQQDAgMEEgaiAQSfARwKDQoFBAMCAwUSBKIBBAoKDQoFBAMCAwESBKIBCxYKDQoFBAMCAwMSBKIBGRoKDAoEBAMCBBIEpQEEFwoPCgUEAwIEBBIGpQEEogEbCg0KBQQDAgQFEgSlAQQKCg0KBQQDAgQBEgSlAQsSCg0KBQQDAgQDEgSlARUWCgwKBAQDAgUSBKgBBBwKDwoFBAMCBQQSBqgBBKUBFwoNCgUEAwIFBRIEqAEECgoNCgUEAwIFARIEqAELFwoNCgUEAwIFAxIEqAEaGwoMCgQEAwIGEgSrAQQeCg8KBQQDAgYEEgarAQSoARwKDQoFBAMCBgUSBKsBBAoKDQoFBAMCBgESBKsBCxkKDQoFBAMCBgMSBKsBHB0KDAoEBAMCBxIErgEEHAoPCgUEAwIHBBIGrgEEqwEeCg0KBQQDAgcFEgSuAQQKCg0KBQQDAgcBEgSuAQsXCg0KBQQDAgcDEgSuARobCgwKBAQDAggSBLEBBB0KDwoFBAMCCAQSBrEBBK4BHAoNCgUEAwIIBRIEsQEECgoNCgUEAwIIARIEsQELGAoNCgUEAwIIAxIEsQEbHAoMCgQEAwIJEgS0AQQeCg8KBQQDAgkEEga0AQSxAR0KDQoFBAMCCQUSBLQBBAoKDQoFBAMCCQESBLQBCxgKDQoFBAMCCQMSBLQBGx0KDAoEBAMCChIEtwEEHgoPCgUEAwIKBBIGtwEEtAEeCg0KBQQDAgoFEgS3AQQKCg0KBQQDAgoBEgS3AQsYCg0KBQQDAgoDEgS3ARsdCgwKBAQDAgsSBLoBBB8KDwoFBAMCCwQSBroBBLcBHgoNCgUEAwILBRIEugEECgoNCgUEAwILARIEugELGQoNCgUEAwILAxIEugEcHgoMCgQEAwIMEgS9AQQhCg8KBQQDAgwEEga9AQS6AR8KDQoFBAMCDAUSBL0BBAoKDQoFBAMCDAESBL0BCxsKDQoFBAMCDAMSBL0BHiBiBnByb3RvMw==" ---- diff --git a/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler.gen.go b/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler.gen.go deleted file mode 100644 index 814323d37098..000000000000 --- a/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler.gen.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// THIS FILE IS AUTOMATICALLY GENERATED. - -package servicecontrolreport - -import ( - "context" - "time" - - "istio.io/istio/mixer/pkg/adapter" -) - -// The `servicecontrolreport` template is used by the [Google Service Control](https://istio.io/docs/reference/config/policy-and-telemetry/adapters/servicecontrol/) -// adapter. -// -// Example config: -// -// ```yaml -// apiVersion: "config.istio.io/v1alpha2" -// kind: servicecontrolreport -// metadata: -// name: report -// namespace: istio-system -// spec: -// api_version : api.version | "" -// api_operation : api.operation | "" -// api_protocol : api.protocol | "" -// api_service : api.service | "" -// api_key : api.key | "" -// request_time : request.time -// request_method : request.method -// request_path : request.path -// request_bytes: request.size -// response_time : response.time -// response_code : response.code | 520 -// response_bytes : response.size | 0 -// response_latency : response.duration | "0ms" -// ``` - -// Fully qualified name of the template -const TemplateName = "servicecontrolreport" - -// Instance is constructed by Mixer for the 'servicecontrolreport' template. -// -// A template used by Google Service Control (servicecontrol) adapter. The adapter -// generates metrics and logentry for each request based on the data point -// defined by this template. -type Instance struct { - // Name of the instance as specified in configuration. - Name string - - ApiVersion string - - ApiOperation string - - ApiProtocol string - - ApiService string - - ApiKey string - - RequestTime time.Time - - RequestMethod string - - RequestPath string - - RequestBytes int64 - - ResponseTime time.Time - - ResponseCode int64 - - ResponseBytes int64 - - ResponseLatency time.Duration -} - -// HandlerBuilder must be implemented by adapters if they want to -// process data associated with the 'servicecontrolreport' template. -// -// Mixer uses this interface to call into the adapter at configuration time to configure -// it with adapter-specific configuration as well as all template-specific type information. -type HandlerBuilder interface { - adapter.HandlerBuilder - - // SetServicecontrolReportTypes is invoked by Mixer to pass the template-specific Type information for instances that an adapter - // may receive at runtime. The type information describes the shape of the instance. - SetServicecontrolReportTypes(map[string]*Type /*Instance name -> Type*/) -} - -// Handler must be implemented by adapter code if it wants to -// process data associated with the 'servicecontrolreport' template. -// -// Mixer uses this interface to call into the adapter at request time in order to dispatch -// created instances to the adapter. Adapters take the incoming instances and do what they -// need to achieve their primary function. -// -// The name of each instance can be used as a key into the Type map supplied to the adapter -// at configuration time via the method 'SetServicecontrolReportTypes'. -// These Type associated with an instance describes the shape of the instance -type Handler interface { - adapter.Handler - - // HandleServicecontrolReport is called by Mixer at request time to deliver instances to - // to an adapter. - HandleServicecontrolReport(context.Context, []*Instance) error -} diff --git a/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.descriptor_set b/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.descriptor_set deleted file mode 100644 index 996d172cfed0..000000000000 Binary files a/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.descriptor_set and /dev/null differ diff --git a/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.pb.go b/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.pb.go deleted file mode 100644 index fc7a8a6bd28c..000000000000 --- a/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.pb.go +++ /dev/null @@ -1,1970 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.proto - -/* - Package servicecontrolreport is a generated protocol buffer package. - - The `servicecontrolreport` template is used by the [Google Service Control](https://istio.io/docs/reference/config/policy-and-telemetry/adapters/servicecontrol/) - adapter. - - Example config: - - ```yaml - apiVersion: "config.istio.io/v1alpha2" - kind: servicecontrolreport - metadata: - name: report - namespace: istio-system - spec: - api_version : api.version | "" - api_operation : api.operation | "" - api_protocol : api.protocol | "" - api_service : api.service | "" - api_key : api.key | "" - request_time : request.time - request_method : request.method - request_path : request.path - request_bytes: request.size - response_time : response.time - response_code : response.code | 520 - response_bytes : response.size | 0 - response_latency : response.duration | "0ms" - ``` - - A template used by Google Service Control (servicecontrol) adapter. The adapter - generates metrics and logentry for each request based on the data point - defined by this template. - - It is generated from these files: - mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.proto - - It has these top-level messages: - HandleServicecontrolReportRequest - InstanceMsg - Type - InstanceParam -*/ -package servicecontrolreport - -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "github.com/gogo/protobuf/gogoproto" -import _ "istio.io/api/mixer/adapter/model/v1beta1" -import google_protobuf1 "github.com/gogo/protobuf/types" -import istio_mixer_adapter_model_v1beta11 "istio.io/api/mixer/adapter/model/v1beta1" -import istio_policy_v1beta1 "istio.io/api/policy/v1beta1" - -import context "golang.org/x/net/context" -import grpc "google.golang.org/grpc" - -import strings "strings" -import reflect "reflect" - -import io "io" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package - -// Request message for HandleServicecontrolReport method. -type HandleServicecontrolReportRequest struct { - // 'servicecontrolreport' instances. - Instances []*InstanceMsg `protobuf:"bytes,1,rep,name=instances" json:"instances,omitempty"` - // Adapter specific handler configuration. - // - // Note: Backends can also implement [InfrastructureBackend][https://istio.io/docs/reference/config/mixer/istio.mixer.adapter.model.v1beta1.html#InfrastructureBackend] - // service and therefore opt to receive handler configuration during session creation through [InfrastructureBackend.CreateSession][TODO: Link to this fragment] - // call. In that case, adapter_config will have type_url as 'google.protobuf.Any.type_url' and would contain string - // value of session_id (returned from InfrastructureBackend.CreateSession). - AdapterConfig *google_protobuf1.Any `protobuf:"bytes,2,opt,name=adapter_config,json=adapterConfig" json:"adapter_config,omitempty"` - // Id to dedupe identical requests from Mixer. - DedupId string `protobuf:"bytes,3,opt,name=dedup_id,json=dedupId,proto3" json:"dedup_id,omitempty"` -} - -func (m *HandleServicecontrolReportRequest) Reset() { *m = HandleServicecontrolReportRequest{} } -func (*HandleServicecontrolReportRequest) ProtoMessage() {} -func (*HandleServicecontrolReportRequest) Descriptor() ([]byte, []int) { - return fileDescriptorTemplateHandlerService, []int{0} -} - -// Contains instance payload for 'servicecontrolreport' template. This is passed to infrastructure backends during request-time -// through HandleServicecontrolReportService.HandleServicecontrolReport. -type InstanceMsg struct { - // Name of the instance as specified in configuration. - Name string `protobuf:"bytes,72295727,opt,name=name,proto3" json:"name,omitempty"` - ApiVersion string `protobuf:"bytes,1,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` - ApiOperation string `protobuf:"bytes,2,opt,name=api_operation,json=apiOperation,proto3" json:"api_operation,omitempty"` - ApiProtocol string `protobuf:"bytes,3,opt,name=api_protocol,json=apiProtocol,proto3" json:"api_protocol,omitempty"` - ApiService string `protobuf:"bytes,4,opt,name=api_service,json=apiService,proto3" json:"api_service,omitempty"` - ApiKey string `protobuf:"bytes,5,opt,name=api_key,json=apiKey,proto3" json:"api_key,omitempty"` - RequestTime *istio_policy_v1beta1.TimeStamp `protobuf:"bytes,6,opt,name=request_time,json=requestTime" json:"request_time,omitempty"` - RequestMethod string `protobuf:"bytes,7,opt,name=request_method,json=requestMethod,proto3" json:"request_method,omitempty"` - RequestPath string `protobuf:"bytes,8,opt,name=request_path,json=requestPath,proto3" json:"request_path,omitempty"` - RequestBytes int64 `protobuf:"varint,9,opt,name=request_bytes,json=requestBytes,proto3" json:"request_bytes,omitempty"` - ResponseTime *istio_policy_v1beta1.TimeStamp `protobuf:"bytes,10,opt,name=response_time,json=responseTime" json:"response_time,omitempty"` - ResponseCode int64 `protobuf:"varint,11,opt,name=response_code,json=responseCode,proto3" json:"response_code,omitempty"` - ResponseBytes int64 `protobuf:"varint,12,opt,name=response_bytes,json=responseBytes,proto3" json:"response_bytes,omitempty"` - ResponseLatency *istio_policy_v1beta1.Duration `protobuf:"bytes,13,opt,name=response_latency,json=responseLatency" json:"response_latency,omitempty"` -} - -func (m *InstanceMsg) Reset() { *m = InstanceMsg{} } -func (*InstanceMsg) ProtoMessage() {} -func (*InstanceMsg) Descriptor() ([]byte, []int) { - return fileDescriptorTemplateHandlerService, []int{1} -} - -// Contains inferred type information about specific instance of 'servicecontrolreport' template. This is passed to -// infrastructure backends during configuration-time through [InfrastructureBackend.CreateSession][TODO: Link to this fragment]. -type Type struct { -} - -func (m *Type) Reset() { *m = Type{} } -func (*Type) ProtoMessage() {} -func (*Type) Descriptor() ([]byte, []int) { return fileDescriptorTemplateHandlerService, []int{2} } - -// Represents instance configuration schema for 'servicecontrolreport' template. -type InstanceParam struct { - ApiVersion string `protobuf:"bytes,1,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` - ApiOperation string `protobuf:"bytes,2,opt,name=api_operation,json=apiOperation,proto3" json:"api_operation,omitempty"` - ApiProtocol string `protobuf:"bytes,3,opt,name=api_protocol,json=apiProtocol,proto3" json:"api_protocol,omitempty"` - ApiService string `protobuf:"bytes,4,opt,name=api_service,json=apiService,proto3" json:"api_service,omitempty"` - ApiKey string `protobuf:"bytes,5,opt,name=api_key,json=apiKey,proto3" json:"api_key,omitempty"` - RequestTime string `protobuf:"bytes,6,opt,name=request_time,json=requestTime,proto3" json:"request_time,omitempty"` - RequestMethod string `protobuf:"bytes,7,opt,name=request_method,json=requestMethod,proto3" json:"request_method,omitempty"` - RequestPath string `protobuf:"bytes,8,opt,name=request_path,json=requestPath,proto3" json:"request_path,omitempty"` - RequestBytes string `protobuf:"bytes,9,opt,name=request_bytes,json=requestBytes,proto3" json:"request_bytes,omitempty"` - ResponseTime string `protobuf:"bytes,10,opt,name=response_time,json=responseTime,proto3" json:"response_time,omitempty"` - ResponseCode string `protobuf:"bytes,11,opt,name=response_code,json=responseCode,proto3" json:"response_code,omitempty"` - ResponseBytes string `protobuf:"bytes,12,opt,name=response_bytes,json=responseBytes,proto3" json:"response_bytes,omitempty"` - ResponseLatency string `protobuf:"bytes,13,opt,name=response_latency,json=responseLatency,proto3" json:"response_latency,omitempty"` -} - -func (m *InstanceParam) Reset() { *m = InstanceParam{} } -func (*InstanceParam) ProtoMessage() {} -func (*InstanceParam) Descriptor() ([]byte, []int) { - return fileDescriptorTemplateHandlerService, []int{3} -} - -func init() { - proto.RegisterType((*HandleServicecontrolReportRequest)(nil), "servicecontrolreport.HandleServicecontrolReportRequest") - proto.RegisterType((*InstanceMsg)(nil), "servicecontrolreport.InstanceMsg") - proto.RegisterType((*Type)(nil), "servicecontrolreport.Type") - proto.RegisterType((*InstanceParam)(nil), "servicecontrolreport.InstanceParam") -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// Client API for HandleServicecontrolReportService service - -type HandleServicecontrolReportServiceClient interface { - // HandleServicecontrolReport is called by Mixer at request-time to deliver 'servicecontrolreport' instances to the backend. - HandleServicecontrolReport(ctx context.Context, in *HandleServicecontrolReportRequest, opts ...grpc.CallOption) (*istio_mixer_adapter_model_v1beta11.ReportResult, error) -} - -type handleServicecontrolReportServiceClient struct { - cc *grpc.ClientConn -} - -func NewHandleServicecontrolReportServiceClient(cc *grpc.ClientConn) HandleServicecontrolReportServiceClient { - return &handleServicecontrolReportServiceClient{cc} -} - -func (c *handleServicecontrolReportServiceClient) HandleServicecontrolReport(ctx context.Context, in *HandleServicecontrolReportRequest, opts ...grpc.CallOption) (*istio_mixer_adapter_model_v1beta11.ReportResult, error) { - out := new(istio_mixer_adapter_model_v1beta11.ReportResult) - err := grpc.Invoke(ctx, "/servicecontrolreport.HandleServicecontrolReportService/HandleServicecontrolReport", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for HandleServicecontrolReportService service - -type HandleServicecontrolReportServiceServer interface { - // HandleServicecontrolReport is called by Mixer at request-time to deliver 'servicecontrolreport' instances to the backend. - HandleServicecontrolReport(context.Context, *HandleServicecontrolReportRequest) (*istio_mixer_adapter_model_v1beta11.ReportResult, error) -} - -func RegisterHandleServicecontrolReportServiceServer(s *grpc.Server, srv HandleServicecontrolReportServiceServer) { - s.RegisterService(&_HandleServicecontrolReportService_serviceDesc, srv) -} - -func _HandleServicecontrolReportService_HandleServicecontrolReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(HandleServicecontrolReportRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(HandleServicecontrolReportServiceServer).HandleServicecontrolReport(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/servicecontrolreport.HandleServicecontrolReportService/HandleServicecontrolReport", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(HandleServicecontrolReportServiceServer).HandleServicecontrolReport(ctx, req.(*HandleServicecontrolReportRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _HandleServicecontrolReportService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "servicecontrolreport.HandleServicecontrolReportService", - HandlerType: (*HandleServicecontrolReportServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "HandleServicecontrolReport", - Handler: _HandleServicecontrolReportService_HandleServicecontrolReport_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.proto", -} - -func (m *HandleServicecontrolReportRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HandleServicecontrolReportRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Instances) > 0 { - for _, msg := range m.Instances { - dAtA[i] = 0xa - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.AdapterConfig != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(m.AdapterConfig.Size())) - n1, err := m.AdapterConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if len(m.DedupId) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.DedupId))) - i += copy(dAtA[i:], m.DedupId) - } - return i, nil -} - -func (m *InstanceMsg) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *InstanceMsg) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.ApiVersion) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ApiVersion))) - i += copy(dAtA[i:], m.ApiVersion) - } - if len(m.ApiOperation) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ApiOperation))) - i += copy(dAtA[i:], m.ApiOperation) - } - if len(m.ApiProtocol) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ApiProtocol))) - i += copy(dAtA[i:], m.ApiProtocol) - } - if len(m.ApiService) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ApiService))) - i += copy(dAtA[i:], m.ApiService) - } - if len(m.ApiKey) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ApiKey))) - i += copy(dAtA[i:], m.ApiKey) - } - if m.RequestTime != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(m.RequestTime.Size())) - n2, err := m.RequestTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if len(m.RequestMethod) > 0 { - dAtA[i] = 0x3a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.RequestMethod))) - i += copy(dAtA[i:], m.RequestMethod) - } - if len(m.RequestPath) > 0 { - dAtA[i] = 0x42 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.RequestPath))) - i += copy(dAtA[i:], m.RequestPath) - } - if m.RequestBytes != 0 { - dAtA[i] = 0x48 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(m.RequestBytes)) - } - if m.ResponseTime != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(m.ResponseTime.Size())) - n3, err := m.ResponseTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.ResponseCode != 0 { - dAtA[i] = 0x58 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(m.ResponseCode)) - } - if m.ResponseBytes != 0 { - dAtA[i] = 0x60 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(m.ResponseBytes)) - } - if m.ResponseLatency != nil { - dAtA[i] = 0x6a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(m.ResponseLatency.Size())) - n4, err := m.ResponseLatency.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if len(m.Name) > 0 { - dAtA[i] = 0xfa - i++ - dAtA[i] = 0xd2 - i++ - dAtA[i] = 0xe4 - i++ - dAtA[i] = 0x93 - i++ - dAtA[i] = 0x2 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - return i, nil -} - -func (m *Type) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Type) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *InstanceParam) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *InstanceParam) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.ApiVersion) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ApiVersion))) - i += copy(dAtA[i:], m.ApiVersion) - } - if len(m.ApiOperation) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ApiOperation))) - i += copy(dAtA[i:], m.ApiOperation) - } - if len(m.ApiProtocol) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ApiProtocol))) - i += copy(dAtA[i:], m.ApiProtocol) - } - if len(m.ApiService) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ApiService))) - i += copy(dAtA[i:], m.ApiService) - } - if len(m.ApiKey) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ApiKey))) - i += copy(dAtA[i:], m.ApiKey) - } - if len(m.RequestTime) > 0 { - dAtA[i] = 0x32 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.RequestTime))) - i += copy(dAtA[i:], m.RequestTime) - } - if len(m.RequestMethod) > 0 { - dAtA[i] = 0x3a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.RequestMethod))) - i += copy(dAtA[i:], m.RequestMethod) - } - if len(m.RequestPath) > 0 { - dAtA[i] = 0x42 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.RequestPath))) - i += copy(dAtA[i:], m.RequestPath) - } - if len(m.RequestBytes) > 0 { - dAtA[i] = 0x4a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.RequestBytes))) - i += copy(dAtA[i:], m.RequestBytes) - } - if len(m.ResponseTime) > 0 { - dAtA[i] = 0x52 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ResponseTime))) - i += copy(dAtA[i:], m.ResponseTime) - } - if len(m.ResponseCode) > 0 { - dAtA[i] = 0x5a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ResponseCode))) - i += copy(dAtA[i:], m.ResponseCode) - } - if len(m.ResponseBytes) > 0 { - dAtA[i] = 0x62 - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ResponseBytes))) - i += copy(dAtA[i:], m.ResponseBytes) - } - if len(m.ResponseLatency) > 0 { - dAtA[i] = 0x6a - i++ - i = encodeVarintTemplateHandlerService(dAtA, i, uint64(len(m.ResponseLatency))) - i += copy(dAtA[i:], m.ResponseLatency) - } - return i, nil -} - -func encodeVarintTemplateHandlerService(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *HandleServicecontrolReportRequest) Size() (n int) { - var l int - _ = l - if len(m.Instances) > 0 { - for _, e := range m.Instances { - l = e.Size() - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - } - if m.AdapterConfig != nil { - l = m.AdapterConfig.Size() - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.DedupId) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - return n -} - -func (m *InstanceMsg) Size() (n int) { - var l int - _ = l - l = len(m.ApiVersion) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ApiOperation) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ApiProtocol) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ApiService) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ApiKey) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - if m.RequestTime != nil { - l = m.RequestTime.Size() - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.RequestMethod) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.RequestPath) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - if m.RequestBytes != 0 { - n += 1 + sovTemplateHandlerService(uint64(m.RequestBytes)) - } - if m.ResponseTime != nil { - l = m.ResponseTime.Size() - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - if m.ResponseCode != 0 { - n += 1 + sovTemplateHandlerService(uint64(m.ResponseCode)) - } - if m.ResponseBytes != 0 { - n += 1 + sovTemplateHandlerService(uint64(m.ResponseBytes)) - } - if m.ResponseLatency != nil { - l = m.ResponseLatency.Size() - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.Name) - if l > 0 { - n += 5 + l + sovTemplateHandlerService(uint64(l)) - } - return n -} - -func (m *Type) Size() (n int) { - var l int - _ = l - return n -} - -func (m *InstanceParam) Size() (n int) { - var l int - _ = l - l = len(m.ApiVersion) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ApiOperation) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ApiProtocol) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ApiService) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ApiKey) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.RequestTime) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.RequestMethod) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.RequestPath) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.RequestBytes) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ResponseTime) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ResponseCode) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ResponseBytes) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - l = len(m.ResponseLatency) - if l > 0 { - n += 1 + l + sovTemplateHandlerService(uint64(l)) - } - return n -} - -func sovTemplateHandlerService(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozTemplateHandlerService(x uint64) (n int) { - return sovTemplateHandlerService(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *HandleServicecontrolReportRequest) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&HandleServicecontrolReportRequest{`, - `Instances:` + strings.Replace(fmt.Sprintf("%v", this.Instances), "InstanceMsg", "InstanceMsg", 1) + `,`, - `AdapterConfig:` + strings.Replace(fmt.Sprintf("%v", this.AdapterConfig), "Any", "google_protobuf1.Any", 1) + `,`, - `DedupId:` + fmt.Sprintf("%v", this.DedupId) + `,`, - `}`, - }, "") - return s -} -func (this *InstanceMsg) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&InstanceMsg{`, - `ApiVersion:` + fmt.Sprintf("%v", this.ApiVersion) + `,`, - `ApiOperation:` + fmt.Sprintf("%v", this.ApiOperation) + `,`, - `ApiProtocol:` + fmt.Sprintf("%v", this.ApiProtocol) + `,`, - `ApiService:` + fmt.Sprintf("%v", this.ApiService) + `,`, - `ApiKey:` + fmt.Sprintf("%v", this.ApiKey) + `,`, - `RequestTime:` + strings.Replace(fmt.Sprintf("%v", this.RequestTime), "TimeStamp", "istio_policy_v1beta1.TimeStamp", 1) + `,`, - `RequestMethod:` + fmt.Sprintf("%v", this.RequestMethod) + `,`, - `RequestPath:` + fmt.Sprintf("%v", this.RequestPath) + `,`, - `RequestBytes:` + fmt.Sprintf("%v", this.RequestBytes) + `,`, - `ResponseTime:` + strings.Replace(fmt.Sprintf("%v", this.ResponseTime), "TimeStamp", "istio_policy_v1beta1.TimeStamp", 1) + `,`, - `ResponseCode:` + fmt.Sprintf("%v", this.ResponseCode) + `,`, - `ResponseBytes:` + fmt.Sprintf("%v", this.ResponseBytes) + `,`, - `ResponseLatency:` + strings.Replace(fmt.Sprintf("%v", this.ResponseLatency), "Duration", "istio_policy_v1beta1.Duration", 1) + `,`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `}`, - }, "") - return s -} -func (this *Type) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Type{`, - `}`, - }, "") - return s -} -func (this *InstanceParam) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&InstanceParam{`, - `ApiVersion:` + fmt.Sprintf("%v", this.ApiVersion) + `,`, - `ApiOperation:` + fmt.Sprintf("%v", this.ApiOperation) + `,`, - `ApiProtocol:` + fmt.Sprintf("%v", this.ApiProtocol) + `,`, - `ApiService:` + fmt.Sprintf("%v", this.ApiService) + `,`, - `ApiKey:` + fmt.Sprintf("%v", this.ApiKey) + `,`, - `RequestTime:` + fmt.Sprintf("%v", this.RequestTime) + `,`, - `RequestMethod:` + fmt.Sprintf("%v", this.RequestMethod) + `,`, - `RequestPath:` + fmt.Sprintf("%v", this.RequestPath) + `,`, - `RequestBytes:` + fmt.Sprintf("%v", this.RequestBytes) + `,`, - `ResponseTime:` + fmt.Sprintf("%v", this.ResponseTime) + `,`, - `ResponseCode:` + fmt.Sprintf("%v", this.ResponseCode) + `,`, - `ResponseBytes:` + fmt.Sprintf("%v", this.ResponseBytes) + `,`, - `ResponseLatency:` + fmt.Sprintf("%v", this.ResponseLatency) + `,`, - `}`, - }, "") - return s -} -func valueToStringTemplateHandlerService(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *HandleServicecontrolReportRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HandleServicecontrolReportRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HandleServicecontrolReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Instances", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Instances = append(m.Instances, &InstanceMsg{}) - if err := m.Instances[len(m.Instances)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AdapterConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AdapterConfig == nil { - m.AdapterConfig = &google_protobuf1.Any{} - } - if err := m.AdapterConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DedupId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DedupId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTemplateHandlerService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTemplateHandlerService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *InstanceMsg) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: InstanceMsg: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: InstanceMsg: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiVersion", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApiVersion = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiOperation", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApiOperation = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiProtocol", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApiProtocol = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiService", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApiService = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiKey", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApiKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequestTime == nil { - m.RequestTime = &istio_policy_v1beta1.TimeStamp{} - } - if err := m.RequestTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestMethod", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestMethod = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestBytes", wireType) - } - m.RequestBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RequestBytes |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ResponseTime == nil { - m.ResponseTime = &istio_policy_v1beta1.TimeStamp{} - } - if err := m.ResponseTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseCode", wireType) - } - m.ResponseCode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ResponseCode |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 12: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseBytes", wireType) - } - m.ResponseBytes = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ResponseBytes |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseLatency", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ResponseLatency == nil { - m.ResponseLatency = &istio_policy_v1beta1.Duration{} - } - if err := m.ResponseLatency.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 72295727: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTemplateHandlerService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTemplateHandlerService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Type) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Type: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Type: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipTemplateHandlerService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTemplateHandlerService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *InstanceParam) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: InstanceParam: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: InstanceParam: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiVersion", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApiVersion = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiOperation", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApiOperation = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiProtocol", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApiProtocol = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiService", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApiService = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiKey", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApiKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestTime", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestTime = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestMethod", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestMethod = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestBytes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestBytes = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseTime", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseTime = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseCode", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseCode = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseBytes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseBytes = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseLatency", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTemplateHandlerService - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseLatency = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTemplateHandlerService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTemplateHandlerService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipTemplateHandlerService(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthTemplateHandlerService - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTemplateHandlerService - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipTemplateHandlerService(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthTemplateHandlerService = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowTemplateHandlerService = fmt.Errorf("proto: integer overflow") -) - -func init() { - proto.RegisterFile("mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.proto", fileDescriptorTemplateHandlerService) -} - -var fileDescriptorTemplateHandlerService = []byte{ - // 734 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x55, 0xb1, 0x6f, 0xd3, 0x4c, - 0x14, 0x8f, 0x93, 0x7c, 0x69, 0x7d, 0x49, 0xfa, 0x7d, 0xb2, 0xfa, 0x09, 0x37, 0x83, 0x9b, 0xa4, - 0x42, 0x0a, 0x12, 0xb2, 0xd5, 0x32, 0x30, 0x30, 0x20, 0xda, 0x0e, 0x54, 0x50, 0x11, 0xb9, 0x15, - 0x12, 0x53, 0x74, 0xb1, 0x5f, 0x93, 0x13, 0xb6, 0xef, 0xb0, 0x2f, 0x55, 0xbd, 0x21, 0x06, 0x66, - 0xa4, 0xfe, 0x13, 0x0c, 0x48, 0xfc, 0x03, 0xfd, 0x03, 0x2a, 0xa6, 0x8a, 0x05, 0x16, 0xa4, 0x26, - 0x74, 0x60, 0xec, 0xc8, 0x88, 0x7c, 0x3e, 0x87, 0xb6, 0xb8, 0xa5, 0x13, 0x12, 0x5b, 0xee, 0xdd, - 0xef, 0xf7, 0xde, 0xef, 0xbd, 0xfb, 0xe5, 0x19, 0x3d, 0xf3, 0xc9, 0x1e, 0x84, 0x16, 0x76, 0x31, - 0xe3, 0x10, 0x5a, 0x11, 0x84, 0xbb, 0xc4, 0x01, 0x87, 0x06, 0x3c, 0xa4, 0x9e, 0xc5, 0xc1, 0x67, - 0x1e, 0xe6, 0x70, 0x21, 0x1e, 0x02, 0xa3, 0x21, 0x9f, 0xde, 0xf6, 0x86, 0x38, 0x70, 0x3d, 0x08, - 0x7b, 0x12, 0x65, 0xb2, 0x90, 0x72, 0xaa, 0xcd, 0xe7, 0x91, 0x1a, 0xf3, 0x03, 0x3a, 0xa0, 0x02, - 0x60, 0x25, 0xbf, 0x52, 0x6c, 0xe3, 0xf6, 0x79, 0x19, 0x3e, 0x75, 0xc1, 0xb3, 0x76, 0x97, 0xfb, - 0xc0, 0xf1, 0xb2, 0x05, 0x7b, 0x1c, 0x82, 0x88, 0xd0, 0x20, 0x92, 0xe8, 0x85, 0x01, 0xa5, 0x03, - 0x0f, 0x2c, 0x71, 0xea, 0x8f, 0x76, 0x2c, 0x1c, 0xc4, 0xf2, 0xaa, 0x73, 0x55, 0xa2, 0x54, 0x42, - 0x96, 0x84, 0x51, 0x8f, 0x38, 0xf1, 0xf4, 0x92, 0xc7, 0x4c, 0x2a, 0x6f, 0x1f, 0x28, 0xa8, 0xf5, - 0x50, 0xf4, 0xb4, 0x75, 0xae, 0x05, 0x5b, 0xf0, 0x6d, 0x78, 0x31, 0x82, 0x88, 0x6b, 0xf7, 0x91, - 0x4a, 0x82, 0x88, 0xe3, 0xc0, 0x81, 0x48, 0x57, 0x9a, 0xa5, 0x4e, 0x75, 0xa5, 0x65, 0xe6, 0xf5, - 0x6c, 0x6e, 0x48, 0xd8, 0x66, 0x34, 0xb0, 0x7f, 0x72, 0xb4, 0x7b, 0x68, 0x4e, 0xea, 0xec, 0x39, - 0x34, 0xd8, 0x21, 0x03, 0xbd, 0xd8, 0x54, 0x3a, 0xd5, 0x95, 0x79, 0x33, 0xed, 0xcf, 0xcc, 0xfa, - 0x33, 0x1f, 0x04, 0xb1, 0x5d, 0x97, 0xd8, 0x35, 0x01, 0xd5, 0x16, 0xd0, 0xac, 0x0b, 0xee, 0x88, - 0xf5, 0x88, 0xab, 0x97, 0x9a, 0x4a, 0x47, 0xb5, 0x67, 0xc4, 0x79, 0xc3, 0x6d, 0x7f, 0x2a, 0xa3, - 0xea, 0x99, 0x92, 0xda, 0x22, 0xaa, 0x62, 0x46, 0x7a, 0xbb, 0x10, 0x26, 0x43, 0xd4, 0x15, 0x81, - 0x46, 0x98, 0x91, 0xa7, 0x69, 0x44, 0x5b, 0x42, 0xf5, 0x04, 0x40, 0x19, 0x84, 0x98, 0x27, 0x90, - 0xa2, 0x80, 0xd4, 0x30, 0x23, 0x4f, 0xb2, 0x98, 0xd6, 0x42, 0xc9, 0xb9, 0x27, 0x34, 0x39, 0xd4, - 0x93, 0x45, 0x93, 0xcc, 0x5d, 0x19, 0xca, 0x0a, 0xc9, 0x19, 0xe8, 0xe5, 0x69, 0x21, 0x39, 0x46, - 0xed, 0x06, 0x9a, 0x49, 0x00, 0xcf, 0x21, 0xd6, 0xff, 0x11, 0x97, 0x15, 0xcc, 0xc8, 0x23, 0x88, - 0xb5, 0x55, 0x54, 0x0b, 0xd3, 0xb1, 0xf6, 0x38, 0xf1, 0x41, 0xaf, 0x88, 0x41, 0x2c, 0x9a, 0x24, - 0xe2, 0x84, 0x9a, 0xe9, 0x4b, 0x99, 0xf2, 0xa5, 0xcc, 0x6d, 0xe2, 0xc3, 0x16, 0xc7, 0x3e, 0xb3, - 0xab, 0x92, 0x94, 0x44, 0xb4, 0x9b, 0x68, 0x2e, 0xcb, 0xe1, 0x03, 0x1f, 0x52, 0x57, 0x9f, 0x11, - 0x35, 0xea, 0x32, 0xba, 0x29, 0x82, 0x49, 0x1f, 0x19, 0x8c, 0x61, 0x3e, 0xd4, 0x67, 0xd3, 0x3e, - 0x64, 0xac, 0x8b, 0xf9, 0x30, 0x99, 0x47, 0x06, 0xe9, 0xc7, 0x1c, 0x22, 0x5d, 0x6d, 0x2a, 0x9d, - 0x92, 0x9d, 0xf1, 0x56, 0x93, 0x98, 0xb6, 0x9e, 0x80, 0x22, 0x46, 0x83, 0x08, 0x52, 0xcd, 0xe8, - 0x7a, 0x9a, 0x6b, 0x19, 0x4b, 0x88, 0x5e, 0x3a, 0x93, 0xc5, 0xa1, 0x2e, 0xe8, 0xd5, 0xac, 0x54, - 0x1a, 0x5c, 0xa3, 0xae, 0xec, 0x4c, 0x82, 0x52, 0x41, 0x35, 0x81, 0x9a, 0x52, 0x53, 0x45, 0x1b, - 0xe8, 0xbf, 0x29, 0x2c, 0xf9, 0x5f, 0x06, 0x4e, 0xac, 0xd7, 0x85, 0x28, 0x23, 0x5f, 0xd4, 0xfa, - 0x28, 0x7d, 0x5b, 0xfb, 0xdf, 0x8c, 0xf7, 0x38, 0xa5, 0x69, 0xff, 0xa3, 0x72, 0x80, 0x7d, 0xd0, - 0xdf, 0x7f, 0x38, 0x68, 0x8b, 0xf9, 0x88, 0x63, 0xbb, 0x82, 0xca, 0xdb, 0x31, 0x83, 0xf6, 0x71, - 0x09, 0xd5, 0x33, 0x87, 0x75, 0x71, 0x88, 0xfd, 0xbf, 0xc1, 0x63, 0xad, 0x1c, 0x8f, 0xa9, 0x7f, - 0xd4, 0x42, 0xea, 0x05, 0x0b, 0x2d, 0xe5, 0x59, 0x48, 0xbd, 0x8e, 0x43, 0xd4, 0x6b, 0x39, 0x44, - 0xbd, 0xe8, 0x90, 0x5b, 0x97, 0x38, 0x44, 0xfd, 0xc5, 0x01, 0x2b, 0xef, 0xae, 0xdc, 0x81, 0xd9, - 0xb0, 0x5f, 0x2b, 0xa8, 0x71, 0x39, 0x4a, 0xbb, 0x9b, 0xbf, 0x0f, 0x7f, 0xbb, 0x5b, 0x1b, 0x96, - 0x34, 0xac, 0xd8, 0xe6, 0xa6, 0xdc, 0x7c, 0xa6, 0xd8, 0xe6, 0x53, 0xf7, 0x66, 0x8c, 0x68, 0xe4, - 0xf1, 0xd5, 0xee, 0xe1, 0xd8, 0x28, 0x1c, 0x8d, 0x8d, 0xc2, 0xe7, 0xb1, 0x51, 0x38, 0x1d, 0x1b, - 0x85, 0x97, 0x13, 0x43, 0x79, 0x3b, 0x31, 0x0a, 0x87, 0x13, 0x43, 0x39, 0x9a, 0x18, 0xca, 0xf1, - 0xc4, 0x50, 0xbe, 0x4d, 0x8c, 0xc2, 0xe9, 0xc4, 0x50, 0xde, 0x7c, 0x35, 0x0a, 0xdf, 0x3f, 0x9e, - 0xec, 0x17, 0x95, 0x57, 0x5f, 0x4e, 0xf6, 0x8b, 0xb9, 0x1f, 0xaa, 0x7e, 0x45, 0xb8, 0xf0, 0xce, - 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x51, 0x8c, 0x78, 0xbe, 0x22, 0x07, 0x00, 0x00, -} diff --git a/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.proto b/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.proto deleted file mode 100644 index 554685dedf5f..000000000000 --- a/mixer/adapter/servicecontrol/template/servicecontrolreport/template_handler_service.proto +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// THIS FILE IS AUTOMATICALLY GENERATED BY MIXGEN. - -syntax = "proto3"; - - -// The `servicecontrolreport` template is used by the [Google Service Control](https://istio.io/docs/reference/config/policy-and-telemetry/adapters/servicecontrol/) -// adapter. -// -// Example config: -// -// ```yaml -// apiVersion: "config.istio.io/v1alpha2" -// kind: servicecontrolreport -// metadata: -// name: report -// namespace: istio-system -// spec: -// api_version : api.version | "" -// api_operation : api.operation | "" -// api_protocol : api.protocol | "" -// api_service : api.service | "" -// api_key : api.key | "" -// request_time : request.time -// request_method : request.method -// request_path : request.path -// request_bytes: request.size -// response_time : response.time -// response_code : response.code | 520 -// response_bytes : response.size | 0 -// response_latency : response.duration | "0ms" -// ``` -// -// A template used by Google Service Control (servicecontrol) adapter. The adapter -// generates metrics and logentry for each request based on the data point -// defined by this template. -package servicecontrolreport; - - -import "gogoproto/gogo.proto"; -import "mixer/adapter/model/v1beta1/extensions.proto"; -import "google/protobuf/any.proto"; -import "mixer/adapter/model/v1beta1/report.proto"; -import "policy/v1beta1/type.proto"; - -option (istio.mixer.adapter.model.v1beta1.template_variety) = TEMPLATE_VARIETY_REPORT; -option (istio.mixer.adapter.model.v1beta1.template_name) = "servicecontrolreport"; - -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.equal_all) = false; -option (gogoproto.gostring_all) = false; - -// HandleServicecontrolReportService is implemented by backends that wants to handle request-time 'servicecontrolreport' instances. -service HandleServicecontrolReportService { - // HandleServicecontrolReport is called by Mixer at request-time to deliver 'servicecontrolreport' instances to the backend. - rpc HandleServicecontrolReport(HandleServicecontrolReportRequest) returns (istio.mixer.adapter.model.v1beta1.ReportResult); - -} - -// Request message for HandleServicecontrolReport method. -message HandleServicecontrolReportRequest { - - // 'servicecontrolreport' instances. - repeated InstanceMsg instances = 1; - - // Adapter specific handler configuration. - // - // Note: Backends can also implement [InfrastructureBackend][https://istio.io/docs/reference/config/mixer/istio.mixer.adapter.model.v1beta1.html#InfrastructureBackend] - // service and therefore opt to receive handler configuration during session creation through [InfrastructureBackend.CreateSession][TODO: Link to this fragment] - // call. In that case, adapter_config will have type_url as 'google.protobuf.Any.type_url' and would contain string - // value of session_id (returned from InfrastructureBackend.CreateSession). - google.protobuf.Any adapter_config = 2; - - // Id to dedupe identical requests from Mixer. - string dedup_id = 3; -} - - - - - -// Contains instance payload for 'servicecontrolreport' template. This is passed to infrastructure backends during request-time -// through HandleServicecontrolReportService.HandleServicecontrolReport. -message InstanceMsg { - - // Name of the instance as specified in configuration. - string name = 72295727; - - - string api_version = 1; - - - string api_operation = 2; - - - string api_protocol = 3; - - - string api_service = 4; - - - string api_key = 5; - - - istio.policy.v1beta1.TimeStamp request_time = 6; - - - string request_method = 7; - - - string request_path = 8; - - - int64 request_bytes = 9; - - - istio.policy.v1beta1.TimeStamp response_time = 10; - - - int64 response_code = 11; - - - int64 response_bytes = 12; - - - istio.policy.v1beta1.Duration response_latency = 13; - -} - -// Contains inferred type information about specific instance of 'servicecontrolreport' template. This is passed to -// infrastructure backends during configuration-time through [InfrastructureBackend.CreateSession][TODO: Link to this fragment]. -message Type { - -} - - -// Represents instance configuration schema for 'servicecontrolreport' template. -message InstanceParam { - - - string api_version = 1; - - - string api_operation = 2; - - - string api_protocol = 3; - - - string api_service = 4; - - - string api_key = 5; - - - string request_time = 6; - - - string request_method = 7; - - - string request_path = 8; - - - string request_bytes = 9; - - - string response_time = 10; - - - string response_code = 11; - - - string response_bytes = 12; - - - string response_latency = 13; - -} - diff --git a/mixer/adapter/servicecontrol/template/servicecontrolreport/template_proto.descriptor_set b/mixer/adapter/servicecontrol/template/servicecontrolreport/template_proto.descriptor_set deleted file mode 100644 index bdde7547599c..000000000000 Binary files a/mixer/adapter/servicecontrol/template/servicecontrolreport/template_proto.descriptor_set and /dev/null differ diff --git a/mixer/adapter/servicecontrol/testhelper.go b/mixer/adapter/servicecontrol/testhelper.go deleted file mode 100644 index eaccdbb7f6a1..000000000000 --- a/mixer/adapter/servicecontrol/testhelper.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "encoding/json" - "errors" - "reflect" - - sc "google.golang.org/api/servicecontrol/v1" -) - -type mockSvcctrlClient struct { - serviceName string - checkRequest *sc.CheckRequest - checkResponse *sc.CheckResponse - reportRequest *sc.ReportRequest - reportResponse *sc.ReportResponse - allocateQuotaRequest *sc.AllocateQuotaRequest - allocateQuotaResponse *sc.AllocateQuotaResponse -} - -func (c *mockSvcctrlClient) Check(serviceName string, request *sc.CheckRequest) (*sc.CheckResponse, error) { - c.serviceName = serviceName - c.checkRequest = request - if c.checkResponse != nil { - return c.checkResponse, nil - } - return nil, errors.New("injected error") -} - -func (c *mockSvcctrlClient) Report(serviceName string, request *sc.ReportRequest) (*sc.ReportResponse, error) { - c.serviceName = serviceName - c.reportRequest = request - if c.reportResponse != nil { - return c.reportResponse, nil - } - return nil, errors.New("injected error") -} - -func (c *mockSvcctrlClient) AllocateQuota(serviceName string, - request *sc.AllocateQuotaRequest) (*sc.AllocateQuotaResponse, error) { - c.serviceName = serviceName - c.allocateQuotaRequest = request - if c.allocateQuotaResponse != nil { - return c.allocateQuotaResponse, nil - } - return nil, errors.New("injected error") -} - -func (c *mockSvcctrlClient) setCheckResponse(response *sc.CheckResponse) { - c.checkResponse = response -} - -func (c *mockSvcctrlClient) setReportResponse(response *sc.ReportResponse) { - c.reportResponse = response -} - -func (c *mockSvcctrlClient) setQuotaAllocateRespone(response *sc.AllocateQuotaResponse) { - c.allocateQuotaResponse = response -} - -func (c *mockSvcctrlClient) reset() { - *c = mockSvcctrlClient{} -} - -// Work around linter bug with test code -// nolint: deadcode -type mockConsumerProjectIDResolver struct { - consumerProjectID string -} - -func (r *mockConsumerProjectIDResolver) ResolveConsumerProjectID( - rawAPIKey, OpName string) (string, error) { - if r.consumerProjectID == "" { - return "", errors.New("injected error") - } - return r.consumerProjectID, nil -} - -// Work around linter bug with test code -// nolint: deadcode -func compareJSON(s1, s2 string) bool { - var o1 interface{} - var o2 interface{} - - if err := json.Unmarshal([]byte(s1), &o1); err != nil { - return false - } - if err := json.Unmarshal([]byte(s2), &o2); err != nil { - return false - } - - return reflect.DeepEqual(o1, o2) -} diff --git a/mixer/adapter/servicecontrol/utils.go b/mixer/adapter/servicecontrol/utils.go deleted file mode 100644 index b4ec18e501c8..000000000000 --- a/mixer/adapter/servicecontrol/utils.go +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "bytes" - "encoding/json" - "fmt" - "time" - - rpc "github.com/gogo/googleapis/google/rpc" - pbtypes "github.com/gogo/protobuf/types" -) - -const ( - apiKeyPrefix = "api_key:" -) - -func toRPCCode(responseCode int) rpc.Code { - switch responseCode { - case 200: - return rpc.OK - case 401: - return rpc.UNAUTHENTICATED - case 400: - return rpc.INVALID_ARGUMENT - case 403: - return rpc.PERMISSION_DENIED - case 404: - return rpc.NOT_FOUND - case 409: - return rpc.ALREADY_EXISTS - case 429: - return rpc.RESOURCE_EXHAUSTED - case 499: - return rpc.CANCELLED - case 500: - return rpc.INTERNAL - case 501: - return rpc.UNIMPLEMENTED - case 503: - return rpc.UNAVAILABLE - case 504: - return rpc.DEADLINE_EXCEEDED - default: - if responseCode >= 200 && responseCode <= 300 { - return rpc.OK - } - if responseCode >= 400 && responseCode <= 500 { - return rpc.FAILED_PRECONDITION - } - } - return rpc.UNKNOWN -} - -func serviceControlErrorToRPCCode(errorCode string) rpc.Code { - switch errorCode { - case "NOT_FOUND": - return rpc.NOT_FOUND - case "PERMISSION_DENIED", - "SECURITY_POLICY_VIOLATED": - return rpc.PERMISSION_DENIED - case "RESOURCE_EXHAUSTED", - "BUDGET_EXCEEDED", - "LOAD_SHEDDING", - "ABUSER_DETECTED": - return rpc.RESOURCE_EXHAUSTED - case "SERVICE_NOT_ACTIVATED", - "VISIBILITY_DENIED", - "BILLING_DISABLED", - "PROJECT_DELETED", - "PROJECT_INVALID", - "IP_ADDRESS_BLOCKED", - "REFERER_BLOCKED", - "CLIENT_APP_BLOCKED", - "API_TARGET_BLOCKED", - "LOAS_PROJECT_DISABLED", - "SERVICE_STATUS_UNAVAILABLE", - "BILLING_STATUS_UNAVAILABLE", - "QUOTA_CHECK_UNAVAILABLE", - "LOAS_PROJECT_LOOKUP_UNAVAILABLE", - "CLOUD_RESOURCE_MANAGER_BACKEND_UNAVAILABLE", - "SECURITY_POLICY_BACKEND_UNAVAILABLE": - return rpc.UNAVAILABLE - case "API_KEY_INVALID", - "API_KEY_EXPIRED", - "API_KEY_NOT_FOUND", - "SPATULA_HEADER_INVALID": - return rpc.INVALID_ARGUMENT - } - return rpc.UNKNOWN -} - -// Resolve interface{} to a string value. Return "", false if value isn't a string -func resolveToString(value interface{}) (string, bool) { - if value == nil { - return "", false - } - result, ok := value.(string) - return result, ok -} - -func toDuration(durationProto *pbtypes.Duration) time.Duration { - duration, err := pbtypes.DurationFromProto(durationProto) - if err != nil { - panic(fmt.Sprintf("invalid Duration proto: %v", err)) - } - return duration -} - -func getInt64Address(i int64) *int64 { - addr := new(int64) - *addr = i - return addr -} - -func generateConsumerIDFromAPIKey(apiKey string) string { - return apiKeyPrefix + apiKey -} - -func dimensionToString(dimensions map[string]interface{}, key string) (string, bool) { - if value, ok := resolveToString(dimensions[key]); ok { - return value, true - } - return "", false -} - -func toFormattedJSON(marshaller json.Marshaler) (string, error) { - value, err := marshaller.MarshalJSON() - if err != nil { - return "", err - } - - var out bytes.Buffer - err = json.Indent(&out, value, "", " ") - if err != nil { - return "", err - } - return out.String(), err -} diff --git a/mixer/adapter/servicecontrol/utils_test.go b/mixer/adapter/servicecontrol/utils_test.go deleted file mode 100644 index dfae2299b9f7..000000000000 --- a/mixer/adapter/servicecontrol/utils_test.go +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright 2017 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package servicecontrol - -import ( - "encoding/json" - "testing" - "time" - - rpc "github.com/gogo/googleapis/google/rpc" - pbtypes "github.com/gogo/protobuf/types" - sc "google.golang.org/api/servicecontrol/v1" -) - -type testMarshaller struct{} - -func (t *testMarshaller) MarshalJSON() ([]byte, error) { - data := struct { - Field string `json:"F"` - }{ - Field: "a", - } - return json.Marshal(data) -} - -func TestToRpcCode(t *testing.T) { - httpRPCCodeMap := map[int]rpc.Code{ - 200: rpc.OK, - 400: rpc.INVALID_ARGUMENT, - 401: rpc.UNAUTHENTICATED, - 403: rpc.PERMISSION_DENIED, - 404: rpc.NOT_FOUND, - 409: rpc.ALREADY_EXISTS, - 499: rpc.CANCELLED, - 500: rpc.INTERNAL, - 501: rpc.UNIMPLEMENTED, - 503: rpc.UNAVAILABLE, - 504: rpc.DEADLINE_EXCEEDED, - 300: rpc.OK, - 410: rpc.FAILED_PRECONDITION, - 900: rpc.UNKNOWN, - } - for httpCode, rpcCode := range httpRPCCodeMap { - if toRPCCode(httpCode) != rpcCode { - t.Errorf(`toRPCCode(%d) != %v`, httpCode, rpcCode) - } - } -} - -func TestCheckErrorToRpcCode(t *testing.T) { - checkErrorRPCCodeMap := map[rpc.Code][]string{ - rpc.NOT_FOUND: {"NOT_FOUND"}, - rpc.PERMISSION_DENIED: {"PERMISSION_DENIED", "SECURITY_POLICY_VIOLATED"}, - rpc.RESOURCE_EXHAUSTED: { - "RESOURCE_EXHAUSTED", - "BUDGET_EXCEEDED", - "LOAD_SHEDDING", - "ABUSER_DETECTED", - }, - rpc.UNAVAILABLE: { - "SERVICE_NOT_ACTIVATED", - "VISIBILITY_DENIED", - "BILLING_DISABLED", - "PROJECT_DELETED", - "PROJECT_INVALID", - "IP_ADDRESS_BLOCKED", - "REFERER_BLOCKED", - "CLIENT_APP_BLOCKED", - "API_TARGET_BLOCKED", - "LOAS_PROJECT_DISABLED", - "SERVICE_STATUS_UNAVAILABLE", - "BILLING_STATUS_UNAVAILABLE", - "QUOTA_CHECK_UNAVAILABLE", - "LOAS_PROJECT_LOOKUP_UNAVAILABLE", - "CLOUD_RESOURCE_MANAGER_BACKEND_UNAVAILABLE", - "SECURITY_POLICY_BACKEND_UNAVAILABLE", - }, - rpc.INVALID_ARGUMENT: { - "API_KEY_INVALID", - "API_KEY_EXPIRED", - "API_KEY_NOT_FOUND", - "SPATULA_HEADER_INVALID", - }, - rpc.UNKNOWN: {"UNKNOWN"}, - } - - for rpcCode, checkErrs := range checkErrorRPCCodeMap { - for _, err := range checkErrs { - checkError := &sc.CheckError{ - Code: err, - } - if serviceControlErrorToRPCCode(checkError.Code) != rpcCode { - t.Errorf(`serviceControlErrorToRPCCode(%v) != %v`, checkError, rpcCode) - } - } - } -} - -func TestToDuration(t *testing.T) { - expected := time.Second + time.Nanosecond - protoDuraiton := pbtypes.DurationProto(expected) - convertedDuration := toDuration(protoDuraiton) - - if convertedDuration != expected { - t.Errorf(`expected time.Duration %v, but get %v`, expected, convertedDuration) - } -} - -func TestResolveToString(t *testing.T) { - if _, ok := resolveToString(nil); ok { - t.Errorf(`resolveToString(nil) doesn't return false`) - } - - str, ok := resolveToString("abc") - if !ok || str != "abc" { - t.Errorf(`resolveToString("abc") doesn't return ("abc", true)`) - } - - str, ok = resolveToString(123) - if ok || str != "" { - t.Errorf(`resolveToString(123) doens't return ("",false)`) - } -} - -func TestGetInt64Address(t *testing.T) { - addr := getInt64Address(123) - if addr == nil { - t.Fatalf(`getInt64Address(123) returns nil`) - } - - if *addr != 123 { - t.Errorf(`expect *getInt64Addr(123) == 123, but get %v`, *addr) - } -} - -func TestGenerateConsumerIDFromAPIKey(t *testing.T) { - id := generateConsumerIDFromAPIKey("test-key") - if id != "api_key:test-key" { - t.Errorf(` generateConsumerIDFromAPIKey("test-key") returns %v`, id) - } -} - -func TestDimensionToString(t *testing.T) { - var dim = map[string]interface{}{ - "key1": "abc", - "key2": 123, - } - - str, ok := dimensionToString(dim, "key1") - if !ok || str != "abc" { - t.Errorf(`expect dimensionToString(dim, "key1") return ("abc",true), but get (%v, %v)`, - str, ok) - } - str, ok = dimensionToString(dim, "key2") - if ok { - t.Errorf(`expect dimensionToString(dim, "key2") return ("",false), but get (%v, %v)`, - str, ok) - } - str, ok = dimensionToString(dim, "key3") - if ok { - t.Errorf(`expect dimensionToString(dim, "key3") return ("",false), but get (%v, %v)`, - str, ok) - } -} - -func TestToFormattedJSON(t *testing.T) { - formattedJSON, err := toFormattedJSON(&testMarshaller{}) - if err != nil { - t.Fatalf(`toFormattedJSON failed with %v`, err) - } - - expected := "{\x0A \"F\": \"a\"\x0A}" - - if formattedJSON != expected { - t.Errorf(`expected formatted JSON, expect '%s', but get '%s'`, expected, formattedJSON) - } -} diff --git a/mixer/pkg/api/grpcServer.go b/mixer/pkg/api/grpcServer.go index a84a694bc6f6..69b8a0075213 100644 --- a/mixer/pkg/api/grpcServer.go +++ b/mixer/pkg/api/grpcServer.go @@ -163,9 +163,12 @@ func (s *grpcServer) check(ctx context.Context, req *mixerpb.CheckRequest, resp := &mixerpb.CheckResponse{ Precondition: mixerpb.CheckResponse_PreconditionResult{ - ValidDuration: cr.ValidDuration, - ValidUseCount: cr.ValidUseCount, - Status: cr.Status, + ValidDuration: cr.ValidDuration, + ValidUseCount: cr.ValidUseCount, + Status: rpc.Status{ + Code: cr.Status.Code, + Message: cr.Status.Message, + }, ReferencedAttributes: protoBag.GetReferencedAttributes(s.globalDict, globalWordCount), RouteDirective: cr.RouteDirective, }, diff --git a/mixer/pkg/attribute/list.gen.go b/mixer/pkg/attribute/list.gen.go index 0ee2a7519402..9b224ba75586 100644 --- a/mixer/pkg/attribute/list.gen.go +++ b/mixer/pkg/attribute/list.gen.go @@ -3,14 +3,14 @@ package attribute -func GlobalList() []string { - tmp := make([]string, len(globalList)) - copy(tmp, globalList) - return tmp +func GlobalList() ([]string) { + tmp := make([]string, len(globalList)) + copy(tmp, globalList) + return tmp } -var ( - globalList = []string{ +var ( + globalList = []string{ "source.ip", "source.port", "source.name", @@ -232,5 +232,5 @@ var ( "\"-\"", "inbound", "outbound", - } + } ) diff --git a/mixer/pkg/config/mcp/backend.go b/mixer/pkg/config/mcp/backend.go index c86a8f37ce45..5c4ffdbf2a7e 100644 --- a/mixer/pkg/config/mcp/backend.go +++ b/mixer/pkg/config/mcp/backend.go @@ -192,7 +192,7 @@ func (b *backend) Init(kinds []string) error { } cl := mcp.NewAggregatedMeshConfigServiceClient(conn) - b.mcpReporter = monitoring.NewStatsContext("mixer") + b.mcpReporter = monitoring.NewStatsContext("mixer/mcp/sink") options := &sink.Options{ CollectionOptions: sink.CollectionOptionsFromSlice(collections), Updater: b, diff --git a/mixer/pkg/runtime/config/ephemeral.go b/mixer/pkg/runtime/config/ephemeral.go index 82c5c05bf435..0726bb0f6336 100644 --- a/mixer/pkg/runtime/config/ephemeral.go +++ b/mixer/pkg/runtime/config/ephemeral.go @@ -735,7 +735,8 @@ func (e *Ephemeral) processRuleConfigs( } // If there are no valid actions found for this rule, then elide the rule. - if len(actionsStat) == 0 && len(actionsDynamic) == 0 { + if len(actionsStat) == 0 && len(actionsDynamic) == 0 && + len(cfg.RequestHeaderOperations) == 0 && len(cfg.ResponseHeaderOperations) == 0 { appendErr(ctx, errs, fmt.Sprintf("rule=%s", ruleName), monitoring.RuleErrs, "No valid actions found in rule") continue } diff --git a/mixer/pkg/runtime/config/handler_test.go b/mixer/pkg/runtime/config/handler_test.go index d40e1bacfd1c..d3b40d327bb0 100644 --- a/mixer/pkg/runtime/config/handler_test.go +++ b/mixer/pkg/runtime/config/handler_test.go @@ -198,3 +198,20 @@ func TestFailedBuild(t *testing.T) { t.Fatal() } } + +func TestElided(t *testing.T) { + templates := data.BuildTemplates(nil) + attributes := data.BuildAdapters(nil) + s, _ := GetSnapshotForTest(templates, attributes, data.ServiceConfig, globalCfg) + + i1 := s.InstancesStatic[data.FqnI1] + h1 := s.HandlersStatic[data.FqnACheck1] + h, err := BuildHandler(h1, []*InstanceStatic{i1}, nil, s.Templates) + if err != nil { + t.Fatal(err) + } + + if h == nil { + t.Fail() + } +} diff --git a/mixer/pkg/runtime/dispatcher/dispatcher_test.go b/mixer/pkg/runtime/dispatcher/dispatcher_test.go index 90a709992d3a..2d68f85afe8f 100644 --- a/mixer/pkg/runtime/dispatcher/dispatcher_test.go +++ b/mixer/pkg/runtime/dispatcher/dispatcher_test.go @@ -22,9 +22,11 @@ import ( "time" "github.com/gogo/googleapis/google/rpc" + "github.com/gogo/protobuf/types" tpb "istio.io/api/mixer/adapter/model/v1beta1" v1 "istio.io/api/mixer/v1" + "istio.io/api/policy/v1beta1" "istio.io/istio/mixer/pkg/adapter" "istio.io/istio/mixer/pkg/attribute" "istio.io/istio/mixer/pkg/lang/compiled" @@ -33,6 +35,7 @@ import ( "istio.io/istio/mixer/pkg/runtime/handler" "istio.io/istio/mixer/pkg/runtime/routing" "istio.io/istio/mixer/pkg/runtime/testing/data" + "istio.io/istio/mixer/pkg/status" "istio.io/istio/pkg/log" ) @@ -225,6 +228,147 @@ ident : dest.istio-system `, }, + { + name: "CheckResultCustomError", + templates: []data.FakeTemplateSettings{{ + Name: "tcheck", + CheckResults: []adapter.CheckResult{ + { + Status: rpc.Status{ + Code: int32(rpc.DATA_LOSS), + Message: "data loss details", + Details: []*types.Any{status.PackErrorDetail(&v1beta1.DirectHttpResponse{ + Code: 403, + Body: "nope", + Headers: map[string]string{"istio-test": "istio-value"}, + })}, + }, + ValidUseCount: 10, + ValidDuration: time.Second, + }, + { + Status: rpc.Status{ + Code: int32(rpc.DEADLINE_EXCEEDED), + Message: "deadline", + }, + ValidUseCount: 20, + ValidDuration: time.Second, + }, + }, + }}, + config: []string{ + data.HandlerACheck1, + data.InstanceCheck1, + data.InstanceCheck2, + data.RuleCheck1WithInstance1And2Operation, + }, + variety: tpb.TEMPLATE_VARIETY_CHECK, + expectedCheckResult: adapter.CheckResult{ + Status: rpc.Status{ + Code: int32(rpc.DATA_LOSS), + Message: "hcheck1.acheck.istio-system:data loss details, hcheck1.acheck.istio-system:deadline", + }, + ValidUseCount: 10, + ValidDuration: time.Second, + // note no header operation in case of an error + RouteDirective: &v1.RouteDirective{ + DirectResponseCode: 403, + DirectResponseBody: "nope", + ResponseHeaderOperations: []v1.HeaderOperation{{ + Name: "istio-test", + Value: "istio-value", + }}, + }, + }, + log: ` +[tcheck] InstanceBuilderFn() => name: 'tcheck', bag: '--- +ident : dest.istio-system +' +[tcheck] InstanceBuilderFn() <= (SUCCESS) +[tcheck] DispatchCheck => context exists: 'true' +[tcheck] DispatchCheck => handler exists: 'true' +[tcheck] DispatchCheck => instance: '&Struct{Fields:map[string]*Value{},XXX_unrecognized:[],}' +[tcheck] DispatchCheck <= (SUCCESS) +[tcheck] InstanceBuilderFn() => name: 'tcheck', bag: '--- +ident : dest.istio-system +' +[tcheck] InstanceBuilderFn() <= (SUCCESS) +[tcheck] DispatchCheck => context exists: 'true' +[tcheck] DispatchCheck => handler exists: 'true' +[tcheck] DispatchCheck => instance: '&Struct{Fields:map[string]*Value{},XXX_unrecognized:[],}' +[tcheck] DispatchCheck <= (SUCCESS) +`, + }, + + { + name: "CheckResultCustomErrorNoCode", + templates: []data.FakeTemplateSettings{{ + Name: "tcheck", + CheckResults: []adapter.CheckResult{ + { + Status: rpc.Status{ + Code: int32(rpc.DATA_LOSS), + Message: "data loss details", + Details: []*types.Any{status.PackErrorDetail(&v1beta1.DirectHttpResponse{ + Headers: map[string]string{"istio-test": "istio-value"}, + })}, + }, + ValidUseCount: 10, + ValidDuration: time.Second, + }, + { + Status: rpc.Status{ + Code: int32(rpc.DEADLINE_EXCEEDED), + Message: "deadline", + }, + ValidUseCount: 20, + ValidDuration: time.Second, + }, + }, + }}, + config: []string{ + data.HandlerACheck1, + data.InstanceCheck1, + data.InstanceCheck2, + data.RuleCheck1WithInstance1And2Operation, + }, + variety: tpb.TEMPLATE_VARIETY_CHECK, + expectedCheckResult: adapter.CheckResult{ + Status: rpc.Status{ + Code: int32(rpc.DATA_LOSS), + Message: "hcheck1.acheck.istio-system:data loss details, hcheck1.acheck.istio-system:deadline", + }, + ValidUseCount: 10, + ValidDuration: time.Second, + // note no header operation in case of an error + RouteDirective: &v1.RouteDirective{ + DirectResponseCode: 500, + ResponseHeaderOperations: []v1.HeaderOperation{{ + Name: "istio-test", + Value: "istio-value", + }}, + }, + }, + log: ` +[tcheck] InstanceBuilderFn() => name: 'tcheck', bag: '--- +ident : dest.istio-system +' +[tcheck] InstanceBuilderFn() <= (SUCCESS) +[tcheck] DispatchCheck => context exists: 'true' +[tcheck] DispatchCheck => handler exists: 'true' +[tcheck] DispatchCheck => instance: '&Struct{Fields:map[string]*Value{},XXX_unrecognized:[],}' +[tcheck] DispatchCheck <= (SUCCESS) +[tcheck] InstanceBuilderFn() => name: 'tcheck', bag: '--- +ident : dest.istio-system +' +[tcheck] InstanceBuilderFn() <= (SUCCESS) +[tcheck] DispatchCheck => context exists: 'true' +[tcheck] DispatchCheck => handler exists: 'true' +[tcheck] DispatchCheck => instance: '&Struct{Fields:map[string]*Value{},XXX_unrecognized:[],}' +[tcheck] DispatchCheck <= (SUCCESS) +`, + }, + { name: "BasicCheckWithExpressions", config: []string{ @@ -801,6 +945,43 @@ ident : dest.istio-system [tcheck] DispatchCheck <= (PANIC) `, }, + + { + name: "CheckElidedRule", + config: []string{ + data.HandlerACheckOutput1, + data.InstanceCheckOutput1, + data.RuleCheckNoActionsOrHeaderOps, + }, + variety: tpb.TEMPLATE_VARIETY_CHECK_WITH_OUTPUT, + expectedCheckResult: adapter.CheckResult{ + ValidDuration: defaultValidDuration, + ValidUseCount: defaultValidUseCount, + }, + log: ``, + }, + + { + name: "CheckOnlyHeaderOperationRule", + config: []string{ + data.HandlerACheckOutput1, + data.InstanceCheckOutput1, + data.RuleCheckHeaderOpWithNoActions, + }, + variety: tpb.TEMPLATE_VARIETY_CHECK_WITH_OUTPUT, + expectedCheckResult: adapter.CheckResult{ + ValidDuration: defaultValidDuration, + ValidUseCount: defaultValidUseCount, + RouteDirective: &v1.RouteDirective{ + ResponseHeaderOperations: []v1.HeaderOperation{{ + Name: "b-header", + Value: "test", + Operation: v1.APPEND, + }}, + }, + }, + log: ``, + }, } func TestDispatcher(t *testing.T) { @@ -849,7 +1030,7 @@ func TestDispatcher(t *testing.T) { if e == nil { if !reflect.DeepEqual(&cres, &tst.expectedCheckResult) { - tt.Fatalf("check result mismatch: '%v' != '%v'", cres, tst.expectedCheckResult) + tt.Fatalf("check result mismatch: '%#v' != '%#v'", cres, tst.expectedCheckResult) } } else { err = e diff --git a/mixer/pkg/runtime/dispatcher/session.go b/mixer/pkg/runtime/dispatcher/session.go index 3dfb2cf7269a..7b43a84666ab 100644 --- a/mixer/pkg/runtime/dispatcher/session.go +++ b/mixer/pkg/runtime/dispatcher/session.go @@ -204,7 +204,7 @@ func (s *session) dispatch() error { log.Warnf("Requested quota '%s' is not configured", s.quotaArgs.Quota) } - // aggregate directive after filtering by attribute conditions + // aggregate header operations after filtering by attribute conditions if s.variety == tpb.TEMPLATE_VARIETY_CHECK && status.IsOK(s.checkResult.Status) { for _, directiveGroup := range destinations.Directives() { if directiveGroup.Condition != nil { @@ -238,6 +238,14 @@ func (s *session) dispatch() error { } } + // default response if RouteDirective is only action + if s.checkResult.IsDefault() { + s.checkResult = adapter.CheckResult{ + ValidUseCount: defaultValidUseCount, + ValidDuration: defaultValidDuration, + } + } + if s.checkResult.RouteDirective == nil { s.checkResult.RouteDirective = &mixerpb.RouteDirective{} } @@ -333,7 +341,31 @@ func (s *session) waitForDispatched() { if buf == nil { buf = pool.GetBuffer() // the first failure result's code becomes the result code for the output + // `buf` variable guards the first failure since it is set the first time code = rpc.Code(st.Code) + + // update the direct response matching the error status + if s.variety == tpb.TEMPLATE_VARIETY_CHECK { + if response := status.GetDirectHTTPResponse(st); response != nil { + if s.checkResult.RouteDirective == nil { + s.checkResult.RouteDirective = &mixerpb.RouteDirective{} + } + directive := s.checkResult.RouteDirective + if response.Code != 0 { + directive.DirectResponseCode = uint32(response.Code) + } else { + directive.DirectResponseCode = uint32(status.HTTPStatusFromCode(rpc.Code(st.Code))) + } + directive.DirectResponseBody = response.Body + for header, value := range response.Headers { + directive.ResponseHeaderOperations = append(directive.ResponseHeaderOperations, + mixerpb.HeaderOperation{ + Name: header, + Value: value, + }) + } + } + } } else { buf.WriteString(", ") } diff --git a/mixer/pkg/runtime/routing/builder.go b/mixer/pkg/runtime/routing/builder.go index 116ac253e90b..e8379232ce05 100644 --- a/mixer/pkg/runtime/routing/builder.go +++ b/mixer/pkg/runtime/routing/builder.go @@ -690,6 +690,23 @@ func (b *builder) addRuleOperations( namespace string, condition compiled.Expression, operations []*HeaderOperation) { + + // ensure struct population for rules with routeDirectives and no actions + if b.table.entries == nil { + b.table.entries = map[tpb.TemplateVariety]*varietyTable{} + } + if b.table.entries[tpb.TEMPLATE_VARIETY_CHECK] == nil { + b.table.entries[tpb.TEMPLATE_VARIETY_CHECK] = &varietyTable{} + } + if b.table.entries[tpb.TEMPLATE_VARIETY_CHECK].entries == nil { + b.table.entries[tpb.TEMPLATE_VARIETY_CHECK].entries = map[string]*NamespaceTable{ + namespace: { + entries: []*Destination{}, + directives: []*DirectiveGroup{}, + }, + } + } + byNamespace := b.table.entries[tpb.TEMPLATE_VARIETY_CHECK].entries[namespace] var group *DirectiveGroup diff --git a/mixer/pkg/runtime/testing/data/data.go b/mixer/pkg/runtime/testing/data/data.go index d88fbf0681a7..531f90ddd4c9 100644 --- a/mixer/pkg/runtime/testing/data/data.go +++ b/mixer/pkg/runtime/testing/data/data.go @@ -337,6 +337,29 @@ spec: - icheck2.tcheck.istio-system ` +// RuleCheck1WithInstance1And2Operation has instances icheck1 & icheck2 and a header operation +var RuleCheck1WithInstance1And2Operation = ` +apiVersion: "config.istio.io/v1alpha2" +kind: rule +metadata: + name: rcheck1 + namespace: istio-system +spec: + actions: + - handler: hcheck1.acheck + instances: + - icheck1.tcheck.istio-system + - icheck2.tcheck.istio-system + requestHeaderOperations: + - name: a-header + values: + - '"test"' + responseHeaderOperations: + - name: b-header + values: + - '"test"' +` + // RuleCheck1WithMatchClause is Rule Check1 with a conditional. var RuleCheck1WithMatchClause = ` apiVersion: "config.istio.io/v1alpha2" @@ -539,6 +562,34 @@ spec: operation: APPEND ` +// RuleCheckNoActionsOrHeaderOps has no actions and no responseHeaderOperations. Should be elided. +var RuleCheckNoActionsOrHeaderOps = ` +apiVersion: config.istio.io/v1alpha2 +kind: rule +metadata: + name: noactions + namespace: istio-system +spec: + actions: [] + responseHeaderOperations: [] +` + +// RuleCheckHeaderOpWithNoActions has a responseHeaderOperation, but no actions. Should not be elided. +var RuleCheckHeaderOpWithNoActions = ` +apiVersion: config.istio.io/v1alpha2 +kind: rule +metadata: + name: noactions + namespace: istio-system +spec: + actions: [] + responseHeaderOperations: + - name: b-header + values: + - '"test"' + operation: APPEND +` + // RuleReport1 is a standard testing instance config with name rreport1. It references I1 and H1. var RuleReport1 = ` apiVersion: "config.istio.io/v1alpha2" diff --git a/mixer/pkg/status/status.go b/mixer/pkg/status/status.go index 7ccffba0c182..1f2fac2aca9a 100644 --- a/mixer/pkg/status/status.go +++ b/mixer/pkg/status/status.go @@ -16,7 +16,13 @@ package status import ( + "net/http" + rpc "github.com/gogo/googleapis/google/rpc" + "github.com/gogo/protobuf/proto" + "github.com/gogo/protobuf/types" + + "istio.io/api/policy/v1beta1" ) // OK represents a status with a code of rpc.OK @@ -134,3 +140,68 @@ func String(status rpc.Status) string { } return result } + +// GetDirectHTTPResponse extracts a client-facing error detail for HTTP or returns nil +// if it is not present. +func GetDirectHTTPResponse(status rpc.Status) *v1beta1.DirectHttpResponse { + for _, detail := range status.Details { + response := &v1beta1.DirectHttpResponse{} + if !types.Is(detail, response) { + continue + } + if types.UnmarshalAny(detail, response) != nil { + continue + } + return response + } + return nil +} + +// PackErrorDetail packs an HTTP response error detail +func PackErrorDetail(response proto.Message) *types.Any { + any, _ := types.MarshalAny(response) + return any +} + +// HTTPStatusFromCode translates RPC status code to HTTP status code. +func HTTPStatusFromCode(code rpc.Code) int { + switch code { + case rpc.OK: + return http.StatusOK + case rpc.CANCELLED: + return http.StatusRequestTimeout + case rpc.UNKNOWN: + return http.StatusInternalServerError + case rpc.INVALID_ARGUMENT: + return http.StatusBadRequest + case rpc.DEADLINE_EXCEEDED: + return http.StatusGatewayTimeout + case rpc.NOT_FOUND: + return http.StatusNotFound + case rpc.ALREADY_EXISTS: + return http.StatusConflict + case rpc.PERMISSION_DENIED: + return http.StatusForbidden + case rpc.UNAUTHENTICATED: + return http.StatusUnauthorized + case rpc.RESOURCE_EXHAUSTED: + return http.StatusTooManyRequests + case rpc.FAILED_PRECONDITION: + return http.StatusPreconditionFailed + case rpc.ABORTED: + return http.StatusConflict + case rpc.OUT_OF_RANGE: + return http.StatusBadRequest + case rpc.UNIMPLEMENTED: + return http.StatusNotImplemented + case rpc.INTERNAL: + return http.StatusInternalServerError + case rpc.UNAVAILABLE: + return http.StatusServiceUnavailable + case rpc.DATA_LOSS: + return http.StatusInternalServerError + } + + // should not happen + return http.StatusInternalServerError +} diff --git a/mixer/pkg/status/status_test.go b/mixer/pkg/status/status_test.go index fa3fd8820160..4abaabca413f 100644 --- a/mixer/pkg/status/status_test.go +++ b/mixer/pkg/status/status_test.go @@ -16,9 +16,13 @@ package status import ( "errors" + "reflect" "testing" rpc "github.com/gogo/googleapis/google/rpc" + "github.com/gogo/protobuf/types" + + "istio.io/api/policy/v1beta1" ) func TestStatus(t *testing.T) { @@ -143,3 +147,39 @@ func TestStatus(t *testing.T) { t.Errorf("Expecting valid string, got nothing") } } + +func TestErrorDetail(t *testing.T) { + if response := GetDirectHTTPResponse(OK); response != nil { + t.Errorf("GetDirectHTTPResponse(OK) => got %#v, want nil", response) + } + + response := &v1beta1.DirectHttpResponse{ + Code: v1beta1.MovedPermanently, + Body: "istio.io/api", + Headers: map[string]string{"location": "istio.io/api"}, + } + any := PackErrorDetail(response) + + s := rpc.Status{Code: int32(rpc.UNAUTHENTICATED), Details: []*types.Any{ + nil, + &types.Any{TypeUrl: "types.google.com/istio.policy.v1beta1.DirectHttpResponse", Value: []byte{1}}, + any, + }} + + if got := GetDirectHTTPResponse(s); !reflect.DeepEqual(got, response) { + t.Errorf("GetDirectHTTPResponse => got %#v, want %#v", got, response) + } +} + +func TestStatusCode(t *testing.T) { + for code := range rpc.Code_name { + httpCode := HTTPStatusFromCode(rpc.Code(code)) + if httpCode < 200 || httpCode > 600 { + t.Errorf("unexpected HTTP code after translation: %d", httpCode) + } + } + + if code := HTTPStatusFromCode(rpc.Code(-1)); code != 500 { + t.Errorf("unexpected undefined HTTP code: %d", code) + } +} diff --git a/mixer/template/inventory.yaml b/mixer/template/inventory.yaml index 62ddd934a05e..586e37c907c7 100644 --- a/mixer/template/inventory.yaml +++ b/mixer/template/inventory.yaml @@ -8,5 +8,4 @@ metric/template_proto.descriptor_set: "istio.io/istio/mixer/template/metric" quota/template_proto.descriptor_set: "istio.io/istio/mixer/template/quota" reportnothing/template_proto.descriptor_set: "istio.io/istio/mixer/template/reportnothing" tracespan/tracespan_proto.descriptor_set: "istio.io/istio/mixer/template/tracespan" -../adapter/servicecontrol/template/servicecontrolreport/template_proto.descriptor_set: "istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport" ../adapter/kubernetesenv/template/template_proto.descriptor_set: "istio.io/istio/mixer/adapter/kubernetesenv/template" diff --git a/mixer/template/sample/template.gen.go b/mixer/template/sample/template.gen.go index 8b49e01bf9a9..3bc05ee67943 100644 --- a/mixer/template/sample/template.gen.go +++ b/mixer/template/sample/template.gen.go @@ -33,13 +33,13 @@ import ( "istio.io/istio/mixer/pkg/template" "istio.io/istio/pkg/log" - istio_mixer_adapter_sample_myapa "istio.io/istio/mixer/template/sample/apa" + "istio.io/istio/mixer/template/sample/apa" - istio_mixer_adapter_sample_check "istio.io/istio/mixer/template/sample/check" + "istio.io/istio/mixer/template/sample/check" - istio_mixer_adapter_sample_quota "istio.io/istio/mixer/template/sample/quota" + "istio.io/istio/mixer/template/sample/quota" - istio_mixer_adapter_sample_report "istio.io/istio/mixer/template/sample/report" + "istio.io/istio/mixer/template/sample/report" "time" ) diff --git a/mixer/template/template.gen.go b/mixer/template/template.gen.go index 47f4c552799f..40738eefbebb 100644 --- a/mixer/template/template.gen.go +++ b/mixer/template/template.gen.go @@ -33,9 +33,7 @@ import ( "istio.io/istio/mixer/pkg/template" "istio.io/istio/pkg/log" - adapter_template_kubernetes "istio.io/istio/mixer/adapter/kubernetesenv/template" - - "istio.io/istio/mixer/adapter/servicecontrol/template/servicecontrolreport" + "istio.io/istio/mixer/adapter/kubernetesenv/template" "istio.io/istio/mixer/template/apikey" @@ -530,229 +528,6 @@ var ( }, }, - servicecontrolreport.TemplateName: { - Name: servicecontrolreport.TemplateName, - Impl: "servicecontrolreport", - CtrCfg: &servicecontrolreport.InstanceParam{}, - Variety: istio_adapter_model_v1beta1.TEMPLATE_VARIETY_REPORT, - BldrInterfaceName: servicecontrolreport.TemplateName + "." + "HandlerBuilder", - HndlrInterfaceName: servicecontrolreport.TemplateName + "." + "Handler", - BuilderSupportsTemplate: func(hndlrBuilder adapter.HandlerBuilder) bool { - _, ok := hndlrBuilder.(servicecontrolreport.HandlerBuilder) - return ok - }, - HandlerSupportsTemplate: func(hndlr adapter.Handler) bool { - _, ok := hndlr.(servicecontrolreport.Handler) - return ok - }, - InferType: func(cp proto.Message, tEvalFn template.TypeEvalFn) (proto.Message, error) { - - var BuildTemplate func(param *servicecontrolreport.InstanceParam, - path string) (*servicecontrolreport.Type, error) - - _ = BuildTemplate - - BuildTemplate = func(param *servicecontrolreport.InstanceParam, - path string) (*servicecontrolreport.Type, error) { - - if param == nil { - return nil, nil - } - - infrdType := &servicecontrolreport.Type{} - - var err error = nil - - if param.ApiVersion != "" { - if t, e := tEvalFn(param.ApiVersion); e != nil || t != istio_policy_v1beta1.STRING { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"ApiVersion", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"ApiVersion", t, istio_policy_v1beta1.STRING) - } - } - - if param.ApiOperation != "" { - if t, e := tEvalFn(param.ApiOperation); e != nil || t != istio_policy_v1beta1.STRING { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"ApiOperation", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"ApiOperation", t, istio_policy_v1beta1.STRING) - } - } - - if param.ApiProtocol != "" { - if t, e := tEvalFn(param.ApiProtocol); e != nil || t != istio_policy_v1beta1.STRING { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"ApiProtocol", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"ApiProtocol", t, istio_policy_v1beta1.STRING) - } - } - - if param.ApiService != "" { - if t, e := tEvalFn(param.ApiService); e != nil || t != istio_policy_v1beta1.STRING { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"ApiService", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"ApiService", t, istio_policy_v1beta1.STRING) - } - } - - if param.ApiKey != "" { - if t, e := tEvalFn(param.ApiKey); e != nil || t != istio_policy_v1beta1.STRING { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"ApiKey", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"ApiKey", t, istio_policy_v1beta1.STRING) - } - } - - if param.RequestTime != "" { - if t, e := tEvalFn(param.RequestTime); e != nil || t != istio_policy_v1beta1.TIMESTAMP { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"RequestTime", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"RequestTime", t, istio_policy_v1beta1.TIMESTAMP) - } - } - - if param.RequestMethod != "" { - if t, e := tEvalFn(param.RequestMethod); e != nil || t != istio_policy_v1beta1.STRING { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"RequestMethod", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"RequestMethod", t, istio_policy_v1beta1.STRING) - } - } - - if param.RequestPath != "" { - if t, e := tEvalFn(param.RequestPath); e != nil || t != istio_policy_v1beta1.STRING { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"RequestPath", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"RequestPath", t, istio_policy_v1beta1.STRING) - } - } - - if param.RequestBytes != "" { - if t, e := tEvalFn(param.RequestBytes); e != nil || t != istio_policy_v1beta1.INT64 { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"RequestBytes", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"RequestBytes", t, istio_policy_v1beta1.INT64) - } - } - - if param.ResponseTime != "" { - if t, e := tEvalFn(param.ResponseTime); e != nil || t != istio_policy_v1beta1.TIMESTAMP { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"ResponseTime", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"ResponseTime", t, istio_policy_v1beta1.TIMESTAMP) - } - } - - if param.ResponseCode != "" { - if t, e := tEvalFn(param.ResponseCode); e != nil || t != istio_policy_v1beta1.INT64 { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"ResponseCode", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"ResponseCode", t, istio_policy_v1beta1.INT64) - } - } - - if param.ResponseBytes != "" { - if t, e := tEvalFn(param.ResponseBytes); e != nil || t != istio_policy_v1beta1.INT64 { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"ResponseBytes", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"ResponseBytes", t, istio_policy_v1beta1.INT64) - } - } - - if param.ResponseLatency != "" { - if t, e := tEvalFn(param.ResponseLatency); e != nil || t != istio_policy_v1beta1.DURATION { - if e != nil { - return nil, fmt.Errorf("failed to evaluate expression for field '%s': %v", path+"ResponseLatency", e) - } - return nil, fmt.Errorf("error type checking for field '%s': Evaluated expression type %v want %v", path+"ResponseLatency", t, istio_policy_v1beta1.DURATION) - } - } - - return infrdType, err - - } - - instParam := cp.(*servicecontrolreport.InstanceParam) - - return BuildTemplate(instParam, "") - }, - - SetType: func(types map[string]proto.Message, builder adapter.HandlerBuilder) { - // Mixer framework should have ensured the type safety. - castedBuilder := builder.(servicecontrolreport.HandlerBuilder) - castedTypes := make(map[string]*servicecontrolreport.Type, len(types)) - for k, v := range types { - // Mixer framework should have ensured the type safety. - v1 := v.(*servicecontrolreport.Type) - castedTypes[k] = v1 - } - castedBuilder.SetServicecontrolReportTypes(castedTypes) - }, - - // DispatchReport dispatches the instances to the handler. - DispatchReport: func(ctx context.Context, handler adapter.Handler, inst []interface{}) error { - - // Convert the instances from the generic []interface{}, to their specialized type. - instances := make([]*servicecontrolreport.Instance, len(inst)) - for i, instance := range inst { - instances[i] = instance.(*servicecontrolreport.Instance) - } - - // Invoke the handler. - if err := handler.(servicecontrolreport.Handler).HandleServicecontrolReport(ctx, instances); err != nil { - return fmt.Errorf("failed to report all values: %v", err) - } - return nil - }, - - // CreateInstanceBuilder creates a new template.InstanceBuilderFN based on the supplied instance parameters. It uses - // the expression builder to create a new instance of a builder struct for the instance type. Created - // InstanceBuilderFn closes over this struct. When InstanceBuilderFn is called it, in turn, calls into - // the builder with an attribute bag. - // - // See template.CreateInstanceBuilderFn for more details. - CreateInstanceBuilder: func(instanceName string, param proto.Message, expb *compiled.ExpressionBuilder) (template.InstanceBuilderFn, error) { - - // If the parameter is nil. Simply return nil. The builder, then, will also return nil. - if param == nil { - return func(attr attribute.Bag) (interface{}, error) { - return nil, nil - }, nil - } - - // Instantiate a new builder for the instance. - builder, errp := newBuilder_servicecontrolreport_Template(expb, param.(*servicecontrolreport.InstanceParam)) - if !errp.IsNil() { - return nil, errp.AsCompilationError(instanceName) - } - - return func(attr attribute.Bag) (interface{}, error) { - // Use the instantiated builder (that this fn closes over) to construct an instance. - e, errp := builder.build(attr) - if !errp.IsNil() { - err := errp.AsEvaluationError(instanceName) - log.Error(err.Error()) - return nil, err - } - - e.Name = instanceName - return e, nil - }, nil - }, - }, - apikey.TemplateName: { Name: apikey.TemplateName, Impl: "apikey", @@ -2439,424 +2214,6 @@ func (b *builder_adapter_template_kubernetes_Template) build( return r, template.ErrorPath{} } -// builder struct for constructing an instance of Template. -type builder_servicecontrolreport_Template struct { - - // builder for field api_version: string. - - bldApiVersion compiled.Expression - - // builder for field api_operation: string. - - bldApiOperation compiled.Expression - - // builder for field api_protocol: string. - - bldApiProtocol compiled.Expression - - // builder for field api_service: string. - - bldApiService compiled.Expression - - // builder for field api_key: string. - - bldApiKey compiled.Expression - - // builder for field request_time: time.Time. - - bldRequestTime compiled.Expression - - // builder for field request_method: string. - - bldRequestMethod compiled.Expression - - // builder for field request_path: string. - - bldRequestPath compiled.Expression - - // builder for field request_bytes: int64. - - bldRequestBytes compiled.Expression - - // builder for field response_time: time.Time. - - bldResponseTime compiled.Expression - - // builder for field response_code: int64. - - bldResponseCode compiled.Expression - - // builder for field response_bytes: int64. - - bldResponseBytes compiled.Expression - - // builder for field response_latency: time.Duration. - - bldResponseLatency compiled.Expression -} // builder_servicecontrolreport_Template - -// Instantiates and returns a new builder for Template, based on the provided instance parameter. -func newBuilder_servicecontrolreport_Template( - expb *compiled.ExpressionBuilder, - param *servicecontrolreport.InstanceParam) (*builder_servicecontrolreport_Template, template.ErrorPath) { - - // If the parameter is nil. Simply return nil. The builder, then, will also return nil. - if param == nil { - return nil, template.ErrorPath{} - } - - b := &builder_servicecontrolreport_Template{} - - var exp compiled.Expression - _ = exp - var err error - _ = err - var errp template.ErrorPath - _ = errp - var expType istio_policy_v1beta1.ValueType - _ = expType - - if param.ApiVersion == "" { - b.bldApiVersion = nil - } else { - b.bldApiVersion, expType, err = expb.Compile(param.ApiVersion) - if err != nil { - return nil, template.NewErrorPath("ApiVersion", err) - } - - if expType != istio_policy_v1beta1.STRING { - err = fmt.Errorf("instance field type mismatch: expected='%v', actual='%v', expression='%s'", istio_policy_v1beta1.STRING, expType, param.ApiVersion) - return nil, template.NewErrorPath("ApiVersion", err) - } - - } - - if param.ApiOperation == "" { - b.bldApiOperation = nil - } else { - b.bldApiOperation, expType, err = expb.Compile(param.ApiOperation) - if err != nil { - return nil, template.NewErrorPath("ApiOperation", err) - } - - if expType != istio_policy_v1beta1.STRING { - err = fmt.Errorf("instance field type mismatch: expected='%v', actual='%v', expression='%s'", istio_policy_v1beta1.STRING, expType, param.ApiOperation) - return nil, template.NewErrorPath("ApiOperation", err) - } - - } - - if param.ApiProtocol == "" { - b.bldApiProtocol = nil - } else { - b.bldApiProtocol, expType, err = expb.Compile(param.ApiProtocol) - if err != nil { - return nil, template.NewErrorPath("ApiProtocol", err) - } - - if expType != istio_policy_v1beta1.STRING { - err = fmt.Errorf("instance field type mismatch: expected='%v', actual='%v', expression='%s'", istio_policy_v1beta1.STRING, expType, param.ApiProtocol) - return nil, template.NewErrorPath("ApiProtocol", err) - } - - } - - if param.ApiService == "" { - b.bldApiService = nil - } else { - b.bldApiService, expType, err = expb.Compile(param.ApiService) - if err != nil { - return nil, template.NewErrorPath("ApiService", err) - } - - if expType != istio_policy_v1beta1.STRING { - err = fmt.Errorf("instance field type mismatch: expected='%v', actual='%v', expression='%s'", istio_policy_v1beta1.STRING, expType, param.ApiService) - return nil, template.NewErrorPath("ApiService", err) - } - - } - - if param.ApiKey == "" { - b.bldApiKey = nil - } else { - b.bldApiKey, expType, err = expb.Compile(param.ApiKey) - if err != nil { - return nil, template.NewErrorPath("ApiKey", err) - } - - if expType != istio_policy_v1beta1.STRING { - err = fmt.Errorf("instance field type mismatch: expected='%v', actual='%v', expression='%s'", istio_policy_v1beta1.STRING, expType, param.ApiKey) - return nil, template.NewErrorPath("ApiKey", err) - } - - } - - if param.RequestTime == "" { - b.bldRequestTime = nil - } else { - b.bldRequestTime, expType, err = expb.Compile(param.RequestTime) - if err != nil { - return nil, template.NewErrorPath("RequestTime", err) - } - - } - - if param.RequestMethod == "" { - b.bldRequestMethod = nil - } else { - b.bldRequestMethod, expType, err = expb.Compile(param.RequestMethod) - if err != nil { - return nil, template.NewErrorPath("RequestMethod", err) - } - - if expType != istio_policy_v1beta1.STRING { - err = fmt.Errorf("instance field type mismatch: expected='%v', actual='%v', expression='%s'", istio_policy_v1beta1.STRING, expType, param.RequestMethod) - return nil, template.NewErrorPath("RequestMethod", err) - } - - } - - if param.RequestPath == "" { - b.bldRequestPath = nil - } else { - b.bldRequestPath, expType, err = expb.Compile(param.RequestPath) - if err != nil { - return nil, template.NewErrorPath("RequestPath", err) - } - - if expType != istio_policy_v1beta1.STRING { - err = fmt.Errorf("instance field type mismatch: expected='%v', actual='%v', expression='%s'", istio_policy_v1beta1.STRING, expType, param.RequestPath) - return nil, template.NewErrorPath("RequestPath", err) - } - - } - - if param.RequestBytes == "" { - b.bldRequestBytes = nil - } else { - b.bldRequestBytes, expType, err = expb.Compile(param.RequestBytes) - if err != nil { - return nil, template.NewErrorPath("RequestBytes", err) - } - - if expType != istio_policy_v1beta1.INT64 { - err = fmt.Errorf("instance field type mismatch: expected='%v', actual='%v', expression='%s'", istio_policy_v1beta1.INT64, expType, param.RequestBytes) - return nil, template.NewErrorPath("RequestBytes", err) - } - - } - - if param.ResponseTime == "" { - b.bldResponseTime = nil - } else { - b.bldResponseTime, expType, err = expb.Compile(param.ResponseTime) - if err != nil { - return nil, template.NewErrorPath("ResponseTime", err) - } - - } - - if param.ResponseCode == "" { - b.bldResponseCode = nil - } else { - b.bldResponseCode, expType, err = expb.Compile(param.ResponseCode) - if err != nil { - return nil, template.NewErrorPath("ResponseCode", err) - } - - if expType != istio_policy_v1beta1.INT64 { - err = fmt.Errorf("instance field type mismatch: expected='%v', actual='%v', expression='%s'", istio_policy_v1beta1.INT64, expType, param.ResponseCode) - return nil, template.NewErrorPath("ResponseCode", err) - } - - } - - if param.ResponseBytes == "" { - b.bldResponseBytes = nil - } else { - b.bldResponseBytes, expType, err = expb.Compile(param.ResponseBytes) - if err != nil { - return nil, template.NewErrorPath("ResponseBytes", err) - } - - if expType != istio_policy_v1beta1.INT64 { - err = fmt.Errorf("instance field type mismatch: expected='%v', actual='%v', expression='%s'", istio_policy_v1beta1.INT64, expType, param.ResponseBytes) - return nil, template.NewErrorPath("ResponseBytes", err) - } - - } - - if param.ResponseLatency == "" { - b.bldResponseLatency = nil - } else { - b.bldResponseLatency, expType, err = expb.Compile(param.ResponseLatency) - if err != nil { - return nil, template.NewErrorPath("ResponseLatency", err) - } - - } - - return b, template.ErrorPath{} -} - -// build and return the instance, given a set of attributes. -func (b *builder_servicecontrolreport_Template) build( - attrs attribute.Bag) (*servicecontrolreport.Instance, template.ErrorPath) { - - if b == nil { - return nil, template.ErrorPath{} - } - - var err error - _ = err - var errp template.ErrorPath - _ = errp - var vBool bool - _ = vBool - var vInt int64 - _ = vInt - var vString string - _ = vString - var vDouble float64 - _ = vDouble - var vIface interface{} - _ = vIface - - r := &servicecontrolreport.Instance{} - - if b.bldApiVersion != nil { - - vString, err = b.bldApiVersion.EvaluateString(attrs) - if err != nil { - return nil, template.NewErrorPath("ApiVersion", err) - } - r.ApiVersion = vString - - } - - if b.bldApiOperation != nil { - - vString, err = b.bldApiOperation.EvaluateString(attrs) - if err != nil { - return nil, template.NewErrorPath("ApiOperation", err) - } - r.ApiOperation = vString - - } - - if b.bldApiProtocol != nil { - - vString, err = b.bldApiProtocol.EvaluateString(attrs) - if err != nil { - return nil, template.NewErrorPath("ApiProtocol", err) - } - r.ApiProtocol = vString - - } - - if b.bldApiService != nil { - - vString, err = b.bldApiService.EvaluateString(attrs) - if err != nil { - return nil, template.NewErrorPath("ApiService", err) - } - r.ApiService = vString - - } - - if b.bldApiKey != nil { - - vString, err = b.bldApiKey.EvaluateString(attrs) - if err != nil { - return nil, template.NewErrorPath("ApiKey", err) - } - r.ApiKey = vString - - } - - if b.bldRequestTime != nil { - - if vIface, err = b.bldRequestTime.Evaluate(attrs); err != nil { - return nil, template.NewErrorPath("RequestTime", err) - } - - r.RequestTime = vIface.(time.Time) - - } - - if b.bldRequestMethod != nil { - - vString, err = b.bldRequestMethod.EvaluateString(attrs) - if err != nil { - return nil, template.NewErrorPath("RequestMethod", err) - } - r.RequestMethod = vString - - } - - if b.bldRequestPath != nil { - - vString, err = b.bldRequestPath.EvaluateString(attrs) - if err != nil { - return nil, template.NewErrorPath("RequestPath", err) - } - r.RequestPath = vString - - } - - if b.bldRequestBytes != nil { - - vInt, err = b.bldRequestBytes.EvaluateInteger(attrs) - if err != nil { - return nil, template.NewErrorPath("RequestBytes", err) - } - r.RequestBytes = vInt - - } - - if b.bldResponseTime != nil { - - if vIface, err = b.bldResponseTime.Evaluate(attrs); err != nil { - return nil, template.NewErrorPath("ResponseTime", err) - } - - r.ResponseTime = vIface.(time.Time) - - } - - if b.bldResponseCode != nil { - - vInt, err = b.bldResponseCode.EvaluateInteger(attrs) - if err != nil { - return nil, template.NewErrorPath("ResponseCode", err) - } - r.ResponseCode = vInt - - } - - if b.bldResponseBytes != nil { - - vInt, err = b.bldResponseBytes.EvaluateInteger(attrs) - if err != nil { - return nil, template.NewErrorPath("ResponseBytes", err) - } - r.ResponseBytes = vInt - - } - - if b.bldResponseLatency != nil { - - if vIface, err = b.bldResponseLatency.Evaluate(attrs); err != nil { - return nil, template.NewErrorPath("ResponseLatency", err) - } - - r.ResponseLatency = vIface.(time.Duration) - - } - - return r, template.ErrorPath{} -} - // builder struct for constructing an instance of Template. type builder_apikey_Template struct { diff --git a/mixer/test/client/dynamic_attribute/dynamic_attribute_test.go b/mixer/test/client/dynamic_attribute/dynamic_attribute_test.go index a1d4511b827e..75042057624e 100644 --- a/mixer/test/client/dynamic_attribute/dynamic_attribute_test.go +++ b/mixer/test/client/dynamic_attribute/dynamic_attribute_test.go @@ -199,13 +199,15 @@ func TestDynamicAttribute(t *testing.T) { }, }, }, - Endpoint: &endpoint.Endpoint{ - Address: &core.Address{Address: &core.Address_SocketAddress{ - SocketAddress: &core.SocketAddress{ - Address: "127.0.0.1", - PortSpecifier: &core.SocketAddress_PortValue{PortValue: uint32(s.Ports().BackendPort)}, - }, - }}, + HostIdentifier: &endpoint.LbEndpoint_Endpoint{ + Endpoint: &endpoint.Endpoint{ + Address: &core.Address{Address: &core.Address_SocketAddress{ + SocketAddress: &core.SocketAddress{ + Address: "127.0.0.1", + PortSpecifier: &core.SocketAddress_PortValue{PortValue: uint32(s.Ports().BackendPort)}, + }, + }}, + }, }, }}, }}, diff --git a/mixer/test/client/gateway/gateway_test.go b/mixer/test/client/gateway/gateway_test.go index daead9d075eb..e64bc312d3f5 100644 --- a/mixer/test/client/gateway/gateway_test.go +++ b/mixer/test/client/gateway/gateway_test.go @@ -223,6 +223,9 @@ func (mock) ID(*core.Node) string { func (mock) GetProxyServiceInstances(_ *model.Proxy) ([]*model.ServiceInstance, error) { return nil, nil } +func (mock) GetProxyLocality(_ *model.Proxy) string { + return "" +} func (mock) GetService(_ model.Hostname) (*model.Service, error) { return nil, nil } func (mock) InstancesByPort(_ model.Hostname, _ int, _ model.LabelsCollection) ([]*model.ServiceInstance, error) { return nil, nil diff --git a/mixer/test/client/pilotplugin/pilotplugin_test.go b/mixer/test/client/pilotplugin/pilotplugin_test.go index 2068e658b90b..cb6768e2710c 100644 --- a/mixer/test/client/pilotplugin/pilotplugin_test.go +++ b/mixer/test/client/pilotplugin/pilotplugin_test.go @@ -297,6 +297,9 @@ func (mock) ID(*core.Node) string { func (mock) GetProxyServiceInstances(_ *model.Proxy) ([]*model.ServiceInstance, error) { return nil, nil } +func (mock) GetProxyLocality(_ *model.Proxy) string { + return "" +} func (mock) GetService(_ model.Hostname) (*model.Service, error) { return nil, nil } func (mock) InstancesByPort(_ model.Hostname, _ int, _ model.LabelsCollection) ([]*model.ServiceInstance, error) { return nil, nil diff --git a/mixer/test/client/pilotplugin_mtls/pilotplugin_mtls_test.go b/mixer/test/client/pilotplugin_mtls/pilotplugin_mtls_test.go index b147d4d0a490..4f0ed8a4e2b6 100644 --- a/mixer/test/client/pilotplugin_mtls/pilotplugin_mtls_test.go +++ b/mixer/test/client/pilotplugin_mtls/pilotplugin_mtls_test.go @@ -312,6 +312,9 @@ func (mock) ID(*core.Node) string { func (mock) GetProxyServiceInstances(_ *model.Proxy) ([]*model.ServiceInstance, error) { return nil, nil } +func (mock) GetProxyLocality(_ *model.Proxy) string { + return "" +} func (mock) GetService(_ model.Hostname) (*model.Service, error) { return nil, nil } func (mock) InstancesByPort(_ model.Hostname, _ int, _ model.LabelsCollection) ([]*model.ServiceInstance, error) { return nil, nil diff --git a/mixer/test/client/pilotplugin_tcp/pilotplugin_tcp_test.go b/mixer/test/client/pilotplugin_tcp/pilotplugin_tcp_test.go index 7035dc45cd8c..82a6abdaa6f8 100644 --- a/mixer/test/client/pilotplugin_tcp/pilotplugin_tcp_test.go +++ b/mixer/test/client/pilotplugin_tcp/pilotplugin_tcp_test.go @@ -174,6 +174,9 @@ func (mock) ID(*core.Node) string { func (mock) GetProxyServiceInstances(_ *model.Proxy) ([]*model.ServiceInstance, error) { return nil, nil } +func (mock) GetProxyLocality(_ *model.Proxy) string { + return "" +} func (mock) GetService(_ model.Hostname) (*model.Service, error) { return nil, nil } func (mock) InstancesByPort(_ model.Hostname, _ int, _ model.LabelsCollection) ([]*model.ServiceInstance, error) { return nil, nil diff --git a/mixer/test/client/route_directive/route_directive_test.go b/mixer/test/client/route_directive/route_directive_test.go index 90c8f1051ed0..50ca1bfd45b1 100644 --- a/mixer/test/client/route_directive/route_directive_test.go +++ b/mixer/test/client/route_directive/route_directive_test.go @@ -24,6 +24,8 @@ import ( "testing" "time" + "github.com/gogo/googleapis/google/rpc" + v1 "istio.io/api/mixer/v1" "istio.io/istio/mixer/test/client/env" ) @@ -35,8 +37,8 @@ const mustBeEmpty = "MUST_BE_EMPTY" const requestBody = "HELLO WORLD" var expectedStats = map[string]int{ - "http_mixer_filter.total_check_calls": 12, - "http_mixer_filter.total_remote_check_calls": 6, + "http_mixer_filter.total_check_calls": 16, + "http_mixer_filter.total_remote_check_calls": 8, } func TestRouteDirective(t *testing.T) { @@ -46,6 +48,8 @@ func TestRouteDirective(t *testing.T) { t.Fatalf("Failed to setup test: %v", err) } defer s.TearDown() + + // must use request path as cache key s.SetMixerCheckReferenced(&v1.ReferencedAttributes{ Words: []string{"request.path"}, AttributeMatches: []v1.ReferencedAttributes_AttributeMatch{{ @@ -60,12 +64,14 @@ func TestRouteDirective(t *testing.T) { desc string path string method string + status rpc.Status directive *v1.RouteDirective // expectations request http.Header // headers as received by backend response http.Header // headers as received by client body string // body as received by client + code int // HTTP code as received by client }{{ desc: "override HTTP pseudo headers", path: "/", @@ -92,6 +98,7 @@ func TestRouteDirective(t *testing.T) { "Content-Length": []string{fmt.Sprintf("%d", len(requestBody))}, }, body: requestBody, + code: 200, }, { desc: "request header operations", path: "/request", @@ -117,6 +124,7 @@ func TestRouteDirective(t *testing.T) { "X-Istio-Request": nil, }, body: requestBody, + code: 200, }, { desc: "response header operations", path: "/response", @@ -142,6 +150,7 @@ func TestRouteDirective(t *testing.T) { "Content-Length": nil, }, body: requestBody, + code: 200, }, { desc: "combine operations", path: "/combine", @@ -153,6 +162,7 @@ func TestRouteDirective(t *testing.T) { request: http.Header{"Istio-Request": []string{"test"}}, response: http.Header{"Istio-Response": []string{"case"}}, body: requestBody, + code: 200, }, { desc: "direct response", path: "/direct", @@ -163,6 +173,29 @@ func TestRouteDirective(t *testing.T) { ResponseHeaderOperations: []v1.HeaderOperation{{Name: "istio-response", Value: "case"}}, }, body: "hello!", + code: 200, + request: http.Header{mustBeEmpty: nil}, + response: http.Header{"Istio-Response": []string{"case"}}, + }, { + desc: "error", + path: "/error", + method: "GET", + status: rpc.Status{Code: int32(rpc.PERMISSION_DENIED), Message: "shish"}, + body: "PERMISSION_DENIED:shish", + code: 403, + request: http.Header{mustBeEmpty: nil}, + }, { + desc: "direct error response", + path: "/custom_error", + method: "GET", + status: rpc.Status{Code: int32(rpc.PERMISSION_DENIED), Message: "shish"}, + directive: &v1.RouteDirective{ + DirectResponseBody: "nothing to see here", + DirectResponseCode: 503, + ResponseHeaderOperations: []v1.HeaderOperation{{Name: "istio-response", Value: "case"}}, + }, + body: "nothing to see here", + code: 503, request: http.Header{mustBeEmpty: nil}, response: http.Header{"Istio-Response": []string{"case"}}, }, { @@ -180,36 +213,37 @@ func TestRouteDirective(t *testing.T) { request: http.Header{ "Referer": []string{fmt.Sprintf("http://localhost:%d/redirect", s.Ports().ServerProxyPort)}, }, + code: 200, }} - for _, cs := range testCases { - t.Run(cs.desc, func(t *testing.T) { - s.SetMixerRouteDirective(cs.directive) - req, err := http.NewRequest(cs.method, fmt.Sprintf("http://localhost:%d%s", s.Ports().ServerProxyPort, cs.path), strings.NewReader(requestBody)) - if err != nil { - t.Fatal(err) - } - resp, err := client.Do(req) - if err != nil { - t.Fatal(err) - } - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Error(err) - } - if string(body) != cs.body { - t.Errorf("response body: got %q, want %q", string(body), cs.body) - } - compareHeaders(t, s.LastRequestHeaders(), cs.request) - compareHeaders(t, resp.Header, cs.response) - }) - } - - // run the queries again to exercise caching - for _, cs := range testCases { - s.SetMixerRouteDirective(cs.directive) - req, _ := http.NewRequest(cs.method, fmt.Sprintf("http://localhost:%d%s", s.Ports().ServerProxyPort, cs.path), strings.NewReader(requestBody)) - _, _ = client.Do(req) + // run the queries twice to exercise caching + for i := 0; i < 2; i++ { + for _, cs := range testCases { + t.Run(cs.desc, func(t *testing.T) { + s.SetMixerCheckStatus(cs.status) + s.SetMixerRouteDirective(cs.directive) + req, err := http.NewRequest(cs.method, fmt.Sprintf("http://localhost:%d%s", s.Ports().ServerProxyPort, cs.path), strings.NewReader(requestBody)) + if err != nil { + t.Fatal(err) + } + resp, err := client.Do(req) + if err != nil { + t.Fatal(err) + } + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Error(err) + } + if string(body) != cs.body { + t.Errorf("response body: got %q, want %q", string(body), cs.body) + } + if resp.StatusCode != cs.code { + t.Errorf("response code: got %d, want %d", resp.StatusCode, cs.code) + } + compareHeaders(t, s.LastRequestHeaders(), cs.request) + compareHeaders(t, resp.Header, cs.response) + }) + } } s.VerifyStats(expectedStats) diff --git a/mixer/test/e2e/e2e_checkoutput_test.go b/mixer/test/e2e/e2e_checkoutput_test.go index bf089c698f30..bcfb2596d295 100644 --- a/mixer/test/e2e/e2e_checkoutput_test.go +++ b/mixer/test/e2e/e2e_checkoutput_test.go @@ -119,3 +119,70 @@ spec: }) } } + +func TestCheckElided(t *testing.T) { + tests := []testData{ + + { + name: "BasicCheckOutput", + cfg: ` +apiVersion: config.istio.io/v1alpha2 +kind: rule +metadata: + name: example + namespace: istio-system +spec: + actions: [] + requestHeaderOperations: + - name: x-istio + values: + - '"value1"' + - '"string0"' + operation: APPEND +--- +`, + attrs: map[string]interface{}{}, + behaviors: []spyadapter.AdapterBehavior{ + { + Name: "fakehandler", + Handler: spyadapter.HandlerBehavior{ + HandleCheckProducerOutput: &checkProducerTmpl.Output{ + StringPrimitive: "string0", + StringMap: map[string]string{ + "key1": "value1", + }, + }, + }, + }, + }, + templates: e2eTmpl.SupportedTmplInfo, + expectAttrRefs: []expectedAttrRef{{ + name: "destination.namespace", + condition: v1.ABSENCE, + }, { + name: "context.reporter.kind", + condition: v1.ABSENCE, + }}, + expectDirective: &v1.RouteDirective{ + RequestHeaderOperations: []v1.HeaderOperation{ + { + Name: "x-istio", + Value: "value1", + Operation: v1.APPEND, + }, + { + Name: "x-istio", + Value: "string0", + Operation: v1.APPEND, + }, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tt.run(t, v1beta1.TEMPLATE_VARIETY_CHECK, "") + }) + } +} diff --git a/mixer/test/spyAdapter/template/template.gen.go b/mixer/test/spyAdapter/template/template.gen.go index 2f99137bb937..ec68e97aa6e3 100644 --- a/mixer/test/spyAdapter/template/template.gen.go +++ b/mixer/test/spyAdapter/template/template.gen.go @@ -33,15 +33,15 @@ import ( "istio.io/istio/mixer/pkg/template" "istio.io/istio/pkg/log" - sampleapa "istio.io/istio/mixer/test/spyAdapter/template/apa" + "istio.io/istio/mixer/test/spyAdapter/template/apa" - samplecheck "istio.io/istio/mixer/test/spyAdapter/template/check" + "istio.io/istio/mixer/test/spyAdapter/template/check" - checkproducer "istio.io/istio/mixer/test/spyAdapter/template/checkoutput" + "istio.io/istio/mixer/test/spyAdapter/template/checkoutput" - samplequota "istio.io/istio/mixer/test/spyAdapter/template/quota" + "istio.io/istio/mixer/test/spyAdapter/template/quota" - samplereport "istio.io/istio/mixer/test/spyAdapter/template/report" + "istio.io/istio/mixer/test/spyAdapter/template/report" ) // Add void usages for some imports so that go linter does not complain in case the imports does not get used in the diff --git a/mixer/test/spybackend/nosession_integration_test.go b/mixer/test/spybackend/nosession_integration_test.go index 5986940c32f7..9679137a044d 100644 --- a/mixer/test/spybackend/nosession_integration_test.go +++ b/mixer/test/spybackend/nosession_integration_test.go @@ -21,12 +21,14 @@ import ( "testing" "time" + rpc "github.com/gogo/googleapis/google/rpc" "github.com/gogo/protobuf/types" "istio.io/api/mixer/adapter/model/v1beta1" istio_mixer_v1 "istio.io/api/mixer/v1" policy_v1beta1 "istio.io/api/policy/v1beta1" adapter_integration "istio.io/istio/mixer/pkg/adapter/test" + "istio.io/istio/mixer/pkg/status" sampleapa "istio.io/istio/mixer/test/spyAdapter/template/apa" checkproducer "istio.io/istio/mixer/test/spyAdapter/template/checkoutput" ) @@ -254,6 +256,7 @@ func TestNoSessionBackend(t *testing.T) { testdata := []struct { name string calls []adapter_integration.Call + status rpc.Status config []string want string }{ @@ -598,6 +601,59 @@ func TestNoSessionBackend(t *testing.T) { } `, }, + { + name: "check custom error", + calls: []adapter_integration.Call{ + { + CallKind: adapter_integration.CHECK, + Attrs: map[string]interface{}{}, + }, + }, + status: rpc.Status{ + Code: int32(rpc.DATA_LOSS), + Details: []*types.Any{status.PackErrorDetail(&policy_v1beta1.DirectHttpResponse{ + Code: policy_v1beta1.Unauthorized, + Body: "nope", + })}, + }, + want: ` +{ + "AdapterState": [ + { + "dedup_id": "stripped_for_test", + "instance": { + "name": "i3list.instance.istio-system", + "value": { + "Value": { + "StringValue": "defaultstr" + } + } + } + } + ], + "Returns": [ + { + "Check": { + "RouteDirective": { + "direct_response_body": "nope", + "direct_response_code": 401, + "request_header_operations": null, + "response_header_operations": null + }, + "Status": { + "code": 15, + "message": "h1.handler.istio-system:" + }, + "ValidDuration": 0, + "ValidUseCount": 31 + }, + "Error": null, + "Quota": null + } + ] +} + `, + }, { name: "single quota call with attributes", calls: []adapter_integration.Call{{ @@ -837,7 +893,10 @@ func TestNoSessionBackend(t *testing.T) { Setup: func() (interface{}, error) { args := DefaultArgs() args.Behavior.HandleMetricResult = &v1beta1.ReportResult{} - args.Behavior.HandleListEntryResult = &v1beta1.CheckResult{ValidUseCount: 31} + args.Behavior.HandleListEntryResult = &v1beta1.CheckResult{ + Status: td.status, + ValidUseCount: 31, + } args.Behavior.HandleQuotaResult = &v1beta1.QuotaResult{ Quotas: map[string]v1beta1.QuotaResult_Result{"requestQuota.instance.istio-system": {GrantedAmount: 32}}} // populate the APA output with all values diff --git a/pilot/cmd/pilot-agent/main.go b/pilot/cmd/pilot-agent/main.go index ab896c0496d8..f1673ba3989d 100644 --- a/pilot/cmd/pilot-agent/main.go +++ b/pilot/cmd/pilot-agent/main.go @@ -75,6 +75,9 @@ var ( disableInternalTelemetry bool loggingOptions = log.DefaultOptions() + // pilot agent config + kubeAppHTTPProbers string + rootCmd = &cobra.Command{ Use: "pilot-agent", Short: "Istio Pilot agent.", @@ -281,11 +284,15 @@ var ( return err } - statusServer := status.NewServer(status.Config{ - AdminPort: proxyAdminPort, - StatusPort: statusPort, - ApplicationPorts: parsedPorts, + statusServer, err := status.NewServer(status.Config{ + AdminPort: proxyAdminPort, + StatusPort: statusPort, + ApplicationPorts: parsedPorts, + KubeAppHTTPProbers: kubeAppHTTPProbers, }) + if err != nil { + return err + } go statusServer.Run(ctx) } @@ -417,6 +424,11 @@ func init() { "Port on which Envoy should listen for administrative commands") proxyCmd.PersistentFlags().StringVar(&controlPlaneAuthPolicy, "controlPlaneAuthPolicy", values.ControlPlaneAuthPolicy.String(), "Control Plane Authentication Policy") + proxyCmd.PersistentFlags().StringVar(&kubeAppHTTPProbers, status.KubeAppProberCmdFlagName, "", + "The json encoded string to pass app HTTP probe information from injector(istioctl or webhook). "+ + `For example, --kubeAppProberConfig='{"/app-health/httpbin/livez":{"path": "/hello", "port": 8080}'`+ + " indicates that httpbin container liveness prober port is 8080 and probing path is /hello. "+ + "This flag should never be set manually.") proxyCmd.PersistentFlags().StringVar(&customConfigFile, "customConfigFile", values.CustomConfigFile, "Path to the custom configuration file") // Log levels are provided by the library https://github.com/gabime/spdlog, used by Envoy. diff --git a/pilot/cmd/pilot-agent/status/server.go b/pilot/cmd/pilot-agent/status/server.go index 95c326080fef..97898a4e9725 100644 --- a/pilot/cmd/pilot-agent/status/server.go +++ b/pilot/cmd/pilot-agent/status/server.go @@ -16,10 +16,12 @@ package status import ( "context" + "encoding/json" "fmt" "net" "net/http" "os" + "regexp" "strconv" "strings" "sync" @@ -27,26 +29,35 @@ import ( "istio.io/istio/pilot/cmd/pilot-agent/status/ready" "istio.io/istio/pkg/log" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/intstr" ) const ( // readyPath is for the pilot agent readiness itself. readyPath = "/healthz/ready" - // IstioAppPortHeader is the header name to indicate the app port for health check. - IstioAppPortHeader = "istio-app-probe-port" + // KubeAppProberCmdFlagName is the name of the command line flag for pilot agent to pass app prober config. + KubeAppProberCmdFlagName = "kubeAppProberConfig" ) -// AppProbeInfo defines the information for Pilot agent to take over application probing. -type AppProbeInfo struct { - Path string - Port uint16 -} +var ( + appProberPattern = regexp.MustCompile(`^/app-health/[^\/]+/(livez|readyz)$`) +) + +// KubeAppProbers holds the information about a Kubernetes pod prober. +// It's a map from the prober URL path to the Kubernetes Prober config. +// For example, "/app-health/hello-world/livez" entry contains livenss prober config for +// container "hello-world". +type KubeAppProbers map[string]*corev1.HTTPGetAction // Config for the status server. type Config struct { StatusPort uint16 AdminPort uint16 ApplicationPorts []uint16 + // KubeAppHTTPProbers is a json with Kubernetes application HTTP prober config encoded. + KubeAppHTTPProbers string } // Server provides an endpoint for handling status probes. @@ -55,17 +66,34 @@ type Server struct { ready *ready.Probe mutex sync.RWMutex lastProbeSuccessful bool + appKubeProbers KubeAppProbers } // NewServer creates a new status server. -func NewServer(config Config) *Server { - return &Server{ +func NewServer(config Config) (*Server, error) { + s := &Server{ statusPort: config.StatusPort, ready: &ready.Probe{ AdminPort: config.AdminPort, ApplicationPorts: config.ApplicationPorts, }, } + if config.KubeAppHTTPProbers == "" { + return s, nil + } + if err := json.Unmarshal([]byte(config.KubeAppHTTPProbers), &s.appKubeProbers); err != nil { + return nil, fmt.Errorf("failed to decode app http prober err = %v, json string = %v", err, config.KubeAppHTTPProbers) + } + // Validate the map key matching the regex pattern. + for path, prober := range s.appKubeProbers { + if !appProberPattern.Match([]byte(path)) { + return nil, fmt.Errorf(`invalid key, must be in form of regex pattern ^/app-health/[^\/]+/(livez|readyz)$`) + } + if prober.Port.Type != intstr.Int { + return nil, fmt.Errorf("invalid prober config for %v, the port must be int type", path) + } + } + return s, nil } // Run opens a the status port and begins accepting probes. @@ -76,6 +104,8 @@ func (s *Server) Run(ctx context.Context) { http.HandleFunc(readyPath, s.handleReadyProbe) http.HandleFunc("/", s.handleAppProbe) + http.HandleFunc("/app-health", s.handleAppProbe) + l, err := net.Listen("tcp", fmt.Sprintf(":%d", s.statusPort)) if err != nil { log.Errorf("Error listening on status port: %v", err.Error()) @@ -123,33 +153,39 @@ func (s *Server) handleReadyProbe(w http.ResponseWriter, _ *http.Request) { } func (s *Server) handleAppProbe(w http.ResponseWriter, req *http.Request) { - appPort := req.Header.Get(IstioAppPortHeader) - if _, err := strconv.Atoi(appPort); err != nil { + // Validate the request first. + path := req.URL.Path + if !strings.HasPrefix(path, "/") { + path = "/" + req.URL.Path + } + prober, exists := s.appKubeProbers[path] + if !exists { + log.Errorf("Prober does not exists url %v", path) w.WriteHeader(http.StatusBadRequest) + w.Write([]byte(fmt.Sprintf("app prober config does not exists for %v", path))) return } + + // Construct a request sent to the application. httpClient := &http.Client{ // TODO: figure out the appropriate timeout? Timeout: 10 * time.Second, } - path := req.URL.Path - if !strings.HasPrefix(req.URL.Path, "/") { - path = "/" + req.URL.Path - } - url := fmt.Sprintf("http://127.0.0.1:%s%s", appPort, path) - appReq, err := http.NewRequest(req.Method, url, req.Body) - for key, value := range req.Header { - appReq.Header[key] = value - } - + url := fmt.Sprintf("http://127.0.0.1:%v%s", prober.Port.IntValue(), prober.Path) + appReq, err := http.NewRequest("GET", url, nil) if err != nil { - log.Errorf("Failed to copy request to probe app %v, url %v", err, path) + log.Errorf("Failed to create request to probe app %v, original url %v", err, path) w.WriteHeader(http.StatusInternalServerError) return } + for _, header := range prober.HTTPHeaders { + appReq.Header[header.Name] = []string{header.Value} + } + + // Send the request. response, err := httpClient.Do(appReq) if err != nil { - log.Errorf("Request to probe app failed: %v, url %v", err, path) + log.Errorf("Request to probe app failed: %v, original URL path = %v\napp URL path = %v", err, path, prober.Path) w.WriteHeader(http.StatusInternalServerError) return } diff --git a/pilot/cmd/pilot-agent/status/server_test.go b/pilot/cmd/pilot-agent/status/server_test.go index d07acd819d9f..bb13b6e69e59 100644 --- a/pilot/cmd/pilot-agent/status/server_test.go +++ b/pilot/cmd/pilot-agent/status/server_test.go @@ -17,40 +17,94 @@ package status import ( "context" "fmt" + "net" "net/http" + "strings" "testing" "time" - - "istio.io/istio/pilot/pkg/model" - "istio.io/istio/pkg/log" - "istio.io/istio/pkg/test/application" - "istio.io/istio/pkg/test/application/echo" ) -var ( - appPort uint16 -) +type handler struct{} -func init() { - appFactory := &echo.Factory{ - Ports: model.PortList{{ - Name: "http", - Protocol: model.ProtocolHTTP, - }}, - Version: "version-foo", +func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/hello/sunnyvale" && r.URL.Path != "/" { + w.WriteHeader(http.StatusBadRequest) + return } - app, err := appFactory.NewApplication(application.Dialer{HTTP: application.DefaultHTTPDoFunc}) - if err != nil { - log.Fatalf("Failed to create application %v", err) + w.Write([]byte("welcome, it works")) +} + +func TestNewServer(t *testing.T) { + testCases := []struct { + httpProbe string + err string + }{ + // Json can't be parsed. + { + httpProbe: "invalid-prober-json-encoding", + err: "failed to decode", + }, + // map key is not well formed. + { + httpProbe: `{"abc": {"path": "/app-foo/health"}}`, + err: "invalid key", + }, + // Port is not Int typed. + { + httpProbe: `{"/app-health/hello-world/readyz": {"path": "/hello/sunnyvale", "port": "container-port-dontknow"}}`, + err: "must be int type", + }, + // A valid input. + { + httpProbe: `{"/app-health/hello-world/readyz": {"path": "/hello/sunnyvale", "port": 8080},` + + `"/app-health/business/livez": {"path": "/buisiness/live", "port": 9090}}`, + }, + // A valid input with empty probing path, which happens when HTTPGetAction.Path is not specified. + { + httpProbe: `{"/app-health/hello-world/readyz": {"path": "/hello/sunnyvale", "port": 8080}, +"/app-health/business/livez": {"port": 9090}}`, + }, + } + for _, tc := range testCases { + _, err := NewServer(Config{ + KubeAppHTTPProbers: tc.httpProbe, + }) + + if err == nil { + if tc.err != "" { + t.Errorf("test case failed [%v], expect error %v", tc.httpProbe, tc.err) + } + continue + } + if tc.err == "" { + t.Errorf("test case failed [%v], expect no error, got %v", tc.httpProbe, err) + } + // error case, error string should match. + if !strings.Contains(err.Error(), tc.err) { + t.Errorf("test case failed [%v], expect error %v, got %v", tc.httpProbe, tc.err, err) + } } - log.Fatalf("application created %v", app.GetPorts()) - appPort = uint16(app.GetPorts()[0].Port) } func TestAppProbe(t *testing.T) { - server := NewServer(Config{ + // Starts the application first. + listener, err := net.Listen("tcp", ":0") + if err != nil { + t.Errorf("failed to allocate unused port %v", err) + } + go http.Serve(listener, &handler{}) + appPort := listener.Addr().(*net.TCPAddr).Port + + // Starts the pilot agent status server. + server, err := NewServer(Config{ StatusPort: 0, + KubeAppHTTPProbers: fmt.Sprintf(`{"/app-health/hello-world/readyz": {"path": "/hello/sunnyvale", "port": %v}, +"/app-health/hello-world/livez": {"port": %v}}`, appPort, appPort), }) + if err != nil { + t.Errorf("failed to create status server %v", err) + return + } go server.Run(context.Background()) // We wait a bit here to ensure server's statusPort is updated. @@ -61,19 +115,21 @@ func TestAppProbe(t *testing.T) { server.mutex.RUnlock() t.Logf("status server starts at port %v, app starts at port %v", statusPort, appPort) testCases := []struct { - probePath string - appPortHeader string - statusCode int - err string + probePath string + statusCode int + err string }{ { - probePath: fmt.Sprintf(":%v/", statusPort), - appPortHeader: fmt.Sprintf("%v", appPort), - statusCode: 200, + probePath: fmt.Sprintf(":%v/bad-path-should-be-disallowed", statusPort), + statusCode: http.StatusBadRequest, }, { - probePath: fmt.Sprintf(":%v/ill-formed-path", statusPort), - statusCode: 400, + probePath: fmt.Sprintf(":%v/app-health/hello-world/readyz", statusPort), + statusCode: http.StatusOK, + }, + { + probePath: fmt.Sprintf(":%v/app-health/hello-world/livez", statusPort), + statusCode: http.StatusOK, }, } for _, tc := range testCases { @@ -82,9 +138,6 @@ func TestAppProbe(t *testing.T) { if err != nil { t.Errorf("[%v] failed to create request", tc.probePath) } - if tc.appPortHeader != "" { - req.Header.Add(IstioAppPortHeader, tc.appPortHeader) - } resp, err := client.Do(req) if err != nil { t.Fatal("request failed") diff --git a/pilot/codecov.requirement b/pilot/codecov.requirement index 00d00dd822e5..0ce52716b5ca 100644 --- a/pilot/codecov.requirement +++ b/pilot/codecov.requirement @@ -16,6 +16,7 @@ istio.io/istio/pilot/pkg/model:83 [85.8] istio.io/istio/pilot/pkg/model/test:0 [0] istio.io/istio/pilot/pkg/proxy:95 [98.8] istio.io/istio/pilot/pkg/proxy/envoy:72 [75.4] +istio.io/istio/pilot/pkg/proxy/envoy/v2:30 [32] istio.io/istio/pilot/pkg/serviceregistry:0 [0] istio.io/istio/pilot/pkg/serviceregistry/consul:40 [43.6] istio.io/istio/pilot/pkg/serviceregistry/kube:60 [63.8] diff --git a/pilot/pkg/bootstrap/server.go b/pilot/pkg/bootstrap/server.go index 5164685bc10f..72e870c48d1a 100644 --- a/pilot/pkg/bootstrap/server.go +++ b/pilot/pkg/bootstrap/server.go @@ -391,7 +391,10 @@ func (s *Server) initMesh(args *PilotArgs) error { //TODO Need to re-create or reload initConfigController() } s.mesh = mesh - s.EnvoyXdsServer.ConfigUpdate(true) + if s.EnvoyXdsServer != nil { + s.EnvoyXdsServer.Env.Mesh = mesh + s.EnvoyXdsServer.ConfigUpdate(true) + } } }) } @@ -410,6 +413,11 @@ func (s *Server) initMesh(args *PilotArgs) error { } } + if err = model.ValidateMeshConfig(mesh); err != nil { + log.Errorf("invalid mesh configuration: %v", err) + return err + } + log.Infof("mesh configuration %s", spew.Sdump(mesh)) log.Infof("version %s", version.Info.String()) log.Infof("flags %s", spew.Sdump(args)) @@ -450,7 +458,13 @@ func (s *Server) initMeshNetworks(args *PilotArgs) error { log.Infof("mesh networks configuration file updated to: %s", spew.Sdump(meshNetworks)) util.ResolveHostsInNetworksConfig(s.meshNetworks) s.meshNetworks = meshNetworks - s.EnvoyXdsServer.ConfigUpdate(true) + if s.kubeRegistry != nil { + s.kubeRegistry.InitNetworkLookup(meshNetworks) + } + if s.EnvoyXdsServer != nil { + s.EnvoyXdsServer.Env.MeshNetworks = meshNetworks + s.EnvoyXdsServer.ConfigUpdate(true) + } } }) diff --git a/pilot/pkg/kube/inject/app_probe.go b/pilot/pkg/kube/inject/app_probe.go index d31cffc5c61d..3b8df39ff1f5 100644 --- a/pilot/pkg/kube/inject/app_probe.go +++ b/pilot/pkg/kube/inject/app_probe.go @@ -15,11 +15,13 @@ package inject import ( + "encoding/json" "fmt" "regexp" "strconv" "strings" + "github.com/gogo/protobuf/proto" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/intstr" @@ -43,77 +45,91 @@ var ( statusPortPattern = regexp.MustCompile(fmt.Sprintf(`^-{1,2}%s(=(?P\d+))?$`, StatusPortCmdFlagName)) ) +// extractStatusPort accepts the sidecar container spec and returns its port for healthiness probing. +func extractStatusPort(sidecar *corev1.Container) int { + for i, arg := range sidecar.Args { + // Skip for unrelated args. + match := statusPortPattern.FindAllStringSubmatch(strings.TrimSpace(arg), -1) + if len(match) != 1 { + continue + } + groups := statusPortPattern.SubexpNames() + portStr := "" + for ind, s := range match[0] { + if groups[ind] == "port" { + portStr = s + break + } + } + // Port not found from current arg, extract from next arg. + if portStr == "" { + // Matches the regex pattern, but without actual values provided. + if len(sidecar.Args) <= i+1 { + log.Errorf("No statusPort value provided, skip app probe rewriting") + return -1 + } + portStr = sidecar.Args[i+1] + } + p, err := strconv.Atoi(portStr) + if err != nil { + log.Errorf("Failed to convert statusPort to int %v, err %v", portStr, err) + return -1 + } + return p + } + return -1 +} + +// rewriteProbe changes application containers' probe to point to sidecar's status port. +func rewriteProbe(probe *corev1.Probe, appProbers *status.KubeAppProbers, + newURL string, statusPort int, portMap map[string]int32) { + if probe == nil || probe.HTTPGet == nil { + return + } + httpGet := probe.HTTPGet + + // Save app probe config to pass to pilot agent later. + savedProbe := proto.Clone(probe.HTTPGet).(*corev1.HTTPGetAction) + (*appProbers)[newURL] = savedProbe + // A named port, resolve by looking at port map. + if httpGet.Port.Type == intstr.String { + port, exists := portMap[httpGet.Port.StrVal] + if !exists { + log.Errorf("named port not found in the map skip rewriting probing %v", *probe) + return + } + savedProbe.Port = intstr.FromInt(int(port)) + } + // Change the application csince ontainer prober config. + httpGet.Port = intstr.FromInt(statusPort) + httpGet.Path = newURL +} + func rewriteAppHTTPProbe(spec *SidecarInjectionSpec, podSpec *corev1.PodSpec) { - statusPort := -1 if spec == nil || podSpec == nil { return } if !spec.RewriteAppHTTPProbe { return } - for _, c := range spec.Containers { - if c.Name != istioProxyContainerName { - continue - } - for i, arg := range c.Args { - // Skip for unrelated args. - match := statusPortPattern.FindAllStringSubmatch(strings.TrimSpace(arg), -1) - if len(match) != 1 { - continue - } - groups := statusPortPattern.SubexpNames() - portStr := "" - for ind, s := range match[0] { - if groups[ind] == "port" { - portStr = s - break - } - } - // Port not found from current arg, extract from next arg. - if portStr == "" { - // Matches the regex pattern, but without actual values provided. - if len(c.Args) <= i+1 { - log.Errorf("No statusPort value provided, skip app probe rewriting") - return - } - portStr = c.Args[i+1] - } - p, err := strconv.Atoi(portStr) - if err != nil { - log.Errorf("Failed to convert statusPort to int %v, err %v", portStr, err) - return - } - statusPort = p + var sidecar *corev1.Container + for i := range podSpec.Containers { + if podSpec.Containers[i].Name == istioProxyContainerName { + sidecar = &podSpec.Containers[i] break } } + if sidecar == nil { + return + } + + statusPort := extractStatusPort(sidecar) // Pilot agent statusPort is not defined, skip changing application http probe. if statusPort == -1 { return } - // Change the application containers' probe to point to sidecar's status port. - rewriteProbe := func(probe *corev1.Probe, portMap map[string]int32) { - if probe == nil || probe.HTTPGet == nil { - return - } - httpGet := probe.HTTPGet - header := corev1.HTTPHeader{ - Name: status.IstioAppPortHeader, - Value: httpGet.Port.String(), - } - // A named port, resolve by looking at port map. - if httpGet.Port.Type == intstr.String { - port, exists := portMap[httpGet.Port.StrVal] - if !exists { - log.Errorf("named port not found in the map skip rewriting probing %v", *probe) - return - } - header.Value = strconv.Itoa(int(port)) - } - httpGet.HTTPHeaders = append(httpGet.HTTPHeaders, header) - httpGet.Port = intstr.FromInt(statusPort) - } + appProberInfo := status.KubeAppProbers{} for _, c := range podSpec.Containers { // Skip sidecar container. if c.Name == istioProxyContainerName { @@ -123,7 +139,16 @@ func rewriteAppHTTPProbe(spec *SidecarInjectionSpec, podSpec *corev1.PodSpec) { for _, p := range c.Ports { portMap[p.Name] = p.ContainerPort } - rewriteProbe(c.ReadinessProbe, portMap) - rewriteProbe(c.LivenessProbe, portMap) + rewriteProbe(c.ReadinessProbe, &appProberInfo, fmt.Sprintf("/app-health/%v/readyz", c.Name), statusPort, portMap) + rewriteProbe(c.LivenessProbe, &appProberInfo, fmt.Sprintf("/app-health/%v/livez", c.Name), statusPort, portMap) + } + + // Finally propagate app prober config to `istio-proxy` through command line flag. + b, err := json.Marshal(appProberInfo) + if err != nil { + log.Errorf("failed to serialize the app prober config %v", err) + return } + // We don't have to escape json encoding here when using golang libraries. + sidecar.Args = append(sidecar.Args, []string{fmt.Sprintf("--%v", status.KubeAppProberCmdFlagName), string(b)}...) } diff --git a/pilot/pkg/kube/inject/app_probe_test.go b/pilot/pkg/kube/inject/app_probe_test.go index e09aca3d737a..2748f016219e 100644 --- a/pilot/pkg/kube/inject/app_probe_test.go +++ b/pilot/pkg/kube/inject/app_probe_test.go @@ -68,18 +68,16 @@ func TestRewriteAppHTTPProbe(t *testing.T) { Containers: []corev1.Container{ { Name: "istio-proxy", - Args: []string{"--foo", "--statusPort", "15020"}, + Args: []string{"--foo", "--statusPort", "15020", + "--kubeAppProberConfig", `{"/app-health/app/readyz":{"path":"/ready","port":8000}}`}, }, { Name: "app", ReadinessProbe: &corev1.Probe{ Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ - Path: "/ready", + Path: "/app-health/app/readyz", Port: intstr.FromInt(15020), - HTTPHeaders: []corev1.HTTPHeader{ - {Name: "istio-app-probe-port", Value: "8000"}, - }, }, }, }, @@ -129,29 +127,24 @@ func TestRewriteAppHTTPProbe(t *testing.T) { Containers: []corev1.Container{ { Name: "istio-proxy", - Args: []string{"--foo", "--statusPort", "15020"}, + Args: []string{"--foo", "--statusPort", "15020", + "--kubeAppProberConfig", `{"/app-health/app/livez":{"path":"/live","port":8000},"/app-health/app/readyz":{"path":"/ready","port":8000}}`}, }, { Name: "app", ReadinessProbe: &corev1.Probe{ Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ - Path: "/ready", + Path: "/app-health/app/readyz", Port: intstr.FromInt(15020), - HTTPHeaders: []corev1.HTTPHeader{ - {Name: "istio-app-probe-port", Value: "8000"}, - }, }, }, }, LivenessProbe: &corev1.Probe{ Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ - Path: "/live", + Path: "/app-health/app/livez", Port: intstr.FromInt(15020), - HTTPHeaders: []corev1.HTTPHeader{ - {Name: "istio-app-probe-port", Value: "8000"}, - }, }, }, }, @@ -243,18 +236,16 @@ func TestRewriteAppHTTPProbe(t *testing.T) { Containers: []corev1.Container{ { Name: "istio-proxy", - Args: []string{"--foo", "-statusPort=15020"}, + Args: []string{"--foo", "-statusPort=15020", + "--kubeAppProberConfig", `{"/app-health/app/readyz":{"path":"/ready","port":8000}}`}, }, { Name: "app", ReadinessProbe: &corev1.Probe{ Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ - Path: "/ready", + Path: "/app-health/app/readyz", Port: intstr.FromInt(15020), - HTTPHeaders: []corev1.HTTPHeader{ - {Name: "istio-app-probe-port", Value: "8000"}, - }, }, }, }, @@ -296,18 +287,16 @@ func TestRewriteAppHTTPProbe(t *testing.T) { Containers: []corev1.Container{ { Name: "istio-proxy", - Args: []string{"--foo", "--statusPort=15020"}, + Args: []string{"--foo", "--statusPort=15020", + "--kubeAppProberConfig", `{"/app-health/app/readyz":{"path":"/ready","port":8000}}`}, }, { Name: "app", ReadinessProbe: &corev1.Probe{ Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ - Path: "/ready", + Path: "/app-health/app/readyz", Port: intstr.FromInt(15020), - HTTPHeaders: []corev1.HTTPHeader{ - {Name: "istio-app-probe-port", Value: "8000"}, - }, }, }, }, @@ -360,18 +349,16 @@ func TestRewriteAppHTTPProbe(t *testing.T) { Containers: []corev1.Container{ { Name: "istio-proxy", - Args: []string{"--foo", "--statusPort", "15020"}, + Args: []string{"--foo", "--statusPort", "15020", + "--kubeAppProberConfig", `{"/app-health/app1/readyz":{"path":"/ready","port":8000},"/app-health/app2/readyz":{"path":"/ready","port":9000}}`}, }, { Name: "app1", ReadinessProbe: &corev1.Probe{ Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ - Path: "/ready", + Path: "/app-health/app1/readyz", Port: intstr.FromInt(15020), - HTTPHeaders: []corev1.HTTPHeader{ - {Name: "istio-app-probe-port", Value: "8000"}, - }, }, }, }, @@ -381,11 +368,8 @@ func TestRewriteAppHTTPProbe(t *testing.T) { ReadinessProbe: &corev1.Probe{ Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ - Path: "/ready", + Path: "/app-health/app2/readyz", Port: intstr.FromInt(15020), - HTTPHeaders: []corev1.HTTPHeader{ - {Name: "istio-app-probe-port", Value: "9000"}, - }, }, }, }, diff --git a/pilot/pkg/kube/inject/inject.go b/pilot/pkg/kube/inject/inject.go index 18c7885e9f37..b1e37ba154d9 100644 --- a/pilot/pkg/kube/inject/inject.go +++ b/pilot/pkg/kube/inject/inject.go @@ -32,7 +32,9 @@ import ( "github.com/ghodss/yaml" "github.com/gogo/protobuf/types" + multierror "github.com/hashicorp/go-multierror" + "k8s.io/api/batch/v2alpha1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -42,6 +44,7 @@ import ( yamlDecoder "k8s.io/apimachinery/pkg/util/yaml" meshconfig "istio.io/api/mesh/v1alpha1" + "istio.io/istio/pilot/pkg/model" "istio.io/istio/pkg/log" ) @@ -301,8 +304,9 @@ func validateInterceptionMode(mode string) error { switch mode { case meshconfig.ProxyConfig_REDIRECT.String(): case meshconfig.ProxyConfig_TPROXY.String(): + case string(model.InterceptionNone): // not a global mesh config - must be enabled for each sidecar default: - return fmt.Errorf("interceptionMode invalid: %v", mode) + return fmt.Errorf("interceptionMode invalid, use REDIRECT,TPROXY,NONE: %v", mode) } return nil } diff --git a/pilot/pkg/kube/inject/testdata/inject/hello-probes.yaml.injected b/pilot/pkg/kube/inject/testdata/inject/hello-probes.yaml.injected index d49a3828f011..b0f373310dad 100644 --- a/pilot/pkg/kube/inject/testdata/inject/hello-probes.yaml.injected +++ b/pilot/pkg/kube/inject/testdata/inject/hello-probes.yaml.injected @@ -20,9 +20,7 @@ spec: - image: fake.docker.io/google-samples/hello-go-gke:1.0 livenessProbe: httpGet: - httpHeaders: - - name: istio-app-probe-port - value: "80" + path: /app-health/hello/livez port: 15020 name: hello ports: @@ -30,17 +28,13 @@ spec: name: http readinessProbe: httpGet: - httpHeaders: - - name: istio-app-probe-port - value: "3333" + path: /app-health/hello/readyz port: 15020 resources: {} - image: fake.docker.io/google-samples/hello-go-gke:1.0 livenessProbe: httpGet: - httpHeaders: - - name: istio-app-probe-port - value: "90" + path: /app-health/world/livez port: 15020 name: world ports: @@ -79,6 +73,8 @@ spec: - "15020" - --applicationPorts - 80,90 + - --kubeAppProberConfig + - '{"/app-health/hello/livez":{"port":80},"/app-health/hello/readyz":{"port":3333},"/app-health/world/livez":{"port":90}}' env: - name: POD_NAME valueFrom: diff --git a/pilot/pkg/kube/inject/testdata/inject/hello-readiness-multi.yaml.injected b/pilot/pkg/kube/inject/testdata/inject/hello-readiness-multi.yaml.injected index af89f6ba50b5..40ed317b671f 100644 --- a/pilot/pkg/kube/inject/testdata/inject/hello-readiness-multi.yaml.injected +++ b/pilot/pkg/kube/inject/testdata/inject/hello-readiness-multi.yaml.injected @@ -24,10 +24,7 @@ spec: name: http readinessProbe: httpGet: - httpHeaders: - - name: istio-app-probe-port - value: "8000" - path: /ip + path: /app-health/hello/readyz port: 15020 resources: {} - image: fake.docker.io/google-samples/hello-go-gke:1.0 @@ -37,10 +34,7 @@ spec: name: http readinessProbe: httpGet: - httpHeaders: - - name: istio-app-probe-port - value: "9000" - path: /ipv6 + path: /app-health/world/readyz port: 15020 resources: {} - args: @@ -70,6 +64,8 @@ spec: - "15020" - --applicationPorts - 80,90 + - --kubeAppProberConfig + - '{"/app-health/hello/readyz":{"path":"/ip","port":8000},"/app-health/world/readyz":{"path":"/ipv6","port":9000}}' env: - name: POD_NAME valueFrom: diff --git a/pilot/pkg/kube/inject/testdata/inject/hello-readiness.yaml.injected b/pilot/pkg/kube/inject/testdata/inject/hello-readiness.yaml.injected index ec6d60591294..f55a72f91f2a 100644 --- a/pilot/pkg/kube/inject/testdata/inject/hello-readiness.yaml.injected +++ b/pilot/pkg/kube/inject/testdata/inject/hello-readiness.yaml.injected @@ -24,10 +24,7 @@ spec: name: http readinessProbe: httpGet: - httpHeaders: - - name: istio-app-probe-port - value: "8000" - path: /ip + path: /app-health/hello/readyz port: 15020 resources: {} - args: @@ -57,6 +54,8 @@ spec: - "15020" - --applicationPorts - "80" + - --kubeAppProberConfig + - '{"/app-health/hello/readyz":{"path":"/ip","port":8000}}' env: - name: POD_NAME valueFrom: diff --git a/pilot/pkg/kube/inject/webhook.go b/pilot/pkg/kube/inject/webhook.go index c605a0231eef..b5720594e3c2 100644 --- a/pilot/pkg/kube/inject/webhook.go +++ b/pilot/pkg/kube/inject/webhook.go @@ -36,6 +36,7 @@ import ( meshconfig "istio.io/api/mesh/v1alpha1" "istio.io/istio/pilot/cmd" + "istio.io/istio/pilot/pkg/model" "istio.io/istio/pkg/log" ) @@ -87,6 +88,10 @@ func loadConfig(injectFile, meshFile string) (*Config, *meshconfig.MeshConfig, e if err != nil { return nil, nil, err } + err = model.ValidateMeshConfig(meshConfig) + if err != nil { + return nil, nil, err + } log.Infof("New configuration: sha256sum %x", sha256.Sum256(data)) log.Infof("Policy: %v", c.Policy) diff --git a/pilot/pkg/model/config.go b/pilot/pkg/model/config.go index fe7214a6f26f..f39227231640 100644 --- a/pilot/pkg/model/config.go +++ b/pilot/pkg/model/config.go @@ -587,6 +587,32 @@ func ResolveShortnameToFQDN(host string, meta ConfigMeta) Hostname { return Hostname(out) } +// resolveGatewayName uses metadata information to resolve a reference +// to shortname of the gateway to FQDN +func resolveGatewayName(gwname string, meta ConfigMeta) string { + out := gwname + + // New way of binding to a gateway in remote namespace + // is ns/name. Old way is either FQDN or short name + if !strings.Contains(gwname, "/") { + if !strings.Contains(gwname, ".") { + // we have a short name. Resolve to a gateway in same namespace + out = fmt.Sprintf("%s/%s", meta.Namespace, gwname) + } else { + // parse namespace from FQDN. This is very hacky, but meant for backward compatibility only + parts := strings.Split(gwname, ".") + out = fmt.Sprintf("%s/%s", parts[1], parts[0]) + } + } else { + // remove the . from ./gateway and substitute it with the namespace name + parts := strings.Split(gwname, "/") + if parts[0] == "." { + out = fmt.Sprintf("%s/%s", meta.Namespace, parts[1]) + } + } + return out +} + // MostSpecificHostMatch compares the elements of the stack to the needle, and returns the longest stack element // matching the needle, or false if no element in the stack matches the needle. func MostSpecificHostMatch(needle Hostname, stack []Hostname) (Hostname, bool) { diff --git a/pilot/pkg/model/context.go b/pilot/pkg/model/context.go index 219355a623e3..c98b4addb22c 100644 --- a/pilot/pkg/model/context.go +++ b/pilot/pkg/model/context.go @@ -21,6 +21,7 @@ import ( "strings" "time" + "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" "github.com/gogo/protobuf/types" multierror "github.com/hashicorp/go-multierror" @@ -86,6 +87,9 @@ type Proxy struct { // namespace. ID string + // Locality is the location of where Envoy proxy runs. + Locality Locality + // DNSDomain defines the DNS domain suffix for short hostnames (e.g. // "default.svc.cluster.local") DNSDomain string @@ -268,7 +272,7 @@ func GetProxyConfigNamespace(proxy *Proxy) string { // First look for ISTIO_META_CONFIG_NAMESPACE // All newer proxies (from Istio 1.1 onwards) are supposed to supply this - if configNamespace, found := proxy.Metadata[NodeConfigNamespace]; found { + if configNamespace, found := proxy.Metadata[NodeMetadataConfigNamespace]; found { return configNamespace } @@ -282,6 +286,19 @@ func GetProxyConfigNamespace(proxy *Proxy) string { return "" } +// GetProxyLocality returns the locality where Envoy proxy is running. +func GetProxyLocality(proxy *core.Node) *Locality { + if proxy == nil || proxy.Locality == nil { + return nil + } + + return &Locality{ + Region: proxy.Locality.Region, + Zone: proxy.Locality.Zone, + SubZone: proxy.Locality.SubZone, + } +} + const ( serviceNodeSeparator = "~" @@ -468,9 +485,13 @@ const ( // traffic interception mode at the proxy NodeMetadataInterceptionMode = "INTERCEPTION_MODE" - // NodeConfigNamespace is the name of the metadata variable that carries info about + // NodeMetadataConfigNamespace is the name of the metadata variable that carries info about // the config namespace associated with the proxy - NodeConfigNamespace = "CONFIG_NAMESPACE" + NodeMetadataConfigNamespace = "CONFIG_NAMESPACE" + + // NodeMetadataSidecarUID is the user ID running envoy. Pilot can check if envoy runs as root, and may generate + // different configuration. If not set, the default istio-proxy UID (1337) is assumed. + NodeMetadataSidecarUID = "SIDECAR_UID" ) // TrafficInterceptionMode indicates how traffic to/from the workload is captured and diff --git a/pilot/pkg/model/gateway.go b/pilot/pkg/model/gateway.go index 8ade5ea81a25..77f81b95aef1 100644 --- a/pilot/pkg/model/gateway.go +++ b/pilot/pkg/model/gateway.go @@ -48,8 +48,8 @@ func MergeGateways(gateways ...Config) *MergedGateway { log.Debugf("MergeGateways: merging %d gateways", len(gateways)) for _, spec := range gateways { - name := ResolveShortnameToFQDN(spec.Name, spec.ConfigMeta) - names[string(name)] = true + name := fmt.Sprintf("%s/%s", spec.Namespace, spec.Name) + names[name] = true gateway := spec.Spec.(*networking.Gateway) log.Debugf("MergeGateways: merging gateway %q into %v:\n%v", name, names, gateway) diff --git a/pilot/pkg/model/locality.go b/pilot/pkg/model/locality.go new file mode 100644 index 000000000000..1f0bdc647e28 --- /dev/null +++ b/pilot/pkg/model/locality.go @@ -0,0 +1,61 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package model + +type LocalityInterface interface { + GetRegion() string + GetZone() string + GetSubZone() string +} + +// Identifies location of where either Envoy runs or where upstream hosts run. +type Locality struct { + // Region this proxy belongs to. + Region string + // Defines the local service zone where Envoy is running. Though optional, it + // should be set if discovery service routing is used and the discovery + // service exposes :ref:`zone data `, + // either in this message or via :option:`--service-zone`. The meaning of zone + // is context dependent, e.g. `Availability Zone (AZ) + // `_ + // on AWS, `Zone `_ on + // GCP, etc. + Zone string + // When used for locality of upstream hosts, this field further splits zone + // into smaller chunks of sub-zones so they can be load balanced + // independently. + SubZone string +} + +func (l *Locality) GetRegion() string { + if l != nil { + return l.Region + } + return "" +} + +func (l *Locality) GetZone() string { + if l != nil { + return l.Zone + } + return "" +} + +func (l *Locality) GetSubZone() string { + if l != nil { + return l.SubZone + } + return "" +} diff --git a/pilot/pkg/model/push_context.go b/pilot/pkg/model/push_context.go index 256439cdafbf..dc2cd01d9b25 100644 --- a/pilot/pkg/model/push_context.go +++ b/pilot/pkg/model/push_context.go @@ -54,10 +54,15 @@ type PushContext struct { privateVirtualServicesByNamespace map[string][]Config publicVirtualServices []Config - privateDestRuleHostsByNamespace map[string][]Hostname - privateDestRuleByHostByNamespace map[string]map[Hostname]*combinedDestinationRule - publicDestRuleHosts []Hostname - publicDestRuleByHost map[Hostname]*combinedDestinationRule + // destination rules are of three types: + // namespaceLocalDestRules: all public/private dest rules pertaining to a service defined in a given namespace + // namespaceExportedDestRules: all public dest rules pertaining to a service defined in a namespace + // allExportedDestRules: all (public) dest rules across all namespaces + // We need the allExportedDestRules in addition to namespaceExportedDestRules because we select + // the dest rule based on the most specific host match, and not just any destination rule + namespaceLocalDestRules map[string]*processedDestRules + namespaceExportedDestRules map[string]*processedDestRules + allExportedDestRules *processedDestRules // sidecars for each namespace sidecarsByNamespace map[string][]*SidecarScope @@ -85,6 +90,13 @@ type PushContext struct { initDone bool } +type processedDestRules struct { + // List of dest rule hosts. We match with the most specific host first + hosts []Hostname + // Map of dest rule host and the merged destination rules for that host + destRule map[Hostname]*combinedDestinationRule +} + // XDSUpdater is used for direct updates of the xDS model and incremental push. // Pilot uses multiple registries - for example each K8S cluster is a registry instance, // as well as consul and future EDS or MCP sources. Each registry is responsible for @@ -277,11 +289,13 @@ func NewPushContext() *PushContext { privateServicesByNamespace: map[string][]*Service{}, publicVirtualServices: []Config{}, privateVirtualServicesByNamespace: map[string][]Config{}, - publicDestRuleByHost: map[Hostname]*combinedDestinationRule{}, - publicDestRuleHosts: []Hostname{}, - privateDestRuleByHostByNamespace: map[string]map[Hostname]*combinedDestinationRule{}, - privateDestRuleHostsByNamespace: map[string][]Hostname{}, - sidecarsByNamespace: map[string][]*SidecarScope{}, + namespaceLocalDestRules: map[string]*processedDestRules{}, + namespaceExportedDestRules: map[string]*processedDestRules{}, + allExportedDestRules: &processedDestRules{ + hosts: make([]Hostname, 0), + destRule: map[Hostname]*combinedDestinationRule{}, + }, + sidecarsByNamespace: map[string][]*SidecarScope{}, ServiceByHostname: map[Hostname]*Service{}, ProxyStatus: map[string]map[string]ProxyPushStatus{}, @@ -401,7 +415,7 @@ func (ps *PushContext) VirtualServices(proxy *Proxy, gateways map[string]bool) [ } else { for _, g := range rule.Gateways { // note: Gateway names do _not_ use wildcard matching, so we do not use Hostname.Matches here - if gateways[string(ResolveShortnameToFQDN(g, config.ConfigMeta))] { + if gateways[resolveGatewayName(g, config.ConfigMeta)] { out = append(out, config) break } else if g == IstioMeshGateway && gateways[g] { @@ -480,8 +494,19 @@ func (ps *PushContext) GetAllSidecarScopes() map[string][]*SidecarScope { return ps.sidecarsByNamespace } +// ServicePort returns the port model for the given service and port. +func (ps *PushContext) ServicePort(hostname Hostname, port int) *Port { + portList := ps.ServicePort2Name[string(hostname)] + for i := range portList { + if portList[i] != nil && portList[i].Port == port { + return portList[i] + } + } + return nil +} + // DestinationRule returns a destination rule for a service name in a given domain. -func (ps *PushContext) DestinationRule(proxy *Proxy, hostname Hostname) *Config { +func (ps *PushContext) DestinationRule(proxy *Proxy, service *Service) *Config { // If proxy has a sidecar scope that is user supplied, then get the destination rules from the sidecar scope // sidecarScope.config is nil if there is no sidecar scope for the namespace // TODO: This is a temporary gate until the sidecar implementation is stable. Once its stable, remove the @@ -489,28 +514,45 @@ func (ps *PushContext) DestinationRule(proxy *Proxy, hostname Hostname) *Config if proxy != nil && proxy.SidecarScope != nil && proxy.SidecarScope.Config != nil && proxy.Type == SidecarProxy { // If there is a sidecar scope for this proxy, return the destination rule // from the sidecar scope. - return proxy.SidecarScope.DestinationRule(hostname) + return proxy.SidecarScope.DestinationRule(service.Hostname) } + // FIXME: this code should be removed once the EDS issue is fixed if proxy == nil { - for ns, privateDestHosts := range ps.privateDestRuleHostsByNamespace { - if host, ok := MostSpecificHostMatch(hostname, privateDestHosts); ok { - return ps.privateDestRuleByHostByNamespace[ns][host].config + // look for dest rules across all namespaces public/private + for _, processedDestRulesForNamespace := range ps.namespaceLocalDestRules { + if host, ok := MostSpecificHostMatch(service.Hostname, processedDestRulesForNamespace.hosts); ok { + return processedDestRulesForNamespace.destRule[host].config } } - if host, ok := MostSpecificHostMatch(hostname, ps.publicDestRuleHosts); ok { - return ps.publicDestRuleByHost[host].config + + if host, ok := MostSpecificHostMatch(service.Hostname, ps.allExportedDestRules.hosts); ok { + return ps.allExportedDestRules.destRule[host].config } return nil } - // take private DestinationRule in same namespace first - if host, ok := MostSpecificHostMatch(hostname, ps.privateDestRuleHostsByNamespace[proxy.ConfigNamespace]); ok { - return ps.privateDestRuleByHostByNamespace[proxy.ConfigNamespace][host].config + + // search through the DestinationRules in proxy's namespace first + if ps.namespaceLocalDestRules[proxy.ConfigNamespace] != nil { + if host, ok := MostSpecificHostMatch(service.Hostname, + ps.namespaceLocalDestRules[proxy.ConfigNamespace].hosts); ok { + return ps.namespaceLocalDestRules[proxy.ConfigNamespace].destRule[host].config + } + } + + // if no private/public rule matched in the calling proxy's namespace, + // check the target service's namespace for public rules + if service.Attributes.Namespace != "" && ps.namespaceExportedDestRules[service.Attributes.Namespace] != nil { + if host, ok := MostSpecificHostMatch(service.Hostname, + ps.namespaceExportedDestRules[service.Attributes.Namespace].hosts); ok { + return ps.namespaceExportedDestRules[service.Attributes.Namespace].destRule[host].config + } } - // if no private rule matched, then match public rule - if host, ok := MostSpecificHostMatch(hostname, ps.publicDestRuleHosts); ok { - return ps.publicDestRuleByHost[host].config + // if no public/private rule in calling proxy's namespace matched, and no public rule in the + // target service's namespace matched, search for any public destination rule across all namespaces + if host, ok := MostSpecificHostMatch(service.Hostname, ps.allExportedDestRules.hosts); ok { + return ps.allExportedDestRules.destRule[host].config } return nil @@ -525,7 +567,7 @@ func (ps *PushContext) SubsetToLabels(subsetName string, hostname Hostname) Labe // TODO: This code is incorrect as a proxy with sidecarScope could have a different // destination rule than the default one. EDS should be computed per sidecar scope - config := ps.DestinationRule(nil, hostname) + config := ps.DestinationRule(nil, &Service{Hostname: hostname}) if config == nil { return nil } @@ -634,7 +676,7 @@ func (ps *PushContext) initVirtualServices(env *Environment) error { // resolve gateways to bind to for i, g := range rule.Gateways { if g != IstioMeshGateway { - rule.Gateways[i] = string(ResolveShortnameToFQDN(g, r.ConfigMeta)) + rule.Gateways[i] = resolveGatewayName(g, r.ConfigMeta) } } // resolve host in http route.destination, route.mirror @@ -642,7 +684,7 @@ func (ps *PushContext) initVirtualServices(env *Environment) error { for _, m := range d.Match { for i, g := range m.Gateways { if g != IstioMeshGateway { - m.Gateways[i] = string(ResolveShortnameToFQDN(g, r.ConfigMeta)) + m.Gateways[i] = resolveGatewayName(g, r.ConfigMeta) } } } @@ -658,7 +700,7 @@ func (ps *PushContext) initVirtualServices(env *Environment) error { for _, m := range d.Match { for i, g := range m.Gateways { if g != IstioMeshGateway { - m.Gateways[i] = string(ResolveShortnameToFQDN(g, r.ConfigMeta)) + m.Gateways[i] = resolveGatewayName(g, r.ConfigMeta) } } } @@ -671,7 +713,7 @@ func (ps *PushContext) initVirtualServices(env *Environment) error { for _, m := range tls.Match { for i, g := range m.Gateways { if g != IstioMeshGateway { - m.Gateways[i] = string(ResolveShortnameToFQDN(g, r.ConfigMeta)) + m.Gateways[i] = resolveGatewayName(g, r.ConfigMeta) } } } @@ -753,39 +795,70 @@ func (ps *PushContext) SetDestinationRules(configs []Config) { // Sort by time first. So if two destination rule have top level traffic policies // we take the first one. sortConfigByCreationTime(configs) - privateHostsByNamespace := make(map[string][]Hostname, 0) - privateCombinedDestRuleMap := make(map[string]map[Hostname]*combinedDestinationRule, 0) - publicHosts := make([]Hostname, 0) - publicCombinedDestRuleMap := make(map[Hostname]*combinedDestinationRule, 0) + namespaceLocalDestRules := make(map[string]*processedDestRules) + namespaceExportedDestRules := make(map[string]*processedDestRules) + allExportedDestRules := &processedDestRules{ + hosts: make([]Hostname, 0), + destRule: map[Hostname]*combinedDestinationRule{}, + } for i := range configs { rule := configs[i].Spec.(*networking.DestinationRule) - if rule.ConfigScope == networking.ConfigScope_PRIVATE { - if _, exist := privateCombinedDestRuleMap[configs[i].Namespace]; !exist { - privateCombinedDestRuleMap[configs[i].Namespace] = map[Hostname]*combinedDestinationRule{} + // Store in an index for the config's namespace + // a proxy from this namespace will first look here for the destination rule for a given service + // This pool consists of both public/private destination rules. + // TODO: when exportTo is added to API, only add the rule here if exportTo is '.' + // The global exportTo doesn't matter here (its either . or * - both of which are applicable here) + if _, exist := namespaceLocalDestRules[configs[i].Namespace]; !exist { + namespaceLocalDestRules[configs[i].Namespace] = &processedDestRules{ + hosts: make([]Hostname, 0), + destRule: map[Hostname]*combinedDestinationRule{}, + } + } + // Merge this destination rule with any public/private dest rules for same host in the same namespace + // If there are no duplicates, the dest rule will be added to the list + namespaceLocalDestRules[configs[i].Namespace].hosts, _ = ps.combineSingleDestinationRule( + namespaceLocalDestRules[configs[i].Namespace].hosts, + namespaceLocalDestRules[configs[i].Namespace].destRule, + configs[i]) + + // This is the default for Istio 1.0 rules - config scope is public + // TODO: also check for meshConfig.defaultDestinationRuleExportTo setting + // if the rule's exportTo is empty + if rule.ConfigScope == networking.ConfigScope_PUBLIC { + if _, exist := namespaceExportedDestRules[configs[i].Namespace]; !exist { + namespaceExportedDestRules[configs[i].Namespace] = &processedDestRules{ + hosts: make([]Hostname, 0), + destRule: map[Hostname]*combinedDestinationRule{}, + } } - privateHostsByNamespace[configs[i].Namespace], _ = ps.combineSingleDestinationRule( - privateHostsByNamespace[configs[i].Namespace], - privateCombinedDestRuleMap[configs[i].Namespace], + // Merge this destination rule with any public dest rule for the same host in the same namespace + // If there are no duplicates, the dest rule will be added to the list + namespaceExportedDestRules[configs[i].Namespace].hosts, _ = ps.combineSingleDestinationRule( + namespaceExportedDestRules[configs[i].Namespace].hosts, + namespaceExportedDestRules[configs[i].Namespace].destRule, configs[i]) - } else { - publicHosts, _ = ps.combineSingleDestinationRule( - publicHosts, - publicCombinedDestRuleMap, - configs[i]) + // Merge this destination rule with any public dest rule for the same host + // across all namespaces. If there are no duplicates, the dest rule will be added to the list + allExportedDestRules.hosts, _ = ps.combineSingleDestinationRule( + allExportedDestRules.hosts, allExportedDestRules.destRule, configs[i]) } } // presort it so that we don't sort it for each DestinationRule call. - for ns := range privateHostsByNamespace { - sort.Sort(Hostnames(privateHostsByNamespace[ns])) - } - ps.privateDestRuleHostsByNamespace = privateHostsByNamespace - ps.privateDestRuleByHostByNamespace = privateCombinedDestRuleMap - sort.Sort(Hostnames(publicHosts)) - ps.publicDestRuleHosts = publicHosts - ps.publicDestRuleByHost = publicCombinedDestRuleMap + // sort.Sort for Hostnames will automatically sort from the most specific to least specific + for ns := range namespaceLocalDestRules { + sort.Sort(Hostnames(namespaceLocalDestRules[ns].hosts)) + } + for ns := range namespaceExportedDestRules { + sort.Sort(Hostnames(namespaceExportedDestRules[ns].hosts)) + } + sort.Sort(Hostnames(allExportedDestRules.hosts)) + + ps.namespaceLocalDestRules = namespaceLocalDestRules + ps.namespaceExportedDestRules = namespaceExportedDestRules + ps.allExportedDestRules = allExportedDestRules } func (ps *PushContext) initAuthorizationPolicies(env *Environment) error { diff --git a/pilot/pkg/model/service.go b/pilot/pkg/model/service.go index e4494f509238..989e151fc98c 100644 --- a/pilot/pkg/model/service.go +++ b/pilot/pkg/model/service.go @@ -139,16 +139,16 @@ type PortList []*Port type Protocol string const ( - // ProtocolGRPC declares that the port carries gRPC traffic + // ProtocolGRPC declares that the port carries gRPC traffic. ProtocolGRPC Protocol = "GRPC" - // ProtocolGRPCWeb declares that the port carries gRPC traffic + // ProtocolGRPCWeb declares that the port carries gRPC traffic. ProtocolGRPCWeb Protocol = "GRPC-Web" // ProtocolHTTP declares that the port carries HTTP/1.1 traffic. // Note that HTTP/1.0 or earlier may not be supported by the proxy. ProtocolHTTP Protocol = "HTTP" - // ProtocolHTTP2 declares that the port carries HTTP/2 traffic + // ProtocolHTTP2 declares that the port carries HTTP/2 traffic. ProtocolHTTP2 Protocol = "HTTP2" - // ProtocolHTTPS declares that the port carries HTTPS traffic + // ProtocolHTTPS declares that the port carries HTTPS traffic. ProtocolHTTPS Protocol = "HTTPS" // ProtocolTCP declares the the port uses TCP. // This is the default protocol for a service port. @@ -159,11 +159,13 @@ const ( // ProtocolUDP declares that the port uses UDP. // Note that UDP protocol is not currently supported by the proxy. ProtocolUDP Protocol = "UDP" - // ProtocolMongo declares that the port carries mongoDB traffic + // ProtocolMongo declares that the port carries MongoDB traffic. ProtocolMongo Protocol = "Mongo" - // ProtocolRedis declares that the port carries redis traffic + // ProtocolRedis declares that the port carries Redis traffic. ProtocolRedis Protocol = "Redis" - // ProtocolUnsupported - value to signify that the protocol is unsupported + // ProtocolMySQL declares that the port carries MySQL traffic. + ProtocolMySQL Protocol = "MySQL" + // ProtocolUnsupported - value to signify that the protocol is unsupported. ProtocolUnsupported Protocol = "UnsupportedProtocol" ) @@ -223,6 +225,8 @@ func ParseProtocol(s string) Protocol { return ProtocolMongo case "redis": return ProtocolRedis + case "mysql": + return ProtocolMySQL } return ProtocolUnsupported @@ -251,7 +255,7 @@ func (p Protocol) IsHTTP() bool { // IsTCP is true for protocols that use TCP as transport protocol func (p Protocol) IsTCP() bool { switch p { - case ProtocolTCP, ProtocolHTTPS, ProtocolTLS, ProtocolMongo, ProtocolRedis: + case ProtocolTCP, ProtocolHTTPS, ProtocolTLS, ProtocolMongo, ProtocolRedis, ProtocolMySQL: return true default: return false @@ -496,6 +500,9 @@ type ServiceDiscovery interface { // determine the intended destination of a connection without a Host header on the request. GetProxyServiceInstances(*Proxy) ([]*ServiceInstance, error) + // GetProxyLocality returns the locality where the proxy runs. + GetProxyLocality(*Proxy) string + // ManagementPorts lists set of management ports associated with an IPv4 address. // These management ports are typically used by the platform for out of band management // tasks such as health checks, etc. In a scenario where the proxy functions in the @@ -535,12 +542,12 @@ func (h Hostname) Matches(o Hostname) bool { return true } - hWildcard := string(h[0]) == "*" + hWildcard := len(h) > 0 && string(h[0]) == "*" if hWildcard && len(o) == 0 { return true } - oWildcard := string(o[0]) == "*" + oWildcard := len(o) > 0 && string(o[0]) == "*" if !hWildcard && !oWildcard { // both are non-wildcards, so do normal string comparison return h == o @@ -574,8 +581,8 @@ func (h Hostname) SubsetOf(o Hostname) bool { return true } - hWildcard := string(h[0]) == "*" - oWildcard := string(o[0]) == "*" + hWildcard := len(h) > 0 && string(h[0]) == "*" + oWildcard := len(o) > 0 && string(o[0]) == "*" if !oWildcard { if hWildcard { return false diff --git a/pilot/pkg/model/service_test.go b/pilot/pkg/model/service_test.go index 0fe9e5976e07..9ce3722c618f 100644 --- a/pilot/pkg/model/service_test.go +++ b/pilot/pkg/model/service_test.go @@ -205,6 +205,10 @@ func TestParseProtocol(t *testing.T) { {"Redis", ProtocolRedis}, {"redis", ProtocolRedis}, {"REDIS", ProtocolRedis}, + {"Mysql", ProtocolMySQL}, + {"mysql", ProtocolMySQL}, + {"MYSQL", ProtocolMySQL}, + {"MySQL", ProtocolMySQL}, {"", ProtocolUnsupported}, {"SMTP", ProtocolUnsupported}, } @@ -224,6 +228,8 @@ func TestHostnameMatches(t *testing.T) { out bool }{ {"empty", "", "", true}, + {"first empty", "", "foo.com", false}, + {"second empty", "foo.com", "", false}, {"non-wildcard domain", "foo.com", "foo.com", true}, diff --git a/pilot/pkg/model/sidecar.go b/pilot/pkg/model/sidecar.go index 9e004c4bec16..d007c65f74ef 100644 --- a/pilot/pkg/model/sidecar.go +++ b/pilot/pkg/model/sidecar.go @@ -24,6 +24,7 @@ import ( const ( wildcardNamespace = "*" + currentNamespace = "." wildcardService = Hostname("*") ) @@ -94,7 +95,10 @@ type IstioEgressListenerWrapper struct { // The hosts field has entries of the form namespace/dnsName. For // example ns1/*, */*, */foo.tcp.com, etc. This map preprocesses all // these string fields into a map of namespace and services. - listenerHosts map[string]Hostname + // We cannot use a map of Hostnames because Hostname match allows + // wildcard matching semantics (i.e. foo.bar.com will match import like *.com). + // Go's map/hash data structure doesn't do such semantic matches + listenerHosts map[string][]Hostname // List of services imported by this egress listener extracted from the // listenerHosts above. This will be used by LDS and RDS code when @@ -128,7 +132,7 @@ func DefaultSidecarScopeForNamespace(ps *PushContext, configNamespace string) *S } defaultEgressListener := &IstioEgressListenerWrapper{ - listenerHosts: map[string]Hostname{wildcardNamespace: wildcardService}, + listenerHosts: map[string][]Hostname{wildcardNamespace: {wildcardService}}, } defaultEgressListener.services = ps.Services(&dummyNode) @@ -145,7 +149,7 @@ func DefaultSidecarScopeForNamespace(ps *PushContext, configNamespace string) *S // this config namespace) will see, identify all the destinationRules // that these services need for _, s := range out.services { - out.destinationRules[s.Hostname] = ps.DestinationRule(&dummyNode, s.Hostname) + out.destinationRules[s.Hostname] = ps.DestinationRule(&dummyNode, s) } return out @@ -192,7 +196,7 @@ func ConvertToSidecarScope(ps *PushContext, sidecarConfig *Config) *SidecarScope // that these services need out.destinationRules = make(map[Hostname]*Config) for _, s := range out.services { - out.destinationRules[s.Hostname] = ps.DestinationRule(&dummyNode, s.Hostname) + out.destinationRules[s.Hostname] = ps.DestinationRule(&dummyNode, s) } } @@ -209,13 +213,20 @@ func convertIstioListenerToWrapper(ps *PushContext, sidecarConfig *Config, out := &IstioEgressListenerWrapper{ IstioListener: istioListener, - listenerHosts: make(map[string]Hostname), + listenerHosts: make(map[string][]Hostname), } if istioListener.Hosts != nil { for _, h := range istioListener.Hosts { parts := strings.SplitN(h, "/", 2) - out.listenerHosts[parts[0]] = Hostname(parts[1]) + if parts[0] == currentNamespace { + parts[0] = sidecarConfig.Namespace + } + if _, exists := out.listenerHosts[parts[0]]; !exists { + out.listenerHosts[parts[0]] = make([]Hostname, 0) + } + + out.listenerHosts[parts[0]] = append(out.listenerHosts[parts[0]], Hostname(parts[1])) } } @@ -316,34 +327,54 @@ func (ilw *IstioEgressListenerWrapper) selectVirtualServices(virtualServices []C configNamespace := c.Namespace rule := c.Spec.(*networking.VirtualService) + // Selection algorithm: + // virtualservices have a list of hosts in the API spec + // Sidecars have a list of hosts in the api spec (namespace/host format) + // if any host in the virtualService.hosts matches the sidecar's egress' + // entry /virtualServiceHost, select the virtual service + // and break out of the loop. + // OR if any host in the virtualService.hosts matches the sidecar's egress' + // entry */virtualServiceHost, select the virtual service and break out of the loop. + // Check if there is an explicit import of form ns/* or ns/host - if hostMatch, nsFound := ilw.listenerHosts[configNamespace]; nsFound { - // Check if the hostnames match per usual hostname matching rules - hostFound := false - for _, h := range rule.Hosts { - // TODO: This is a bug. VirtualServices can have many hosts - // while the user might be importing only a single host - // We need to generate a new VirtualService with just the matched host - if hostMatch.Matches(Hostname(h)) { - importedVirtualServices = append(importedVirtualServices, c) - hostFound = true + if importedHosts, nsFound := ilw.listenerHosts[configNamespace]; nsFound { + for _, importedHost := range importedHosts { + // Check if the hostnames match per usual hostname matching rules + hostFound := false + for _, h := range rule.Hosts { + // TODO: This is a bug. VirtualServices can have many hosts + // while the user might be importing only a single host + // We need to generate a new VirtualService with just the matched host + if importedHost.Matches(Hostname(h)) { + importedVirtualServices = append(importedVirtualServices, c) + hostFound = true + break + } + } + + if hostFound { break } } - if hostFound { - break - } } // Check if there is an import of form */host or */* - if hostMatch, wnsFound := ilw.listenerHosts[wildcardNamespace]; wnsFound { - // Check if the hostnames match per usual hostname matching rules - for _, h := range rule.Hosts { - // TODO: This is a bug. VirtualServices can have many hosts - // while the user might be importing only a single host - // We need to generate a new VirtualService with just the matched host - if hostMatch.Matches(Hostname(h)) { - importedVirtualServices = append(importedVirtualServices, c) + if importedHosts, wnsFound := ilw.listenerHosts[wildcardNamespace]; wnsFound { + for _, importedHost := range importedHosts { + // Check if the hostnames match per usual hostname matching rules + hostFound := false + for _, h := range rule.Hosts { + // TODO: This is a bug. VirtualServices can have many hosts + // while the user might be importing only a single host + // We need to generate a new VirtualService with just the matched host + if importedHost.Matches(Hostname(h)) { + importedVirtualServices = append(importedVirtualServices, c) + hostFound = true + break + } + } + + if hostFound { break } } @@ -361,26 +392,35 @@ func (ilw *IstioEgressListenerWrapper) selectServices(services []*Service) []*Se for _, s := range services { configNamespace := s.Attributes.Namespace // Check if there is an explicit import of form ns/* or ns/host - if hostMatch, nsFound := ilw.listenerHosts[configNamespace]; nsFound { - // Check if the hostnames match per usual hostname matching rules - if hostMatch.Matches(s.Hostname) { - // TODO: See if the service's ports match. - // If there is a listener port for this Listener, then - // check if the service has a port of same value. - // If not, check if the service has a single port - and choose that port - // if service has multiple ports none of which match the listener port, check if there is - // a virtualService with match Port - importedServices = append(importedServices, s) + if importedHosts, nsFound := ilw.listenerHosts[configNamespace]; nsFound { + hostFound := false + for _, importedHost := range importedHosts { + // Check if the hostnames match per usual hostname matching rules + if importedHost.Matches(s.Hostname) { + // TODO: See if the service's ports match. + // If there is a listener port for this Listener, then + // check if the service has a port of same value. + // If not, check if the service has a single port - and choose that port + // if service has multiple ports none of which match the listener port, check if there is + // a virtualService with match Port + importedServices = append(importedServices, s) + hostFound = true + break + } + } + if hostFound { continue } - // hostname didn't match. Check if its imported as */host } // Check if there is an import of form */host or */* - if hostMatch, wnsFound := ilw.listenerHosts[wildcardNamespace]; wnsFound { - // Check if the hostnames match per usual hostname matching rules - if hostMatch.Matches(s.Hostname) { - importedServices = append(importedServices, s) + if importedHosts, wnsFound := ilw.listenerHosts[wildcardNamespace]; wnsFound { + for _, importedHost := range importedHosts { + // Check if the hostnames match per usual hostname matching rules + if importedHost.Matches(s.Hostname) { + importedServices = append(importedServices, s) + break + } } } } diff --git a/pilot/pkg/model/validation.go b/pilot/pkg/model/validation.go index eb8968ebb077..dfa0a1140278 100644 --- a/pilot/pkg/model/validation.go +++ b/pilot/pkg/model/validation.go @@ -456,6 +456,8 @@ func validateServer(server *networking.Server) (errs error) { errs = appendErrors(errs, err) } } + // TODO: switch to this code once ns/name format support is added to gateway + //errs = appendErrors(errs, validateNamespaceSlashWildcardHostname(host, true)) } } portErr := validateServerPort(server.Port) @@ -489,7 +491,7 @@ func validateServerPort(port *networking.Port) (errs error) { return appendErrors(errs, fmt.Errorf("port is required")) } if ParseProtocol(port.Protocol) == ProtocolUnsupported { - errs = appendErrors(errs, fmt.Errorf("invalid protocol %q, supported protocols are HTTP, HTTP2, GRPC, MONGO, REDIS, TCP", port.Protocol)) + errs = appendErrors(errs, fmt.Errorf("invalid protocol %q, supported protocols are HTTP, HTTP2, GRPC, MONGO, REDIS, MYSQL, TCP", port.Protocol)) } if port.Number > 0 { errs = appendErrors(errs, ValidatePort(int(port.Number))) @@ -570,6 +572,55 @@ func ValidateEnvoyFilter(name, namespace string, msg proto.Message) (errs error) return } +// validates that hostname in ns/ is a valid hostname according to +// API specs +func validateSidecarOrGatewayHostnamePart(host string, isGateway bool) (errs error) { + // short name hosts are not allowed + if host != "*" && !strings.Contains(host, ".") { + errs = appendErrors(errs, fmt.Errorf("short names (non FQDN) are not allowed")) + } + + if err := ValidateWildcardDomain(host); err != nil { + if !isGateway { + errs = appendErrors(errs, err) + } + + // Gateway allows IP as the host string, as well + ipAddr := net.ParseIP(host) + if ipAddr == nil { + errs = appendErrors(errs, err) + } + } + return +} + +func validateNamespaceSlashWildcardHostname(host string, isGateway bool) (errs error) { + parts := strings.SplitN(host, "/", 2) + if len(parts) != 2 { + if isGateway { + // deprecated + log.Warn("Gateway host without namespace is deprecated. Use namespace/hostname format") + // Old style host in the gateway + return validateSidecarOrGatewayHostnamePart(host, true) + } + errs = appendErrors(errs, fmt.Errorf("host must be of form namespace/dnsName")) + return + } + + if len(parts[0]) == 0 || len(parts[1]) == 0 { + errs = appendErrors(errs, fmt.Errorf("config namespace and dnsName in host entry cannot be empty")) + } + + // namespace can be * or . or a valid DNS label + if parts[0] != "*" && parts[0] != "." { + if !IsDNS1123Label(parts[0]) { + errs = appendErrors(errs, fmt.Errorf("invalid namespace value %q", parts[0])) + } + } + errs = appendErrors(errs, validateSidecarOrGatewayHostnamePart(parts[1], isGateway)) + return +} + // ValidateSidecar checks sidecar config supplied by user func ValidateSidecar(name, namespace string, msg proto.Message) (errs error) { rule, ok := msg.(*networking.Sidecar) @@ -680,22 +731,7 @@ func ValidateSidecar(name, namespace string, msg proto.Message) (errs error) { errs = appendErrors(errs, fmt.Errorf("sidecar: egress listener must contain at least one host")) } else { for _, host := range i.Hosts { - parts := strings.SplitN(host, "/", 2) - if len(parts) != 2 { - errs = appendErrors(errs, fmt.Errorf("sidecar: host must be of form namespace/dnsName")) - continue - } - - if len(parts[0]) == 0 || len(parts[1]) == 0 { - errs = appendErrors(errs, fmt.Errorf("sidecar: config namespace and dnsName in host entry cannot be empty")) - } - - // short name hosts are not allowed - if parts[1] != "*" && !strings.Contains(parts[1], ".") { - errs = appendErrors(errs, fmt.Errorf("sidecar: short names (non FQDN) are not allowed")) - } - - errs = appendErrors(errs, ValidateWildcardDomain(parts[1])) + errs = appendErrors(errs, validateNamespaceSlashWildcardHostname(host, false)) } } } @@ -824,7 +860,6 @@ func validateLoadBalancer(settings *networking.LoadBalancerSettings) (errs error } } } - return } @@ -1044,6 +1079,10 @@ func ValidateMeshConfig(mesh *meshconfig.MeshConfig) (errs error) { errs = multierror.Append(errs, err) } + if err := validateLocalityLbSetting(mesh.LocalityLbSetting); err != nil { + errs = multierror.Append(errs, err) + } + return } @@ -1521,12 +1560,11 @@ func ValidateVirtualService(name, namespace string, msg proto.Message) (errs err appliesToMesh = true } + errs = appendErrors(errs, validateGatewayNames(virtualService.Gateways)) for _, gateway := range virtualService.Gateways { - if err := ValidateFQDN(gateway); err != nil { - errs = appendErrors(errs, err) - } if gateway == IstioMeshGateway { appliesToMesh = true + break } } @@ -1746,9 +1784,30 @@ func validateHTTPRoute(http *networking.HTTPRoute) (errs error) { func validateGatewayNames(gateways []string) (errs error) { for _, gateway := range gateways { - if err := ValidateFQDN(gateway); err != nil { - errs = appendErrors(errs, err) + parts := strings.SplitN(gateway, "/", 2) + if len(parts) != 2 { + // deprecated + log.Warn("Gateway names with FQDN format or short forms are deprecated. " + + "Use namespace/name format instead") + // Old style spec with FQDN gateway name + errs = appendErrors(errs, ValidateFQDN(gateway)) + return + } + + if len(parts[0]) == 0 || len(parts[1]) == 0 { + errs = appendErrors(errs, fmt.Errorf("config namespace and gateway name cannot be empty")) } + + // namespace and name must be DNS labels + if !IsDNS1123Label(parts[0]) { + errs = appendErrors(errs, fmt.Errorf("invalid value for namespace: %q", parts[0])) + } + + if !IsDNS1123Label(parts[1]) { + errs = appendErrors(errs, fmt.Errorf("invalid value for gateway name: %q", parts[1])) + } + + return } return } @@ -2030,8 +2089,8 @@ func ValidateServiceEntry(name, namespace string, config proto.Message) (errs er errs = appendErrors(errs, fmt.Errorf("service entry must have at least one host")) } for _, host := range serviceEntry.Hosts { - // Full wildcard or short names are not allowed in the service entry. - if host == "*" || !strings.Contains(host, ".") { + // Full wildcard is not allowed in the service entry. + if host == "*" { errs = appendErrors(errs, fmt.Errorf("invalid host %s", host)) } else { errs = appendErrors(errs, ValidateWildcardDomain(host)) @@ -2214,3 +2273,111 @@ func ValidateNetworkEndpointAddress(n *NetworkEndpoint) error { } return nil } + +// validateLocalityLbSetting checks the LocalityLbSetting of MeshConfig +func validateLocalityLbSetting(lb *meshconfig.LocalityLoadBalancerSetting) error { + if lb == nil { + return nil + } + + if len(lb.GetDistribute()) > 0 && len(lb.GetFailover()) > 0 { + return fmt.Errorf("can not simultaneously specify 'distribute' and 'failover'") + } + + srcLocalities := []string{} + for _, locality := range lb.GetDistribute() { + srcLocalities = append(srcLocalities, locality.From) + var totalWeight uint32 + destLocalities := []string{} + for loc, weight := range locality.To { + destLocalities = append(destLocalities, loc) + if weight == 0 { + return fmt.Errorf("locality weight must not be in range [1, 100]") + } + totalWeight += weight + } + if totalWeight != 100 { + return fmt.Errorf("total locality weight %v != 100", totalWeight) + } + if err := validateLocalities(destLocalities); err != nil { + return err + } + } + + if err := validateLocalities(srcLocalities); err != nil { + return err + } + + for _, failover := range lb.GetFailover() { + if failover.From == failover.To { + return fmt.Errorf("locality lb failover settings must specify different regions") + } + if strings.Contains(failover.To, "*") { + return fmt.Errorf("locality lb failover region should not contain '*' wildcard") + } + } + + return nil +} + +func validateLocalities(localities []string) error { + regionZoneSubZoneMap := map[string]map[string]map[string]bool{} + + for _, locality := range localities { + if n := strings.Count(locality, "*"); n > 0 { + if n > 1 || !strings.HasSuffix(locality, "*") { + return fmt.Errorf("locality %s wildcard '*' number can not exceed 1 and must be in the end", locality) + } + } + + items := strings.SplitN(locality, "/", 3) + for _, item := range items { + if item == "" { + return fmt.Errorf("locality %s must not contain empty region/zone/subzone info", locality) + } + } + if _, ok := regionZoneSubZoneMap["*"]; ok { + return fmt.Errorf("locality %s overlap with previous specified ones", locality) + } + switch len(items) { + case 1: + if _, ok := regionZoneSubZoneMap[items[0]]; ok { + return fmt.Errorf("locality %s overlap with previous specified ones", locality) + } + regionZoneSubZoneMap[items[0]] = map[string]map[string]bool{"*": {"*": true}} + case 2: + if _, ok := regionZoneSubZoneMap[items[0]]; ok { + if _, ok := regionZoneSubZoneMap[items[0]]["*"]; ok { + return fmt.Errorf("locality %s overlap with previous specified ones", locality) + } + if _, ok := regionZoneSubZoneMap[items[0]][items[1]]; ok { + return fmt.Errorf("locality %s overlap with previous specified ones", locality) + } + regionZoneSubZoneMap[items[0]][items[1]] = map[string]bool{"*": true} + } else { + regionZoneSubZoneMap[items[0]] = map[string]map[string]bool{items[1]: {"*": true}} + } + case 3: + if _, ok := regionZoneSubZoneMap[items[0]]; ok { + if _, ok := regionZoneSubZoneMap[items[0]]["*"]; ok { + return fmt.Errorf("locality %s overlap with previous specified ones", locality) + } + if _, ok := regionZoneSubZoneMap[items[0]][items[1]]; ok { + if regionZoneSubZoneMap[items[0]][items[1]]["*"] { + return fmt.Errorf("locality %s overlap with previous specified ones", locality) + } + if regionZoneSubZoneMap[items[0]][items[1]][items[2]] { + return fmt.Errorf("locality %s overlap with previous specified ones", locality) + } + regionZoneSubZoneMap[items[0]][items[1]][items[2]] = true + } else { + regionZoneSubZoneMap[items[0]][items[1]] = map[string]bool{items[2]: true} + } + } else { + regionZoneSubZoneMap[items[0]] = map[string]map[string]bool{items[1]: {items[2]: true}} + } + } + } + + return nil +} diff --git a/pilot/pkg/model/validation_test.go b/pilot/pkg/model/validation_test.go index 798e3507bf11..086c2821c1e8 100644 --- a/pilot/pkg/model/validation_test.go +++ b/pilot/pkg/model/validation_test.go @@ -1341,6 +1341,37 @@ func TestValidateServer(t *testing.T) { Port: &networking.Port{Number: 7, Name: "http", Protocol: "http"}, }, ""}, + {"happy ip", + &networking.Server{ + Hosts: []string{"1.1.1.1"}, + Port: &networking.Port{Number: 7, Name: "http", Protocol: "http"}, + }, + ""}, + // TODO: ADD ONCE ns/name format is supported for gateway + //{"happy ns/name", + // &networking.Server{ + // Hosts: []string{"ns1/foo.bar.com"}, + // Port: &networking.Port{Number: 7, Name: "http", Protocol: "http"}, + // }, + // ""}, + //{"happy */name", + // &networking.Server{ + // Hosts: []string{"*/foo.bar.com"}, + // Port: &networking.Port{Number: 7, Name: "http", Protocol: "http"}, + // }, + // ""}, + //{"happy ./name", + // &networking.Server{ + // Hosts: []string{"./foo.bar.com"}, + // Port: &networking.Port{Number: 7, Name: "http", Protocol: "http"}, + // }, + // ""}, + //{"invalid domain ns/name format", + // &networking.Server{ + // Hosts: []string{"ns1/foo.*.bar.com"}, + // Port: &networking.Port{Number: 7, Name: "http", Protocol: "http"}, + // }, + // "domain"}, {"invalid domain", &networking.Server{ Hosts: []string{"foo.*.bar.com"}, @@ -2274,6 +2305,33 @@ func TestValidateVirtualService(t *testing.T) { }}, }}, }, valid: true}, + {name: "namespace/name for gateway", in: &networking.VirtualService{ + Hosts: []string{"foo.bar"}, + Gateways: []string{"ns1/gateway"}, + Http: []*networking.HTTPRoute{{ + Route: []*networking.HTTPRouteDestination{{ + Destination: &networking.Destination{Host: "foo.baz"}, + }}, + }}, + }, valid: true}, + {name: "namespace/* for gateway", in: &networking.VirtualService{ + Hosts: []string{"foo.bar"}, + Gateways: []string{"ns1/*"}, + Http: []*networking.HTTPRoute{{ + Route: []*networking.HTTPRouteDestination{{ + Destination: &networking.Destination{Host: "foo.baz"}, + }}, + }}, + }, valid: false}, + {name: "*/name for gateway", in: &networking.VirtualService{ + Hosts: []string{"foo.bar"}, + Gateways: []string{"*/gateway"}, + Http: []*networking.HTTPRoute{{ + Route: []*networking.HTTPRouteDestination{{ + Destination: &networking.Destination{Host: "foo.baz"}, + }}, + }}, + }, valid: false}, {name: "wildcard for mesh gateway", in: &networking.VirtualService{ Hosts: []string{"*"}, Http: []*networking.HTTPRoute{{ @@ -2902,11 +2960,11 @@ func TestValidateServiceEntries(t *testing.T) { {Number: 80, Protocol: "http", Name: "http-valid1"}, }, Endpoints: []*networking.ServiceEntry_Endpoint{ - {Address: "in.google.com", Ports: map[string]uint32{"http-valid2": 9080}}, + {Address: "in.google.com", Ports: map[string]uint32{"http-valid1": 9080}}, }, Resolution: networking.ServiceEntry_DNS, }, - valid: false}, + valid: true}, {name: "undefined endpoint port", in: networking.ServiceEntry{ Hosts: []string{"google.com"}, Ports: []*networking.Port{ @@ -3730,6 +3788,20 @@ func TestValidateSidecar(t *testing.T) { }, }, }, true}, + {"import local namespace with wildcard", &networking.Sidecar{ + Egress: []*networking.IstioEgressListener{ + { + Hosts: []string{"./*"}, + }, + }, + }, true}, + {"import local namespace with fqdn", &networking.Sidecar{ + Egress: []*networking.IstioEgressListener{ + { + Hosts: []string{"./foo.com"}, + }, + }, + }, true}, {"bad egress host 1", &networking.Sidecar{ Egress: []*networking.IstioEgressListener{ { @@ -3744,6 +3816,13 @@ func TestValidateSidecar(t *testing.T) { }, }, }, false}, + {"bad egress host 3", &networking.Sidecar{ + Egress: []*networking.IstioEgressListener{ + { + Hosts: []string{"~/foo.com"}, + }, + }, + }, false}, {"empty egress host", &networking.Sidecar{ Egress: []*networking.IstioEgressListener{ { @@ -3996,3 +4075,171 @@ func TestValidateSidecar(t *testing.T) { }) } } + +func TestValidateLocalityLbSetting(t *testing.T) { + cases := []struct { + name string + in *meshconfig.LocalityLoadBalancerSetting + valid bool + }{ + { + name: "valid mesh config without LocalityLoadBalancerSetting", + in: nil, + valid: true, + }, + + { + name: "invalid LocalityLoadBalancerSetting_Distribute total weight > 100", + in: &meshconfig.LocalityLoadBalancerSetting{ + Distribute: []*meshconfig.LocalityLoadBalancerSetting_Distribute{ + { + From: "a/b/c", + To: map[string]uint32{ + "a/b/c": 80, + "a/b1": 25, + }, + }, + }, + }, + valid: false, + }, + { + name: "invalid LocalityLoadBalancerSetting_Distribute total weight < 100", + in: &meshconfig.LocalityLoadBalancerSetting{ + Distribute: []*meshconfig.LocalityLoadBalancerSetting_Distribute{ + { + From: "a/b/c", + To: map[string]uint32{ + "a/b/c": 80, + "a/b1": 15, + }, + }, + }, + }, + valid: false, + }, + { + name: "invalid LocalityLoadBalancerSetting_Distribute weight = 0", + in: &meshconfig.LocalityLoadBalancerSetting{ + Distribute: []*meshconfig.LocalityLoadBalancerSetting_Distribute{ + { + From: "a/b/c", + To: map[string]uint32{ + "a/b/c": 0, + "a/b1": 100, + }, + }, + }, + }, + valid: false, + }, + { + name: "invalid LocalityLoadBalancerSetting specify both distribute and failover", + in: &meshconfig.LocalityLoadBalancerSetting{ + Distribute: []*meshconfig.LocalityLoadBalancerSetting_Distribute{ + { + From: "a/b/c", + To: map[string]uint32{ + "a/b/c": 80, + "a/b1": 20, + }, + }, + }, + Failover: []*meshconfig.LocalityLoadBalancerSetting_Failover{ + { + From: "region1", + To: "region2", + }, + }, + }, + valid: false, + }, + + { + name: "invalid failover src and dst have same region", + in: &meshconfig.LocalityLoadBalancerSetting{ + Failover: []*meshconfig.LocalityLoadBalancerSetting_Failover{ + { + From: "region1", + To: "region1", + }, + }, + }, + valid: false, + }, + } + + for _, c := range cases { + if got := validateLocalityLbSetting(c.in); (got == nil) != c.valid { + t.Errorf("ValidateLocalityLbSetting failed on %v: got valid=%v but wanted valid=%v: %v", + c.name, got == nil, c.valid, got) + } + } +} + +func TestValidateLocalities(t *testing.T) { + cases := []struct { + name string + localities []string + valid bool + }{ + { + name: "multi wildcard locality", + localities: []string{"*/zone/*"}, + valid: false, + }, + { + name: "wildcard not in suffix", + localities: []string{"*/zone"}, + valid: false, + }, + { + name: "explicit wildcard region overlap", + localities: []string{"*", "a/b/c"}, + valid: false, + }, + { + name: "implicit wildcard region overlap", + localities: []string{"a", "a/b/c"}, + valid: false, + }, + { + name: "explicit wildcard zone overlap", + localities: []string{"a/*", "a/b/c"}, + valid: false, + }, + { + name: "implicit wildcard zone overlap", + localities: []string{"a/b", "a/b/c"}, + valid: false, + }, + { + name: "explicit wildcard subzone overlap", + localities: []string{"a/b/*", "a/b/c"}, + valid: false, + }, + { + name: "implicit wildcard subzone overlap", + localities: []string{"a/b", "a/b/c"}, + valid: false, + }, + { + name: "valid localities", + localities: []string{"a1/*", "a2/*", "a3/b3/c3", "a4/b4", "a5/b5/*"}, + valid: true, + }, + } + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + err := validateLocalities(c.localities) + if !c.valid && err == nil { + t.Errorf("expect invalid localities") + } + + if c.valid && err != nil { + t.Errorf("expect valid localities. but got err %v", err) + } + }) + } + +} diff --git a/pilot/pkg/networking/core/v1alpha3/cluster.go b/pilot/pkg/networking/core/v1alpha3/cluster.go index 196130f71222..4f4ccb11693d 100644 --- a/pilot/pkg/networking/core/v1alpha3/cluster.go +++ b/pilot/pkg/networking/core/v1alpha3/cluster.go @@ -16,7 +16,9 @@ package v1alpha3 import ( "fmt" + "math" "path" + "sort" "strconv" "strings" "time" @@ -29,6 +31,7 @@ import ( envoy_type "github.com/envoyproxy/go-control-plane/envoy/type" "github.com/gogo/protobuf/types" + meshconfig "istio.io/api/mesh/v1alpha1" networking "istio.io/api/networking/v1alpha3" "istio.io/istio/pilot/pkg/model" "istio.io/istio/pilot/pkg/networking/plugin" @@ -88,6 +91,16 @@ func (configgen *ConfigGeneratorImpl) BuildClusters(env *model.Environment, prox if configgen.CanUsePrecomputedCDS(proxy) { if sidecarScope != nil && sidecarScope.XDSOutboundClusters != nil { clusters = append(clusters, sidecarScope.XDSOutboundClusters...) + // For locality loadbalancing + for i, cluster := range clusters { + if cluster.LoadAssignment != nil { + // TODO: cache per locality + // Currently make a shallow copy of cluster which is fast + clone := util.CloneCluster(cluster) + ApplyLocalityLBSetting(proxy, cluster, push) + clusters[i] = clone + } + } recomputeOutboundClusters = false } } @@ -110,6 +123,14 @@ func (configgen *ConfigGeneratorImpl) BuildClusters(env *model.Environment, prox if configgen.PrecomputedOutboundClustersForGateways != nil && configgen.PrecomputedOutboundClustersForGateways[proxy.ConfigNamespace] != nil { clusters = append(clusters, configgen.PrecomputedOutboundClustersForGateways[proxy.ConfigNamespace]...) + // For locality loadbalancing + for i, cluster := range clusters { + if cluster.LoadAssignment != nil { + clone := util.CloneCluster(cluster) + ApplyLocalityLBSetting(proxy, clone, push) + clusters[i] = clone + } + } recomputeOutboundClusters = false } } @@ -130,6 +151,31 @@ func (configgen *ConfigGeneratorImpl) BuildClusters(env *model.Environment, prox return normalizeClusters(push, proxy, clusters), nil } +func ApplyLocalityLBSetting(proxy *model.Proxy, cluster *apiv2.Cluster, push *model.PushContext) { + _, subsetName, hostname, portNumber := model.ParseSubsetKey(cluster.Name) + // TODO: This code is incorrect as we need to pass the namespace associated with the Service + // but EDS code does not have any information regarding the namespace + if config := push.DestinationRule(proxy, &model.Service{Hostname: hostname}); config != nil { + if port := push.ServicePort(hostname, portNumber); port != nil { + destinationRule := config.Spec.(*networking.DestinationRule) + _, outlierDetection, _, _ := SelectTrafficPolicyComponents(destinationRule.TrafficPolicy, port) + setLocalityPriority := false + if outlierDetection != nil { + setLocalityPriority = true + } + for _, subset := range destinationRule.Subsets { + if subset.Name == subsetName { + _, outlierDetection, _, _ := SelectTrafficPolicyComponents(subset.TrafficPolicy, port) + if outlierDetection != nil { + setLocalityPriority = true + } + } + } + applyLocalityLBSetting(proxy, cluster.LoadAssignment, push.Env.Mesh.LocalityLbSetting, setLocalityPriority) + } + } +} + // resolves cluster name conflicts. there can be duplicate cluster names if there are conflicting service definitions. // for any clusters that share the same name the first cluster is kept and the others are discarded. func normalizeClusters(push *model.PushContext, proxy *model.Proxy, clusters []*apiv2.Cluster) []*apiv2.Cluster { @@ -158,7 +204,7 @@ func (configgen *ConfigGeneratorImpl) buildOutboundClusters(env *model.Environme networkView := model.GetNetworkView(proxy) for _, service := range push.Services(proxy) { - config := push.DestinationRule(proxy, service.Hostname) + config := push.DestinationRule(proxy, service) for _, port := range service.Ports { if port.Protocol == model.ProtocolUDP { continue @@ -183,7 +229,11 @@ func (configgen *ConfigGeneratorImpl) buildOutboundClusters(env *model.Environme defaultSni := model.BuildDNSSrvSubsetKey(model.TrafficDirectionOutbound, "", service.Hostname, port.Port) applyTrafficPolicy(env, defaultCluster, destinationRule.TrafficPolicy, port, serviceAccounts, defaultSni, DefaultClusterMode, model.TrafficDirectionOutbound) - + setLocalityPriority := false + if defaultCluster.OutlierDetection != nil { + setLocalityPriority = true + } + applyLocalityLBSetting(proxy, defaultCluster.LoadAssignment, env.Mesh.LocalityLbSetting, setLocalityPriority) for _, subset := range destinationRule.Subsets { inputParams.Subset = subset.Name subsetClusterName := model.BuildSubsetKey(model.TrafficDirectionOutbound, subset.Name, service.Hostname, port.Port) @@ -201,6 +251,11 @@ func (configgen *ConfigGeneratorImpl) buildOutboundClusters(env *model.Environme DefaultClusterMode, model.TrafficDirectionOutbound) applyTrafficPolicy(env, subsetCluster, subset.TrafficPolicy, port, serviceAccounts, defaultSni, DefaultClusterMode, model.TrafficDirectionOutbound) + setLocalityPriority = false + if subsetCluster.OutlierDetection != nil { + setLocalityPriority = true + } + applyLocalityLBSetting(proxy, subsetCluster.LoadAssignment, env.Mesh.LocalityLbSetting, setLocalityPriority) // call plugins for _, p := range configgen.Plugins { p.OnOutboundCluster(inputParams, subsetCluster) @@ -226,7 +281,7 @@ func (configgen *ConfigGeneratorImpl) buildOutboundSniDnatClusters(env *model.En networkView := model.GetNetworkView(proxy) for _, service := range push.Services(proxy) { - config := push.DestinationRule(proxy, service.Hostname) + config := push.DestinationRule(proxy, service) for _, port := range service.Ports { if port.Protocol == model.ProtocolUDP { continue @@ -246,6 +301,11 @@ func (configgen *ConfigGeneratorImpl) buildOutboundSniDnatClusters(env *model.En destinationRule := config.Spec.(*networking.DestinationRule) applyTrafficPolicy(env, defaultCluster, destinationRule.TrafficPolicy, port, nil, "", SniDnatClusterMode, model.TrafficDirectionOutbound) + setLocalityPriority := false + if defaultCluster.OutlierDetection != nil { + setLocalityPriority = true + } + applyLocalityLBSetting(proxy, defaultCluster.LoadAssignment, env.Mesh.LocalityLbSetting, setLocalityPriority) for _, subset := range destinationRule.Subsets { subsetClusterName := model.BuildDNSSrvSubsetKey(model.TrafficDirectionOutbound, subset.Name, service.Hostname, port.Port) @@ -261,6 +321,11 @@ func (configgen *ConfigGeneratorImpl) buildOutboundSniDnatClusters(env *model.En SniDnatClusterMode, model.TrafficDirectionOutbound) applyTrafficPolicy(env, subsetCluster, subset.TrafficPolicy, port, nil, "", SniDnatClusterMode, model.TrafficDirectionOutbound) + setLocalityPriority = false + if subsetCluster.OutlierDetection != nil { + setLocalityPriority = true + } + applyLocalityLBSetting(proxy, subsetCluster.LoadAssignment, env.Mesh.LocalityLbSetting, setLocalityPriority) clusters = append(clusters, subsetCluster) } } @@ -308,8 +373,10 @@ func buildLocalityLbEndpoints(env *model.Environment, proxyNetworkView map[strin } host := util.BuildAddress(instance.Endpoint.Address, uint32(instance.Endpoint.Port)) ep := endpoint.LbEndpoint{ - Endpoint: &endpoint.Endpoint{ - Address: &host, + HostIdentifier: &endpoint.LbEndpoint_Endpoint{ + Endpoint: &endpoint.Endpoint{ + Address: &host, + }, }, LoadBalancingWeight: &types.UInt32Value{ Value: 1, @@ -337,8 +404,10 @@ func buildLocalityLbEndpoints(env *model.Environment, proxyNetworkView map[strin func buildInboundLocalityLbEndpoints(bind string, port int) []endpoint.LocalityLbEndpoints { address := util.BuildAddress(bind, uint32(port)) lbEndpoint := endpoint.LbEndpoint{ - Endpoint: &endpoint.Endpoint{ - Address: &address, + HostIdentifier: &endpoint.LbEndpoint_Endpoint{ + Endpoint: &endpoint.Endpoint{ + Address: &address, + }, }, } return []endpoint.LocalityLbEndpoints{ @@ -359,6 +428,7 @@ func (configgen *ConfigGeneratorImpl) buildInboundClusters(env *model.Environmen // If the node has no sidecarScope and has interception mode set to NONE, then we should skip the inbound // clusters, because there would be no corresponding inbound listeners sidecarScope := proxy.SidecarScope + noneMode := proxy.GetInterceptionMode() == model.InterceptionNone if sidecarScope == nil || !sidecarScope.HasCustomIngressListeners { // No user supplied sidecar scope or the user supplied one has no ingress listeners @@ -366,7 +436,7 @@ func (configgen *ConfigGeneratorImpl) buildInboundClusters(env *model.Environmen // We should not create inbound listeners in NONE mode based on the service instances // Doing so will prevent the workloads from starting as they would be listening on the same port // Users are required to provide the sidecar config to define the inbound listeners - if proxy.GetInterceptionMode() == model.InterceptionNone { + if noneMode { return nil } @@ -394,6 +464,9 @@ func (configgen *ConfigGeneratorImpl) buildInboundClusters(env *model.Environmen clusters = append(clusters, mgmtCluster) } } else { + if instances == nil || len(instances) == 0 { + return clusters + } rule := sidecarScope.Config.Spec.(*networking.Sidecar) for _, ingressListener := range rule.Ingress { // LDS would have setup the inbound clusters @@ -407,12 +480,12 @@ func (configgen *ConfigGeneratorImpl) buildInboundClusters(env *model.Environmen // When building an inbound cluster for the ingress listener, we take the defaultEndpoint specified // by the user and parse it into host:port or a unix domain socket // The default endpoint can be 127.0.0.1:port or :port or unix domain socket - bind := LocalhostAddress + endpointAddress := LocalhostAddress port := 0 var err error if strings.HasPrefix(ingressListener.DefaultEndpoint, model.UnixAddressPrefix) { // this is a UDS endpoint. assign it as is - bind = ingressListener.DefaultEndpoint + endpointAddress = ingressListener.DefaultEndpoint } else { // parse the ip, port. Validation guarantees presence of : parts := strings.Split(ingressListener.DefaultEndpoint, ":") @@ -421,30 +494,31 @@ func (configgen *ConfigGeneratorImpl) buildInboundClusters(env *model.Environmen } } - // First create a copy of a service instance - instance := &model.ServiceInstance{ - Endpoint: instances[0].Endpoint, - Service: instances[0].Service, - Labels: instances[0].Labels, - ServiceAccount: instances[0].ServiceAccount, + // Find the service instance that corresponds to this ingress listener by looking + // for a service instance that either matches this ingress port or one that has + // a port with same name as this ingress port + instance := configgen.findServiceInstanceForIngressListener(instances, ingressListener) + + if instance == nil { + // We didn't find a matching instance + continue } // Update the values here so that the plugins use the right ports // uds values // TODO: all plugins need to be updated to account for the fact that // the port may be 0 but bind may have a UDS value - // Inboundroute will be different for - instance.Endpoint.Address = bind + instance.Endpoint.Address = endpointAddress instance.Endpoint.ServicePort = listenPort instance.Endpoint.Port = port pluginParams := &plugin.InputParams{ Env: env, Node: proxy, - ServiceInstance: instances[0], + ServiceInstance: instance, Port: listenPort, Push: push, - Bind: bind, + Bind: endpointAddress, } localCluster := configgen.buildInboundClusterForPortOrUDS(pluginParams) clusters = append(clusters, localCluster) @@ -454,6 +528,41 @@ func (configgen *ConfigGeneratorImpl) buildInboundClusters(env *model.Environmen return clusters } +func (configgen *ConfigGeneratorImpl) findServiceInstanceForIngressListener(instances []*model.ServiceInstance, + ingressListener *networking.IstioIngressListener) *model.ServiceInstance { + var instance *model.ServiceInstance + // Search by port + for _, realInstance := range instances { + if realInstance.Endpoint.Port == int(ingressListener.Port.Number) { + instance = &model.ServiceInstance{ + Endpoint: realInstance.Endpoint, + Service: realInstance.Service, + Labels: realInstance.Labels, + ServiceAccount: realInstance.ServiceAccount, + } + return instance + } + } + + // If the port number does not match, the user might have specified a + // UDS socket with port number 0. So search by name + for _, realInstance := range instances { + for _, iport := range realInstance.Service.Ports { + if iport.Name == ingressListener.Port.Name { + instance = &model.ServiceInstance{ + Endpoint: realInstance.Endpoint, + Service: realInstance.Service, + Labels: realInstance.Labels, + ServiceAccount: realInstance.ServiceAccount, + } + return instance + } + } + } + + return instance +} + func (configgen *ConfigGeneratorImpl) buildInboundClusterForPortOrUDS(pluginParams *plugin.InputParams) *apiv2.Cluster { instance := pluginParams.ServiceInstance clusterName := model.BuildSubsetKey(model.TrafficDirectionInbound, instance.Endpoint.ServicePort.Name, @@ -472,7 +581,7 @@ func (configgen *ConfigGeneratorImpl) buildInboundClusterForPortOrUDS(pluginPara // (not the defaults) to handle the increased traffic volume // TODO: This is not foolproof - if instance is part of multiple services listening on same port, // choice of inbound cluster is arbitrary. So the connection pool settings may not apply cleanly. - config := pluginParams.Push.DestinationRule(pluginParams.Node, instance.Service.Hostname) + config := pluginParams.Push.DestinationRule(pluginParams.Node, instance.Service) if config != nil { destinationRule := config.Spec.(*networking.DestinationRule) if destinationRule.TrafficPolicy != nil { @@ -530,6 +639,9 @@ func buildIstioMutualTLS(serviceAccounts []string, sni string) *networking.TLSSe // SelectTrafficPolicyComponents returns the components of TrafficPolicy that should be used for given port. func SelectTrafficPolicyComponents(policy *networking.TrafficPolicy, port *model.Port) ( *networking.ConnectionPoolSettings, *networking.OutlierDetection, *networking.LoadBalancerSettings, *networking.TLSSettings) { + if policy == nil { + return nil, nil, nil, nil + } connectionPool := policy.ConnectionPool outlierDetection := policy.OutlierDetection loadBalancer := policy.LoadBalancer @@ -576,9 +688,6 @@ const ( // listenerOpts func applyTrafficPolicy(env *model.Environment, cluster *apiv2.Cluster, policy *networking.TrafficPolicy, port *model.Port, serviceAccounts []string, defaultSni string, clusterMode ClusterMode, direction model.TrafficDirection) { - if policy == nil { - return - } connectionPool, outlierDetection, loadBalancer, tls := SelectTrafficPolicyComponents(policy, port) applyConnectionPool(env, cluster, connectionPool, direction) @@ -744,6 +853,130 @@ func applyLoadBalancer(cluster *apiv2.Cluster, lb *networking.LoadBalancerSettin }, } } + + // Locality weighted load balancing + cluster.CommonLbConfig = &apiv2.Cluster_CommonLbConfig{ + LocalityConfigSpecifier: &apiv2.Cluster_CommonLbConfig_LocalityWeightedLbConfig_{ + LocalityWeightedLbConfig: &apiv2.Cluster_CommonLbConfig_LocalityWeightedLbConfig{}, + }, + } +} + +func applyLocalityLBSetting( + proxy *model.Proxy, + loadAssignment *apiv2.ClusterLoadAssignment, + localityLB *meshconfig.LocalityLoadBalancerSetting, + localityPriority bool) { + if proxy == nil || loadAssignment == nil { + return + } + + // one of Distribute or Failover settings can be applied. + if localityLB.GetDistribute() != nil { + applyLocalityWeight(proxy, loadAssignment, localityLB.GetDistribute()) + } else if localityPriority { + applyLocalityFailover(proxy, loadAssignment, localityLB.GetFailover()) + } +} + +// set locality loadbalancing weight +func applyLocalityWeight( + proxy *model.Proxy, + loadAssignment *apiv2.ClusterLoadAssignment, + distribute []*meshconfig.LocalityLoadBalancerSetting_Distribute) { + if distribute == nil { + return + } + + // Support Locality weighted load balancing + // (https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/load_balancing/locality_weight.html) + // by providing weights in LocalityLbEndpoints via load_balancing_weight. + // By setting weights across different localities, it can allow + // Envoy to weight assignments across different zones and geographical locations. + for _, localityWeightSetting := range distribute { + if localityWeightSetting != nil && + util.LocalityMatch(&proxy.Locality, localityWeightSetting.From) { + misMatched := map[int]struct{}{} + for i := range loadAssignment.Endpoints { + misMatched[i] = struct{}{} + } + for locality, weight := range localityWeightSetting.To { + // index -> original weight + destLocMap := map[int]uint32{} + totalWeight := uint32(0) + for i, ep := range loadAssignment.Endpoints { + if _, exist := misMatched[i]; exist { + if util.LocalityMatch(ep.Locality, locality) { + delete(misMatched, i) + destLocMap[i] = ep.LoadBalancingWeight.Value + totalWeight += destLocMap[i] + } + } + } + // in case wildcard dest matching multi groups of endpoints + // the load balancing weight for a locality is divided by the sum of the weights of all localities + for index, originalWeight := range destLocMap { + weight := float64(originalWeight*weight) / float64(totalWeight) + loadAssignment.Endpoints[index].LoadBalancingWeight = &types.UInt32Value{ + Value: uint32(math.Ceil(weight)), + } + } + } + + // remove groups of endpoints in a locality that miss matched + for i := range misMatched { + loadAssignment.Endpoints[i].LbEndpoints = nil + } + break + } + } +} + +// set locality loadbalancing priority +func applyLocalityFailover( + proxy *model.Proxy, + loadAssignment *apiv2.ClusterLoadAssignment, + failover []*meshconfig.LocalityLoadBalancerSetting_Failover) { + // key is priority, value is the index of the LocalityLbEndpoints in ClusterLoadAssignment + priorityMap := map[int][]int{} + + // 1. calculate the LocalityLbEndpoints.Priority compared with proxy locality + for i, localityEndpoint := range loadAssignment.Endpoints { + priority := util.LbPriority(&proxy.Locality, localityEndpoint.Locality) + // region not match, apply failover settings + if priority == 3 { + for _, failoverSetting := range failover { + if failoverSetting.From == proxy.Locality.Region { + if localityEndpoint.Locality.Region != failoverSetting.To { + priority = 4 + } + break + } + } + } + loadAssignment.Endpoints[i].Priority = uint32(priority) + priorityMap[priority] = append(priorityMap[priority], i) + } + + // since Priorities should range from 0 (highest) to N (lowest) without skipping. + // 2. adjust the priorities in order + // 2.1 sort all priorities in increasing order. + priorities := []int{} + for priority := range priorityMap { + priorities = append(priorities, priority) + } + sort.Ints(priorities) + // 2.2 adjust LocalityLbEndpoints priority + // if the index and value of priorities array is not equal. + for i, priority := range priorities { + if i != priority { + // the LocalityLbEndpoints index in ClusterLoadAssignment.Endpoints + for index := range priorityMap[priority] { + loadAssignment.Endpoints[index].Priority = uint32(i) + } + } + } + } func applyUpstreamTLSSettings(env *model.Environment, cluster *apiv2.Cluster, tls *networking.TLSSettings) { diff --git a/pilot/pkg/networking/core/v1alpha3/cluster_test.go b/pilot/pkg/networking/core/v1alpha3/cluster_test.go index 2c3b5b252d69..f2aee8c50875 100644 --- a/pilot/pkg/networking/core/v1alpha3/cluster_test.go +++ b/pilot/pkg/networking/core/v1alpha3/cluster_test.go @@ -20,6 +20,8 @@ import ( "time" apiv2 "github.com/envoyproxy/go-control-plane/envoy/api/v2" + envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + "github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint" "github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/types" . "github.com/onsi/gomega" @@ -30,6 +32,7 @@ import ( core "istio.io/istio/pilot/pkg/networking/core/v1alpha3" "istio.io/istio/pilot/pkg/networking/core/v1alpha3/fakes" "istio.io/istio/pilot/pkg/networking/plugin" + "istio.io/istio/pilot/pkg/networking/util" ) type ConfigType int @@ -381,3 +384,273 @@ func buildTestClustersWithTCPKeepalive(configType ConfigType) ([]*apiv2.Cluster, }, }) } + +func TestApplyLocalitySetting(t *testing.T) { + g := NewGomegaWithT(t) + + proxy := &model.Proxy{ + ClusterID: "some-cluster-id", + Type: model.SidecarProxy, + IPAddresses: []string{"6.6.6.6"}, + DNSDomain: "com", + Metadata: make(map[string]string), + Locality: model.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone1", + }, + } + + env := buildEnvForClustersWithDistribute() + cluster := buildFakeCluster() + core.ApplyLocalityLBSetting(proxy, cluster, env.PushContext) + + for _, localityEndpoint := range cluster.LoadAssignment.Endpoints { + if util.LocalityMatch(localityEndpoint.Locality, "region1/zone1/subzone1") { + g.Expect(localityEndpoint.LoadBalancingWeight.GetValue()).To(Equal(uint32(90))) + continue + } + if util.LocalityMatch(localityEndpoint.Locality, "region1/zone1") { + g.Expect(localityEndpoint.LoadBalancingWeight.GetValue()).To(Equal(uint32(5))) + continue + } + g.Expect(localityEndpoint.LbEndpoints).To(BeNil()) + } + + env = buildEnvForClustersWithFailover() + core.ApplyLocalityLBSetting(proxy, cluster, env.PushContext) + for _, localityEndpoint := range cluster.LoadAssignment.Endpoints { + if localityEndpoint.Locality.Region == proxy.Locality.Region { + if localityEndpoint.Locality.Zone == proxy.Locality.Zone { + if localityEndpoint.Locality.SubZone == proxy.Locality.SubZone { + g.Expect(localityEndpoint.Priority).To(Equal(uint32(0))) + continue + } + g.Expect(localityEndpoint.Priority).To(Equal(uint32(1))) + continue + } + g.Expect(localityEndpoint.Priority).To(Equal(uint32(2))) + continue + } + if localityEndpoint.Locality.Region == "region2" { + g.Expect(localityEndpoint.Priority).To(Equal(uint32(3))) + } else { + g.Expect(localityEndpoint.Priority).To(Equal(uint32(4))) + } + } +} + +func buildEnvForClustersWithDistribute() *model.Environment { + serviceDiscovery := &fakes.ServiceDiscovery{} + + serviceDiscovery.ServicesReturns([]*model.Service{ + { + Hostname: "test.example.org", + Address: "1.1.1.1", + ClusterVIPs: make(map[string]string), + Ports: model.PortList{ + &model.Port{ + Name: "default", + Port: 8080, + Protocol: model.ProtocolHTTP, + }, + }, + }, + }, nil) + + meshConfig := &meshconfig.MeshConfig{ + ConnectTimeout: &types.Duration{ + Seconds: 10, + Nanos: 1, + }, + LocalityLbSetting: &meshconfig.LocalityLoadBalancerSetting{ + Distribute: []*meshconfig.LocalityLoadBalancerSetting_Distribute{ + { + From: "region1/zone1/subzone1", + To: map[string]uint32{ + "region1/zone1/subzone1": 90, + "region1/zone1/subzone2": 5, + "region1/zone1/subzone3": 5, + }, + }, + }, + }, + } + + configStore := &fakes.IstioConfigStore{} + + env := &model.Environment{ + ServiceDiscovery: serviceDiscovery, + ServiceAccounts: &fakes.ServiceAccounts{}, + IstioConfigStore: configStore, + Mesh: meshConfig, + MixerSAN: []string{}, + } + + env.PushContext = model.NewPushContext() + env.PushContext.InitContext(env) + env.PushContext.SetDestinationRules([]model.Config{ + {ConfigMeta: model.ConfigMeta{ + Type: model.DestinationRule.Type, + Version: model.DestinationRule.Version, + Name: "acme", + }, + Spec: &networking.DestinationRule{ + Host: "test.example.org", + TrafficPolicy: &networking.TrafficPolicy{ + OutlierDetection: &networking.OutlierDetection{ + ConsecutiveErrors: 5, + }, + }, + }, + }}) + + return env +} + +func buildEnvForClustersWithFailover() *model.Environment { + serviceDiscovery := &fakes.ServiceDiscovery{} + + serviceDiscovery.ServicesReturns([]*model.Service{ + { + Hostname: "test.example.org", + Address: "1.1.1.1", + ClusterVIPs: make(map[string]string), + Ports: model.PortList{ + &model.Port{ + Name: "default", + Port: 8080, + Protocol: model.ProtocolHTTP, + }, + }, + }, + }, nil) + + meshConfig := &meshconfig.MeshConfig{ + ConnectTimeout: &types.Duration{ + Seconds: 10, + Nanos: 1, + }, + LocalityLbSetting: &meshconfig.LocalityLoadBalancerSetting{ + Failover: []*meshconfig.LocalityLoadBalancerSetting_Failover{ + { + From: "region1", + To: "region2", + }, + }, + }, + } + + configStore := &fakes.IstioConfigStore{} + + env := &model.Environment{ + ServiceDiscovery: serviceDiscovery, + ServiceAccounts: &fakes.ServiceAccounts{}, + IstioConfigStore: configStore, + Mesh: meshConfig, + MixerSAN: []string{}, + } + + env.PushContext = model.NewPushContext() + env.PushContext.InitContext(env) + env.PushContext.SetDestinationRules([]model.Config{ + {ConfigMeta: model.ConfigMeta{ + Type: model.DestinationRule.Type, + Version: model.DestinationRule.Version, + Name: "acme", + }, + Spec: &networking.DestinationRule{ + Host: "test.example.org", + TrafficPolicy: &networking.TrafficPolicy{ + OutlierDetection: &networking.OutlierDetection{ + ConsecutiveErrors: 5, + }, + }, + }, + }}) + + return env +} + +func buildFakeCluster() *apiv2.Cluster { + return &apiv2.Cluster{ + Name: "outbound|8080||test.example.org", + LoadAssignment: &apiv2.ClusterLoadAssignment{ + ClusterName: "outbound|8080||test.example.org", + Endpoints: []endpoint.LocalityLbEndpoints{ + { + Locality: &envoycore.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone1", + }, + LbEndpoints: []endpoint.LbEndpoint{}, + LoadBalancingWeight: &types.UInt32Value{ + Value: 1, + }, + Priority: 0, + }, + { + Locality: &envoycore.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone2", + }, + LbEndpoints: []endpoint.LbEndpoint{}, + LoadBalancingWeight: &types.UInt32Value{ + Value: 1, + }, + Priority: 0, + }, + { + Locality: &envoycore.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone3", + }, + LbEndpoints: []endpoint.LbEndpoint{}, + LoadBalancingWeight: &types.UInt32Value{ + Value: 1, + }, + Priority: 0, + }, + { + Locality: &envoycore.Locality{ + Region: "region1", + Zone: "zone2", + SubZone: "", + }, + LbEndpoints: []endpoint.LbEndpoint{}, + LoadBalancingWeight: &types.UInt32Value{ + Value: 1, + }, + Priority: 0, + }, + { + Locality: &envoycore.Locality{ + Region: "region2", + Zone: "", + SubZone: "", + }, + LbEndpoints: []endpoint.LbEndpoint{}, + LoadBalancingWeight: &types.UInt32Value{ + Value: 1, + }, + Priority: 0, + }, + { + Locality: &envoycore.Locality{ + Region: "region3", + Zone: "", + SubZone: "", + }, + LbEndpoints: []endpoint.LbEndpoint{}, + LoadBalancingWeight: &types.UInt32Value{ + Value: 1, + }, + Priority: 0, + }, + }, + }, + } +} diff --git a/pilot/pkg/networking/core/v1alpha3/configgen.go b/pilot/pkg/networking/core/v1alpha3/configgen.go index 30066e075afb..04583b263db1 100644 --- a/pilot/pkg/networking/core/v1alpha3/configgen.go +++ b/pilot/pkg/networking/core/v1alpha3/configgen.go @@ -54,6 +54,7 @@ func (configgen *ConfigGeneratorImpl) BuildSharedPushState(env *model.Environmen namespaceMap[""] = struct{}{} // generate outbound clusters for all namespaces in parallel. + // TODO: for large number of clusters this may result in OOM, needs rate control !!! wg := &sync.WaitGroup{} mutex := &sync.Mutex{} wg.Add(len(namespaceMap)) diff --git a/pilot/pkg/networking/core/v1alpha3/fakes/fake_service_discovery.go b/pilot/pkg/networking/core/v1alpha3/fakes/fake_service_discovery.go index c3175799542e..4715471632ce 100644 --- a/pilot/pkg/networking/core/v1alpha3/fakes/fake_service_discovery.go +++ b/pilot/pkg/networking/core/v1alpha3/fakes/fake_service_discovery.go @@ -346,6 +346,12 @@ func (fake *ServiceDiscovery) GetProxyServiceInstances(arg1 *model.Proxy) ([]*mo return fake.getProxyServiceInstancesReturns.result1, fake.getProxyServiceInstancesReturns.result2 } +// GetProxyLocality returns the locality where the proxy runs. +func (fake *ServiceDiscovery) GetProxyLocality(node *model.Proxy) string { + // not implemented + return "" +} + func (fake *ServiceDiscovery) GetProxyServiceInstancesCallCount() int { fake.getProxyServiceInstancesMutex.RLock() defer fake.getProxyServiceInstancesMutex.RUnlock() diff --git a/pilot/pkg/networking/core/v1alpha3/listener.go b/pilot/pkg/networking/core/v1alpha3/listener.go index dffed1b440b7..bb8c6fe969ec 100644 --- a/pilot/pkg/networking/core/v1alpha3/listener.go +++ b/pilot/pkg/networking/core/v1alpha3/listener.go @@ -395,7 +395,6 @@ func (configgen *ConfigGeneratorImpl) buildSidecarInboundListeners(env *model.En } else { rule := sidecarScope.Config.Spec.(*networking.Sidecar) - for _, ingressListener := range rule.Ingress { // determine the bindToPort setting for listeners bindToPort := false @@ -420,6 +419,16 @@ func (configgen *ConfigGeneratorImpl) buildSidecarInboundListeners(env *model.En Name: ingressListener.Port.Name, } + // if app doesn't have a declared ServicePort, but a sidecar ingress is defined - we can't generate a listener + // for that port since we don't know what policies or configs apply to it ( many are based on service matching). + // Sidecar doesn't include all the info needed to configure a port. + instance := configgen.findServiceInstanceForIngressListener(proxyInstances, ingressListener) + + if instance == nil { + // We didn't find a matching service instance. Skip this ingress listener + continue + } + bind := ingressListener.Bind // if bindToPort is true, we set the bind address if empty to 0.0.0.0 - this is an inbound port. if len(bind) == 0 && bindToPort { @@ -428,7 +437,7 @@ func (configgen *ConfigGeneratorImpl) buildSidecarInboundListeners(env *model.En // auto infer the IP from the proxyInstances // We assume all endpoints in the proxy instances have the same IP // as they should all be pointing to the same network endpoint - bind = proxyInstances[0].Endpoint.Address + bind = instance.Endpoint.Address } listenerOpts := buildListenerOpts{ @@ -441,21 +450,6 @@ func (configgen *ConfigGeneratorImpl) buildSidecarInboundListeners(env *model.En bindToPort: bindToPort, } - // Construct a dummy service instance for this port so that the rest of the code doesn't freak out - // due to a missing instance. Technically this instance is not a service instance as it corresponds to - // some workload listener. But given that we force all workloads to be part of atleast one service, - // lets create a service instance for this workload based on the first service associated with the workload. - // TODO: We are arbitrarily using the first proxyInstance. When a workload has multiple services bound to it, - // what happens? We could run the loop for every instance but we would have the same listeners. - - // First create a copy of a service instance - instance := &model.ServiceInstance{ - Endpoint: proxyInstances[0].Endpoint, - Service: proxyInstances[0].Service, - Labels: proxyInstances[0].Labels, - ServiceAccount: proxyInstances[0].ServiceAccount, - } - // Update the values here so that the plugins use the right ports // uds values // TODO: all plugins need to be updated to account for the fact that @@ -690,23 +684,8 @@ func (configgen *ConfigGeneratorImpl) buildSidecarOutboundListeners(env *model.E meshGateway := map[string]bool{model.IstioMeshGateway: true} virtualServices := push.VirtualServices(node, meshGateway) - // determine the bindToPort setting for listeners - bindToPort := false - if noneMode { - bindToPort = true - } - - bind := "" - if bindToPort { - bind = LocalhostAddress - } for _, service := range services { for _, servicePort := range service.Ports { - // if the workload has NONE mode interception, then we generate TCP ports only - // Skip generating HTTP listeners, as we will generate a single HTTP proxy - if bindToPort && servicePort.Protocol.IsHTTP() { - continue - } listenerOpts := buildListenerOpts{ env: env, @@ -714,8 +693,8 @@ func (configgen *ConfigGeneratorImpl) buildSidecarOutboundListeners(env *model.E proxyInstances: proxyInstances, proxyLabels: proxyLabels, port: servicePort.Port, - bind: bind, - bindToPort: bindToPort, + bind: "", + bindToPort: false, } pluginParams := &plugin.InputParams{ @@ -725,7 +704,7 @@ func (configgen *ConfigGeneratorImpl) buildSidecarOutboundListeners(env *model.E Node: node, ProxyInstances: proxyInstances, Push: push, - Bind: bind, + Bind: "", Port: servicePort, Service: service, } @@ -754,7 +733,7 @@ func (configgen *ConfigGeneratorImpl) buildSidecarOutboundListeners(env *model.E // determine the bindToPort setting for listeners bindToPort := false - if node.GetInterceptionMode() == model.InterceptionNone { + if noneMode { // dont care what the listener's capture mode setting is. The proxy does not use iptables bindToPort = true } else { @@ -786,19 +765,20 @@ func (configgen *ConfigGeneratorImpl) buildSidecarOutboundListeners(env *model.E Name: egressListener.IstioListener.Port.Name, } - // user can specify a Port without a bind address. If IPtables capture mode - // (i.e bind to port is false) we bind to 0.0.0.0. Else, for NONE mode we bind to 127.0.0.1 + // If capture mode is NONE i.e. bindToPort is true, we will only bind to + // loopback IP. If captureMode is not NONE, i.e. bindToPort is false, then + // we will bind to user specified IP (if any) or to 0.0.0.0 // We cannot auto infer bind IPs here from the imported services as the user could specify // some random port and import 100s of multi-port services. Our behavior for HTTP is that // when the user explicitly specifies a port, we establish a HTTP proxy on that port for // the imported services. For TCP, the user would have to specify a virtualService for the // imported Service, mapping from the listenPort to some specific service port - bind := egressListener.IstioListener.Bind - // if bindToPort is true, we set the bind address if empty to 127.0.0.1 - if len(bind) == 0 { - if bindToPort { - bind = LocalhostAddress - } else { + bind := "" + if bindToPort { + bind = LocalhostAddress + } else { + bind = egressListener.IstioListener.Bind + if len(bind) == 0 { bind = WildcardAddress } } @@ -857,6 +837,12 @@ func (configgen *ConfigGeneratorImpl) buildSidecarOutboundListeners(env *model.E } for _, service := range services { for _, servicePort := range service.Ports { + // check if this node is capable of starting a listener on this service port + // if bindToPort is true. Else Envoy will crash + if !validatePort(node, servicePort.Port, bindToPort) { + continue + } + listenerOpts := buildListenerOpts{ env: env, proxy: node, @@ -904,6 +890,26 @@ func (configgen *ConfigGeneratorImpl) buildSidecarOutboundListeners(env *model.E return append(tcpListeners, httpListeners...) } +// validatePort checks if the sidecar proxy is capable of listening on a +// given port in a particular bind mode for a given UID. Sidecars not running +// as root wont be able to listen on ports <1024 when using bindToPort = true +func validatePort(node *model.Proxy, i int, bindToPort bool) bool { + if !bindToPort { + return true // all good, iptables doesn't care + } + + if i > 1024 { + return true + } + + proxyProcessUID := node.Metadata[model.NodeMetadataSidecarUID] + if proxyProcessUID == "0" { + return true + } + + return false +} + // buildSidecarOutboundListenerForPortOrUDS builds a single listener and // adds it to the listenerMap provided by the caller. Listeners are added // if one doesn't already exist. HTTP listeners on same port are ignored @@ -1244,7 +1250,7 @@ func buildSidecarInboundMgmtListeners(node *model.Proxy, env *model.Environment, for _, mPort := range managementPorts { switch mPort.Protocol { case model.ProtocolHTTP, model.ProtocolHTTP2, model.ProtocolGRPC, model.ProtocolGRPCWeb, model.ProtocolTCP, - model.ProtocolHTTPS, model.ProtocolTLS, model.ProtocolMongo, model.ProtocolRedis: + model.ProtocolHTTPS, model.ProtocolTLS, model.ProtocolMongo, model.ProtocolRedis, model.ProtocolMySQL: instance := &model.ServiceInstance{ Endpoint: model.NetworkEndpoint{ diff --git a/pilot/pkg/networking/core/v1alpha3/listener_test.go b/pilot/pkg/networking/core/v1alpha3/listener_test.go index 48b0b35d75d1..458f083eed36 100644 --- a/pilot/pkg/networking/core/v1alpha3/listener_test.go +++ b/pilot/pkg/networking/core/v1alpha3/listener_test.go @@ -39,7 +39,7 @@ var ( IPAddresses: []string{"1.1.1.1"}, ID: "v0.default", DNSDomain: "default.example.org", - Metadata: map[string]string{model.NodeConfigNamespace: "not-default"}, + Metadata: map[string]string{model.NodeMetadataConfigNamespace: "not-default"}, ConfigNamespace: "not-default", } proxyInstances = []*model.ServiceInstance{ @@ -188,7 +188,7 @@ func testInboundListenerConfigWithSidecar(t *testing.T, services ...*model.Servi Ingress: []*networking.IstioIngressListener{ { Port: &networking.Port{ - Number: 80, + Number: 8080, Protocol: "HTTP", Name: "uds", }, @@ -411,6 +411,7 @@ func buildService(hostname string, ip string, protocol model.Protocol, creationT func buildEndpoint(service *model.Service) model.NetworkEndpoint { return model.NetworkEndpoint{ ServicePort: service.Ports[0], + Port: 8080, } } diff --git a/pilot/pkg/networking/core/v1alpha3/networkfilter.go b/pilot/pkg/networking/core/v1alpha3/networkfilter.go index 4f54771c184d..cb36a6bcf658 100644 --- a/pilot/pkg/networking/core/v1alpha3/networkfilter.go +++ b/pilot/pkg/networking/core/v1alpha3/networkfilter.go @@ -22,6 +22,7 @@ import ( fileaccesslog "github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v2" accesslog "github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2" mongo_proxy "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mongo_proxy/v2" + mysql_proxy "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mysql_proxy/v1alpha1" redis_proxy "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/redis_proxy/v2" tcp_proxy "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2" xdsutil "github.com/envoyproxy/go-control-plane/pkg/util" @@ -84,7 +85,7 @@ func buildOutboundNetworkFiltersWithSingleDestination(env *model.Environment, no // TODO: Need to set other fields such as Idle timeouts } tcpFilter := setAccessLogAndBuildTCPFilter(env, node, config) - return buildOutboundNetworkFiltersStack(port, tcpFilter, clusterName, clusterName) + return buildOutboundNetworkFiltersStack(node, port, tcpFilter, clusterName, clusterName) } // buildOutboundNetworkFiltersWithWeightedClusters takes a set of weighted @@ -115,19 +116,29 @@ func buildOutboundNetworkFiltersWithWeightedClusters(env *model.Environment, nod // TODO: Need to handle multiple cluster names for Redis clusterName := clusterSpecifier.WeightedClusters.Clusters[0].Name tcpFilter := setAccessLogAndBuildTCPFilter(env, node, proxyConfig) - return buildOutboundNetworkFiltersStack(port, tcpFilter, statPrefix, clusterName) + return buildOutboundNetworkFiltersStack(node, port, tcpFilter, statPrefix, clusterName) } // buildOutboundNetworkFiltersStack builds a slice of network filters based on // the protocol in use and the given TCP filter instance. -func buildOutboundNetworkFiltersStack(port *model.Port, tcpFilter *listener.Filter, statPrefix, clusterName string) []listener.Filter { +func buildOutboundNetworkFiltersStack(node *model.Proxy, port *model.Port, tcpFilter *listener.Filter, statPrefix, + clusterName string) []listener.Filter { + filterstack := make([]listener.Filter, 0) switch port.Protocol { case model.ProtocolMongo: filterstack = append(filterstack, buildOutboundMongoFilter(statPrefix)) - case model.ProtocolRedis: - filterstack = append(filterstack, buildOutboundRedisFilter(statPrefix, clusterName)) } + + if util.IsProxyVersionGE11(node) { + switch port.Protocol { + case model.ProtocolRedis: + filterstack = append(filterstack, buildOutboundRedisFilter(statPrefix, clusterName)) + case model.ProtocolMySQL: + filterstack = append(filterstack, buildOutboundMySQLFilter(statPrefix)) + } + } + filterstack = append(filterstack, *tcpFilter) return filterstack } @@ -139,7 +150,7 @@ func buildOutboundNetworkFilters(env *model.Environment, node *model.Proxy, routes []*networking.RouteDestination, push *model.PushContext, port *model.Port, config model.ConfigMeta) []listener.Filter { - if len(routes) == 1 { + if !util.IsProxyVersionGE11(node) || len(routes) == 1 { service := push.ServiceByHostname[model.Hostname(routes[0].Destination.Host)] clusterName := istio_route.GetDestinationCluster(routes[0].Destination, service, port.Port) return buildOutboundNetworkFiltersWithSingleDestination(env, node, clusterName, port) @@ -195,3 +206,15 @@ func buildOutboundRedisFilter(statPrefix, clusterName string) listener.Filter { ConfigType: &listener.Filter_Config{Config: util.MessageToStruct(config)}, } } + +// buildOutboundMySQLFilter builds an outbound Envoy MySQLProxy filter. +func buildOutboundMySQLFilter(statPrefix string) listener.Filter { + config := &mysql_proxy.MySQLProxy{ + StatPrefix: statPrefix, // MySQL stats are prefixed with mysql. by Envoy. + } + + return listener.Filter{ + Name: xdsutil.MySQLProxy, + ConfigType: &listener.Filter_Config{Config: util.MessageToStruct(config)}, + } +} diff --git a/pilot/pkg/networking/core/v1alpha3/route/retry/retry.go b/pilot/pkg/networking/core/v1alpha3/route/retry/retry.go index d65e9469d155..f8e314668ebb 100644 --- a/pilot/pkg/networking/core/v1alpha3/route/retry/retry.go +++ b/pilot/pkg/networking/core/v1alpha3/route/retry/retry.go @@ -27,12 +27,12 @@ import ( ) // DefaultPolicy gets a copy of the default retry policy. -func DefaultPolicy() *route.RouteAction_RetryPolicy { - policy := route.RouteAction_RetryPolicy{ +func DefaultPolicy() *route.RetryPolicy { + policy := route.RetryPolicy{ NumRetries: &types.UInt32Value{Value: 10}, RetryOn: "connect-failure,refused-stream,unavailable,cancelled,resource-exhausted", RetriableStatusCodes: []uint32{http.StatusServiceUnavailable}, - RetryHostPredicate: []*route.RouteAction_RetryPolicy_RetryHostPredicate{ + RetryHostPredicate: []*route.RetryPolicy_RetryHostPredicate{ { // to configure retries to prefer hosts that haven’t been attempted already, // the builtin `envoy.retry_host_predicates.previous_hosts` predicate can be used. @@ -58,7 +58,7 @@ func DefaultPolicy() *route.RouteAction_RetryPolicy { // is appended when encountering parts that are valid HTTP status codes. // // - PerTryTimeout: set from in.PerTryTimeout (if specified) -func ConvertPolicy(in *networking.HTTPRetry) *route.RouteAction_RetryPolicy { +func ConvertPolicy(in *networking.HTTPRetry) *route.RetryPolicy { if in == nil { // No policy was set, use a default. return DefaultPolicy() diff --git a/pilot/pkg/networking/core/v1alpha3/route/route.go b/pilot/pkg/networking/core/v1alpha3/route/route.go index f526b214cd86..1277313e3507 100644 --- a/pilot/pkg/networking/core/v1alpha3/route/route.go +++ b/pilot/pkg/networking/core/v1alpha3/route/route.go @@ -424,7 +424,11 @@ func translateRoute(push *model.PushContext, node *model.Proxy, in *networking.H weighted = append(weighted, clusterWeight) - hashPolicy := getHashPolicy(push, node, dst) + var configNamespace string + if serviceRegistry[hostname] != nil { + configNamespace = serviceRegistry[hostname].Attributes.Namespace + } + hashPolicy := getHashPolicy(push, node, dst, configNamespace) if hashPolicy != nil { action.HashPolicy = append(action.HashPolicy, hashPolicy) } @@ -570,7 +574,9 @@ func translateCORSPolicy(in *networking.CorsPolicy) *route.CorsPolicy { out := route.CorsPolicy{ AllowOrigin: in.AllowOrigin, - Enabled: proto.BoolTrue, + EnabledSpecifier: &route.CorsPolicy_Enabled{ + Enabled: proto.BoolTrue, + }, } out.AllowCredentials = in.AllowCredentials out.AllowHeaders = strings.Join(in.AllowHeaders, ",") @@ -743,13 +749,18 @@ func portLevelSettingsConsistentHash(dst *networking.Destination, return nil } -func getHashPolicy(push *model.PushContext, node *model.Proxy, dst *networking.HTTPRouteDestination) *route.RouteAction_HashPolicy { +func getHashPolicy(push *model.PushContext, node *model.Proxy, dst *networking.HTTPRouteDestination, + configNamespace string) *route.RouteAction_HashPolicy { if push == nil { return nil } destination := dst.GetDestination() - destinationRule := push.DestinationRule(node, model.Hostname(destination.GetHost())) + destinationRule := push.DestinationRule(node, + &model.Service{ + Hostname: model.Hostname(destination.Host), + Attributes: model.ServiceAttributes{Namespace: configNamespace}, + }) if destinationRule == nil { return nil } diff --git a/pilot/pkg/networking/plugin/mixer/mixer.go b/pilot/pkg/networking/plugin/mixer/mixer.go index f1217bacf795..4323f046c28e 100644 --- a/pilot/pkg/networking/plugin/mixer/mixer.go +++ b/pilot/pkg/networking/plugin/mixer/mixer.go @@ -150,7 +150,9 @@ func (mixerplugin) OnOutboundCluster(in *plugin.InputParams, cluster *xdsapi.Clu { LbEndpoints: []e.LbEndpoint{ { - Endpoint: &e.Endpoint{Address: &addr}, + HostIdentifier: &e.LbEndpoint_Endpoint{ + Endpoint: &e.Endpoint{Address: &addr}, + }, }, }, }, diff --git a/pilot/pkg/networking/plugin/plugin.go b/pilot/pkg/networking/plugin/plugin.go index 21ad165f6925..049e291da3f5 100644 --- a/pilot/pkg/networking/plugin/plugin.go +++ b/pilot/pkg/networking/plugin/plugin.go @@ -51,7 +51,7 @@ func ModelProtocolToListenerProtocol(protocol model.Protocol) ListenerProtocol { case model.ProtocolHTTP, model.ProtocolHTTP2, model.ProtocolGRPC, model.ProtocolGRPCWeb: return ListenerProtocolHTTP case model.ProtocolTCP, model.ProtocolHTTPS, model.ProtocolTLS, - model.ProtocolMongo, model.ProtocolRedis: + model.ProtocolMongo, model.ProtocolRedis, model.ProtocolMySQL: return ListenerProtocolTCP default: return ListenerProtocolUnknown diff --git a/pilot/pkg/networking/util/util.go b/pilot/pkg/networking/util/util.go index 4790c089e97c..8d660e823c17 100644 --- a/pilot/pkg/networking/util/util.go +++ b/pilot/pkg/networking/util/util.go @@ -225,10 +225,7 @@ func SortVirtualHosts(hosts []route.VirtualHost) { // IsProxyVersionGE11 checks whether the given Proxy version is greater than or equals 1.1. func IsProxyVersionGE11(node *model.Proxy) bool { ver, _ := node.GetProxyVersion() - if ver >= "1.1" { - return true - } - return false + return ver >= "1.1" } // ResolveHostsInNetworksConfig will go through the Gateways addresses for all @@ -259,22 +256,77 @@ func ConvertLocality(locality string) *core.Locality { return nil } + region, zone, subzone := SplitLocality(locality) + return &core.Locality{ + Region: region, + Zone: zone, + SubZone: subzone, + } +} + +func LocalityMatch(proxyLocality model.LocalityInterface, ruleLocality string) bool { + ruleRegion, ruleZone, ruleSubzone := SplitLocality(ruleLocality) + regionMatch := ruleRegion == "*" || proxyLocality.GetRegion() == ruleRegion + zoneMatch := ruleZone == "*" || ruleZone == "" || proxyLocality.GetZone() == ruleZone + subzoneMatch := ruleSubzone == "*" || ruleSubzone == "" || proxyLocality.GetSubZone() == ruleSubzone + + if regionMatch && zoneMatch && subzoneMatch { + return true + } + return false +} + +func SplitLocality(locality string) (region, zone, subzone string) { items := strings.Split(locality, "/") switch len(items) { case 1: - return &core.Locality{ - Region: items[0], - } + return items[0], "", "" case 2: - return &core.Locality{ - Region: items[0], - Zone: items[1], - } + return items[0], items[1], "" default: - return &core.Locality{ - Region: items[0], - Zone: items[1], - SubZone: items[2], + return items[0], items[1], items[2] + } +} + +func LbPriority(proxyLocality, endpointsLocality model.LocalityInterface) int { + if proxyLocality.GetRegion() == endpointsLocality.GetRegion() { + if proxyLocality.GetZone() == endpointsLocality.GetZone() { + if proxyLocality.GetSubZone() == endpointsLocality.GetSubZone() { + return 0 + } + return 1 } + return 2 + } + return 3 +} + +// return a shallow copy cluster +func CloneCluster(cluster *xdsapi.Cluster) *xdsapi.Cluster { + if cluster == nil { + return nil } + + out := *cluster + loadAssignment := *cluster.LoadAssignment + out.LoadAssignment = &loadAssignment + clonedLocEps := CloneLocalityLbEndpoints(loadAssignment.Endpoints) + out.LoadAssignment.Endpoints = clonedLocEps + + return &out +} + +// return a shallow copy LocalityLbEndpoints +func CloneLocalityLbEndpoints(endpoints []endpoint.LocalityLbEndpoints) []endpoint.LocalityLbEndpoints { + out := make([]endpoint.LocalityLbEndpoints, 0, len(endpoints)) + for _, ep := range endpoints { + clone := ep + if ep.LoadBalancingWeight != nil { + clone.LoadBalancingWeight = &types.UInt32Value{ + Value: ep.GetLoadBalancingWeight().GetValue(), + } + } + out = append(out, clone) + } + return out } diff --git a/pilot/pkg/networking/util/util_test.go b/pilot/pkg/networking/util/util_test.go index 98563ef201a2..10228d5533cf 100644 --- a/pilot/pkg/networking/util/util_test.go +++ b/pilot/pkg/networking/util/util_test.go @@ -18,7 +18,9 @@ import ( "reflect" "testing" + v2 "github.com/envoyproxy/go-control-plane/envoy/api/v2" "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + "github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint" "github.com/gogo/protobuf/types" meshconfig "istio.io/api/mesh/v1alpha1" @@ -271,3 +273,153 @@ func TestConvertLocality(t *testing.T) { }) } } + +func TestLocalityMatch(t *testing.T) { + tests := []struct { + name string + locality *core.Locality + rule string + match bool + }{ + { + name: "wildcard matching", + locality: &core.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone1", + }, + rule: "*", + match: true, + }, + { + name: "wildcard matching", + locality: &core.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone1", + }, + rule: "region1/*", + match: true, + }, + { + name: "wildcard matching", + locality: &core.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone1", + }, + rule: "region1/zone1/*", + match: true, + }, + { + name: "wildcard not matching", + locality: &core.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone1", + }, + rule: "region1/zone2/*", + match: false, + }, + { + name: "region matching", + locality: &core.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone1", + }, + rule: "region1", + match: true, + }, + { + name: "region and zone matching", + locality: &core.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone1", + }, + rule: "region1/zone1", + match: true, + }, + { + name: "zubzone wildcard matching", + locality: &core.Locality{ + Region: "region1", + Zone: "zone1", + }, + rule: "region1/zone1", + match: true, + }, + { + name: "subzone mismatching", + locality: &core.Locality{ + Region: "region1", + Zone: "zone1", + }, + rule: "region1/zone1/subzone2", + match: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + match := LocalityMatch(tt.locality, tt.rule) + if match != tt.match { + t.Errorf("Expected matching result %v, but got %v", tt.match, match) + } + }) + } +} + +func TestCloneCluster(t *testing.T) { + cluster := buildFakeCluster() + clone := CloneCluster(cluster) + cluster.LoadAssignment.Endpoints[0].LoadBalancingWeight.Value = 10 + cluster.LoadAssignment.Endpoints[0].Priority = 8 + cluster.LoadAssignment.Endpoints[0].LbEndpoints = nil + + if clone.LoadAssignment.Endpoints[0].LoadBalancingWeight.GetValue() == 10 { + t.Errorf("LoadBalancingWeight mutated") + } + if clone.LoadAssignment.Endpoints[0].Priority == 8 { + t.Errorf("Priority mutated") + } + if clone.LoadAssignment.Endpoints[0].LbEndpoints == nil { + t.Errorf("LbEndpoints mutated") + } +} + +func buildFakeCluster() *v2.Cluster { + return &v2.Cluster{ + Name: "outbound|8080||test.example.org", + LoadAssignment: &v2.ClusterLoadAssignment{ + ClusterName: "outbound|8080||test.example.org", + Endpoints: []endpoint.LocalityLbEndpoints{ + { + Locality: &core.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone1", + }, + LbEndpoints: []endpoint.LbEndpoint{}, + LoadBalancingWeight: &types.UInt32Value{ + Value: 1, + }, + Priority: 0, + }, + { + Locality: &core.Locality{ + Region: "region1", + Zone: "zone1", + SubZone: "subzone2", + }, + LbEndpoints: []endpoint.LbEndpoint{}, + LoadBalancingWeight: &types.UInt32Value{ + Value: 1, + }, + Priority: 0, + }, + }, + }, + } +} diff --git a/pilot/pkg/proxy/envoy/v2/ads.go b/pilot/pkg/proxy/envoy/v2/ads.go index 66ccd4510f45..ecf52ae86ff3 100644 --- a/pilot/pkg/proxy/envoy/v2/ads.go +++ b/pilot/pkg/proxy/envoy/v2/ads.go @@ -35,6 +35,7 @@ import ( "google.golang.org/grpc/status" "istio.io/istio/pilot/pkg/model" + "istio.io/istio/pilot/pkg/networking/util" istiolog "istio.io/istio/pkg/log" ) @@ -317,7 +318,7 @@ func (s *DiscoveryServer) configDump(conn *XdsConnection) (*adminapi.ConfigDump, type XdsEvent struct { // If not empty, it is used to indicate the event is caused by a change in the clusters. // Only EDS for the listed clusters will be sent. - edsUpdatedServices map[string]*EndpointShards + edsUpdatedServices map[string]struct{} push *model.PushContext @@ -458,7 +459,7 @@ func (s *DiscoveryServer) StreamAggregatedResources(stream ads.AggregatedDiscove // too verbose - sent immediately after EDS response is received adsLog.Debugf("ADS:LDS: REQ %s %v", con.ConID, peerAddr) con.LDSWatch = true - err := s.pushLds(con, s.globalPushContext(), true, versionInfo()) + err := s.pushLds(con, s.globalPushContext(), versionInfo()) if err != nil { return err } @@ -477,7 +478,7 @@ func (s *DiscoveryServer) StreamAggregatedResources(stream ads.AggregatedDiscove routeNonceSent := con.RouteNonceSent routeVersionInfoSent := con.RouteVersionInfoSent con.mu.RUnlock() - if routeNonceSent != discReq.ResponseNonce { + if routeNonceSent != "" && routeNonceSent != discReq.ResponseNonce { adsLog.Debugf("ADS:RDS: Expired nonce received %s %s (%v), sent %s, received %s", peerAddr, con.ConID, con.modelNode, routeNonceSent, discReq.ResponseNonce) rdsExpiredNonce.Inc() @@ -568,7 +569,7 @@ func (s *DiscoveryServer) StreamAggregatedResources(stream ads.AggregatedDiscove con.Clusters = clusters adsLog.Debugf("ADS:EDS: REQ %s %s clusters: %d", peerAddr, con.ConID, len(con.Clusters)) - err := s.pushEds(s.globalPushContext(), con, true, nil) + err := s.pushEds(s.globalPushContext(), con, nil) if err != nil { return err } @@ -620,7 +621,18 @@ func (s *DiscoveryServer) initConnectionNode(discReq *xdsapi.DiscoveryRequest, c } // Update the config namespace associated with this proxy nt.ConfigNamespace = model.GetProxyConfigNamespace(nt) - + locality := model.GetProxyLocality(discReq.Node) + if locality == nil { + locality := s.Env.GetProxyLocality(nt) + region, zone, subzone := util.SplitLocality(locality) + nt.Locality = model.Locality{ + Region: region, + Zone: zone, + SubZone: subzone, + } + } else { + nt.Locality = *locality + } con.mu.Lock() con.modelNode = nt if con.ConID == "" { @@ -651,7 +663,7 @@ func (s *DiscoveryServer) pushConnection(con *XdsConnection, pushEv *XdsEvent) e // Push only EDS. This is indexed already - push immediately // (may need a throttle) if len(con.Clusters) > 0 { - if err := s.pushEds(pushEv.push, con, false, pushEv.edsUpdatedServices); err != nil { + if err := s.pushEds(pushEv.push, con, pushEv.edsUpdatedServices); err != nil { return err } } @@ -700,13 +712,13 @@ func (s *DiscoveryServer) pushConnection(con *XdsConnection, pushEv *XdsEvent) e } if len(con.Clusters) > 0 { - err := s.pushEds(pushEv.push, con, true, nil) + err := s.pushEds(pushEv.push, con, nil) if err != nil { return err } } if con.LDSWatch { - err := s.pushLds(con, pushEv.push, false, pushEv.version) + err := s.pushLds(con, pushEv.push, pushEv.version) if err != nil { return err } @@ -737,7 +749,7 @@ func AdsPushAll(s *DiscoveryServer) { // Primary code path is from v1 discoveryService.clearCache(), which is added as a handler // to the model ConfigStorageCache and Controller. func (s *DiscoveryServer) AdsPushAll(version string, push *model.PushContext, - full bool, edsUpdates map[string]*EndpointShards) { + full bool, edsUpdates map[string]struct{}) { if !full { s.edsIncremental(version, push, edsUpdates) return @@ -754,9 +766,12 @@ func (s *DiscoveryServer) AdsPushAll(version string, push *model.PushContext, // instead of once per endpoint. edsClusterMutex.Lock() // Create a temp map to avoid locking the add/remove - cMap := make(map[string]*EdsCluster, len(edsClusters)) + cMap := make(map[string]map[model.Locality]*EdsCluster, len(edsClusters)) for k, v := range edsClusters { - cMap[k] = v + cMap[k] = map[model.Locality]*EdsCluster{} + for locality, edsCluster := range v { + cMap[k][locality] = edsCluster + } } edsClusterMutex.Unlock() @@ -775,7 +790,7 @@ func (s *DiscoveryServer) AdsPushAll(version string, push *model.PushContext, // Send a signal to all connections, with a push event. func (s *DiscoveryServer) startPush(version string, push *model.PushContext, full bool, - edsUpdates map[string]*EndpointShards) { + edsUpdates map[string]struct{}) { // Push config changes, iterating over connected envoys. This cover ADS and EDS(0.7), both share // the same connection table diff --git a/pilot/pkg/proxy/envoy/v2/ads_test.go b/pilot/pkg/proxy/envoy/v2/ads_test.go index db854b9c729c..ff07e427e25d 100644 --- a/pilot/pkg/proxy/envoy/v2/ads_test.go +++ b/pilot/pkg/proxy/envoy/v2/ads_test.go @@ -55,7 +55,7 @@ func TestAdsReconnectWithNonce(t *testing.T) { } defer cancel() - err = sendEDSReqReconnect([]string{"service3.default.svc.cluster.local|http"}, edsstr, res) + err = sendEDSReqReconnect([]string{"outbound|1080||service3.default.svc.cluster.local"}, edsstr, res) if err != nil { t.Fatal(err) } @@ -224,8 +224,8 @@ func TestAdsUpdate(t *testing.T) { if len(lbe) == 0 { t.Fatal("No lb endpoints") } - if "10.2.0.1" != lbe[0].Endpoint.Address.GetSocketAddress().Address { - t.Error("Expecting 10.2.0.1 got ", lbe[0].Endpoint.Address.GetSocketAddress().Address) + if "10.2.0.1" != lbe[0].GetEndpoint().Address.GetSocketAddress().Address { + t.Error("Expecting 10.2.0.1 got ", lbe[0].GetEndpoint().Address.GetSocketAddress().Address) } strResponse, _ := model.ToJSONWithIndent(res1, " ") _ = ioutil.WriteFile(env.IstioOut+"/edsv2_sidecar.json", []byte(strResponse), 0644) diff --git a/pilot/pkg/proxy/envoy/v2/debug.go b/pilot/pkg/proxy/envoy/v2/debug.go index 510cb6c07cfe..db5fce3cc8cc 100644 --- a/pilot/pkg/proxy/envoy/v2/debug.go +++ b/pilot/pkg/proxy/envoy/v2/debug.go @@ -168,7 +168,9 @@ func (s *DiscoveryServer) endpointShardz(w http.ResponseWriter, req *http.Reques func (s *DiscoveryServer) workloadz(w http.ResponseWriter, req *http.Request) { _ = req.ParseForm() w.Header().Add("Content-Type", "application/json") + s.mutex.RLock() out, _ := json.MarshalIndent(s.WorkloadsByID, " ", " ") + s.mutex.RUnlock() w.Write(out) } @@ -347,7 +349,7 @@ func (s *DiscoveryServer) authenticationz(w http.ResponseWriter, req *http.Reque } info.ServerProtocol = authProtocolToString(serverProtocol) - destConfig := s.globalPushContext().DestinationRule(nil, ss.Hostname) + destConfig := s.globalPushContext().DestinationRule(nil, ss) info.DestinationRuleName = configName(destConfig) if destConfig != nil { rule := destConfig.Spec.(*networking.DestinationRule) @@ -494,15 +496,17 @@ func (s *DiscoveryServer) edsz(w http.ResponseWriter, req *http.Request) { if len(edsClusters) > 0 { fmt.Fprintln(w, "[") for _, eds := range edsClusters { - if comma { - fmt.Fprint(w, ",\n") - } else { - comma = true - } - jsonm := &jsonpb.Marshaler{Indent: " "} - dbgString, _ := jsonm.MarshalToString(eds.LoadAssignment) - if _, err := w.Write([]byte(dbgString)); err != nil { - return + for _, eds := range eds { + if comma { + fmt.Fprint(w, ",\n") + } else { + comma = true + } + jsonm := &jsonpb.Marshaler{Indent: " "} + dbgString, _ := jsonm.MarshalToString(eds.LoadAssignment) + if _, err := w.Write([]byte(dbgString)); err != nil { + return + } } } fmt.Fprintln(w, "]") diff --git a/pilot/pkg/proxy/envoy/v2/discovery.go b/pilot/pkg/proxy/envoy/v2/discovery.go index 2434e27c3406..f302801cc8ce 100644 --- a/pilot/pkg/proxy/envoy/v2/discovery.go +++ b/pilot/pkg/proxy/envoy/v2/discovery.go @@ -132,10 +132,9 @@ type DiscoveryServer struct { // edsUpdates keeps track of all service updates since last full push. // Key is the hostname (servicename). Value is set when any shard part of the service is - // updated. This should only be used in the xDS server - will be removed/made private in 1.1, - // once the last v1 pieces are cleaned. For 1.0.3+ it is used only for tracking incremental + // updated. For 1.0.3+ it is used only for tracking incremental // pushes between the 2 packages. - edsUpdates map[string]*EndpointShards + edsUpdates map[string]struct{} updateChannel chan *updateReq @@ -173,9 +172,6 @@ type EndpointShards struct { type Workload struct { // Labels Labels map[string]string - - // Annotations - Annotations map[string]string } func intEnv(envVal string, def int) int { @@ -197,7 +193,7 @@ func NewDiscoveryServer(env *model.Environment, generator core.ConfigGenerator, ConfigController: configCache, EndpointShardsByService: map[string]*EndpointShards{}, WorkloadsByID: map[string]*Workload{}, - edsUpdates: map[string]*EndpointShards{}, + edsUpdates: map[string]struct{}{}, concurrentPushLimit: make(chan struct{}, 20), // TODO(hzxuzhonghu): support configuration updateChannel: make(chan *updateReq, 10), } @@ -292,7 +288,7 @@ func (s *DiscoveryServer) periodicRefreshMetrics() { // Push is called to push changes on config updates using ADS. This is set in DiscoveryService.Push, // to avoid direct dependencies. -func (s *DiscoveryServer) Push(full bool, edsUpdates map[string]*EndpointShards) { +func (s *DiscoveryServer) Push(full bool, edsUpdates map[string]struct{}) { if !full { adsLog.Infof("XDS Incremental Push EDS:%d", len(edsUpdates)) go s.AdsPushAll(versionInfo(), s.globalPushContext(), false, edsUpdates) @@ -372,7 +368,7 @@ func (s *DiscoveryServer) doPush(full bool) { // The changes to the map are protected by ds.mutex. edsUpdates := s.edsUpdates // Reset - any new updates will be tracked by the new map - s.edsUpdates = map[string]*EndpointShards{} + s.edsUpdates = map[string]struct{}{} s.mutex.Unlock() s.Push(full, edsUpdates) diff --git a/pilot/pkg/proxy/envoy/v2/eds.go b/pilot/pkg/proxy/envoy/v2/eds.go index cd10f7f2e540..28b6adc3bfdd 100644 --- a/pilot/pkg/proxy/envoy/v2/eds.go +++ b/pilot/pkg/proxy/envoy/v2/eds.go @@ -28,6 +28,7 @@ import ( "github.com/prometheus/client_golang/prometheus" "istio.io/istio/pilot/pkg/model" + networking_core "istio.io/istio/pilot/pkg/networking/core/v1alpha3" "istio.io/istio/pilot/pkg/networking/util" "istio.io/istio/pilot/pkg/serviceregistry/aggregate" ) @@ -57,7 +58,7 @@ import ( var ( edsClusterMutex sync.RWMutex - edsClusters = map[string]*EdsCluster{} + edsClusters = map[string]map[model.Locality]*EdsCluster{} // Tracks connections, increment on each new connection. connectionNumber = int64(0) @@ -112,8 +113,10 @@ func buildEnvoyLbEndpoint(UID string, family model.AddressFamily, address string } ep := &endpoint.LbEndpoint{ - Endpoint: &endpoint.Endpoint{ - Address: &addr, + HostIdentifier: &endpoint.LbEndpoint_Endpoint{ + Endpoint: &endpoint.Endpoint{ + Address: &addr, + }, }, } @@ -132,8 +135,10 @@ func networkEndpointToEnvoyEndpoint(e *model.NetworkEndpoint) (*endpoint.LbEndpo } addr := util.GetNetworkEndpointAddress(e) ep := &endpoint.LbEndpoint{ - Endpoint: &endpoint.Endpoint{ - Address: &addr, + HostIdentifier: &endpoint.LbEndpoint_Endpoint{ + Endpoint: &endpoint.Endpoint{ + Address: &addr, + }, }, } @@ -175,8 +180,7 @@ func endpointMetadata(UID string, network string) *core.Metadata { // a cluster of same name but with different set of endpoints. See the // explanation below for more details func (s *DiscoveryServer) updateClusterInc(push *model.PushContext, clusterName string, - edsCluster *EdsCluster) error { - + edsClusters map[model.Locality]*EdsCluster) error { var hostname model.Hostname var port int var subsetName string @@ -193,17 +197,17 @@ func (s *DiscoveryServer) updateClusterInc(push *model.PushContext, clusterName portMap, f := push.ServicePort2Name[string(hostname)] if !f { - return s.updateCluster(push, clusterName, edsCluster) + return s.updateCluster(push, clusterName, edsClusters) } svcPort, f := portMap.GetByPort(port) if !f { - return s.updateCluster(push, clusterName, edsCluster) + return s.updateCluster(push, clusterName, edsClusters) } // The service was never updated - do the full update se, f := s.EndpointShardsByService[string(hostname)] if !f { - return s.updateCluster(push, clusterName, edsCluster) + return s.updateCluster(push, clusterName, edsClusters) } cnt := 0 @@ -254,20 +258,35 @@ func (s *DiscoveryServer) updateClusterInc(push *model.PushContext, clusterName } edsInstances.With(prometheus.Labels{"cluster": clusterName}).Set(float64(cnt)) - // There is a chance multiple goroutines will update the cluster at the same time. - // This could be prevented by a lock - but because the update may be slow, it may be - // better to accept the extra computations. - // We still lock the access to the LoadAssignments. - edsCluster.mutex.Lock() - defer edsCluster.mutex.Unlock() - - edsCluster.LoadAssignment = &xdsapi.ClusterLoadAssignment{ - ClusterName: clusterName, - Endpoints: locEps, - } - if len(locEps) > 0 && edsCluster.NonEmptyTime.IsZero() { - edsCluster.NonEmptyTime = time.Now() + for locality, edsCluster := range edsClusters { + // shallow copy locEps LocalityLbEndpoints, + // because below may mutate its LoadBalancingWeight or Priority + clonedLocEps := util.CloneLocalityLbEndpoints(locEps) + + // There is a chance multiple goroutines will update the cluster at the same time. + // This could be prevented by a lock - but because the update may be slow, it may be + // better to accept the extra computations. + // We still lock the access to the LoadAssignments. + edsCluster.mutex.Lock() + defer edsCluster.mutex.Unlock() + + edsCluster.LoadAssignment = &xdsapi.ClusterLoadAssignment{ + ClusterName: clusterName, + Endpoints: clonedLocEps, + } + if len(clonedLocEps) > 0 && edsCluster.NonEmptyTime.IsZero() { + edsCluster.NonEmptyTime = time.Now() + } + dummyCluster := &xdsapi.Cluster{ + Name: clusterName, + LoadAssignment: edsCluster.LoadAssignment, + } + dummyNode := &model.Proxy{ + Locality: locality, + } + networking_core.ApplyLocalityLBSetting(dummyNode, dummyCluster, push) } + return nil } @@ -351,7 +370,7 @@ func (s *DiscoveryServer) updateServiceShards(push *model.PushContext) error { // updateCluster is called from the event (or global cache invalidation) to update // the endpoints for the cluster. -func (s *DiscoveryServer) updateCluster(push *model.PushContext, clusterName string, edsCluster *EdsCluster) error { +func (s *DiscoveryServer) updateCluster(push *model.PushContext, clusterName string, edsClusters map[model.Locality]*EdsCluster) error { // TODO: should we lock this as well ? Once we move to event-based it may not matter. var locEps []endpoint.LocalityLbEndpoints direction, subsetName, hostname, port := model.ParseSubsetKey(clusterName) @@ -378,22 +397,35 @@ func (s *DiscoveryServer) updateCluster(push *model.PushContext, clusterName str Value: uint32(len(locEps[i].LbEndpoints)), } } - // There is a chance multiple goroutines will update the cluster at the same time. - // This could be prevented by a lock - but because the update may be slow, it may be - // better to accept the extra computations. - // We still lock the access to the LoadAssignments. - edsCluster.mutex.Lock() - defer edsCluster.mutex.Unlock() - // Normalize LoadBalancingWeight in range [1, 128] locEps = LoadBalancingWeightNormalize(locEps) - edsCluster.LoadAssignment = &xdsapi.ClusterLoadAssignment{ - ClusterName: clusterName, - Endpoints: locEps, - } - if len(locEps) > 0 && edsCluster.NonEmptyTime.IsZero() { - edsCluster.NonEmptyTime = time.Now() + for locality, edsCluster := range edsClusters { + // shallow copy locEps LocalityLbEndpoints, + // because below may mutate its LoadBalancingWeight or Priority + clonedLocEps := util.CloneLocalityLbEndpoints(locEps) + + // There is a chance multiple goroutines will update the cluster at the same time. + // This could be prevented by a lock - but because the update may be slow, it may be + // better to accept the extra computations. + // We still lock the access to the LoadAssignments. + edsCluster.mutex.Lock() + defer edsCluster.mutex.Unlock() + edsCluster.LoadAssignment = &xdsapi.ClusterLoadAssignment{ + ClusterName: clusterName, + Endpoints: clonedLocEps, + } + if len(clonedLocEps) > 0 && edsCluster.NonEmptyTime.IsZero() { + edsCluster.NonEmptyTime = time.Now() + } + dummyCluster := &xdsapi.Cluster{ + Name: clusterName, + LoadAssignment: edsCluster.LoadAssignment, + } + dummyNode := &model.Proxy{ + Locality: locality, + } + networking_core.ApplyLocalityLBSetting(dummyNode, dummyCluster, push) } return nil } @@ -418,7 +450,7 @@ func (s *DiscoveryServer) SvcUpdate(cluster, hostname string, ports map[string]u // Update clusters for an incremental EDS push, and initiate the push. // Only clusters that changed are updated/pushed. -func (s *DiscoveryServer) edsIncremental(version string, push *model.PushContext, edsUpdates map[string]*EndpointShards) { +func (s *DiscoveryServer) edsIncremental(version string, push *model.PushContext, edsUpdates map[string]struct{}) { adsLog.Infof("XDS:EDSInc Pushing %s Services: %v, "+ "ConnectedEndpoints: %d", version, edsUpdates, adsClientCount()) t0 := time.Now() @@ -427,14 +459,17 @@ func (s *DiscoveryServer) edsIncremental(version string, push *model.PushContext // instead of once per endpoint. edsClusterMutex.Lock() // Create a temp map to avoid locking the add/remove - cMap := make(map[string]*EdsCluster, len(edsClusters)) + cMap := make(map[string]map[model.Locality]*EdsCluster, len(edsClusters)) for k, v := range edsClusters { _, _, hostname, _ := model.ParseSubsetKey(k) - if edsUpdates[string(hostname)] == nil { + if _, ok := edsUpdates[string(hostname)]; !ok { // Cluster was not updated, skip recomputing. continue } - cMap[k] = v + cMap[k] = make(map[model.Locality]*EdsCluster) + for locality, edsCluster := range v { + cMap[k][locality] = edsCluster + } } edsClusterMutex.Unlock() @@ -452,7 +487,7 @@ func (s *DiscoveryServer) edsIncremental(version string, push *model.PushContext } // WorkloadUpdate is called when workload labels/annotations are updated. -func (s *DiscoveryServer) WorkloadUpdate(id string, labels map[string]string, annotations map[string]string) { +func (s *DiscoveryServer) WorkloadUpdate(id string, labels map[string]string, _ map[string]string) { s.mutex.Lock() defer s.mutex.Unlock() @@ -466,8 +501,7 @@ func (s *DiscoveryServer) WorkloadUpdate(id string, labels map[string]string, an // First time this workload has been seen. Likely never connected, no need to // push s.WorkloadsByID[id] = &Workload{ - Labels: labels, - Annotations: annotations, + Labels: labels, } return } @@ -542,7 +576,7 @@ func (s *DiscoveryServer) edsUpdate(shard, serviceName string, ep.mutex.Lock() ep.Shards[shard] = istioEndpoints ep.mutex.Unlock() - s.edsUpdates[serviceName] = ep + s.edsUpdates[serviceName] = struct{}{} // for internal update: this called by DiscoveryServer.Push --> updateServiceShards, // no need to trigger push here. @@ -593,23 +627,21 @@ func connectionID(node string) string { // pushEds is pushing EDS updates for a single connection. Called the first time // a client connects, for incremental updates and for full periodic updates. -func (s *DiscoveryServer) pushEds(push *model.PushContext, con *XdsConnection, - full bool, edsUpdatedServices map[string]*EndpointShards) error { +func (s *DiscoveryServer) pushEds(push *model.PushContext, con *XdsConnection, edsUpdatedServices map[string]struct{}) error { loadAssignments := []*xdsapi.ClusterLoadAssignment{} - emptyClusters := 0 endpoints := 0 - empty := []string{} for _, clusterName := range con.Clusters { - _, _, hostname, _ := model.ParseSubsetKey(clusterName) - if edsUpdatedServices != nil && edsUpdatedServices[string(hostname)] == nil { - // Cluster was not updated, skip recomputing. - continue + if edsUpdatedServices != nil { + if _, ok := edsUpdatedServices[string(hostname)]; !ok { + // Cluster was not updated, skip recomputing. + continue + } } - c := s.getEdsCluster(clusterName) + c := s.getEdsCluster(con.modelNode, clusterName) if c == nil { totalXDSInternalErrors.Add(1) adsLog.Errorf("cluster %s was nil skipping it.", clusterName) @@ -618,7 +650,10 @@ func (s *DiscoveryServer) pushEds(push *model.PushContext, con *XdsConnection, l := loadAssignment(c) if l == nil { // fresh cluster - if err := s.updateCluster(push, clusterName, c); err != nil { + edsClusters := map[model.Locality]*EdsCluster{ + con.modelNode.Locality: c, + } + if err := s.updateCluster(push, clusterName, edsClusters); err != nil { adsLog.Errorf("error returned from updateCluster for cluster name %s, skipping it.", clusterName) totalXDSInternalErrors.Add(1) continue @@ -642,7 +677,6 @@ func (s *DiscoveryServer) pushEds(push *model.PushContext, con *XdsConnection, endpoints += len(l.Endpoints) if len(l.Endpoints) == 0 { emptyClusters++ - empty = append(empty, clusterName) } loadAssignments = append(loadAssignments, l) } @@ -656,7 +690,7 @@ func (s *DiscoveryServer) pushEds(push *model.PushContext, con *XdsConnection, } pushes.With(prometheus.Labels{"type": "eds"}).Add(1) - if full { + if edsUpdatedServices == nil { adsLog.Debugf("EDS: PUSH for %s clusters %d endpoints %d empty %d", con.ConID, len(con.Clusters), endpoints, emptyClusters) } else { @@ -669,7 +703,7 @@ func (s *DiscoveryServer) pushEds(push *model.PushContext, con *XdsConnection, // addEdsCon will track the eds connection with clusters, for optimized event-based push and debug func (s *DiscoveryServer) addEdsCon(clusterName string, node string, connection *XdsConnection) { - c := s.getOrAddEdsCluster(clusterName) + c := s.getOrAddEdsCluster(connection.modelNode, clusterName) // TODO: left the code here so we can skip sending the already-sent clusters. // See comments in ads - envoy keeps adding one cluster to the list (this seems new // previous version sent all the clusters from CDS in bulk). @@ -689,32 +723,49 @@ func (s *DiscoveryServer) addEdsCon(clusterName string, node string, connection } // getEdsCluster returns a cluster. -func (s *DiscoveryServer) getEdsCluster(clusterName string) *EdsCluster { +func (s *DiscoveryServer) getEdsCluster(proxy *model.Proxy, clusterName string) *EdsCluster { // separate method only to have proper lock. edsClusterMutex.RLock() defer edsClusterMutex.RUnlock() - return edsClusters[clusterName] + if _, ok := edsClusters[clusterName]; ok { + return edsClusters[clusterName][proxy.Locality] + } + return nil } -func (s *DiscoveryServer) getOrAddEdsCluster(clusterName string) *EdsCluster { +func (s *DiscoveryServer) getOrAddEdsCluster(proxy *model.Proxy, clusterName string) *EdsCluster { edsClusterMutex.Lock() defer edsClusterMutex.Unlock() c := edsClusters[clusterName] if c == nil { - c = &EdsCluster{discovery: s, + c := &EdsCluster{ + discovery: s, + EdsClients: map[string]*XdsConnection{}, + FirstUse: time.Now(), + } + edsClusters[clusterName] = map[model.Locality]*EdsCluster{ + proxy.Locality: c, + } + return c + } + if c != nil && c[proxy.Locality] == nil { + c := &EdsCluster{ + discovery: s, EdsClients: map[string]*XdsConnection{}, FirstUse: time.Now(), } - edsClusters[clusterName] = c + edsClusters[clusterName][proxy.Locality] = c + return c } - return c + + return edsClusters[clusterName][proxy.Locality] } // removeEdsCon is called when a gRPC stream is closed, for each cluster that was watched by the // stream. As of 0.7 envoy watches a single cluster per gprc stream. func (s *DiscoveryServer) removeEdsCon(clusterName string, node string, connection *XdsConnection) { - c := s.getEdsCluster(clusterName) + c := s.getEdsCluster(connection.modelNode, clusterName) if c == nil { adsLog.Warnf("EDS: missing cluster %s", clusterName) return diff --git a/pilot/pkg/proxy/envoy/v2/eds_sh_test.go b/pilot/pkg/proxy/envoy/v2/eds_sh_test.go index 847d124cb146..4af3202c5786 100644 --- a/pilot/pkg/proxy/envoy/v2/eds_sh_test.go +++ b/pilot/pkg/proxy/envoy/v2/eds_sh_test.go @@ -167,7 +167,7 @@ func verifySplitHorizonResponse(t *testing.T, network string, sidecarID string, for addr, weight := range expected.weights { var match *endpoint.LbEndpoint for _, ep := range lbEndpoints { - if ep.Endpoint.Address.GetSocketAddress().Address == addr { + if ep.GetEndpoint().Address.GetSocketAddress().Address == addr { match = &ep break } diff --git a/pilot/pkg/proxy/envoy/v2/eds_test.go b/pilot/pkg/proxy/envoy/v2/eds_test.go index ac8bb6960bdc..57b21fb6249b 100644 --- a/pilot/pkg/proxy/envoy/v2/eds_test.go +++ b/pilot/pkg/proxy/envoy/v2/eds_test.go @@ -118,7 +118,7 @@ func testTCPEndpoints(expected string, adsc *adsc.ADSC, t *testing.T) { for _, lbe := range lbe.Endpoints { for _, e := range lbe.LbEndpoints { total++ - if expected == e.Endpoint.Address.GetSocketAddress().Address { + if expected == e.GetEndpoint().Address.GetSocketAddress().Address { return } } @@ -338,8 +338,8 @@ func multipleRequest(server *bootstrap.Server, inc bool, nclients, // This will be throttled - we want to trigger a single push //server.EnvoyXdsServer.MemRegistry.SetEndpoints(edsIncSvc, // newEndpointWithAccount("127.0.0.2", "hello-sa", "v1")) - updates := map[string]*v2.EndpointShards{ - edsIncSvc: &v2.EndpointShards{}, + updates := map[string]struct{}{ + edsIncSvc: {}, } server.EnvoyXdsServer.AdsPushAll(strconv.Itoa(j), server.EnvoyXdsServer.Env.PushContext, false, updates) } else { diff --git a/pilot/pkg/proxy/envoy/v2/ep_filters.go b/pilot/pkg/proxy/envoy/v2/ep_filters.go index f03585e37f71..80820c89ed36 100644 --- a/pilot/pkg/proxy/envoy/v2/ep_filters.go +++ b/pilot/pkg/proxy/envoy/v2/ep_filters.go @@ -99,8 +99,10 @@ func EndpointsByNetworkFilter(endpoints []endpoint.LocalityLbEndpoints, conn *Xd if gwIP := net.ParseIP(gw.GetAddress()); gwIP != nil { addr := util.BuildAddress(gw.GetAddress(), gw.Port) gwEp = &endpoint.LbEndpoint{ - Endpoint: &endpoint.Endpoint{ - Address: &addr, + HostIdentifier: &endpoint.LbEndpoint_Endpoint{ + Endpoint: &endpoint.Endpoint{ + Address: &addr, + }, }, LoadBalancingWeight: &types.UInt32Value{ Value: w, diff --git a/pilot/pkg/proxy/envoy/v2/ep_filters_test.go b/pilot/pkg/proxy/envoy/v2/ep_filters_test.go index 6895c7e66eb0..f7b0a001e6a2 100644 --- a/pilot/pkg/proxy/envoy/v2/ep_filters_test.go +++ b/pilot/pkg/proxy/envoy/v2/ep_filters_test.go @@ -144,8 +144,8 @@ func TestEndpointsByNetworkFilter(t *testing.T) { } sort.Slice(filtered, func(i, j int) bool { - addrI := filtered[i].LbEndpoints[0].Endpoint.Address.GetSocketAddress().Address - addrJ := filtered[j].LbEndpoints[0].Endpoint.Address.GetSocketAddress().Address + addrI := filtered[i].LbEndpoints[0].GetEndpoint().Address.GetSocketAddress().Address + addrJ := filtered[j].LbEndpoints[0].GetEndpoint().Address.GetSocketAddress().Address return addrI < addrJ }) @@ -159,7 +159,7 @@ func TestEndpointsByNetworkFilter(t *testing.T) { } for _, lbEp := range ep.LbEndpoints { - addr := lbEp.Endpoint.Address.GetSocketAddress().Address + addr := lbEp.GetEndpoint().Address.GetSocketAddress().Address found := false for _, wantLbEp := range tt.want[i].lbEps { if addr == wantLbEp.address { @@ -262,11 +262,13 @@ func createLbEndpoints(lbEpsInfo []LbEpInfo) []endpoint.LbEndpoint { lbEndpoints := make([]endpoint.LbEndpoint, len(lbEpsInfo)) for j, lbEpInfo := range lbEpsInfo { lbEp := endpoint.LbEndpoint{ - Endpoint: &endpoint.Endpoint{ - Address: &core.Address{ - Address: &core.Address_SocketAddress{ - SocketAddress: &core.SocketAddress{ - Address: lbEpInfo.address, + HostIdentifier: &endpoint.LbEndpoint_Endpoint{ + Endpoint: &endpoint.Endpoint{ + Address: &core.Address{ + Address: &core.Address_SocketAddress{ + SocketAddress: &core.SocketAddress{ + Address: lbEpInfo.address, + }, }, }, }, diff --git a/pilot/pkg/proxy/envoy/v2/lds.go b/pilot/pkg/proxy/envoy/v2/lds.go index 93e0ab5b8576..3c8801bc078b 100644 --- a/pilot/pkg/proxy/envoy/v2/lds.go +++ b/pilot/pkg/proxy/envoy/v2/lds.go @@ -24,7 +24,7 @@ import ( "istio.io/istio/pilot/pkg/model" ) -func (s *DiscoveryServer) pushLds(con *XdsConnection, push *model.PushContext, _ bool, version string) error { +func (s *DiscoveryServer) pushLds(con *XdsConnection, push *model.PushContext, version string) error { // TODO: Modify interface to take services, and config instead of making library query registry rawListeners, err := s.generateRawListeners(con, push) diff --git a/pilot/pkg/proxy/envoy/v2/lds_test.go b/pilot/pkg/proxy/envoy/v2/lds_test.go index c42627ef01a6..0479589dfde7 100644 --- a/pilot/pkg/proxy/envoy/v2/lds_test.go +++ b/pilot/pkg/proxy/envoy/v2/lds_test.go @@ -62,12 +62,11 @@ func TestLDSIsolated(t *testing.T) { t.Fatal(err) } - // s1http - inbound HTTP on 7071 (forwarding to app on 30000 + 7071 - or custom port) - // All outbound on http proxy - if len(ldsr.HTTPListeners) != 3 { + // 7071 (inbound), 2001 (service - also as http proxy), 9091 (grpc-mixer), 15002 (http-proxy), 15004 (grpc-mixer-mtls) + if len(ldsr.HTTPListeners) != 5 { // TODO: we are still debating if for HTTP services we have any use case to create a 127.0.0.1:port outbound // for the service (the http proxy is already covering this) - t.Error("HTTP listeners, expecting 3 got ", len(ldsr.HTTPListeners), ldsr.HTTPListeners) + t.Error("HTTP listeners, expecting 5 got ", len(ldsr.HTTPListeners), ldsr.HTTPListeners) } // s1tcp:2000 outbound, bind=true (to reach other instances of the service) diff --git a/pilot/pkg/proxy/envoy/v2/mem.go b/pilot/pkg/proxy/envoy/v2/mem.go index 71b71dec7364..97929f5ee0ca 100644 --- a/pilot/pkg/proxy/envoy/v2/mem.go +++ b/pilot/pkg/proxy/envoy/v2/mem.go @@ -320,6 +320,12 @@ func (sd *MemServiceDiscovery) GetProxyServiceInstances(node *model.Proxy) ([]*m return out, sd.GetProxyServiceInstancesError } +// GetProxyLocality returns the locality where the proxy runs. +func (sd *MemServiceDiscovery) GetProxyLocality(node *model.Proxy) string { + // not implemented + return "" +} + // ManagementPorts implements discovery interface func (sd *MemServiceDiscovery) ManagementPorts(addr string) model.PortList { sd.mutex.Lock() diff --git a/pilot/pkg/proxy/envoy/v2/testdata/none_cds.json b/pilot/pkg/proxy/envoy/v2/testdata/none_cds.json index 65bbc3fad2d2..f3f0b3832b9d 100644 --- a/pilot/pkg/proxy/envoy/v2/testdata/none_cds.json +++ b/pilot/pkg/proxy/envoy/v2/testdata/none_cds.json @@ -11,11 +11,11 @@ "lb_policy": 4, "LbConfig": null }, - "inbound|2001|httplocal|s1http.none": { - "name": "inbound|2001|httplocal|s1http.none", + "inbound|7070|tcplocal|s1tcp.none": { + "name": "inbound|7070|tcplocal|s1tcp.none", "connect_timeout": 1000000000, "load_assignment": { - "cluster_name": "inbound|2001|httplocal|s1http.none", + "cluster_name": "inbound|7070|tcplocal|s1tcp.none", "endpoints": [ { "lb_endpoints": [ @@ -26,7 +26,40 @@ "SocketAddress": { "address": "127.0.0.1", "PortSpecifier": { - "PortValue": 7071 + "PortValue": 17070 + } + } + } + } + } + } + ] + } + ] + }, + "circuit_breakers": { + "thresholds": [ + {} + ] + }, + "LbConfig": null + }, + "inbound|7071|httplocal|s1http.none": { + "name": "inbound|7071|httplocal|s1http.none", + "connect_timeout": 1000000000, + "load_assignment": { + "cluster_name": "inbound|7071|httplocal|s1http.none", + "endpoints": [ + { + "lb_endpoints": [ + { + "endpoint": { + "address": { + "Address": { + "SocketAddress": { + "address": "127.0.0.1", + "PortSpecifier": { + "PortValue": 17071 } } } @@ -79,7 +112,11 @@ }, "circuit_breakers": { "thresholds": [ - {} + { + "max_retries": { + "value": 1024 + } + } ] }, "dns_lookup_family": 1, @@ -120,18 +157,22 @@ }, "circuit_breakers": { "thresholds": [ - {} + { + "max_retries": { + "value": 1024 + } + } ] }, "dns_lookup_family": 1, "LbConfig": null }, - "outbound|443||api1.facebook.com": { - "name": "outbound|443||api1.facebook.com", + "outbound|2443||api1.facebook.com": { + "name": "outbound|2443||api1.facebook.com", "type": 1, "connect_timeout": 1000000000, "load_assignment": { - "cluster_name": "outbound|443||api1.facebook.com", + "cluster_name": "outbound|2443||api1.facebook.com", "endpoints": [ { "lb_endpoints": null @@ -145,7 +186,7 @@ "SocketAddress": { "address": "api1.facebook.com", "PortSpecifier": { - "PortValue": 443 + "PortValue": 2443 } } } @@ -161,18 +202,22 @@ }, "circuit_breakers": { "thresholds": [ - {} + { + "max_retries": { + "value": 1024 + } + } ] }, "dns_lookup_family": 1, "LbConfig": null }, - "outbound|443||www1.googleapis.com": { - "name": "outbound|443||www1.googleapis.com", + "outbound|2443||www1.googleapis.com": { + "name": "outbound|2443||www1.googleapis.com", "type": 1, "connect_timeout": 1000000000, "load_assignment": { - "cluster_name": "outbound|443||www1.googleapis.com", + "cluster_name": "outbound|2443||www1.googleapis.com", "endpoints": [ { "lb_endpoints": null @@ -186,7 +231,7 @@ "SocketAddress": { "address": "www1.googleapis.com", "PortSpecifier": { - "PortValue": 443 + "PortValue": 2443 } } } @@ -202,7 +247,11 @@ }, "circuit_breakers": { "thresholds": [ - {} + { + "max_retries": { + "value": 1024 + } + } ] }, "dns_lookup_family": 1, diff --git a/pilot/pkg/proxy/envoy/v2/testdata/none_ecds.json b/pilot/pkg/proxy/envoy/v2/testdata/none_ecds.json index 1576ee45c04f..70262df26ddf 100644 --- a/pilot/pkg/proxy/envoy/v2/testdata/none_ecds.json +++ b/pilot/pkg/proxy/envoy/v2/testdata/none_ecds.json @@ -11,13 +11,13 @@ "service_name": "outbound|2000||s1tcp.none" }, "connect_timeout": 1000000000, - "load_assignment": { - "cluster_name": "outbound|2000||s1tcp.none", - "endpoints": null - }, "circuit_breakers": { "thresholds": [ - {} + { + "max_retries": { + "value": 1024 + } + } ] }, "LbConfig": null @@ -34,13 +34,13 @@ "service_name": "outbound|2001||s1http.none" }, "connect_timeout": 1000000000, - "load_assignment": { - "cluster_name": "outbound|2001||s1http.none", - "endpoints": null - }, "circuit_breakers": { "thresholds": [ - {} + { + "max_retries": { + "value": 1024 + } + } ] }, "LbConfig": null @@ -57,13 +57,13 @@ "service_name": "outbound|2005||s2.external.test.istio.io" }, "connect_timeout": 1000000000, - "load_assignment": { - "cluster_name": "outbound|2005||s2.external.test.istio.io", - "endpoints": null - }, "circuit_breakers": { "thresholds": [ - {} + { + "max_retries": { + "value": 1024 + } + } ] }, "LbConfig": null @@ -80,13 +80,13 @@ "service_name": "outbound|2008||tcpmeshstatic.seexamples.svc" }, "connect_timeout": 1000000000, - "load_assignment": { - "cluster_name": "outbound|2008||tcpmeshstatic.seexamples.svc", - "endpoints": null - }, "circuit_breakers": { "thresholds": [ - {} + { + "max_retries": { + "value": 1024 + } + } ] }, "LbConfig": null @@ -103,13 +103,13 @@ "service_name": "outbound|2009||tcpmeshstaticint.seexamples.svc" }, "connect_timeout": 1000000000, - "load_assignment": { - "cluster_name": "outbound|2009||tcpmeshstaticint.seexamples.svc", - "endpoints": null - }, "circuit_breakers": { "thresholds": [ - {} + { + "max_retries": { + "value": 1024 + } + } ] }, "LbConfig": null diff --git a/pilot/pkg/proxy/envoy/v2/testdata/none_lds_tcp.json b/pilot/pkg/proxy/envoy/v2/testdata/none_lds_tcp.json index 7997422930f7..64d2110cee9d 100644 --- a/pilot/pkg/proxy/envoy/v2/testdata/none_lds_tcp.json +++ b/pilot/pkg/proxy/envoy/v2/testdata/none_lds_tcp.json @@ -189,12 +189,12 @@ }, "cluster": { "Kind": { - "StringValue": "inbound|7070|tcplocal|s1http.none" + "StringValue": "inbound|7070|tcplocal|s1tcp.none" } }, "stat_prefix": { "Kind": { - "StringValue": "inbound|7070|tcplocal|s1http.none" + "StringValue": "inbound|7070|tcplocal|s1tcp.none" } } } @@ -1556,14 +1556,14 @@ ], "listener_filters": null }, - "127.0.0.1_443": { - "name": "127.0.0.1_443", + "127.0.0.1_2443": { + "name": "127.0.0.1_2443", "address": { "Address": { "SocketAddress": { "address": "127.0.0.1", "PortSpecifier": { - "PortValue": 443 + "PortValue": 2443 } } } @@ -1769,12 +1769,12 @@ }, "cluster": { "Kind": { - "StringValue": "outbound|443||www1.googleapis.com" + "StringValue": "outbound|2443||www1.googleapis.com" } }, "stat_prefix": { "Kind": { - "StringValue": "outbound|443||www1.googleapis.com" + "StringValue": "outbound|2443||www1.googleapis.com" } } } @@ -1983,12 +1983,12 @@ }, "cluster": { "Kind": { - "StringValue": "outbound|443||api1.facebook.com" + "StringValue": "outbound|2443||api1.facebook.com" } }, "stat_prefix": { "Kind": { - "StringValue": "outbound|443||api1.facebook.com" + "StringValue": "outbound|2443||api1.facebook.com" } } } @@ -2027,12 +2027,12 @@ "fields": { "cluster": { "Kind": { - "StringValue": "PassthroughCluster" + "StringValue": "BlackHoleCluster" } }, "stat_prefix": { "Kind": { - "StringValue": "PassthroughCluster" + "StringValue": "BlackHoleCluster" } } } diff --git a/pilot/pkg/proxy/envoy/v2/testdata/none_rds.json b/pilot/pkg/proxy/envoy/v2/testdata/none_rds.json index d87ac2d0e6f0..4992631bd16c 100644 --- a/pilot/pkg/proxy/envoy/v2/testdata/none_rds.json +++ b/pilot/pkg/proxy/envoy/v2/testdata/none_rds.json @@ -22,6 +22,22 @@ }, "HostRewriteSpecifier": null, "timeout": 0, + "retry_policy": { + "retry_on": "connect-failure,refused-stream,unavailable,cancelled,resource-exhausted", + "num_retries": { + "value": 10 + }, + "retry_host_predicate": [ + { + "name": "envoy.retry_host_predicates.previous_hosts", + "ConfigType": null + } + ], + "host_selection_retry_max_attempts": 3, + "retriable_status_codes": [ + 503 + ] + }, "max_grpc_timeout": 0 } }, @@ -127,6 +143,22 @@ }, "HostRewriteSpecifier": null, "timeout": 0, + "retry_policy": { + "retry_on": "connect-failure,refused-stream,unavailable,cancelled,resource-exhausted", + "num_retries": { + "value": 10 + }, + "retry_host_predicate": [ + { + "name": "envoy.retry_host_predicates.previous_hosts", + "ConfigType": null + } + ], + "host_selection_retry_max_attempts": 3, + "retriable_status_codes": [ + 503 + ] + }, "max_grpc_timeout": 0 } }, diff --git a/pilot/pkg/proxy/envoy/v2/xds_test.go b/pilot/pkg/proxy/envoy/v2/xds_test.go index 3054e9a5144d..73ed2202dfd6 100644 --- a/pilot/pkg/proxy/envoy/v2/xds_test.go +++ b/pilot/pkg/proxy/envoy/v2/xds_test.go @@ -311,11 +311,14 @@ func testPorts(base int) []*model.Port { Name: "mongo", Port: base + 100, Protocol: model.ProtocolMongo, - }, - { + }, { Name: "redis", Port: base + 110, Protocol: model.ProtocolRedis, + }, { + Name: "mysql", + Port: base + 120, + Protocol: model.ProtocolMySQL, }, { Name: "h2port", Port: base + 66, diff --git a/pilot/pkg/serviceregistry/aggregate/controller.go b/pilot/pkg/serviceregistry/aggregate/controller.go index 43fc276215d1..1159f25e3859 100644 --- a/pilot/pkg/serviceregistry/aggregate/controller.go +++ b/pilot/pkg/serviceregistry/aggregate/controller.go @@ -243,6 +243,17 @@ func (c *Controller) GetProxyServiceInstances(node *model.Proxy) ([]*model.Servi return out, errs } +// GetProxyLocality returns the locality where the proxy runs. +func (c *Controller) GetProxyLocality(proxy *model.Proxy) string { + for _, r := range c.GetRegistries() { + locality := r.GetProxyLocality(proxy) + if len(locality) > 0 { + return locality + } + } + return "" +} + // Run starts all the controllers func (c *Controller) Run(stop <-chan struct{}) { diff --git a/pilot/pkg/serviceregistry/aggregate/controller_test.go b/pilot/pkg/serviceregistry/aggregate/controller_test.go index 0e7b6df2ce9b..69f494dda254 100644 --- a/pilot/pkg/serviceregistry/aggregate/controller_test.go +++ b/pilot/pkg/serviceregistry/aggregate/controller_test.go @@ -262,7 +262,7 @@ func TestGetProxyServiceInstances(t *testing.T) { if err != nil { t.Fatalf("GetProxyServiceInstances() encountered unexpected error: %v", err) } - if len(instances) != 5 { + if len(instances) != 6 { t.Fatalf("Returned GetProxyServiceInstances' amount %d is not correct", len(instances)) } for _, inst := range instances { @@ -276,7 +276,7 @@ func TestGetProxyServiceInstances(t *testing.T) { if err != nil { t.Fatalf("GetProxyServiceInstances() encountered unexpected error: %v", err) } - if len(instances) != 5 { + if len(instances) != 6 { t.Fatalf("Returned GetProxyServiceInstances' amount %d is not correct", len(instances)) } for _, inst := range instances { @@ -306,7 +306,7 @@ func TestGetProxyServiceInstancesError(t *testing.T) { if err != nil { t.Fatal("Aggregate controller should not return error if instances are found") } - if len(instances) != 5 { + if len(instances) != 6 { t.Fatalf("Returned GetProxyServiceInstances' amount %d is not correct", len(instances)) } for _, inst := range instances { diff --git a/pilot/pkg/serviceregistry/consul/controller.go b/pilot/pkg/serviceregistry/consul/controller.go index c8f7443c1b9a..6a83d7e86072 100644 --- a/pilot/pkg/serviceregistry/consul/controller.go +++ b/pilot/pkg/serviceregistry/consul/controller.go @@ -179,6 +179,12 @@ func (c *Controller) GetProxyServiceInstances(node *model.Proxy) ([]*model.Servi return out, nil } +// GetProxyLocality returns the locality where the proxy runs. +func (c *Controller) GetProxyLocality(node *model.Proxy) string { + // not implemented + return "" +} + // Run all controllers until a signal is received func (c *Controller) Run(stop <-chan struct{}) { c.monitor.Start(stop) diff --git a/pilot/pkg/serviceregistry/external/servicediscovery.go b/pilot/pkg/serviceregistry/external/servicediscovery.go index e5c9b805c054..d126276d095c 100644 --- a/pilot/pkg/serviceregistry/external/servicediscovery.go +++ b/pilot/pkg/serviceregistry/external/servicediscovery.go @@ -238,6 +238,12 @@ func (d *ServiceEntryStore) GetProxyServiceInstances(node *model.Proxy) ([]*mode return out, nil } +// GetProxyLocality returns the locality where the proxy runs. +func (d *ServiceEntryStore) GetProxyLocality(node *model.Proxy) string { + // not supported + return "" +} + // GetIstioServiceAccounts implements model.ServiceAccounts operation TODOg func (d *ServiceEntryStore) GetIstioServiceAccounts(hostname model.Hostname, ports []int) []string { //for service entries, there is no istio auth, no service accounts, etc. It is just a diff --git a/pilot/pkg/serviceregistry/kube/controller.go b/pilot/pkg/serviceregistry/kube/controller.go index 286896078e2e..49cc76c4e789 100644 --- a/pilot/pkg/serviceregistry/kube/controller.go +++ b/pilot/pkg/serviceregistry/kube/controller.go @@ -312,8 +312,8 @@ func (c *Controller) serviceByKey(name, namespace string) (*v1.Service, bool) { return item.(*v1.Service), true } -// GetPodAZ retrieves the AZ for a pod. -func (c *Controller) GetPodAZ(pod *v1.Pod) string { +// GetPodLocality retrieves the locality for a pod. +func (c *Controller) GetPodLocality(pod *v1.Pod) string { // NodeName is set by the scheduler after the pod is created // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#late-initialization node, exists, err := c.nodes.informer.GetStore().GetByKey(pod.Spec.NodeName) @@ -452,7 +452,7 @@ func (c *Controller) InstancesByPort(hostname model.Hostname, reqSvcPort int, pod := c.pods.getPodByIP(ea.IP) az, sa, uid := "", "", "" if pod != nil { - az = c.GetPodAZ(pod) + az = c.GetPodLocality(pod) sa = kubeToIstioServiceAccount(pod.Spec.ServiceAccountName, pod.GetNamespace()) uid = fmt.Sprintf("kubernetes://%s.%s", pod.Name, pod.Namespace) } @@ -546,6 +546,17 @@ func (c *Controller) GetProxyServiceInstances(proxy *model.Proxy) ([]*model.Serv return out, nil } +// GetProxyLocality returns the locality where the proxy runs. +func (c *Controller) GetProxyLocality(proxy *model.Proxy) string { + proxyIP := proxy.IPAddresses[0] + locality := "" + pod := c.pods.getPodByIP(proxyIP) + if pod != nil { + locality = c.GetPodLocality(pod) + } + return locality +} + func (c *Controller) getProxyServiceInstancesByEndpoint(endpoints v1.Endpoints, proxy *model.Proxy) []*model.ServiceInstance { out := make([]*model.ServiceInstance, 0) @@ -588,7 +599,7 @@ func getEndpoints(ip string, c *Controller, port v1.EndpointPort, svcPort *model pod := c.pods.getPodByIP(ip) az, sa := "", "" if pod != nil { - az = c.GetPodAZ(pod) + az = c.GetPodLocality(pod) sa = kubeToIstioServiceAccount(pod.Spec.ServiceAccountName, pod.GetNamespace()) } return &model.ServiceInstance{ diff --git a/pilot/pkg/serviceregistry/kube/controller_test.go b/pilot/pkg/serviceregistry/kube/controller_test.go index c7eb3820a1d7..df55c4022189 100644 --- a/pilot/pkg/serviceregistry/kube/controller_test.go +++ b/pilot/pkg/serviceregistry/kube/controller_test.go @@ -383,7 +383,7 @@ func TestController_getPodAZ(t *testing.T) { // Verify expected existing pod AZs for pod, wantAZ := range c.wantAZ { - az := controller.GetPodAZ(pod) + az := controller.GetPodLocality(pod) if wantAZ != "" { if !reflect.DeepEqual(az, wantAZ) { t.Errorf("Wanted az: %s, got: %s", wantAZ, az) diff --git a/pilot/pkg/serviceregistry/kube/conversion_test.go b/pilot/pkg/serviceregistry/kube/conversion_test.go index e54e9415795a..175bb24f74bd 100644 --- a/pilot/pkg/serviceregistry/kube/conversion_test.go +++ b/pilot/pkg/serviceregistry/kube/conversion_test.go @@ -52,6 +52,8 @@ var ( {"mongo-test", v1.ProtocolTCP, model.ProtocolMongo}, {"redis", v1.ProtocolTCP, model.ProtocolRedis}, {"redis-test", v1.ProtocolTCP, model.ProtocolRedis}, + {"mysql", v1.ProtocolTCP, model.ProtocolMySQL}, + {"mysql-test", v1.ProtocolTCP, model.ProtocolMySQL}, } ) diff --git a/pilot/pkg/serviceregistry/memory/discovery.go b/pilot/pkg/serviceregistry/memory/discovery.go index 7cd80800f78b..14cb65ebbe39 100644 --- a/pilot/pkg/serviceregistry/memory/discovery.go +++ b/pilot/pkg/serviceregistry/memory/discovery.go @@ -60,12 +60,16 @@ func MakeService(hostname model.Hostname, address string) *model.Service { Name: "mongo", Port: 100, // target port 1100 Protocol: model.ProtocolMongo, - }, - { + }, { Name: "redis", Port: 110, // target port 1110 Protocol: model.ProtocolRedis, - }}, + }, { + Name: "mysql", + Port: 120, // target port 1120 + Protocol: model.ProtocolMySQL, + }, + }, } } @@ -241,6 +245,12 @@ func (sd *ServiceDiscovery) GetProxyServiceInstances(node *model.Proxy) ([]*mode return out, sd.GetProxyServiceInstancesError } +// GetProxyLocality returns the locality where the proxy runs. +func (sd *ServiceDiscovery) GetProxyLocality(node *model.Proxy) string { + // not implemented + return "" +} + // ManagementPorts implements discovery interface func (sd *ServiceDiscovery) ManagementPorts(addr string) model.PortList { return model.PortList{{ diff --git a/pkg/adsc/adsc.go b/pkg/adsc/adsc.go index 9b6d90864021..8d7ca659ae4e 100644 --- a/pkg/adsc/adsc.go +++ b/pkg/adsc/adsc.go @@ -355,6 +355,8 @@ func (a *ADSC) handleLDS(ll []*xdsapi.Listener) { // ignore for now } else if f0.Name == "envoy.redis_proxy" { // ignore for now + } else if f0.Name == "envoy.filters.network.mysql_proxy" { + // ignore for now } else { tm := &jsonpb.Marshaler{Indent: " "} log.Println(tm.MarshalToString(l)) diff --git a/pkg/bootstrap/testdata/all_golden.json b/pkg/bootstrap/testdata/all_golden.json index 8244d60e9a54..e72bf603d7c7 100644 --- a/pkg/bootstrap/testdata/all_golden.json +++ b/pkg/bootstrap/testdata/all_golden.json @@ -70,7 +70,7 @@ "address": { "socket_address": { "address": "127.0.0.1", - "port_value": 15000 + "port_value": 15005 } } }, @@ -104,7 +104,7 @@ "socket_address": { "protocol": "TCP", "address": "127.0.0.1", - "port_value": 15000 + "port_value": 15005 } } ] diff --git a/pkg/bootstrap/testdata/running_golden.json b/pkg/bootstrap/testdata/running_golden.json index 5dd72d5a0528..7d23a357a8f2 100644 --- a/pkg/bootstrap/testdata/running_golden.json +++ b/pkg/bootstrap/testdata/running_golden.json @@ -70,7 +70,7 @@ "address": { "socket_address": { "address": "127.0.0.1", - "port_value": 15000 + "port_value": 15005 } } }, @@ -104,7 +104,7 @@ "socket_address": { "protocol": "TCP", "address": "127.0.0.1", - "port_value": 15000 + "port_value": 15005 } } ] diff --git a/pkg/mcp/client/client.go b/pkg/mcp/client/client.go index 213c786b51d3..7b7117a3b2d1 100644 --- a/pkg/mcp/client/client.go +++ b/pkg/mcp/client/client.go @@ -188,15 +188,20 @@ func (c *Client) Run(ctx context.Context) { }) } + // The first attempt is immediate. + retryDelay := time.Nanosecond + for { - retry := time.After(time.Nanosecond) for { select { case <-ctx.Done(): return - case <-retry: + case <-time.After(retryDelay): } + // slow subsequent reconnection attempts down + retryDelay = reestablishStreamDelay + scope.Info("(re)trying to establish new MCP stream") var err error if c.stream, err = c.client.StreamAggregatedResources(ctx); err == nil { @@ -206,7 +211,6 @@ func (c *Client) Run(ctx context.Context) { } scope.Errorf("Failed to create a new MCP stream: %v", err) - retry = time.After(reestablishStreamDelay) } var nextInitRequest int diff --git a/pkg/mcp/internal/internal.go b/pkg/mcp/internal/internal.go new file mode 100644 index 000000000000..d39186c80a44 --- /dev/null +++ b/pkg/mcp/internal/internal.go @@ -0,0 +1,52 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package internal + +import ( + mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/log" +) + +var scope = log.RegisterScope("mcp", "mcp debugging", 0) + +// UpdateResourceVersionTracking updates a map of resource versions indexed +// by name based on the MCP resources response message. +func UpdateResourceVersionTracking(versions map[string]string, resources *mcp.Resources) { + if resources.Incremental { + for _, e := range resources.Resources { + name, version := e.Metadata.Name, e.Metadata.Version + if prev, ok := versions[e.Metadata.Name]; ok { + scope.Debugf("MCP: ACK UPDATE collection=%v name=%q version=%q (prev=%v_)", + resources.Collection, name, version, prev) + } else { + scope.Debugf("MCP: ACK ADD collection=%v name=%q version=%q)", + resources.Collection, name, version) + } + versions[name] = version + } + for _, name := range resources.RemovedResources { + scope.Debugf("MCP: ACK REMOVE name=%q)", name) + delete(versions, name) + } + } else { + for name := range versions { + delete(versions, name) + } + for _, e := range resources.Resources { + name, version := e.Metadata.Name, e.Metadata.Version + versions[name] = version + } + } +} diff --git a/pkg/mcp/internal/internal_test.go b/pkg/mcp/internal/internal_test.go new file mode 100644 index 000000000000..b64f36053c39 --- /dev/null +++ b/pkg/mcp/internal/internal_test.go @@ -0,0 +1,151 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package internal + +import ( + "fmt" + "testing" + + "github.com/google/go-cmp/cmp" + + mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/mcp/internal/test" +) + +func TestUpdateResourceVersionTracking(t *testing.T) { + var ( + r0 = test.Type0A[0].Resource + r1 = test.Type0B[0].Resource + r2 = test.Type0C[0].Resource + + r0Updated = test.Type0A[1].Resource + r1Updated = test.Type0B[1].Resource + r2Updated = test.Type0C[1].Resource + ) + + cases := []struct { + name string + current map[string]string + want map[string]string + resources *mcp.Resources + }{ + { + name: "add initial state", + current: map[string]string{}, + want: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + resources: &mcp.Resources{Resources: []mcp.Resource{*r0, *r1, *r2}}, + }, + { + name: "remove everything", + current: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + want: map[string]string{}, + resources: &mcp.Resources{Resources: []mcp.Resource{}}, + }, + { + name: "replace everything", + current: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + want: map[string]string{ + r0Updated.Metadata.Name: r0Updated.Metadata.Version, + r1Updated.Metadata.Name: r1Updated.Metadata.Version, + r2Updated.Metadata.Name: r2Updated.Metadata.Version, + }, + resources: &mcp.Resources{Resources: []mcp.Resource{*r0Updated, *r1Updated, *r2Updated}}, + }, + { + name: "add incrementally", + current: map[string]string{}, + want: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + resources: &mcp.Resources{ + Incremental: true, + Resources: []mcp.Resource{*r0, *r1, *r2}, + }, + }, + { + name: "update incrementally", + current: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + want: map[string]string{ + r0Updated.Metadata.Name: r0Updated.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + resources: &mcp.Resources{ + Incremental: true, + Resources: []mcp.Resource{*r0Updated}, + }, + }, + { + name: "delete incrementally", + current: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + want: map[string]string{ + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + resources: &mcp.Resources{ + Incremental: true, + Resources: []mcp.Resource{}, + RemovedResources: []string{r0Updated.Metadata.Name}, + }, + }, + { + name: "add, update, and delete incrementally", + current: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + }, + want: map[string]string{ + r1Updated.Metadata.Name: r1Updated.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + resources: &mcp.Resources{ + Incremental: true, + Resources: []mcp.Resource{*r1Updated, *r2}, + RemovedResources: []string{r0Updated.Metadata.Name}, + }, + }, + } + for i, c := range cases { + t.Run(fmt.Sprintf("[%v] %v", i, c.name), func(tt *testing.T) { + UpdateResourceVersionTracking(c.current, c.resources) + got := c.current // map is modified in place + if diff := cmp.Diff(got, c.want); diff != "" { + tt.Fatalf("wrong versions: \n got %v \nwant %v\ndiff %v", got, c.want, diff) + } + }) + } +} diff --git a/pkg/mcp/internal/queue.go b/pkg/mcp/internal/queue.go new file mode 100644 index 000000000000..00e998b7675d --- /dev/null +++ b/pkg/mcp/internal/queue.go @@ -0,0 +1,229 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package internal + +import ( + "encoding/json" + "sync" +) + +// TODO - this can eventually be moved under pkg/mcp/source once the new stack is +// introduced. The code is temporarily added under pkg/mcp/internal so +// we can share across package boundaries without exposing outside of the pkg/mcp +// parent directory. + +// UniqueQueue is a specialized queue structure. It has the following properties: +// +// - Enqueuing an item already in the queue is idempotent. The first time an item +// is added to the queue determines its order in the queue until it is dequeued. +// Callers can safely update the queued items state while preserving it's place +// in the queue. +// +// - Enqueuing an item in the queue creates a trySchedule event. The caller can select +// over the Ready() channel to process this event and remove items from the queue. +// +// - The maximum queue depth is fixed. +// +// - The queue can be safely closed. The caller is responsible for checking the Done() +// state of the queue and should stop checking Ready() and invoking Dequeue() when +// the channel returned by Done() is closed. +// +// This is intended to be used by the MCP source/server packages for managing +// per-type watch state. +type UniqueQueue struct { + mu sync.Mutex + doneChan chan struct{} + doneChanClosed bool + // Enqueue at the tail, Dequeue from the head. + // head == tail -> empty + // head == tail+1 -> full + head int + tail int + // Maintain an ordered set of enqueued items. + queue []entry + queuedSet map[string]*entry + maxDepth int + + readyChan chan struct{} +} + +type entry struct { + key string + val interface{} +} + +// NewUniqueScheduledQueue creates a new unique queue specialized for MCP source/server implementations. +func NewUniqueScheduledQueue(maxDepth int) *UniqueQueue { + return &UniqueQueue{ + // Max queue size is one larger than the max depth so that + // we can differentiate empty vs. full conditions. + // + // head == tail -> empty + // head == tail+1 -> full + queue: make([]entry, maxDepth+1), + + queuedSet: make(map[string]*entry, maxDepth), + maxDepth: maxDepth, + readyChan: make(chan struct{}, maxDepth), + doneChan: make(chan struct{}), + } +} + +// return the next index accounting for wrap +func (q *UniqueQueue) inc(idx int) int { + return (idx + 1) % (q.maxDepth + 1) +} + +// Empty returns true if the queue is empty +func (q *UniqueQueue) Empty() bool { + q.mu.Lock() + defer q.mu.Unlock() + + // head == tail -> empty + return q.head == q.tail +} + +// internal version of full() that can be called +// with the lock held. +func (q *UniqueQueue) full() bool { + // head == tail+1 -> full + return q.head == q.inc(q.tail) +} + +// Full returns true if the queue is full +func (q *UniqueQueue) Full() bool { + q.mu.Lock() + defer q.mu.Unlock() + return q.full() +} + +// Enqueue an item in the queue. Items with the same key may be safely enqueued multiple +// times. Enqueueing an item with a key that has already queued has no affect on the order +// of existing queued items. +// +// Returns true if the item exists in the queue upon return. Otherwise, +// returns false if the item could not be queued. +func (q *UniqueQueue) Enqueue(key string, val interface{}) bool { + q.mu.Lock() + defer q.mu.Unlock() + + if q.doneChanClosed { + return false + } + + // Key is already in the queue. Update the set's entry and + // return without modifying its place in the queue. + if entry, ok := q.queuedSet[key]; ok { + entry.val = val + return true + } + + if q.full() { + return false + } + + q.queue[q.tail] = entry{ + key: key, + val: val, + } + q.queuedSet[key] = &q.queue[q.tail] + q.tail = q.inc(q.tail) + + q.trySchedule() + + return true +} + +// must be called with lock held +func (q *UniqueQueue) trySchedule() { + select { + case q.readyChan <- struct{}{}: + default: + scope.Warnf("queue could not be scheduled (head=%v tail=%v depth=%v)", + q.head, q.tail, q.maxDepth) + } +} + +// Dequeue removes an item from the queue. This should only be called once for each +// time Ready() indicates a new item is ready to be dequeued. +func (q *UniqueQueue) Dequeue() (string, interface{}, bool) { + q.mu.Lock() + defer q.mu.Unlock() + + if q.head == q.tail { + return "", nil, false + } + + entry := q.queue[q.head] + q.head = q.inc(q.head) + delete(q.queuedSet, entry.key) + return entry.key, entry.val, true +} + +func (q *UniqueQueue) Ready() <-chan struct{} { + return q.readyChan +} + +func (q *UniqueQueue) Done() <-chan struct{} { + return q.doneChan +} + +func (q *UniqueQueue) Close() { + q.mu.Lock() + defer q.mu.Unlock() + + if !q.doneChanClosed { + q.doneChanClosed = true + close(q.doneChan) + } +} + +type dump struct { + Closed bool `json:"closed"` + QueuedSet map[string]interface{} `json:"queued_set"` + Queue []string `json:"queue"` + Head int `json:"head"` + Tail int `json:"tail"` + MaxDepth int `json:"max_depth"` +} + +// Dump returns a JSON formatted dump of the internal queue state. This is intended +// for debug purposes only. +func (q *UniqueQueue) Dump() string { + q.mu.Lock() + defer q.mu.Unlock() + + d := &dump{ + Closed: q.doneChanClosed, + Head: q.head, + Tail: q.tail, + MaxDepth: q.maxDepth, + Queue: make([]string, 0, len(q.queue)), + QueuedSet: make(map[string]interface{}, len(q.queuedSet)), + } + + for _, entry := range q.queue { + d.Queue = append(d.Queue, entry.key) + } + for _, entry := range q.queuedSet { + d.QueuedSet[entry.key] = entry.val + } + + out, err := json.Marshal(d) + if err != nil { + return "" + } + return string(out) +} diff --git a/pkg/mcp/internal/queue_test.go b/pkg/mcp/internal/queue_test.go new file mode 100644 index 000000000000..cbd4f126cc51 --- /dev/null +++ b/pkg/mcp/internal/queue_test.go @@ -0,0 +1,346 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package internal + +import ( + "regexp" + "testing" + "time" + + "github.com/google/go-cmp/cmp" +) + +var ( + items = []struct { + key string + val int + }{ + {"collection/1", 1}, + {"collection/2", 2}, + {"collection/3", 3}, + {"collection/4", 4}, + {"collection/5", 5}, + {"collection/6", 6}, + } +) + +func TestUniqueQueue_InitialState(t *testing.T) { + depth := 5 + q := NewUniqueScheduledQueue(depth) + + if !q.Empty() { + t.Fatal("initial queue should be empty") + } + + if q.Full() { + t.Fatal("initial queue shouldn't be full") + } + + k, v, ok := q.Dequeue() + if ok { + t.Fatalf("Dequeue() should not return an entry: got key=%q value=%v", k, v) + } +} + +func TestUniqueQueue_EnqueueDequeue(t *testing.T) { + depth := int(5) + q := NewUniqueScheduledQueue(depth) + + for i := 0; i < depth; i++ { + q.Enqueue(items[i].key, items[i].val) + } + + if !q.Full() { + t.Fatalf("queue should be full") + } + + // enqueue some duplicates + for i := depth - 1; i >= 0; i-- { + if q.Enqueue(items[i].key, items[i].val*2) != true { + t.Fatalf("could not enqueue dup #%v", i) + } + } + + if !q.Full() { + t.Fatalf("queue should be full") + } + + if q.Enqueue(items[5].key, items[5].val) == true { + t.Fatal("enqueueing new item into full queue should fail") + } + + for i := 0; i < depth; i++ { + <-q.Ready() + + want := items[i].val * 2 + key, v, _ := q.Dequeue() + got := v.(int) + if got != want { + t.Fatalf("wrong Dequeue() value: got %v want %v", got, want) + } + q.Enqueue(key, got*2) + } + + for i := 0; i < depth; i++ { + want := items[i].val * 4 + _, v, _ := q.Dequeue() + got := v.(int) + if got != want { + t.Fatalf("wrong Dequeue() value: got %v want %v", got, want) + } + } +} + +func getScheduledItem(t *testing.T, q *UniqueQueue) interface{} { + t.Helper() + + select { + case <-q.Done(): + t.Fatal("unexpected done indication") + case <-q.Ready(): + _, v, ok := q.Dequeue() + if !ok { + t.Fatal("Dequeue() returned no entries") + } + return v + case <-time.After(time.Second): + t.Fatal("timeout waiting for scheduled response") + } + t.Fatal("unreachable") + return nil +} + +func TestUniqueQueue_Schedule(t *testing.T) { + q := NewUniqueScheduledQueue(5) + + // single enqueue / dequeue + q.Enqueue(items[0].key, items[0].val) + got := getScheduledItem(t, q) + want := 1 + if got != want { + t.Fatalf("got %v want %v", got, want) + } + + // fill the queue and drain it + for _, v := range []int{0, 1, 2, 3, 4} { + q.Enqueue(items[v].key, items[v].val) + } + for _, v := range []int{0, 1, 2, 3, 4} { + want := items[v].val + got := getScheduledItem(t, q) + if got != want { + t.Fatalf("got %v want %v", got, want) + } + } + + // fill the queue and verify unique property + for _, v := range []int{1, 2, 3, 4, 0} { + q.Enqueue(items[v].key, items[v].val) + } + // enqueue dups in a different order + for _, v := range []int{4, 0, 1, 2, 3} { + q.Enqueue(items[v].key, items[v].val) + } + + for _, i := range []int{1, 2, 3, 4, 0} { + want := items[i].val + got := getScheduledItem(t, q) + if got != want { + t.Fatalf("got %v want %v", got, want) + } + } + + select { + case <-q.Done(): + t.Fatal("unexpected Done()") + case <-q.Ready(): + t.Fatal("unexpected Ready()") + case <-time.After(100 * time.Millisecond): + } +} + +func TestUniqueQueue_DequeueBeforeReady(t *testing.T) { + q := NewUniqueScheduledQueue(5) + + for _, v := range []int{0, 1, 2, 3, 4} { + q.Enqueue(items[v].key, items[v].val) + } + + // // re-enqueue the first two dequeued items + for range []int{0, 1} { + key, item, _ := q.Dequeue() + q.Enqueue(key, item) + } + + for _, v := range []int{2, 3, 4, 0, 1} { + want := items[v].val + got := getScheduledItem(t, q) + if got != want { + t.Fatalf("got %v want %v", got, want) + } + } + + // verify no more Ready() indications + select { + case <-q.Done(): + t.Fatal("unexpected Done()") + case <-q.Ready(): + t.Fatal("unexpected Ready()") + case <-time.After(100 * time.Millisecond): + } + + // verify close + + q.Close() + + select { + case <-q.Done(): + // pass + case <-q.Ready(): + t.Fatal("unexpected Ready()") + case <-time.After(100 * time.Millisecond): + t.Fatal("Done() indication missed") + } + + // test passes if nothing deadlocks +} + +func TestUniqueQueue_Done(t *testing.T) { + q := NewUniqueScheduledQueue(5) + + q.Enqueue(items[0].key, items[0].val) + q.Enqueue(items[1].key, items[1].val) + q.Enqueue(items[2].key, items[2].val) + + q.Close() + + q.Enqueue(items[4].key, items[4].val) + q.Enqueue(items[5].key, items[5].val) // queue full + q.Enqueue(items[1].key, items[1].val) // and a dup + + wanted := []int{0, 1, 2, 3, 4} + + for { + select { + case <-q.Done(): + return + case <-q.Ready(): + _, v, _ := q.Dequeue() + + got := v.(int) + if len(wanted) == 0 { + t.Fatalf("got unexpected item: %v", got) + } + + want := items[wanted[0]].val + wanted = wanted[1:] + + if got != want { + t.Fatalf("got %v want %v", got, want) + } + case <-time.After(time.Second): + t.Fatal("timeout waiting for Done()") + } + } +} + +func TestUniqueQueue_EnqueueAfterClose(t *testing.T) { + q := NewUniqueScheduledQueue(5) + + for _, v := range []int{0, 1, 2, 3, 4} { + q.Enqueue(items[v].key, items[v].val) + } + + for _, v := range []int{0, 1, 2} { + want := items[v].val + got := getScheduledItem(t, q) + if got != want { + t.Fatalf("got %v want %v", got, want) + } + } + + q.Close() + + for _, v := range []int{3, 4} { + want := items[v].val + + select { + case <-q.Ready(): + _, got, ok := q.Dequeue() + if !ok { + t.Fatal("Dequeue() returned no entries") + } + if got != want { + t.Fatalf("got %v want %v", got, want) + } + case <-time.After(time.Second): + t.Fatal("timeout waiting for scheduled response") + } + } + + if q.Enqueue(items[0].key, items[0].val) != false { + t.Fatal("Enqueue() after close should fail") + } + + select { + case <-q.Ready(): + k, v, ok := q.Dequeue() + t.Fatalf("unexpected Dequeue() after close: got key=%v value=%v ok=%v", k, v, ok) + case <-time.After(time.Second): + } + + select { + case <-q.Done(): + case <-time.After(time.Second): + t.Fatal("timeout waiting for Done()") + } +} + +func TestUniqueQueue_Dump(t *testing.T) { + q := NewUniqueScheduledQueue(5) + for i := 0; i < 5; i++ { + q.Enqueue(items[i].key, items[i].val) + } + + want := `{ + "closed":false, + "queued_set":{ + "collection/1":1, + "collection/2":2, + "collection/3":3, + "collection/4":4, + "collection/5":5 + }, + "queue":[ + "collection/1", + "collection/2", + "collection/3", + "collection/4", + "collection/5", + "" + ], + "head":0, + "tail":5, + "max_depth":5 +} +` + space := regexp.MustCompile(`\s+`) + want = space.ReplaceAllString(want, "") + got := q.Dump() + + if diff := cmp.Diff(got, want); diff != "" { + t.Fatalf("\n got %v \nwant %v\n diff %v", got, want, diff) + } +} diff --git a/pkg/mcp/server/server.go b/pkg/mcp/server/server.go index 2024456e67e1..f5887595a277 100644 --- a/pkg/mcp/server/server.go +++ b/pkg/mcp/server/server.go @@ -18,7 +18,6 @@ import ( "fmt" "io" "strconv" - "sync" "sync/atomic" "time" @@ -31,6 +30,7 @@ import ( mcp "istio.io/api/mcp/v1alpha1" "istio.io/istio/pkg/log" "istio.io/istio/pkg/mcp/env" + "istio.io/istio/pkg/mcp/internal" "istio.io/istio/pkg/mcp/monitoring" "istio.io/istio/pkg/mcp/source" ) @@ -45,15 +45,6 @@ var ( // For the purposes of rate limiting new connections, this controls how // frequently new bursts of connections are allowed. newConnectionFreq = env.Duration("NEW_CONNECTION_FREQ", 10*time.Millisecond) - - // Controls the rate limit frequency for re-pushing previously NACK'd pushes - // for each type. - nackLimitFreq = env.Duration("NACK_LIMIT_FREQ", 1*time.Second) - - // Controls the delay for re-retrying a configuration push if the previous - // attempt was not possible, e.g. the lower-level serving layer was busy. This - // should typically be set fairly small (order of milliseconds). - retryPushDelay = env.Duration("RETRY_PUSH_DELAY", 10*time.Millisecond) ) var _ mcp.AggregatedMeshConfigServiceServer = &Server{} @@ -81,108 +72,11 @@ type AuthChecker interface { Check(authInfo credentials.AuthInfo) error } -type newPushResponseState int - -const ( - newPushResponseStateReady newPushResponseState = iota - newPushResponseStateClosed -) - // watch maintains local push state of the most recent watch per-type. type watch struct { // only accessed from connection goroutine - cancel func() - nonce string // most recent nonce - nonceVersionMap map[string]string - - // NOTE: do not hold `mu` when reading/writing to this channel. - newPushResponseReadyChan chan newPushResponseState - - mu sync.Mutex - newPushResponse *source.WatchResponse - mostRecentNackedVersion string - timer *time.Timer - closed bool -} - -func (w *watch) delayedPush() { - w.mu.Lock() - w.timer = nil - w.mu.Unlock() - - select { - case w.newPushResponseReadyChan <- newPushResponseStateReady: - default: - time.AfterFunc(retryPushDelay, w.schedulePush) - } -} - -// Try to schedule pushing a response to the node. The push may -// be re-scheduled as needed. Additional care is taken to rate limit -// re-pushing responses that were previously NACK'd. This avoid flooding -// the node with responses while also allowing transient NACK'd responses -// to be retried. -func (w *watch) schedulePush() { - w.mu.Lock() - - // close the watch - if w.closed { - // unlock before channel write - w.mu.Unlock() - - select { - case w.newPushResponseReadyChan <- newPushResponseStateClosed: - default: - time.AfterFunc(retryPushDelay, w.schedulePush) - } - return - } - - // no-op if the response has already be sent - if w.newPushResponse == nil { - w.mu.Unlock() - return - } - - // delay re-sending a previously nack'd response - if w.newPushResponse.Version == w.mostRecentNackedVersion { - if w.timer == nil { - w.timer = time.AfterFunc(nackLimitFreq, w.delayedPush) - } - w.mu.Unlock() - return - } - - // Otherwise, try to schedule the response to be sent. - if w.timer != nil { - if !w.timer.Stop() { - <-w.timer.C - } - w.timer = nil - } - // unlock before channel write - w.mu.Unlock() - select { - case w.newPushResponseReadyChan <- newPushResponseStateReady: - default: - time.AfterFunc(retryPushDelay, w.schedulePush) - } - -} - -// Save the pushed response in the newPushResponse and schedule a push. The push -// may be re-schedule as necessary but this should be transparent to the -// caller. The caller may provide a nil response to indicate that the watch -// should be closed. -func (w *watch) saveResponseAndSchedulePush(response *source.WatchResponse) { - w.mu.Lock() - w.newPushResponse = response - if response == nil { - w.closed = true - } - w.mu.Unlock() - - w.schedulePush() + cancel func() + nonce string // most recent nonce } // connection maintains per-stream connection state for a @@ -203,6 +97,8 @@ type connection struct { watcher source.Watcher reporter monitoring.Reporter + + queue *internal.UniqueQueue } // New creates a new gRPC server that implements the Mesh Configuration Protocol (MCP). @@ -219,18 +115,13 @@ func New(options *source.Options, authChecker AuthChecker) *Server { func (s *Server) newConnection(stream mcp.AggregatedMeshConfigService_StreamAggregatedResourcesServer) (*connection, error) { peerAddr := "0.0.0.0" + var authInfo credentials.AuthInfo - peerInfo, ok := peer.FromContext(stream.Context()) - if ok { + if peerInfo, ok := peer.FromContext(stream.Context()); ok { peerAddr = peerInfo.Addr.String() + authInfo = peerInfo.AuthInfo } else { scope.Warnf("No peer info found on the incoming stream.") - peerInfo = nil - } - - var authInfo credentials.AuthInfo - if peerInfo != nil { - authInfo = peerInfo.AuthInfo } if err := s.authCheck.Check(authInfo); err != nil { @@ -245,21 +136,20 @@ func (s *Server) newConnection(stream mcp.AggregatedMeshConfigService_StreamAggr watcher: s.watcher, id: atomic.AddInt64(&s.nextStreamID, 1), reporter: s.reporter, + queue: internal.NewUniqueScheduledQueue(len(s.collections)), } - var types []string - for _, collection := range s.collections { - w := &watch{ - newPushResponseReadyChan: make(chan newPushResponseState, 1), - nonceVersionMap: make(map[string]string), - } + var collections []string + for i := range s.collections { + collection := s.collections[i] + w := &watch{} con.watches[collection.Name] = w - types = append(types, collection.Name) + collections = append(collections, collection.Name) } s.reporter.SetStreamCount(atomic.AddInt64(&s.connections, 1)) - scope.Debugf("MCP: connection %v: NEW, supported types: %#v", con, types) + scope.Debugf("MCP: connection %v: NEW, supported collections: %#v", con, collections) return con, nil } @@ -278,43 +168,27 @@ func (s *Server) StreamAggregatedResources(stream mcp.AggregatedMeshConfigServic defer s.closeConnection(con) go con.receive() - // fan-in per-type response channels into single response channel for the select loop below. - responseChan := make(chan *watch, 1) - for _, w := range con.watches { - go func(w *watch) { - for state := range w.newPushResponseReadyChan { - if state == newPushResponseStateClosed { - break - } - responseChan <- w - } - - // Any closed watch can close the overall connection. Use - // `nil` value to indicate a closed state to the run loop - // below instead of closing the channel to avoid closing - // the channel multiple times. - responseChan <- nil - }(w) - } - for { select { - case w, more := <-responseChan: - if !more || w == nil { - return status.Error(codes.Unavailable, "server canceled watch") + case <-con.queue.Ready(): + collection, item, ok := con.queue.Dequeue() + if !ok { + break } - w.mu.Lock() - resp := w.newPushResponse - w.newPushResponse = nil - w.mu.Unlock() + resp := item.(*source.WatchResponse) - // newPushResponse may have been cleared before we got to it - if resp == nil { - break + w, ok := con.watches[collection] + if !ok { + scope.Errorf("unknown collection in dequeued watch response: %v", collection) + break // bug? } - if err := con.pushServerResponse(w, resp); err != nil { - return err + + // the response may have been cleared before we got to it + if resp != nil { + if err := con.pushServerResponse(w, resp); err != nil { + return err + } } case req, more := <-con.requestC: if !more { @@ -323,6 +197,8 @@ func (s *Server) StreamAggregatedResources(stream mcp.AggregatedMeshConfigServic if err := con.processClientRequest(req); err != nil { return err } + case <-con.queue.Done(): + return status.Error(codes.Unavailable, "server canceled watch") case <-stream.Context().Done(): scope.Debugf("MCP: connection %v: stream done, err=%v", con, stream.Context().Err()) return stream.Context().Err() @@ -340,6 +216,16 @@ func (con *connection) String() string { return fmt.Sprintf("{addr=%v id=%v}", con.peerAddr, con.id) } +// Queue the response for sending in the dispatch loop. The caller may provide +// a nil response to indicate that the watch should be closed. +func (con *connection) queueResponse(resp *source.WatchResponse) { + if resp == nil { + con.queue.Close() + } else { + con.queue.Enqueue(resp.Collection, resp) + } +} + func (con *connection) send(resp *source.WatchResponse) (string, error) { resources := make([]mcp.Resource, 0, len(resp.Resources)) for _, resource := range resp.Resources { @@ -380,8 +266,12 @@ func (con *connection) receive() { con.reqError = err return } + select { case con.requestC <- req: + case <-con.queue.Done(): + scope.Debugf("MCP: connection %v: stream done", con) + return case <-con.stream.Context().Done(): scope.Debugf("MCP: connection %v: stream done, err=%v", con, con.stream.Context().Err()) return @@ -409,10 +299,6 @@ func (con *connection) processClientRequest(req *mcp.MeshConfigRequest) error { return status.Errorf(codes.InvalidArgument, "unsupported collection %q", collection) } - // Reset on every request. Only the most recent NACK request (per - // nonce) is tracked. - w.mostRecentNackedVersion = "" - // nonces can be reused across streams; we verify nonce only if nonce is not initialized if w.nonce == "" || w.nonce == req.ResponseNonce { if w.nonce == "" { @@ -423,12 +309,6 @@ func (con *connection) processClientRequest(req *mcp.MeshConfigRequest) error { con, collection, req.VersionInfo, req.ResponseNonce, w.nonce, req.ErrorDetail) con.reporter.RecordRequestNack(collection, con.id, codes.Code(req.ErrorDetail.Code)) - - if version, ok := w.nonceVersionMap[req.ResponseNonce]; ok { - w.mu.Lock() - w.mostRecentNackedVersion = version - w.mu.Unlock() - } } else { scope.Debugf("MCP: connection %v ACK collection=%q version=%q with nonce=%q", con, collection, req.VersionInfo, req.ResponseNonce) @@ -445,7 +325,7 @@ func (con *connection) processClientRequest(req *mcp.MeshConfigRequest) error { Collection: collection, VersionInfo: req.VersionInfo, } - w.cancel = con.watcher.Watch(sr, w.saveResponseAndSchedulePush) + w.cancel = con.watcher.Watch(sr, con.queueResponse) } else { // This error path should not happen! Skip any requests that don't match the // latest watch's nonce value. These could be dup requests or out-of-order @@ -461,8 +341,6 @@ func (con *connection) processClientRequest(req *mcp.MeshConfigRequest) error { } } - delete(w.nonceVersionMap, req.ResponseNonce) - return nil } @@ -472,6 +350,5 @@ func (con *connection) pushServerResponse(w *watch, resp *source.WatchResponse) return err } w.nonce = nonce - w.nonceVersionMap[nonce] = resp.Version return nil } diff --git a/pkg/mcp/server/server_test.go b/pkg/mcp/server/server_test.go index 28acdaf32c32..c96fbbf32be2 100644 --- a/pkg/mcp/server/server_test.go +++ b/pkg/mcp/server/server_test.go @@ -18,7 +18,6 @@ import ( "context" "errors" "fmt" - "math" "net" "reflect" "sync" @@ -54,6 +53,7 @@ func (config *mockConfigWatcher) Watch(req *source.Request, pushResponse source. config.counts[req.Collection]++ if rsp, ok := config.responses[req.Collection]; ok { + delete(config.responses, req.Collection) rsp.Collection = req.Collection pushResponse(rsp) return nil @@ -202,6 +202,12 @@ func TestMultipleRequests(t *testing.T) { ResponseNonce: rsp.Nonce, } + config.setResponse(&source.WatchResponse{ + Collection: test.FakeType0Collection, + Version: "2", + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) + // check a response select { case <-stream.sent: @@ -304,6 +310,12 @@ func TestAuthCheck_Success(t *testing.T) { ResponseNonce: rsp.Nonce, } + config.setResponse(&source.WatchResponse{ + Collection: test.FakeType0Collection, + Version: "2", + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) + // check a response select { case <-stream.sent: @@ -613,12 +625,15 @@ func TestAggregateRequestType(t *testing.T) { close(stream.recv) } -func TestRateLimitNACK(t *testing.T) { - origNackLimitFreq := nackLimitFreq - nackLimitFreq = 1 * time.Millisecond - defer func() { - nackLimitFreq = origNackLimitFreq - }() +func TestIncrementalAggregatedResources(t *testing.T) { + var s Server + got := s.IncrementalAggregatedResources(nil) + if status.Code(got) != codes.Unimplemented { + t.Fatalf("IncrementalAggregatedResources() should return an unimplemented error code: got %v", status.Code(got)) + } +} + +func TestNACK(t *testing.T) { config := makeMockConfigWatcher() options := &source.Options{ @@ -635,58 +650,6 @@ func TestRateLimitNACK(t *testing.T) { } }() - var ( - nackFloodRepeatDuration = time.Millisecond * 500 - nackFloodMaxWantResponses = int(nackFloodRepeatDuration/nackLimitFreq) + 1 - nackFloodMinWantResponses = nackFloodMaxWantResponses / 2 - - ackFloodRepeatDuration = time.Millisecond * 500 - ackFloodMaxWantResponses = math.MaxInt64 - ackFloodMinWantResponses = int(ackFloodRepeatDuration/nackLimitFreq) + 1 - ) - - steps := []struct { - name string - pushedVersion string - ackedVersion string - minResponses int - maxResponses int - repeatDuration time.Duration - errDetails error - }{ - { - name: "initial push", - pushedVersion: "1", - ackedVersion: "1", - minResponses: 1, - maxResponses: 1, - }, - { - name: "first ack", - pushedVersion: "2", - ackedVersion: "2", - minResponses: 1, - maxResponses: 1, - }, - { - name: "verify nack flood is rate limited", - pushedVersion: "3", - ackedVersion: "2", - errDetails: errors.New("nack"), - minResponses: nackFloodMinWantResponses, - maxResponses: nackFloodMaxWantResponses, - repeatDuration: nackFloodRepeatDuration, - }, - { - name: "verify back-to-back ack is not rate limited", - pushedVersion: "4", - ackedVersion: "4", // resuse version to simplify test code below - minResponses: ackFloodMinWantResponses, - maxResponses: ackFloodMaxWantResponses, - repeatDuration: ackFloodRepeatDuration, - }, - } - sendRequest := func(typeURL, nonce, version string, err error) { req := &mcp.MeshConfigRequest{ SinkNode: test.Node, @@ -706,49 +669,57 @@ func TestRateLimitNACK(t *testing.T) { nonces := make(map[string]bool) var prevNonce string - - for _, s := range steps { - numResponses := 0 - finish := time.Now().Add(s.repeatDuration) - first := true - for { - if first { - first = false - - config.setResponse(&source.WatchResponse{ - Collection: test.FakeType0Collection, - Version: s.pushedVersion, - Resources: []*mcp.Resource{test.Type0A[0].Resource}, - }) - } - - var response *mcp.MeshConfigResponse + pushedVersion := "1" + numResponses := 0 + first := true + finish := time.Now().Add(1 * time.Second) + for i := 0; ; i++ { + var response *mcp.MeshConfigResponse + + if first { + first = false + config.setResponse(&source.WatchResponse{ + Collection: test.FakeType0Collection, + Version: pushedVersion, + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) select { case response = <-stream.sent: - numResponses++ case <-time.After(time.Second): - t.Fatalf("%v: timed out waiting for response", s.name) + t.Fatal("timed out waiting for initial response") } - if response.VersionInfo != s.pushedVersion { - t.Fatalf("%v: wrong response version: got %v want %v", s.name, response.VersionInfo, s.pushedVersion) + if response.VersionInfo != pushedVersion { + t.Fatalf(" wrong response version: got %v want %v", response.VersionInfo, pushedVersion) } if _, ok := nonces[response.Nonce]; ok { - t.Fatalf("%v: reused nonce in response: %v", s.name, response.Nonce) + t.Fatalf(" reused nonce in response: %v", response.Nonce) } nonces[response.Nonce] = true prevNonce = response.Nonce - - sendRequest(test.FakeType0Collection, prevNonce, s.ackedVersion, s.errDetails) - - if time.Now().After(finish) { - break + } else { + select { + case response = <-stream.sent: + t.Fatal("received unexpected response after NACK") + case <-time.After(50 * time.Millisecond): } } - if numResponses < s.minResponses || numResponses > s.maxResponses { - t.Fatalf("%v: wrong number of responses: got %v want[%v,%v]", - s.name, numResponses, s.minResponses, s.maxResponses) + + nonce := prevNonce + if i%2 == 1 { + nonce = "stale" } + + sendRequest(test.FakeType0Collection, nonce, pushedVersion, errors.New("nack")) + + if time.Now().After(finish) { + break + } + } + wantResponses := 0 + if numResponses != wantResponses { + t.Fatalf("wrong number of responses: got %v want %v", + numResponses, wantResponses) } } diff --git a/pkg/mcp/sink/client_sink.go b/pkg/mcp/sink/client_sink.go new file mode 100644 index 000000000000..b4cb320e7f5a --- /dev/null +++ b/pkg/mcp/sink/client_sink.go @@ -0,0 +1,93 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package sink + +import ( + "context" + "io" + "time" + + "github.com/gogo/status" + + mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/mcp/monitoring" +) + +var ( + // try to re-establish the bi-directional grpc stream after this delay. + reestablishStreamDelay = time.Second +) + +// Client implements the client for the MCP source service. The client is the +// sink and receives configuration from the server. +type Client struct { + // Client receives configuration using the ResourceSource RPC service + stream mcp.ResourceSource_EstablishResourceStreamClient + + client mcp.ResourceSourceClient + *Sink + reporter monitoring.Reporter +} + +func NewClient(client mcp.ResourceSourceClient, options *Options) *Client { + return &Client{ + Sink: New(options), + reporter: options.Reporter, + client: client, + } +} + +var reconnectTestProbe = func() {} + +func (c *Client) Run(ctx context.Context) { + // The first attempt is immediate. + retryDelay := time.Nanosecond + + for { + // connect w/retry + for { + select { + case <-ctx.Done(): + return + case <-time.After(retryDelay): + } + + // slow subsequent reconnection attempts down + retryDelay = reestablishStreamDelay + + scope.Info("(re)trying to establish new MCP sink stream") + stream, err := c.client.EstablishResourceStream(ctx) + + if reconnectTestProbe != nil { + reconnectTestProbe() + } + + if err == nil { + c.reporter.RecordStreamCreateSuccess() + scope.Info("New MCP sink stream created") + c.stream = stream + break + } + + scope.Errorf("Failed to create a new MCP sink stream: %v", err) + } + + err := c.processStream(c.stream) + if err != nil && err != io.EOF { + c.reporter.RecordRecvError(err, status.Code(err)) + scope.Errorf("Error receiving MCP response: %v", err) + } + } +} diff --git a/pkg/mcp/sink/client_sink_test.go b/pkg/mcp/sink/client_sink_test.go new file mode 100644 index 000000000000..22d724d27a29 --- /dev/null +++ b/pkg/mcp/sink/client_sink_test.go @@ -0,0 +1,166 @@ +// Copyright 2018 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package sink + +import ( + "context" + "errors" + "io" + "sync" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + + mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/mcp/internal/test" + "istio.io/istio/pkg/mcp/testing/monitoring" +) + +type clientHarness struct { + grpc.ClientStream + *sinkTestHarness +} + +func (h *clientHarness) EstablishResourceStream(ctx context.Context, opts ...grpc.CallOption) (mcp.ResourceSource_EstablishResourceStreamClient, error) { + return h, h.openError() +} + +// avoid ambiguity between grpc.ClientStream and test.sinkTestHarness +func (h *clientHarness) Context() context.Context { + return h.sinkTestHarness.Context() +} + +func TestClientSink(t *testing.T) { + h := &clientHarness{ + sinkTestHarness: newSinkTestHarness(), + } + options := &Options{ + CollectionOptions: CollectionOptionsFromSlice(test.SupportedCollections), + Updater: h, + ID: test.NodeID, + Metadata: test.NodeMetadata, + Reporter: monitoring.NewInMemoryStatsContext(), + } + c := NewClient(h, options) + + ctx, cancel := context.WithCancel(context.Background()) + + var wg sync.WaitGroup + wg.Add(1) + go func() { + c.Run(ctx) + wg.Done() + }() + + defer func() { + h.setOpenError(errors.New("done")) + h.recvErrorChan <- io.EOF + h.sendErrorChan <- io.EOF + cancel() + wg.Wait() + }() + + want := &Change{ + Collection: test.FakeType0Collection, + Objects: []*Object{ + { + TypeURL: test.FakeType0TypeURL, + Metadata: test.Type0A[0].Metadata, + Body: test.Type0A[0].Proto, + }, + { + TypeURL: test.FakeType0TypeURL, + Metadata: test.Type0B[0].Metadata, + Body: test.Type0B[0].Proto, + }, + }, + } + + h.resourcesChan <- &mcp.Resources{ + Collection: test.FakeType0Collection, + Nonce: "n0", + Resources: []mcp.Resource{ + *test.Type0A[0].Resource, + *test.Type0B[0].Resource, + }, + } + + <-h.changeUpdatedChans + h.mu.Lock() + got := h.changes[test.FakeType0Collection] + h.mu.Unlock() + if diff := cmp.Diff(got, want); diff != "" { + t.Fatalf("wrong change on first update: \n got %v \nwant %v \ndiff %v", got, want, diff) + } + + prevDelay := reestablishStreamDelay + reestablishStreamDelay = 100 * time.Millisecond + defer func() { reestablishStreamDelay = prevDelay }() + + reconnectChan := make(chan struct{}, 10) + reconnectTestProbe = func() { + reconnectChan <- struct{}{} + } + defer func() { reconnectTestProbe = nil }() + + h.changes[test.FakeType0Collection] = nil + + // force a disconnect and unsuccessful reconnects + h.setOpenError(errors.New("fake connection error")) + h.recvErrorChan <- errors.New("non-EOF error") + <-reconnectChan + + // allow connection to succeed + h.setOpenError(nil) + h.recvErrorChan <- io.EOF + <-reconnectChan + + want = &Change{ + Collection: test.FakeType0Collection, + Objects: []*Object{ + { + TypeURL: test.FakeType0TypeURL, + Metadata: test.Type0A[1].Metadata, + Body: test.Type0A[1].Proto, + }, + { + TypeURL: test.FakeType0TypeURL, + Metadata: test.Type0B[1].Metadata, + Body: test.Type0B[1].Proto, + }, + }, + } + + h.resourcesChan <- &mcp.Resources{ + Collection: test.FakeType0Collection, + Nonce: "n1", + Resources: []mcp.Resource{ + *test.Type0A[1].Resource, + *test.Type0B[1].Resource, + }, + } + + <-h.changeUpdatedChans + + h.mu.Lock() + got = h.changes[test.FakeType0Collection] + h.mu.Unlock() + + if diff := cmp.Diff(got, want); diff != "" { + t.Fatalf("wrong change on second update: \n got %v \nwant %v \ndiff %v", got, want, diff) + } +} diff --git a/pkg/mcp/sink/server_sink.go b/pkg/mcp/sink/server_sink.go new file mode 100644 index 000000000000..b20fee0b3220 --- /dev/null +++ b/pkg/mcp/sink/server_sink.go @@ -0,0 +1,99 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package sink + +import ( + "errors" + "io" + "sync/atomic" + "time" + + "golang.org/x/time/rate" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/peer" + "google.golang.org/grpc/status" + + mcp "istio.io/api/mcp/v1alpha1" +) + +// AuthChecker is used to check the transport auth info that is associated with each stream. If the function +// returns nil, then the connection will be allowed. If the function returns an error, then it will be +// percolated up to the gRPC stack. +// +// Note that it is possible that this method can be called with nil authInfo. This can happen either if there +// is no peer info, or if the underlying gRPC stream is insecure. The implementations should be resilient in +// this case and apply appropriate policy. +type AuthChecker interface { + Check(authInfo credentials.AuthInfo) error +} + +// Server implements the server for the MCP sink service. The server is the sink and receives configuration +// from the client. +type Server struct { + authCheck AuthChecker + newConnectionLimiter *rate.Limiter + connections int64 + sink *Sink +} + +var _ mcp.ResourceSinkServer = &Server{} + +// ServerOptions contains source server specific options +type ServerOptions struct { + NewConnectionFreq time.Duration + NewConnectionBurstSize int + AuthChecker AuthChecker +} + +// NewServer creates a new instance of a MCP sink server. +func NewServer(srcOptions *Options, serverOptions *ServerOptions) *Server { + limiter := rate.NewLimiter(rate.Every(serverOptions.NewConnectionFreq), serverOptions.NewConnectionBurstSize) + s := &Server{ + sink: New(srcOptions), + newConnectionLimiter: limiter, + authCheck: serverOptions.AuthChecker, + } + return s +} + +// EstablishResourceStream implements the ResourceSinkServer interface. +func (s *Server) EstablishResourceStream(stream mcp.ResourceSink_EstablishResourceStreamServer) error { + // TODO support receiving configuration from multiple sources? + // TODO MVP - limit to one connection at a time? + if !atomic.CompareAndSwapInt64(&s.connections, 0, 1) { + return errors.New("TODO limited to one connection at a time") + } + defer atomic.AddInt64(&s.connections, -1) + + // TODO - rate limit new connections? + var authInfo credentials.AuthInfo + if peerInfo, ok := peer.FromContext(stream.Context()); ok { + authInfo = peerInfo.AuthInfo + } else { + scope.Warnf("No peer info found on the incoming stream.") + } + + if err := s.authCheck.Check(authInfo); err != nil { + return status.Errorf(codes.Unauthenticated, "Authentication failure: %v", err) + } + + err := s.sink.processStream(stream) + code := status.Code(err) + if code == codes.OK || code == codes.Canceled || err == io.EOF { + return nil + } + return err +} diff --git a/pkg/mcp/sink/server_sink_test.go b/pkg/mcp/sink/server_sink_test.go new file mode 100644 index 000000000000..a4104e00ed20 --- /dev/null +++ b/pkg/mcp/sink/server_sink_test.go @@ -0,0 +1,149 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package sink + +import ( + "context" + "errors" + "io" + "net" + "testing" + + "github.com/gogo/status" + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/peer" + + mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/mcp/internal/test" + "istio.io/istio/pkg/mcp/testing/monitoring" +) + +type serverHarness struct { + grpc.ServerStream + *sinkTestHarness +} + +func (h *serverHarness) EstablishResourceStream(ctx context.Context, opts ...grpc.CallOption) (mcp.ResourceSink_EstablishResourceStreamServer, error) { + return h, h.openError() +} + +// avoid ambiguity between grpc.ServerStream and test.sinkTestHarness +func (h *serverHarness) Context() context.Context { + return h.sinkTestHarness.Context() +} + +func TestServerSink(t *testing.T) { + h := &serverHarness{ + sinkTestHarness: newSinkTestHarness(), + } + + authChecker := test.NewFakeAuthChecker() + options := &Options{ + CollectionOptions: CollectionOptionsFromSlice(test.SupportedCollections), + Updater: h, + ID: test.NodeID, + Metadata: test.NodeMetadata, + Reporter: monitoring.NewInMemoryStatsContext(), + } + s := NewServer(options, &ServerOptions{AuthChecker: authChecker}) + + errc := make(chan error) + go func() { + errc <- s.EstablishResourceStream(h) + }() + + want := &Change{ + Collection: test.FakeType0Collection, + Objects: []*Object{ + { + TypeURL: test.FakeType0TypeURL, + Metadata: test.Type0A[0].Metadata, + Body: test.Type0A[0].Proto, + }, + { + TypeURL: test.FakeType0TypeURL, + Metadata: test.Type0B[0].Metadata, + Body: test.Type0B[0].Proto, + }, + }, + } + + h.resourcesChan <- &mcp.Resources{ + Collection: test.FakeType0Collection, + Nonce: "n0", + Resources: []mcp.Resource{ + *test.Type0A[0].Resource, + *test.Type0B[0].Resource, + }, + } + + <-h.changeUpdatedChans + h.mu.Lock() + got := h.changes[test.FakeType0Collection] + h.mu.Unlock() + if diff := cmp.Diff(got, want); diff != "" { + t.Fatalf("wrong change on first update: \n got %v \nwant %v \ndiff %v", got, want, diff) + } + + h.recvErrorChan <- io.EOF + err := <-errc + if err != nil { + t.Fatalf("Stream exited with error: got %v", err) + } + + h.sinkTestHarness = newSinkTestHarness() + + // multiple connections + go func() { + err := s.EstablishResourceStream(h) + errc <- err + }() + + // wait for first connection to succeed and change to be applied + h.resourcesChan <- &mcp.Resources{ + Collection: test.FakeType0Collection, + Nonce: "n0", + Resources: []mcp.Resource{ + *test.Type0A[0].Resource, + }, + } + + <-h.changeUpdatedChans + + h.setContext(peer.NewContext(context.Background(), &peer.Peer{ + Addr: &net.IPAddr{IP: net.IPv4(192, 168, 1, 1)}, + AuthInfo: authChecker, + })) + err = s.EstablishResourceStream(h) + if err == nil { + t.Fatal("should fail") + } + + // error disconnect + h.recvErrorChan <- errors.New("unknown error") + err = <-errc + if err == nil { + t.Fatal("Stream exited without error") + } + + authChecker.AllowError = errors.New("not allowed") + + err = s.EstablishResourceStream(h) + if s, ok := status.FromError(err); !ok || s.Code() != codes.Unauthenticated { + t.Fatalf("Connection should have failed: got %v want %v", err, nil) + } +} diff --git a/pkg/mcp/sink/sink.go b/pkg/mcp/sink/sink.go index 242490f91c70..ed9e9851868f 100644 --- a/pkg/mcp/sink/sink.go +++ b/pkg/mcp/sink/sink.go @@ -15,14 +15,237 @@ package sink import ( + "io" + "sort" "sync" "github.com/gogo/protobuf/proto" + "github.com/gogo/protobuf/types" + "github.com/gogo/status" + "google.golang.org/grpc/codes" mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/log" + "istio.io/istio/pkg/mcp/internal" "istio.io/istio/pkg/mcp/monitoring" ) +var scope = log.RegisterScope("mcp", "mcp debugging", 0) + +type perCollectionState struct { + // tracks resource versions that we've successfully ACK'd + versions map[string]string + + // determines when incremental delivery is enabled for this collection + incrementalEnabled bool +} + +// Incremental MCP is disabled by default +const incrementalEnabledDefault = false + +// Sink implements the resource sink message exchange for MCP. It can be instantiated by client and server +// sink implementations to manage the MCP message exchange. +type Sink struct { + mu sync.Mutex + state map[string]*perCollectionState + + nodeInfo *mcp.SinkNode + updater Updater + journal *RecentRequestsJournal + metadata map[string]string + reporter monitoring.Reporter +} + +// New creates a new resource sink. +func New(options *Options) *Sink { // nolint: lll + nodeInfo := &mcp.SinkNode{ + Id: options.ID, + Annotations: options.Metadata, + } + + state := make(map[string]*perCollectionState) + for _, collection := range options.CollectionOptions { + state[collection.Name] = &perCollectionState{ + versions: make(map[string]string), + incrementalEnabled: incrementalEnabledDefault, + } + } + + return &Sink{ + state: state, + nodeInfo: nodeInfo, + updater: options.Updater, + metadata: options.Metadata, + reporter: options.Reporter, + journal: NewRequestJournal(), + } +} + +// Probe point for test code to determine when the node is finished processing responses. +var handleResponseDoneProbe = func() {} + +func (sink *Sink) sendNACKRequest(response *mcp.Resources, err error) *mcp.RequestResources { + errorDetails, _ := status.FromError(err) + + scope.Errorf("MCP: sending NACK for nonce=%v: error=%q", response.Nonce, err) + sink.reporter.RecordRequestNack(response.Collection, 0, errorDetails.Code()) + + req := &mcp.RequestResources{ + SinkNode: sink.nodeInfo, + Collection: response.Collection, + ResponseNonce: response.Nonce, + ErrorDetail: errorDetails.Proto(), + } + return req +} + +func (sink *Sink) handleResponse(resources *mcp.Resources) *mcp.RequestResources { + if handleResponseDoneProbe != nil { + defer handleResponseDoneProbe() + } + + state, ok := sink.state[resources.Collection] + if !ok { + errDetails := status.Errorf(codes.Unimplemented, "unsupported collection %v", resources.Collection) + return sink.sendNACKRequest(resources, errDetails) + } + + change := &Change{ + Collection: resources.Collection, + Objects: make([]*Object, 0, len(resources.Resources)), + Removed: resources.RemovedResources, + Incremental: resources.Incremental, + } + + for _, resource := range resources.Resources { + var dynamicAny types.DynamicAny + if err := types.UnmarshalAny(resource.Body, &dynamicAny); err != nil { + return sink.sendNACKRequest(resources, err) + } + + // TODO - use galley metadata to verify collection and type_url match? + object := &Object{ + TypeURL: resource.Body.TypeUrl, + Metadata: resource.Metadata, + Body: dynamicAny.Message, + } + change.Objects = append(change.Objects, object) + } + + if err := sink.updater.Apply(change); err != nil { + errDetails := status.Error(codes.InvalidArgument, err.Error()) + return sink.sendNACKRequest(resources, errDetails) + } + + // update version tracking if change is successfully applied + sink.mu.Lock() + internal.UpdateResourceVersionTracking(state.versions, resources) + useIncremental := state.incrementalEnabled + sink.mu.Unlock() + + // ACK + sink.reporter.RecordRequestAck(resources.Collection, 0) + req := &mcp.RequestResources{ + SinkNode: sink.nodeInfo, + Collection: resources.Collection, + ResponseNonce: resources.Nonce, + Incremental: useIncremental, + } + return req +} + +func (sink *Sink) createInitialRequests() []*mcp.RequestResources { + sink.mu.Lock() + + initialRequests := make([]*mcp.RequestResources, 0, len(sink.state)) + for collection, state := range sink.state { + var initialResourceVersions map[string]string + + if state.incrementalEnabled { + initialResourceVersions = make(map[string]string, len(state.versions)) + for name, version := range state.versions { + initialResourceVersions[name] = version + } + } + + req := &mcp.RequestResources{ + SinkNode: sink.nodeInfo, + Collection: collection, + InitialResourceVersions: initialResourceVersions, + Incremental: state.incrementalEnabled, + } + initialRequests = append(initialRequests, req) + } + sink.mu.Unlock() + + return initialRequests +} + +// processStream implements the MCP message exchange for the resource sink. It accepts the sink +// stream interface and returns when a send or receive error occurs. The caller is responsible for handling gRPC +// client/server specific error handling. +func (sink *Sink) processStream(stream Stream) error { + // send initial requests for each supported type + initialRequests := sink.createInitialRequests() + for { + var req *mcp.RequestResources + + if len(initialRequests) > 0 { + req = initialRequests[0] + initialRequests = initialRequests[1:] + } else { + resources, err := stream.Recv() + if err != nil { + if err != io.EOF { + sink.reporter.RecordRecvError(err, status.Code(err)) + scope.Errorf("Error receiving MCP resource: %v", err) + } + return err + } + req = sink.handleResponse(resources) + } + + sink.journal.RecordRequestResources(req) + + if err := stream.Send(req); err != nil { + sink.reporter.RecordSendError(err, status.Code(err)) + scope.Errorf("Error sending MCP request: %v", err) + return err + } + } +} + +// SnapshotRequestInfo returns a snapshot of the last known set of request results. +func (sink *Sink) SnapshotRequestInfo() []RecentRequestInfo { + return sink.journal.Snapshot() +} + +// Metadata that is originally supplied when creating this sink. +func (sink *Sink) Metadata() map[string]string { + r := make(map[string]string, len(sink.metadata)) + for k, v := range sink.metadata { + r[k] = v + } + return r +} + +// ID is the node id for this sink. +func (sink *Sink) ID() string { + return sink.nodeInfo.Id +} + +// Collections returns the resource collections that this sink requests. +func (sink *Sink) Collections() []string { + result := make([]string, 0, len(sink.state)) + + for k := range sink.state { + result = append(result, k) + } + sort.Strings(result) + + return result +} + // Object contains a decoded versioned object with metadata received from the server. type Object struct { TypeURL string @@ -37,7 +260,7 @@ type Change struct { // List of resources to add/update. The interpretation of this field depends // on the value of Incremental. // - // When Incremental=True, the list only includes new/updated resources. + // When Incremental=True, the list only includes new/updateReceivedForStream resources. // // When Incremental=False, the list includes the full list of resources. // Any previously received resources not in this list should be deleted. @@ -49,7 +272,7 @@ type Change struct { // Ignore when Incremental=false. Removed []string - // When true, the set of changes represents an incremental resource update. The + // When true, the set of changes represents an incrementalEnabled resource update. The // `Objects` is a list of added/update resources and `Removed` is a list of delete // resources. // @@ -103,7 +326,7 @@ type CollectionOptions struct { Name string } -// CollectionsOptionsFromSlice returns a slice of collection options from +// CollectionOptionsFromSlice returns a slice of collection options from // a slice of collection names. func CollectionOptionsFromSlice(names []string) []CollectionOptions { options := make([]CollectionOptions, 0, len(names)) @@ -123,3 +346,9 @@ type Options struct { Metadata map[string]string Reporter monitoring.Reporter } + +// Stream is for sending RequestResources messages and receiving Resource messages. +type Stream interface { + Send(*mcp.RequestResources) error + Recv() (*mcp.Resources, error) +} diff --git a/pkg/mcp/sink/sink_test.go b/pkg/mcp/sink/sink_test.go index bc42f00ed8ac..09924807713a 100644 --- a/pkg/mcp/sink/sink_test.go +++ b/pkg/mcp/sink/sink_test.go @@ -15,13 +15,605 @@ package sink import ( + "context" + "errors" + "fmt" + "io" + "sort" + "sync" "testing" + "time" + + "github.com/google/go-cmp/cmp/cmpopts" "github.com/gogo/protobuf/types" + "github.com/golang/sync/errgroup" + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc/codes" mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/mcp/internal/test" + "istio.io/istio/pkg/mcp/testing/monitoring" +) + +var ( + errSend = errors.New("send error") + errUpdate = errors.New("update error") ) +type sinkTestHarness struct { + resourcesChan chan *mcp.Resources + requestsChan chan *mcp.RequestResources + recvErrorChan chan error + sendErrorChan chan error + + sendError error + recvError error + updateError error + ctx context.Context + + mu sync.Mutex + openErr error + changes map[string]*Change + changeUpdatedChans chan struct{} +} + +func (h *sinkTestHarness) Context() context.Context { + return h.ctx +} + +func (h *sinkTestHarness) setContext(ctx context.Context) { + h.ctx = ctx +} + +func (h *sinkTestHarness) setOpenError(err error) { + h.mu.Lock() + defer h.mu.Unlock() + h.openErr = err +} + +func (h *sinkTestHarness) openError() error { + h.mu.Lock() + defer h.mu.Unlock() + return h.openErr +} + +func (h *sinkTestHarness) setSendError(err error) { + h.mu.Lock() + defer h.mu.Unlock() + h.sendError = err +} + +func (h *sinkTestHarness) setRecvError(err error) { + h.mu.Lock() + defer h.mu.Unlock() + h.recvError = err +} + +func (h *sinkTestHarness) setUpdateError(err error) { + h.mu.Lock() + defer h.mu.Unlock() + h.updateError = err +} + +func (h *sinkTestHarness) Apply(change *Change) error { + h.mu.Lock() + defer h.mu.Unlock() + h.changes[change.Collection] = change + h.changeUpdatedChans <- struct{}{} + + if h.updateError != nil { + return h.updateError + } + return nil +} + +func (h *sinkTestHarness) Send(req *mcp.RequestResources) error { + h.mu.Lock() + err := h.sendError + h.mu.Unlock() + + if err != nil { + return err + } + + select { + case h.requestsChan <- req: + return nil + case err := <-h.sendErrorChan: + return err + } +} + +func (h *sinkTestHarness) Close() { + h.sendErrorChan <- io.EOF + h.recvErrorChan <- io.EOF +} + +func (h *sinkTestHarness) Recv() (*mcp.Resources, error) { + h.mu.Lock() + err := h.recvError + h.mu.Unlock() + + if err != nil { + return nil, err + } + select { + case err := <-h.recvErrorChan: + return nil, err + case resources := <-h.resourcesChan: + return resources, nil + } +} + +func (h *sinkTestHarness) sendFakeResources(response *mcp.Resources) { + h.mu.Lock() + err := h.recvError + h.mu.Unlock() + + if err != nil { + h.recvErrorChan <- err + } else { + h.resourcesChan <- response + } +} + +func (h *sinkTestHarness) resetSavedChanges() { + h.mu.Lock() + defer h.mu.Unlock() + h.changes = make(map[string]*Change) +} +func newSinkTestHarness() *sinkTestHarness { + return &sinkTestHarness{ + resourcesChan: make(chan *mcp.Resources, 10), + requestsChan: make(chan *mcp.RequestResources, 10), + changes: make(map[string]*Change), + recvErrorChan: make(chan error, 10), + sendErrorChan: make(chan error, 10), + changeUpdatedChans: make(chan struct{}, 10), + ctx: context.Background(), + } +} + +type sinkHarness struct { + sink *Sink + errgrp errgroup.Group + responseDone chan struct{} + *sinkTestHarness +} + +func newHarness() *sinkHarness { + h := &sinkHarness{ + sinkTestHarness: newSinkTestHarness(), + responseDone: make(chan struct{}), + } + + options := &Options{ + CollectionOptions: CollectionOptionsFromSlice(test.SupportedCollections), + Updater: h, + ID: test.NodeID, + Metadata: test.NodeMetadata, + Reporter: monitoring.NewInMemoryStatsContext(), + } + h.sink = New(options) + + handleResponseDoneProbe = func() { h.responseDone <- struct{}{} } + + return h +} + +func (h *sinkHarness) delete() { + handleResponseDoneProbe = nil +} + +func (h *sinkHarness) verifyAppliedChanges(t *testing.T, collection string, want *Change) { + t.Helper() + + h.mu.Lock() + defer h.mu.Unlock() + + got := h.changes[collection] + + if diff := cmp.Diff(got, want, cmpopts.EquateEmpty()); diff != "" { + t.Fatalf("bad change for %q: \n got %#v \nwant %#v\ndiff %v", collection, got, want, diff) + } +} + +func (h *sinkHarness) verifySingleRequestSent(t *testing.T, resources *mcp.RequestResources) { + t.Helper() + + resourcesByType := map[string]*mcp.RequestResources{ + resources.Collection: resources, + } + h.verifyMultipleRequestsSent(t, resourcesByType) +} + +func (h *sinkHarness) verifyMultipleRequestsSent(t *testing.T, wantRequests map[string]*mcp.RequestResources) { + t.Helper() + + gotRequests := make(map[string]*mcp.RequestResources) + for i := 0; i < len(wantRequests); i++ { + select { + case got := <-h.requestsChan: + // verify the presence of errorDetails and the error code. Ignore everything else. + if got.ErrorDetail != nil { + got.ErrorDetail.Message = "" + got.ErrorDetail.Details = nil + } + + gotRequests[got.Collection] = got + case <-time.After(time.Second): + t.Fatalf("missing requests: got %v want %v", len(gotRequests), len(wantRequests)) + } + } + if diff := cmp.Diff(gotRequests, wantRequests); diff != "" { + t.Fatalf("bad requests\n got %#v \nwant %#v\n diff %v", gotRequests, wantRequests, diff) + } +} + +func (h *sinkHarness) openStream(t *testing.T) { + t.Helper() + + h.sinkTestHarness = newSinkTestHarness() + + h.errgrp = errgroup.Group{} + h.errgrp.Go(func() error { + err := h.sink.processStream(h) + return err + }) +} + +func (h *sinkHarness) closeStream(t *testing.T) { + t.Helper() + h.Close() +} + +func (h *sinkHarness) verifyInitialRequest(t *testing.T) { + t.Helper() + + h.verifyInitialRequestOnResume(t, map[string]map[string]string{}, map[string]*Change{}) +} + +func (h *sinkHarness) verifyInitialRequestOnResume(t *testing.T, initialResourceVersions map[string]map[string]string, changes map[string]*Change) { // nolint: lll + t.Helper() + + // verify the initial set of empty requests are sent for each supported type + want := make(map[string]*mcp.RequestResources) + for _, typeURL := range test.SupportedCollections { + want[typeURL] = &mcp.RequestResources{ + SinkNode: test.Node, + Collection: typeURL, + InitialResourceVersions: initialResourceVersions[typeURL], + } + } + h.verifyMultipleRequestsSent(t, want) + + // verify no responses are received and no changes are applied + for _, collection := range test.SupportedCollections { + h.verifyAppliedChanges(t, collection, changes[collection]) + } +} + +func (h *sinkHarness) closeStreamAndVerifyReturnValue(t *testing.T, wantError error) { + t.Helper() + + h.closeStream(t) + h.verifyStreamReturnValue(t, wantError) +} + +func (h *sinkHarness) verifyStreamReturnValue(t *testing.T, wantError error) { + t.Helper() + + if err := h.errgrp.Wait(); err != wantError { + t.Fatalf("unexpected error on stream close: got %q want %q", err, wantError) + } +} + +func makeChange(collection string, inc bool, removed []string, fakes ...*test.Fake) *Change { // nolint: unparam + change := &Change{ + Collection: collection, + Removed: removed, + Incremental: inc, + } + for _, fake := range fakes { + change.Objects = append(change.Objects, &Object{ + TypeURL: fake.TypeURL, + Metadata: fake.Metadata, + Body: fake.Proto, + }) + } + return change +} + +type testStep struct { + name string + resources *mcp.Resources + wantRequest *mcp.RequestResources + wantChange *Change + + updateError error + sendError error + recvError error +} + +func (h *sinkHarness) executeTestSequence(t *testing.T, steps []testStep) { + t.Helper() + + for i, step := range steps { + name := fmt.Sprintf("[%v] %v", i, step.name) + passed := t.Run(name, func(tt *testing.T) { + h.resetSavedChanges() + h.setUpdateError(step.updateError) + h.setSendError(step.sendError) + h.setRecvError(step.recvError) + + h.sendFakeResources(step.resources) + + if step.recvError == nil { + <-h.responseDone + } + + if step.wantRequest != nil { + h.verifySingleRequestSent(tt, step.wantRequest) + } + + if step.wantChange != nil { + h.verifyAppliedChanges(tt, step.wantChange.Collection, step.wantChange) + } + }) + if !passed { + t.Fatalf("step %v failed", name) + } + } +} + +func TestSinkACKAddUpdateDelete(t *testing.T) { + steps := []testStep{ + { + name: "ACK test.Type0 add A", + resources: test.MakeResources(test.FakeType0Collection, "type0/v0", "type0/n0", nil, test.Type0A[0]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n0", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0A[0]), + }, + { + name: "ACK test.Type1 add A", + resources: test.MakeResources(test.FakeType1Collection, "type1/v0", "type1/n0", nil, test.Type1A[0]), + wantRequest: test.MakeRequest(test.FakeType1Collection, "type1/n0", codes.OK), + wantChange: makeChange(test.FakeType1Collection, false, nil, test.Type1A[0]), + }, + { + name: "ACK test.Type1 add A", + resources: test.MakeResources(test.FakeType2Collection, "type2/v0", "type2/n0", nil, test.Type2A[0]), + wantRequest: test.MakeRequest(test.FakeType2Collection, "type2/n0", codes.OK), + wantChange: makeChange(test.FakeType2Collection, false, nil, test.Type2A[0]), + }, + { + name: "ACK update A add B", + resources: test.MakeResources(test.FakeType0Collection, "type0/v1", "type0/n1", nil, test.Type0A[1], test.Type0B[0]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n1", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0A[1], test.Type0B[0]), + }, + { + name: "ACK remove A update B add C", + resources: test.MakeResources(test.FakeType0Collection, "type0/v2", "type0/n2", nil, test.Type0B[1], test.Type0C[0]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n2", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0B[1], test.Type0C[0]), + }, + { + name: "ACK remove B", + resources: test.MakeResources(test.FakeType0Collection, "type0/v3", "type0/n3", nil), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n3", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil), + }, + { + name: "ACK remove B again", + resources: test.MakeResources(test.FakeType0Collection, "type0/v4", "type0/n4", nil), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n4", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil), + }, + { + name: "ACK update C", + resources: test.MakeResources(test.FakeType0Collection, "type0/v5", "type0/n5", nil, test.Type0C[1]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n5", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0C[1]), + }, + } + + h := newHarness() + h.openStream(t) + + h.verifyInitialRequest(t) + h.executeTestSequence(t, steps) + h.closeStreamAndVerifyReturnValue(t, io.EOF) + + info := h.sink.SnapshotRequestInfo() + got := len(info) + want := len(steps) + len(h.sink.Collections()) // plus initial requests + if got != want { + t.Fatalf("wrong number of snapshot request info: got %v want %v", got, want) + } +} + +func TestSinkNACK(t *testing.T) { + steps := []testStep{ + { + name: "ACK add A", + resources: test.MakeResources(test.FakeType0Collection, "type0/v0", "type0/n0", nil, test.Type0A[0]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n0", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0A[0]), + }, + { + name: "NACK unsupported type_url", + resources: test.MakeResources(test.FakeType0Collection+"Garbage", "type0/v1", "type0/n1", nil, test.Type0A[1]), + wantRequest: test.MakeRequest(test.FakeType0Collection+"Garbage", "type0/n1", codes.Unimplemented), + }, + { + name: "NACK unmarshal error", + resources: test.MakeResources(test.FakeType0Collection, "type0/v2", "type0/n2", nil, test.BadUnmarshal), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n2", codes.Unknown), + }, + { + name: "NACK updater rejected change", + resources: test.MakeResources(test.FakeType0Collection, "type0/v4", "type0/n4", nil, test.Type0A[1]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n4", codes.InvalidArgument), + updateError: errUpdate, + }, + { + name: "ACK update A", + resources: test.MakeResources(test.FakeType0Collection, "type0/v5", "type0/n5", nil, test.Type0A[1]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n5", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0A[1]), + }, + } + + h := newHarness() + defer h.delete() + + h.openStream(t) + + h.verifyInitialRequest(t) + h.executeTestSequence(t, steps) + h.closeStreamAndVerifyReturnValue(t, io.EOF) +} + +func TestSinkResume(t *testing.T) { + steps0 := []testStep{ + { + name: "ACK add test.Type0 A B", + resources: test.MakeResources(test.FakeType0Collection, "type0/v0", "type0/n0", nil, test.Type0A[0], test.Type0B[0]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n0", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0A[0], test.Type0B[0]), + }, + { + name: "ACK add test.Type1 A", + resources: test.MakeResources(test.FakeType1Collection, "type1/v0", "type1/n0", nil, test.Type1A[0]), + wantRequest: test.MakeRequest(test.FakeType1Collection, "type1/n0", codes.OK), + wantChange: makeChange(test.FakeType1Collection, false, nil, test.Type1A[0]), + }, + } + + steps1 := []testStep{ + { + name: "ACK remove test.Type0 A B", + resources: test.MakeResources(test.FakeType0Collection, "type0/v0", "type0/n0", nil), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n0", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil), + }, + { + name: "ACK remove test.Type1 A", + resources: test.MakeResources(test.FakeType1Collection, "type1/v0", "type1/n0", nil), + wantRequest: test.MakeRequest(test.FakeType1Collection, "type1/n0", codes.OK), + wantChange: makeChange(test.FakeType1Collection, false, nil), + }, + } + + h := newHarness() + defer h.delete() + + // Verify initial resource pushed + h.openStream(t) + h.verifyInitialRequest(t) + h.executeTestSequence(t, steps0) + + // Verify previously pushes resources are included in requests when resuming the stream. + h.closeStreamAndVerifyReturnValue(t, io.EOF) + h.openStream(t) + wantInitialResourceVersions := map[string]map[string]string{ + // TODO enable this or create a new test for incrementally resuming a session + //test.FakeType0Collection: map[string]string{ + // test.Type0A[0].Metadata.Name: test.Type0A[0].Metadata.Version, + // test.Type0B[0].Metadata.Name: test.Type0B[0].Metadata.Version, + //}, + //test.FakeType1Collection: map[string]string{ + // test.Type1A[0].Metadata.Name: test.Type1A[0].Metadata.Version, + //}, + } + h.verifyInitialRequestOnResume(t, wantInitialResourceVersions, nil) + + // Delete all of the resources ... + h.executeTestSequence(t, steps1) + h.closeStreamAndVerifyReturnValue(t, io.EOF) + + // ... and verify that no resource versions are included in the subsequent re-connection requests + h.openStream(t) + h.verifyInitialRequest(t) + h.closeStreamAndVerifyReturnValue(t, io.EOF) +} + +func TestSinkSendError(t *testing.T) { + steps0 := []testStep{ + { + name: "ACK add A", + resources: test.MakeResources(test.FakeType0Collection, "type0/v0", "type0/n0", nil, test.Type0A[0]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n0", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0A[0]), + }, + { + name: "send error", + resources: test.MakeResources(test.FakeType0Collection, "type0/v1", "type0/n1", nil, test.Type0A[1]), + wantRequest: nil, // ACK request dropped on send error + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0A[1]), + sendError: errSend, + }, + } + + h := newHarness() + defer h.delete() + + // verify send error stops the stream + h.openStream(t) + h.verifyInitialRequest(t) + h.executeTestSequence(t, steps0) + h.verifyStreamReturnValue(t, errSend) +} + +func TestSinkRecvError(t *testing.T) { + stepsErrorEOF := []testStep{ + { + name: "ACK add A", + resources: test.MakeResources(test.FakeType0Collection, "type0/v0", "type0/n0", nil, test.Type0A[0]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n0", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0A[0]), + }, + { + name: "recv error EOF", + resources: test.MakeResources(test.FakeType0Collection, "type0/v1", "type0/n1", nil, test.Type0A[1]), + recvError: io.EOF, + }, + } + + unknownError := errors.New("unknown") + stepsErrorUnknown := []testStep{ + { + name: "ACK update A", + resources: test.MakeResources(test.FakeType0Collection, "type0/v0", "type0/n0", nil, test.Type0A[1]), + wantRequest: test.MakeRequest(test.FakeType0Collection, "type0/n0", codes.OK), + wantChange: makeChange(test.FakeType0Collection, false, nil, test.Type0A[1]), + }, + { + name: "recv error unknown", + resources: test.MakeResources(test.FakeType0Collection, "type0/v1", "type0/n1", nil, test.Type0A[2]), + recvError: unknownError, + }, + } + + h := newHarness() + defer h.delete() + + // verify an EOF recv error stops the stream + h.openStream(t) + h.verifyInitialRequest(t) + h.executeTestSequence(t, stepsErrorEOF) + h.verifyStreamReturnValue(t, io.EOF) + + // verify an unknown recv error stops the stream + h.closeStreamAndVerifyReturnValue(t, io.EOF) + h.openStream(t) + h.verifyInitialRequestOnResume(t, nil, nil) + h.executeTestSequence(t, stepsErrorUnknown) + h.verifyStreamReturnValue(t, unknownError) +} + func TestInMemoryUpdater(t *testing.T) { u := NewInMemoryUpdater() @@ -57,3 +649,63 @@ func TestInMemoryUpdater(t *testing.T) { t.Fatalf("expected name not found on object: %v", o) } } + +func TestSink_MetadataID(t *testing.T) { + options := &Options{ + CollectionOptions: CollectionOptionsFromSlice(test.SupportedCollections), + Updater: NewInMemoryUpdater(), + ID: test.NodeID, + Metadata: test.NodeMetadata, + Reporter: monitoring.NewInMemoryStatsContext(), + } + sink := New(options) + + gotID := sink.ID() + if gotID != test.NodeID { + t.Errorf("wrong ID: got %v want %v", gotID, test.NodeID) + } + + gotMetadata := sink.Metadata() + if diff := cmp.Diff(gotMetadata, test.NodeMetadata); diff != "" { + t.Errorf("wrong Metadata: got %v want %v", gotMetadata, test.NodeMetadata) + } +} + +func TestCreateInitialRequests(t *testing.T) { + options := &Options{ + CollectionOptions: CollectionOptionsFromSlice(test.SupportedCollections), + Updater: NewInMemoryUpdater(), + ID: test.NodeID, + Metadata: test.NodeMetadata, + Reporter: monitoring.NewInMemoryStatsContext(), + } + sink := New(options) + + want := []*mcp.RequestResources{ + test.MakeRequest(test.FakeType0Collection, "", codes.OK), + test.MakeRequest(test.FakeType1Collection, "", codes.OK), + test.MakeRequest(test.FakeType2Collection, "", codes.OK), + } + got := sink.createInitialRequests() + sort.Slice(got, func(i, j int) bool { return got[i].Collection < got[j].Collection }) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("wrong requests with incremental disabled: \n got %v \nwant %v diff %v", got, want, diff) + } + + for i := 0; i < len(test.SupportedCollections); i++ { + want[i].Incremental = true + want[i].InitialResourceVersions = map[string]string{"foo": "v1"} + } + for _, state := range sink.state { + state.incrementalEnabled = true + state.versions["foo"] = "v1" + } + + got = sink.createInitialRequests() + sort.Slice(got, func(i, j int) bool { return got[i].Collection < got[j].Collection }) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("wrong requests with incemental enabled: \n got %v \nwant %v diff %v", got, want, diff) + } +} diff --git a/pkg/mcp/snapshot/snapshot.go b/pkg/mcp/snapshot/snapshot.go index 8ac5f205ee14..f13c2980ebaf 100644 --- a/pkg/mcp/snapshot/snapshot.go +++ b/pkg/mcp/snapshot/snapshot.go @@ -131,6 +131,7 @@ func (c *Cache) Watch(request *source.Request, pushResponse source.PushResponseF Collection: request.Collection, Version: version, Resources: snapshot.Resources(request.Collection), + Request: request, } pushResponse(response) return nil @@ -183,6 +184,7 @@ func (c *Cache) SetSnapshot(group string, snapshot Snapshot) { Collection: watch.request.Collection, Version: version, Resources: snapshot.Resources(watch.request.Collection), + Request: watch.request, } watch.pushResponse(response) diff --git a/pkg/mcp/snapshot/snapshot_test.go b/pkg/mcp/snapshot/snapshot_test.go index 434a20c0ff9a..87d32fcec4c8 100644 --- a/pkg/mcp/snapshot/snapshot_test.go +++ b/pkg/mcp/snapshot/snapshot_test.go @@ -17,12 +17,14 @@ package snapshot import ( "errors" "fmt" - "reflect" "strconv" "sync/atomic" "testing" "time" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + mcp "istio.io/api/mcp/v1alpha1" "istio.io/istio/pkg/mcp/internal/test" "istio.io/istio/pkg/mcp/source" @@ -77,13 +79,11 @@ func nextStrVersion(version *int64) string { } -func createTestWatch(c source.Watcher, typeURL, version string, responseC chan *source.WatchResponse, wantResponse, wantCancel bool) (*source.WatchResponse, source.CancelWatchFunc, error) { // nolint: lll +func createTestWatch(c source.Watcher, collection, version string, responseC chan *source.WatchResponse, wantResponse, wantCancel bool) (*source.WatchResponse, source.CancelWatchFunc, error) { // nolint: lll req := &source.Request{ - Collection: typeURL, + Collection: collection, VersionInfo: version, - SinkNode: &mcp.SinkNode{ - Id: DefaultGroup, - }, + SinkNode: test.Node, } cancel := c.Watch(req, func(response *source.WatchResponse) { @@ -156,12 +156,14 @@ func TestCreateWatch(t *testing.T) { if _, _, err := createTestWatch(c, collection, collectionVersion, responseC, false, true); err != nil { t.Fatalf("CreateWatch() failed: %v", err) } + if gotResponse, _ := getAsyncResponse(responseC); gotResponse != nil { t.Fatalf("open watch failed: received premature response: %v", gotResponse) } // verify async response snapshot = snapshot.copy() + watchVersion := collectionVersion collectionVersion = nextStrVersion(&versionInt) snapshot.versions[collection] = collectionVersion c.SetSnapshot(DefaultGroup, snapshot) @@ -171,9 +173,14 @@ func TestCreateWatch(t *testing.T) { Collection: collection, Version: collectionVersion, Resources: snapshot.Resources(collection), + Request: &source.Request{ + Collection: collection, + SinkNode: test.Node, + VersionInfo: watchVersion, + }, } - if !reflect.DeepEqual(gotResponse, wantResponse) { - t.Fatalf("received bad WatchResponse: got %v wantResponse %v", gotResponse, wantResponse) + if diff := cmp.Diff(gotResponse, wantResponse, cmpopts.IgnoreUnexported(source.Request{})); diff != "" { + t.Fatalf("received bad WatchResponse: \n got %v \nwant %v \ndiff %v", gotResponse, wantResponse, diff) } } else { t.Fatalf("watch response channel did not produce response after %v", asyncResponseTimeout) @@ -258,9 +265,13 @@ func TestClearSnapshot(t *testing.T) { Collection: collection, Version: typeVersion, Resources: snapshot.Resources(collection), + Request: &source.Request{ + Collection: collection, + SinkNode: test.Node, + }, } - if !reflect.DeepEqual(gotResponse, wantResponse) { - t.Fatalf("received bad WatchResponse: got %v wantResponse %v", gotResponse, wantResponse) + if diff := cmp.Diff(gotResponse, wantResponse, cmpopts.IgnoreUnexported(source.Request{})); diff != "" { + t.Fatalf("received bad WatchResponse: \n got %v \nwant %+v \ndiff %v", gotResponse, wantResponse, diff) } } else { t.Fatalf("watch response channel did not produce response after %v", asyncResponseTimeout) diff --git a/pkg/mcp/source/client_source.go b/pkg/mcp/source/client_source.go new file mode 100644 index 000000000000..9bc08bede006 --- /dev/null +++ b/pkg/mcp/source/client_source.go @@ -0,0 +1,93 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package source + +import ( + "context" + "io" + "time" + + "github.com/gogo/status" + + mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/mcp/monitoring" +) + +var ( + // try to re-establish the bi-directional grpc stream after this delay. + reestablishStreamDelay = time.Second +) + +// Client implements the client for the MCP sink service. The client is the +// source of configuration and sends configuration to the server. +type Client struct { + // Client pushes configuration to a remove sink using the ResourceSink RPC service + stream mcp.ResourceSink_EstablishResourceStreamClient + + client mcp.ResourceSinkClient + reporter monitoring.Reporter + source *Source +} + +func NewClient(client mcp.ResourceSinkClient, options *Options) *Client { + return &Client{ + source: New(options), + client: client, + reporter: options.Reporter, + } +} + +var reconnectTestProbe = func() {} + +func (c *Client) Run(ctx context.Context) { + // The first attempt is immediate. + retryDelay := time.Nanosecond + + for { + // connect w/retry + for { + select { + case <-ctx.Done(): + return + case <-time.After(retryDelay): + } + + // slow subsequent reconnection attempts down + retryDelay = reestablishStreamDelay + + scope.Info("(re)trying to establish new MCP source stream") + stream, err := c.client.EstablishResourceStream(ctx) + + if reconnectTestProbe != nil { + reconnectTestProbe() + } + + if err == nil { + c.reporter.RecordStreamCreateSuccess() + scope.Info("New MCP source stream created") + c.stream = stream + break + } + + scope.Errorf("Failed to create a new MCP source stream: %v", err) + } + + err := c.source.processStream(c.stream) + if err != nil && err != io.EOF { + c.reporter.RecordRecvError(err, status.Code(err)) + scope.Errorf("Error receiving MCP response: %v", err) + } + } +} diff --git a/pkg/mcp/source/client_source_test.go b/pkg/mcp/source/client_source_test.go new file mode 100644 index 000000000000..0ad32fb3c8c3 --- /dev/null +++ b/pkg/mcp/source/client_source_test.go @@ -0,0 +1,146 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package source + +import ( + "context" + "errors" + "sync" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + + mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/mcp/internal/test" + "istio.io/istio/pkg/mcp/testing/monitoring" +) + +type sourceHarness struct { + grpc.ClientStream + *sourceTestHarness +} + +func (h *sourceHarness) EstablishResourceStream(ctx context.Context, opts ...grpc.CallOption) (mcp.ResourceSink_EstablishResourceStreamClient, error) { + return h, h.openError() +} + +// avoid ambiguity between grpc.ServerStream and test.sourceTestHarness +func (h *sourceHarness) Context() context.Context { + return h.sourceTestHarness.Context() +} + +func verifySentResourcesMultipleTypes(t *testing.T, h *sourceTestHarness, wantResources map[string]*mcp.Resources) map[string]*mcp.Resources { + t.Helper() + + gotResources := make(map[string]*mcp.Resources) + for { + select { + case got := <-h.resourcesChan: + if _, ok := gotResources[got.Collection]; ok { + t.Fatalf("gotResources duplicate response for type %v: %v", got.Collection, got) + } + gotResources[got.Collection] = got + + want, ok := wantResources[got.Collection] + if !ok { + t.Fatalf("gotResources unexpected response for type %v: %v", got.Collection, got) + } + + if diff := cmp.Diff(*got, *want, cmpopts.IgnoreFields(mcp.Resources{}, "Nonce")); diff != "" { + t.Fatalf("wrong responses for %v: \n got %+v \nwant %+v \n diff %v", got.Collection, got, want, diff) + } + + if len(gotResources) == len(wantResources) { + return gotResources + } + case <-time.After(time.Second): + t.Fatalf("timeout waiting for all responses: gotResources %v", gotResources) + } + } +} + +func TestClientSource(t *testing.T) { + h := &sourceHarness{ + sourceTestHarness: newSourceTestHarness(t), + } + + options := &Options{ + Watcher: h, + CollectionsOptions: CollectionOptionsFromSlice(test.SupportedCollections), + Reporter: monitoring.NewInMemoryStatsContext(), + } + c := NewClient(h, options) + + ctx, cancel := context.WithCancel(context.Background()) + var wg sync.WaitGroup + wg.Add(1) + go func() { + c.Run(ctx) + wg.Done() + }() + defer func() { + cancel() + wg.Wait() + }() + + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType0Collection, + Version: "1", + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType1Collection, + Version: "2", + Resources: []*mcp.Resource{test.Type1A[0].Resource}, + }) + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType2Collection, + Version: "3", + Resources: []*mcp.Resource{test.Type2A[0].Resource}, + }) + + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "", codes.OK) + h.requestsChan <- test.MakeRequest(test.FakeType1Collection, "", codes.OK) + h.requestsChan <- test.MakeRequest(test.FakeType2Collection, "", codes.OK) + + verifySentResourcesMultipleTypes(t, h.sourceTestHarness, + map[string]*mcp.Resources{ + test.FakeType0Collection: test.MakeResources(test.FakeType0Collection, "1", "1", nil, test.Type0A[0]), + test.FakeType1Collection: test.MakeResources(test.FakeType1Collection, "2", "2", nil, test.Type1A[0]), + test.FakeType2Collection: test.MakeResources(test.FakeType2Collection, "3", "3", nil, test.Type2A[0]), + }, + ) + + want := 1 + for _, typeURL := range []string{test.FakeType0Collection, test.FakeType1Collection, test.FakeType2Collection} { + if got := h.watchesCreated(typeURL); got != want { + t.Fatalf("Wrong number of %v watches created: got %v want %v", typeURL, got, want) + } + } + + reconnectChan := make(chan struct{}, 10) + reconnectTestProbe = func() { + reconnectChan <- struct{}{} + } + defer func() { reconnectTestProbe = nil }() + + h.setOpenError(errors.New("fake connection error")) + h.recvErrorChan <- errRecv + <-reconnectChan +} diff --git a/pkg/mcp/source/server_source.go b/pkg/mcp/source/server_source.go new file mode 100644 index 000000000000..8d2403dfc7e3 --- /dev/null +++ b/pkg/mcp/source/server_source.go @@ -0,0 +1,89 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package source + +import ( + "io" + "time" + + "golang.org/x/time/rate" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/peer" + "google.golang.org/grpc/status" + + mcp "istio.io/api/mcp/v1alpha1" +) + +// AuthChecker is used to check the transport auth info that is associated with each stream. If the function +// returns nil, then the connection will be allowed. If the function returns an error, then it will be +// percolated up to the gRPC stack. +// +// Note that it is possible that this method can be called with nil authInfo. This can happen either if there +// is no peer info, or if the underlying gRPC stream is insecure. The implementations should be resilient in +// this case and apply appropriate policy. +type AuthChecker interface { + Check(authInfo credentials.AuthInfo) error +} + +// Server implements the server for the MCP source service. The server is the source of configuration and sends +// configuration to the client. +type Server struct { + authCheck AuthChecker + newConnectionLimiter *rate.Limiter + src *Source +} + +var _ mcp.ResourceSourceServer = &Server{} + +// ServerOptions contains sink server specific options +type ServerOptions struct { + NewConnectionFreq time.Duration + NewConnectionBurstSize int + AuthChecker AuthChecker +} + +// NewServer creates a new instance of a MCP source server. +func NewServer(options *Options, serverOptions *ServerOptions) *Server { + limiter := rate.NewLimiter(rate.Every(serverOptions.NewConnectionFreq), serverOptions.NewConnectionBurstSize) + s := &Server{ + src: New(options), + newConnectionLimiter: limiter, + authCheck: serverOptions.AuthChecker, + } + return s +} + +// EstablishResourceStream implements the ResourceSourceServer interface. +func (s *Server) EstablishResourceStream(stream mcp.ResourceSource_EstablishResourceStreamServer) error { + // TODO - rate limit new connections? + var authInfo credentials.AuthInfo + if peerInfo, ok := peer.FromContext(stream.Context()); ok { + authInfo = peerInfo.AuthInfo + } else { + scope.Warnf("No peer info found on the incoming stream.") + } + + if err := s.authCheck.Check(authInfo); err != nil { + return status.Errorf(codes.Unauthenticated, "Authentication failure: %v", err) + } + + err := s.src.processStream(stream) + code := status.Code(err) + if code == codes.OK || code == codes.Canceled || err == io.EOF { + return nil + } + return err +} diff --git a/pkg/mcp/source/server_source_test.go b/pkg/mcp/source/server_source_test.go new file mode 100644 index 000000000000..42bbee3ccb30 --- /dev/null +++ b/pkg/mcp/source/server_source_test.go @@ -0,0 +1,136 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package source + +import ( + "context" + "errors" + "io" + "net" + "testing" + + "github.com/gogo/status" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/peer" + + mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/mcp/internal/test" + "istio.io/istio/pkg/mcp/testing/monitoring" +) + +type serverHarness struct { + grpc.ServerStream + *sourceTestHarness +} + +func (h *serverHarness) EstablishResourceStream(ctx context.Context, opts ...grpc.CallOption) (mcp.ResourceSource_EstablishResourceStreamServer, error) { // nolint: lll + return h, h.openError() +} + +// avoid ambiguity between grpc.ServerStream and test.sourceTestHarness +func (h *serverHarness) Context() context.Context { + return h.sourceTestHarness.Context() +} + +func TestServerSource(t *testing.T) { + h := &serverHarness{ + sourceTestHarness: newSourceTestHarness(t), + } + + authChecker := test.NewFakeAuthChecker() + options := &Options{ + Watcher: h, + CollectionsOptions: CollectionOptionsFromSlice(test.SupportedCollections), + Reporter: monitoring.NewInMemoryStatsContext(), + } + s := NewServer(options, &ServerOptions{AuthChecker: authChecker}) + + errc := make(chan error) + go func() { + errc <- s.EstablishResourceStream(h) + }() + + h.setRecvError(io.EOF) + err := <-errc + if err != nil { + t.Fatalf("Stream exited with error: got %v", err) + } + + // processStream error + go func() { + errc <- s.EstablishResourceStream(h) + }() + wantError := errors.New("unknown") + h.setRecvError(wantError) + err = <-errc + if err != wantError { + t.Fatalf("Stream exited with error: got %v want %v", err, wantError) + } + + h.setContext(peer.NewContext(context.Background(), &peer.Peer{ + Addr: &net.IPAddr{IP: net.IPv4(192, 168, 1, 1)}, + AuthInfo: authChecker, + })) + authChecker.AllowError = errors.New("not allowed") + err = s.EstablishResourceStream(h) + if s, ok := status.FromError(err); !ok || s.Code() != codes.Unauthenticated { + t.Fatalf("Connection should have failed: got %v want %v", err, nil) + } + + authChecker.AllowError = nil + + h.resetStream() + h.setRecvError(nil) + + go func() { + errc <- s.EstablishResourceStream(h) + }() + + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType0Collection, + Version: "1", + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType1Collection, + Version: "2", + Resources: []*mcp.Resource{test.Type1A[0].Resource}, + }) + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType2Collection, + Version: "3", + Resources: []*mcp.Resource{test.Type2A[0].Resource}, + }) + + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "", codes.OK) + h.requestsChan <- test.MakeRequest(test.FakeType1Collection, "", codes.OK) + h.requestsChan <- test.MakeRequest(test.FakeType2Collection, "", codes.OK) + + verifySentResourcesMultipleTypes(t, h.sourceTestHarness, + map[string]*mcp.Resources{ + test.FakeType0Collection: test.MakeResources(test.FakeType0Collection, "1", "1", nil, test.Type0A[0]), + test.FakeType1Collection: test.MakeResources(test.FakeType1Collection, "2", "2", nil, test.Type1A[0]), + test.FakeType2Collection: test.MakeResources(test.FakeType2Collection, "3", "3", nil, test.Type2A[0]), + }, + ) + + want := 1 + for _, typeURL := range []string{test.FakeType0Collection, test.FakeType1Collection, test.FakeType2Collection} { + if got := h.watchesCreated(typeURL); got != want { + t.Fatalf("Wrong number of %v watches created: got %v want %v", typeURL, got, want) + } + } +} diff --git a/pkg/mcp/source/source.go b/pkg/mcp/source/source.go index 6a0eb747d8f5..9f6c0ebf0947 100644 --- a/pkg/mcp/source/source.go +++ b/pkg/mcp/source/source.go @@ -15,21 +15,37 @@ package source import ( + "context" + "fmt" + "io" + "strconv" + "sync/atomic" "time" + "github.com/gogo/status" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/peer" + mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/log" + "istio.io/istio/pkg/mcp/internal" "istio.io/istio/pkg/mcp/monitoring" ) -const DefaultRetryPushDelay = 10 * time.Millisecond +var scope = log.RegisterScope("mcp", "mcp debugging", 0) -// Request is a temporary abstraction for the MCP client request which can +// Request is a temporary abstraction for the MCP node request which can // be used with the mcp.MeshConfigRequest and mcp.RequestResources. It can // be removed once we fully cutover to mcp.RequestResources. type Request struct { - Collection string + Collection string + + // Most recent version was that ACK/NACK'd by the sink VersionInfo string SinkNode *mcp.SinkNode + + // hidden + incremental bool } // WatchResponse contains a versioned collection of pre-serialized resources. @@ -37,12 +53,15 @@ type WatchResponse struct { Collection string // Version of the resources in the response for the given - // type. The client responses with this version in subsequent + // type. The node responses with this version in subsequent // requests as an acknowledgment. Version string // Resourced resources to be included in the response. Resources []*mcp.Resource + + // The original request for triggered this response + Request *Request } type ( @@ -72,7 +91,7 @@ type CollectionOptions struct { Name string } -// CollectionsOptionsFromSlice returns a slice of collection options from +// CollectionOptionsFromSlice returns a slice of collection options from // a slice of collection names. func CollectionOptionsFromSlice(names []string) []CollectionOptions { options := make([]CollectionOptions, 0, len(names)) @@ -89,9 +108,339 @@ type Options struct { Watcher Watcher CollectionsOptions []CollectionOptions Reporter monitoring.Reporter +} + +// Stream is for sending Resource messages and receiving RequestResources messages. +type Stream interface { + Send(*mcp.Resources) error + Recv() (*mcp.RequestResources, error) + Context() context.Context +} + +// Sources implements the resource source message exchange for MCP. It can be instantiated by client and server +// source implementations to manage the MCP message exchange. +type Source struct { + watcher Watcher + collections []CollectionOptions + nextStreamID int64 + reporter monitoring.Reporter + connections int64 +} + +// watch maintains local push state of the most recent watch per-type. +type watch struct { + // only accessed from connection goroutine + cancel func() + ackedVersionMap map[string]string // resources that exist at the sink; by name and version + pending *mcp.Resources + incremental bool +} + +// connection maintains per-stream connection state for a +// node. Access to the stream and watch state is serialized +// through request and response channels. +type connection struct { + peerAddr string + stream Stream + id int64 + + // unique nonce generator for req-resp pairs per xDS stream; the server + // ignores stale nonces. nonce is only modified within send() function. + streamNonce int64 + + requestC chan *mcp.RequestResources // a channel for receiving incoming requests + reqError error // holds error if request channel is closed + watches map[string]*watch // per-type watch state + watcher Watcher + + reporter monitoring.Reporter + + queue *internal.UniqueQueue +} + +const DefaultRetryPushDelay = 10 * time.Millisecond + +// New creates a new resource source. +func New(options *Options) *Source { + s := &Source{ + watcher: options.Watcher, + collections: options.CollectionsOptions, + reporter: options.Reporter, + } + return s +} + +func (s *Source) newConnection(stream Stream) *connection { + peerAddr := "0.0.0.0" + + peerInfo, ok := peer.FromContext(stream.Context()) + if ok { + peerAddr = peerInfo.Addr.String() + } else { + scope.Warnf("No peer info found on the incoming stream.") + peerInfo = nil + } + + con := &connection{ + stream: stream, + peerAddr: peerAddr, + requestC: make(chan *mcp.RequestResources), + watches: make(map[string]*watch), + watcher: s.watcher, + id: atomic.AddInt64(&s.nextStreamID, 1), + reporter: s.reporter, + queue: internal.NewUniqueScheduledQueue(len(s.collections)), + } + + var collections []string + for i := range s.collections { + collection := s.collections[i] + w := &watch{ + ackedVersionMap: make(map[string]string), + incremental: false, + } + con.watches[collection.Name] = w + collections = append(collections, collection.Name) + } + + s.reporter.SetStreamCount(atomic.AddInt64(&s.connections, 1)) + + scope.Debugf("MCP: connection %v: NEW, supported collections: %#v", con, collections) + + return con +} + +func (s *Source) processStream(stream Stream) error { + con := s.newConnection(stream) + + defer s.closeConnection(con) + go con.receive() + + for { + select { + case <-con.queue.Ready(): + collection, item, ok := con.queue.Dequeue() + if !ok { + break + } + + resp := item.(*WatchResponse) + + w, ok := con.watches[collection] + if !ok { + scope.Errorf("unknown collection in dequeued watch response: %v", collection) + break // bug? + } + + // the response may have been cleared before we got to it + if resp != nil { + if err := con.pushServerResponse(w, resp); err != nil { + return err + } + } + case req, more := <-con.requestC: + if !more { + return con.reqError + } + if err := con.processClientRequest(req); err != nil { + return err + } + case <-con.queue.Done(): + return status.Error(codes.Unavailable, "server canceled watch") + case <-stream.Context().Done(): + scope.Debugf("MCP: connection %v: stream done, err=%v", con, stream.Context().Err()) + return stream.Context().Err() + } + } +} + +func (s *Source) closeConnection(con *connection) { + con.close() + s.reporter.SetStreamCount(atomic.AddInt64(&s.connections, -1)) +} + +// String implements Stringer.String. +func (con *connection) String() string { + return fmt.Sprintf("{addr=%v id=%v}", con.peerAddr, con.id) +} + +// Queue the response for sending in the dispatch loop. The caller may provide +// a nil response to indicate that the watch should be closed. +func (con *connection) queueResponse(resp *WatchResponse) { + if resp == nil { + con.queue.Close() + } else { + con.queue.Enqueue(resp.Collection, resp) + } +} + +func calculateDelta(current []*mcp.Resource, acked map[string]string) (added []mcp.Resource, removed []string) { + // TODO - consider storing desired state as a map to make this faster + desired := make(map[string]*mcp.Resource, len(current)) + + // compute diff + for _, envelope := range current { + prevVersion, exists := acked[envelope.Metadata.Name] + if !exists { + // new + added = append(added, *envelope) + } else if prevVersion != envelope.Metadata.Version { + // update + added = append(added, *envelope) + } + // tracking for delete + desired[envelope.Metadata.Name] = envelope + } + + for name := range acked { + if _, exists := desired[name]; !exists { + removed = append(removed, name) + } + } + + return added, removed +} + +func (con *connection) pushServerResponse(w *watch, resp *WatchResponse) error { + var ( + added []mcp.Resource + removed []string + ) + + // send an incremental update if enabled for this collection and the most + // recent request from the sink requested it. + var incremental bool + if w.incremental && resp.Request.incremental { + incremental = true + } + + if incremental { + added, removed = calculateDelta(resp.Resources, w.ackedVersionMap) + } else { + for _, resource := range resp.Resources { + added = append(added, *resource) + } + } + + msg := &mcp.Resources{ + SystemVersionInfo: resp.Version, + Collection: resp.Collection, + Resources: added, + RemovedResources: removed, + Incremental: incremental, + } + + // increment nonce + con.streamNonce = con.streamNonce + 1 + msg.Nonce = strconv.FormatInt(con.streamNonce, 10) + if err := con.stream.Send(msg); err != nil { + con.reporter.RecordSendError(err, status.Code(err)) + return err + } + scope.Debugf("MCP: connection %v: SEND collection=%v version=%v nonce=%v", + con, resp.Collection, resp.Version, msg.Nonce) + w.pending = msg + return nil +} + +func (con *connection) receive() { + defer close(con.requestC) + for { + req, err := con.stream.Recv() + if err != nil { + code := status.Code(err) + if code == codes.Canceled || err == io.EOF { + scope.Infof("MCP: connection %v: TERMINATED %q", con, err) + return + } + con.reporter.RecordRecvError(err, code) + scope.Errorf("MCP: connection %v: TERMINATED with errors: %v", con, err) + // Save the stream error prior to closing the stream. The caller + // should access the error after the channel closure. + con.reqError = err + return + } + select { + case con.requestC <- req: + case <-con.queue.Done(): + scope.Debugf("MCP: connection %v: stream done", con) + return + case <-con.stream.Context().Done(): + scope.Debugf("MCP: connection %v: stream done, err=%v", con, con.stream.Context().Err()) + return + } + } +} + +func (con *connection) close() { + scope.Infof("MCP: connection %v: CLOSED", con) + + for _, w := range con.watches { + if w.cancel != nil { + w.cancel() + } + } +} + +func (con *connection) processClientRequest(req *mcp.RequestResources) error { + collection := req.Collection + + con.reporter.RecordRequestSize(collection, con.id, req.Size()) + + w, ok := con.watches[collection] + if !ok { + return status.Errorf(codes.InvalidArgument, "unsupported collection %q", collection) + } + + // nonces can be reused across streams; we verify nonce only if it initialized + if req.ResponseNonce == "" || w.pending.GetNonce() == req.ResponseNonce { + versionInfo := "" + + if w.pending == nil { + scope.Infof("MCP: connection %v: WATCH for %v", con, collection) + } else { + versionInfo = w.pending.SystemVersionInfo + if req.ErrorDetail != nil { + scope.Warnf("MCP: connection %v: NACK collection=%v version=%q with nonce=%q error=%#v", // nolint: lll + con, collection, req.ResponseNonce, versionInfo, req.ErrorDetail) + con.reporter.RecordRequestNack(collection, con.id, codes.Code(req.ErrorDetail.Code)) + } else { + scope.Infof("MCP: connection %v ACK collection=%v with version=%q nonce=%q", + con, collection, versionInfo, req.ResponseNonce) + con.reporter.RecordRequestAck(collection, con.id) + + internal.UpdateResourceVersionTracking(w.ackedVersionMap, w.pending) + } + + // clear the pending request after we finished processing the corresponding response. + w.pending = nil + } + + if w.cancel != nil { + w.cancel() + } + + sr := &Request{ + SinkNode: req.SinkNode, + Collection: collection, + VersionInfo: versionInfo, + incremental: req.Incremental, + } + w.cancel = con.watcher.Watch(sr, con.queueResponse) + } else { + // This error path should not happen! Skip any requests that don't match the + // latest watch's nonce. These could be dup requests or out-of-order + // requests from a buggy node. + if req.ErrorDetail != nil { + scope.Errorf("MCP: connection %v: STALE NACK collection=%v with nonce=%q (expected nonce=%q) error=%+v", // nolint: lll + con, collection, req.ResponseNonce, w.pending.GetNonce(), req.ErrorDetail) + con.reporter.RecordRequestNack(collection, con.id, codes.Code(req.ErrorDetail.Code)) + } else { + scope.Errorf("MCP: connection %v: STALE ACK collection=%v with nonce=%q (expected nonce=%q)", // nolint: lll + con, collection, req.ResponseNonce, w.pending.GetNonce()) + con.reporter.RecordRequestAck(collection, con.id) + } + } - // Controls the delay for re-retrying a configuration push if the previous - // attempt was not possible, e.errgrp. the lower-level serving layer was busy. This - // should typically be set fairly small (order of milliseconds). - RetryPushDelay time.Duration + return nil } diff --git a/pkg/mcp/source/source_test.go b/pkg/mcp/source/source_test.go new file mode 100644 index 000000000000..4c1ee60d2600 --- /dev/null +++ b/pkg/mcp/source/source_test.go @@ -0,0 +1,641 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package source + +import ( + "context" + "errors" + "fmt" + "io" + "net" + "sort" + "sync" + "testing" + "time" + + "github.com/gogo/status" + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/peer" + + mcp "istio.io/api/mcp/v1alpha1" + "istio.io/istio/pkg/log" + "istio.io/istio/pkg/mcp/internal/test" + "istio.io/istio/pkg/mcp/testing/monitoring" +) + +func init() { + scope.SetOutputLevel(log.DebugLevel) +} + +var ( + errSend = errors.New("send error") + errRecv = errors.New("recv error") +) + +type sourceTestHarness struct { + resourcesChan chan *mcp.Resources + requestsChan chan *mcp.RequestResources + watchesCreatedChan map[string]chan struct{} + recvErrorChan chan error + + t *testing.T + + mu sync.Mutex + openErr error + sendErr error + recvErr error + ctx context.Context + nonce int + closeWatch bool + watchResponses map[string]*WatchResponse + pushResponseFuncs map[string][]PushResponseFunc + watchCreated map[string]int +} + +func newSourceTestHarness(t *testing.T) *sourceTestHarness { + s := &sourceTestHarness{ + ctx: context.Background(), + t: t, + watchCreated: make(map[string]int), + watchesCreatedChan: make(map[string]chan struct{}), + pushResponseFuncs: make(map[string][]PushResponseFunc), + watchResponses: make(map[string]*WatchResponse), + } + for _, typeURL := range test.SupportedCollections { + s.watchesCreatedChan[typeURL] = make(chan struct{}, 10) + } + s.resetStream() + return s +} + +func (h *sourceTestHarness) resetStream() { + h.resourcesChan = make(chan *mcp.Resources, 10) + h.requestsChan = make(chan *mcp.RequestResources, 10) + h.recvErrorChan = make(chan error, 10) + h.nonce = 0 +} + +func (h *sourceTestHarness) Send(resources *mcp.Resources) error { + // check that nonce is monotonically incrementing + h.nonce++ + if resources.Nonce != fmt.Sprintf("%d", h.nonce) { + h.t.Errorf("nonce => got %q, want %d", resources.Nonce, h.nonce) + } + // check that type URL matches in resources + if resources.Collection == "" { + h.t.Error("TypeURL => got none, want non-empty") + } + + if h.sendErr != nil { + return h.sendErr + } + + h.resourcesChan <- resources + return nil +} + +func (h *sourceTestHarness) Recv() (*mcp.RequestResources, error) { + h.mu.Lock() + err := h.recvErr + h.mu.Unlock() + if err != nil { + return nil, err + } + + select { + case err := <-h.recvErrorChan: + return nil, err + case req, more := <-h.requestsChan: + if !more { + return nil, io.EOF + } + return req, nil + } +} + +func (h *sourceTestHarness) Context() context.Context { + return h.ctx +} + +func (h *sourceTestHarness) setContext(ctx context.Context) { + h.ctx = ctx +} + +func (h *sourceTestHarness) setOpenError(err error) { + h.mu.Lock() + defer h.mu.Unlock() + h.openErr = err +} + +func (h *sourceTestHarness) openError() error { + h.mu.Lock() + defer h.mu.Unlock() + return h.openErr +} + +func (h *sourceTestHarness) setSendError(err error) { + h.mu.Lock() + defer h.mu.Unlock() + h.sendErr = err +} + +func (h *sourceTestHarness) setRecvError(err error) { + if err != nil { + h.recvErrorChan <- err + } + + h.mu.Lock() + defer h.mu.Unlock() + h.recvErr = err +} + +func (h *sourceTestHarness) setCloseWatch(close bool) { + h.mu.Lock() + defer h.mu.Unlock() + h.closeWatch = close +} + +func (h *sourceTestHarness) watchesCreated(typeURL string) int { + h.mu.Lock() + defer h.mu.Unlock() + return h.watchCreated[typeURL] +} + +func (h *sourceTestHarness) Watch(req *Request, pushResponse PushResponseFunc) CancelWatchFunc { + h.mu.Lock() + defer h.mu.Unlock() + + h.watchCreated[req.Collection]++ + + if rsp, ok := h.watchResponses[req.Collection]; ok { + delete(h.watchResponses, req.Collection) + rsp.Collection = req.Collection + pushResponse(rsp) + return nil + } else if h.closeWatch { + pushResponse(nil) + return nil + } else { + // save open watch channel for later + h.pushResponseFuncs[req.Collection] = append(h.pushResponseFuncs[req.Collection], pushResponse) + } + + if ch, ok := h.watchesCreatedChan[req.Collection]; ok { + ch <- struct{}{} + } + + return func() { + h.mu.Lock() + defer h.mu.Unlock() + delete(h.watchResponses, req.Collection) + } +} + +func (h *sourceTestHarness) injectWatchResponse(response *WatchResponse) { + h.mu.Lock() + defer h.mu.Unlock() + + collection := response.Collection + + if watches, ok := h.pushResponseFuncs[collection]; ok { + for _, watch := range watches { + watch(response) + } + } else { + h.watchResponses[collection] = response + } +} + +func verifySentResources(t *testing.T, h *sourceTestHarness, want *mcp.Resources) { + t.Helper() + + select { + case got := <-h.resourcesChan: + if diff := cmp.Diff(got, want); diff != "" { + t.Fatalf("wrong set of responses: \n got %v \nwant %v \n diff %v", got, want, diff) + } + case <-time.After(time.Second): + t.Fatalf("timeout waiting for response") + } +} + +func makeWatchResponse(collection string, version string, fakes ...*test.Fake) *WatchResponse { // nolint: unparam + r := &WatchResponse{ + Collection: collection, + Version: version, + } + for _, fake := range fakes { + r.Resources = append(r.Resources, fake.Resource) + } + return r +} + +func makeSourceUnderTest(w Watcher) *Source { + options := &Options{ + Watcher: w, + CollectionsOptions: CollectionOptionsFromSlice(test.SupportedCollections), + Reporter: monitoring.NewInMemoryStatsContext(), + } + return New(options) +} + +func TestSourceACKAddUpdateDelete(t *testing.T) { + h := newSourceTestHarness(t) + h.setContext(peer.NewContext(context.Background(), &peer.Peer{ + Addr: &net.IPAddr{IP: net.IPv4(192, 168, 1, 1)}, + })) + + s := makeSourceUnderTest(h) + var wg sync.WaitGroup + wg.Add(1) + go func() { + if err := s.processStream(h); err != nil { + t.Errorf("Stream() => got %v, want no error", err) + } + wg.Done() + }() + + defer func() { + h.setRecvError(io.EOF) + wg.Wait() + }() + + steps := []struct { + name string + request *mcp.RequestResources + wantResources *mcp.Resources + inject *WatchResponse + }{ + { + name: "ack add A0", + inject: makeWatchResponse(test.FakeType0Collection, "1", test.Type0A[0]), + wantResources: test.MakeResources(test.FakeType0Collection, "1", "1", nil, test.Type0A[0]), + request: test.MakeRequest(test.FakeType0Collection, "1", codes.OK), + }, + { + name: "nack update A0", + inject: makeWatchResponse(test.FakeType0Collection, "2", test.Type0A[1]), + wantResources: test.MakeResources(test.FakeType0Collection, "2", "2", nil, test.Type0A[1]), + request: test.MakeRequest(test.FakeType0Collection, "2", codes.InvalidArgument), + }, + { + name: "ack update A0", + inject: makeWatchResponse(test.FakeType0Collection, "3", test.Type0A[1]), + wantResources: test.MakeResources(test.FakeType0Collection, "3", "3", nil, test.Type0A[1]), + request: test.MakeRequest(test.FakeType0Collection, "3", codes.OK), + }, + { + name: "delete A0", + inject: makeWatchResponse(test.FakeType0Collection, "4"), + wantResources: test.MakeResources(test.FakeType0Collection, "4", "4", nil), + request: test.MakeRequest(test.FakeType0Collection, "4", codes.OK), + }, + { + name: "ack add A1 and A2", + inject: makeWatchResponse(test.FakeType0Collection, "5", test.Type1A[0], test.Type2A[0]), + wantResources: test.MakeResources(test.FakeType0Collection, "5", "5", nil, test.Type1A[0], test.Type2A[0]), + request: test.MakeRequest(test.FakeType0Collection, "5", codes.OK), + }, + { + name: "ack add0, update A1, keep A2", + inject: makeWatchResponse(test.FakeType0Collection, "6", test.Type0A[2], test.Type1A[1], test.Type2A[0]), + wantResources: test.MakeResources(test.FakeType0Collection, "6", "6", nil, test.Type0A[2], test.Type1A[1], test.Type2A[0]), + request: test.MakeRequest(test.FakeType0Collection, "6", codes.OK), + }, + } + + // initial watch + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "", codes.OK) + + for i, step := range steps { + passed := t.Run(fmt.Sprintf("[%v] %s", i, step.name), func(tt *testing.T) { + h.injectWatchResponse(step.inject) + verifySentResources(tt, h, step.wantResources) + h.requestsChan <- step.request + }) + if !passed { + t.Fatal("subtest failed") + } + } + +} + +func TestSourceWatchBeforeResponsesAvailable(t *testing.T) { + h := newSourceTestHarness(t) + + s := makeSourceUnderTest(h) + var wg sync.WaitGroup + wg.Add(1) + go func() { + if err := s.processStream(h); err != nil { + t.Errorf("Stream() => got %v, want no error", err) + } + wg.Done() + }() + + // initial watch + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "", codes.OK) + + // wait for watch to be created before injecting the response + <-h.watchesCreatedChan[test.FakeType0Collection] + + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType0Collection, + Version: "1", + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) + + verifySentResources(t, h, test.MakeResources(test.FakeType0Collection, "1", "1", nil, test.Type0A[0])) + + h.setRecvError(io.EOF) + wg.Wait() +} + +func TestSourceWatchClosed(t *testing.T) { + h := newSourceTestHarness(t) + h.setCloseWatch(true) + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "", codes.OK) + + // check that response fails since watch gets closed + s := makeSourceUnderTest(h) + if err := s.processStream(h); err == nil { + t.Error("Stream() => got no error, want watch failed") + } +} + +func TestSourceSendError(t *testing.T) { + h := newSourceTestHarness(t) + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType0Collection, + Version: "1", + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) + + h.setSendError(errSend) + // initial watch + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "", codes.OK) + + // check that response fails since watch gets closed + s := makeSourceUnderTest(h) + if err := s.processStream(h); err == nil { + t.Error("Stream() => got no error, want send error") + } +} + +func TestSourceReceiveError(t *testing.T) { + h := newSourceTestHarness(t) + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType0Collection, + Version: "1", + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) + + h.setRecvError(status.Error(codes.Internal, "internal receive error")) + // initial watch + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "", codes.OK) + + options := &Options{ + Watcher: h, + CollectionsOptions: CollectionOptionsFromSlice(test.SupportedCollections), + Reporter: monitoring.NewInMemoryStatsContext(), + } + // check that response fails since watch gets closed + s := New(options) + if err := s.processStream(h); err == nil { + t.Error("Stream() => got no error, want send error") + } +} + +func TestSourceUnsupportedTypeError(t *testing.T) { + h := newSourceTestHarness(t) + h.injectWatchResponse(&WatchResponse{ + Collection: "unsupportedType", + Version: "1", + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) + + // initial watch with bad type + h.requestsChan <- test.MakeRequest("unsupportedtype", "", codes.OK) + + // check that response fails since watch gets closed + s := makeSourceUnderTest(h) + if err := s.processStream(h); err == nil { + t.Error("Stream() => got no error, want send error") + } +} + +func TestSourceStaleNonce(t *testing.T) { + h := newSourceTestHarness(t) + + s := makeSourceUnderTest(h) + var wg sync.WaitGroup + wg.Add(1) + go func() { + if err := s.processStream(h); err != nil { + t.Errorf("StreamAggregatedResources() => got %v, want no error", err) + } + wg.Done() + }() + + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType0Collection, + Version: "1", + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) + + // initial watch + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "", codes.OK) + + verifySentResources(t, h, test.MakeResources(test.FakeType0Collection, "1", "1", nil, test.Type0A[0])) + + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType0Collection, + Version: "2", + Resources: []*mcp.Resource{test.Type0A[1].Resource}, + }) + + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "stale0", codes.OK) // stale ACK + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "stale1", codes.InvalidArgument) // stale NACK + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "1", codes.OK) // valid ACK + + verifySentResources(t, h, test.MakeResources(test.FakeType0Collection, "2", "2", nil, test.Type0A[1])) + + h.setRecvError(io.EOF) + wg.Wait() + + want := 2 + if got := h.watchesCreated(test.FakeType0Collection); got != want { + t.Fatalf("Wrong number of watches created: got %v want %v", got, want) + } +} + +func TestSourceConcurrentRequestsForMultipleTypes(t *testing.T) { + h := newSourceTestHarness(t) + + s := makeSourceUnderTest(h) + var wg sync.WaitGroup + wg.Add(1) + go func() { + if err := s.processStream(h); err != nil { + t.Errorf("StreamAggregatedResources() => got %v, want no error", err) + } + wg.Done() + }() + + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType0Collection, + Version: "1", + Resources: []*mcp.Resource{test.Type0A[0].Resource}, + }) + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType1Collection, + Version: "2", + Resources: []*mcp.Resource{test.Type1A[0].Resource}, + }) + h.injectWatchResponse(&WatchResponse{ + Collection: test.FakeType2Collection, + Version: "3", + Resources: []*mcp.Resource{test.Type2A[0].Resource}, + }) + + // initial watch + h.requestsChan <- test.MakeRequest(test.FakeType0Collection, "", codes.OK) + h.requestsChan <- test.MakeRequest(test.FakeType1Collection, "", codes.OK) + h.requestsChan <- test.MakeRequest(test.FakeType2Collection, "", codes.OK) + + verifySentResourcesMultipleTypes(t, h, + map[string]*mcp.Resources{ + test.FakeType0Collection: test.MakeResources(test.FakeType0Collection, "1", "1", nil, test.Type0A[0]), + test.FakeType1Collection: test.MakeResources(test.FakeType1Collection, "2", "2", nil, test.Type1A[0]), + test.FakeType2Collection: test.MakeResources(test.FakeType2Collection, "3", "3", nil, test.Type2A[0]), + }, + ) + + h.setRecvError(io.EOF) + wg.Wait() +} + +func TestCalculateDelta(t *testing.T) { + var ( + r0 = test.Type0A[0].Resource + r0Updated = test.Type0A[1].Resource + r1 = test.Type0B[0].Resource + r2 = test.Type0C[0].Resource + ) + + cases := []struct { + name string + current []*mcp.Resource + acked map[string]string + wantAdded []mcp.Resource + wantRemoved []string + }{ + { + name: "empty acked set", + current: []*mcp.Resource{r0, r1, r2}, + acked: map[string]string{}, + wantAdded: []mcp.Resource{*r0, *r1, *r2}, + }, + { + name: "incremental add", + current: []*mcp.Resource{r0, r1, r2}, + acked: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + }, + wantAdded: []mcp.Resource{*r1, *r2}, + }, + { + name: "no-op push", + current: []*mcp.Resource{r0, r1, r2}, + acked: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + wantAdded: []mcp.Resource{}, + }, + { + name: "update existing", + current: []*mcp.Resource{r0Updated, r1, r2}, + acked: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + wantAdded: []mcp.Resource{*r0Updated}, + }, + { + name: "delete one", + current: []*mcp.Resource{r1, r2}, + acked: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + wantAdded: []mcp.Resource{}, + wantRemoved: []string{r0.Metadata.Name}, + }, + { + name: "delete all", + current: []*mcp.Resource{}, + acked: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, + r1.Metadata.Name: r1.Metadata.Version, + r2.Metadata.Name: r2.Metadata.Version, + }, + wantAdded: []mcp.Resource{}, + wantRemoved: []string{r0.Metadata.Name, r1.Metadata.Name, r2.Metadata.Name}, + }, + { + name: "add, update, and delete in the same push", + current: []*mcp.Resource{r0Updated, r2}, + acked: map[string]string{ + r0.Metadata.Name: r0.Metadata.Version, // update + r1.Metadata.Name: r1.Metadata.Version, // remove + }, + wantAdded: []mcp.Resource{*r0Updated, *r2}, + wantRemoved: []string{r1.Metadata.Name}, + }, + } + + sortAdded := cmp.Transformer("SortAdded", func(in []mcp.Resource) []mcp.Resource { + out := append([]mcp.Resource(nil), in...) // copy + sort.Slice(out, func(i, j int) bool { return out[i].Metadata.Name < out[j].Metadata.Name }) + return out + }) + + sortRemoved := cmp.Transformer("SortRemoved", func(in []string) []string { + out := append([]string(nil), in...) // copy + sort.Strings(out) + return out + }) + + for i, c := range cases { + t.Run(fmt.Sprintf("[%v] %v", i, c.name), func(tt *testing.T) { + gotAdded, gotRemoved := calculateDelta(c.current, c.acked) + + if diff := cmp.Diff(gotAdded, c.wantAdded, sortAdded); diff != "" { + tt.Errorf("wrong set of added resources: \n got %v \nwant %v\ndiff %v", + gotAdded, c.wantAdded, diff) + } + + if diff := cmp.Diff(gotRemoved, c.wantRemoved, sortRemoved); diff != "" { + tt.Errorf("wrong set of removed resources: \n got %v \nwant %v\ndiff %v", + gotRemoved, c.wantRemoved, diff) + } + }) + } +} diff --git a/pkg/test/framework/api/components/galley.go b/pkg/test/framework/api/components/galley.go index eddff86ee9d2..bb8d2f7419b5 100644 --- a/pkg/test/framework/api/components/galley.go +++ b/pkg/test/framework/api/components/galley.go @@ -36,9 +36,6 @@ type Galley interface { // WaitForSnapshot waits until the given snapshot is observed for the given type URL. WaitForSnapshot(collection string, snapshot ...map[string]interface{}) error - - // GetGalleyAddress returns the galley mcp server address - GetGalleyAddress() string } // GetGalley from the repository diff --git a/pkg/test/framework/api/descriptors/descriptors.go b/pkg/test/framework/api/descriptors/descriptors.go index e0e5ef4e7734..b10f60c37105 100644 --- a/pkg/test/framework/api/descriptors/descriptors.go +++ b/pkg/test/framework/api/descriptors/descriptors.go @@ -41,7 +41,6 @@ var ( Requires: []component.Requirement{ &ids.Mixer, &ids.Environment, - &ids.Galley, }, } @@ -51,7 +50,6 @@ var ( IsSystemComponent: true, Requires: []component.Requirement{ &ids.Environment, - &ids.Galley, }, } diff --git a/pkg/test/framework/runtime/components/galley/native.go b/pkg/test/framework/runtime/components/galley/native.go index 0b220850e855..ea47adb98cd9 100644 --- a/pkg/test/framework/runtime/components/galley/native.go +++ b/pkg/test/framework/runtime/components/galley/native.go @@ -19,7 +19,6 @@ import ( "io/ioutil" "os" "path" - "strings" "io" "time" @@ -126,16 +125,6 @@ func (c *nativeComponent) ApplyConfig(yamlText string) (err error) { return } -// GetGalleyAddress returns the galley mcp server address -func (c *nativeComponent) GetGalleyAddress() string { - idx := strings.Index(c.client.address, "://") - if idx < 0 { - return fmt.Sprintf("mcp://%s", c.client.address) - } - return fmt.Sprintf("mcp://%s", c.client.address[idx+3:]) - -} - // WaitForSnapshot implements Galley.WaitForSnapshot. func (c *nativeComponent) WaitForSnapshot(collection string, snapshot ...map[string]interface{}) error { return c.client.waitForSnapshot(collection, snapshot) @@ -187,8 +176,7 @@ func (c *nativeComponent) restart() error { a.DisableResourceReadyCheck = true a.ConfigPath = c.configDir a.MeshConfigFile = c.meshConfigFile - // To prevent ctrlZ port collision between galley/pilot&mixer - a.IntrospectionOptions.Port = 9877 + a.ExcludedResourceKinds = make([]string, 0) s, err := server.New(a) if err != nil { scopes.Framework.Errorf("Error starting Galley: %v", err) @@ -218,7 +206,7 @@ func (c *nativeComponent) Close() (err error) { c.client = nil } if c.server != nil { - err := multierror.Append(c.server.ForceClose()).ErrorOrNil() + err := multierror.Append(c.server.Close()).ErrorOrNil() if err != nil { scopes.Framework.Infof("Error while Galley server close during reset: %v", err) } diff --git a/pkg/test/framework/runtime/components/mixer/native.go b/pkg/test/framework/runtime/components/mixer/native.go index 94b0528e0531..7cfc4b000bb7 100644 --- a/pkg/test/framework/runtime/components/mixer/native.go +++ b/pkg/test/framework/runtime/components/mixer/native.go @@ -15,10 +15,12 @@ package mixer import ( - "errors" "fmt" "io" + "io/ioutil" "net" + "os" + "path" "testing" "time" @@ -36,7 +38,6 @@ import ( "istio.io/istio/pkg/test/framework/api/components" "istio.io/istio/pkg/test/framework/api/context" "istio.io/istio/pkg/test/framework/api/descriptors" - "istio.io/istio/pkg/test/framework/api/ids" "istio.io/istio/pkg/test/framework/api/lifecycle" "istio.io/istio/pkg/test/framework/runtime/api" "istio.io/istio/pkg/test/framework/runtime/components/environment/native" @@ -60,8 +61,7 @@ func NewNativeComponent() (api.Component, error) { type nativeComponent struct { *client - scope lifecycle.Scope - galley components.Galley + scope lifecycle.Scope } func (c *nativeComponent) Descriptor() component.Descriptor { @@ -80,11 +80,13 @@ func (c *nativeComponent) Configure(t testing.TB, _ lifecycle.Scope, cfg string) t.Fatalf("Error expanding configuration template: %v", err) } - if err := c.galley.ApplyConfig(cfg); err != nil { + file := path.Join(c.workdir, "config.yaml") + if err := ioutil.WriteFile(file, []byte(cfg), os.ModePerm); err != nil { t.Fatal(err) } - if err := c.galley.ApplyConfig(c.attributeManifest); err != nil { + file = path.Join(c.workdir, "attributemanifest.yaml") + if err := ioutil.WriteFile(file, []byte(c.attributeManifest), os.ModePerm); err != nil { t.Fatal(err) } @@ -130,16 +132,7 @@ func (c *nativeComponent) Start(ctx context.Instance, scope lifecycle.Scope) (er c.client.args = server.DefaultArgs() c.client.args.APIPort = 0 c.client.args.MonitoringPort = 0 - g := ctx.GetComponent(ids.Galley) - if g == nil { - return fmt.Errorf("missing dependency: %s", ids.Galley) - } - galley, ok := g.(components.Galley) - if !ok { - return errors.New("galley does not support in-process interface") - } - c.galley = galley - c.client.args.ConfigStoreURL = galley.GetGalleyAddress() + c.client.args.ConfigStoreURL = fmt.Sprintf("fs://%s", c.client.workdir) c.client.args.Templates = generatedTmplRepo.SupportedTmplInfo c.client.args.Adapters = adapter.Inventory() @@ -192,9 +185,6 @@ func (c *nativeComponent) Start(ctx context.Instance, scope lifecycle.Scope) (er } func (c *nativeComponent) Close() (err error) { - if c.galley != nil { - c.galley = nil - } if c.client != nil { err = multierror.Append(err, c.client.Close()).ErrorOrNil() c.client = nil diff --git a/prow/upgrade-tests-1.0.1.sh b/prow/upgrade-tests-1.0.1.sh index f8c96015956b..0c22573e3910 100755 --- a/prow/upgrade-tests-1.0.1.sh +++ b/prow/upgrade-tests-1.0.1.sh @@ -21,6 +21,12 @@ set -u # Print commands set -x +# Local run example: +# UPGRADE_TEST_LOCAL="true" HUB=gcr.io/istio-release \ +# ISTIO_REL_URL=https://storage.googleapis.com/istio-release-pipeline-data/daily-build/master-20190107-09-15 \ +# TAG=master-20190107-09-15 \ +# prow/upgrade-tests-1.0.1.sh + # Set up inputs needed by test_upgrade.sh export SOURCE_VERSION=1.0.1 export SOURCE_RELEASE_PATH="https://github.com/istio/istio/releases/download/${SOURCE_VERSION}" diff --git a/prow/upgrade-tests-1.0.2.sh b/prow/upgrade-tests-1.0.2.sh index 7352bba8d04a..30fcac0e77a8 100755 --- a/prow/upgrade-tests-1.0.2.sh +++ b/prow/upgrade-tests-1.0.2.sh @@ -21,6 +21,12 @@ set -u # Print commands set -x +# Local run example: +# UPGRADE_TEST_LOCAL="true" HUB=gcr.io/istio-release \ +# ISTIO_REL_URL=https://storage.googleapis.com/istio-release-pipeline-data/daily-build/master-20190107-09-15 \ +# TAG=master-20190107-09-15 \ +# prow/upgrade-tests-1.0.2.sh + # Set up inputs needed by test_upgrade.sh export SOURCE_VERSION=1.0.2 export SOURCE_RELEASE_PATH="https://github.com/istio/istio/releases/download/${SOURCE_VERSION}" diff --git a/prow/upgrade-tests.sh b/prow/upgrade-tests.sh index 75bda36f468d..cb05f28e686a 100755 --- a/prow/upgrade-tests.sh +++ b/prow/upgrade-tests.sh @@ -24,6 +24,8 @@ set -x WD=$(dirname "$0") WD=$(cd "$WD"; pwd) ROOT=$(dirname "$WD") +# Set to any non-empty value to use kubectl configured cluster instead of mason provisioned cluster. +UPGRADE_TEST_LOCAL="${UPGRADE_TEST_LOCAL:-}" # This is a script to download release artifacts from monthly or daily release # location and kick off upgrade/downgrade tests. @@ -45,12 +47,16 @@ download_untar_istio_release "${TARGET_RELEASE_PATH}" "${TARGET_VERSION}" # Check https://github.com/istio/test-infra/blob/master/boskos/configs.yaml # for existing resources types -export RESOURCE_TYPE="${RESOURCE_TYPE:-gke-e2e-test}" -export OWNER='upgrade-tests' -export USE_MASON_RESOURCE="${USE_MASON_RESOURCE:-True}" -export CLEAN_CLUSTERS="${CLEAN_CLUSTERS:-True}" +if [ "${UPGRADE_TEST_LOCAL}" = "" ]; then + export RESOURCE_TYPE="${RESOURCE_TYPE:-gke-e2e-test}" + export OWNER='upgrade-tests' + export USE_MASON_RESOURCE="${USE_MASON_RESOURCE:-True}" + export CLEAN_CLUSTERS="${CLEAN_CLUSTERS:-True}" -setup_e2e_cluster + setup_e2e_cluster +else + echo "Running against cluster that kubectl is configured for." +fi # Install fortio which is needed by the upgrade test. @@ -58,5 +64,5 @@ go get fortio.org/fortio # Kick off tests -"${ROOT}/tests/upgrade/test_crossgrade.sh" --from_hub="${HUB}" --from_tag="${SOURCE_VERSION}" --from_path="istio-${SOURCE_VERSION}" --to_hub="${HUB}" --to_tag="${TARGET_VERSION}" --to_path="istio-${TARGET_VERSION}" +"${ROOT}/tests/upgrade/test_crossgrade.sh" --from_hub="${HUB}" --from_tag="${SOURCE_VERSION}" --from_path="istio-${SOURCE_VERSION}" --to_hub="${HUB}" --to_tag="${TARGET_VERSION}" --to_path="istio-${TARGET_VERSION}" --cloud="GKE" diff --git a/samples/bookinfo/policy/mixer-rule-additional-telemetry.yaml b/samples/bookinfo/policy/mixer-rule-additional-telemetry.yaml index ef7cd12384dc..0ef6853a0a95 100644 --- a/samples/bookinfo/policy/mixer-rule-additional-telemetry.yaml +++ b/samples/bookinfo/policy/mixer-rule-additional-telemetry.yaml @@ -1,10 +1,45 @@ +# Configuration for metric instances +apiVersion: "config.istio.io/v1alpha2" +kind: metric +metadata: + name: doublerequestcount + namespace: istio-system +spec: + value: "2" # count each request twice + dimensions: + reporter: conditional((context.reporter.kind | "inbound") == "outbound", "client", "server") + source: source.workload.name | "unknown" + destination: destination.workload.name | "unknown" + message: '"twice the fun!"' + monitored_resource_type: '"UNSPECIFIED"' +--- +# Configuration for a Prometheus handler +apiVersion: "config.istio.io/v1alpha2" +kind: handler +metadata: + name: prometheusdouble + namespace: istio-system +spec: + compiledAdapter: prometheus + params: + metrics: + - name: double_request_count # Prometheus metric name + instance_name: doublerequestcount.metric.istio-system # Mixer instance name (fully-qualified) + kind: COUNTER + label_names: + - reporter + - source + - destination + - message +--- +# Rule to send metric instances to a Prometheus handler apiVersion: "config.istio.io/v1alpha2" kind: rule metadata: - name: prommetricsresponse + name: doublepromtwo namespace: istio-system spec: actions: - - handler: handler.prometheus.istio-system + - handler: prometheusdouble instances: - - responsesize.metric.istio-system + - doublerequestcount.metric diff --git a/samples/bookinfo/policy/mixer-rule-productpage-ratelimit.yaml b/samples/bookinfo/policy/mixer-rule-productpage-ratelimit.yaml index ffb33a854996..8be170a53722 100644 --- a/samples/bookinfo/policy/mixer-rule-productpage-ratelimit.yaml +++ b/samples/bookinfo/policy/mixer-rule-productpage-ratelimit.yaml @@ -39,7 +39,7 @@ metadata: spec: dimensions: source: request.headers["x-forwarded-for"] | "unknown" - destination: destination.labels["app"] | destination.service | "unknown" + destination: destination.labels["app"] | destination.service.name | "unknown" destinationVersion: destination.labels["version"] | "unknown" --- apiVersion: config.istio.io/v1alpha2 diff --git a/samples/bookinfo/policy/mixer-rule-ratings-ratelimit.yaml b/samples/bookinfo/policy/mixer-rule-ratings-ratelimit.yaml index 6b589acfb81a..eb1960a39eb1 100644 --- a/samples/bookinfo/policy/mixer-rule-ratings-ratelimit.yaml +++ b/samples/bookinfo/policy/mixer-rule-ratings-ratelimit.yaml @@ -35,7 +35,7 @@ spec: dimensions: source: source.labels["app"] | source.service | "unknown" sourceVersion: source.labels["version"] | "unknown" - destination: destination.labels["app"] | destination.service | "unknown" + destination: destination.labels["app"] | destination.service.name | "unknown" destinationVersion: destination.labels["version"] | "unknown" --- diff --git a/security/cmd/istio_ca/main.go b/security/cmd/istio_ca/main.go index d0474f27de79..44de63c6fcf4 100644 --- a/security/cmd/istio_ca/main.go +++ b/security/cmd/istio_ca/main.go @@ -24,13 +24,11 @@ import ( "github.com/spf13/cobra" "github.com/spf13/cobra/doc" - "k8s.io/client-go/kubernetes" corev1 "k8s.io/client-go/kubernetes/typed/core/v1" - "k8s.io/client-go/rest" - "k8s.io/client-go/tools/clientcmd" "istio.io/istio/pkg/collateral" "istio.io/istio/pkg/ctrlz" + kubelib "istio.io/istio/pkg/kube" "istio.io/istio/pkg/log" "istio.io/istio/pkg/probe" "istio.io/istio/pkg/version" @@ -291,7 +289,10 @@ func runCA() { } } - cs := createClientset() + cs, err := kubelib.CreateClientset(opts.kubeConfigFile, "") + if err != nil { + fatalf("Could not create k8s clientset: %v", err) + } ca := createCA(cs.CoreV1()) // For workloads in K8s, we apply the configured workload cert TTL. sc, err := controller.NewSecretController(ca, @@ -388,15 +389,6 @@ func runCA() { } } -func createClientset() *kubernetes.Clientset { - c := generateConfig() - cs, err := kubernetes.NewForConfig(c) - if err != nil { - fatalf("Failed to create a clientset (error: %s)", err) - } - return cs -} - func createCA(client corev1.CoreV1Interface) *ca.IstioCA { var caOpts *ca.IstioCAOptions var err error @@ -441,14 +433,6 @@ func createCA(client corev1.CoreV1Interface) *ca.IstioCA { return istioCA } -func generateConfig() *rest.Config { - c, err := clientcmd.BuildConfigFromFlags("", opts.kubeConfigFile) - if err != nil { - fatalf("Failed to create a config (error: %s)", err) - } - return c -} - func verifyCommandLineOptions() { if opts.selfSignedCA { return diff --git a/security/pkg/nodeagent/cache/secretcache.go b/security/pkg/nodeagent/cache/secretcache.go index a977025b4e3d..15c056ff91fe 100644 --- a/security/pkg/nodeagent/cache/secretcache.go +++ b/security/pkg/nodeagent/cache/secretcache.go @@ -98,6 +98,9 @@ type SecretManager interface { // SecretExist checks if secret already existed. SecretExist(proxyID, resourceName, token, version string) bool + + // DeleteSecret deletes a secret by its key from cache. + DeleteSecret(proxyID, resourceName string) } // ConnKey is the key of one SDS connection. @@ -197,7 +200,7 @@ func (sc *SecretCache) GenerateSecret(ctx context.Context, proxyID, resourceName if sc.rootCert == nil { log.Errorf("Failed to get root cert for proxy %q", proxyID) - return nil, errors.New("faied to get root cert") + return nil, errors.New("failed to get root cert") } @@ -213,6 +216,15 @@ func (sc *SecretCache) GenerateSecret(ctx context.Context, proxyID, resourceName return ns, nil } +// DeleteSecret deletes a secret by its key from cache. +func (sc *SecretCache) DeleteSecret(proxyID, resourceName string) { + key := ConnKey{ + ProxyID: proxyID, + ResourceName: resourceName, + } + sc.secrets.Delete(key) +} + // DeleteK8sSecret deletes all entries that match secretName. This is called when a K8s secret // for ingress gateway is deleted. func (sc *SecretCache) DeleteK8sSecret(secretName string) { diff --git a/security/pkg/nodeagent/cache/secretcache_test.go b/security/pkg/nodeagent/cache/secretcache_test.go index df304da9aaf9..99119b416bb3 100644 --- a/security/pkg/nodeagent/cache/secretcache_test.go +++ b/security/pkg/nodeagent/cache/secretcache_test.go @@ -168,7 +168,8 @@ func TestWorkloadAgentRefreshSecret(t *testing.T) { atomic.StoreUint32(&sc.skipTokenExpireCheck, 1) }() - _, err := sc.GenerateSecret(context.Background(), "proxy1-id", testResourceName, "jwtToken1") + testProxyID := "proxy1-id" + _, err := sc.GenerateSecret(context.Background(), testProxyID, testResourceName, "jwtToken1") if err != nil { t.Fatalf("Failed to get secrets: %v", err) } @@ -189,6 +190,19 @@ func TestWorkloadAgentRefreshSecret(t *testing.T) { if retries == 5 { t.Errorf("Cached secret failed to get refreshed, %d", atomic.LoadUint64(&sc.secretChangedCount)) } + + key := ConnKey{ + ProxyID: testProxyID, + ResourceName: testResourceName, + } + if _, found := sc.secrets.Load(key); !found { + t.Errorf("Failed to find secret for %+v from cache", key) + } + + sc.DeleteSecret(testProxyID, testResourceName) + if _, found := sc.secrets.Load(key); found { + t.Errorf("Found deleted secret for %+v from cache", key) + } } // TestGatewayAgentGenerateSecret verifies that ingress gateway agent manages secret cache correctly. diff --git a/security/pkg/nodeagent/caclient/client.go b/security/pkg/nodeagent/caclient/client.go index d66a9efd2fce..f9ef9403a666 100644 --- a/security/pkg/nodeagent/caclient/client.go +++ b/security/pkg/nodeagent/caclient/client.go @@ -20,9 +20,7 @@ import ( "strings" "time" - "k8s.io/client-go/kubernetes" - restclient "k8s.io/client-go/rest" - + "istio.io/istio/pkg/kube" "istio.io/istio/pkg/log" "istio.io/istio/security/pkg/k8s/configmap" caClientInterface "istio.io/istio/security/pkg/nodeagent/caclient/interface" @@ -54,9 +52,9 @@ func NewCAClient(endpoint, CAProviderName string, tlsFlag bool, tlsRootCert []by case vaultCAName: return vault.NewVaultClient(tlsFlag, tlsRootCert, vaultAddr, vaultRole, vaultAuthPath, vaultSignCsrPath) case citadelName: - cs, err := createClientSet() + cs, err := kube.CreateClientset("", "") if err != nil { - return nil, err + return nil, fmt.Errorf("could not create k8s clientset: %v", err) } controller := configmap.NewController(ns, cs.CoreV1()) rootCert, err := getCATLSRootCertFromConfigMap(controller, retryInterval, maxRetries) @@ -92,16 +90,3 @@ func getCATLSRootCertFromConfigMap(controller configMap, interval time.Duration, } return certDecoded, nil } - -func createClientSet() (*kubernetes.Clientset, error) { - // Get the kubeconfig from the K8s cluster the node agent is running in. - kubeconfig, err := restclient.InClusterConfig() - if err != nil { - return nil, fmt.Errorf("cannot load kubeconfig: %v", err) - } - clientSet, err := kubernetes.NewForConfig(kubeconfig) - if err != nil { - return nil, fmt.Errorf("failed to create a clientset (error: %v)", err) - } - return clientSet, nil -} diff --git a/security/pkg/nodeagent/caclient/providers/google/client.go b/security/pkg/nodeagent/caclient/providers/google/client.go index 5f509c32598c..c5d587b043d1 100644 --- a/security/pkg/nodeagent/caclient/providers/google/client.go +++ b/security/pkg/nodeagent/caclient/providers/google/client.go @@ -88,7 +88,7 @@ func (cl *googleCAClient) CSRSign(ctx context.Context, csrPEM []byte, token stri } // If the token doesn't have "Bearer " prefix, add it. - if !strings.HasSuffix(token, bearerTokenPrefix) { + if !strings.HasPrefix(token, bearerTokenPrefix) { token = bearerTokenPrefix + token } diff --git a/security/pkg/nodeagent/sds/sdsservice.go b/security/pkg/nodeagent/sds/sdsservice.go index e250a4f39042..e7819bf981a7 100644 --- a/security/pkg/nodeagent/sds/sdsservice.go +++ b/security/pkg/nodeagent/sds/sdsservice.go @@ -71,6 +71,9 @@ type sdsConnection struct { // The ID of proxy from which the connection comes from. proxyID string + // The ResourceName of the SDS request. + ResourceName string + // Sending on this channel results in push. pushChannel chan *sdsEvent @@ -139,12 +142,13 @@ func (s *sdsservice) StreamSecrets(stream sds.SecretDiscoveryService_StreamSecre log.Debugf("Received discovery request from %q", discReq.Node.Id) - con.proxyID = discReq.Node.Id resourceName, err := parseDiscoveryRequest(discReq) if err != nil { log.Errorf("Failed to parse discovery request: %v", err) return err } + con.proxyID = discReq.Node.Id + con.ResourceName = resourceName // When nodeagent receives StreamSecrets request, if there is cached secret which matches // request's , then this request is a confirmation request. @@ -166,7 +170,12 @@ func (s *sdsservice) StreamSecrets(stream sds.SecretDiscoveryService_StreamSecre ResourceName: resourceName, } addConn(key, con) - defer removeConn(key) + defer func() { + removeConn(key) + // Remove the secret from cache, otherwise refresh job will process this item(if envoy fails to reconnect) + // and cause some confusing logs like 'fails to notify because connection isn't found'. + s.st.DeleteSecret(con.proxyID, con.ResourceName) + }() if err := pushSDS(con); err != nil { log.Errorf("SDS failed to push key/cert to proxy %q: %v", con.proxyID, err) diff --git a/security/pkg/nodeagent/sds/sdsservice_test.go b/security/pkg/nodeagent/sds/sdsservice_test.go index f9cb244026ed..6763eea35eff 100644 --- a/security/pkg/nodeagent/sds/sdsservice_test.go +++ b/security/pkg/nodeagent/sds/sdsservice_test.go @@ -18,6 +18,7 @@ import ( "net" "reflect" "strings" + "sync" "testing" "time" @@ -291,6 +292,14 @@ func TestStreamSecretsPush(t *testing.T) { verifySDSSResponse(t, resp, fakePushPrivateKey, fakePushCertificateChain) + key := cache.ConnKey{ + ProxyID: proxyID, + ResourceName: req.ResourceNames[0], + } + if _, found := st.secrets.Load(key); !found { + t.Errorf("Failed to find cached secret") + } + // Test push nil secret(indicates close the streaming connection) to proxy. if err = NotifyProxy(proxyID, req.ResourceNames[0], nil); err != nil { t.Errorf("failed to send push notificiation to proxy %q", proxyID) @@ -302,6 +311,9 @@ func TestStreamSecretsPush(t *testing.T) { if len(sdsClients) != 0 { t.Errorf("sdsClients, got %d, expected 0", len(sdsClients)) } + if _, found := st.secrets.Load(key); found { + t.Errorf("Found cached secret after stream close, expected the secret to not exist") + } } func verifySDSSResponse(t *testing.T, resp *api.DiscoveryResponse, expectedPrivateKey []byte, expectedCertChain []byte) { @@ -416,6 +428,7 @@ func setupConnection(socket string) (*grpc.ClientConn, error) { type mockSecretStore struct { checkToken bool + secrets sync.Map } func (ms *mockSecretStore) GenerateSecret(ctx context.Context, proxyID, resourceName, token string) (*model.SecretItem, error) { @@ -423,11 +436,17 @@ func (ms *mockSecretStore) GenerateSecret(ctx context.Context, proxyID, resource return nil, fmt.Errorf("unexpected token %q", token) } + key := cache.ConnKey{ + ProxyID: proxyID, + ResourceName: resourceName, + } if resourceName == testResourceName { + ms.secrets.Store(key, fakeSecret) return fakeSecret, nil } if resourceName == cache.RootCertReqResourceName { + ms.secrets.Store(key, fakeSecretRootCert) return fakeSecretRootCert, nil } @@ -437,3 +456,11 @@ func (ms *mockSecretStore) GenerateSecret(ctx context.Context, proxyID, resource func (*mockSecretStore) SecretExist(proxyID, spiffeID, token, version string) bool { return spiffeID == fakeSecret.ResourceName && token == fakeSecret.Token && version == fakeSecret.Version } + +func (ms *mockSecretStore) DeleteSecret(proxyID, resourceName string) { + key := cache.ConnKey{ + ProxyID: proxyID, + ResourceName: resourceName, + } + ms.secrets.Delete(key) +} diff --git a/security/pkg/nodeagent/secretfetcher/secretfetcher.go b/security/pkg/nodeagent/secretfetcher/secretfetcher.go index eea9696aadec..d5c66bb96cc0 100644 --- a/security/pkg/nodeagent/secretfetcher/secretfetcher.go +++ b/security/pkg/nodeagent/secretfetcher/secretfetcher.go @@ -21,24 +21,19 @@ import ( "sync" "time" - "istio.io/istio/pkg/log" - - ca "istio.io/istio/security/pkg/nodeagent/caclient" - - caClientInterface "istio.io/istio/security/pkg/nodeagent/caclient/interface" - - "istio.io/istio/security/pkg/nodeagent/model" - v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/kubernetes" + corev1 "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/tools/cache" - "k8s.io/client-go/tools/clientcmd" - corev1 "k8s.io/client-go/kubernetes/typed/core/v1" + "istio.io/istio/pkg/kube" + "istio.io/istio/pkg/log" + ca "istio.io/istio/security/pkg/nodeagent/caclient" + caClientInterface "istio.io/istio/security/pkg/nodeagent/caclient/interface" + "istio.io/istio/security/pkg/nodeagent/model" ) const ( @@ -88,19 +83,6 @@ func fatalf(template string, args ...interface{}) { os.Exit(-1) } -// createClientset creates kubernetes client to watch kubernetes secrets. -func createClientset() *kubernetes.Clientset { - c, err := clientcmd.BuildConfigFromFlags("", KubeConfigFile) - if err != nil { - fatalf("Failed to create a config for kubernetes client (error: %s)", err) - } - cs, err := kubernetes.NewForConfig(c) - if err != nil { - fatalf("Failed to create a clientset (error: %s)", err) - } - return cs -} - // NewSecretFetcher returns a pointer to a newly constructed SecretFetcher instance. func NewSecretFetcher(ingressGatewayAgent bool, endpoint, CAProviderName string, tlsFlag bool, tlsRootCert []byte, vaultAddr, vaultRole, vaultAuthPath, vaultSignCsrPath string) (*SecretFetcher, error) { @@ -108,7 +90,10 @@ func NewSecretFetcher(ingressGatewayAgent bool, endpoint, CAProviderName string, if ingressGatewayAgent { ret.UseCaClient = false - cs := createClientset() + cs, err := kube.CreateClientset("", "") + if err != nil { + fatalf("Could not create k8s clientset: %v", err) + } ret.Init(cs.CoreV1()) } else { caClient, err := ca.NewCAClient(endpoint, CAProviderName, tlsFlag, tlsRootCert, diff --git a/tests/e2e/framework/kubernetes.go b/tests/e2e/framework/kubernetes.go index c9602a5a1c7b..cd9f81645437 100644 --- a/tests/e2e/framework/kubernetes.go +++ b/tests/e2e/framework/kubernetes.go @@ -57,7 +57,7 @@ const ( istioEgressGatewayServiceName = "istio-egressgateway" defaultSidecarInjectorFile = "istio-sidecar-injector.yaml" ingressCertsName = "istio-ingress-certs" - maxDeploymentRolloutTime = 480 * time.Second + maxDeploymentRolloutTime = 960 * time.Second maxValidationReadyCheckTime = 30 * time.Second helmServiceAccountFile = "helm-service-account.yaml" istioHelmInstallDir = istioInstallDir + "/helm/istio" @@ -861,7 +861,7 @@ func (k *KubeInfo) deployIstioWithHelm() error { } if !*clusterWide { - setValue += " --set istiotesting.oneNameSpace=true" + setValue += " --set global.oneNamespace=true" } // enable helm test for istio diff --git a/tests/e2e/tests/dashboard/dashboard_test.go b/tests/e2e/tests/dashboard/dashboard_test.go index 92e2391921db..9e026aed3d37 100644 --- a/tests/e2e/tests/dashboard/dashboard_test.go +++ b/tests/e2e/tests/dashboard/dashboard_test.go @@ -322,7 +322,7 @@ func galleyQueryFilterFn(queries []string) []string { if strings.Contains(query, "validation_http_error") { continue } - if strings.Contains(query, "handle_event_error_total") { + if strings.Contains(query, "event_error_total") { continue } if strings.Contains(query, "converter_failure_total") { diff --git a/tests/e2e/tests/galley/galley_test.go b/tests/e2e/tests/galley/galley_test.go index cea1862ef06b..3713e9db2f0d 100644 --- a/tests/e2e/tests/galley/galley_test.go +++ b/tests/e2e/tests/galley/galley_test.go @@ -144,10 +144,6 @@ func TestValidation(t *testing.T) { {"config-v1alpha2-rbac-valid", true}, {"config-v1alpha2-reportnothing-invalid", false}, {"config-v1alpha2-reportnothing-valid", true}, - {"config-v1alpha2-servicecontrol-invalid", false}, - {"config-v1alpha2-servicecontrol-valid", true}, - {"config-v1alpha2-servicecontrolreport-invalid", false}, - {"config-v1alpha2-servicecontrolreport-valid", true}, {"config-v1alpha2-solarwinds-invalid", false}, {"config-v1alpha2-solarwinds-valid", true}, {"config-v1alpha2-stackdriver-invalid", false}, diff --git a/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrol-invalid.yaml b/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrol-invalid.yaml deleted file mode 100644 index 97a89faf01a3..000000000000 --- a/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrol-invalid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrol -metadata: - name: invalid-servicecontrol -spec: - badField: foo diff --git a/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrol-valid.yaml b/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrol-valid.yaml deleted file mode 100644 index 5df4cbca2624..000000000000 --- a/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrol-valid.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrol -metadata: - name: valid-servicecontrol -spec: - runtime_config: - check_cache_size: 200 - check_result_expiration: 60s - credential_path: "/etc/token/token.json" - service_configs: - - mesh_service_name: "productpage.default.svc.cluster.local" - google_service_name: "bookinfo.endpoints.istio-manlinl.cloud.goog" - quotas: - - name: read-requests.quota.istio-system - google_quota_metric_name: read-requests - expiration: 1m diff --git a/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrolreport-invalid.yaml b/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrolreport-invalid.yaml deleted file mode 100644 index 3ba3123613af..000000000000 --- a/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrolreport-invalid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrolreport -metadata: - name: invalid-servicecontrolreport -spec: - badField: foo diff --git a/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrolreport-valid.yaml b/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrolreport-valid.yaml deleted file mode 100644 index 36388289b705..000000000000 --- a/tests/e2e/tests/galley/testdata/config-v1alpha2-servicecontrolreport-valid.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrolreport -metadata: - name: valid-servicecontrolreport -spec: - api_version : api.version | "" - api_operation : api.operation | "" - api_protocol : api.protocol | "" - api_service : api.service | "" - api_key : request.api_key | "" - request_time : request.time - request_method : request.method - request_path : request.path - request_bytes: request.size - response_time : response.time - response_code : response.code | 520 - response_bytes : response.size | 0 diff --git a/tests/e2e/tests/mixer/mixer_test.go b/tests/e2e/tests/mixer/mixer_test.go index 87798fa2ce6e..fcc0bf4ad108 100644 --- a/tests/e2e/tests/mixer/mixer_test.go +++ b/tests/e2e/tests/mixer/mixer_test.go @@ -621,36 +621,50 @@ func TestNewMetrics(t *testing.T) { dumpK8Env() allowRuleSync() - if err := visitProductPage(productPageTimeout, http.StatusOK); err != nil { - fatalf(t, "Test app setup failure: %v", err) + var got float64 + + retry := util.Retrier{ + BaseDelay: 10 * time.Second, + MaxDelay: 30 * time.Second, + Retries: 4, } - log.Info("Successfully sent request(s) to /productpage; checking metrics...") - allowPrometheusSync() promAPI, err := promAPI() if err != nil { fatalf(t, "Could not build prometheus API client: %v", err) } - query := fmt.Sprintf("istio_response_bytes_count{%s=\"%s\",%s=\"200\"}", destLabel, fqdn("productpage"), responseCodeLabel) - t.Logf("prometheus query: %s", query) - value, err := promAPI.Query(context.Background(), query, time.Now()) - if err != nil { - fatalf(t, "Could not get metrics from prometheus: %v", err) + + retryFn := func(ctx context.Context, i int) error { + if err := visitProductPage(productPageTimeout, http.StatusOK); err != nil { + return fmt.Errorf("test app setup failure: %v", err) + } + + t.Logf("Successfully sent request(s) to /productpage; checking metrics...") + allowPrometheusSync() + query := fmt.Sprintf("sum(istio_double_request_count{%s=\"%s\"})", "destination", "productpage-v1") + + got, err = queryValue(promAPI, query) + if err != nil { + t.Logf("prometheus values for istio_double_request_count:\n%s", promDump(promAPI, "istio_double_request_count")) + t.Logf("prometheus values for istio_requests_total:\n%s", promDump(promAPI, "istio_requests_total")) + return fmt.Errorf("could not extract value from received metric: %v", err) + } + return nil } - log.Infof("promvalue := %s", value.String()) - got, err := vectorValue(value, map[string]string{}) - if err != nil { - t.Logf("prometheus values for istio_response_bytes_count:\n%s", promDump(promAPI, "istio_response_bytes_count")) - t.Logf("prometheus values for istio_requests_total:\n%s", promDump(promAPI, "istio_requests_total")) + if _, err := retry.Retry(context.Background(), retryFn); err != nil { + t.Logf("prometheus values for istio_double_request_count:\n%s", promDump(promAPI, "istio_double_request_count")) + dumpMixerMetrics() fatalf(t, "Could not find metric value: %v", err) } - want := float64(1) + + want := float64(2) if got < want { - t.Logf("prometheus values for istio_response_bytes_count:\n%s", promDump(promAPI, "istio_response_bytes_count")) + t.Logf("prometheus values for istio_double_request_count:\n%s", promDump(promAPI, "istio_double_request_count")) t.Logf("prometheus values for istio_requests_total:\n%s", promDump(promAPI, "istio_requests_total")) errorf(t, "Bad metric value: got %f, want at least %f", got, want) } + } func TestKubeenvMetrics(t *testing.T) { diff --git a/tests/e2e/tests/pilot/routing_test.go b/tests/e2e/tests/pilot/routing_test.go index af55a888ef55..b190a5c25f8f 100644 --- a/tests/e2e/tests/pilot/routing_test.go +++ b/tests/e2e/tests/pilot/routing_test.go @@ -655,10 +655,8 @@ func TestHeadersManipulations(t *testing.T) { } func TestDestinationRuleConfigScope(t *testing.T) { - samples := 100 - var cfgs []*deployableConfig - applyRuleFunc := func(t *testing.T, namesapces, ruleYamls []string) { + applyRuleFunc := func(t *testing.T, ruleYamls map[string][]string) { // Delete the previous rule if there was one. No delay on the teardown, since we're going to apply // a delay when we push the new config. for _, cfg := range cfgs { @@ -671,11 +669,11 @@ func TestDestinationRuleConfigScope(t *testing.T) { } cfgs = make([]*deployableConfig, 0) - for i, ns := range namesapces { - // Apply the new rule + for ns, rules := range ruleYamls { + // Apply the new rules in the namespace cfg := &deployableConfig{ Namespace: ns, - YamlFiles: []string{ruleYamls[i]}, + YamlFiles: rules, kubeconfig: tc.Kube.KubeConfig, } if err := cfg.Setup(); err != nil { @@ -693,51 +691,52 @@ func TestDestinationRuleConfigScope(t *testing.T) { } }() + // Create the namespaces + // NOTE: Use different namespaces for each test to avoid + // collision. Namespace deletion takes time. If the other test + // starts before this namespace is deleted, namespace creation in the other test will fail. + for _, ns := range []string{"dns1", "dns2"} { + if err := util.CreateNamespace(ns, tc.Kube.KubeConfig); err != nil { + t.Errorf("Unable to create namespace %s: %v", ns, err) + } + defer func(ns string) { + if err := util.DeleteNamespace(ns, tc.Kube.KubeConfig); err != nil { + t.Errorf("Failed to delete namespace %s", ns) + } + }(ns) + } + cases := []struct { testName string description string - configs []string - namespaces []string - scheme string + rules map[string][]string src string dst string expectedSuccess bool - operation string onFailure func() }{ { testName: "private destination rule in same namespace", - description: "routing all traffic to c-v1", - configs: []string{"destination-rule-c-private.yaml"}, - namespaces: []string{tc.Kube.Namespace}, - scheme: "http", + rules: map[string][]string{tc.Kube.Namespace: {"destination-rule-c-private.yaml"}}, src: "a", dst: "c", expectedSuccess: true, - operation: "c.istio-system.svc.cluster.local:80/*", }, { testName: "private destination rule in different namespaces", - description: "can not apply private destination rule", - configs: []string{"destination-rule-c-private.yaml"}, - namespaces: []string{"test-another-ns1"}, - scheme: "http", + rules: map[string][]string{"dns1": {"destination-rule-c-private.yaml"}}, src: "a", dst: "c", expectedSuccess: false, - operation: "c.istio-system.svc.cluster.local:80/*", - }, - { - testName: "private rule in a namespace overrides public rule in another namespace", - description: "routing all traffic to c-v1", - configs: []string{"destination-rule-c-private.yaml", "destination-rule-c-non-exist.yaml"}, - namespaces: []string{tc.Kube.Namespace, "test-another-ns2"}, - scheme: "http", - src: "a", - dst: "c", - expectedSuccess: true, - operation: "c.istio-system.svc.cluster.local:80/*", }, + // TODO: These two cases cannot be tested reliably until the EDS issue with + // destination rules is fixed. https://github.com/istio/istio/issues/10817 + //{ + // testName: "private rule in a namespace overrides public rule in another namespace", + //}, + //{ + // testName: "public rule in service's namespace overrides public rule in another namespace", + //}, } t.Run("v1alpha3", func(t *testing.T) { @@ -756,28 +755,21 @@ func TestDestinationRuleConfigScope(t *testing.T) { for _, c := range cases { // Run each case in a function to scope the configuration's lifecycle. func() { - for i, ns := range c.namespaces { - if ns != tc.Kube.Namespace { - if err := util.CreateNamespace(ns, tc.Kube.KubeConfig); err != nil { - t.Errorf("Unable to create namespace %s: %v", ns, err) - } - defer func(ns string) { - if err := util.DeleteNamespace(ns, tc.Kube.KubeConfig); err != nil { - t.Errorf("Failed to delete namespace %s", ns) - } - }(ns) + for _, yamls := range c.rules { + for i, yaml := range yamls { + ruleYaml := fmt.Sprintf("testdata/networking/v1alpha3/%s", yaml) + yamls[i] = maybeAddTLSForDestinationRule(tc, ruleYaml) } - ruleYaml := fmt.Sprintf("testdata/networking/v1alpha3/%s", c.configs[i]) - c.configs[i] = maybeAddTLSForDestinationRule(tc, ruleYaml) } - - applyRuleFunc(t, c.namespaces, c.configs) + applyRuleFunc(t, c.rules) + // Wait a few seconds so that the older proxy listeners get overwritten + time.Sleep(10 * time.Second) for cluster := range tc.Kube.Clusters { testName := fmt.Sprintf("%s from %s cluster", c.testName, cluster) runRetriableTest(t, testName, 5, func() error { - reqURL := fmt.Sprintf("%s://%s/%s", c.scheme, c.dst, c.src) - resp := ClientRequest(cluster, c.src, reqURL, samples, "") + reqURL := fmt.Sprintf("http://%s/%s", c.dst, c.src) + resp := ClientRequest(cluster, c.src, reqURL, 1, "") if c.expectedSuccess && !resp.IsHTTPOk() { return fmt.Errorf("failed request %s, %v", reqURL, resp.Code) } diff --git a/tests/e2e/tests/pilot/testdata/networking/v1alpha3/destination-rule-c-non-exist.yaml b/tests/e2e/tests/pilot/testdata/networking/v1alpha3/destination-rule-c-non-exist.yaml deleted file mode 100644 index f4a251117b34..000000000000 --- a/tests/e2e/tests/pilot/testdata/networking/v1alpha3/destination-rule-c-non-exist.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: networking.istio.io/v1alpha3 -kind: DestinationRule -metadata: - name: destination-rule-c-non-exist-subset -spec: - host: c - {{if eq .globalMTlsEnable "true"}} - trafficPolicy: - tls: - mode: ISTIO_MUTUAL - {{end}} - subsets: - - name: non-exist - labels: - version: non-exist - configScope: PUBLIC diff --git a/tests/e2e/tests/pilot/testdata/networking/v1alpha3/destination-rule-c-private.yaml b/tests/e2e/tests/pilot/testdata/networking/v1alpha3/destination-rule-c-private.yaml index 34332e705da2..f55c6cff2e21 100644 --- a/tests/e2e/tests/pilot/testdata/networking/v1alpha3/destination-rule-c-private.yaml +++ b/tests/e2e/tests/pilot/testdata/networking/v1alpha3/destination-rule-c-private.yaml @@ -1,7 +1,7 @@ apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: - name: destination-rule-c + name: destination-rule-c-private spec: host: c {{if eq .globalMTlsEnable "true"}} @@ -13,7 +13,4 @@ spec: - name: v1 labels: version: v1 - - name: v2 - labels: - version: v2 configScope: PRIVATE diff --git a/tests/e2e/tests/pilot/testdata/networking/v1alpha3/rule-ingressgateway.yaml b/tests/e2e/tests/pilot/testdata/networking/v1alpha3/rule-ingressgateway.yaml index 632e93721809..34e8fab1e314 100644 --- a/tests/e2e/tests/pilot/testdata/networking/v1alpha3/rule-ingressgateway.yaml +++ b/tests/e2e/tests/pilot/testdata/networking/v1alpha3/rule-ingressgateway.yaml @@ -6,7 +6,7 @@ spec: hosts: - uk.bookinfo.com gateways: - - istio-ingressgateway # pinned to ingress gateway only + - istio-system/istio-ingressgateway # pinned to ingress gateway only http: - match: - port: 80 diff --git a/tests/e2e/tests/pilot/testdata/networking/v1alpha3/rule-route-via-egressgateway.yaml b/tests/e2e/tests/pilot/testdata/networking/v1alpha3/rule-route-via-egressgateway.yaml index 9ad8a8b57484..a8c29ef91302 100644 --- a/tests/e2e/tests/pilot/testdata/networking/v1alpha3/rule-route-via-egressgateway.yaml +++ b/tests/e2e/tests/pilot/testdata/networking/v1alpha3/rule-route-via-egressgateway.yaml @@ -9,7 +9,7 @@ spec: - www.bing.com gateways: # Pinned to both the sidecars (mesh) and egress gateway - - istio-egressgateway + - istio-system/istio-egressgateway - mesh http: - match: diff --git a/tests/e2e/tests/pilot/testdata/networking/v1alpha3/sidecar-scope-ns1-ns2.yaml b/tests/e2e/tests/pilot/testdata/networking/v1alpha3/sidecar-scope-ns1-ns2.yaml index f0f000605566..d0986020a64b 100644 --- a/tests/e2e/tests/pilot/testdata/networking/v1alpha3/sidecar-scope-ns1-ns2.yaml +++ b/tests/e2e/tests/pilot/testdata/networking/v1alpha3/sidecar-scope-ns1-ns2.yaml @@ -17,7 +17,9 @@ spec: bind: 7.7.7.7 hosts: - "*/bookinfo.com" + - "*/private.com" # bookinfo.com is on port 9999. + # private.com wont get imported - hosts: - "ns1/*" - "*/*.tcp.com" diff --git a/tests/integration2/galley/validation/data.gen_test.go b/tests/integration2/galley/validation/data.gen_test.go index 91d841aace4e..05bf507dcebf 100644 --- a/tests/integration2/galley/validation/data.gen_test.go +++ b/tests/integration2/galley/validation/data.gen_test.go @@ -66,10 +66,6 @@ // testdata/config-v1alpha2-reportnothing-valid.yaml // testdata/config-v1alpha2-rule-invalid.yaml // testdata/config-v1alpha2-rule-valid.yaml -// testdata/config-v1alpha2-servicecontrol-invalid.yaml -// testdata/config-v1alpha2-servicecontrol-valid.yaml -// testdata/config-v1alpha2-servicecontrolreport-invalid.yaml -// testdata/config-v1alpha2-servicecontrolreport-valid.yaml // testdata/config-v1alpha2-solarwinds-invalid.yaml // testdata/config-v1alpha2-solarwinds-valid.yaml // testdata/config-v1alpha2-stackdriver-invalid.yaml @@ -1670,119 +1666,6 @@ func testdataConfigV1alpha2RuleValidYaml() (*asset, error) { return a, nil } -var _testdataConfigV1alpha2ServicecontrolInvalidYaml = []byte(`apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrol -metadata: - name: invalid-servicecontrol -spec: - badField: foo -`) - -func testdataConfigV1alpha2ServicecontrolInvalidYamlBytes() ([]byte, error) { - return _testdataConfigV1alpha2ServicecontrolInvalidYaml, nil -} - -func testdataConfigV1alpha2ServicecontrolInvalidYaml() (*asset, error) { - bytes, err := testdataConfigV1alpha2ServicecontrolInvalidYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "testdata/config-v1alpha2-servicecontrol-invalid.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testdataConfigV1alpha2ServicecontrolValidYaml = []byte(`apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrol -metadata: - name: valid-servicecontrol -spec: - runtime_config: - check_cache_size: 200 - check_result_expiration: 60s - credential_path: "/etc/token/token.json" - service_configs: - - mesh_service_name: "productpage.default.svc.cluster.local" - google_service_name: "bookinfo.endpoints.istio-manlinl.cloud.goog" - quotas: - - name: read-requests.quota.istio-system - google_quota_metric_name: read-requests - expiration: 1m -`) - -func testdataConfigV1alpha2ServicecontrolValidYamlBytes() ([]byte, error) { - return _testdataConfigV1alpha2ServicecontrolValidYaml, nil -} - -func testdataConfigV1alpha2ServicecontrolValidYaml() (*asset, error) { - bytes, err := testdataConfigV1alpha2ServicecontrolValidYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "testdata/config-v1alpha2-servicecontrol-valid.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testdataConfigV1alpha2ServicecontrolreportInvalidYaml = []byte(`apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrolreport -metadata: - name: invalid-servicecontrolreport -spec: - badField: foo -`) - -func testdataConfigV1alpha2ServicecontrolreportInvalidYamlBytes() ([]byte, error) { - return _testdataConfigV1alpha2ServicecontrolreportInvalidYaml, nil -} - -func testdataConfigV1alpha2ServicecontrolreportInvalidYaml() (*asset, error) { - bytes, err := testdataConfigV1alpha2ServicecontrolreportInvalidYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "testdata/config-v1alpha2-servicecontrolreport-invalid.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testdataConfigV1alpha2ServicecontrolreportValidYaml = []byte(`apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrolreport -metadata: - name: valid-servicecontrolreport -spec: - api_version : api.version | "" - api_operation : api.operation | "" - api_protocol : api.protocol | "" - api_service : api.service | "" - api_key : request.api_key | "" - request_time : request.time - request_method : request.method - request_path : request.path - request_bytes: request.size - response_time : response.time - response_code : response.code | 520 - response_bytes : response.size | 0 -`) - -func testdataConfigV1alpha2ServicecontrolreportValidYamlBytes() ([]byte, error) { - return _testdataConfigV1alpha2ServicecontrolreportValidYaml, nil -} - -func testdataConfigV1alpha2ServicecontrolreportValidYaml() (*asset, error) { - bytes, err := testdataConfigV1alpha2ServicecontrolreportValidYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "testdata/config-v1alpha2-servicecontrolreport-valid.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - var _testdataConfigV1alpha2SolarwindsInvalidYaml = []byte(`apiVersion: "config.istio.io/v1alpha2" kind: solarwinds metadata: @@ -2539,10 +2422,6 @@ var _bindata = map[string]func() (*asset, error){ "testdata/config-v1alpha2-reportnothing-valid.yaml": testdataConfigV1alpha2ReportnothingValidYaml, "testdata/config-v1alpha2-rule-invalid.yaml": testdataConfigV1alpha2RuleInvalidYaml, "testdata/config-v1alpha2-rule-valid.yaml": testdataConfigV1alpha2RuleValidYaml, - "testdata/config-v1alpha2-servicecontrol-invalid.yaml": testdataConfigV1alpha2ServicecontrolInvalidYaml, - "testdata/config-v1alpha2-servicecontrol-valid.yaml": testdataConfigV1alpha2ServicecontrolValidYaml, - "testdata/config-v1alpha2-servicecontrolreport-invalid.yaml": testdataConfigV1alpha2ServicecontrolreportInvalidYaml, - "testdata/config-v1alpha2-servicecontrolreport-valid.yaml": testdataConfigV1alpha2ServicecontrolreportValidYaml, "testdata/config-v1alpha2-solarwinds-invalid.yaml": testdataConfigV1alpha2SolarwindsInvalidYaml, "testdata/config-v1alpha2-solarwinds-valid.yaml": testdataConfigV1alpha2SolarwindsValidYaml, "testdata/config-v1alpha2-stackdriver-invalid.yaml": testdataConfigV1alpha2StackdriverInvalidYaml, @@ -2661,10 +2540,6 @@ var _bintree = &bintree{nil, map[string]*bintree{ "config-v1alpha2-reportnothing-valid.yaml": &bintree{testdataConfigV1alpha2ReportnothingValidYaml, map[string]*bintree{}}, "config-v1alpha2-rule-invalid.yaml": &bintree{testdataConfigV1alpha2RuleInvalidYaml, map[string]*bintree{}}, "config-v1alpha2-rule-valid.yaml": &bintree{testdataConfigV1alpha2RuleValidYaml, map[string]*bintree{}}, - "config-v1alpha2-servicecontrol-invalid.yaml": &bintree{testdataConfigV1alpha2ServicecontrolInvalidYaml, map[string]*bintree{}}, - "config-v1alpha2-servicecontrol-valid.yaml": &bintree{testdataConfigV1alpha2ServicecontrolValidYaml, map[string]*bintree{}}, - "config-v1alpha2-servicecontrolreport-invalid.yaml": &bintree{testdataConfigV1alpha2ServicecontrolreportInvalidYaml, map[string]*bintree{}}, - "config-v1alpha2-servicecontrolreport-valid.yaml": &bintree{testdataConfigV1alpha2ServicecontrolreportValidYaml, map[string]*bintree{}}, "config-v1alpha2-solarwinds-invalid.yaml": &bintree{testdataConfigV1alpha2SolarwindsInvalidYaml, map[string]*bintree{}}, "config-v1alpha2-solarwinds-valid.yaml": &bintree{testdataConfigV1alpha2SolarwindsValidYaml, map[string]*bintree{}}, "config-v1alpha2-stackdriver-invalid.yaml": &bintree{testdataConfigV1alpha2StackdriverInvalidYaml, map[string]*bintree{}}, diff --git a/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrol-invalid.yaml b/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrol-invalid.yaml deleted file mode 100644 index 97a89faf01a3..000000000000 --- a/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrol-invalid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrol -metadata: - name: invalid-servicecontrol -spec: - badField: foo diff --git a/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrol-valid.yaml b/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrol-valid.yaml deleted file mode 100644 index 5df4cbca2624..000000000000 --- a/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrol-valid.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrol -metadata: - name: valid-servicecontrol -spec: - runtime_config: - check_cache_size: 200 - check_result_expiration: 60s - credential_path: "/etc/token/token.json" - service_configs: - - mesh_service_name: "productpage.default.svc.cluster.local" - google_service_name: "bookinfo.endpoints.istio-manlinl.cloud.goog" - quotas: - - name: read-requests.quota.istio-system - google_quota_metric_name: read-requests - expiration: 1m diff --git a/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrolreport-invalid.yaml b/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrolreport-invalid.yaml deleted file mode 100644 index 3ba3123613af..000000000000 --- a/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrolreport-invalid.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrolreport -metadata: - name: invalid-servicecontrolreport -spec: - badField: foo diff --git a/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrolreport-valid.yaml b/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrolreport-valid.yaml deleted file mode 100644 index 36388289b705..000000000000 --- a/tests/integration2/galley/validation/testdata/config-v1alpha2-servicecontrolreport-valid.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: "config.istio.io/v1alpha2" -kind: servicecontrolreport -metadata: - name: valid-servicecontrolreport -spec: - api_version : api.version | "" - api_operation : api.operation | "" - api_protocol : api.protocol | "" - api_service : api.service | "" - api_key : request.api_key | "" - request_time : request.time - request_method : request.method - request_path : request.path - request_bytes: request.size - response_time : response.time - response_code : response.code | 520 - response_bytes : response.size | 0 diff --git a/tests/testdata/config/none.yaml b/tests/testdata/config/none.yaml index 76ada59c42a2..588687ee1895 100644 --- a/tests/testdata/config/none.yaml +++ b/tests/testdata/config/none.yaml @@ -1,3 +1,7 @@ +# To test in real cluster: +# kubectl create ns none +# kubectl label namespace none istio-injection=enabled + # All configs for 'none' namespace, used to test interception without iptables. # In this mode the namespace isolation is required - the tests will also verify isolation # It is important to update the tests in ../envoy/v2 which verify the number of generated listeners. @@ -7,8 +11,170 @@ # TODO: the IP addresses are not namespaced yet, so must be unique on the mesh (flat namespace) including in # ServiceEntry tests. Removing deps on ip in progress. +--- +# Default sidecar +apiVersion: networking.istio.io/v1alpha3 +kind: Sidecar +metadata: + name: default + namespace: none +spec: + egress: + - hosts: + - "istio-system/*" + port: + # TODO: if not imported, disable mixer checks + # Note mixer and policy are on same port - so listener generation will only create one port. + # However this is fine, since envoy is using mixer only internally. + number: 9091 + name: grpc-mixer + protocol: GRPC + - hosts: + - "istio-system/*" + port: + number: 15004 + name: grpc-mixer-mtls + protocol: GRPC + - hosts: + - none/* + - default/test.default # TODO: without namespace it fails validation ! + # TODO: if we include the namespace, why do we need full name ? Importing regular services should work. + + # Label selection seems to confuse the new code. + ingress: + - port: + number: 7071 + protocol: HTTP + name: httplocal + default_endpoint: 127.0.0.1:17071 + - port: + number: 7070 + protocol: TCP + name: tcplocal + default_endpoint: 127.0.0.1:17070 + # Fortio ports + - port: + number: 18080 + protocol: HTTP + name: http-echo + default_endpoint: 127.0.0.1:28080 + - port: + number: 18079 + protocol: TCP + name: grpc-ping + default_endpoint: 127.0.0.1:28079 +--- + +apiVersion: v1 +kind: Service +metadata: + name: fortio + namespace: none +spec: + ports: + - port: 8080 # This is the service port - connect to fortio:8080 as client (using http proxy or in mesh) + name: http-echo + targetPort: 18080 # This port should listen on the target machine + - port: 8079 + name: grpc-ping + targetPort: 18079 + selector: + app: fortio + +--- +# TODO: VirtualService using new Gateway style + +# TODO: use UDS + +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: fortio + namespace: none +spec: + replicas: 1 + template: + metadata: + labels: + app: fortio + version: v1 + #INTERCEPTION_MODE: NONE + annotations: + sidecar.istio.io/interceptionMode: NONE + status.sidecar.istio.io/port: "0" + spec: + containers: + - name: echosrv + image: costinm/fortio:latest + imagePullPolicy: Always + ports: + - containerPort: 18080 + - containerPort: 18079 + args: + - server + - -static-dir + - "/usr/share/fortio/" + - --stdclient + - -http-port + #- 127.0.0.1:28080 # This is the port from Sidecar. Normally should be localhost + - :28080 # bound to 0.0.0.0 to allow additional perf testing. + - -grpc-port + - :28079 + env: + - name: HTTP_PROXY + value: 127.0.0.1:15002 + resources: + requests: + cpu: 1000m + memory: "1G" + limits: + cpu: 1000m + memory: "1G" +--- + +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: fortio-cli + namespace: none +spec: + replicas: 1 + template: + metadata: + labels: + app: fortio-cli + version: v1 + annotations: + status.sidecar.istio.io/port: "0" + sidecar.istio.io/interceptionMode: NONE + spec: + containers: + - name: echosrv + image: costinm/fortio:latest + imagePullPolicy: Always + args: + - load + - --stdclient + - -t + - "0" + - -c + - "32" + - -qps + - "500" + - http://fortio:8080/echo?size=5000 + env: + - name: HTTP_PROXY + value: 127.0.0.1:15002 + resources: + requests: + cpu: 500m + memory: "1G" + limits: + cpu: 1000m + memory: "1G" --- + # "None" mode depends on unique ports for each defined service or service entry. # Not supported/require iptables: # - TCP with 'addresses' field - needs iptables @@ -68,58 +234,6 @@ spec: --- -## Sidecar selecting the s1tcp service, which is used in the test. -#apiVersion: networking.istio.io/v1alpha3 -#kind: Sidecar -#metadata: -# name: s1http -# namespace: none -#spec: -# workload_selector: -# labels: -# app: s1tcp -# -# ingress: -# - port: -# number: 7071 -# protocol: TCP -# name: tcplocal -# default_endpoint: 127.0.0.1:17071 -# - port: -# number: 7070 -# protocol: TCP -# name: tcplocal -# default_endpoint: 127.0.0.1:17070 - ---- - -# Default sidecar -apiVersion: networking.istio.io/v1alpha3 -kind: Sidecar -metadata: - name: default - namespace: none -spec: - egress: - - hosts: - - none/* - - default/test.default # TODO: without namespace it fails validation ! - # TODO: if we include the namespace, why do we need full name ? Importing regular services should work. - # Label selection seems to confuse the new code. - ingress: - - port: - number: 7071 - protocol: HTTP - name: httplocal - default_endpoint: 127.0.0.1:17071 - - port: - number: 7070 - protocol: TCP - name: tcplocal - default_endpoint: 127.0.0.1:17070 - ---- - # Regular TCP outbound cluster (Default MeshExternal = true, Resolution ClientSideLB) apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry @@ -242,7 +356,7 @@ spec: - api1.facebook.com location: MESH_EXTERNAL ports: - - number: 443 + - number: 2443 name: https protocol: TLS resolution: DNS @@ -259,14 +373,14 @@ spec: - api1.facebook.com tls: - match: - - port: 443 + - port: 2443 sniHosts: - www1.googleapis.com route: - destination: host: www1.googleapis.com - match: - - port: 443 + - port: 2443 sniHosts: - api1.facebook.com route: diff --git a/tests/upgrade/templates/fortio-cli.yaml b/tests/upgrade/templates/fortio-cli.yaml index 8dcd95b39962..615f7e8e4982 100644 --- a/tests/upgrade/templates/fortio-cli.yaml +++ b/tests/upgrade/templates/fortio-cli.yaml @@ -1,10 +1,10 @@ --- -apiVersion: apps/v1beta1 -kind: Deployment +apiVersion: batch/v1 +kind: Job metadata: name: cli-fortio spec: - replicas: 1 + backoffLimit: 5 template: metadata: labels: @@ -12,6 +12,7 @@ spec: annotations: sidecar.istio.io/inject: "false" spec: + restartPolicy: "OnFailure" containers: - name: echosrv image: istio/fortio:latest @@ -21,7 +22,7 @@ spec: - -c - "32" - -t - - "700s" + - "500s" - -qps - "10" - http://echosrv.test.svc.cluster.local:8080/echo?size=200 diff --git a/tests/upgrade/test_crossgrade.sh b/tests/upgrade/test_crossgrade.sh index 0280a181214b..bc523b843cc9 100755 --- a/tests/upgrade/test_crossgrade.sh +++ b/tests/upgrade/test_crossgrade.sh @@ -33,10 +33,11 @@ usage() { echo " auth_enable enable mtls." echo " skip_cleanup leave install intact after test completes." echo " namespace namespace to install istio control plane in (default istio-system)." + echo " cloud cloud provider name (required)" echo echo " e.g. ./test_crossgrade.sh \" echo " --from_hub=gcr.io/istio-testing --from_tag=d639408fd --from_path=/tmp/release-d639408fd \" - echo " --to_hub=gcr.io/istio-release --to_tag=1.0.2 --to_path=/tmp/istio-1.0.2" + echo " --to_hub=gcr.io/istio-release --to_tag=1.0.2 --to_path=/tmp/istio-1.0.2 --cloud=GKE" echo exit 1 } @@ -80,6 +81,9 @@ while (( "$#" )); do --to_path) TO_PATH=${VALUE} ;; + --cloud) + CLOUD=${VALUE} + ;; *) echo "ERROR: unknown parameter \"$PARAM\"" usage @@ -106,31 +110,104 @@ TEST_NAMESPACE="test" # This must be at least as long as the script execution time. # Edit fortio-cli.yaml to the same value when changing this. -TRAFFIC_RUNTIME_SEC=700 +TRAFFIC_RUNTIME_SEC=500 + +# Used to signal that background external process is done. +EXTERNAL_FORTIO_DONE_FILE=${TMP_DIR}/fortio_done_file -echo_and_run() { echo "RUNNING $*" ; "$@" || die "failed!" ; } +echo_and_run() { echo "# RUNNING $*" ; "$@" ; } +echo_and_run_quiet() { echo "# RUNNING(quiet) $*" ; "$@" > /dev/null 2>&1 ; } +echo_and_run_or_die() { echo "# RUNNING $*" ; "$@" || die "failed!" ; } + +# withRetries retries the given command ${1} times with ${2} sleep between retries +# e.g. withRetries 10 60 myFunc param1 param2 +# runs "myFunc param1 param2" up to 10 times with 60 sec sleep in between. +withRetries() { + local max_retries=${1} + local sleep_sec=${2} + local n=0 + shift + shift + while (( n < max_retries )); do + echo "RUNNING $*" ; "${@}" && break + echo "Failed, sleeping ${sleep_sec} seconds and retrying..." + ((n++)) + sleep "${sleep_sec}" + done + + if (( n == max_retries )); then die "$* failed after retrying ${max_retries} times."; fi + echo "Succeeded." +} + +# withRetriesMaxTime retries the given command repeatedly with ${2} sleep between retries until ${1} seconds have elapsed. +# e.g. withRetries 300 60 myFunc param1 param2 +# runs "myFunc param1 param2" for up 300 seconds with 60 sec sleep in between. +withRetriesMaxTime() { + local total_time_max=${1} + local sleep_sec=${2} + local start_time=${SECONDS} + shift + shift + while (( SECONDS - start_time < total_time_max )); do + echo "RUNNING $*" ; "${@}" && break + echo "Failed, sleeping ${sleep_sec} seconds and retrying..." + sleep "${sleep_sec}" + done + + if (( SECONDS - start_time >= total_time_max )); then die "$* failed after retrying for ${total_time_max} seconds."; fi + echo "Succeeded." +} + +# checkIfDeleted checks if a resource has been deleted, returns 1 if it has not. +# e.g. checkIfDeleted ConfigMap my-config-map istio-system +# OR checkIfDeleted namespace istio-system +checkIfDeleted() { + local resp + if [ -n "${3}" ]; then + resp=$( kubectl get "${1}" -n "${3}" "${2}" 2>&1 ) + else + resp=$( kubectl get "${1}" "${2}" 2>&1 ) + fi + if [[ "${resp}" == *"Error from server (NotFound)"* ]]; then + return 0 + fi + echo "Response from server for kubectl get: " + echo "${resp}" + return 1 +} + +deleteWithWait() { + # Don't complain if resource is already deleted. + echo_and_run_quiet kubectl delete "${1}" -n "${3}" "${2}" + withRetries 60 10 checkIfDeleted "${1}" "${2}" "${3}" +} installIstioSystemAtVersionHelmTemplate() { - writeMsg "helm installing version ${2} from ${3}." + writeMsg "helm templating then applying new yaml using version ${2} from ${3}." if [ -n "${AUTH_ENABLE}" ]; then echo "Auth is enabled, generating manifest with auth." auth_opts="--set global.mtls.enabled=true --set global.controlPlaneSecurityEnabled=true " fi release_path="${3}"/install/kubernetes/helm/istio - if [[ "${release_path}" == *"1.1"* ]]; then + if [[ "${release_path}" == *"1.1"* || "${release_path}" == *"master"* ]]; then + # See https://preliminary.istio.io/docs/setup/kubernetes/helm-install/ helm init --client-only - helm repo add istio.io https://storage.googleapis.com/istio-prerelease/daily-build/release-1.1-latest-daily/charts + helm repo add istio.io https://storage.googleapis.com/istio-prerelease/daily-build/release-1.1-latest-daily/charts helm dependency update "${release_path}" + for i in install/kubernetes/helm/istio-init/files/crd*yaml; do + echo_and_run kubectl apply -f "${i}" + done + sleep 5 # Per official Istio documentation! fi + helm template "${release_path}" "${auth_opts}" \ --name istio --namespace "${ISTIO_NAMESPACE}" \ - --set gateways.istio-ingressgateway.replicaCount=4 \ --set gateways.istio-ingressgateway.autoscaleMin=4 \ --set prometheus.enabled=false \ --set global.hub="${1}" \ --set global.tag="${2}" > "${ISTIO_ROOT}/istio.yaml" || die "helm template failed" - kubectl apply -n "${ISTIO_NAMESPACE}" -f "${ISTIO_ROOT}"/istio.yaml || die "kubectl in installIstioSystemAtVersionHelmTemplate failed" + withRetries 3 60 kubectl apply -f "${ISTIO_ROOT}"/istio.yaml } installTest() { @@ -142,20 +219,36 @@ installTest() { } # Sends traffic from internal pod (Fortio load command) to Fortio echosrv. +# Since this may block for some time due to restarts, it should be run in the background. Use waitForJob to check for +# completion. +_sendInternalRequestTraffic() { + local job_name=cli-fortio + deleteWithWait job "${job_name}" "${TEST_NAMESPACE}" + start_time=${SECONDS} + withRetries 10 60 kubectl apply -n "${TEST_NAMESPACE}" -f "${TMP_DIR}/fortio-cli.yaml" + waitForJob "${job_name}" + # Any timeouts typically occur in the first 20s + if (( SECONDS - start_time < 100 )); then + echo "${job_name} failed" + return 1 + fi +} sendInternalRequestTraffic() { - writeMsg "Sending internal traffic" - kubectl apply -n "${TEST_NAMESPACE}" -f "${TMP_DIR}/fortio-cli.yaml" || die "kubectl apply fortio-cli.yaml failed" + writeMsg "Sending internal traffic" + withRetries 10 0 _sendInternalRequestTraffic } # Runs traffic from external fortio client, with retries. runFortioLoadCommand() { - local n=0 - while [ $n -lt 10 ]; do - echo_and_run fortio load -c 32 -t "${TRAFFIC_RUNTIME_SEC}"s -qps 10 \ - -H "Host:echosrv.test.svc.cluster.local" "http://${1}/echo?size=200" &> "${LOCAL_FORTIO_LOG}" && break - echo "fortio load failed, retrying..." - ((n++)) - sleep 10 + withRetries 10 10 echo_and_run fortio load -c 32 -t "${TRAFFIC_RUNTIME_SEC}"s -qps 10 \ + -H "Host:echosrv.test.svc.cluster.local" "http://${1}/echo?size=200" &> "${LOCAL_FORTIO_LOG}" + echo "done" >> "${EXTERNAL_FORTIO_DONE_FILE}" +} + +waitForExternalRequestTraffic() { + echo "Waiting for external traffic to complete" + while [ ! -f "${EXTERNAL_FORTIO_DONE_FILE}" ]; do + sleep 10 done } @@ -165,115 +258,98 @@ sendExternalRequestTraffic() { runFortioLoadCommand "${1}" & } - restartDataPlane() { # Apply label within deployment spec. # This is a hack to force a rolling restart without making any material changes to spec. writeMsg "Restarting deployment ${1}, patching label to force restart." - echo_and_run kubectl patch deployment "${1}" -n "${TEST_NAMESPACE}" -p'{"spec":{"template":{"spec":{"containers":[{"name":"echosrv","env":[{"name":"RESTART_'"$(date +%s)"'","value":"1"}]}]}}}}' + echo_and_run_or_die kubectl patch deployment "${1}" -n "${TEST_NAMESPACE}" -p'{"spec":{"template":{"spec":{"containers":[{"name":"echosrv","env":[{"name":"RESTART_'"$(date +%s)"'","value":"1"}]}]}}}}' +} + +resetConfigMap() { + deleteWithWait ConfigMap "${1}" "${ISTIO_NAMESPACE}" + kubectl create -n "${ISTIO_NAMESPACE}" -f "${2}" } writeMsg() { printf "\\n\\n****************\\n\\n%s\\n\\n****************\\n\\n" "${1}" } +_waitForIngress() { + INGRESS_HOST=$(kubectl -n "${ISTIO_NAMESPACE}" get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + INGRESS_PORT=$(kubectl -n "${ISTIO_NAMESPACE}" get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') + INGRESS_ADDR=${INGRESS_HOST}:${INGRESS_PORT} + if [ -z "${INGRESS_HOST}" ]; then return 1; fi +} + waitForIngress() { - sleep_time_sec=10 - sleep_time_sofar=0 - INGRESS_HOST="" - while [ -z ${INGRESS_HOST} ]; do - echo "Waiting for ingress-gateway addr..." - INGRESS_HOST=$(kubectl -n "${ISTIO_NAMESPACE}" get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') - INGRESS_PORT=$(kubectl -n "${ISTIO_NAMESPACE}" get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') - INGRESS_ADDR=${INGRESS_HOST}:${INGRESS_PORT} - sleep ${sleep_time_sec} - (( sleep_time_sofar += sleep_time_sec )) - if (( sleep_time_sofar > 300 )); then - echo "Timed out waiting for ingress-gateway address" - exit 1 - fi - done + echo "Waiting for ingress-gateway addr..." + withRetriesMaxTime 300 10 _waitForIngress echo "Got ingress-gateway addr: ${INGRESS_ADDR}" } -waitForPodsReady() { - sleep_time_sec=10 - sleep_time_sofar=0 - while :; do - echo "Waiting for pods to be ready in ${1}..." - pods_str=$(kubectl -n "${1}" get pods | tail -n +2 ) - arr=() - while read -r line; do - arr+=("$line") - done <<< "$pods_str" - - ready="true" - for line in "${arr[@]}"; do - if [[ ${line} != *"Running"* && ${line} != *"Completed"* ]]; then - ready="false" - fi - done - if [ "${ready}" = "true" ]; then - echo "All pods ready." - return - fi +_waitForPodsReady() { + pods_str=$(kubectl -n "${1}" get pods | tail -n +2 ) + arr=() + while read -r line; do + arr+=("$line") + done <<< "$pods_str" - sleep ${sleep_time_sec} - (( sleep_time_sofar += sleep_time_sec )) - if (( sleep_time_sofar > 300 )); then - echo "Timed out waiting for pods to be ready." - echo "${pods_str}" - exit 1 + ready="true" + for line in "${arr[@]}"; do + if [[ ${line} != *"Running"* && ${line} != *"Completed"* ]]; then + ready="false" fi done + if [ "${ready}" = "true" ]; then + return 0 + fi + + echo "${pods_str}" + return 1 +} + +waitForPodsReady() { + echo "Waiting for pods to be ready in ${1}..." + withRetriesMaxTime 600 10 _waitForPodsReady "${1}" + echo "All pods ready." +} + +_checkEchosrv() { + resp=$( curl -o /dev/null -s -w "%{http_code}\\n" -HHost:echosrv.${TEST_NAMESPACE}.svc.cluster.local "http://${INGRESS_ADDR}/echo" || echo $? ) + if [[ "${resp}" = *"200"* ]]; then + echo "Got correct response from echosrv." + return 0 + fi + echo "Got bad echosrv response: ${resp}" + return 1 } checkEchosrv() { - sleep_time_sec=10 - sleep_time_sofar=0 - while :; do - resp=$( curl -o /dev/null -s -w "%{http_code}\\n" -HHost:echosrv.${TEST_NAMESPACE}.svc.cluster.local "http://${INGRESS_ADDR}/echo" || echo $? ) - echo "${resp}" - if [[ "${resp}" = *"200"* ]]; then - echo "Got correct response from echosrv." - return - else - echo "Got bad echosrv response: ${resp}" - fi + writeMsg "Checking echosrv..." + withRetriesMaxTime 300 10 _checkEchosrv +} - sleep ${sleep_time_sec} - (( sleep_time_sofar += sleep_time_sec )) - if (( sleep_time_sofar > 300 )); then - echo "Timed out waiting for 200 from echosrv." - exit 1 - fi +waitForJob() { + echo "Waiting for job ${1} to complete..." + local start_time=${SECONDS} + until kubectl get jobs -n "${TEST_NAMESPACE}" "${1}" -o jsonpath='{.status.conditions[?(@.type=="Complete")].status}' | grep True ; do + sleep 1 ; done + run_time=0 + (( run_time = SECONDS - start_time )) + echo "Job ${1} ran for ${run_time} seconds." } -resetNamespaces() { - sleep_time_sec=10 - sleep_time_sofar=0 - kubectl delete namespace "${ISTIO_NAMESPACE}" "${TEST_NAMESPACE}" || echo "namespaces may already be deleted" - while :; do - resp=$( kubectl get namespaces ) - if [[ "${resp}" != *"Terminating"* ]]; then - echo "All namespaces deleted." - kubectl create namespace "${ISTIO_NAMESPACE}" - kubectl create namespace "${TEST_NAMESPACE}" - kubectl label namespace "${TEST_NAMESPACE}" istio-injection=enabled - return - else - echo "Waiting for namespaces ${ISTIO_NAMESPACE} and ${TEST_NAMESPACE} to be deleted." - fi +resetCluster() { + echo "Cleaning cluster by removing namespaces ${ISTIO_NAMESPACE} and ${TEST_NAMESPACE}" + deleteWithWait namespace "${ISTIO_NAMESPACE}" + deleteWithWait namespace "${TEST_NAMESPACE}" + echo "All namespaces deleted. Recreating ${ISTIO_NAMESPACE} and ${TEST_NAMESPACE}" - sleep ${sleep_time_sec} - (( sleep_time_sofar += sleep_time_sec )) - if (( sleep_time_sofar > 300 )); then - echo "Timed out waiting for 200 from echosrv." - exit 1 - fi - done + echo_and_run_or_die kubectl create namespace "${ISTIO_NAMESPACE}" + echo_and_run_or_die kubectl create namespace "${TEST_NAMESPACE}" + echo_and_run_or_die kubectl label namespace "${TEST_NAMESPACE}" istio-injection=enabled } # Returns 0 if the passed string has form "Code 200 : 6601 (94.6 %)" and the percentage is smaller than ${MIN_200_PCT_FOR_PASS} @@ -304,24 +380,31 @@ copy_test_files() { copy_test_files -kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user="$(gcloud config get-value core/account)" || echo "clusterrolebinding already created." +# create cluster admin role binding +user="cluster-admin" +if [[ $CLOUD == "GKE" ]];then + user="$(gcloud config get-value core/account)" +fi +kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user="${user}" || echo "clusterrolebinding already created." + -pushd "${ISTIO_ROOT}" || exit 1 +echo_and_run pushd "${ISTIO_ROOT}" -resetNamespaces +resetCluster installIstioSystemAtVersionHelmTemplate "${FROM_HUB}" "${FROM_TAG}" "${FROM_PATH}" waitForIngress waitForPodsReady "${ISTIO_NAMESPACE}" # Make a copy of the "from" sidecar injector ConfigMap so we can restore the sidecar independently later. -kubectl get ConfigMap -n "${ISTIO_NAMESPACE}" istio-sidecar-injector -o yaml > ${TMP_DIR}/sidecar-injector-configmap.yaml || die "copy ConfigMap failed" +echo_and_run kubectl get ConfigMap -n "${ISTIO_NAMESPACE}" istio-sidecar-injector -o yaml > ${TMP_DIR}/sidecar-injector-configmap.yaml installTest waitForPodsReady "${TEST_NAMESPACE}" checkEchosrv -sendInternalRequestTraffic +# Run internal traffic in the background since we may have to relaunch it if the job fails. +sendInternalRequestTraffic & sendExternalRequestTraffic "${INGRESS_ADDR}" # Let traffic clients establish all connections. There's some small startup delay, this covers it. echo "Waiting for traffic to settle..." @@ -339,23 +422,24 @@ sleep 140 # Now do a rollback. In a rollback, we update the data plane first. writeMsg "Starting rollback - first, rolling back data plane to ${TO_PATH}" -kubectl delete ConfigMap -n "${ISTIO_NAMESPACE}" istio-sidecar-injector -sleep 5 -kubectl create -n "${ISTIO_NAMESPACE}" -f "${TMP_DIR}"/sidecar-injector-configmap.yaml +resetConfigMap istio-sidecar-injector "${TMP_DIR}"/sidecar-injector-configmap.yaml restartDataPlane echosrv-deployment-v1 sleep 140 + installIstioSystemAtVersionHelmTemplate "${FROM_HUB}" "${FROM_TAG}" "${FROM_PATH}" waitForPodsReady "${ISTIO_NAMESPACE}" echo "Test ran for ${SECONDS} seconds." if (( SECONDS > TRAFFIC_RUNTIME_SEC )); then - writeMsg "WARNING: test duration was ${SECONDS} but traffic only ran for ${TRAFFIC_RUNTIME_SEC}" + echo "WARNING: test duration was ${SECONDS} but traffic only ran for ${TRAFFIC_RUNTIME_SEC}" fi cli_pod_name=$(kubectl -n "${TEST_NAMESPACE}" get pods -lapp=cli-fortio -o jsonpath='{.items[0].metadata.name}') echo "Traffic client pod is ${cli_pod_name}, waiting for traffic to complete..." +waitForJob cli-fortio kubectl logs -f -n "${TEST_NAMESPACE}" -c echosrv "${cli_pod_name}" &> "${POD_FORTIO_LOG}" || echo "Could not find ${cli_pod_name}" +waitForExternalRequestTraffic local_log_str=$(grep "Code 200" "${LOCAL_FORTIO_LOG}") pod_log_str=$(grep "Code 200" "${POD_FORTIO_LOG}") @@ -384,7 +468,7 @@ else echo "=== Errors found in internal traffic is within ${MIN_200_PCT_FOR_PASS}% threshold ===" fi -popd || exit 1 +echo_and_run popd if [ -n "${failed}" ]; then exit 1 diff --git a/tests/util/kube_utils.go b/tests/util/kube_utils.go index f86825651c60..46046495e88d 100644 --- a/tests/util/kube_utils.go +++ b/tests/util/kube_utils.go @@ -625,11 +625,16 @@ func CheckDeployments(namespace string, timeout time.Duration, kubeconfig string defer cancel() g, ctx := errgroup.WithContext(ctx) deployments := strings.Fields(out) + deploymentStart := time.Now() for i := range deployments { deployment := deployments[i] g.Go(func() error { return CheckDeployment(ctx, namespace, deployment, kubeconfig) }) } - return g.Wait() + gerr := g.Wait() + t := time.Now() + elapsed := t.Sub(deploymentStart) + log.Infof("Deployment rollout ends after [%v] with err [%v]", elapsed, gerr) + return gerr } // FetchAndSaveClusterLogs will dump the logs for a cluster. diff --git a/tools/deb/envoy_bootstrap_v2.json b/tools/deb/envoy_bootstrap_v2.json index d9ff498bfa64..3293ef62a8c0 100644 --- a/tools/deb/envoy_bootstrap_v2.json +++ b/tools/deb/envoy_bootstrap_v2.json @@ -80,7 +80,7 @@ "address": { "socket_address": { "address": "127.0.0.1", - "port_value": 15000 + "port_value": {{ .config.ProxyAdminPort }} } } }, @@ -114,7 +114,7 @@ "socket_address": { "protocol": "TCP", "address": "127.0.0.1", - "port_value": 15000 + "port_value": {{ .config.ProxyAdminPort }} } } ] diff --git a/tools/deb/istio-iptables.sh b/tools/deb/istio-iptables.sh index 316d63924d27..83913b191438 100755 --- a/tools/deb/istio-iptables.sh +++ b/tools/deb/istio-iptables.sh @@ -339,5 +339,6 @@ if [ -z "${ENABLE_INBOUND_IPV6}" ]; then # TODO: support receiving IPv6 traffic in the same way as IPv4. ip6tables -F INPUT || true ip6tables -A INPUT -m state --state ESTABLISHED -j ACCEPT || true + ip6tables -A INPUT -i lo -d ::1 -j ACCEPT || true ip6tables -A INPUT -j REJECT || true fi diff --git a/vendor/github.com/envoyproxy/go-control-plane/.circleci/config.yml b/vendor/github.com/envoyproxy/go-control-plane/.circleci/config.yml index 04e63ab733b5..5e6f948ffdcd 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/.circleci/config.yml +++ b/vendor/github.com/envoyproxy/go-control-plane/.circleci/config.yml @@ -3,7 +3,7 @@ jobs: build: working_directory: /go/src/github.com/envoyproxy/go-control-plane docker: - - image: circleci/golang:1.10 + - image: circleci/golang:1.11 steps: - checkout - run: make depend.install diff --git a/vendor/github.com/envoyproxy/go-control-plane/Dockerfile b/vendor/github.com/envoyproxy/go-control-plane/Dockerfile index 0b078df53f2e..14f196e7fd88 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/Dockerfile +++ b/vendor/github.com/envoyproxy/go-control-plane/Dockerfile @@ -1,6 +1,15 @@ +FROM golang:latest +WORKDIR /go/src/github.com/envoyproxy/go-control-plane/ +ARG test_out_bin=bin/test-linux +ENV CGO_ENABLED 1 +ENV GOOS linux +ENV GOARCH amd64 +COPY . . +RUN go build -race -o ${test_out_bin} pkg/test/main/main.go + # Integration test docker file FROM envoyproxy/envoy:latest ADD sample /sample ADD build/integration.sh build/integration.sh -ADD bin/test-linux /bin/test +COPY --from=0 /go/src/github.com/envoyproxy/go-control-plane/bin/test-linux /bin/test ENTRYPOINT ["build/integration.sh"] diff --git a/vendor/github.com/envoyproxy/go-control-plane/Makefile b/vendor/github.com/envoyproxy/go-control-plane/Makefile index d3caa1c4b9ca..7ed099eba649 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/Makefile +++ b/vendor/github.com/envoyproxy/go-control-plane/Makefile @@ -70,7 +70,7 @@ $(BINDIR)/test-linux: vendor @echo "--> building Linux test binary" @env GOOS=linux GOARCH=amd64 go build -race -o $@ pkg/test/main/main.go -docker: $(BINDIR)/test-linux +docker: vendor @echo "--> building test docker image" @docker build -t test . @@ -89,6 +89,9 @@ integration.docker: docker docker run -it -e "XDS=ads" test -debug docker run -it -e "XDS=xds" test -debug docker run -it -e "XDS=rest" test -debug + docker run -it -e "XDS=ads" test -debug -tls + docker run -it -e "XDS=xds" test -debug -tls + docker run -it -e "XDS=rest" test -debug -tls #----------------- #-- code generaion diff --git a/vendor/github.com/envoyproxy/go-control-plane/README.md b/vendor/github.com/envoyproxy/go-control-plane/README.md index 683c10c7925c..da136038ab8f 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/README.md +++ b/vendor/github.com/envoyproxy/go-control-plane/README.md @@ -95,7 +95,7 @@ import ( ) func main() { - snapshotCache := cache.NewSnapshotCache(false, hash{}, nil) + snapshotCache := cache.NewSnapshotCache(false, hash{}, nil) server := xds.NewServer(snapshotCache, nil) grpcServer := grpc.NewServer() lis, _ := net.Listen("tcp", ":8080") diff --git a/vendor/github.com/envoyproxy/go-control-plane/build/generate_protos.sh b/vendor/github.com/envoyproxy/go-control-plane/build/generate_protos.sh index e4c976f25de5..b745ca9e2207 100755 --- a/vendor/github.com/envoyproxy/go-control-plane/build/generate_protos.sh +++ b/vendor/github.com/envoyproxy/go-control-plane/build/generate_protos.sh @@ -18,7 +18,7 @@ imports=( "${root}/vendor/github.com/gogo/protobuf/protobuf" "${root}/vendor/istio.io/gogo-genproto/prometheus" "${root}/vendor/istio.io/gogo-genproto/googleapis" - "${root}/vendor/istio.io/gogo-genproto/opencensus/proto/trace" + "${root}/vendor/istio.io/gogo-genproto/opencensus/proto/trace/v1" ) protocarg="" @@ -40,7 +40,7 @@ mappings=( "google/protobuf/timestamp.proto=github.com/gogo/protobuf/types" "google/protobuf/wrappers.proto=github.com/gogo/protobuf/types" "gogoproto/gogo.proto=github.com/gogo/protobuf/gogoproto" - "trace.proto=istio.io/gogo-genproto/opencensus/proto/trace" + "trace.proto=istio.io/gogo-genproto/opencensus/proto/trace/v1" "metrics.proto=istio.io/gogo-genproto/prometheus" ) diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/certs.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/certs.pb.go index ff8971fd7e9a..fb62cd5ba34e 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/certs.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/certs.pb.go @@ -36,7 +36,7 @@ func (m *Certificates) Reset() { *m = Certificates{} } func (m *Certificates) String() string { return proto.CompactTextString(m) } func (*Certificates) ProtoMessage() {} func (*Certificates) Descriptor() ([]byte, []int) { - return fileDescriptor_certs_07f39bcb118e2f62, []int{0} + return fileDescriptor_certs_eece479c43bfc687, []int{0} } func (m *Certificates) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -86,7 +86,7 @@ func (m *Certificate) Reset() { *m = Certificate{} } func (m *Certificate) String() string { return proto.CompactTextString(m) } func (*Certificate) ProtoMessage() {} func (*Certificate) Descriptor() ([]byte, []int) { - return fileDescriptor_certs_07f39bcb118e2f62, []int{1} + return fileDescriptor_certs_eece479c43bfc687, []int{1} } func (m *Certificate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -151,7 +151,7 @@ func (m *CertificateDetails) Reset() { *m = CertificateDetails{} } func (m *CertificateDetails) String() string { return proto.CompactTextString(m) } func (*CertificateDetails) ProtoMessage() {} func (*CertificateDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_certs_07f39bcb118e2f62, []int{2} + return fileDescriptor_certs_eece479c43bfc687, []int{2} } func (m *CertificateDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -238,7 +238,7 @@ func (m *SubjectAlternateName) Reset() { *m = SubjectAlternateName{} } func (m *SubjectAlternateName) String() string { return proto.CompactTextString(m) } func (*SubjectAlternateName) ProtoMessage() {} func (*SubjectAlternateName) Descriptor() ([]byte, []int) { - return fileDescriptor_certs_07f39bcb118e2f62, []int{3} + return fileDescriptor_certs_eece479c43bfc687, []int{3} } func (m *SubjectAlternateName) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1340,36 +1340,37 @@ var ( ) func init() { - proto.RegisterFile("envoy/admin/v2alpha/certs.proto", fileDescriptor_certs_07f39bcb118e2f62) + proto.RegisterFile("envoy/admin/v2alpha/certs.proto", fileDescriptor_certs_eece479c43bfc687) } -var fileDescriptor_certs_07f39bcb118e2f62 = []byte{ - // 423 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xbf, 0x6e, 0x13, 0x41, - 0x10, 0xc6, 0x59, 0xdb, 0x18, 0x79, 0x6c, 0x88, 0xd8, 0x80, 0x74, 0x4a, 0xe1, 0x9c, 0x4c, 0x81, - 0x69, 0xee, 0x24, 0x53, 0xd1, 0x41, 0x1c, 0x2c, 0xaa, 0x14, 0x47, 0x52, 0xaf, 0xc6, 0x77, 0xeb, - 0x78, 0xd1, 0xfe, 0x39, 0xed, 0xee, 0x59, 0xe4, 0x49, 0x78, 0x25, 0x4a, 0x4a, 0x4a, 0xe4, 0x27, - 0x41, 0xbb, 0x97, 0x3f, 0x46, 0x58, 0xb2, 0xd2, 0xdd, 0x7c, 0xdf, 0xf7, 0x9b, 0x9d, 0x1b, 0x0d, - 0x9c, 0x72, 0xbd, 0x31, 0x37, 0x39, 0x56, 0x4a, 0xe8, 0x7c, 0x33, 0x43, 0x59, 0xaf, 0x31, 0x2f, - 0xb9, 0xf5, 0x2e, 0xab, 0xad, 0xf1, 0x86, 0x1e, 0xc7, 0x40, 0x16, 0x03, 0xd9, 0x6d, 0xe0, 0xe4, - 0xf4, 0xda, 0x98, 0x6b, 0xc9, 0xf3, 0x18, 0x59, 0x36, 0xab, 0xdc, 0x0b, 0xc5, 0x9d, 0x47, 0x55, - 0xb7, 0xd4, 0xe4, 0x12, 0x46, 0x73, 0x6e, 0xbd, 0x58, 0x89, 0x12, 0x3d, 0x77, 0xf4, 0x1c, 0x46, - 0xe5, 0x4e, 0x9d, 0x90, 0xb4, 0x3b, 0x1d, 0xce, 0xd2, 0x6c, 0x4f, 0xf3, 0x6c, 0x07, 0x2c, 0xfe, - 0xa1, 0x26, 0x3f, 0x08, 0x0c, 0x77, 0x5c, 0xfa, 0x11, 0x9e, 0x95, 0xc8, 0x42, 0xe4, 0xb6, 0xe1, - 0xdb, 0x43, 0x0d, 0xcf, 0xb9, 0x47, 0x21, 0x5d, 0xd1, 0x2f, 0x31, 0xa8, 0x74, 0x01, 0x10, 0x70, - 0x56, 0xae, 0x51, 0xe8, 0xa4, 0xf3, 0xb8, 0x26, 0x83, 0x80, 0xce, 0x03, 0x39, 0xf9, 0xdd, 0x01, - 0xfa, 0x7f, 0x82, 0x52, 0xe8, 0xd5, 0xe8, 0xd7, 0x09, 0x49, 0xc9, 0x74, 0x50, 0xc4, 0x6f, 0xfa, - 0x06, 0x9e, 0x3b, 0x6e, 0x05, 0x4a, 0xa6, 0x1b, 0xb5, 0xe4, 0x36, 0xe9, 0x44, 0x73, 0xd4, 0x8a, - 0x17, 0x51, 0xa3, 0x57, 0xf0, 0xd2, 0x35, 0xcb, 0x6f, 0xbc, 0xf4, 0x0c, 0xa5, 0x67, 0x1a, 0x15, - 0x77, 0x49, 0x37, 0x8e, 0xf7, 0x6e, 0xef, 0x78, 0x5f, 0xdb, 0xf4, 0x27, 0xe9, 0xb9, 0xd5, 0xe8, - 0xf9, 0x05, 0x2a, 0x5e, 0x1c, 0xb9, 0x7b, 0x35, 0xd4, 0x8e, 0xce, 0xe0, 0x75, 0x85, 0x37, 0x8e, - 0x35, 0xda, 0x0b, 0xc9, 0xf8, 0xf7, 0x5a, 0x58, 0xf4, 0xc2, 0xe8, 0xa4, 0x97, 0x92, 0x69, 0xaf, - 0x38, 0x0e, 0xe6, 0x55, 0xf0, 0x3e, 0xdf, 0x5b, 0xf4, 0x03, 0xc0, 0x06, 0xa5, 0xa8, 0xd8, 0xca, - 0x1a, 0x95, 0x3c, 0x4d, 0xc9, 0x74, 0x38, 0x3b, 0xc9, 0xda, 0x03, 0xc8, 0xee, 0x0e, 0x20, 0xbb, - 0xbc, 0x3b, 0x80, 0x62, 0x10, 0xd3, 0x0b, 0x6b, 0x14, 0x9d, 0xc3, 0xd1, 0xc3, 0x1b, 0x2c, 0xdc, - 0x48, 0xd2, 0x3f, 0xc8, 0xbf, 0x78, 0x40, 0x82, 0x38, 0x59, 0xc0, 0xab, 0x7d, 0x3f, 0x47, 0x29, - 0x74, 0x2b, 0xed, 0xda, 0xd5, 0x7e, 0x79, 0x52, 0x84, 0x22, 0x68, 0x8d, 0x15, 0xed, 0x46, 0x83, - 0xd6, 0x58, 0x71, 0xd6, 0x87, 0x5e, 0x58, 0xdf, 0xd9, 0xe8, 0xe7, 0x76, 0x4c, 0x7e, 0x6d, 0xc7, - 0xe4, 0xcf, 0x76, 0x4c, 0x96, 0xfd, 0xf8, 0xf2, 0xfb, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf3, - 0x50, 0x68, 0x65, 0x00, 0x03, 0x00, 0x00, +var fileDescriptor_certs_eece479c43bfc687 = []byte{ + // 434 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0xcb, 0x6e, 0x13, 0x31, + 0x14, 0xc5, 0x49, 0x08, 0xca, 0x4d, 0xa0, 0xc2, 0x05, 0x69, 0xd4, 0x45, 0x3a, 0x84, 0x05, 0x61, + 0x33, 0x23, 0xc2, 0x8a, 0x1d, 0x34, 0x25, 0x62, 0x55, 0xa1, 0xa1, 0x5d, 0x5b, 0x37, 0x13, 0xa7, + 0x31, 0xf2, 0x63, 0x64, 0x7b, 0xa2, 0xe6, 0x4b, 0xf8, 0x25, 0x96, 0x2c, 0x59, 0xa2, 0x7c, 0x09, + 0xb2, 0xa7, 0x8f, 0x20, 0x22, 0x55, 0xdd, 0xcd, 0x3d, 0x8f, 0x3b, 0xd7, 0x47, 0x07, 0x8e, 0xb9, + 0x5e, 0x9b, 0x4d, 0x8e, 0x0b, 0x25, 0x74, 0xbe, 0x9e, 0xa0, 0xac, 0x56, 0x98, 0x97, 0xdc, 0x7a, + 0x97, 0x55, 0xd6, 0x78, 0x43, 0x0f, 0xa3, 0x20, 0x8b, 0x82, 0xec, 0x5a, 0x70, 0x74, 0x7c, 0x69, + 0xcc, 0xa5, 0xe4, 0x79, 0x94, 0xcc, 0xeb, 0x65, 0xee, 0x85, 0xe2, 0xce, 0xa3, 0xaa, 0x1a, 0xd7, + 0xe8, 0x1c, 0x06, 0x53, 0x6e, 0xbd, 0x58, 0x8a, 0x12, 0x3d, 0x77, 0xf4, 0x14, 0x06, 0xe5, 0xce, + 0x9c, 0x90, 0xb4, 0x3d, 0xee, 0x4f, 0xd2, 0x6c, 0xcf, 0xf2, 0x6c, 0xc7, 0x58, 0xfc, 0xe3, 0x1a, + 0xfd, 0x20, 0xd0, 0xdf, 0x61, 0xe9, 0x47, 0x78, 0x52, 0x22, 0x0b, 0x92, 0xeb, 0x85, 0x6f, 0xee, + 0x5b, 0x78, 0xca, 0x3d, 0x0a, 0xe9, 0x8a, 0x6e, 0x89, 0x01, 0xa5, 0x33, 0x80, 0x60, 0x67, 0xe5, + 0x0a, 0x85, 0x4e, 0x5a, 0x0f, 0x5b, 0xd2, 0x0b, 0xd6, 0x69, 0x70, 0x8e, 0x7e, 0xb7, 0x80, 0xfe, + 0xaf, 0xa0, 0x14, 0x3a, 0x15, 0xfa, 0x55, 0x42, 0x52, 0x32, 0xee, 0x15, 0xf1, 0x9b, 0xbe, 0x86, + 0xa7, 0x8e, 0x5b, 0x81, 0x92, 0xe9, 0x5a, 0xcd, 0xb9, 0x4d, 0x5a, 0x91, 0x1c, 0x34, 0xe0, 0x59, + 0xc4, 0xe8, 0x05, 0x3c, 0x77, 0xf5, 0xfc, 0x3b, 0x2f, 0x3d, 0x43, 0xe9, 0x99, 0x46, 0xc5, 0x5d, + 0xd2, 0x8e, 0xe7, 0xbd, 0xdd, 0x7b, 0xde, 0xb7, 0x46, 0xfd, 0x49, 0x7a, 0x6e, 0x35, 0x7a, 0x7e, + 0x86, 0x8a, 0x17, 0x07, 0xee, 0x16, 0x0d, 0xb3, 0xa3, 0x13, 0x78, 0xb9, 0xc0, 0x8d, 0x63, 0xb5, + 0xf6, 0x42, 0x32, 0x7e, 0x55, 0x09, 0x8b, 0x5e, 0x18, 0x9d, 0x74, 0x52, 0x32, 0xee, 0x14, 0x87, + 0x81, 0xbc, 0x08, 0xdc, 0xe7, 0x5b, 0x8a, 0x7e, 0x00, 0x58, 0xa3, 0x14, 0x0b, 0xb6, 0xb4, 0x46, + 0x25, 0x8f, 0x53, 0x32, 0xee, 0x4f, 0x8e, 0xb2, 0xa6, 0x00, 0xd9, 0x4d, 0x01, 0xb2, 0xf3, 0x9b, + 0x02, 0x14, 0xbd, 0xa8, 0x9e, 0x59, 0xa3, 0xe8, 0x14, 0x0e, 0xee, 0xfe, 0xc1, 0x42, 0x47, 0x92, + 0xee, 0xbd, 0xfe, 0x67, 0x77, 0x96, 0x00, 0x8e, 0x66, 0xf0, 0x62, 0xdf, 0xe3, 0x28, 0x85, 0xf6, + 0x42, 0xbb, 0x26, 0xda, 0x2f, 0x8f, 0x8a, 0x30, 0x04, 0xac, 0xb6, 0xa2, 0x49, 0x34, 0x60, 0xb5, + 0x15, 0x27, 0x5d, 0xe8, 0x84, 0xf8, 0x4e, 0xde, 0xfd, 0xdc, 0x0e, 0xc9, 0xaf, 0xed, 0x90, 0xfc, + 0xd9, 0x0e, 0x09, 0xbc, 0x12, 0xa6, 0xc9, 0xb1, 0xb2, 0xe6, 0x6a, 0xb3, 0x2f, 0xd2, 0xaf, 0x64, + 0xde, 0x8d, 0xe7, 0xbd, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x91, 0x71, 0x59, 0xdb, 0x25, 0x03, + 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/clusters.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/clusters.pb.go index ffb52537cea2..41afce0836c2 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/clusters.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/clusters.pb.go @@ -36,7 +36,7 @@ func (m *Clusters) Reset() { *m = Clusters{} } func (m *Clusters) String() string { return proto.CompactTextString(m) } func (*Clusters) ProtoMessage() {} func (*Clusters) Descriptor() ([]byte, []int) { - return fileDescriptor_clusters_286fa536371f0ae5, []int{0} + return fileDescriptor_clusters_91c18532ae795809, []int{0} } func (m *Clusters) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -101,7 +101,7 @@ func (m *ClusterStatus) Reset() { *m = ClusterStatus{} } func (m *ClusterStatus) String() string { return proto.CompactTextString(m) } func (*ClusterStatus) ProtoMessage() {} func (*ClusterStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_clusters_286fa536371f0ae5, []int{1} + return fileDescriptor_clusters_91c18532ae795809, []int{1} } func (m *ClusterStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -183,7 +183,7 @@ func (m *HostStatus) Reset() { *m = HostStatus{} } func (m *HostStatus) String() string { return proto.CompactTextString(m) } func (*HostStatus) ProtoMessage() {} func (*HostStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_clusters_286fa536371f0ae5, []int{2} + return fileDescriptor_clusters_91c18532ae795809, []int{2} } func (m *HostStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -253,6 +253,8 @@ type HostHealthStatus struct { FailedActiveHealthCheck bool `protobuf:"varint,1,opt,name=failed_active_health_check,json=failedActiveHealthCheck,proto3" json:"failed_active_health_check,omitempty"` // The host is currently considered an outlier and has been ejected. FailedOutlierCheck bool `protobuf:"varint,2,opt,name=failed_outlier_check,json=failedOutlierCheck,proto3" json:"failed_outlier_check,omitempty"` + // The host is currently being marked as degraded through active health checking. + FailedActiveDegradedCheck bool `protobuf:"varint,4,opt,name=failed_active_degraded_check,json=failedActiveDegradedCheck,proto3" json:"failed_active_degraded_check,omitempty"` // Health status as reported by EDS. Note: only HEALTHY and UNHEALTHY are currently supported // here. // TODO(mrice32): pipe through remaining EDS health status possibilities. @@ -266,7 +268,7 @@ func (m *HostHealthStatus) Reset() { *m = HostHealthStatus{} } func (m *HostHealthStatus) String() string { return proto.CompactTextString(m) } func (*HostHealthStatus) ProtoMessage() {} func (*HostHealthStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_clusters_286fa536371f0ae5, []int{3} + return fileDescriptor_clusters_91c18532ae795809, []int{3} } func (m *HostHealthStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -309,6 +311,13 @@ func (m *HostHealthStatus) GetFailedOutlierCheck() bool { return false } +func (m *HostHealthStatus) GetFailedActiveDegradedCheck() bool { + if m != nil { + return m.FailedActiveDegradedCheck + } + return false +} + func (m *HostHealthStatus) GetEdsHealthStatus() core.HealthStatus { if m != nil { return m.EdsHealthStatus @@ -522,6 +531,16 @@ func (m *HostHealthStatus) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintClusters(dAtA, i, uint64(m.EdsHealthStatus)) } + if m.FailedActiveDegradedCheck { + dAtA[i] = 0x20 + i++ + if m.FailedActiveDegradedCheck { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -632,6 +651,9 @@ func (m *HostHealthStatus) Size() (n int) { if m.EdsHealthStatus != 0 { n += 1 + sovClusters(uint64(m.EdsHealthStatus)) } + if m.FailedActiveDegradedCheck { + n += 2 + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -1185,6 +1207,26 @@ func (m *HostHealthStatus) Unmarshal(dAtA []byte) error { break } } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FailedActiveDegradedCheck", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowClusters + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.FailedActiveDegradedCheck = bool(v != 0) default: iNdEx = preIndex skippy, err := skipClusters(dAtA[iNdEx:]) @@ -1313,42 +1355,44 @@ var ( ) func init() { - proto.RegisterFile("envoy/admin/v2alpha/clusters.proto", fileDescriptor_clusters_286fa536371f0ae5) + proto.RegisterFile("envoy/admin/v2alpha/clusters.proto", fileDescriptor_clusters_91c18532ae795809) } -var fileDescriptor_clusters_286fa536371f0ae5 = []byte{ - // 522 bytes of a gzipped FileDescriptorProto +var fileDescriptor_clusters_91c18532ae795809 = []byte{ + // 560 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0xd1, 0x6e, 0xd3, 0x3e, - 0x18, 0xc5, 0xe5, 0xae, 0xdb, 0xbf, 0x7f, 0xb7, 0x61, 0xc3, 0x43, 0x10, 0x55, 0xa8, 0xcd, 0x22, - 0x90, 0x72, 0x95, 0xa0, 0x80, 0xe0, 0x82, 0xab, 0x32, 0x90, 0x26, 0xd0, 0x04, 0xca, 0x10, 0x12, - 0xdc, 0x58, 0xc6, 0xfe, 0x20, 0x86, 0x34, 0x89, 0x62, 0x37, 0x68, 0x4f, 0xc2, 0x2b, 0x71, 0x85, - 0x78, 0x04, 0xd4, 0x3b, 0xde, 0x02, 0xd5, 0x76, 0xd7, 0x8c, 0x75, 0x77, 0x71, 0xbe, 0xdf, 0x69, - 0xcf, 0x39, 0x9f, 0x83, 0x43, 0x28, 0xdb, 0xea, 0x3c, 0x61, 0x62, 0x2e, 0xcb, 0xa4, 0x4d, 0x59, - 0x51, 0xe7, 0x2c, 0xe1, 0xc5, 0x42, 0x69, 0x68, 0x54, 0x5c, 0x37, 0x95, 0xae, 0xc8, 0xa1, 0x61, - 0x62, 0xc3, 0xc4, 0x8e, 0x19, 0x1f, 0x6d, 0x13, 0xce, 0x41, 0x37, 0x92, 0x3b, 0xdd, 0x78, 0xea, - 0x90, 0x5a, 0x26, 0x6d, 0x9a, 0xf0, 0xaa, 0x81, 0x84, 0x09, 0xd1, 0x80, 0x5a, 0x03, 0xf7, 0xae, - 0x02, 0x39, 0xb0, 0x42, 0xe7, 0x94, 0xe7, 0xc0, 0xbf, 0x3a, 0xca, 0xb7, 0x94, 0x3e, 0xaf, 0x21, - 0xa9, 0xa1, 0xe1, 0x50, 0x6a, 0x3b, 0x09, 0xdf, 0xe3, 0xc1, 0xb1, 0xb3, 0x4a, 0x4e, 0xf1, 0x81, - 0xb3, 0x4d, 0x95, 0x66, 0x7a, 0xa1, 0x40, 0xf9, 0x28, 0xd8, 0x89, 0x86, 0x69, 0x18, 0x6f, 0xf1, - 0x1f, 0x3b, 0xe1, 0x99, 0x61, 0xb3, 0x7d, 0xde, 0x3d, 0x82, 0x0a, 0xff, 0x20, 0xec, 0x5d, 0x42, - 0x08, 0xc1, 0xfd, 0x92, 0xcd, 0xc1, 0x47, 0x01, 0x8a, 0xfe, 0xcf, 0xcc, 0x33, 0x09, 0xb1, 0xc7, - 0x84, 0x00, 0x41, 0x5b, 0xc9, 0x28, 0xab, 0xa5, 0xdf, 0x0b, 0x50, 0x34, 0xc8, 0x86, 0xe6, 0xe5, - 0x3b, 0xc9, 0x66, 0xb5, 0x24, 0x1f, 0xf0, 0x54, 0x2d, 0x38, 0x07, 0xa5, 0x68, 0xc3, 0x34, 0x50, - 0xf8, 0x02, 0x5c, 0xcb, 0xaa, 0xa4, 0x3a, 0x6f, 0x40, 0xe5, 0x55, 0x21, 0xfc, 0x9d, 0x00, 0x45, - 0xc3, 0xf4, 0xd0, 0xf9, 0x5c, 0x05, 0x8d, 0xdf, 0xd8, 0xa0, 0xd9, 0x5d, 0xa7, 0xcd, 0x98, 0x86, - 0x17, 0x4e, 0xf9, 0x76, 0x2d, 0x24, 0xcf, 0xb1, 0x97, 0x57, 0x4a, 0x6f, 0x12, 0xf7, 0x4d, 0xe2, - 0xe9, 0xd6, 0xc4, 0x27, 0x95, 0xd2, 0x2e, 0xee, 0x28, 0xbf, 0x78, 0x06, 0x15, 0x7e, 0xef, 0x61, - 0xbc, 0x19, 0x92, 0x47, 0xf8, 0x3f, 0xb7, 0x26, 0x93, 0x75, 0x98, 0x8e, 0xd7, 0x3f, 0x57, 0xcb, - 0xb8, 0x4d, 0xe3, 0xd5, 0x9e, 0xe2, 0x99, 0x25, 0xb2, 0x35, 0x4a, 0x9e, 0xe0, 0xdd, 0x95, 0x0b, - 0xe5, 0xf7, 0x8c, 0x85, 0xa3, 0xad, 0x16, 0xce, 0xe4, 0xbc, 0x2e, 0xe0, 0xd4, 0xdc, 0x92, 0xcc, - 0xf2, 0xe4, 0x25, 0xf6, 0xdc, 0xd2, 0x6d, 0x0a, 0xd7, 0xc6, 0xfd, 0x6b, 0x33, 0x9c, 0x18, 0xfa, - 0x22, 0x49, 0xe7, 0x44, 0x1e, 0xe3, 0x51, 0xb7, 0x6b, 0xbf, 0x7f, 0x7d, 0xb1, 0xc3, 0x4e, 0xb1, - 0xe4, 0x36, 0xde, 0xfb, 0x06, 0xf2, 0x73, 0xae, 0xfd, 0xdd, 0x00, 0x45, 0x5e, 0xe6, 0x4e, 0xe1, - 0x4f, 0x84, 0x0f, 0xfe, 0xfd, 0x4b, 0xf2, 0x14, 0x8f, 0x3f, 0x31, 0x59, 0x80, 0xa0, 0x8c, 0x6b, - 0xd9, 0x02, 0xed, 0xde, 0x59, 0x53, 0xd9, 0x20, 0xbb, 0x63, 0x89, 0x99, 0x01, 0xac, 0xfa, 0x78, - 0x35, 0x26, 0x0f, 0xf0, 0x2d, 0x27, 0xae, 0x16, 0xba, 0x90, 0xd0, 0x38, 0x99, 0xbd, 0x38, 0xc4, - 0xce, 0x5e, 0xdb, 0x91, 0x55, 0xbc, 0xc2, 0x37, 0x41, 0x28, 0x7a, 0xb5, 0xa3, 0x1b, 0x9b, 0x3d, - 0x77, 0x16, 0x73, 0xa9, 0x9d, 0x7d, 0x10, 0xaa, 0xfb, 0xe2, 0xd9, 0xe8, 0xc7, 0x72, 0x82, 0x7e, - 0x2d, 0x27, 0xe8, 0xf7, 0x72, 0x82, 0x3e, 0xee, 0x99, 0xcf, 0xe8, 0xe1, 0xdf, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x0d, 0x2e, 0xc0, 0x4e, 0x05, 0x04, 0x00, 0x00, + 0x14, 0xc6, 0xe5, 0xae, 0xdb, 0x7f, 0x7f, 0x77, 0x65, 0xc3, 0x43, 0x10, 0xaa, 0x69, 0x6d, 0x23, + 0x90, 0x7a, 0x95, 0x40, 0x40, 0x70, 0xc1, 0x05, 0x2a, 0x1b, 0xd2, 0x04, 0x9a, 0x98, 0x32, 0x84, + 0x04, 0x37, 0x91, 0xb1, 0x0f, 0x8b, 0x21, 0xad, 0x23, 0xdb, 0x0d, 0xf4, 0x29, 0xb8, 0xe4, 0x95, + 0xb8, 0xe4, 0x11, 0x50, 0xef, 0x78, 0x0b, 0x54, 0xdb, 0x5d, 0x53, 0xd6, 0xdd, 0xd9, 0x39, 0xbf, + 0x2f, 0xf9, 0xbe, 0x73, 0x4e, 0x70, 0x08, 0xe3, 0x4a, 0x4e, 0x63, 0xca, 0x47, 0x62, 0x1c, 0x57, + 0x09, 0x2d, 0xca, 0x9c, 0xc6, 0xac, 0x98, 0x68, 0x03, 0x4a, 0x47, 0xa5, 0x92, 0x46, 0x92, 0x7d, + 0xcb, 0x44, 0x96, 0x89, 0x3c, 0xd3, 0xe9, 0xaf, 0x13, 0x8e, 0xc0, 0x28, 0xc1, 0xbc, 0xae, 0xd3, + 0xf5, 0x48, 0x29, 0xe2, 0x2a, 0x89, 0x99, 0x54, 0x10, 0x53, 0xce, 0x15, 0xe8, 0x05, 0x70, 0xef, + 0x2a, 0x90, 0x03, 0x2d, 0x4c, 0x9e, 0xb1, 0x1c, 0xd8, 0x17, 0x4f, 0x05, 0x8e, 0x32, 0xd3, 0x12, + 0xe2, 0x12, 0x14, 0x83, 0xb1, 0x71, 0x95, 0xf0, 0x3d, 0xde, 0x3e, 0xf2, 0x56, 0xc9, 0x29, 0xde, + 0xf3, 0xb6, 0x33, 0x6d, 0xa8, 0x99, 0x68, 0xd0, 0x01, 0xea, 0x6d, 0x0c, 0x5a, 0x49, 0x18, 0xad, + 0xf1, 0x1f, 0x79, 0xe1, 0xb9, 0x65, 0xd3, 0x5d, 0x56, 0xbf, 0x82, 0x0e, 0xff, 0x20, 0xdc, 0x5e, + 0x41, 0x08, 0xc1, 0xcd, 0x31, 0x1d, 0x41, 0x80, 0x7a, 0x68, 0xf0, 0x7f, 0x6a, 0xcf, 0x24, 0xc4, + 0x6d, 0xca, 0x39, 0xf0, 0xac, 0x12, 0x34, 0xa3, 0xa5, 0x08, 0x1a, 0x3d, 0x34, 0xd8, 0x4e, 0x5b, + 0xf6, 0xe1, 0x3b, 0x41, 0x87, 0xa5, 0x20, 0x1f, 0x70, 0x57, 0x4f, 0x18, 0x03, 0xad, 0x33, 0x45, + 0x0d, 0x64, 0xf0, 0x19, 0x98, 0x11, 0x72, 0x9c, 0x99, 0x5c, 0x81, 0xce, 0x65, 0xc1, 0x83, 0x8d, + 0x1e, 0x1a, 0xb4, 0x92, 0x7d, 0xef, 0x73, 0x1e, 0x34, 0x3a, 0x73, 0x41, 0xd3, 0x03, 0xaf, 0x4d, + 0xa9, 0x81, 0x97, 0x5e, 0xf9, 0x76, 0x21, 0x24, 0xc7, 0xb8, 0x9d, 0x4b, 0x6d, 0x96, 0x89, 0x9b, + 0x36, 0x71, 0x77, 0x6d, 0xe2, 0x13, 0xa9, 0x8d, 0x8f, 0xbb, 0x93, 0x5f, 0x9e, 0x41, 0x87, 0x3f, + 0x1a, 0x18, 0x2f, 0x8b, 0xe4, 0x31, 0xfe, 0xcf, 0x8f, 0xc9, 0x66, 0x6d, 0x25, 0x9d, 0xc5, 0xeb, + 0x4a, 0x11, 0x55, 0x49, 0x34, 0x9f, 0x53, 0x34, 0x74, 0x44, 0xba, 0x40, 0xc9, 0x53, 0xbc, 0x39, + 0x77, 0xa1, 0x83, 0x86, 0xb5, 0xd0, 0x5f, 0x6b, 0xe1, 0x5c, 0x8c, 0xca, 0x02, 0x4e, 0xed, 0x96, + 0xa4, 0x8e, 0x27, 0xaf, 0x70, 0xdb, 0x0f, 0xdd, 0xa5, 0xf0, 0xdd, 0xb8, 0x7f, 0x6d, 0x86, 0x13, + 0x4b, 0x5f, 0x26, 0xa9, 0xdd, 0xc8, 0x13, 0xbc, 0x53, 0xef, 0x75, 0xd0, 0xbc, 0xbe, 0xb1, 0xad, + 0x5a, 0x63, 0xc9, 0x6d, 0xbc, 0xf5, 0x15, 0xc4, 0x45, 0x6e, 0x82, 0xcd, 0x1e, 0x1a, 0xb4, 0x53, + 0x7f, 0x0b, 0xbf, 0x37, 0xf0, 0xde, 0xbf, 0x9f, 0x24, 0xcf, 0x70, 0xe7, 0x13, 0x15, 0x05, 0xf0, + 0x8c, 0x32, 0x23, 0x2a, 0xc8, 0xea, 0x3b, 0x6b, 0x5b, 0xb6, 0x9d, 0xde, 0x71, 0xc4, 0xd0, 0x02, + 0x4e, 0x7d, 0x34, 0x2f, 0x93, 0x07, 0xf8, 0x96, 0x17, 0xcb, 0x89, 0x29, 0x04, 0x28, 0x2f, 0x73, + 0x8b, 0x43, 0x5c, 0xed, 0x8d, 0x2b, 0x39, 0xc5, 0x6b, 0x7c, 0x13, 0xb8, 0xce, 0xae, 0xf6, 0xe8, + 0xc6, 0x72, 0xce, 0xb5, 0xc1, 0xac, 0x74, 0x67, 0x17, 0xb8, 0x5e, 0xf1, 0xfe, 0x1c, 0x1f, 0xac, + 0x7a, 0xe7, 0x70, 0xa1, 0xe8, 0x7c, 0x83, 0x9d, 0x8d, 0xa6, 0xb5, 0x71, 0xb7, 0xee, 0xfe, 0xd8, + 0x13, 0xd6, 0xcd, 0x8b, 0x87, 0x3f, 0x67, 0x87, 0xe8, 0xd7, 0xec, 0x10, 0xfd, 0x9e, 0x1d, 0x22, + 0xdc, 0x17, 0xd2, 0x59, 0x28, 0x95, 0xfc, 0x36, 0x5d, 0x37, 0xb1, 0x33, 0xf4, 0x71, 0xcb, 0xfe, + 0xac, 0x8f, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x0b, 0xf1, 0x75, 0x33, 0x6b, 0x04, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/clusters.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/clusters.pb.validate.go index 1156a9f5b5d8..63cc12f0ec46 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/clusters.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/clusters.pb.validate.go @@ -261,6 +261,8 @@ func (m *HostHealthStatus) Validate() error { // no validation rules for FailedOutlierCheck + // no validation rules for FailedActiveDegradedCheck + // no validation rules for EdsHealthStatus return nil diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/config_dump.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/config_dump.pb.go index 24cccfad06bf..6b5e4a8081fd 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/config_dump.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/config_dump.pb.go @@ -47,7 +47,7 @@ func (m *ConfigDump) Reset() { *m = ConfigDump{} } func (m *ConfigDump) String() string { return proto.CompactTextString(m) } func (*ConfigDump) ProtoMessage() {} func (*ConfigDump) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{0} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{0} } func (m *ConfigDump) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -100,7 +100,7 @@ func (m *BootstrapConfigDump) Reset() { *m = BootstrapConfigDump{} } func (m *BootstrapConfigDump) String() string { return proto.CompactTextString(m) } func (*BootstrapConfigDump) ProtoMessage() {} func (*BootstrapConfigDump) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{1} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{1} } func (m *BootstrapConfigDump) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -175,7 +175,7 @@ func (m *ListenersConfigDump) Reset() { *m = ListenersConfigDump{} } func (m *ListenersConfigDump) String() string { return proto.CompactTextString(m) } func (*ListenersConfigDump) ProtoMessage() {} func (*ListenersConfigDump) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{2} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{2} } func (m *ListenersConfigDump) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -254,7 +254,7 @@ func (m *ListenersConfigDump_StaticListener) Reset() { *m = ListenersCon func (m *ListenersConfigDump_StaticListener) String() string { return proto.CompactTextString(m) } func (*ListenersConfigDump_StaticListener) ProtoMessage() {} func (*ListenersConfigDump_StaticListener) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{2, 0} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{2, 0} } func (m *ListenersConfigDump_StaticListener) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -317,7 +317,7 @@ func (m *ListenersConfigDump_DynamicListener) Reset() { *m = ListenersCo func (m *ListenersConfigDump_DynamicListener) String() string { return proto.CompactTextString(m) } func (*ListenersConfigDump_DynamicListener) ProtoMessage() {} func (*ListenersConfigDump_DynamicListener) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{2, 1} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{2, 1} } func (m *ListenersConfigDump_DynamicListener) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -394,7 +394,7 @@ func (m *ClustersConfigDump) Reset() { *m = ClustersConfigDump{} } func (m *ClustersConfigDump) String() string { return proto.CompactTextString(m) } func (*ClustersConfigDump) ProtoMessage() {} func (*ClustersConfigDump) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{3} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{3} } func (m *ClustersConfigDump) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -466,7 +466,7 @@ func (m *ClustersConfigDump_StaticCluster) Reset() { *m = ClustersConfig func (m *ClustersConfigDump_StaticCluster) String() string { return proto.CompactTextString(m) } func (*ClustersConfigDump_StaticCluster) ProtoMessage() {} func (*ClustersConfigDump_StaticCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{3, 0} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{3, 0} } func (m *ClustersConfigDump_StaticCluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -529,7 +529,7 @@ func (m *ClustersConfigDump_DynamicCluster) Reset() { *m = ClustersConfi func (m *ClustersConfigDump_DynamicCluster) String() string { return proto.CompactTextString(m) } func (*ClustersConfigDump_DynamicCluster) ProtoMessage() {} func (*ClustersConfigDump_DynamicCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{3, 1} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{3, 1} } func (m *ClustersConfigDump_DynamicCluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -598,7 +598,7 @@ func (m *RoutesConfigDump) Reset() { *m = RoutesConfigDump{} } func (m *RoutesConfigDump) String() string { return proto.CompactTextString(m) } func (*RoutesConfigDump) ProtoMessage() {} func (*RoutesConfigDump) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{4} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{4} } func (m *RoutesConfigDump) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -655,7 +655,7 @@ func (m *RoutesConfigDump_StaticRouteConfig) Reset() { *m = RoutesConfig func (m *RoutesConfigDump_StaticRouteConfig) String() string { return proto.CompactTextString(m) } func (*RoutesConfigDump_StaticRouteConfig) ProtoMessage() {} func (*RoutesConfigDump_StaticRouteConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{4, 0} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{4, 0} } func (m *RoutesConfigDump_StaticRouteConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -716,7 +716,7 @@ func (m *RoutesConfigDump_DynamicRouteConfig) Reset() { *m = RoutesConfi func (m *RoutesConfigDump_DynamicRouteConfig) String() string { return proto.CompactTextString(m) } func (*RoutesConfigDump_DynamicRouteConfig) ProtoMessage() {} func (*RoutesConfigDump_DynamicRouteConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_config_dump_221ad0a279aee274, []int{4, 1} + return fileDescriptor_config_dump_d4c206baa717acbb, []int{4, 1} } func (m *RoutesConfigDump_DynamicRouteConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3167,55 +3167,56 @@ var ( ) func init() { - proto.RegisterFile("envoy/admin/v2alpha/config_dump.proto", fileDescriptor_config_dump_221ad0a279aee274) -} - -var fileDescriptor_config_dump_221ad0a279aee274 = []byte{ - // 728 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x3f, 0x6f, 0xd3, 0x4e, - 0x18, 0xc7, 0x7f, 0x4e, 0xd3, 0xf6, 0xd7, 0x27, 0xa1, 0x2d, 0x4e, 0x9b, 0xa6, 0x1e, 0xda, 0x52, - 0x81, 0x54, 0x16, 0x5b, 0x0a, 0x7f, 0x17, 0x86, 0xa6, 0x1d, 0x40, 0x62, 0x32, 0x20, 0x46, 0xeb, - 0x1a, 0x3b, 0xe9, 0x49, 0x89, 0xcf, 0xf2, 0x9d, 0x0d, 0x41, 0x48, 0x0c, 0xbc, 0x08, 0x36, 0x16, - 0x06, 0x76, 0x56, 0x76, 0xd4, 0x0d, 0x5e, 0x01, 0x42, 0x7d, 0x25, 0x28, 0xbe, 0xe7, 0x1c, 0xff, - 0x29, 0x55, 0xd2, 0x66, 0x4b, 0x9e, 0x7b, 0xee, 0xfb, 0xf9, 0xde, 0xdd, 0xf7, 0x49, 0xe0, 0x8e, - 0xe7, 0xc7, 0x6c, 0x64, 0x11, 0x77, 0x48, 0x7d, 0x2b, 0x6e, 0x93, 0x41, 0x70, 0x4a, 0xac, 0x2e, - 0xf3, 0x7b, 0xb4, 0xef, 0xb8, 0xd1, 0x30, 0x30, 0x83, 0x90, 0x09, 0xa6, 0x37, 0x92, 0x36, 0x33, - 0x69, 0x33, 0xb1, 0xcd, 0x68, 0xe2, 0xde, 0x80, 0x5a, 0x71, 0xdb, 0xea, 0xba, 0x5c, 0x36, 0x17, - 0xea, 0x83, 0x7f, 0xd4, 0xc3, 0xb4, 0x7e, 0x57, 0xd6, 0x25, 0xd5, 0x3a, 0x61, 0x4c, 0x70, 0x11, - 0x92, 0x60, 0xdc, 0x94, 0x7e, 0xc1, 0xd6, 0xed, 0x3e, 0x63, 0xfd, 0x81, 0x67, 0x25, 0xdf, 0x4e, - 0xa2, 0x9e, 0x45, 0xfc, 0x11, 0x2e, 0xed, 0x16, 0x97, 0x04, 0x1d, 0x7a, 0x5c, 0x10, 0x75, 0x06, - 0x63, 0xa3, 0xcf, 0xfa, 0x2c, 0xf9, 0x68, 0x8d, 0x3f, 0xc9, 0xea, 0x7e, 0x07, 0xe0, 0x28, 0x01, - 0x1f, 0x47, 0xc3, 0x40, 0xbf, 0x0f, 0xcb, 0xd2, 0x06, 0x6f, 0x69, 0x7b, 0x0b, 0x07, 0xb5, 0xf6, - 0x86, 0x29, 0x65, 0x4d, 0x25, 0x6b, 0x1e, 0xfa, 0xa3, 0x4e, 0xf5, 0xec, 0xf7, 0xee, 0x7f, 0xb6, - 0x6a, 0xdd, 0xff, 0xac, 0x41, 0xa3, 0xa3, 0x9c, 0x66, 0xd4, 0x9e, 0xc2, 0x4a, 0x7a, 0x80, 0x96, - 0xb6, 0xa7, 0x1d, 0xd4, 0xda, 0xb7, 0x4d, 0x79, 0x93, 0x72, 0xab, 0x39, 0x39, 0x5f, 0xdc, 0x36, - 0x53, 0x09, 0xd4, 0x9f, 0x6c, 0xd6, 0x9f, 0x40, 0x7d, 0x40, 0xb8, 0x70, 0xa2, 0xc0, 0x25, 0xc2, - 0x73, 0x5b, 0x95, 0x44, 0xcc, 0x28, 0x99, 0x7b, 0xa9, 0xce, 0x6c, 0xd7, 0xc6, 0xfd, 0xaf, 0x64, - 0xfb, 0xfe, 0x8f, 0x25, 0x68, 0x3c, 0xa7, 0x5c, 0x78, 0xbe, 0x17, 0xf2, 0x8c, 0xc1, 0x5b, 0x50, - 0x8f, 0xbd, 0x90, 0x53, 0xe6, 0x3b, 0xd4, 0xef, 0xb1, 0xc4, 0xe3, 0x8a, 0x5d, 0xc3, 0xda, 0x33, - 0xbf, 0xc7, 0xf4, 0x53, 0x58, 0xe7, 0x82, 0x08, 0xda, 0x75, 0x06, 0x4a, 0xa0, 0x55, 0x49, 0xae, - 0xe6, 0x91, 0x79, 0x41, 0x28, 0xcc, 0x0b, 0x30, 0xe6, 0x8b, 0x44, 0x40, 0xad, 0xe0, 0xe9, 0xd6, - 0x78, 0xae, 0xca, 0xf5, 0xb7, 0xd0, 0x72, 0x47, 0x3e, 0x19, 0xd2, 0xae, 0x43, 0xba, 0x82, 0xc6, - 0x5e, 0x86, 0xb8, 0x90, 0x10, 0x1f, 0x4f, 0x4d, 0x3c, 0x96, 0x42, 0x05, 0x64, 0x13, 0xf5, 0x0f, - 0x13, 0xf9, 0x09, 0xf9, 0x1d, 0x6c, 0x2b, 0xf2, 0x1b, 0x12, 0x0e, 0xa9, 0xdf, 0xcf, 0xa0, 0xab, - 0x73, 0x41, 0x6f, 0x21, 0xe0, 0xb5, 0xd4, 0x9f, 0xb0, 0xdf, 0x83, 0xa1, 0xd8, 0x6e, 0x48, 0xa8, - 0x9f, 0x87, 0x2f, 0xce, 0x05, 0xae, 0xee, 0xf5, 0x18, 0x01, 0xe9, 0x4e, 0xe3, 0xa3, 0x06, 0xab, - 0xf9, 0xd7, 0xd1, 0xdb, 0xf0, 0xbf, 0xe2, 0x63, 0x66, 0x9b, 0x0a, 0x1f, 0xd0, 0x71, 0x4c, 0x55, - 0xa7, 0x9d, 0xf6, 0x5d, 0x33, 0x9e, 0xc6, 0x57, 0x0d, 0xd6, 0x0a, 0xce, 0xa7, 0x89, 0x66, 0xd6, - 0x69, 0xe5, 0x8a, 0x4e, 0x17, 0x66, 0x1b, 0xa4, 0x6f, 0x8b, 0xa0, 0x1f, 0x0d, 0x22, 0x2e, 0x66, - 0x9e, 0x23, 0x17, 0x30, 0xf0, 0x4e, 0x17, 0xf7, 0xe3, 0x18, 0x3d, 0xb8, 0xf0, 0x71, 0xcb, 0x10, - 0x9c, 0x22, 0x5c, 0xc0, 0x97, 0x5d, 0xe5, 0xd9, 0x22, 0xd7, 0x05, 0x6c, 0x15, 0x66, 0x28, 0xa5, - 0xc9, 0x11, 0x7a, 0x38, 0x2d, 0x0d, 0xdf, 0x23, 0x8f, 0xdb, 0xcc, 0x0d, 0x50, 0x4a, 0x8d, 0x27, - 0x93, 0xab, 0xe6, 0x27, 0xc5, 0x56, 0xe7, 0x80, 0x6d, 0xe6, 0x87, 0x47, 0x6d, 0x33, 0x3e, 0xc0, - 0x8d, 0xdc, 0xa5, 0xe8, 0x16, 0x2c, 0x23, 0x18, 0xa3, 0xbb, 0x99, 0x0f, 0x04, 0xf6, 0xd9, 0xaa, - 0xeb, 0xba, 0xc1, 0xfd, 0xa2, 0xc1, 0x6a, 0xde, 0xf1, 0x34, 0x51, 0xc8, 0xb8, 0xac, 0x5c, 0xc9, - 0xe5, 0x8c, 0xa1, 0xfd, 0x59, 0x85, 0x75, 0x9b, 0x45, 0xc2, 0xcb, 0x46, 0x96, 0xc1, 0x06, 0xe6, - 0x31, 0x1c, 0x2f, 0x39, 0xea, 0x6f, 0xef, 0xb2, 0xdf, 0xf6, 0xa2, 0x08, 0x46, 0x32, 0x29, 0xcb, - 0x2a, 0x3e, 0x98, 0xce, 0x8b, 0x0b, 0x5c, 0x0f, 0x41, 0xa5, 0xa7, 0x40, 0xbc, 0xec, 0xb7, 0xbd, - 0x44, 0xc4, 0xdb, 0x2e, 0x23, 0x1b, 0x6e, 0x69, 0x85, 0x1b, 0x9f, 0x34, 0xb8, 0x59, 0xf2, 0xa8, - 0x1f, 0x41, 0x3d, 0xeb, 0x00, 0xa3, 0xb2, 0x97, 0x7f, 0x84, 0xcc, 0x86, 0x28, 0x24, 0x82, 0x32, - 0xdf, 0xae, 0x85, 0x19, 0x91, 0x6b, 0x26, 0xe7, 0xbb, 0x06, 0x7a, 0xf9, 0x2c, 0xd3, 0xa4, 0xa7, - 0xe8, 0xbe, 0x32, 0x0f, 0xf7, 0xb3, 0x25, 0xaa, 0x53, 0x3f, 0x3b, 0xdf, 0xd1, 0x7e, 0x9d, 0xef, - 0x68, 0x7f, 0xce, 0x77, 0xb4, 0x93, 0xa5, 0xa4, 0xfd, 0xde, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x9f, 0x77, 0x00, 0x62, 0x4c, 0x0a, 0x00, 0x00, + proto.RegisterFile("envoy/admin/v2alpha/config_dump.proto", fileDescriptor_config_dump_d4c206baa717acbb) +} + +var fileDescriptor_config_dump_d4c206baa717acbb = []byte{ + // 742 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0xbb, 0x6e, 0x13, 0x4f, + 0x14, 0xc6, 0xff, 0xeb, 0x38, 0xc9, 0x3f, 0xc7, 0x21, 0x09, 0xeb, 0xc4, 0x71, 0xb6, 0xc8, 0x4d, + 0x20, 0x85, 0x66, 0x57, 0x98, 0x6b, 0x43, 0x11, 0x27, 0x05, 0x48, 0x14, 0xc8, 0x80, 0x28, 0x57, + 0x13, 0xef, 0xda, 0x19, 0xc9, 0xde, 0x59, 0xed, 0xcc, 0x2e, 0x31, 0x42, 0xa2, 0xe0, 0x21, 0xe8, + 0x68, 0x28, 0xe8, 0x69, 0xe9, 0x51, 0x3a, 0x78, 0x02, 0x84, 0xf2, 0x24, 0xc8, 0x3b, 0x67, 0xd6, + 0x7b, 0x31, 0x91, 0x9d, 0xb8, 0xb3, 0xcf, 0x9c, 0xf9, 0x7e, 0xdf, 0xcc, 0x7c, 0xc7, 0x86, 0xdb, + 0xae, 0x17, 0xb1, 0x81, 0x45, 0x9c, 0x3e, 0xf5, 0xac, 0xa8, 0x41, 0x7a, 0xfe, 0x29, 0xb1, 0xda, + 0xcc, 0xeb, 0xd0, 0xae, 0xed, 0x84, 0x7d, 0xdf, 0xf4, 0x03, 0x26, 0x98, 0x5e, 0x8d, 0xdb, 0xcc, + 0xb8, 0xcd, 0xc4, 0x36, 0xa3, 0x86, 0x7b, 0x7d, 0x6a, 0x45, 0x0d, 0xab, 0xed, 0x70, 0xd9, 0x9c, + 0xab, 0xf7, 0xfe, 0x51, 0x0f, 0x92, 0xfa, 0x1d, 0x59, 0x97, 0x54, 0xeb, 0x84, 0x31, 0xc1, 0x45, + 0x40, 0xfc, 0x61, 0x53, 0xf2, 0x05, 0x5b, 0xb7, 0xba, 0x8c, 0x75, 0x7b, 0xae, 0x15, 0x7f, 0x3b, + 0x09, 0x3b, 0x16, 0xf1, 0x06, 0xb8, 0xb4, 0x93, 0x5f, 0x12, 0xb4, 0xef, 0x72, 0x41, 0xd4, 0x19, + 0x8c, 0xf5, 0x2e, 0xeb, 0xb2, 0xf8, 0xa3, 0x35, 0xfc, 0x24, 0xab, 0xfb, 0x4d, 0x80, 0xa3, 0x18, + 0x7c, 0x1c, 0xf6, 0x7d, 0xfd, 0x3e, 0x2c, 0x4a, 0x1b, 0xbc, 0xae, 0xed, 0xce, 0x1d, 0x54, 0x1a, + 0xeb, 0xa6, 0x94, 0x35, 0x95, 0xac, 0x79, 0xe8, 0x0d, 0x9a, 0xe5, 0xf3, 0xdf, 0x3b, 0xff, 0xb5, + 0x54, 0xeb, 0xfe, 0x67, 0x0d, 0xaa, 0x4d, 0xe5, 0x34, 0xa5, 0xf6, 0x14, 0x96, 0x92, 0x03, 0xd4, + 0xb5, 0x5d, 0xed, 0xa0, 0xd2, 0xb8, 0x65, 0xca, 0x9b, 0x94, 0x5b, 0xcd, 0xd1, 0xf9, 0xa2, 0x86, + 0x99, 0x48, 0xa0, 0xfe, 0x68, 0xb3, 0xfe, 0x04, 0x96, 0x7b, 0x84, 0x0b, 0x3b, 0xf4, 0x1d, 0x22, + 0x5c, 0xa7, 0x5e, 0x8a, 0xc5, 0x8c, 0x82, 0xb9, 0x57, 0xea, 0xcc, 0xad, 0xca, 0xb0, 0xff, 0xb5, + 0x6c, 0xdf, 0xff, 0xb1, 0x00, 0xd5, 0xe7, 0x94, 0x0b, 0xd7, 0x73, 0x03, 0x9e, 0x32, 0xb8, 0x07, + 0xcb, 0x91, 0x1b, 0x70, 0xca, 0x3c, 0x9b, 0x7a, 0x1d, 0x16, 0x7b, 0x5c, 0x6a, 0x55, 0xb0, 0xf6, + 0xcc, 0xeb, 0x30, 0xfd, 0x14, 0xd6, 0xb8, 0x20, 0x82, 0xb6, 0xed, 0x9e, 0x12, 0xa8, 0x97, 0xe2, + 0xab, 0x79, 0x64, 0x8e, 0x09, 0x85, 0x39, 0x06, 0x63, 0xbe, 0x8c, 0x05, 0xd4, 0x0a, 0x9e, 0x6e, + 0x95, 0x67, 0xaa, 0x5c, 0x3f, 0x83, 0xba, 0x33, 0xf0, 0x48, 0x9f, 0xb6, 0x6d, 0xd2, 0x16, 0x34, + 0x72, 0x53, 0xc4, 0xb9, 0x98, 0xf8, 0x78, 0x62, 0xe2, 0xb1, 0x14, 0xca, 0x21, 0x6b, 0xa8, 0x7f, + 0x18, 0xcb, 0x8f, 0xc8, 0xef, 0x60, 0x4b, 0x91, 0xdf, 0x92, 0xa0, 0x4f, 0xbd, 0x6e, 0x0a, 0x5d, + 0x9e, 0x09, 0x7a, 0x13, 0x01, 0x6f, 0xa4, 0xfe, 0x88, 0xfd, 0x1e, 0x0c, 0xc5, 0x76, 0x02, 0x42, + 0xbd, 0x2c, 0x7c, 0x7e, 0x26, 0x70, 0x75, 0xaf, 0xc7, 0x08, 0x48, 0x76, 0x1a, 0x1f, 0x35, 0x58, + 0xc9, 0xbe, 0x8e, 0xde, 0x80, 0xff, 0x15, 0x1f, 0x33, 0x5b, 0x53, 0x78, 0x9f, 0x0e, 0x63, 0xaa, + 0x3a, 0x5b, 0x49, 0xdf, 0x35, 0xe3, 0x69, 0x7c, 0xd5, 0x60, 0x35, 0xe7, 0x7c, 0x92, 0x68, 0xa6, + 0x9d, 0x96, 0xae, 0xe8, 0x74, 0x6e, 0xba, 0x41, 0xfa, 0x36, 0x0f, 0xfa, 0x51, 0x2f, 0xe4, 0x62, + 0xea, 0x39, 0x72, 0x00, 0x03, 0x6f, 0xb7, 0x71, 0x3f, 0x8e, 0xd1, 0x83, 0xb1, 0x8f, 0x5b, 0x84, + 0xe0, 0x14, 0xe1, 0x02, 0xbe, 0xec, 0x0a, 0x4f, 0x17, 0xb9, 0x2e, 0x60, 0x33, 0x37, 0x43, 0x09, + 0x4d, 0x8e, 0xd0, 0xc3, 0x49, 0x69, 0xf8, 0x1e, 0x59, 0xdc, 0x46, 0x66, 0x80, 0x12, 0x6a, 0x34, + 0x9a, 0x5c, 0x35, 0x3f, 0x09, 0xb6, 0x3c, 0x03, 0x6c, 0x2d, 0x3b, 0x3c, 0x6a, 0x9b, 0xf1, 0x01, + 0x6e, 0x64, 0x2e, 0x45, 0xb7, 0x60, 0x11, 0xc1, 0x18, 0xdd, 0x8d, 0x6c, 0x20, 0xb0, 0xaf, 0xa5, + 0xba, 0xae, 0x1b, 0xdc, 0x2f, 0x1a, 0xac, 0x64, 0x1d, 0x4f, 0x12, 0x85, 0x94, 0xcb, 0xd2, 0x95, + 0x5c, 0x4e, 0x19, 0xda, 0x9f, 0x65, 0x58, 0x6b, 0xb1, 0x50, 0xb8, 0xe9, 0xc8, 0x32, 0x58, 0xc7, + 0x3c, 0x06, 0xc3, 0x25, 0x5b, 0xfd, 0xed, 0x5d, 0xf6, 0xdb, 0x9e, 0x17, 0xc1, 0x48, 0xc6, 0x65, + 0x59, 0xc5, 0x07, 0xd3, 0x79, 0x7e, 0x81, 0xeb, 0x01, 0xa8, 0xf4, 0xe4, 0x88, 0x97, 0xfd, 0xb6, + 0x17, 0x88, 0x78, 0xdb, 0x45, 0x64, 0xd5, 0x29, 0xac, 0x70, 0xe3, 0x93, 0x06, 0x37, 0x0b, 0x1e, + 0xf5, 0x23, 0x58, 0x4e, 0x3b, 0xc0, 0xa8, 0xec, 0x66, 0x1f, 0x21, 0xb5, 0x21, 0x0c, 0x88, 0xa0, + 0xcc, 0x6b, 0x55, 0x82, 0x94, 0xc8, 0x35, 0x93, 0xf3, 0x5d, 0x03, 0xbd, 0x78, 0x96, 0x49, 0xd2, + 0x93, 0x77, 0x5f, 0x9a, 0x85, 0xfb, 0xe9, 0x12, 0xd5, 0xbc, 0x7b, 0x7e, 0xb1, 0xad, 0xfd, 0xba, + 0xd8, 0xd6, 0xfe, 0x5c, 0x6c, 0x6b, 0xb0, 0x47, 0x99, 0xa4, 0xfb, 0x01, 0x3b, 0x1b, 0x8c, 0x7b, + 0xc7, 0x17, 0xda, 0xc9, 0x42, 0xac, 0x79, 0xef, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x73, 0x2f, + 0xb1, 0xf5, 0x71, 0x0a, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/memory.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/memory.pb.go index 9ea9ed62b6e8..2ef0096c7d83 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/memory.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/memory.pb.go @@ -50,7 +50,7 @@ func (m *Memory) Reset() { *m = Memory{} } func (m *Memory) String() string { return proto.CompactTextString(m) } func (*Memory) ProtoMessage() {} func (*Memory) Descriptor() ([]byte, []int) { - return fileDescriptor_memory_e5c9ae494bb99127, []int{0} + return fileDescriptor_memory_154bd10535beba13, []int{0} } func (m *Memory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -464,23 +464,24 @@ var ( ) func init() { - proto.RegisterFile("envoy/admin/v2alpha/memory.proto", fileDescriptor_memory_e5c9ae494bb99127) + proto.RegisterFile("envoy/admin/v2alpha/memory.proto", fileDescriptor_memory_154bd10535beba13) } -var fileDescriptor_memory_e5c9ae494bb99127 = []byte{ - // 221 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x44, 0xcf, 0x4d, 0x4a, 0xc6, 0x30, - 0x10, 0xc6, 0x71, 0xa2, 0xaf, 0xc5, 0x86, 0x0a, 0x1a, 0x37, 0x01, 0xa5, 0x14, 0xdd, 0x08, 0x4a, - 0x0b, 0x7a, 0x03, 0x05, 0x77, 0x6e, 0xfc, 0x58, 0x97, 0xb1, 0x19, 0x4d, 0x21, 0x69, 0x42, 0x8c, - 0x85, 0xf6, 0x7a, 0x6e, 0x5c, 0x7a, 0x04, 0xe9, 0x49, 0xa4, 0x63, 0xab, 0xdb, 0xff, 0xf3, 0x63, - 0x60, 0x78, 0x81, 0x5d, 0xef, 0x86, 0x0a, 0x94, 0x6d, 0xbb, 0xaa, 0xbf, 0x04, 0xe3, 0x35, 0x54, - 0x16, 0xad, 0x0b, 0x43, 0xe9, 0x83, 0x8b, 0x4e, 0x1c, 0x92, 0x28, 0x49, 0x94, 0x8b, 0x38, 0xf9, - 0x60, 0x3c, 0xb9, 0x23, 0x25, 0x8e, 0x79, 0x0a, 0xc6, 0xb8, 0x06, 0x22, 0x2a, 0xc9, 0x0a, 0x76, - 0xb6, 0xb9, 0xff, 0x0f, 0xe2, 0x88, 0xa7, 0x1a, 0xc1, 0xd7, 0x6f, 0xed, 0x88, 0x72, 0x8b, 0xd6, - 0xdd, 0x39, 0x3c, 0xb4, 0x23, 0x8a, 0x73, 0x7e, 0xe0, 0xe1, 0x15, 0x09, 0xbc, 0x77, 0x16, 0xbc, - 0x47, 0x25, 0xb7, 0x09, 0xed, 0xaf, 0xc3, 0xd3, 0xd2, 0xc5, 0x29, 0xdf, 0xfb, 0xc3, 0x2f, 0x01, - 0x51, 0x6e, 0x08, 0x66, 0x6b, 0xbc, 0x0d, 0x88, 0xe2, 0x82, 0x8b, 0xe8, 0x22, 0x98, 0x3a, 0xea, - 0x80, 0xa0, 0xea, 0x06, 0x1a, 0x8d, 0x72, 0xe7, 0xf7, 0x24, 0x2d, 0x8f, 0x34, 0xdc, 0xcc, 0xfd, - 0x3a, 0xfb, 0x9c, 0x72, 0xf6, 0x35, 0xe5, 0xec, 0x7b, 0xca, 0xd9, 0x73, 0x42, 0xff, 0x5e, 0xfd, - 0x04, 0x00, 0x00, 0xff, 0xff, 0x2c, 0x6e, 0x70, 0x1d, 0x13, 0x01, 0x00, 0x00, +var fileDescriptor_memory_154bd10535beba13 = []byte{ + // 239 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0xd0, 0xcf, 0x4a, 0xc4, 0x30, + 0x10, 0xc7, 0x71, 0xa2, 0xeb, 0xe2, 0x0e, 0x0a, 0x1a, 0x2f, 0x01, 0xa5, 0xac, 0x7a, 0x11, 0x94, + 0x14, 0xf5, 0x0d, 0x14, 0xbc, 0x09, 0xe2, 0x9f, 0x73, 0x19, 0xdb, 0xd1, 0x16, 0x92, 0x4e, 0x88, + 0x71, 0xb1, 0xfb, 0x7a, 0x5e, 0x3c, 0xfa, 0x08, 0xd2, 0x27, 0x91, 0x1d, 0xb7, 0x7a, 0xf1, 0xfa, + 0xfd, 0x7d, 0x08, 0x4c, 0x60, 0x4a, 0xed, 0x8c, 0xbb, 0x1c, 0x2b, 0xdf, 0xb4, 0xf9, 0xec, 0x0c, + 0x5d, 0xa8, 0x31, 0xf7, 0xe4, 0x39, 0x76, 0x36, 0x44, 0x4e, 0xac, 0x77, 0x44, 0x58, 0x11, 0x76, + 0x29, 0x0e, 0xde, 0x15, 0x8c, 0xaf, 0x45, 0xe9, 0x3d, 0x98, 0xa0, 0x73, 0x5c, 0x62, 0xa2, 0xca, + 0xa8, 0xa9, 0x3a, 0x1a, 0xdd, 0xfe, 0x05, 0xbd, 0x0b, 0x93, 0x9a, 0x30, 0x14, 0x2f, 0xcd, 0x9c, + 0xcc, 0x8a, 0xac, 0xeb, 0x8b, 0x70, 0xd7, 0xcc, 0x49, 0x1f, 0xc3, 0x76, 0xc0, 0x67, 0x12, 0xf0, + 0xda, 0x7a, 0x0c, 0x81, 0x2a, 0xb3, 0x2a, 0x68, 0x6b, 0x18, 0x1e, 0x96, 0x5d, 0x1f, 0xc2, 0xe6, + 0x2f, 0x7e, 0x8a, 0x44, 0x66, 0x24, 0x70, 0x63, 0x88, 0x57, 0x91, 0x48, 0x9f, 0x80, 0x4e, 0x9c, + 0xd0, 0x15, 0xa9, 0x8e, 0x84, 0x55, 0x51, 0x62, 0x59, 0x93, 0x59, 0xfb, 0x79, 0x52, 0x96, 0x7b, + 0x19, 0x2e, 0x17, 0xfd, 0xe2, 0xf4, 0xa3, 0xcf, 0xd4, 0x67, 0x9f, 0xa9, 0xaf, 0x3e, 0x53, 0xb0, + 0xdf, 0xb0, 0x95, 0x5b, 0x43, 0xe4, 0xb7, 0xce, 0xfe, 0x73, 0xf6, 0x8d, 0x7a, 0x1c, 0xcb, 0xa7, + 0x9c, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xf3, 0xb4, 0x7d, 0x66, 0x38, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/metrics.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/metrics.pb.go index c68e630676e7..d4176f1d357a 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/metrics.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/metrics.pb.go @@ -40,7 +40,7 @@ func (x SimpleMetric_Type) String() string { return proto.EnumName(SimpleMetric_Type_name, int32(x)) } func (SimpleMetric_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metrics_b4514e82c04dd3c8, []int{0, 0} + return fileDescriptor_metrics_d9244834db426455, []int{0, 0} } // Proto representation of an Envoy Counter or Gauge value. @@ -60,7 +60,7 @@ func (m *SimpleMetric) Reset() { *m = SimpleMetric{} } func (m *SimpleMetric) String() string { return proto.CompactTextString(m) } func (*SimpleMetric) ProtoMessage() {} func (*SimpleMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_b4514e82c04dd3c8, []int{0} + return fileDescriptor_metrics_d9244834db426455, []int{0} } func (m *SimpleMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -419,11 +419,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/admin/v2alpha/metrics.proto", fileDescriptor_metrics_b4514e82c04dd3c8) + proto.RegisterFile("envoy/admin/v2alpha/metrics.proto", fileDescriptor_metrics_d9244834db426455) } -var fileDescriptor_metrics_b4514e82c04dd3c8 = []byte{ - // 198 bytes of a gzipped FileDescriptorProto +var fileDescriptor_metrics_d9244834db426455 = []byte{ + // 214 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0x4c, 0xc9, 0xcd, 0xcc, 0xd3, 0x2f, 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48, 0xd4, 0xcf, 0x4d, 0x2d, 0x29, 0xca, 0x4c, 0x2e, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x06, @@ -434,7 +434,8 @@ var fileDescriptor_metrics_b4514e82c04dd3c8 = []byte{ 0x46, 0x0d, 0x96, 0x20, 0x08, 0x47, 0x48, 0x88, 0x8b, 0x25, 0x2f, 0x31, 0x37, 0x55, 0x82, 0x59, 0x81, 0x51, 0x83, 0x33, 0x08, 0xcc, 0x56, 0x92, 0xe3, 0x62, 0x01, 0xe9, 0x13, 0xe2, 0xe6, 0x62, 0x77, 0xf6, 0x0f, 0xf5, 0x0b, 0x71, 0x0d, 0x12, 0x60, 0x10, 0xe2, 0xe4, 0x62, 0x75, 0x77, 0x0c, - 0x75, 0x77, 0x15, 0x60, 0x74, 0xe2, 0x39, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, - 0x8f, 0xe4, 0x18, 0x93, 0xd8, 0xc0, 0x1e, 0x30, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x33, - 0xbe, 0x98, 0xe5, 0x00, 0x00, 0x00, + 0x75, 0x77, 0x15, 0x60, 0x74, 0x32, 0x3c, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, + 0x8f, 0xe4, 0x18, 0xb9, 0x14, 0x33, 0xf3, 0x21, 0xee, 0x28, 0x28, 0xca, 0xaf, 0xa8, 0xc4, 0xe6, + 0xa4, 0x00, 0xc6, 0x24, 0x36, 0xb0, 0x2f, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3e, 0x13, + 0xff, 0xd1, 0x0a, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/mutex_stats.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/mutex_stats.pb.go index ab51003f6657..12b45b7350aa 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/mutex_stats.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/mutex_stats.pb.go @@ -43,7 +43,7 @@ func (m *MutexStats) Reset() { *m = MutexStats{} } func (m *MutexStats) String() string { return proto.CompactTextString(m) } func (*MutexStats) ProtoMessage() {} func (*MutexStats) Descriptor() ([]byte, []int) { - return fileDescriptor_mutex_stats_be70275114cab537, []int{0} + return fileDescriptor_mutex_stats_904bc42dda97d457, []int{0} } func (m *MutexStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -389,11 +389,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/admin/v2alpha/mutex_stats.proto", fileDescriptor_mutex_stats_be70275114cab537) + proto.RegisterFile("envoy/admin/v2alpha/mutex_stats.proto", fileDescriptor_mutex_stats_904bc42dda97d457) } -var fileDescriptor_mutex_stats_be70275114cab537 = []byte{ - // 196 bytes of a gzipped FileDescriptorProto +var fileDescriptor_mutex_stats_904bc42dda97d457 = []byte{ + // 214 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4d, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0x4c, 0xc9, 0xcd, 0xcc, 0xd3, 0x2f, 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48, 0xd4, 0xcf, 0x2d, 0x2d, 0x49, 0xad, 0x88, 0x2f, 0x2e, 0x49, 0x2c, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, @@ -404,7 +404,8 @@ var fileDescriptor_mutex_stats_be70275114cab537 = []byte{ 0xcd, 0x2b, 0x89, 0x2f, 0x4f, 0xcc, 0x2c, 0x89, 0x4f, 0xae, 0x4c, 0xce, 0x49, 0x2d, 0x96, 0x60, 0x02, 0x2b, 0x16, 0x84, 0x4a, 0x85, 0x27, 0x66, 0x96, 0x38, 0x83, 0x25, 0x84, 0x0c, 0xb8, 0x44, 0x72, 0x32, 0xd3, 0x52, 0x4b, 0x32, 0x73, 0x53, 0x51, 0x34, 0x30, 0x83, 0x35, 0x08, 0xc1, 0xe4, - 0x10, 0x3a, 0x9c, 0x78, 0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, - 0xc6, 0x24, 0x36, 0xb0, 0x1f, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3b, 0x18, 0x17, 0x15, - 0xec, 0x00, 0x00, 0x00, + 0x10, 0x3a, 0x9c, 0x0c, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, + 0x46, 0x2e, 0xc5, 0xcc, 0x7c, 0x3d, 0xb0, 0xfb, 0x0b, 0x8a, 0xf2, 0x2b, 0x2a, 0xf5, 0xb0, 0x78, + 0x25, 0x80, 0x31, 0x89, 0x0d, 0xec, 0x51, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8b, 0x2e, + 0xa0, 0xb5, 0x11, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/server_info.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/server_info.pb.go index cf8d0d47fd40..fbb571a0b544 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/server_info.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/admin/v2alpha/server_info.pb.go @@ -51,7 +51,7 @@ func (x ServerInfo_State) String() string { return proto.EnumName(ServerInfo_State_name, int32(x)) } func (ServerInfo_State) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_server_info_46ee35de3f691686, []int{0, 0} + return fileDescriptor_server_info_462b0d871c917bb3, []int{0, 0} } type CommandLineOptions_IpVersion int32 @@ -74,7 +74,7 @@ func (x CommandLineOptions_IpVersion) String() string { return proto.EnumName(CommandLineOptions_IpVersion_name, int32(x)) } func (CommandLineOptions_IpVersion) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_server_info_46ee35de3f691686, []int{1, 0} + return fileDescriptor_server_info_462b0d871c917bb3, []int{1, 0} } type CommandLineOptions_Mode int32 @@ -103,7 +103,7 @@ func (x CommandLineOptions_Mode) String() string { return proto.EnumName(CommandLineOptions_Mode_name, int32(x)) } func (CommandLineOptions_Mode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_server_info_46ee35de3f691686, []int{1, 1} + return fileDescriptor_server_info_462b0d871c917bb3, []int{1, 1} } // Proto representation of the value returned by /server_info, containing @@ -128,7 +128,7 @@ func (m *ServerInfo) Reset() { *m = ServerInfo{} } func (m *ServerInfo) String() string { return proto.CompactTextString(m) } func (*ServerInfo) ProtoMessage() {} func (*ServerInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_server_info_46ee35de3f691686, []int{0} + return fileDescriptor_server_info_462b0d871c917bb3, []int{0} } func (m *ServerInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -250,7 +250,7 @@ func (m *CommandLineOptions) Reset() { *m = CommandLineOptions{} } func (m *CommandLineOptions) String() string { return proto.CompactTextString(m) } func (*CommandLineOptions) ProtoMessage() {} func (*CommandLineOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_server_info_46ee35de3f691686, []int{1} + return fileDescriptor_server_info_462b0d871c917bb3, []int{1} } func (m *CommandLineOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1827,65 +1827,66 @@ var ( ) func init() { - proto.RegisterFile("envoy/admin/v2alpha/server_info.proto", fileDescriptor_server_info_46ee35de3f691686) -} - -var fileDescriptor_server_info_46ee35de3f691686 = []byte{ - // 888 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdd, 0x6e, 0xdb, 0x36, - 0x14, 0xae, 0xf2, 0x6b, 0x9f, 0x38, 0x89, 0xc2, 0xa4, 0x2b, 0xbb, 0x62, 0x99, 0xe7, 0xa1, 0x48, - 0x2e, 0x3a, 0x79, 0xcb, 0x86, 0x61, 0xc0, 0x6e, 0x96, 0xa5, 0x49, 0x27, 0xcc, 0x75, 0x0a, 0x25, - 0x0b, 0xd0, 0xde, 0x10, 0xb4, 0x44, 0xdb, 0xcc, 0x28, 0x52, 0x90, 0x68, 0x37, 0xd9, 0xab, 0xec, - 0x25, 0xf6, 0x18, 0xbb, 0xdc, 0x23, 0x0c, 0x79, 0x92, 0x82, 0x87, 0xb2, 0x93, 0xa2, 0x05, 0xd2, - 0x2b, 0x41, 0xe7, 0xfb, 0x21, 0x79, 0xfe, 0xe0, 0xa9, 0xd0, 0x53, 0x73, 0xdd, 0xe5, 0x59, 0x2e, - 0x75, 0x77, 0x7a, 0xc0, 0x55, 0x31, 0xe6, 0xdd, 0x4a, 0x94, 0x53, 0x51, 0x32, 0xa9, 0x87, 0x26, - 0x2a, 0x4a, 0x63, 0x0d, 0xd9, 0x46, 0x5a, 0x84, 0xb4, 0xa8, 0xa6, 0x7d, 0xbe, 0x3b, 0x32, 0x66, - 0xa4, 0x44, 0x17, 0x29, 0x83, 0xc9, 0xb0, 0x9b, 0x4d, 0x4a, 0x6e, 0xa5, 0xd1, 0x5e, 0xd4, 0xf9, - 0x7b, 0x11, 0xe0, 0x0c, 0xad, 0x62, 0x3d, 0x34, 0x84, 0xc2, 0xea, 0x54, 0x94, 0x95, 0x34, 0x9a, - 0x06, 0xed, 0x60, 0xbf, 0x99, 0xcc, 0x7e, 0xc9, 0xcf, 0xb0, 0x5c, 0x59, 0x6e, 0x05, 0x5d, 0x68, - 0x07, 0xfb, 0x1b, 0x07, 0x4f, 0xa3, 0x8f, 0x9c, 0x16, 0xdd, 0x3a, 0x45, 0x67, 0x8e, 0x9c, 0x78, - 0x0d, 0xf9, 0x1d, 0x76, 0x26, 0x85, 0x95, 0xb9, 0x60, 0xe9, 0xa4, 0x2c, 0x85, 0xb6, 0x4c, 0x14, - 0x26, 0x1d, 0xd3, 0xc5, 0x76, 0xb0, 0xbf, 0x76, 0xf0, 0x38, 0xf2, 0x97, 0x8c, 0x66, 0x97, 0x8c, - 0x9e, 0xd7, 0x97, 0x4c, 0x88, 0x97, 0x1d, 0x79, 0xd5, 0xb1, 0x13, 0x91, 0x63, 0xd8, 0xaa, 0xcd, - 0xb8, 0x52, 0xde, 0xa8, 0xa2, 0x4b, 0xf7, 0x39, 0x6d, 0x7a, 0xcd, 0xa1, 0x52, 0xe8, 0x52, 0x91, - 0xd7, 0xb0, 0x93, 0x9a, 0x3c, 0xe7, 0x3a, 0x63, 0x4a, 0x6a, 0xc1, 0x4c, 0xe1, 0x78, 0x15, 0x5d, - 0x41, 0xa7, 0xbd, 0x8f, 0xbe, 0xef, 0xc8, 0x0b, 0x7a, 0x52, 0x8b, 0x53, 0x4f, 0x4f, 0x48, 0xfa, - 0x41, 0xac, 0xf3, 0x02, 0x96, 0xf1, 0xf9, 0xa4, 0x01, 0x4b, 0xbd, 0xf8, 0xe2, 0x38, 0x7c, 0x40, - 0x5a, 0xd0, 0x78, 0x9e, 0x1c, 0xc6, 0xfd, 0xb8, 0xff, 0x22, 0x0c, 0xc8, 0x0e, 0x84, 0xaf, 0x92, - 0x63, 0x16, 0xf7, 0xe3, 0xf3, 0xf8, 0xb0, 0x17, 0xbf, 0x71, 0xd1, 0x05, 0x12, 0x42, 0xeb, 0xbd, - 0xc8, 0x62, 0xe7, 0x9f, 0x26, 0x90, 0x0f, 0xcf, 0x24, 0x8f, 0x60, 0x75, 0xc0, 0x2b, 0xc1, 0x64, - 0x86, 0x55, 0x5a, 0x4a, 0x56, 0xdc, 0x6f, 0x9c, 0x91, 0x36, 0xac, 0xa5, 0x46, 0xfb, 0x1c, 0xa7, - 0xd7, 0x58, 0xaa, 0xf5, 0xe4, 0x6e, 0x88, 0x7c, 0x89, 0x8c, 0xa1, 0x1c, 0xb1, 0x82, 0x5b, 0x5f, - 0x80, 0x66, 0x02, 0x3e, 0xf4, 0x8a, 0xdb, 0xf1, 0x1d, 0xc2, 0x35, 0xcf, 0x15, 0xe6, 0x75, 0x4e, - 0x78, 0xcd, 0x73, 0x45, 0xbe, 0x85, 0x1d, 0xae, 0x94, 0x79, 0xcb, 0x26, 0xfa, 0x4f, 0x6d, 0xde, - 0x6a, 0x36, 0x94, 0x42, 0x65, 0x15, 0x5d, 0x6e, 0x07, 0xfb, 0x8d, 0x84, 0x20, 0xf6, 0x87, 0x87, - 0x4e, 0x10, 0x21, 0xcf, 0x80, 0x60, 0x1a, 0x19, 0xcf, 0xb2, 0x52, 0x54, 0x95, 0x3f, 0x7a, 0x05, - 0x9d, 0x43, 0x44, 0x0e, 0x3d, 0x80, 0x17, 0xb8, 0x04, 0xaa, 0x4c, 0xca, 0xd5, 0x9c, 0x2d, 0x0b, - 0x36, 0xeb, 0xc9, 0x55, 0xec, 0xbd, 0xef, 0x3e, 0xb1, 0x36, 0x51, 0x5c, 0x5c, 0x78, 0x61, 0xf2, - 0x10, 0x2d, 0xeb, 0x63, 0xe6, 0x61, 0xf2, 0x04, 0x9a, 0xca, 0x8c, 0x98, 0x12, 0x53, 0xa1, 0x68, - 0x03, 0x2f, 0xd4, 0x50, 0x66, 0xd4, 0x73, 0xff, 0x24, 0x82, 0xed, 0xd4, 0xe4, 0x85, 0xd1, 0xae, - 0x5f, 0x6f, 0x69, 0x4d, 0xa4, 0x6d, 0xcd, 0xa1, 0xde, 0x8c, 0xff, 0x05, 0x80, 0x63, 0x0d, 0x4d, - 0x99, 0x73, 0x4b, 0x01, 0x69, 0xce, 0xfe, 0x04, 0x03, 0xe4, 0x31, 0x38, 0x6b, 0xff, 0xf6, 0x35, - 0x3f, 0x5b, 0xca, 0xf8, 0x9c, 0x47, 0xb0, 0x3d, 0x36, 0x96, 0x95, 0xa2, 0xb2, 0xbc, 0xb4, 0xf3, - 0xd7, 0xb6, 0x30, 0xa3, 0x5b, 0x63, 0x63, 0x13, 0x8f, 0xcc, 0xae, 0xbd, 0x07, 0x9b, 0x6e, 0xfc, - 0x65, 0x2a, 0x58, 0xaa, 0x26, 0x95, 0x15, 0x25, 0x5d, 0x47, 0xc7, 0x8d, 0x3a, 0x7c, 0xe4, 0xa3, - 0xe4, 0x2b, 0x68, 0xcd, 0x88, 0xda, 0x64, 0x82, 0x6e, 0x20, 0x6b, 0xad, 0x8e, 0xf5, 0x4d, 0x26, - 0xee, 0x52, 0xfe, 0x32, 0x5a, 0xd0, 0xcd, 0xf7, 0x28, 0x6f, 0x8c, 0x16, 0x24, 0x86, 0xed, 0xa1, - 0x54, 0x82, 0x0d, 0xd5, 0xa4, 0x1a, 0x33, 0xa9, 0xad, 0x28, 0xa7, 0x5c, 0xd1, 0xf0, 0xbe, 0x91, - 0xdb, 0x72, 0xaa, 0x13, 0x27, 0x8a, 0x6b, 0x0d, 0xf9, 0x09, 0x20, 0x2b, 0xb9, 0xd4, 0xcc, 0xcd, - 0x22, 0xdd, 0xba, 0xcf, 0xa1, 0x89, 0xe4, 0x73, 0x99, 0xe3, 0x0a, 0x29, 0x38, 0xae, 0x8e, 0x6a, - 0x3c, 0xb1, 0x99, 0x6b, 0x3c, 0xf4, 0x20, 0xf7, 0xae, 0x10, 0x2f, 0x3b, 0xab, 0x55, 0x68, 0xf6, - 0x0b, 0x2c, 0xe5, 0x2e, 0x1f, 0xdb, 0xd8, 0x4f, 0xcf, 0x3e, 0xb5, 0x9f, 0x5e, 0x9a, 0x4c, 0x24, - 0xa8, 0x74, 0x9d, 0x93, 0xf3, 0x2b, 0xe6, 0xd6, 0x5b, 0x45, 0x77, 0x70, 0x08, 0x1b, 0x39, 0xbf, - 0x72, 0x63, 0x5f, 0x91, 0x3d, 0x08, 0x1d, 0x68, 0x06, 0x97, 0x4c, 0xf3, 0x5c, 0x30, 0x25, 0x34, - 0x7d, 0x88, 0x9c, 0xf5, 0x9c, 0x5f, 0x9d, 0x0e, 0x2e, 0xfb, 0x3c, 0x17, 0x3d, 0xa1, 0x5d, 0xe1, - 0x33, 0x59, 0xf1, 0x81, 0x12, 0xec, 0x4e, 0x03, 0xd0, 0xcf, 0x7c, 0xe1, 0x6b, 0xe8, 0xb7, 0x79, - 0xfd, 0xdd, 0xec, 0x09, 0x8d, 0xf4, 0x7c, 0x62, 0xc5, 0x15, 0xb3, 0x25, 0x4f, 0xa5, 0x1e, 0xd1, - 0x47, 0x7e, 0xf6, 0x3c, 0xf6, 0xd2, 0x41, 0xe7, 0x1e, 0x21, 0x5f, 0xc3, 0xfa, 0xac, 0xad, 0xfc, - 0xca, 0xa5, 0xb8, 0x13, 0x5a, 0x75, 0x10, 0x77, 0x61, 0xe7, 0x09, 0x34, 0x6f, 0x67, 0x62, 0x05, - 0x16, 0xa6, 0x3f, 0x84, 0x0f, 0xf0, 0xfb, 0x63, 0x18, 0x74, 0xbe, 0x81, 0x25, 0xf7, 0x6e, 0xd2, - 0x84, 0x65, 0x5c, 0xef, 0x7e, 0x99, 0x5d, 0x70, 0x25, 0x33, 0x6e, 0x45, 0x18, 0xb8, 0xbf, 0x58, - 0x4b, 0x7b, 0xaa, 0xd5, 0x75, 0xb8, 0xf0, 0x6b, 0xeb, 0xdf, 0x9b, 0xdd, 0xe0, 0xbf, 0x9b, 0xdd, - 0xe0, 0xff, 0x9b, 0xdd, 0x60, 0xb0, 0x82, 0xf5, 0xf8, 0xfe, 0x5d, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xd0, 0x84, 0xeb, 0x31, 0xc3, 0x06, 0x00, 0x00, + proto.RegisterFile("envoy/admin/v2alpha/server_info.proto", fileDescriptor_server_info_462b0d871c917bb3) +} + +var fileDescriptor_server_info_462b0d871c917bb3 = []byte{ + // 902 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdb, 0x6e, 0xdb, 0xb6, + 0x1b, 0xaf, 0x72, 0xb4, 0xbf, 0x9c, 0x14, 0x26, 0xfd, 0x97, 0xfd, 0x17, 0xcb, 0xd2, 0x0c, 0x45, + 0x72, 0xd1, 0xc9, 0x6b, 0x36, 0x0c, 0x03, 0x76, 0xb3, 0x2c, 0x4d, 0x3a, 0x61, 0xae, 0x13, 0x28, + 0x59, 0x80, 0xf6, 0x86, 0xa0, 0x25, 0xda, 0x66, 0x46, 0x91, 0x82, 0x44, 0xbb, 0xf6, 0x5e, 0x65, + 0x2f, 0xb1, 0xc7, 0xd8, 0xe5, 0x1e, 0x61, 0xc8, 0x93, 0x0c, 0xfc, 0x28, 0x3b, 0x29, 0x1a, 0x20, + 0xbd, 0x12, 0xf4, 0xfd, 0x0e, 0x24, 0xbf, 0x13, 0xbc, 0x10, 0x7a, 0x64, 0x26, 0x2d, 0x9e, 0xe5, + 0x52, 0xb7, 0x46, 0x87, 0x5c, 0x15, 0x03, 0xde, 0xaa, 0x44, 0x39, 0x12, 0x25, 0x93, 0xba, 0x67, + 0xa2, 0xa2, 0x34, 0xd6, 0x90, 0x2d, 0xa4, 0x45, 0x48, 0x8b, 0x6a, 0xda, 0xff, 0x77, 0xfa, 0xc6, + 0xf4, 0x95, 0x68, 0x21, 0xa5, 0x3b, 0xec, 0xb5, 0xb2, 0x61, 0xc9, 0xad, 0x34, 0xda, 0x8b, 0xf6, + 0xfe, 0x9c, 0x07, 0xb8, 0x40, 0xab, 0x58, 0xf7, 0x0c, 0xa1, 0xb0, 0x3c, 0x12, 0x65, 0x25, 0x8d, + 0xa6, 0xc1, 0x6e, 0x70, 0xd0, 0x4c, 0xa6, 0xbf, 0xe4, 0x47, 0x58, 0xac, 0x2c, 0xb7, 0x82, 0xce, + 0xed, 0x06, 0x07, 0xeb, 0x87, 0x2f, 0xa2, 0x7b, 0x4e, 0x8b, 0x6e, 0x9d, 0xa2, 0x0b, 0x47, 0x4e, + 0xbc, 0x86, 0xfc, 0x0a, 0xdb, 0xc3, 0xc2, 0xca, 0x5c, 0xb0, 0x74, 0x58, 0x96, 0x42, 0x5b, 0x26, + 0x0a, 0x93, 0x0e, 0xe8, 0xfc, 0x6e, 0x70, 0xb0, 0x72, 0xf8, 0x34, 0xf2, 0x97, 0x8c, 0xa6, 0x97, + 0x8c, 0x5e, 0xd7, 0x97, 0x4c, 0x88, 0x97, 0x1d, 0x7b, 0xd5, 0x89, 0x13, 0x91, 0x13, 0xd8, 0xac, + 0xcd, 0xb8, 0x52, 0xde, 0xa8, 0xa2, 0x0b, 0x0f, 0x39, 0x6d, 0x78, 0xcd, 0x91, 0x52, 0xe8, 0x52, + 0x91, 0x77, 0xb0, 0x9d, 0x9a, 0x3c, 0xe7, 0x3a, 0x63, 0x4a, 0x6a, 0xc1, 0x4c, 0xe1, 0x78, 0x15, + 0x5d, 0x42, 0xa7, 0xfd, 0x7b, 0xdf, 0x77, 0xec, 0x05, 0x6d, 0xa9, 0xc5, 0x99, 0xa7, 0x27, 0x24, + 0xfd, 0x24, 0xb6, 0xf7, 0x06, 0x16, 0xf1, 0xf9, 0xa4, 0x01, 0x0b, 0xed, 0xf8, 0xea, 0x24, 0x7c, + 0x44, 0x56, 0xa1, 0xf1, 0x3a, 0x39, 0x8a, 0x3b, 0x71, 0xe7, 0x4d, 0x18, 0x90, 0x6d, 0x08, 0xcf, + 0x93, 0x13, 0x16, 0x77, 0xe2, 0xcb, 0xf8, 0xa8, 0x1d, 0xbf, 0x77, 0xd1, 0x39, 0x12, 0xc2, 0xea, + 0x47, 0x91, 0xf9, 0xbd, 0xbf, 0x9a, 0x40, 0x3e, 0x3d, 0x93, 0x3c, 0x81, 0xe5, 0x2e, 0xaf, 0x04, + 0x93, 0x19, 0x56, 0x69, 0x21, 0x59, 0x72, 0xbf, 0x71, 0x46, 0x76, 0x61, 0x25, 0x35, 0xda, 0xe7, + 0x38, 0x9d, 0x60, 0xa9, 0xd6, 0x92, 0xbb, 0x21, 0xf2, 0x25, 0x32, 0x7a, 0xb2, 0xcf, 0x0a, 0x6e, + 0x7d, 0x01, 0x9a, 0x09, 0xf8, 0xd0, 0x39, 0xb7, 0x83, 0x3b, 0x84, 0x09, 0xcf, 0x15, 0xe6, 0x75, + 0x46, 0x78, 0xc7, 0x73, 0x45, 0xbe, 0x81, 0x6d, 0xae, 0x94, 0xf9, 0xc0, 0x86, 0xfa, 0x77, 0x6d, + 0x3e, 0x68, 0xd6, 0x93, 0x42, 0x65, 0x15, 0x5d, 0xdc, 0x0d, 0x0e, 0x1a, 0x09, 0x41, 0xec, 0x37, + 0x0f, 0x9d, 0x22, 0x42, 0x5e, 0x02, 0xc1, 0x34, 0x32, 0x9e, 0x65, 0xa5, 0xa8, 0x2a, 0x7f, 0xf4, + 0x12, 0x3a, 0x87, 0x88, 0x1c, 0x79, 0x00, 0x2f, 0x70, 0x0d, 0x54, 0x99, 0x94, 0xab, 0x19, 0x5b, + 0x16, 0x6c, 0xda, 0x93, 0xcb, 0xd8, 0x7b, 0xaf, 0x3e, 0xb3, 0x36, 0x51, 0x5c, 0x5c, 0x79, 0x61, + 0xf2, 0x18, 0x2d, 0xeb, 0x63, 0x66, 0x61, 0xf2, 0x0c, 0x9a, 0xca, 0xf4, 0x99, 0x12, 0x23, 0xa1, + 0x68, 0x03, 0x2f, 0xd4, 0x50, 0xa6, 0xdf, 0x76, 0xff, 0x24, 0x82, 0xad, 0xd4, 0xe4, 0x85, 0xd1, + 0xae, 0x5f, 0x6f, 0x69, 0x4d, 0xa4, 0x6d, 0xce, 0xa0, 0xf6, 0x94, 0xff, 0x05, 0x80, 0x63, 0xf5, + 0x4c, 0x99, 0x73, 0x4b, 0x01, 0x69, 0xce, 0xfe, 0x14, 0x03, 0xe4, 0x29, 0x38, 0x6b, 0xff, 0xf6, + 0x15, 0x3f, 0x5b, 0xca, 0xf8, 0x9c, 0x47, 0xb0, 0x35, 0x30, 0x96, 0x95, 0xa2, 0xb2, 0xbc, 0xb4, + 0xb3, 0xd7, 0xae, 0x62, 0x46, 0x37, 0x07, 0xc6, 0x26, 0x1e, 0x99, 0x5e, 0x7b, 0x1f, 0x36, 0xdc, + 0xf8, 0xcb, 0x54, 0xb0, 0x54, 0x0d, 0x2b, 0x2b, 0x4a, 0xba, 0x86, 0x8e, 0xeb, 0x75, 0xf8, 0xd8, + 0x47, 0xc9, 0x73, 0x58, 0x9d, 0x12, 0xb5, 0xc9, 0x04, 0x5d, 0x47, 0xd6, 0x4a, 0x1d, 0xeb, 0x98, + 0x4c, 0xdc, 0xa5, 0xfc, 0x61, 0xb4, 0xa0, 0x1b, 0x1f, 0x51, 0xde, 0x1b, 0x2d, 0x48, 0x0c, 0x5b, + 0x3d, 0xa9, 0x04, 0xeb, 0xa9, 0x61, 0x35, 0x60, 0x52, 0x5b, 0x51, 0x8e, 0xb8, 0xa2, 0xe1, 0x43, + 0x23, 0xb7, 0xe9, 0x54, 0xa7, 0x4e, 0x14, 0xd7, 0x1a, 0xf2, 0x03, 0x40, 0x56, 0x72, 0xa9, 0x99, + 0x9b, 0x45, 0xba, 0xf9, 0x90, 0x43, 0x13, 0xc9, 0x97, 0x32, 0xc7, 0x15, 0x52, 0x70, 0x5c, 0x1d, + 0xd5, 0x60, 0x68, 0x33, 0xd7, 0x78, 0xe8, 0x41, 0x1e, 0x5c, 0x21, 0x5e, 0x76, 0x51, 0xab, 0xd0, + 0xec, 0x27, 0x58, 0xc8, 0x5d, 0x3e, 0xb6, 0xb0, 0x9f, 0x5e, 0x7e, 0x6e, 0x3f, 0xbd, 0x35, 0x99, + 0x48, 0x50, 0xe9, 0x3a, 0x27, 0xe7, 0x63, 0xe6, 0xd6, 0x5b, 0x45, 0xb7, 0x71, 0x08, 0x1b, 0x39, + 0x1f, 0xbb, 0xb1, 0xaf, 0xc8, 0x3e, 0x84, 0x0e, 0x34, 0xdd, 0x6b, 0xa6, 0x79, 0x2e, 0x98, 0x12, + 0x9a, 0x3e, 0x46, 0xce, 0x5a, 0xce, 0xc7, 0x67, 0xdd, 0xeb, 0x0e, 0xcf, 0x45, 0x5b, 0x68, 0x57, + 0xf8, 0x4c, 0x56, 0xbc, 0xab, 0x04, 0xbb, 0xd3, 0x00, 0xf4, 0x7f, 0xbe, 0xf0, 0x35, 0xf4, 0xcb, + 0xac, 0xfe, 0x6e, 0xf6, 0x84, 0x46, 0x7a, 0x3e, 0xb4, 0x62, 0xcc, 0x6c, 0xc9, 0x53, 0xa9, 0xfb, + 0xf4, 0x89, 0x9f, 0x3d, 0x8f, 0xbd, 0x75, 0xd0, 0xa5, 0x47, 0xc8, 0x57, 0xb0, 0x36, 0x6d, 0x2b, + 0xbf, 0x72, 0x29, 0xee, 0x84, 0xd5, 0x3a, 0x88, 0xbb, 0x70, 0xef, 0x19, 0x34, 0x6f, 0x67, 0x62, + 0x09, 0xe6, 0x46, 0xdf, 0x85, 0x8f, 0xf0, 0xfb, 0x7d, 0x18, 0xec, 0x7d, 0x0d, 0x0b, 0xee, 0xdd, + 0xa4, 0x09, 0x8b, 0xb8, 0xde, 0xfd, 0x32, 0xbb, 0xe2, 0x4a, 0x66, 0xdc, 0x8a, 0x30, 0x70, 0x7f, + 0xb1, 0x96, 0xf6, 0x4c, 0xab, 0x49, 0x38, 0xf7, 0xf3, 0xab, 0xbf, 0x6f, 0x76, 0x82, 0x7f, 0x6e, + 0x76, 0x82, 0x7f, 0x6f, 0x76, 0x02, 0x78, 0x2e, 0x8d, 0x4f, 0x6e, 0x51, 0x9a, 0xf1, 0xe4, 0xbe, + 0x3c, 0x9f, 0x07, 0xdd, 0x25, 0x2c, 0xda, 0xb7, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x23, 0x6e, + 0x8c, 0x70, 0xe8, 0x06, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.go index 91f4e9818e1a..a8731341a515 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.go @@ -60,17 +60,19 @@ func (x TlsParameters_TlsProtocol) String() string { return proto.EnumName(TlsParameters_TlsProtocol_name, int32(x)) } func (TlsParameters_TlsProtocol) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{0, 0} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{0, 0} } type TlsParameters struct { - // Minimum TLS protocol version. + // Minimum TLS protocol version. By default, it's ``TLSv1_0``. TlsMinimumProtocolVersion TlsParameters_TlsProtocol `protobuf:"varint,1,opt,name=tls_minimum_protocol_version,json=tlsMinimumProtocolVersion,proto3,enum=envoy.api.v2.auth.TlsParameters_TlsProtocol" json:"tls_minimum_protocol_version,omitempty"` - // Maximum TLS protocol version. + // Maximum TLS protocol version. By default, it's ``TLSv1_3`` for servers in non-FIPS builds, and + // ``TLSv1_2`` for clients and for servers using :ref:`BoringSSL FIPS `. TlsMaximumProtocolVersion TlsParameters_TlsProtocol `protobuf:"varint,2,opt,name=tls_maximum_protocol_version,json=tlsMaximumProtocolVersion,proto3,enum=envoy.api.v2.auth.TlsParameters_TlsProtocol" json:"tls_maximum_protocol_version,omitempty"` // If specified, the TLS listener will only support the specified `cipher list - // `_. - // If not specified, the default list will be used. + // `_ + // when negotiating TLS 1.0-1.2 (this setting has no effect when negotiating TLS 1.3). If not + // specified, the default list will be used. // // In non-FIPS builds, the default cipher list is: // @@ -131,7 +133,7 @@ func (m *TlsParameters) Reset() { *m = TlsParameters{} } func (m *TlsParameters) String() string { return proto.CompactTextString(m) } func (*TlsParameters) ProtoMessage() {} func (*TlsParameters) Descriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{0} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{0} } func (m *TlsParameters) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -209,7 +211,7 @@ func (m *TlsCertificate) Reset() { *m = TlsCertificate{} } func (m *TlsCertificate) String() string { return proto.CompactTextString(m) } func (*TlsCertificate) ProtoMessage() {} func (*TlsCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{1} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{1} } func (m *TlsCertificate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -307,7 +309,7 @@ func (m *TlsSessionTicketKeys) Reset() { *m = TlsSessionTicketKeys{} } func (m *TlsSessionTicketKeys) String() string { return proto.CompactTextString(m) } func (*TlsSessionTicketKeys) ProtoMessage() {} func (*TlsSessionTicketKeys) Descriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{2} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{2} } func (m *TlsSessionTicketKeys) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -452,7 +454,7 @@ func (m *CertificateValidationContext) Reset() { *m = CertificateValidat func (m *CertificateValidationContext) String() string { return proto.CompactTextString(m) } func (*CertificateValidationContext) ProtoMessage() {} func (*CertificateValidationContext) Descriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{3} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{3} } func (m *CertificateValidationContext) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -575,7 +577,7 @@ func (m *CommonTlsContext) Reset() { *m = CommonTlsContext{} } func (m *CommonTlsContext) String() string { return proto.CompactTextString(m) } func (*CommonTlsContext) ProtoMessage() {} func (*CommonTlsContext) Descriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{4} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{4} } func (m *CommonTlsContext) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -792,7 +794,7 @@ func (m *CommonTlsContext_CombinedCertificateValidationContext) String() string } func (*CommonTlsContext_CombinedCertificateValidationContext) ProtoMessage() {} func (*CommonTlsContext_CombinedCertificateValidationContext) Descriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{4, 0} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{4, 0} } func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -860,7 +862,7 @@ func (m *UpstreamTlsContext) Reset() { *m = UpstreamTlsContext{} } func (m *UpstreamTlsContext) String() string { return proto.CompactTextString(m) } func (*UpstreamTlsContext) ProtoMessage() {} func (*UpstreamTlsContext) Descriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{5} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{5} } func (m *UpstreamTlsContext) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -939,7 +941,7 @@ func (m *DownstreamTlsContext) Reset() { *m = DownstreamTlsContext{} } func (m *DownstreamTlsContext) String() string { return proto.CompactTextString(m) } func (*DownstreamTlsContext) ProtoMessage() {} func (*DownstreamTlsContext) Descriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{6} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{6} } func (m *DownstreamTlsContext) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1118,7 +1120,7 @@ func (m *SdsSecretConfig) Reset() { *m = SdsSecretConfig{} } func (m *SdsSecretConfig) String() string { return proto.CompactTextString(m) } func (*SdsSecretConfig) ProtoMessage() {} func (*SdsSecretConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{7} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{7} } func (m *SdsSecretConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1179,7 +1181,7 @@ func (m *Secret) Reset() { *m = Secret{} } func (m *Secret) String() string { return proto.CompactTextString(m) } func (*Secret) ProtoMessage() {} func (*Secret) Descriptor() ([]byte, []int) { - return fileDescriptor_cert_10838127352873d3, []int{8} + return fileDescriptor_cert_b6b543c414c2aeaf, []int{8} } func (m *Secret) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4975,90 +4977,91 @@ var ( ErrIntOverflowCert = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("envoy/api/v2/auth/cert.proto", fileDescriptor_cert_10838127352873d3) } - -var fileDescriptor_cert_10838127352873d3 = []byte{ - // 1309 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xbf, 0x73, 0x1b, 0x45, - 0x14, 0xf6, 0x49, 0xb2, 0x22, 0x3f, 0x25, 0xce, 0x79, 0x63, 0xf0, 0x59, 0x18, 0x47, 0xb9, 0x24, - 0x83, 0x8b, 0x8c, 0x44, 0x94, 0xa1, 0xe0, 0x57, 0x20, 0x56, 0x60, 0x4c, 0x62, 0x08, 0x9c, 0xe4, - 0x0c, 0xd0, 0x1c, 0xeb, 0xd3, 0x5a, 0x5a, 0x7c, 0xbf, 0xd8, 0x5d, 0xc9, 0x16, 0x05, 0x05, 0x65, - 0xca, 0xd4, 0x34, 0x74, 0x74, 0xf4, 0x54, 0x94, 0x34, 0xcc, 0xf0, 0x27, 0x30, 0xee, 0x68, 0x52, - 0x53, 0x01, 0xb3, 0x7b, 0x77, 0xf6, 0x49, 0x77, 0x89, 0x04, 0x93, 0xa1, 0xbb, 0xdd, 0xb7, 0xef, - 0xfb, 0x76, 0xdf, 0xfb, 0xde, 0x7b, 0x07, 0x1b, 0xc4, 0x1f, 0x05, 0xe3, 0x26, 0x0e, 0x69, 0x73, - 0xd4, 0x6a, 0xe2, 0xa1, 0x18, 0x34, 0x1d, 0xc2, 0x44, 0x23, 0x64, 0x81, 0x08, 0xd0, 0x8a, 0xb2, - 0x36, 0x70, 0x48, 0x1b, 0xa3, 0x56, 0x43, 0x5a, 0x6b, 0x93, 0x0e, 0x4e, 0xc0, 0x48, 0x73, 0x1f, - 0x73, 0x12, 0x39, 0xd4, 0xae, 0x67, 0xad, 0x4e, 0xe0, 0x1f, 0xd0, 0xbe, 0xcd, 0x83, 0x21, 0x73, - 0x92, 0x63, 0x9b, 0xfd, 0x20, 0xe8, 0xbb, 0xa4, 0xa9, 0x56, 0xfb, 0xc3, 0x83, 0xe6, 0x11, 0xc3, - 0x61, 0x48, 0x18, 0x8f, 0xed, 0x6b, 0x23, 0xec, 0xd2, 0x1e, 0x16, 0xa4, 0x99, 0x7c, 0xc4, 0x86, - 0xd5, 0x7e, 0xd0, 0x0f, 0xd4, 0x67, 0x53, 0x7e, 0x45, 0xbb, 0xe6, 0x77, 0x45, 0xb8, 0xd0, 0x75, - 0xf9, 0xc7, 0x98, 0x61, 0x8f, 0x08, 0xc2, 0x38, 0x1a, 0xc3, 0x86, 0x70, 0xb9, 0xed, 0x51, 0x9f, - 0x7a, 0x43, 0xcf, 0x56, 0xc7, 0x9c, 0xc0, 0xb5, 0x47, 0x84, 0x71, 0x1a, 0xf8, 0x86, 0x56, 0xd7, - 0xb6, 0x96, 0x5b, 0x37, 0x1a, 0x99, 0xf7, 0x35, 0x26, 0x70, 0xd4, 0x2a, 0xf6, 0xdd, 0x86, 0x9f, - 0xfe, 0xf8, 0xb9, 0xb8, 0xf8, 0xad, 0x56, 0xd0, 0x35, 0x6b, 0x5d, 0xb8, 0xfc, 0xc3, 0x08, 0x3c, - 0xb1, 0x3f, 0x8c, 0xa0, 0x4f, 0xa9, 0xf1, 0x71, 0x3e, 0x75, 0xe1, 0x79, 0x50, 0x47, 0xe0, 0xd3, - 0xd4, 0x57, 0xe1, 0x82, 0x43, 0xc3, 0x01, 0x61, 0x36, 0x1f, 0x52, 0x41, 0xb8, 0x51, 0xac, 0x17, - 0xb7, 0x96, 0xac, 0xf3, 0xd1, 0x66, 0x47, 0xed, 0xa1, 0xcb, 0x50, 0x25, 0x4e, 0x6f, 0x60, 0x3b, - 0x43, 0x36, 0x22, 0xdc, 0x28, 0xa9, 0x23, 0x20, 0xb7, 0xda, 0x6a, 0xc7, 0x7c, 0x00, 0xd5, 0x14, - 0x37, 0x3a, 0x0f, 0x95, 0xee, 0x6e, 0xc7, 0xbe, 0xb3, 0xd7, 0x7d, 0xa0, 0x2f, 0xa0, 0x2a, 0x9c, - 0xeb, 0xee, 0x76, 0x46, 0x37, 0xed, 0x57, 0x75, 0xed, 0x6c, 0x71, 0x53, 0x2f, 0x9c, 0x2d, 0x5a, - 0x7a, 0xf1, 0x6c, 0x71, 0x4b, 0x2f, 0x99, 0x7f, 0x16, 0x60, 0xb9, 0xeb, 0xf2, 0x36, 0x61, 0x82, - 0x1e, 0x50, 0x07, 0x0b, 0x82, 0xee, 0xc1, 0x8a, 0x73, 0xb6, 0xb4, 0x9d, 0x01, 0xa6, 0x51, 0x52, - 0xaa, 0xad, 0x97, 0x27, 0x23, 0x23, 0x35, 0xd4, 0xb8, 0x8b, 0x05, 0xee, 0x28, 0x01, 0x59, 0x7a, - 0xca, 0xaf, 0x2d, 0xdd, 0xd0, 0x6d, 0xa8, 0x86, 0x8c, 0x8e, 0x24, 0xce, 0x21, 0x19, 0xab, 0xf8, - 0xce, 0x44, 0x81, 0xd8, 0xe3, 0x3e, 0x19, 0xa3, 0xd7, 0xa1, 0x12, 0x62, 0xce, 0x8f, 0x02, 0xd6, - 0x33, 0x8a, 0xf3, 0x38, 0x9f, 0x1e, 0x97, 0xd4, 0x81, 0xc3, 0x43, 0x9b, 0x0b, 0x1c, 0xba, 0xc4, - 0x28, 0xcd, 0x45, 0x2d, 0x3d, 0x3a, 0xca, 0x01, 0xd9, 0xb0, 0xc1, 0x69, 0xdf, 0x27, 0x3d, 0x3b, - 0x1d, 0x0d, 0x41, 0x3d, 0xc2, 0x05, 0xf6, 0x42, 0x63, 0xb1, 0x5e, 0x9c, 0x0d, 0x58, 0x8b, 0x20, - 0x52, 0xe1, 0xed, 0x26, 0x00, 0xe6, 0x1e, 0xac, 0x76, 0x5d, 0xde, 0x21, 0x5c, 0xea, 0xa3, 0x4b, - 0x9d, 0x43, 0x22, 0xee, 0x93, 0x31, 0x47, 0x6f, 0x43, 0xe9, 0x90, 0x8c, 0xb9, 0xa1, 0xcd, 0x41, - 0x10, 0xab, 0xef, 0xb1, 0x56, 0xa8, 0x68, 0x96, 0x72, 0x33, 0x7f, 0x2d, 0xc1, 0x46, 0x8a, 0xef, - 0x61, 0x54, 0xa4, 0x34, 0xf0, 0xdb, 0x81, 0x2f, 0xc8, 0xb1, 0x40, 0x6f, 0x01, 0x08, 0x36, 0xe4, - 0x42, 0xbe, 0x0c, 0xcf, 0x97, 0xd8, 0xa5, 0xd8, 0xa1, 0x8d, 0xd1, 0x0e, 0xac, 0x8d, 0x08, 0xa3, - 0x07, 0xe3, 0x89, 0xb0, 0x0c, 0x30, 0x1f, 0x18, 0x05, 0x29, 0xd7, 0x6d, 0x5d, 0xde, 0xa8, 0xfa, - 0x58, 0xab, 0x98, 0x65, 0x56, 0xaa, 0xbf, 0xbb, 0x65, 0x5b, 0x2f, 0x44, 0x0e, 0xa9, 0x4b, 0xed, - 0x60, 0x3e, 0x78, 0x0a, 0x12, 0x0f, 0x0f, 0x69, 0x54, 0x1b, 0x53, 0x48, 0x37, 0xb6, 0x6e, 0xe4, - 0x20, 0x75, 0xc2, 0x43, 0x8a, 0x5e, 0x3b, 0x45, 0xe2, 0xc3, 0xfd, 0x2f, 0x89, 0x23, 0x6c, 0xec, - 0x0a, 0xdb, 0xc7, 0x1e, 0x89, 0x4b, 0x68, 0x35, 0x32, 0x77, 0x22, 0xeb, 0x1d, 0x57, 0x7c, 0x84, - 0x3d, 0x29, 0xf4, 0x4b, 0x8c, 0x7c, 0x35, 0xa4, 0x8c, 0xd8, 0x69, 0xa5, 0x2c, 0xaa, 0x88, 0xd4, - 0x1a, 0x51, 0x1f, 0x6c, 0x24, 0x7d, 0xb0, 0xb1, 0x1d, 0x04, 0xee, 0x43, 0xec, 0x0e, 0x89, 0xb5, - 0x12, 0xbb, 0x3d, 0x38, 0x53, 0xcb, 0x21, 0x5c, 0x4b, 0xb0, 0x9e, 0xa9, 0x9a, 0xf2, 0x4c, 0xf0, - 0x2b, 0x31, 0x4e, 0xe7, 0xa9, 0xca, 0x41, 0x4d, 0x28, 0x3a, 0xcc, 0x35, 0xce, 0xcd, 0x93, 0x3a, - 0x79, 0x12, 0xbd, 0x01, 0xeb, 0xd8, 0x75, 0x83, 0x23, 0x9b, 0x1c, 0x87, 0x94, 0x4d, 0x5e, 0xce, - 0xa8, 0xd4, 0xb5, 0xad, 0x8a, 0xb5, 0xa6, 0x0e, 0xbc, 0x17, 0xd9, 0x53, 0xac, 0xe6, 0x93, 0x73, - 0xa0, 0xb7, 0x03, 0xcf, 0x0b, 0x7c, 0xd9, 0x27, 0x62, 0x0d, 0xbd, 0x03, 0x20, 0x1b, 0x69, 0x28, - 0x5b, 0x22, 0x8f, 0x35, 0x54, 0x9f, 0xd5, 0x36, 0xad, 0x25, 0x11, 0x2f, 0x39, 0xda, 0x05, 0x5d, - 0x02, 0xa4, 0xee, 0xc1, 0x95, 0x7e, 0xaa, 0xad, 0x2b, 0xf9, 0x30, 0xa9, 0x2b, 0x59, 0x17, 0xc5, - 0xc4, 0x9a, 0xa3, 0x2f, 0x00, 0x8d, 0x4e, 0x75, 0x6e, 0x3b, 0xd1, 0x25, 0xe3, 0x86, 0xd1, 0xcc, - 0xc1, 0x7b, 0x56, 0x7d, 0xec, 0x2c, 0x58, 0x2b, 0xa3, 0x4c, 0xd1, 0x5c, 0x87, 0x65, 0xec, 0x86, - 0xfe, 0xe9, 0xc8, 0x48, 0x9a, 0xf3, 0x05, 0xb9, 0x9b, 0xf4, 0x63, 0x8e, 0xbe, 0x06, 0x73, 0xea, - 0x59, 0x36, 0xef, 0x71, 0x9b, 0x13, 0x87, 0x11, 0x61, 0x47, 0xe3, 0x96, 0x1b, 0x65, 0xf5, 0x50, - 0x33, 0xe7, 0x62, 0x9d, 0x1e, 0xef, 0xa8, 0xb3, 0x6d, 0x75, 0xf4, 0xac, 0xbc, 0x75, 0xcd, 0xda, - 0x9c, 0x7c, 0xf5, 0xd4, 0x51, 0x8e, 0x04, 0x5c, 0xcb, 0x06, 0x21, 0x4b, 0x1f, 0xcb, 0x66, 0x0e, - 0xf6, 0x9d, 0x05, 0xab, 0x9e, 0x89, 0xc4, 0xd4, 0x19, 0xf4, 0x48, 0x83, 0x97, 0x9c, 0xc0, 0xdb, - 0xa7, 0x52, 0xf3, 0x39, 0x49, 0xa8, 0x28, 0xb6, 0x9d, 0xbc, 0x24, 0x4c, 0x89, 0x4a, 0x6e, 0x28, - 0x98, 0x19, 0xd9, 0x59, 0x4f, 0xe8, 0x32, 0xc6, 0xda, 0xf7, 0x05, 0xb8, 0x36, 0x0f, 0x0a, 0x1a, - 0x43, 0xad, 0x47, 0x0e, 0xf0, 0xd0, 0x15, 0x79, 0x77, 0xd6, 0xfe, 0x93, 0x70, 0xe2, 0x64, 0x3d, - 0x52, 0xc9, 0x32, 0x62, 0xf8, 0x2c, 0xf5, 0x37, 0x73, 0xa6, 0xa9, 0x30, 0x6f, 0x9a, 0x26, 0x78, - 0x67, 0x26, 0x6c, 0x7b, 0x1d, 0xd6, 0x72, 0xf8, 0xc5, 0x38, 0x24, 0xf7, 0x4a, 0x95, 0x45, 0xbd, - 0x6c, 0xfe, 0xa5, 0x01, 0xda, 0x0b, 0xb9, 0x60, 0x04, 0x7b, 0xa9, 0x92, 0xff, 0x04, 0x90, 0xa3, - 0x32, 0x66, 0x2b, 0x85, 0x4f, 0x84, 0xea, 0xea, 0x1c, 0xe9, 0xb5, 0x74, 0x67, 0xba, 0x8b, 0x6c, - 0x40, 0x91, 0xfb, 0x54, 0xbd, 0x74, 0x29, 0x7e, 0x05, 0x2b, 0x6e, 0xfd, 0xad, 0x59, 0x72, 0x1b, - 0x35, 0xe1, 0x52, 0xd4, 0xb4, 0x18, 0xf1, 0x49, 0x3f, 0x10, 0x54, 0xdd, 0x58, 0x55, 0x75, 0xc5, - 0x42, 0xca, 0x64, 0xa5, 0x2d, 0xe8, 0x7d, 0xd0, 0x3d, 0x7c, 0x6c, 0xf3, 0x68, 0xa2, 0xda, 0x6a, - 0x88, 0x46, 0x63, 0x7f, 0x23, 0xd3, 0x6f, 0xf7, 0x3e, 0xf0, 0xc5, 0xad, 0x56, 0xd4, 0x71, 0x97, - 0x3d, 0x7c, 0x1c, 0x8f, 0x61, 0x39, 0x80, 0xcd, 0x27, 0x45, 0x58, 0xbd, 0x1b, 0x1c, 0xf9, 0xff, - 0x47, 0x08, 0x3e, 0x85, 0x5a, 0x32, 0x37, 0x1c, 0x97, 0x12, 0x5f, 0x4c, 0xb4, 0xe6, 0xc2, 0xcc, - 0x69, 0x61, 0xc4, 0xde, 0x6d, 0xe5, 0x9c, 0xfe, 0x8d, 0x7b, 0x13, 0xaa, 0xa7, 0x13, 0xc9, 0xa7, - 0x71, 0x33, 0x7c, 0x16, 0x14, 0x24, 0x83, 0xc7, 0xa7, 0xe8, 0x33, 0xb8, 0x94, 0x84, 0x51, 0xa8, - 0x3f, 0x93, 0x74, 0x34, 0x5f, 0xc9, 0xef, 0xd0, 0x99, 0x3f, 0x19, 0xd9, 0x49, 0x79, 0xe6, 0xf7, - 0x66, 0x08, 0xd7, 0x73, 0xa0, 0x73, 0x0a, 0x60, 0xf1, 0xdf, 0xf4, 0xa9, 0x0c, 0xcf, 0xb4, 0xec, - 0x6b, 0x60, 0xe4, 0xd1, 0x4a, 0xdd, 0x9b, 0x04, 0x2e, 0x4e, 0xb7, 0x35, 0x04, 0x25, 0xf5, 0xff, - 0x20, 0x93, 0xbb, 0x64, 0xa9, 0x6f, 0x74, 0x1b, 0x40, 0xde, 0x72, 0xa2, 0x3e, 0x2f, 0xe7, 0x4c, - 0xdf, 0x08, 0x22, 0xf9, 0x75, 0xe2, 0x3d, 0x1e, 0x6d, 0x98, 0x3f, 0x16, 0xa0, 0x1c, 0x91, 0xe4, - 0xc2, 0xef, 0xc2, 0xc5, 0xa9, 0xd9, 0x11, 0x73, 0xcc, 0x9e, 0x88, 0x3b, 0x0b, 0xd6, 0xf2, 0xe4, - 0x74, 0x78, 0x5a, 0x06, 0x8b, 0xcf, 0x21, 0x83, 0xf9, 0xd3, 0xb6, 0xf4, 0xfc, 0xa6, 0xed, 0x76, - 0x19, 0x4a, 0x32, 0x31, 0xdb, 0x2f, 0xfe, 0x70, 0xb2, 0xa9, 0xfd, 0x72, 0xb2, 0xa9, 0xfd, 0x76, - 0xb2, 0xa9, 0xfd, 0x7e, 0xb2, 0xa9, 0x7d, 0x5e, 0x92, 0x88, 0xfb, 0x65, 0x25, 0xdf, 0x5b, 0xff, - 0x04, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x31, 0x2b, 0x00, 0x22, 0x0f, 0x00, 0x00, +func init() { proto.RegisterFile("envoy/api/v2/auth/cert.proto", fileDescriptor_cert_b6b543c414c2aeaf) } + +var fileDescriptor_cert_b6b543c414c2aeaf = []byte{ + // 1325 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xbf, 0x73, 0x1b, 0xc5, + 0x17, 0xf7, 0x49, 0xb2, 0x22, 0x3f, 0x25, 0xce, 0x79, 0xe3, 0xef, 0xf8, 0xac, 0xaf, 0x71, 0x14, + 0x25, 0x19, 0x5c, 0x64, 0x24, 0xa2, 0x0c, 0x45, 0xf8, 0x11, 0x88, 0x15, 0x18, 0x93, 0x18, 0x12, + 0x4e, 0x72, 0x06, 0x68, 0x8e, 0xf5, 0x69, 0x2d, 0x2d, 0xbe, 0xbb, 0x3d, 0x76, 0x57, 0xb2, 0x45, + 0x41, 0x41, 0x99, 0x32, 0x35, 0x0d, 0x1d, 0x1d, 0x3d, 0x15, 0x25, 0x0d, 0x33, 0xfc, 0x09, 0x8c, + 0x3b, 0x9a, 0xd4, 0x54, 0xc0, 0xec, 0xde, 0xc9, 0x3e, 0xe9, 0x2e, 0x91, 0x60, 0x32, 0x54, 0x77, + 0xbb, 0x6f, 0xdf, 0xe7, 0xb3, 0xfb, 0xde, 0x67, 0xdf, 0x5b, 0xd8, 0x20, 0xc1, 0x90, 0x8d, 0x1a, + 0x38, 0xa4, 0x8d, 0x61, 0xb3, 0x81, 0x07, 0xb2, 0xdf, 0x70, 0x09, 0x97, 0xf5, 0x90, 0x33, 0xc9, + 0xd0, 0x8a, 0xb6, 0xd6, 0x71, 0x48, 0xeb, 0xc3, 0x66, 0x5d, 0x59, 0x2b, 0x93, 0x0e, 0x2e, 0xe3, + 0xa4, 0xb1, 0x8f, 0x05, 0x89, 0x1c, 0x2a, 0xd7, 0xd3, 0x56, 0x97, 0x05, 0x07, 0xb4, 0xe7, 0x08, + 0x36, 0xe0, 0xee, 0x78, 0xd9, 0x66, 0x8f, 0xb1, 0x9e, 0x47, 0x1a, 0x7a, 0xb4, 0x3f, 0x38, 0x68, + 0x1c, 0x71, 0x1c, 0x86, 0x84, 0x8b, 0xd8, 0xbe, 0x36, 0xc4, 0x1e, 0xed, 0x62, 0x49, 0x1a, 0xe3, + 0x9f, 0xd8, 0xb0, 0xda, 0x63, 0x3d, 0xa6, 0x7f, 0x1b, 0xea, 0x2f, 0x9a, 0xad, 0x7d, 0x9b, 0x87, + 0x0b, 0x1d, 0x4f, 0x3c, 0xc2, 0x1c, 0xfb, 0x44, 0x12, 0x2e, 0xd0, 0x08, 0x36, 0xa4, 0x27, 0x1c, + 0x9f, 0x06, 0xd4, 0x1f, 0xf8, 0x8e, 0x5e, 0xe6, 0x32, 0xcf, 0x19, 0x12, 0x2e, 0x28, 0x0b, 0x2c, + 0xa3, 0x6a, 0x6c, 0x2d, 0x37, 0x6f, 0xd4, 0x53, 0xe7, 0xab, 0x4f, 0xe0, 0xe8, 0x51, 0xec, 0xbb, + 0x0d, 0x3f, 0xfe, 0xfe, 0x53, 0x7e, 0xf1, 0x1b, 0x23, 0x67, 0x1a, 0xf6, 0xba, 0xf4, 0xc4, 0x87, + 0x11, 0xf8, 0xd8, 0xfe, 0x38, 0x82, 0x3e, 0xa5, 0xc6, 0xc7, 0xd9, 0xd4, 0xb9, 0x97, 0x41, 0x1d, + 0x81, 0x4f, 0x53, 0x5f, 0x85, 0x0b, 0x2e, 0x0d, 0xfb, 0x84, 0x3b, 0x62, 0x40, 0x25, 0x11, 0x56, + 0xbe, 0x9a, 0xdf, 0x5a, 0xb2, 0xcf, 0x47, 0x93, 0x6d, 0x3d, 0x87, 0x2e, 0x43, 0x99, 0xb8, 0xdd, + 0xbe, 0xe3, 0x0e, 0xf8, 0x90, 0x08, 0xab, 0xa0, 0x97, 0x80, 0x9a, 0x6a, 0xe9, 0x99, 0xda, 0x43, + 0x28, 0x27, 0xb8, 0xd1, 0x79, 0x28, 0x75, 0x76, 0xdb, 0xce, 0xdd, 0xbd, 0xce, 0x43, 0x73, 0x01, + 0x95, 0xe1, 0x5c, 0x67, 0xb7, 0x3d, 0xbc, 0xe9, 0xbc, 0x66, 0x1a, 0x67, 0x83, 0x9b, 0x66, 0xee, + 0x6c, 0xd0, 0x34, 0xf3, 0x67, 0x83, 0x5b, 0x66, 0xa1, 0xf6, 0x47, 0x0e, 0x96, 0x3b, 0x9e, 0x68, + 0x11, 0x2e, 0xe9, 0x01, 0x75, 0xb1, 0x24, 0xe8, 0x3e, 0xac, 0xb8, 0x67, 0x43, 0xc7, 0xed, 0x63, + 0x1a, 0x25, 0xa5, 0xdc, 0x7c, 0x65, 0x32, 0x32, 0x4a, 0x43, 0xf5, 0x7b, 0x58, 0xe2, 0xb6, 0x16, + 0x90, 0x6d, 0x26, 0xfc, 0x5a, 0xca, 0x0d, 0xdd, 0x81, 0x72, 0xc8, 0xe9, 0x50, 0xe1, 0x1c, 0x92, + 0x91, 0x8e, 0xef, 0x4c, 0x14, 0x88, 0x3d, 0x1e, 0x90, 0x11, 0xba, 0x0d, 0xa5, 0x10, 0x0b, 0x71, + 0xc4, 0x78, 0xd7, 0xca, 0xcf, 0xe3, 0x7c, 0xba, 0x5c, 0x51, 0x33, 0x57, 0x84, 0x8e, 0x90, 0x38, + 0xf4, 0x88, 0x55, 0x98, 0x8b, 0x5a, 0x79, 0xb4, 0xb5, 0x03, 0x72, 0x60, 0x43, 0xd0, 0x5e, 0x40, + 0xba, 0x4e, 0x32, 0x1a, 0x92, 0xfa, 0x44, 0x48, 0xec, 0x87, 0xd6, 0x62, 0x35, 0x3f, 0x1b, 0xb0, + 0x12, 0x41, 0x24, 0xc2, 0xdb, 0x19, 0x03, 0xd4, 0xf6, 0x60, 0xb5, 0xe3, 0x89, 0x36, 0x11, 0x4a, + 0x1f, 0x1d, 0xea, 0x1e, 0x12, 0xf9, 0x80, 0x8c, 0x04, 0x7a, 0x1b, 0x0a, 0x87, 0x64, 0x24, 0x2c, + 0x63, 0x0e, 0x82, 0x58, 0x7d, 0x4f, 0x8d, 0x5c, 0xc9, 0xb0, 0xb5, 0x5b, 0xed, 0x97, 0x02, 0x6c, + 0x24, 0xf8, 0x1e, 0x47, 0x97, 0x94, 0xb2, 0xa0, 0xc5, 0x02, 0x49, 0x8e, 0x25, 0x7a, 0x0b, 0x40, + 0xf2, 0x81, 0x90, 0xea, 0x64, 0x78, 0xbe, 0xc4, 0x2e, 0xc5, 0x0e, 0x2d, 0x8c, 0x76, 0x60, 0x6d, + 0x48, 0x38, 0x3d, 0x18, 0x4d, 0x84, 0xa5, 0x8f, 0x45, 0xdf, 0xca, 0x29, 0xb9, 0x6e, 0x9b, 0x6a, + 0x47, 0xe5, 0xa7, 0x46, 0xa9, 0x56, 0xe4, 0x85, 0xea, 0xbb, 0x5b, 0x8e, 0xfd, 0xbf, 0xc8, 0x21, + 0xb1, 0xa9, 0x1d, 0x2c, 0xfa, 0xcf, 0x41, 0x12, 0xe1, 0x21, 0x8d, 0xee, 0xc6, 0x14, 0xd2, 0x8d, + 0xad, 0x1b, 0x19, 0x48, 0xed, 0xf0, 0x90, 0xa2, 0xd7, 0x4f, 0x91, 0xc4, 0x60, 0xff, 0x0b, 0xe2, + 0x4a, 0x07, 0x7b, 0xd2, 0x09, 0xb0, 0x4f, 0xe2, 0x2b, 0xb4, 0x1a, 0x99, 0xdb, 0x91, 0xf5, 0xae, + 0x27, 0x3f, 0xc2, 0xbe, 0x12, 0xfa, 0x25, 0x4e, 0xbe, 0x1c, 0x50, 0x4e, 0x9c, 0xa4, 0x52, 0x16, + 0x75, 0x44, 0x2a, 0xf5, 0xa8, 0x0e, 0xd6, 0xc7, 0x75, 0xb0, 0xbe, 0xcd, 0x98, 0xf7, 0x18, 0x7b, + 0x03, 0x62, 0xaf, 0xc4, 0x6e, 0x0f, 0xcf, 0xd4, 0x72, 0x08, 0xd7, 0xc6, 0x58, 0x2f, 0x54, 0x4d, + 0x71, 0x26, 0xf8, 0x95, 0x18, 0xa7, 0xfd, 0x5c, 0xe5, 0xa0, 0x06, 0xe4, 0x5d, 0xee, 0x59, 0xe7, + 0xe6, 0x49, 0x9d, 0x5a, 0x89, 0xde, 0x80, 0x75, 0xec, 0x79, 0xec, 0xc8, 0x21, 0xc7, 0x21, 0xe5, + 0x93, 0x9b, 0xb3, 0x4a, 0x55, 0x63, 0xab, 0x64, 0xaf, 0xe9, 0x05, 0xef, 0x45, 0xf6, 0x04, 0x6b, + 0xed, 0xd9, 0x39, 0x30, 0x5b, 0xcc, 0xf7, 0x59, 0xa0, 0xea, 0x44, 0xac, 0xa1, 0x77, 0x00, 0x54, + 0x21, 0x0d, 0x55, 0x49, 0x14, 0xb1, 0x86, 0xaa, 0xb3, 0xca, 0xa6, 0xbd, 0x24, 0xe3, 0xa1, 0x40, + 0xbb, 0x60, 0x2a, 0x80, 0xc4, 0x3e, 0x84, 0xd6, 0x4f, 0xb9, 0x79, 0x25, 0x1b, 0x26, 0xb1, 0x25, + 0xfb, 0xa2, 0x9c, 0x18, 0x0b, 0xf4, 0x39, 0xa0, 0xe1, 0xa9, 0xce, 0x1d, 0x37, 0xda, 0x64, 0x5c, + 0x30, 0x1a, 0x19, 0x78, 0x2f, 0xba, 0x1f, 0x3b, 0x0b, 0xf6, 0xca, 0x30, 0x75, 0x69, 0xae, 0xc3, + 0x32, 0xf6, 0xc2, 0xe0, 0xb4, 0x65, 0x8c, 0x8b, 0xf3, 0x05, 0x35, 0x3b, 0xae, 0xc7, 0x02, 0x7d, + 0x05, 0xb5, 0xa9, 0x63, 0x39, 0xa2, 0x2b, 0x1c, 0x41, 0x5c, 0x4e, 0xa4, 0x13, 0xb5, 0x5b, 0x61, + 0x15, 0xf5, 0x41, 0x6b, 0x19, 0x1b, 0x6b, 0x77, 0x45, 0x5b, 0xaf, 0x6d, 0xe9, 0xa5, 0x67, 0xd7, + 0xdb, 0x34, 0xec, 0xcd, 0xc9, 0x53, 0x4f, 0x2d, 0x15, 0x48, 0xc2, 0xb5, 0x74, 0x10, 0xd2, 0xf4, + 0xb1, 0x6c, 0xe6, 0x60, 0xdf, 0x59, 0xb0, 0xab, 0xa9, 0x48, 0x4c, 0xad, 0x41, 0x4f, 0x0c, 0xf8, + 0xbf, 0xcb, 0xfc, 0x7d, 0xaa, 0x34, 0x9f, 0x91, 0x84, 0x92, 0x66, 0xdb, 0xc9, 0x4a, 0xc2, 0x94, + 0xa8, 0xd4, 0x84, 0x86, 0x99, 0x91, 0x9d, 0xf5, 0x31, 0x5d, 0xca, 0x58, 0xf9, 0x2e, 0x07, 0xd7, + 0xe6, 0x41, 0x41, 0x23, 0xa8, 0x74, 0xc9, 0x01, 0x1e, 0x78, 0x32, 0x6b, 0xcf, 0xc6, 0xbf, 0x12, + 0x4e, 0x9c, 0xac, 0x27, 0x3a, 0x59, 0x56, 0x0c, 0x9f, 0xa6, 0xfe, 0x7a, 0xce, 0x34, 0xe5, 0xe6, + 0x4d, 0xd3, 0x04, 0xef, 0xcc, 0x84, 0x6d, 0xaf, 0xc3, 0x5a, 0x06, 0xbf, 0x1c, 0x85, 0xe4, 0x7e, + 0xa1, 0xb4, 0x68, 0x16, 0x6b, 0x7f, 0x1a, 0x80, 0xf6, 0x42, 0x21, 0x39, 0xc1, 0x7e, 0xe2, 0xca, + 0x7f, 0x0c, 0xc8, 0xd5, 0x19, 0x73, 0xb4, 0xc2, 0x27, 0x42, 0x75, 0x75, 0x8e, 0xf4, 0xda, 0xa6, + 0x3b, 0x5d, 0x45, 0x36, 0x20, 0x2f, 0x02, 0xaa, 0x4f, 0xba, 0x14, 0x9f, 0x82, 0xe7, 0xb7, 0xfe, + 0x32, 0x6c, 0x35, 0x8d, 0x1a, 0x70, 0x29, 0x2a, 0x5a, 0x9c, 0x04, 0xa4, 0xc7, 0x24, 0xd5, 0x3b, + 0xd6, 0xb7, 0xba, 0x64, 0x23, 0x6d, 0xb2, 0x93, 0x16, 0xf4, 0x3e, 0x98, 0x3e, 0x3e, 0x76, 0x44, + 0xd4, 0x51, 0x1d, 0xdd, 0x44, 0xa3, 0xb6, 0xbf, 0x91, 0xaa, 0xb7, 0x7b, 0x1f, 0x04, 0xf2, 0x56, + 0x33, 0xaa, 0xb8, 0xcb, 0x3e, 0x3e, 0x8e, 0xdb, 0xb0, 0x6a, 0xc0, 0xb5, 0x67, 0x79, 0x58, 0xbd, + 0xc7, 0x8e, 0x82, 0xff, 0x22, 0x04, 0x9f, 0x40, 0x65, 0xdc, 0x37, 0x5c, 0x8f, 0x92, 0x40, 0x4e, + 0x94, 0xe6, 0xdc, 0xcc, 0x6e, 0x61, 0xc5, 0xde, 0x2d, 0xed, 0x9c, 0x7c, 0xc6, 0xbd, 0x09, 0xe5, + 0xd3, 0x8e, 0x14, 0xd0, 0xb8, 0x18, 0xbe, 0x08, 0x0a, 0xc6, 0x8d, 0x27, 0xa0, 0xe8, 0x53, 0xb8, + 0x34, 0x0e, 0xa3, 0xd4, 0x2f, 0x93, 0x64, 0x34, 0x5f, 0xcd, 0xae, 0xd0, 0xa9, 0x97, 0x8c, 0xaa, + 0xa4, 0x22, 0xf5, 0xbc, 0x19, 0xc0, 0xf5, 0x0c, 0xe8, 0x8c, 0x0b, 0xb0, 0xf8, 0x4f, 0xea, 0x54, + 0x8a, 0x67, 0x5a, 0xf6, 0x15, 0xb0, 0xb2, 0x68, 0x95, 0xee, 0x6b, 0x04, 0x2e, 0x4e, 0x97, 0x35, + 0x04, 0x05, 0xfd, 0x7e, 0x50, 0xc9, 0x5d, 0xb2, 0xf5, 0x3f, 0xba, 0x03, 0xa0, 0x76, 0x39, 0x71, + 0x3f, 0x2f, 0x67, 0x74, 0xdf, 0x08, 0x62, 0xfc, 0x74, 0x12, 0x5d, 0x11, 0x4d, 0xd4, 0x7e, 0xc8, + 0x41, 0x31, 0x22, 0xc9, 0x84, 0xdf, 0x85, 0x8b, 0x53, 0xbd, 0x23, 0xe6, 0x98, 0xdd, 0x11, 0x77, + 0x16, 0xec, 0xe5, 0xc9, 0xee, 0xf0, 0xbc, 0x0c, 0xe6, 0x5f, 0x42, 0x06, 0xb3, 0xbb, 0x6d, 0xe1, + 0xe5, 0x75, 0xdb, 0xed, 0x22, 0x14, 0x54, 0x62, 0xb6, 0x6f, 0x7f, 0x7f, 0xb2, 0x69, 0xfc, 0x7c, + 0xb2, 0x69, 0xfc, 0x7a, 0xb2, 0x69, 0xfc, 0x76, 0xb2, 0x69, 0xc0, 0x65, 0xca, 0x22, 0x86, 0x90, + 0xb3, 0xe3, 0x51, 0x9a, 0xec, 0x91, 0xf1, 0x59, 0x41, 0x7d, 0xf7, 0x8b, 0x5a, 0xe1, 0xb7, 0xfe, + 0x0e, 0x00, 0x00, 0xff, 0xff, 0x20, 0x71, 0xe0, 0x24, 0x45, 0x0f, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.go index 645fc2b7f750..a0ba47682b53 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.go @@ -84,7 +84,7 @@ func (x Cluster_DiscoveryType) String() string { return proto.EnumName(Cluster_DiscoveryType_name, int32(x)) } func (Cluster_DiscoveryType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 0} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 0} } // Refer to :ref:`load balancer type ` architecture @@ -138,7 +138,7 @@ func (x Cluster_LbPolicy) String() string { return proto.EnumName(Cluster_LbPolicy_name, int32(x)) } func (Cluster_LbPolicy) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 1} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 1} } // When V4_ONLY is selected, the DNS resolver will only perform a lookup for @@ -174,7 +174,7 @@ func (x Cluster_DnsLookupFamily) String() string { return proto.EnumName(Cluster_DnsLookupFamily_name, int32(x)) } func (Cluster_DnsLookupFamily) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 2} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 2} } type Cluster_ClusterProtocolSelection int32 @@ -201,7 +201,7 @@ func (x Cluster_ClusterProtocolSelection) String() string { return proto.EnumName(Cluster_ClusterProtocolSelection_name, int32(x)) } func (Cluster_ClusterProtocolSelection) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 3} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 3} } // If NO_FALLBACK is selected, a result @@ -232,7 +232,35 @@ func (x Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) String() string { return proto.EnumName(Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name, int32(x)) } func (Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 3, 0} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 3, 0} +} + +// The hash function used to hash hosts onto the ketama ring. +type Cluster_RingHashLbConfig_HashFunction int32 + +const ( + // Use `xxHash `_, this is the default hash function. + Cluster_RingHashLbConfig_XX_HASH Cluster_RingHashLbConfig_HashFunction = 0 + // Use `MurmurHash2 `_, this is compatible with + // std:hash in GNU libstdc++ 3.4.20 or above. This is typically the case when compiled + // on Linux and not macOS. + Cluster_RingHashLbConfig_MURMUR_HASH_2 Cluster_RingHashLbConfig_HashFunction = 1 +) + +var Cluster_RingHashLbConfig_HashFunction_name = map[int32]string{ + 0: "XX_HASH", + 1: "MURMUR_HASH_2", +} +var Cluster_RingHashLbConfig_HashFunction_value = map[string]int32{ + "XX_HASH": 0, + "MURMUR_HASH_2": 1, +} + +func (x Cluster_RingHashLbConfig_HashFunction) String() string { + return proto.EnumName(Cluster_RingHashLbConfig_HashFunction_name, int32(x)) +} +func (Cluster_RingHashLbConfig_HashFunction) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 5, 0} } // Configuration for a single upstream cluster. @@ -329,8 +357,7 @@ type Cluster struct { // for upstream connections. The key should match the extension filter name, such as // "envoy.filters.network.thrift_proxy". See the extension's documentation for details on // specific options. - ExtensionProtocolOptions map[string]*types.Struct `protobuf:"bytes,35,rep,name=extension_protocol_options,json=extensionProtocolOptions,proto3" json:"extension_protocol_options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // [#not-implemented-hide:] + ExtensionProtocolOptions map[string]*types.Struct `protobuf:"bytes,35,rep,name=extension_protocol_options,json=extensionProtocolOptions,proto3" json:"extension_protocol_options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use. // The extension_protocol_options field is used to provide extension-specific protocol options // for upstream connections. The key should match the extension filter name, such as // "envoy.filters.network.thrift_proxy". See the extension's documentation for details on @@ -442,7 +469,7 @@ func (m *Cluster) Reset() { *m = Cluster{} } func (m *Cluster) String() string { return proto.CompactTextString(m) } func (*Cluster) ProtoMessage() {} func (*Cluster) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0} } func (m *Cluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -612,6 +639,7 @@ func (m *Cluster) GetHttp2ProtocolOptions() *core.Http2ProtocolOptions { return nil } +// Deprecated: Do not use. func (m *Cluster) GetExtensionProtocolOptions() map[string]*types.Struct { if m != nil { return m.ExtensionProtocolOptions @@ -855,7 +883,7 @@ func (m *Cluster_EdsClusterConfig) Reset() { *m = Cluster_EdsClusterConf func (m *Cluster_EdsClusterConfig) String() string { return proto.CompactTextString(m) } func (*Cluster_EdsClusterConfig) ProtoMessage() {} func (*Cluster_EdsClusterConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 0} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 0} } func (m *Cluster_EdsClusterConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -954,7 +982,7 @@ func (m *Cluster_LbSubsetConfig) Reset() { *m = Cluster_LbSubsetConfig{} func (m *Cluster_LbSubsetConfig) String() string { return proto.CompactTextString(m) } func (*Cluster_LbSubsetConfig) ProtoMessage() {} func (*Cluster_LbSubsetConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 3} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 3} } func (m *Cluster_LbSubsetConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1033,7 +1061,7 @@ func (m *Cluster_LbSubsetConfig_LbSubsetSelector) Reset() { func (m *Cluster_LbSubsetConfig_LbSubsetSelector) String() string { return proto.CompactTextString(m) } func (*Cluster_LbSubsetConfig_LbSubsetSelector) ProtoMessage() {} func (*Cluster_LbSubsetConfig_LbSubsetSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 3, 0} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 3, 0} } func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1083,7 +1111,7 @@ func (m *Cluster_LeastRequestLbConfig) Reset() { *m = Cluster_LeastReque func (m *Cluster_LeastRequestLbConfig) String() string { return proto.CompactTextString(m) } func (*Cluster_LeastRequestLbConfig) ProtoMessage() {} func (*Cluster_LeastRequestLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 4} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 4} } func (m *Cluster_LeastRequestLbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1131,17 +1159,20 @@ type Cluster_RingHashLbConfig struct { MinimumRingSize *types.UInt64Value `protobuf:"bytes,1,opt,name=minimum_ring_size,json=minimumRingSize,proto3" json:"minimum_ring_size,omitempty"` // Deprecated settings from v1 config. // [#not-implemented-hide:] Hide from docs. - DeprecatedV1 *Cluster_RingHashLbConfig_DeprecatedV1 `protobuf:"bytes,2,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` // Deprecated: Do not use. - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + DeprecatedV1 *Cluster_RingHashLbConfig_DeprecatedV1 `protobuf:"bytes,2,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` // Deprecated: Do not use. + // The hash function used to hash hosts onto the ketama ring. The value defaults to + // :ref:`XX_HASH`. + HashFunction Cluster_RingHashLbConfig_HashFunction `protobuf:"varint,3,opt,name=hash_function,json=hashFunction,proto3,enum=envoy.api.v2.Cluster_RingHashLbConfig_HashFunction" json:"hash_function,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Cluster_RingHashLbConfig) Reset() { *m = Cluster_RingHashLbConfig{} } func (m *Cluster_RingHashLbConfig) String() string { return proto.CompactTextString(m) } func (*Cluster_RingHashLbConfig) ProtoMessage() {} func (*Cluster_RingHashLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 5} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 5} } func (m *Cluster_RingHashLbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1185,6 +1216,13 @@ func (m *Cluster_RingHashLbConfig) GetDeprecatedV1() *Cluster_RingHashLbConfig_D return nil } +func (m *Cluster_RingHashLbConfig) GetHashFunction() Cluster_RingHashLbConfig_HashFunction { + if m != nil { + return m.HashFunction + } + return Cluster_RingHashLbConfig_XX_HASH +} + // [#not-implemented-hide:] Hide from docs. type Cluster_RingHashLbConfig_DeprecatedV1 struct { // Defaults to false, meaning that `xxHash `_ @@ -1199,7 +1237,7 @@ func (m *Cluster_RingHashLbConfig_DeprecatedV1) Reset() { *m = Cluster_R func (m *Cluster_RingHashLbConfig_DeprecatedV1) String() string { return proto.CompactTextString(m) } func (*Cluster_RingHashLbConfig_DeprecatedV1) ProtoMessage() {} func (*Cluster_RingHashLbConfig_DeprecatedV1) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 5, 0} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 5, 0} } func (m *Cluster_RingHashLbConfig_DeprecatedV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1258,7 +1296,7 @@ func (m *Cluster_OriginalDstLbConfig) Reset() { *m = Cluster_OriginalDst func (m *Cluster_OriginalDstLbConfig) String() string { return proto.CompactTextString(m) } func (*Cluster_OriginalDstLbConfig) ProtoMessage() {} func (*Cluster_OriginalDstLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 6} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 6} } func (m *Cluster_OriginalDstLbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1329,7 +1367,7 @@ func (m *Cluster_CommonLbConfig) Reset() { *m = Cluster_CommonLbConfig{} func (m *Cluster_CommonLbConfig) String() string { return proto.CompactTextString(m) } func (*Cluster_CommonLbConfig) ProtoMessage() {} func (*Cluster_CommonLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 7} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 7} } func (m *Cluster_CommonLbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1510,7 +1548,7 @@ func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) Reset() { func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) String() string { return proto.CompactTextString(m) } func (*Cluster_CommonLbConfig_ZoneAwareLbConfig) ProtoMessage() {} func (*Cluster_CommonLbConfig_ZoneAwareLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 7, 0} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 7, 0} } func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1569,7 +1607,7 @@ func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) String() string { } func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig) ProtoMessage() {} func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{0, 7, 1} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{0, 7, 1} } func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1612,7 +1650,7 @@ func (m *UpstreamBindConfig) Reset() { *m = UpstreamBindConfig{} } func (m *UpstreamBindConfig) String() string { return proto.CompactTextString(m) } func (*UpstreamBindConfig) ProtoMessage() {} func (*UpstreamBindConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{1} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{1} } func (m *UpstreamBindConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1660,7 +1698,7 @@ func (m *UpstreamConnectionOptions) Reset() { *m = UpstreamConnectionOpt func (m *UpstreamConnectionOptions) String() string { return proto.CompactTextString(m) } func (*UpstreamConnectionOptions) ProtoMessage() {} func (*UpstreamConnectionOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cds_a8ba26d8ebf88c63, []int{2} + return fileDescriptor_cds_512894ce0b5b5d8d, []int{2} } func (m *UpstreamConnectionOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1717,6 +1755,7 @@ func init() { proto.RegisterEnum("envoy.api.v2.Cluster_DnsLookupFamily", Cluster_DnsLookupFamily_name, Cluster_DnsLookupFamily_value) proto.RegisterEnum("envoy.api.v2.Cluster_ClusterProtocolSelection", Cluster_ClusterProtocolSelection_name, Cluster_ClusterProtocolSelection_value) proto.RegisterEnum("envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetFallbackPolicy", Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name, Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_value) + proto.RegisterEnum("envoy.api.v2.Cluster_RingHashLbConfig_HashFunction", Cluster_RingHashLbConfig_HashFunction_name, Cluster_RingHashLbConfig_HashFunction_value) } func (this *Cluster) Equal(that interface{}) bool { if that == nil { @@ -2114,6 +2153,9 @@ func (this *Cluster_RingHashLbConfig) Equal(that interface{}) bool { if !this.DeprecatedV1.Equal(that1.DeprecatedV1) { return false } + if this.HashFunction != that1.HashFunction { + return false + } if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } @@ -3225,6 +3267,11 @@ func (m *Cluster_RingHashLbConfig) MarshalTo(dAtA []byte) (int, error) { } i += n30 } + if m.HashFunction != 0 { + dAtA[i] = 0x18 + i++ + i = encodeVarintCds(dAtA, i, uint64(m.HashFunction)) + } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -3796,6 +3843,9 @@ func (m *Cluster_RingHashLbConfig) Size() (n int) { l = m.DeprecatedV1.Size() n += 1 + l + sovCds(uint64(l)) } + if m.HashFunction != 0 { + n += 1 + sovCds(uint64(m.HashFunction)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -5787,6 +5837,25 @@ func (m *Cluster_RingHashLbConfig) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HashFunction", wireType) + } + m.HashFunction = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCds + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HashFunction |= (Cluster_RingHashLbConfig_HashFunction(b) & 0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipCds(dAtA[iNdEx:]) @@ -6586,163 +6655,167 @@ var ( ErrIntOverflowCds = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("envoy/api/v2/cds.proto", fileDescriptor_cds_a8ba26d8ebf88c63) } - -var fileDescriptor_cds_a8ba26d8ebf88c63 = []byte{ - // 2476 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x5f, 0x6f, 0xe3, 0xc6, - 0x11, 0x37, 0x65, 0x5d, 0xce, 0x5e, 0x5b, 0x12, 0xbd, 0xf6, 0x9d, 0x79, 0xf2, 0xd9, 0xe7, 0x53, - 0x72, 0xa9, 0x6b, 0xb4, 0x72, 0xa3, 0x4b, 0xd2, 0x20, 0x4d, 0x52, 0xe8, 0x9f, 0xcf, 0x4a, 0x74, - 0x92, 0x4b, 0xca, 0x67, 0xa4, 0x69, 0xb0, 0x59, 0x91, 0x2b, 0x89, 0x35, 0x45, 0x32, 0xdc, 0xa5, - 0xef, 0x74, 0x0f, 0x45, 0x1a, 0xa0, 0x40, 0xdf, 0x0b, 0x14, 0xed, 0x37, 0x28, 0xfa, 0x11, 0xfa, - 0xd4, 0xc7, 0xbc, 0x14, 0x28, 0xd0, 0xc7, 0x02, 0x6d, 0x71, 0xe8, 0x43, 0xfb, 0x2d, 0x8a, 0x5d, - 0x2e, 0x75, 0xfa, 0x43, 0xf9, 0x1c, 0xa0, 0x4f, 0x12, 0x67, 0x7e, 0xf3, 0x9b, 0xe5, 0x70, 0x66, - 0x76, 0x76, 0xc1, 0x6d, 0xe2, 0x5e, 0x7a, 0xa3, 0x23, 0xec, 0xdb, 0x47, 0x97, 0xa5, 0x23, 0xd3, - 0xa2, 0x45, 0x3f, 0xf0, 0x98, 0x07, 0xd7, 0x85, 0xbc, 0x88, 0x7d, 0xbb, 0x78, 0x59, 0xca, 0xdf, - 0x9b, 0x46, 0x79, 0x01, 0x39, 0xc2, 0x96, 0x15, 0x10, 0x2a, 0xe1, 0xf9, 0xbb, 0x53, 0x00, 0x1c, - 0xb2, 0xc1, 0x91, 0x49, 0x02, 0x96, 0xa8, 0x15, 0xe6, 0x5d, 0x4c, 0x89, 0xd4, 0x3e, 0x98, 0xd7, - 0x9a, 0x9e, 0xdb, 0xb3, 0xfb, 0x88, 0x7a, 0x61, 0x60, 0x92, 0x44, 0x12, 0xcb, 0xa6, 0xa6, 0x77, - 0x49, 0x82, 0x91, 0xd4, 0xbe, 0x31, 0x4f, 0x32, 0x20, 0xd8, 0x61, 0x03, 0x64, 0x0e, 0x88, 0x79, - 0x21, 0x51, 0xfb, 0xf3, 0x28, 0xa1, 0x30, 0x3d, 0x47, 0x22, 0x0e, 0xa7, 0x11, 0x4e, 0x48, 0x19, - 0x09, 0x8e, 0x4c, 0x3b, 0x30, 0x43, 0x9b, 0xa1, 0x6e, 0x40, 0xf0, 0x05, 0x09, 0x24, 0xf6, 0x7b, - 0x89, 0x58, 0x2f, 0x64, 0x8e, 0x4d, 0x02, 0x64, 0x11, 0x46, 0x4c, 0x66, 0x7b, 0xae, 0x44, 0x4f, - 0x47, 0x9a, 0xc4, 0x91, 0xce, 0x6b, 0x91, 0x9c, 0x8d, 0x7c, 0x72, 0xe4, 0x93, 0xc0, 0x24, 0xee, - 0x38, 0x6c, 0x7d, 0xcf, 0xeb, 0x3b, 0x44, 0x98, 0x60, 0xd7, 0xf5, 0x18, 0xe6, 0x74, 0xb1, 0xdd, - 0x1d, 0xa9, 0x15, 0x4f, 0xdd, 0xb0, 0x77, 0x84, 0xdd, 0x38, 0x18, 0x7b, 0xb3, 0x2a, 0x2b, 0x0c, - 0xf0, 0xc4, 0x52, 0xee, 0xce, 0xea, 0x29, 0x0b, 0x42, 0x93, 0x2d, 0xb2, 0x7e, 0x1a, 0x60, 0xdf, - 0x27, 0x41, 0xec, 0x78, 0xfb, 0x12, 0x3b, 0xb6, 0x85, 0x19, 0x39, 0x8a, 0xff, 0x48, 0xc5, 0x56, - 0xdf, 0xeb, 0x7b, 0xe2, 0xef, 0x11, 0xff, 0x17, 0x49, 0x0b, 0x7f, 0x39, 0x00, 0x37, 0xab, 0x51, - 0x6c, 0xe0, 0x2e, 0x48, 0xbb, 0x78, 0x48, 0x34, 0x65, 0x5f, 0x39, 0x58, 0xad, 0xac, 0xfe, 0xe9, - 0xbf, 0x7f, 0x5e, 0x4e, 0x07, 0xa9, 0x7d, 0x45, 0x17, 0x62, 0x58, 0x05, 0x69, 0x1e, 0x06, 0x2d, - 0xb5, 0xaf, 0x1c, 0x64, 0x4b, 0xaf, 0x17, 0x27, 0x73, 0xb0, 0x28, 0x39, 0x8a, 0xb5, 0xf8, 0xcb, - 0x77, 0x46, 0x3e, 0xa9, 0x00, 0xce, 0x71, 0xe3, 0x6b, 0x25, 0xa5, 0x2a, 0xba, 0x30, 0x86, 0x1d, - 0x00, 0x89, 0x45, 0x91, 0xfc, 0x1c, 0x28, 0x4a, 0x25, 0x6d, 0x79, 0x5f, 0x39, 0x58, 0x2b, 0xbd, - 0x99, 0x4c, 0x59, 0xb7, 0xa8, 0xfc, 0x5b, 0x15, 0x68, 0x5d, 0x25, 0x33, 0x12, 0xf8, 0x04, 0xe4, - 0x4c, 0xcf, 0x75, 0x89, 0xc9, 0x10, 0xb3, 0x87, 0xc4, 0x0b, 0x99, 0x96, 0x16, 0x94, 0x77, 0x8a, - 0x51, 0xb8, 0x8a, 0x71, 0xb8, 0x8a, 0x35, 0x19, 0xec, 0x0a, 0xfc, 0xe6, 0x1f, 0xf7, 0x96, 0x7e, - 0xf7, 0xcf, 0x7b, 0x8a, 0x58, 0xe3, 0x1f, 0x95, 0xd4, 0xe1, 0x92, 0x9e, 0x95, 0x2c, 0x9d, 0x88, - 0x04, 0xf6, 0xc0, 0x7d, 0x3f, 0x5a, 0xa5, 0x1b, 0x65, 0x0b, 0xea, 0x86, 0xbd, 0x1e, 0x09, 0x90, - 0x63, 0x0f, 0x79, 0xc2, 0x8d, 0x18, 0xa1, 0xda, 0x0d, 0xe1, 0xe9, 0xee, 0x9c, 0xa7, 0xb3, 0x86, - 0xcb, 0x1e, 0x96, 0x9e, 0x60, 0x27, 0x24, 0xfa, 0xae, 0x2f, 0xd6, 0x2a, 0x59, 0x2a, 0x82, 0xa4, - 0xc9, 0x39, 0x2a, 0x9c, 0x02, 0x3e, 0x02, 0xab, 0x4e, 0x17, 0xf9, 0x9e, 0x63, 0x9b, 0x23, 0xed, - 0x35, 0x11, 0xdf, 0xbd, 0xe4, 0x60, 0x34, 0xbb, 0xa7, 0x02, 0x35, 0x15, 0xda, 0x15, 0x47, 0x4a, - 0xe1, 0xdb, 0xe0, 0xc6, 0xc0, 0xa3, 0x8c, 0x6a, 0x37, 0xf7, 0x97, 0x0f, 0xd6, 0x4a, 0xf9, 0x69, - 0x12, 0x5e, 0x52, 0xc5, 0x72, 0xd4, 0x1a, 0x2a, 0x29, 0x4d, 0xd1, 0x23, 0x30, 0xac, 0x82, 0xcc, - 0x64, 0x39, 0x52, 0x6d, 0x45, 0x58, 0xef, 0x25, 0x58, 0x9f, 0x08, 0x5c, 0x95, 0xc3, 0xf4, 0xf5, - 0xc1, 0xcb, 0x07, 0x0a, 0x3f, 0x03, 0x3b, 0x43, 0xfc, 0x0c, 0x05, 0xe4, 0xcb, 0x90, 0x50, 0x46, - 0xd1, 0x74, 0xe0, 0xb4, 0xd5, 0x6b, 0x44, 0x49, 0x1b, 0xe2, 0x67, 0xba, 0xb4, 0x3f, 0x9d, 0x0c, - 0x18, 0x3c, 0x05, 0xea, 0x4c, 0x95, 0x53, 0x0d, 0x08, 0xc6, 0x07, 0x33, 0x8b, 0x94, 0x71, 0xaa, - 0x46, 0xe8, 0x8a, 0x04, 0xeb, 0x39, 0x73, 0x5a, 0x00, 0x8f, 0xc1, 0x1a, 0x73, 0x28, 0x5f, 0x21, - 0x23, 0xcf, 0x98, 0xb6, 0x96, 0x44, 0xc6, 0x3b, 0x65, 0xf1, 0xcc, 0xa7, 0x2c, 0x20, 0x78, 0xd8, - 0x71, 0x68, 0x35, 0x02, 0xeb, 0x80, 0x8d, 0xff, 0xc3, 0xcf, 0xc0, 0xad, 0x01, 0x63, 0x3e, 0x8a, - 0x3b, 0x15, 0xf2, 0x7c, 0xd1, 0x07, 0xb4, 0x8c, 0x60, 0xfc, 0x4e, 0x52, 0x0c, 0x19, 0xf3, 0xdf, - 0x3a, 0x95, 0xf8, 0x76, 0x04, 0xd7, 0x37, 0x39, 0xcb, 0x8c, 0x10, 0x7e, 0x0e, 0x6e, 0x73, 0x71, - 0x69, 0x9e, 0x3d, 0x7b, 0x25, 0x7b, 0x69, 0x96, 0x7d, 0x6b, 0x90, 0x20, 0x85, 0x06, 0x50, 0x2d, - 0x97, 0xa2, 0x80, 0xf4, 0x02, 0x42, 0x07, 0x28, 0xc0, 0x8c, 0x68, 0xea, 0xab, 0xea, 0x26, 0x3b, - 0x5b, 0x33, 0x96, 0x4b, 0xf5, 0x88, 0x41, 0xc7, 0x8c, 0xc0, 0xcf, 0xc1, 0x06, 0x27, 0x75, 0x3c, - 0xef, 0x22, 0xf4, 0x51, 0x0f, 0x0f, 0x6d, 0x67, 0xa4, 0x6d, 0x88, 0x9c, 0x7e, 0xb0, 0xa0, 0x67, - 0xb8, 0xb4, 0x29, 0xd0, 0xc7, 0x02, 0x3c, 0x95, 0xda, 0x39, 0x6b, 0x5a, 0x09, 0x7f, 0x0c, 0x32, - 0xd1, 0x9a, 0xa9, 0xe7, 0x5c, 0xf2, 0x34, 0x80, 0xaf, 0xca, 0x74, 0x7d, 0x5d, 0xac, 0x50, 0xe2, - 0xa1, 0x01, 0x36, 0xe6, 0x36, 0x01, 0x6d, 0x33, 0xa9, 0x01, 0xc5, 0xb9, 0xd4, 0x8e, 0xe0, 0xb5, - 0x18, 0xad, 0xab, 0xde, 0x8c, 0x04, 0x76, 0x80, 0x6a, 0x3a, 0x04, 0xbb, 0xa1, 0x8f, 0x6c, 0x97, - 0x91, 0xe0, 0x12, 0x3b, 0xda, 0xd6, 0xb7, 0x8d, 0x64, 0x4e, 0x52, 0x34, 0x24, 0x03, 0x6c, 0x83, - 0xad, 0x50, 0x66, 0x1f, 0xea, 0xda, 0xae, 0x15, 0xb7, 0xcb, 0x5b, 0x82, 0x79, 0x37, 0xe1, 0x95, - 0x2b, 0xb6, 0x6b, 0xc9, 0x2e, 0x09, 0x63, 0xd3, 0x97, 0x32, 0xd8, 0x02, 0xaa, 0xd3, 0x45, 0x34, - 0xec, 0x52, 0xc2, 0x62, 0xb2, 0xdb, 0x82, 0xec, 0x8d, 0x45, 0xed, 0xc6, 0x10, 0x60, 0xc9, 0x99, - 0x75, 0xa6, 0x9e, 0xe1, 0x39, 0xd8, 0x0c, 0x6c, 0xb7, 0x8f, 0x06, 0x98, 0x0e, 0x90, 0xd3, 0x8d, - 0x29, 0xb7, 0xaf, 0x6a, 0xe7, 0xba, 0xed, 0xf6, 0x4f, 0x30, 0x1d, 0x34, 0xbb, 0x11, 0xc9, 0xc9, - 0x92, 0xae, 0x06, 0x33, 0x32, 0xf8, 0x18, 0xa8, 0x2c, 0xc0, 0x2e, 0xf5, 0xbd, 0x80, 0x21, 0xea, - 0x99, 0x17, 0x84, 0x69, 0x9a, 0x60, 0x2d, 0x24, 0xbc, 0x75, 0x27, 0x86, 0x1a, 0x02, 0xa9, 0xe7, - 0xd8, 0xb4, 0x00, 0xfe, 0x10, 0xac, 0x0c, 0x09, 0xc3, 0x16, 0x66, 0x58, 0xbb, 0x23, 0x68, 0x76, - 0x12, 0x68, 0x1e, 0x4b, 0x88, 0x3e, 0x06, 0xc3, 0xcf, 0x01, 0x1c, 0x97, 0x1e, 0x25, 0x8e, 0xcc, - 0x96, 0xbc, 0xc8, 0xe6, 0x62, 0xf2, 0xfb, 0xc9, 0xdf, 0xb8, 0xd6, 0x8c, 0xd8, 0x4a, 0xdf, 0xf0, - 0x67, 0x45, 0xfc, 0x7b, 0x98, 0xde, 0x70, 0xe8, 0xb9, 0x13, 0xc1, 0xdb, 0xb9, 0xea, 0x7b, 0x54, - 0x05, 0x3a, 0x0e, 0x13, 0xdf, 0xaf, 0x26, 0x9f, 0x61, 0x01, 0x64, 0xb0, 0xc3, 0x10, 0x65, 0x98, - 0x21, 0xb1, 0x95, 0xdf, 0xe5, 0x5b, 0xb9, 0xbe, 0x86, 0x1d, 0x66, 0x30, 0xcc, 0x5a, 0x7c, 0x1b, - 0xef, 0x83, 0xbb, 0xd2, 0x67, 0x72, 0xdf, 0xda, 0x4d, 0x2c, 0x85, 0xb8, 0xb3, 0xcc, 0x36, 0x96, - 0x3b, 0x11, 0x57, 0x82, 0x0a, 0xf6, 0xc1, 0xce, 0x38, 0x7b, 0x27, 0x76, 0xd0, 0xd8, 0xcf, 0x5e, - 0x52, 0x07, 0x8b, 0x9b, 0xed, 0xcb, 0xd6, 0x3f, 0x76, 0x14, 0x2e, 0x52, 0xc1, 0x33, 0x70, 0x60, - 0x3a, 0x1e, 0x25, 0x13, 0x5e, 0x28, 0xe2, 0xef, 0xe7, 0x51, 0x86, 0xe4, 0xc6, 0xd6, 0xc3, 0xb6, - 0x13, 0x06, 0x44, 0xbb, 0xb7, 0xaf, 0x1c, 0xac, 0xe8, 0xaf, 0x0b, 0xfc, 0x4b, 0x26, 0xda, 0x76, - 0x4f, 0x3c, 0xca, 0xa2, 0xcd, 0xed, 0x38, 0x82, 0xc2, 0x13, 0x70, 0xdf, 0x0a, 0xb0, 0xed, 0x26, - 0xd2, 0x06, 0x64, 0xe8, 0xf1, 0x22, 0xdf, 0x17, 0x7c, 0xbb, 0x02, 0x38, 0xc7, 0xa7, 0x47, 0x20, - 0xd8, 0x04, 0x39, 0xc7, 0xc3, 0x16, 0xc2, 0x94, 0xda, 0x7d, 0x77, 0x48, 0x5c, 0xa6, 0xdd, 0x17, - 0x6f, 0x9f, 0x3c, 0x44, 0x35, 0x3d, 0x6c, 0x95, 0xc7, 0x50, 0x3d, 0xeb, 0x4c, 0x3d, 0xc3, 0x2f, - 0xc0, 0x6d, 0x2f, 0xb0, 0xfb, 0xb6, 0x8b, 0x1d, 0x64, 0x51, 0x36, 0x91, 0x3a, 0x05, 0x41, 0xfa, - 0xdd, 0xe4, 0xd4, 0x69, 0x4b, 0x9b, 0x1a, 0x65, 0x13, 0xa5, 0xb7, 0xe9, 0xcd, 0x8b, 0xe1, 0x97, - 0x20, 0x4f, 0x9e, 0x31, 0xe2, 0x52, 0xfe, 0xbd, 0xe6, 0x12, 0xe4, 0x75, 0xd1, 0x70, 0x1f, 0x2e, - 0x18, 0xd6, 0x62, 0xbb, 0x99, 0x6c, 0xa8, 0xbb, 0x2c, 0x18, 0xe9, 0x1a, 0x59, 0xa0, 0x86, 0xbf, - 0x54, 0xc0, 0x3e, 0x1f, 0x10, 0x2d, 0x74, 0x85, 0xe7, 0x37, 0x84, 0xe7, 0xf7, 0x92, 0x3d, 0xf3, - 0x81, 0xd3, 0xba, 0xda, 0xfd, 0x2e, 0xbb, 0x0a, 0x03, 0x4d, 0xb0, 0xed, 0x10, 0x2c, 0x3e, 0xae, - 0x98, 0x41, 0x26, 0x22, 0xfb, 0x40, 0x44, 0xf6, 0x70, 0x41, 0x93, 0xe4, 0x46, 0x72, 0x6e, 0x99, - 0x08, 0xed, 0x96, 0x93, 0x20, 0xcf, 0x87, 0x40, 0x9d, 0x1d, 0x68, 0xe1, 0x47, 0x00, 0x88, 0xa1, - 0x38, 0xf2, 0xa5, 0x08, 0x5f, 0xf7, 0x12, 0x0a, 0x30, 0x82, 0x1b, 0xe2, 0xdc, 0xa5, 0xaf, 0xf2, - 0x29, 0x38, 0xb2, 0xbf, 0x0f, 0xd6, 0x29, 0x09, 0x2e, 0x6d, 0x93, 0x44, 0x55, 0x9f, 0x8a, 0xaa, - 0x5e, 0xca, 0x78, 0xd5, 0xe7, 0x2d, 0xb0, 0x7b, 0x65, 0x6c, 0xa0, 0x0a, 0x96, 0x2f, 0xc8, 0x28, - 0x9a, 0xfd, 0x75, 0xfe, 0x17, 0x7e, 0x1f, 0xdc, 0xb8, 0xe4, 0x63, 0x99, 0xa0, 0x5b, 0x2b, 0x6d, - 0xcf, 0x6d, 0x64, 0x86, 0x38, 0x97, 0xe8, 0x11, 0xea, 0xfd, 0xd4, 0x7b, 0x4a, 0xbe, 0x07, 0x0a, - 0xaf, 0xfe, 0x0c, 0x09, 0xae, 0x0e, 0xa7, 0x5d, 0x6d, 0xcd, 0xb9, 0x2a, 0xbb, 0xa3, 0x49, 0x3f, - 0xbf, 0x4a, 0x83, 0xec, 0xf4, 0xd6, 0x04, 0x7d, 0x90, 0xeb, 0x61, 0xc7, 0xe9, 0x62, 0xf3, 0x22, - 0x1e, 0xa4, 0x15, 0xd1, 0xa6, 0x7f, 0x74, 0x9d, 0x9d, 0x6d, 0xfc, 0x78, 0x2c, 0x39, 0x12, 0xa6, - 0xec, 0x6c, 0x6f, 0x4a, 0x07, 0x3f, 0x02, 0x59, 0x8b, 0xf4, 0x70, 0xc8, 0x1b, 0xae, 0xb0, 0x7d, - 0x55, 0xa0, 0x32, 0x12, 0x1e, 0x79, 0x82, 0x5f, 0x00, 0x55, 0xee, 0xc4, 0xd1, 0xce, 0xe2, 0x05, - 0x54, 0x5b, 0x16, 0x19, 0xfe, 0xce, 0xb7, 0x5a, 0xb2, 0x21, 0xad, 0xf5, 0x1c, 0x9d, 0x7a, 0xa6, - 0xb0, 0x04, 0x6e, 0x39, 0x9e, 0x89, 0x1d, 0x9b, 0x8d, 0xd0, 0x53, 0x62, 0xf7, 0x07, 0x0c, 0xe1, - 0xa7, 0x38, 0x20, 0xe2, 0x70, 0xb4, 0xa2, 0x6f, 0xc6, 0xca, 0x73, 0xa1, 0x2b, 0x73, 0x15, 0xb7, - 0xa1, 0x26, 0x76, 0x08, 0x9a, 0xb1, 0x14, 0xc7, 0x9c, 0x15, 0x7d, 0x53, 0x28, 0x9b, 0x53, 0x86, - 0xf9, 0x37, 0x81, 0x3a, 0xbb, 0x18, 0x08, 0x41, 0xfa, 0x82, 0x8c, 0xa8, 0xa6, 0xec, 0x2f, 0x1f, - 0xac, 0xea, 0xe2, 0x7f, 0xa1, 0x0d, 0x6e, 0x27, 0xc7, 0x19, 0xe6, 0xc0, 0x5a, 0xab, 0x8d, 0x8e, - 0xcb, 0xcd, 0x66, 0xa5, 0x5c, 0xfd, 0x44, 0x5d, 0x82, 0x2a, 0x58, 0x2f, 0xb7, 0x3e, 0x45, 0xf5, - 0x56, 0xed, 0xb4, 0xdd, 0x68, 0x75, 0x54, 0x05, 0x42, 0x90, 0xad, 0xd5, 0x8f, 0xcb, 0x67, 0xcd, - 0x0e, 0x32, 0xce, 0x2a, 0x46, 0xbd, 0xa3, 0xa6, 0xf2, 0x5d, 0xb0, 0x95, 0x54, 0x7c, 0xf0, 0x63, - 0xb0, 0x6e, 0x0e, 0x3c, 0x5e, 0x0f, 0xa6, 0x17, 0xba, 0x4c, 0x96, 0xd4, 0x95, 0x87, 0x0f, 0x79, - 0xde, 0x3d, 0x4c, 0x1d, 0xa4, 0xf4, 0xb5, 0xc8, 0xb8, 0xca, 0x6d, 0xf3, 0xbf, 0x4d, 0x01, 0x75, - 0x76, 0x66, 0x81, 0x4f, 0xc0, 0xc6, 0xd0, 0x76, 0xed, 0x61, 0x38, 0x44, 0x62, 0x00, 0xa2, 0xf6, - 0x73, 0x72, 0xa5, 0x97, 0x77, 0xdf, 0x8e, 0xbc, 0xac, 0x73, 0x2f, 0x37, 0x4b, 0x37, 0xb4, 0xaf, - 0xbe, 0xfa, 0x2a, 0xad, 0xe7, 0x24, 0x09, 0xe7, 0x37, 0xec, 0xe7, 0x04, 0xfe, 0x0c, 0x64, 0x2c, - 0xe2, 0x07, 0xc4, 0xc4, 0x8c, 0x58, 0xe8, 0xf2, 0x2d, 0x99, 0x52, 0x0f, 0xaf, 0x37, 0x4a, 0x15, - 0x6b, 0x63, 0xdb, 0x27, 0x6f, 0x89, 0x03, 0xde, 0xba, 0x35, 0x21, 0xc9, 0x37, 0xc1, 0xfa, 0x24, - 0x02, 0x7e, 0x00, 0xd6, 0x43, 0x4a, 0x10, 0x65, 0x96, 0x98, 0xe0, 0xe4, 0x0b, 0xe4, 0xe7, 0x5e, - 0xa0, 0xe2, 0x79, 0x4e, 0x74, 0x42, 0x03, 0x21, 0x25, 0x06, 0xb3, 0xb8, 0xd3, 0xfc, 0x87, 0x60, - 0x33, 0x61, 0x4f, 0x81, 0x6f, 0x82, 0x1c, 0x27, 0x15, 0xc3, 0xc5, 0x80, 0x60, 0x8b, 0x04, 0x82, - 0x77, 0x45, 0xcf, 0x84, 0x94, 0xf0, 0x39, 0xe1, 0x44, 0x08, 0xf3, 0xff, 0x49, 0x83, 0xec, 0xf4, - 0x38, 0x03, 0x3f, 0x01, 0xdb, 0xd1, 0x76, 0x3d, 0x42, 0x3e, 0x76, 0x6d, 0x13, 0xb1, 0x01, 0x3f, - 0x56, 0x78, 0x8e, 0x25, 0x97, 0xb6, 0x29, 0xe3, 0xc0, 0xfb, 0x78, 0xf1, 0x34, 0xba, 0x8e, 0xd1, - 0x6f, 0x49, 0x9b, 0x53, 0x6e, 0xd2, 0x89, 0x2d, 0xa0, 0x0d, 0xb6, 0x9e, 0x7b, 0x2e, 0x89, 0x32, - 0x7e, 0xa2, 0x95, 0x47, 0x11, 0x7d, 0xf7, 0x3a, 0xf3, 0x55, 0xf1, 0xa7, 0x9e, 0x4b, 0x44, 0x59, - 0x4c, 0xb4, 0xf5, 0x8d, 0xe7, 0xb3, 0x42, 0xf8, 0x0b, 0xb0, 0x33, 0x53, 0x2d, 0xc4, 0x9a, 0xf0, - 0x18, 0xdd, 0x6e, 0x7c, 0x78, 0x2d, 0x8f, 0xd3, 0x95, 0x45, 0xac, 0x09, 0xc7, 0x9a, 0xb3, 0x40, - 0x07, 0x1b, 0x60, 0x33, 0xf4, 0x2d, 0xcc, 0x08, 0x1a, 0x92, 0xa0, 0x4f, 0xd0, 0x53, 0xdb, 0xb5, - 0xbc, 0xa7, 0xaf, 0xbc, 0x02, 0xd1, 0x37, 0x22, 0xab, 0xc7, 0xdc, 0xe8, 0x5c, 0xd8, 0xe4, 0x7f, - 0xaf, 0x80, 0x8d, 0xb9, 0xb7, 0x86, 0x1f, 0x80, 0x5c, 0xe0, 0x85, 0x8c, 0x67, 0x3a, 0x71, 0x71, - 0xd7, 0x21, 0x57, 0x7e, 0x90, 0xac, 0xc4, 0xd6, 0x23, 0x28, 0x3c, 0x06, 0xea, 0x90, 0x8f, 0x51, - 0xf2, 0xce, 0x47, 0xd4, 0x4a, 0xea, 0xd5, 0xb5, 0xa2, 0x67, 0x87, 0xb6, 0x2b, 0xc3, 0xc4, 0x8b, - 0x23, 0x9f, 0x07, 0xda, 0xa2, 0xf0, 0x54, 0x76, 0xc0, 0x9d, 0xf1, 0x27, 0x88, 0xef, 0x27, 0x7d, - 0x62, 0xda, 0x3d, 0x9b, 0x04, 0x85, 0x73, 0x90, 0x99, 0xba, 0x97, 0x82, 0x00, 0xbc, 0x66, 0x74, - 0xca, 0x9d, 0x46, 0x55, 0x5d, 0x82, 0x59, 0x00, 0x8c, 0x8e, 0xde, 0xa8, 0x76, 0x50, 0xad, 0x65, - 0xa8, 0x0a, 0x6f, 0x45, 0xcd, 0xf6, 0xa3, 0x46, 0xb5, 0xdc, 0x14, 0x82, 0x14, 0xbc, 0x09, 0x96, - 0xeb, 0x35, 0x43, 0x5d, 0xe6, 0x3d, 0xa9, 0xad, 0x37, 0x1e, 0x35, 0x5a, 0x5c, 0x65, 0x74, 0xd4, - 0x74, 0xe1, 0xe7, 0x60, 0x25, 0xbe, 0x90, 0xe1, 0x76, 0x7a, 0xfb, 0xac, 0x55, 0x43, 0x7a, 0xbb, - 0xd2, 0x68, 0xa9, 0x4b, 0x70, 0x03, 0x64, 0x9a, 0xf5, 0xb2, 0xd1, 0x41, 0x7a, 0xfd, 0x27, 0x67, - 0x75, 0x83, 0xf7, 0xb0, 0x0c, 0x58, 0xd5, 0x1b, 0xad, 0x47, 0xe8, 0xa4, 0x6c, 0x9c, 0xa8, 0x29, - 0xbe, 0x0c, 0xbd, 0xdc, 0xaa, 0xb5, 0x1f, 0xab, 0xcb, 0x70, 0x13, 0xe4, 0x26, 0xc9, 0x51, 0xb3, - 0xa2, 0xa6, 0x39, 0xe0, 0x71, 0xf9, 0x51, 0xb3, 0xfe, 0x44, 0xbd, 0x51, 0x78, 0x07, 0xe4, 0x66, - 0x0e, 0xca, 0x70, 0x05, 0xa4, 0xcb, 0x67, 0x9d, 0xb6, 0xba, 0x04, 0xd7, 0xc0, 0xcd, 0x27, 0x6f, - 0xa3, 0x76, 0xab, 0xf9, 0xa9, 0xaa, 0x88, 0x87, 0x77, 0xa3, 0x87, 0x54, 0xa1, 0x03, 0xb4, 0x45, - 0x27, 0x12, 0xb8, 0x03, 0xb6, 0xcf, 0x8c, 0x3a, 0xaa, 0xb6, 0x5b, 0xc7, 0x8d, 0x47, 0x67, 0x7a, - 0xbd, 0x86, 0x4e, 0xf5, 0x76, 0xa7, 0x5d, 0x6d, 0x37, 0xd5, 0xa5, 0x58, 0x59, 0x6b, 0x9f, 0xb7, - 0x8c, 0x8e, 0x5e, 0x2f, 0x3f, 0x7e, 0xa9, 0x54, 0x2a, 0x6b, 0xe2, 0xc2, 0x2a, 0x0a, 0xf4, 0xc7, - 0xe9, 0x95, 0x75, 0x35, 0xf3, 0x71, 0x7a, 0x25, 0xa7, 0xaa, 0x85, 0x73, 0x00, 0xcf, 0xe6, 0xcf, - 0x9d, 0x65, 0x90, 0x8d, 0x6e, 0x8b, 0x91, 0xbc, 0x98, 0x1e, 0xb7, 0x9a, 0xc5, 0xa7, 0xf6, 0x4c, - 0x64, 0x21, 0x1f, 0x0b, 0x18, 0xdc, 0x59, 0x78, 0x38, 0x80, 0x35, 0x90, 0x61, 0xa6, 0x8f, 0x2e, - 0x08, 0xf1, 0xb1, 0x63, 0x5f, 0x92, 0x2b, 0x66, 0xa8, 0x8e, 0xe9, 0x7f, 0x12, 0xc3, 0xf4, 0x75, - 0x36, 0xf1, 0x54, 0xfa, 0x7b, 0x0a, 0x6c, 0xcb, 0x58, 0x8d, 0xd3, 0xc5, 0x88, 0x66, 0x28, 0x78, - 0x0e, 0xb2, 0x46, 0xe4, 0x3c, 0x02, 0x50, 0x38, 0x73, 0x3b, 0x36, 0xb6, 0x90, 0x7b, 0x51, 0xfe, - 0xde, 0x42, 0x3d, 0xf5, 0x3d, 0x97, 0x92, 0xc2, 0xd2, 0x81, 0xf2, 0x03, 0x05, 0x06, 0x60, 0xb3, - 0xe1, 0x9a, 0x01, 0xe1, 0xa3, 0x3d, 0x76, 0xc6, 0xec, 0x33, 0x43, 0xfc, 0x04, 0x64, 0xce, 0xd1, - 0xe1, 0x75, 0xa0, 0x53, 0x3e, 0x29, 0xc8, 0x1c, 0x13, 0x66, 0x0e, 0xfe, 0x7f, 0xef, 0x72, 0xff, - 0xeb, 0xbf, 0xfd, 0xfb, 0x37, 0xa9, 0x9d, 0xc2, 0xed, 0xa9, 0xdb, 0xff, 0xf7, 0x65, 0xc9, 0xd3, - 0xf7, 0x95, 0xc3, 0xca, 0xe6, 0x1f, 0x5e, 0xec, 0x29, 0xdf, 0xbc, 0xd8, 0x53, 0xfe, 0xfa, 0x62, - 0x4f, 0xf9, 0xd7, 0x8b, 0x3d, 0xe5, 0xd7, 0x8a, 0xd2, 0x7d, 0x4d, 0x14, 0xfe, 0xc3, 0xff, 0x05, - 0x00, 0x00, 0xff, 0xff, 0x68, 0x4b, 0x04, 0x06, 0xe9, 0x18, 0x00, 0x00, +func init() { proto.RegisterFile("envoy/api/v2/cds.proto", fileDescriptor_cds_512894ce0b5b5d8d) } + +var fileDescriptor_cds_512894ce0b5b5d8d = []byte{ + // 2544 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4f, 0x6f, 0x1b, 0xc7, + 0x15, 0xd7, 0x52, 0x72, 0x2c, 0x8d, 0xf8, 0x67, 0x35, 0x92, 0xad, 0x35, 0x65, 0xc9, 0x32, 0x13, + 0xa7, 0x8a, 0xd0, 0x52, 0x35, 0x9d, 0xa4, 0x41, 0x9a, 0xa4, 0xe0, 0x3f, 0x59, 0x4c, 0x28, 0x52, + 0x5d, 0x92, 0x56, 0xd2, 0x34, 0x98, 0x0c, 0x77, 0x87, 0xe4, 0x56, 0xcb, 0xdd, 0xed, 0xce, 0xac, + 0x6c, 0xfa, 0x50, 0xa4, 0x01, 0x0a, 0xf4, 0xde, 0x4b, 0xfb, 0x0d, 0x8a, 0xa2, 0x9f, 0xa0, 0xa7, + 0x1e, 0x73, 0x2c, 0xd0, 0x63, 0x81, 0xb6, 0x30, 0x0a, 0xb4, 0xfd, 0x16, 0xc5, 0xcc, 0xce, 0xd2, + 0xfc, 0xb3, 0x94, 0x15, 0xa0, 0x27, 0x71, 0xde, 0xfb, 0xbd, 0xdf, 0x9b, 0x7d, 0x33, 0xef, 0xcd, + 0x9b, 0x11, 0xb8, 0x4d, 0x9c, 0x4b, 0x77, 0x74, 0x84, 0x3d, 0xeb, 0xe8, 0xb2, 0x70, 0x64, 0x98, + 0x34, 0xef, 0xf9, 0x2e, 0x73, 0x61, 0x52, 0xc8, 0xf3, 0xd8, 0xb3, 0xf2, 0x97, 0x85, 0xec, 0xbd, + 0x69, 0x94, 0xeb, 0x93, 0x23, 0x6c, 0x9a, 0x3e, 0xa1, 0x12, 0x9e, 0xbd, 0x3b, 0x05, 0xc0, 0x01, + 0x1b, 0x1c, 0x19, 0xc4, 0x67, 0xb1, 0x5a, 0x61, 0xde, 0xc5, 0x94, 0x48, 0xed, 0x83, 0x79, 0xad, + 0xe1, 0x3a, 0x3d, 0xab, 0x8f, 0xa8, 0x1b, 0xf8, 0x06, 0x89, 0x25, 0x31, 0x2d, 0x6a, 0xb8, 0x97, + 0xc4, 0x1f, 0x49, 0xed, 0x1b, 0xf3, 0x24, 0x03, 0x82, 0x6d, 0x36, 0x40, 0xc6, 0x80, 0x18, 0x17, + 0x12, 0xb5, 0x3f, 0x8f, 0x12, 0x0a, 0xc3, 0xb5, 0x25, 0xe2, 0x70, 0x1a, 0x61, 0x07, 0x94, 0x11, + 0xff, 0xc8, 0xb0, 0x7c, 0x23, 0xb0, 0x18, 0xea, 0xfa, 0x04, 0x5f, 0x10, 0x5f, 0x62, 0xbf, 0x1b, + 0x8b, 0x75, 0x03, 0x66, 0x5b, 0xc4, 0x47, 0x26, 0x61, 0xc4, 0x60, 0x96, 0xeb, 0x48, 0xf4, 0x74, + 0xa4, 0x49, 0x14, 0xe9, 0xac, 0x16, 0xca, 0xd9, 0xc8, 0x23, 0x47, 0x1e, 0xf1, 0x0d, 0xe2, 0x8c, + 0xc3, 0xd6, 0x77, 0xdd, 0xbe, 0x4d, 0x84, 0x09, 0x76, 0x1c, 0x97, 0x61, 0x4e, 0x17, 0xd9, 0xdd, + 0x91, 0x5a, 0x31, 0xea, 0x06, 0xbd, 0x23, 0xec, 0x44, 0xc1, 0xd8, 0x9b, 0x55, 0x99, 0x81, 0x8f, + 0x27, 0xa6, 0x72, 0x77, 0x56, 0x4f, 0x99, 0x1f, 0x18, 0x6c, 0x91, 0xf5, 0x53, 0x1f, 0x7b, 0x1e, + 0xf1, 0x23, 0xc7, 0xdb, 0x97, 0xd8, 0xb6, 0x4c, 0xcc, 0xc8, 0x51, 0xf4, 0x43, 0x2a, 0xb6, 0xfa, + 0x6e, 0xdf, 0x15, 0x3f, 0x8f, 0xf8, 0xaf, 0x50, 0x9a, 0xfb, 0xf7, 0x5b, 0xe0, 0x66, 0x39, 0x8c, + 0x0d, 0xdc, 0x05, 0x2b, 0x0e, 0x1e, 0x12, 0x4d, 0xd9, 0x57, 0x0e, 0xd6, 0x4a, 0x6b, 0x7f, 0xfa, + 0xef, 0x9f, 0x97, 0x57, 0xfc, 0xc4, 0xbe, 0xa2, 0x0b, 0x31, 0x2c, 0x83, 0x15, 0x1e, 0x06, 0x2d, + 0xb1, 0xaf, 0x1c, 0xa4, 0x0b, 0xaf, 0xe7, 0x27, 0xf7, 0x60, 0x5e, 0x72, 0xe4, 0x2b, 0xd1, 0xca, + 0xb7, 0x47, 0x1e, 0x29, 0x01, 0xce, 0x71, 0xe3, 0x6b, 0x25, 0xa1, 0x2a, 0xba, 0x30, 0x86, 0x6d, + 0x00, 0x89, 0x49, 0x91, 0x5c, 0x0e, 0x14, 0x6e, 0x25, 0x6d, 0x79, 0x5f, 0x39, 0x58, 0x2f, 0xbc, + 0x19, 0x4f, 0x59, 0x35, 0xa9, 0xfc, 0x59, 0x16, 0x68, 0x5d, 0x25, 0x33, 0x12, 0xf8, 0x04, 0x64, + 0x0c, 0xd7, 0x71, 0x88, 0xc1, 0x10, 0xb3, 0x86, 0xc4, 0x0d, 0x98, 0xb6, 0x22, 0x28, 0xef, 0xe4, + 0xc3, 0x70, 0xe5, 0xa3, 0x70, 0xe5, 0x2b, 0x32, 0xd8, 0x25, 0xf8, 0xcd, 0xdf, 0xef, 0x2d, 0xfd, + 0xf6, 0x1f, 0xf7, 0x14, 0x31, 0xc7, 0x3f, 0x28, 0x89, 0xc3, 0x25, 0x3d, 0x2d, 0x59, 0xda, 0x21, + 0x09, 0xec, 0x81, 0xfb, 0x5e, 0x38, 0x4b, 0x27, 0xdc, 0x2d, 0xa8, 0x1b, 0xf4, 0x7a, 0xc4, 0x47, + 0xb6, 0x35, 0xe4, 0x1b, 0x6e, 0xc4, 0x08, 0xd5, 0x6e, 0x08, 0x4f, 0x77, 0xe7, 0x3c, 0x75, 0x6a, + 0x0e, 0x7b, 0x54, 0x78, 0x82, 0xed, 0x80, 0xe8, 0xbb, 0x9e, 0x98, 0xab, 0x64, 0x29, 0x09, 0x92, + 0x3a, 0xe7, 0x28, 0x71, 0x0a, 0xf8, 0x18, 0xac, 0xd9, 0x5d, 0xe4, 0xb9, 0xb6, 0x65, 0x8c, 0xb4, + 0xd7, 0x44, 0x7c, 0xf7, 0xe2, 0x83, 0x51, 0xef, 0x9e, 0x09, 0xd4, 0x54, 0x68, 0x57, 0x6d, 0x29, + 0x85, 0x6f, 0x83, 0x1b, 0x03, 0x97, 0x32, 0xaa, 0xdd, 0xdc, 0x5f, 0x3e, 0x58, 0x2f, 0x64, 0xa7, + 0x49, 0x78, 0x4a, 0xe5, 0x8b, 0x61, 0x69, 0x28, 0x25, 0x34, 0x45, 0x0f, 0xc1, 0xb0, 0x0c, 0x52, + 0x93, 0xe9, 0x48, 0xb5, 0x55, 0x61, 0xbd, 0x17, 0x63, 0x7d, 0x22, 0x70, 0x65, 0x0e, 0xd3, 0x93, + 0x83, 0x97, 0x03, 0x0a, 0x3f, 0x07, 0x3b, 0x43, 0xfc, 0x0c, 0xf9, 0xe4, 0xe7, 0x01, 0xa1, 0x8c, + 0xa2, 0xe9, 0xc0, 0x69, 0x6b, 0xd7, 0x88, 0x92, 0x36, 0xc4, 0xcf, 0x74, 0x69, 0x7f, 0x36, 0x19, + 0x30, 0x78, 0x06, 0xd4, 0x99, 0x2c, 0xa7, 0x1a, 0x10, 0x8c, 0x0f, 0x66, 0x26, 0x29, 0xe3, 0x54, + 0x0e, 0xd1, 0x25, 0x09, 0xd6, 0x33, 0xc6, 0xb4, 0x00, 0x1e, 0x83, 0x75, 0x66, 0x53, 0x3e, 0x43, + 0x46, 0x9e, 0x31, 0x6d, 0x3d, 0x8e, 0x8c, 0x57, 0xca, 0x7c, 0xc7, 0xa3, 0xcc, 0x27, 0x78, 0xd8, + 0xb6, 0x69, 0x39, 0x04, 0xeb, 0x80, 0x8d, 0x7f, 0xc3, 0xcf, 0xc1, 0xad, 0x01, 0x63, 0x1e, 0x8a, + 0x2a, 0x15, 0x72, 0x3d, 0x51, 0x07, 0xb4, 0x94, 0x60, 0xfc, 0x4e, 0x5c, 0x0c, 0x19, 0xf3, 0x1e, + 0x9e, 0x49, 0x7c, 0x33, 0x84, 0xeb, 0x9b, 0x9c, 0x65, 0x46, 0x08, 0xbf, 0x00, 0xb7, 0xb9, 0xb8, + 0x30, 0xcf, 0x9e, 0xbe, 0x92, 0xbd, 0x30, 0xcb, 0xbe, 0x35, 0x88, 0x91, 0xc2, 0x16, 0x50, 0x4d, + 0x87, 0x22, 0x9f, 0xf4, 0x7c, 0x42, 0x07, 0xc8, 0xc7, 0x8c, 0x68, 0xea, 0xab, 0xf2, 0x26, 0x3d, + 0x9b, 0x33, 0xa6, 0x43, 0xf5, 0x90, 0x41, 0xc7, 0x8c, 0xc0, 0x2f, 0xc0, 0x06, 0x27, 0xb5, 0x5d, + 0xf7, 0x22, 0xf0, 0x50, 0x0f, 0x0f, 0x2d, 0x7b, 0xa4, 0x6d, 0x88, 0x3d, 0xfd, 0x60, 0x41, 0xcd, + 0x70, 0x68, 0x5d, 0xa0, 0x8f, 0x05, 0x78, 0x6a, 0x6b, 0x67, 0xcc, 0x69, 0x25, 0xfc, 0x11, 0x48, + 0x85, 0x73, 0xa6, 0xae, 0x7d, 0xc9, 0xb7, 0x01, 0x7c, 0xd5, 0x4e, 0xd7, 0x93, 0x62, 0x86, 0x12, + 0x0f, 0x5b, 0x60, 0x63, 0xee, 0x10, 0xd0, 0x36, 0xe3, 0x0a, 0x50, 0xb4, 0x97, 0x9a, 0x21, 0xbc, + 0x12, 0xa1, 0x75, 0xd5, 0x9d, 0x91, 0xc0, 0x36, 0x50, 0x0d, 0x9b, 0x60, 0x27, 0xf0, 0x90, 0xe5, + 0x30, 0xe2, 0x5f, 0x62, 0x5b, 0xdb, 0xfa, 0xb6, 0x91, 0xcc, 0x48, 0x8a, 0x9a, 0x64, 0x80, 0x4d, + 0xb0, 0x15, 0xc8, 0xdd, 0x87, 0xba, 0x96, 0x63, 0x46, 0xe5, 0xf2, 0x96, 0x60, 0xde, 0x8d, 0xf9, + 0xe4, 0x92, 0xe5, 0x98, 0xb2, 0x4a, 0xc2, 0xc8, 0xf4, 0xa5, 0x0c, 0x36, 0x80, 0x6a, 0x77, 0x11, + 0x0d, 0xba, 0x94, 0xb0, 0x88, 0xec, 0xb6, 0x20, 0x7b, 0x63, 0x51, 0xb9, 0x69, 0x09, 0xb0, 0xe4, + 0x4c, 0xdb, 0x53, 0x63, 0x78, 0x0e, 0x36, 0x7d, 0xcb, 0xe9, 0xa3, 0x01, 0xa6, 0x03, 0x64, 0x77, + 0x23, 0xca, 0xed, 0xab, 0xca, 0xb9, 0x6e, 0x39, 0xfd, 0x13, 0x4c, 0x07, 0xf5, 0x6e, 0x48, 0x72, + 0xb2, 0xa4, 0xab, 0xfe, 0x8c, 0x0c, 0x9e, 0x02, 0x95, 0xf9, 0xd8, 0xa1, 0x9e, 0xeb, 0x33, 0x44, + 0x5d, 0xe3, 0x82, 0x30, 0x4d, 0x13, 0xac, 0xb9, 0x98, 0xaf, 0x6e, 0x47, 0xd0, 0x96, 0x40, 0xea, + 0x19, 0x36, 0x2d, 0x80, 0x3f, 0x00, 0xab, 0x43, 0xc2, 0xb0, 0x89, 0x19, 0xd6, 0xee, 0x08, 0x9a, + 0x9d, 0x18, 0x9a, 0x53, 0x09, 0xd1, 0xc7, 0x60, 0xf8, 0x05, 0x80, 0xe3, 0xd4, 0xa3, 0xc4, 0x96, + 0xbb, 0x25, 0x2b, 0x76, 0x73, 0x3e, 0xfe, 0xfb, 0xe4, 0xdf, 0x28, 0xd7, 0x5a, 0x91, 0x95, 0xbe, + 0xe1, 0xcd, 0x8a, 0xf8, 0x7a, 0x18, 0xee, 0x70, 0xe8, 0x3a, 0x13, 0xc1, 0xdb, 0xb9, 0x6a, 0x3d, + 0xca, 0x02, 0x1d, 0x85, 0x89, 0x9f, 0x57, 0x93, 0x63, 0x98, 0x03, 0x29, 0x6c, 0x33, 0x44, 0x19, + 0x66, 0x48, 0x1c, 0xe5, 0x77, 0xf9, 0x51, 0xae, 0xaf, 0x63, 0x9b, 0xb5, 0x18, 0x66, 0x0d, 0x7e, + 0x8c, 0xf7, 0xc1, 0x5d, 0xe9, 0x33, 0xbe, 0x6e, 0xed, 0xc6, 0xa6, 0x42, 0x54, 0x59, 0x66, 0x0b, + 0xcb, 0x9d, 0x90, 0x2b, 0x46, 0x05, 0xfb, 0x60, 0x67, 0xbc, 0x7b, 0x27, 0x4e, 0xd0, 0xc8, 0xcf, + 0x5e, 0x5c, 0x05, 0x8b, 0x8a, 0xed, 0xcb, 0xd2, 0x3f, 0x76, 0x14, 0x2c, 0x52, 0xc1, 0x0e, 0x38, + 0x30, 0x6c, 0x97, 0x92, 0x09, 0x2f, 0x14, 0xf1, 0xef, 0x73, 0x29, 0x43, 0xf2, 0x60, 0xeb, 0x61, + 0xcb, 0x0e, 0x7c, 0xa2, 0xdd, 0xdb, 0x57, 0x0e, 0x56, 0xf5, 0xd7, 0x05, 0xfe, 0x25, 0x13, 0x6d, + 0x3a, 0x27, 0x2e, 0x65, 0xe1, 0xe1, 0x76, 0x1c, 0x42, 0xe1, 0x09, 0xb8, 0x6f, 0xfa, 0xd8, 0x72, + 0x62, 0x69, 0x7d, 0x32, 0x74, 0x79, 0x92, 0xef, 0x0b, 0xbe, 0x5d, 0x01, 0x9c, 0xe3, 0xd3, 0x43, + 0x10, 0xac, 0x83, 0x8c, 0xed, 0x62, 0x13, 0x61, 0x4a, 0xad, 0xbe, 0x33, 0x24, 0x0e, 0xd3, 0xee, + 0x8b, 0xaf, 0x8f, 0x6f, 0xa2, 0xea, 0x2e, 0x36, 0x8b, 0x63, 0xa8, 0x9e, 0xb6, 0xa7, 0xc6, 0xf0, + 0x4b, 0x70, 0xdb, 0xf5, 0xad, 0xbe, 0xe5, 0x60, 0x1b, 0x99, 0x94, 0x4d, 0x6c, 0x9d, 0x9c, 0x20, + 0x7d, 0x2b, 0x7e, 0xeb, 0x34, 0xa5, 0x4d, 0x85, 0xb2, 0x89, 0xd4, 0xdb, 0x74, 0xe7, 0xc5, 0x30, + 0x00, 0x59, 0xf2, 0x8c, 0x11, 0x87, 0xf2, 0xf5, 0x9a, 0xdb, 0x20, 0xaf, 0x8b, 0x82, 0xfb, 0x68, + 0x41, 0xb3, 0x16, 0xd9, 0xcd, 0xec, 0x86, 0xaa, 0xc3, 0xfc, 0x91, 0xe8, 0x39, 0x34, 0xb2, 0x00, + 0x02, 0x7f, 0xa9, 0x80, 0x7d, 0xde, 0x24, 0x9a, 0xe8, 0x0a, 0xef, 0x6f, 0x08, 0xef, 0xef, 0xc5, + 0x7b, 0xe7, 0x4d, 0xa7, 0x79, 0xe5, 0x14, 0xf4, 0x5d, 0x76, 0x15, 0x06, 0x1a, 0x60, 0xdb, 0x26, + 0x58, 0x2c, 0xb0, 0xe8, 0x43, 0x26, 0xa2, 0xfb, 0x40, 0x44, 0xf7, 0x70, 0x41, 0xa1, 0xe4, 0x46, + 0xb2, 0x77, 0x99, 0x08, 0xef, 0x96, 0x1d, 0x23, 0xcf, 0x06, 0x40, 0x9d, 0x6d, 0x6a, 0xe1, 0x47, + 0x00, 0x88, 0xc6, 0x38, 0xf4, 0xa5, 0x08, 0x5f, 0xf7, 0x62, 0x92, 0x30, 0x84, 0xb7, 0xc4, 0xdd, + 0x4b, 0x5f, 0xe3, 0x9d, 0x70, 0x68, 0x7f, 0x1f, 0x24, 0x29, 0xf1, 0x2f, 0x2d, 0x83, 0x84, 0x99, + 0x9f, 0x08, 0x33, 0x5f, 0xca, 0x78, 0xe6, 0x67, 0x4d, 0xb0, 0x7b, 0x65, 0x6c, 0xa0, 0x0a, 0x96, + 0x2f, 0xc8, 0x28, 0xec, 0xff, 0x75, 0xfe, 0x13, 0x7e, 0x0f, 0xdc, 0xb8, 0xe4, 0xad, 0x99, 0xa0, + 0x5b, 0x2f, 0x6c, 0xcf, 0x1d, 0x66, 0x2d, 0x71, 0x37, 0xd1, 0x43, 0xd4, 0xfb, 0x89, 0xf7, 0x94, + 0x6c, 0x0f, 0xe4, 0x5e, 0xbd, 0x0c, 0x31, 0xae, 0x0e, 0xa7, 0x5d, 0x6d, 0xcd, 0xb9, 0x2a, 0x3a, + 0xa3, 0x49, 0x3f, 0xbf, 0x5a, 0x01, 0xe9, 0xe9, 0xe3, 0x09, 0x7a, 0x20, 0xd3, 0xc3, 0xb6, 0xdd, + 0xc5, 0xc6, 0x45, 0xd4, 0x4c, 0x2b, 0xa2, 0x54, 0xff, 0xf0, 0x3a, 0xa7, 0xdb, 0x78, 0x78, 0x2c, + 0x39, 0x62, 0x3a, 0xed, 0x74, 0x6f, 0x4a, 0x07, 0x3f, 0x02, 0x69, 0x93, 0xf4, 0x70, 0xc0, 0x8b, + 0xae, 0xb0, 0x7d, 0x55, 0xa0, 0x52, 0x12, 0x1e, 0x7a, 0x82, 0x5f, 0x02, 0x55, 0x9e, 0xc6, 0xe1, + 0xe9, 0xe2, 0xfa, 0x54, 0x5b, 0x16, 0x3b, 0xfc, 0x9d, 0x6f, 0x35, 0xe5, 0x96, 0xb4, 0xd6, 0x33, + 0x74, 0x6a, 0x4c, 0x61, 0x01, 0xdc, 0xb2, 0x5d, 0x03, 0xdb, 0x16, 0x1b, 0xa1, 0xa7, 0xc4, 0xea, + 0x0f, 0x18, 0xc2, 0x4f, 0xb1, 0x4f, 0xc4, 0x05, 0x69, 0x55, 0xdf, 0x8c, 0x94, 0xe7, 0x42, 0x57, + 0xe4, 0x2a, 0x6e, 0x43, 0x0d, 0x6c, 0x13, 0x34, 0x63, 0x29, 0xae, 0x3a, 0xab, 0xfa, 0xa6, 0x50, + 0xd6, 0xa7, 0x0c, 0xb3, 0x6f, 0x02, 0x75, 0x76, 0x32, 0x10, 0x82, 0x95, 0x0b, 0x32, 0xa2, 0x9a, + 0xb2, 0xbf, 0x7c, 0xb0, 0xa6, 0x8b, 0xdf, 0xb9, 0x26, 0xb8, 0x1d, 0x1f, 0x67, 0x98, 0x01, 0xeb, + 0x8d, 0x26, 0x3a, 0x2e, 0xd6, 0xeb, 0xa5, 0x62, 0xf9, 0x13, 0x75, 0x09, 0xaa, 0x20, 0x59, 0x6c, + 0x7c, 0x86, 0xaa, 0x8d, 0xca, 0x59, 0xb3, 0xd6, 0x68, 0xab, 0x0a, 0x84, 0x20, 0x5d, 0xa9, 0x1e, + 0x17, 0x3b, 0xf5, 0x36, 0x6a, 0x75, 0x4a, 0xad, 0x6a, 0x5b, 0x4d, 0x64, 0xbb, 0x60, 0x2b, 0x2e, + 0xf9, 0xe0, 0xc7, 0x20, 0x69, 0x0c, 0x5c, 0x9e, 0x0f, 0x86, 0x1b, 0x38, 0x4c, 0xa6, 0xd4, 0x95, + 0x17, 0x10, 0x79, 0xe7, 0x3d, 0x4c, 0x1c, 0x24, 0xf4, 0xf5, 0xd0, 0xb8, 0xcc, 0x6d, 0xb3, 0x7f, + 0x5c, 0x06, 0xea, 0x6c, 0xdf, 0x02, 0x9f, 0x80, 0x8d, 0xa1, 0xe5, 0x58, 0xc3, 0x60, 0x88, 0x44, + 0x13, 0x44, 0xad, 0xe7, 0xe4, 0x4a, 0x2f, 0xef, 0xbe, 0x1d, 0x7a, 0x49, 0x72, 0x2f, 0x37, 0x0b, + 0x37, 0xb4, 0xaf, 0xbe, 0xfa, 0x6a, 0x45, 0xcf, 0x48, 0x12, 0xce, 0xdf, 0xb2, 0x9e, 0x13, 0xf8, + 0x53, 0x90, 0x32, 0x89, 0xe7, 0x13, 0x03, 0x33, 0x62, 0xa2, 0xcb, 0x87, 0x72, 0x4b, 0x3d, 0xba, + 0x5e, 0x3b, 0x95, 0xaf, 0x8c, 0x6d, 0x9f, 0x3c, 0x14, 0x05, 0x37, 0x69, 0x4e, 0x48, 0xa0, 0x09, + 0x52, 0xa2, 0x5b, 0xeb, 0x05, 0x4e, 0xd8, 0xcc, 0x2c, 0x8b, 0x0c, 0xb9, 0x2e, 0x3b, 0x1f, 0x1c, + 0x4b, 0xd3, 0xa9, 0xcc, 0x48, 0x0e, 0x26, 0x34, 0xd9, 0x3a, 0x48, 0x4e, 0xce, 0x03, 0x7e, 0x00, + 0x92, 0x01, 0x25, 0x88, 0x32, 0x53, 0xf4, 0x8a, 0x32, 0x4c, 0xd9, 0xb9, 0x30, 0x95, 0x5c, 0xd7, + 0x0e, 0xef, 0x82, 0x20, 0xa0, 0xa4, 0xc5, 0x4c, 0xee, 0x2f, 0x97, 0x07, 0xc9, 0x49, 0xbf, 0x70, + 0x1d, 0xdc, 0xfc, 0xf4, 0x53, 0x74, 0x52, 0x6c, 0x9d, 0xa8, 0x4b, 0x70, 0x03, 0xa4, 0x4e, 0x3b, + 0xfa, 0x69, 0x47, 0x17, 0x02, 0x54, 0x50, 0x95, 0xec, 0x87, 0x60, 0x33, 0xe6, 0xb4, 0x83, 0x6f, + 0x82, 0x0c, 0x9f, 0x84, 0x68, 0x7b, 0x06, 0x04, 0x9b, 0xc4, 0x17, 0xf3, 0x58, 0xd5, 0x53, 0x01, + 0x25, 0xbc, 0x83, 0x39, 0x11, 0xc2, 0xec, 0x7f, 0x56, 0x40, 0x7a, 0xba, 0xd1, 0x82, 0x9f, 0x80, + 0xed, 0xb0, 0x91, 0x18, 0x21, 0x0f, 0x3b, 0x96, 0x81, 0xd8, 0x80, 0x5f, 0x78, 0x5c, 0xdb, 0x94, + 0x9f, 0xb2, 0x29, 0xe3, 0xc7, 0x4f, 0x97, 0xfc, 0x59, 0xf8, 0x50, 0xa4, 0xdf, 0x92, 0x36, 0x67, + 0xdc, 0xa4, 0x1d, 0x59, 0x40, 0x0b, 0x6c, 0x3d, 0x77, 0x1d, 0x12, 0xe6, 0xe1, 0xc4, 0x01, 0x13, + 0xae, 0xf3, 0xbb, 0xd7, 0xe9, 0xfc, 0xf2, 0x3f, 0x71, 0x1d, 0x22, 0x92, 0x75, 0xe2, 0xb0, 0xd9, + 0x78, 0x3e, 0x2b, 0x84, 0xbf, 0x00, 0x3b, 0x33, 0x39, 0x4c, 0xcc, 0x09, 0x8f, 0xe1, 0xbb, 0xcb, + 0x87, 0xd7, 0xf2, 0x38, 0x9d, 0xef, 0xc4, 0x9c, 0x70, 0xac, 0xd9, 0x0b, 0x74, 0xb0, 0x06, 0x36, + 0x03, 0xcf, 0xc4, 0x8c, 0xa0, 0x21, 0xf1, 0xfb, 0x04, 0x3d, 0xb5, 0x1c, 0xd3, 0x7d, 0xfa, 0xca, + 0xc7, 0x19, 0x7d, 0x23, 0xb4, 0x3a, 0xe5, 0x46, 0xe7, 0xc2, 0x26, 0xfb, 0x3b, 0x05, 0x6c, 0xcc, + 0x7d, 0x35, 0xfc, 0x00, 0x64, 0x7c, 0x37, 0x60, 0x3c, 0xff, 0x88, 0x83, 0xbb, 0x36, 0xb9, 0x72, + 0x41, 0xd2, 0x12, 0x5b, 0x0d, 0xa1, 0xf0, 0x18, 0xa8, 0x43, 0xde, 0xe0, 0xc9, 0xd7, 0x28, 0x91, + 0xc1, 0x89, 0x57, 0x67, 0xb0, 0x9e, 0x1e, 0x5a, 0x8e, 0x0c, 0x13, 0x4f, 0xd9, 0x6c, 0x16, 0x68, + 0x8b, 0xc2, 0x53, 0xda, 0x01, 0x77, 0xc6, 0x4b, 0x10, 0xbd, 0x9c, 0x7a, 0xc4, 0xb0, 0x7a, 0x16, + 0xf1, 0x73, 0xe7, 0x20, 0x35, 0xf5, 0x62, 0x06, 0x01, 0x78, 0xad, 0xd5, 0x2e, 0xb6, 0x6b, 0x65, + 0x75, 0x09, 0xa6, 0x01, 0x68, 0xb5, 0xf5, 0x5a, 0xb9, 0x8d, 0x2a, 0x8d, 0x96, 0xaa, 0xf0, 0x02, + 0x59, 0x6f, 0x3e, 0xae, 0x95, 0x8b, 0x75, 0x21, 0x48, 0xc0, 0x9b, 0x60, 0xb9, 0x5a, 0x69, 0xa9, + 0xcb, 0xbc, 0x52, 0x36, 0xf5, 0xda, 0xe3, 0x5a, 0x83, 0xab, 0x5a, 0x6d, 0x75, 0x25, 0xf7, 0x33, + 0xb0, 0x1a, 0x3d, 0x15, 0x71, 0x3b, 0xbd, 0xd9, 0x69, 0x54, 0x90, 0xde, 0x2c, 0xd5, 0x1a, 0x61, + 0xca, 0xd4, 0xab, 0xc5, 0x56, 0x1b, 0xe9, 0xd5, 0x1f, 0x77, 0xaa, 0x2d, 0x5e, 0x59, 0x53, 0x60, + 0x4d, 0xaf, 0x35, 0x1e, 0x87, 0x49, 0x95, 0xe0, 0xd3, 0xd0, 0x8b, 0x8d, 0x4a, 0xf3, 0x54, 0x5d, + 0x86, 0x9b, 0x20, 0x33, 0x49, 0x8e, 0xea, 0x25, 0x75, 0x85, 0x03, 0x4e, 0x8b, 0x8f, 0xeb, 0xd5, + 0x27, 0xea, 0x8d, 0xdc, 0x3b, 0x20, 0x33, 0x73, 0x85, 0x87, 0xab, 0x60, 0xa5, 0xd8, 0x69, 0x37, + 0xd5, 0x25, 0x9e, 0xab, 0x4f, 0xde, 0x46, 0xcd, 0x46, 0xfd, 0x33, 0x55, 0x11, 0x83, 0x77, 0xc3, + 0x41, 0x22, 0xd7, 0x06, 0xda, 0xa2, 0xbb, 0x12, 0xdc, 0x01, 0xdb, 0x9d, 0x56, 0x15, 0x95, 0x9b, + 0x8d, 0xe3, 0xda, 0xe3, 0x8e, 0x5e, 0xad, 0xa0, 0x33, 0xbd, 0xd9, 0x6e, 0x96, 0x9b, 0x75, 0x75, + 0x29, 0x52, 0x56, 0x9a, 0xe7, 0x8d, 0x56, 0x5b, 0xaf, 0x16, 0x4f, 0x5f, 0x2a, 0x95, 0xd2, 0xba, + 0x78, 0x4a, 0x0b, 0x03, 0xfd, 0xf1, 0xca, 0x6a, 0x52, 0x4d, 0x7d, 0xbc, 0xb2, 0x9a, 0x51, 0xd5, + 0xdc, 0x39, 0x80, 0x9d, 0xf9, 0x1b, 0x71, 0x11, 0xa4, 0xc3, 0x77, 0x6c, 0x24, 0x9f, 0xcc, 0xc7, + 0xa5, 0x69, 0xf1, 0x7b, 0x42, 0x2a, 0xb4, 0x90, 0xc3, 0x1c, 0x06, 0x77, 0x16, 0x5e, 0x5b, 0x60, + 0x05, 0xa4, 0x98, 0xe1, 0xa1, 0x0b, 0x42, 0x3c, 0x6c, 0x5b, 0x97, 0xe4, 0x8a, 0xce, 0xae, 0x6d, + 0x78, 0x9f, 0x44, 0x30, 0x3d, 0xc9, 0x26, 0x46, 0x85, 0xbf, 0x25, 0xc0, 0xb6, 0x8c, 0xd5, 0x78, + 0xbb, 0xb4, 0xc2, 0xce, 0x0e, 0x9e, 0x83, 0x74, 0x2b, 0x74, 0x1e, 0x02, 0x28, 0x9c, 0x79, 0xb7, + 0x1b, 0x5b, 0xc8, 0x13, 0x32, 0x7b, 0x6f, 0xa1, 0x9e, 0x7a, 0xae, 0x43, 0x49, 0x6e, 0xe9, 0x40, + 0xf9, 0xbe, 0x02, 0x7d, 0xb0, 0x59, 0x73, 0x0c, 0x9f, 0xf0, 0x4b, 0x07, 0xb6, 0xc7, 0xec, 0x33, + 0xd7, 0x8b, 0x09, 0xc8, 0x9c, 0xa3, 0xc3, 0xeb, 0x40, 0xa7, 0x7c, 0x52, 0x90, 0x3a, 0x26, 0xcc, + 0x18, 0xfc, 0xff, 0xbe, 0xe5, 0xfe, 0xd7, 0x7f, 0xfd, 0xd7, 0x6f, 0x12, 0x3b, 0xb9, 0xdb, 0x53, + 0xff, 0x97, 0x78, 0x5f, 0xa6, 0x3c, 0x7d, 0x5f, 0x39, 0x2c, 0x3d, 0xfc, 0xfd, 0x8b, 0x3d, 0xe5, + 0x9b, 0x17, 0x7b, 0xca, 0x5f, 0x5e, 0xec, 0x29, 0xff, 0x7c, 0xb1, 0xa7, 0x80, 0xac, 0xe5, 0x86, + 0xbc, 0x9e, 0xef, 0x3e, 0x1b, 0x4d, 0xb9, 0x38, 0x53, 0x7e, 0xad, 0x28, 0xdd, 0xd7, 0x44, 0x59, + 0x78, 0xf4, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x94, 0x13, 0xfd, 0x44, 0xa1, 0x19, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.validate.go index 0b03e4ee858c..9a5e8878b71a 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.validate.go @@ -721,6 +721,13 @@ func (m *Cluster_RingHashLbConfig) Validate() error { } } + if _, ok := Cluster_RingHashLbConfig_HashFunction_name[int32(m.GetHashFunction())]; !ok { + return Cluster_RingHashLbConfigValidationError{ + Field: "HashFunction", + Reason: "value must be one of the defined enum values", + } + } + return nil } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.go index da68bae77d28..2c23b29cf0a3 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.go @@ -43,7 +43,7 @@ func (m *CircuitBreakers) Reset() { *m = CircuitBreakers{} } func (m *CircuitBreakers) String() string { return proto.CompactTextString(m) } func (*CircuitBreakers) ProtoMessage() {} func (*CircuitBreakers) Descriptor() ([]byte, []int) { - return fileDescriptor_circuit_breaker_bd4ee601853a6f15, []int{0} + return fileDescriptor_circuit_breaker_4da699ff5db2699e, []int{0} } func (m *CircuitBreakers) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -108,7 +108,7 @@ func (m *CircuitBreakers_Thresholds) Reset() { *m = CircuitBreakers_Thre func (m *CircuitBreakers_Thresholds) String() string { return proto.CompactTextString(m) } func (*CircuitBreakers_Thresholds) ProtoMessage() {} func (*CircuitBreakers_Thresholds) Descriptor() ([]byte, []int) { - return fileDescriptor_circuit_breaker_bd4ee601853a6f15, []int{0, 0} + return fileDescriptor_circuit_breaker_4da699ff5db2699e, []int{0, 0} } func (m *CircuitBreakers_Thresholds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -807,33 +807,34 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/cluster/circuit_breaker.proto", fileDescriptor_circuit_breaker_bd4ee601853a6f15) -} - -var fileDescriptor_circuit_breaker_bd4ee601853a6f15 = []byte{ - // 381 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcf, 0xaa, 0xd3, 0x40, - 0x14, 0x87, 0x99, 0xd6, 0x7f, 0x4c, 0xe4, 0x5e, 0x08, 0x45, 0x42, 0xb9, 0x84, 0x72, 0x57, 0xc5, - 0xc5, 0x8c, 0xcc, 0x5d, 0xab, 0xd8, 0xd2, 0x85, 0x9b, 0x52, 0xa2, 0x76, 0xe1, 0xa6, 0x4c, 0xd2, - 0x63, 0x3a, 0x98, 0xcc, 0x8c, 0x33, 0x93, 0x9a, 0xbe, 0x91, 0xf8, 0x24, 0xba, 0xf3, 0x11, 0x24, - 0xbe, 0x88, 0x34, 0x13, 0x53, 0x2d, 0x2e, 0xba, 0x3b, 0x73, 0xce, 0xef, 0xfb, 0x38, 0x9c, 0xc1, - 0x4f, 0x41, 0xee, 0xd5, 0x81, 0x72, 0x2d, 0xe8, 0x9e, 0xd1, 0xac, 0xa8, 0xac, 0x03, 0x43, 0x33, - 0x61, 0xb2, 0x4a, 0xb8, 0x4d, 0x6a, 0x80, 0x7f, 0x04, 0x43, 0xb4, 0x51, 0x4e, 0x85, 0xa3, 0x36, - 0x4b, 0xb8, 0x16, 0x64, 0xcf, 0x48, 0x97, 0x1d, 0xdf, 0xfc, 0x6b, 0x50, 0x06, 0x68, 0xca, 0x2d, - 0x78, 0x66, 0x1c, 0xe7, 0x4a, 0xe5, 0x05, 0xd0, 0xf6, 0x95, 0x56, 0x1f, 0xe8, 0x67, 0xc3, 0xb5, - 0x06, 0x63, 0xbb, 0xf9, 0x28, 0x57, 0xb9, 0x6a, 0x4b, 0x7a, 0xac, 0x7c, 0xf7, 0xf6, 0xfb, 0x10, - 0x5f, 0xcf, 0xfd, 0x0e, 0x33, 0xbf, 0x82, 0x0d, 0x57, 0x18, 0xbb, 0x9d, 0x01, 0xbb, 0x53, 0xc5, - 0xd6, 0x46, 0x68, 0x32, 0x9c, 0x06, 0xec, 0x19, 0xf9, 0xdf, 0x4a, 0xe4, 0x0c, 0x25, 0x6f, 0x7b, - 0x2e, 0xf9, 0xcb, 0x31, 0xfe, 0x35, 0xc0, 0xf8, 0x34, 0x0a, 0x5f, 0xe0, 0x47, 0xda, 0x08, 0x65, - 0x84, 0x3b, 0x44, 0x68, 0x82, 0xa6, 0x57, 0xec, 0xf6, 0x4c, 0xaf, 0x0c, 0x90, 0x44, 0x55, 0x4e, - 0xc8, 0x7c, 0xd5, 0x25, 0x93, 0x9e, 0x09, 0x17, 0xf8, 0xba, 0xe4, 0xf5, 0x26, 0x53, 0x52, 0x42, - 0xe6, 0x84, 0x92, 0x36, 0x1a, 0x4c, 0xd0, 0x34, 0x60, 0x37, 0xc4, 0x1f, 0x81, 0xfc, 0x39, 0x02, - 0x79, 0xf7, 0x5a, 0xba, 0x3b, 0xb6, 0xe6, 0x45, 0x05, 0xc9, 0x55, 0xc9, 0xeb, 0xf9, 0x89, 0x09, - 0x97, 0x78, 0x74, 0xd4, 0x68, 0x90, 0x5b, 0x21, 0xf3, 0x8d, 0x81, 0x4f, 0x15, 0x58, 0x67, 0xa3, - 0xe1, 0x05, 0xae, 0xb0, 0xe4, 0xf5, 0xca, 0x83, 0x49, 0xc7, 0x85, 0x2f, 0xf1, 0xe3, 0xa3, 0xaf, - 0xf7, 0xdc, 0xbb, 0xc0, 0x13, 0x94, 0xbc, 0xee, 0x05, 0xcf, 0x71, 0xe0, 0x05, 0xce, 0x08, 0xb0, - 0xd1, 0xfd, 0x0b, 0x78, 0xdc, 0xf2, 0x6d, 0x7e, 0xc6, 0xbe, 0x34, 0x31, 0xfa, 0xd6, 0xc4, 0xe8, - 0x47, 0x13, 0xa3, 0x9f, 0x4d, 0x8c, 0xde, 0x3f, 0xec, 0xfe, 0xe9, 0xeb, 0xe0, 0xc9, 0xa2, 0xbd, - 0xef, 0x2b, 0x2d, 0xc8, 0x9a, 0x91, 0xb9, 0x6f, 0x2f, 0xdf, 0xa4, 0x0f, 0x5a, 0xeb, 0xdd, 0xef, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x44, 0x76, 0x3e, 0xd5, 0x9e, 0x02, 0x00, 0x00, + proto.RegisterFile("envoy/api/v2/cluster/circuit_breaker.proto", fileDescriptor_circuit_breaker_4da699ff5db2699e) +} + +var fileDescriptor_circuit_breaker_4da699ff5db2699e = []byte{ + // 394 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcf, 0x8a, 0xd4, 0x40, + 0x10, 0x87, 0xe9, 0x19, 0xff, 0xd1, 0x91, 0x5d, 0x08, 0x83, 0x84, 0x61, 0x09, 0xc3, 0x9c, 0x06, + 0x0f, 0xdd, 0x92, 0x3d, 0xab, 0xb8, 0xc3, 0x1e, 0xbc, 0x2c, 0x21, 0xea, 0x22, 0x5e, 0x86, 0x4e, + 0xb6, 0xcc, 0x36, 0x26, 0x5d, 0x6d, 0x77, 0x67, 0xcc, 0xbc, 0x91, 0xf8, 0x24, 0x7a, 0xf3, 0x11, + 0x24, 0xbe, 0x88, 0x4c, 0x3a, 0x66, 0x75, 0xd9, 0xc3, 0xdc, 0x2a, 0x55, 0xbf, 0xef, 0x4b, 0x51, + 0x4d, 0x9f, 0x82, 0xda, 0xe2, 0x8e, 0x0b, 0x2d, 0xf9, 0x36, 0xe1, 0x45, 0xd5, 0x58, 0x07, 0x86, + 0x17, 0xd2, 0x14, 0x8d, 0x74, 0x9b, 0xdc, 0x80, 0xf8, 0x04, 0x86, 0x69, 0x83, 0x0e, 0xc3, 0x59, + 0x9f, 0x65, 0x42, 0x4b, 0xb6, 0x4d, 0xd8, 0x90, 0x9d, 0x9f, 0xfc, 0x6f, 0x40, 0x03, 0x3c, 0x17, + 0x16, 0x3c, 0x33, 0x8f, 0x4b, 0xc4, 0xb2, 0x02, 0xde, 0x7f, 0xe5, 0xcd, 0x47, 0xfe, 0xc5, 0x08, + 0xad, 0xc1, 0xd8, 0x61, 0x3e, 0x2b, 0xb1, 0xc4, 0xbe, 0xe4, 0xfb, 0xca, 0x77, 0x97, 0x3f, 0xa6, + 0xf4, 0x78, 0xed, 0x77, 0x38, 0xf3, 0x2b, 0xd8, 0x30, 0xa5, 0xd4, 0x5d, 0x1b, 0xb0, 0xd7, 0x58, + 0x5d, 0xd9, 0x88, 0x2c, 0xa6, 0xab, 0x20, 0x79, 0xc6, 0xee, 0x5a, 0x89, 0xdd, 0x42, 0xd9, 0xdb, + 0x91, 0xcb, 0xfe, 0x71, 0xcc, 0x7f, 0x4f, 0x28, 0xbd, 0x19, 0x85, 0x2f, 0xe8, 0x23, 0x6d, 0x24, + 0x1a, 0xe9, 0x76, 0x11, 0x59, 0x90, 0xd5, 0x51, 0xb2, 0xbc, 0xa5, 0x47, 0x03, 0x2c, 0xc3, 0xc6, + 0x49, 0x55, 0xa6, 0x43, 0x32, 0x1b, 0x99, 0xf0, 0x9c, 0x1e, 0xd7, 0xa2, 0xdd, 0x14, 0xa8, 0x14, + 0x14, 0x4e, 0xa2, 0xb2, 0xd1, 0x64, 0x41, 0x56, 0x41, 0x72, 0xc2, 0xfc, 0x11, 0xd8, 0xdf, 0x23, + 0xb0, 0x77, 0xaf, 0x95, 0x3b, 0x4d, 0x2e, 0x45, 0xd5, 0x40, 0x76, 0x54, 0x8b, 0x76, 0x7d, 0xc3, + 0x84, 0x17, 0x74, 0xb6, 0xd7, 0x68, 0x50, 0x57, 0x52, 0x95, 0x1b, 0x03, 0x9f, 0x1b, 0xb0, 0xce, + 0x46, 0xd3, 0x03, 0x5c, 0x61, 0x2d, 0xda, 0xd4, 0x83, 0xd9, 0xc0, 0x85, 0x2f, 0xe9, 0xe3, 0xbd, + 0x6f, 0xf4, 0xdc, 0x3b, 0xc0, 0x13, 0xd4, 0xa2, 0x1d, 0x05, 0xcf, 0x69, 0xe0, 0x05, 0xce, 0x48, + 0xb0, 0xd1, 0xfd, 0x03, 0x78, 0xda, 0xf3, 0x7d, 0xfe, 0xec, 0xfd, 0xd7, 0x2e, 0x26, 0xdf, 0xbb, + 0x98, 0xfc, 0xec, 0x62, 0xf2, 0xab, 0x8b, 0x09, 0x5d, 0x4a, 0xf4, 0x87, 0xd5, 0x06, 0xdb, 0xdd, + 0x9d, 0x4f, 0x98, 0x92, 0x0f, 0x0f, 0x87, 0xf2, 0xdb, 0xe4, 0xc9, 0x79, 0x9f, 0x78, 0xa5, 0x25, + 0xbb, 0x4c, 0xd8, 0xda, 0xb7, 0x2f, 0xde, 0xe4, 0x0f, 0xfa, 0x7f, 0x9f, 0xfe, 0x09, 0x00, 0x00, + 0xff, 0xff, 0xaa, 0x1d, 0x1d, 0x26, 0xc4, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.go index e3892f92193d..50b4789c0674 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.go @@ -86,7 +86,7 @@ func (m *OutlierDetection) Reset() { *m = OutlierDetection{} } func (m *OutlierDetection) String() string { return proto.CompactTextString(m) } func (*OutlierDetection) ProtoMessage() {} func (*OutlierDetection) Descriptor() ([]byte, []int) { - return fileDescriptor_outlier_detection_65759ec7bd5a18df, []int{0} + return fileDescriptor_outlier_detection_0c8d6ce7b5a7bd59, []int{0} } func (m *OutlierDetection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -981,43 +981,44 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/cluster/outlier_detection.proto", fileDescriptor_outlier_detection_65759ec7bd5a18df) + proto.RegisterFile("envoy/api/v2/cluster/outlier_detection.proto", fileDescriptor_outlier_detection_0c8d6ce7b5a7bd59) } -var fileDescriptor_outlier_detection_65759ec7bd5a18df = []byte{ - // 537 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xcb, 0x6e, 0xd3, 0x4c, - 0x14, 0xc7, 0x3f, 0xa7, 0xf7, 0xa9, 0xf4, 0x51, 0x8d, 0xa2, 0x66, 0xd2, 0xa2, 0x08, 0x55, 0x42, - 0x82, 0x0a, 0xd9, 0x52, 0xaa, 0x3e, 0x40, 0xd3, 0xa6, 0xc0, 0x82, 0x8b, 0x12, 0x08, 0x42, 0x80, - 0x46, 0x13, 0xe7, 0xc4, 0x0c, 0xb2, 0x3d, 0x66, 0x2e, 0xae, 0xcb, 0x13, 0xa1, 0x3e, 0x02, 0x2b, - 0x96, 0x2c, 0x79, 0x04, 0x94, 0x1d, 0xcf, 0xc0, 0x06, 0xd9, 0x93, 0x8b, 0xd3, 0x56, 0x22, 0xd9, - 0x8d, 0x3c, 0xf3, 0xfb, 0xfd, 0x8f, 0xcf, 0x1c, 0x0d, 0x7a, 0x04, 0x71, 0x2a, 0x2e, 0x3d, 0x96, - 0x70, 0x2f, 0x6d, 0x7a, 0x7e, 0x68, 0x94, 0x06, 0xe9, 0x09, 0xa3, 0x43, 0x0e, 0x92, 0x0e, 0x40, - 0x83, 0xaf, 0xb9, 0x88, 0xdd, 0x44, 0x0a, 0x2d, 0x70, 0xb5, 0x38, 0xed, 0xb2, 0x84, 0xbb, 0x69, - 0xd3, 0x1d, 0x9f, 0xde, 0x6b, 0x04, 0x42, 0x04, 0x21, 0x78, 0xc5, 0x99, 0xbe, 0x19, 0x7a, 0x03, - 0x23, 0xd9, 0x8c, 0xba, 0xb9, 0x7f, 0x21, 0x59, 0x92, 0x80, 0x54, 0xe3, 0xfd, 0x5a, 0xca, 0x42, - 0x3e, 0x60, 0x1a, 0xbc, 0xc9, 0x62, 0xbc, 0x51, 0x0d, 0x44, 0x20, 0x8a, 0xa5, 0x97, 0xaf, 0xec, - 0xd7, 0x83, 0x3f, 0x1b, 0x68, 0xe7, 0x85, 0x2d, 0xf0, 0x6c, 0x52, 0x1f, 0x6e, 0xa3, 0x3b, 0xbe, - 0x88, 0x15, 0xf8, 0x46, 0xf3, 0x14, 0xe8, 0x71, 0x96, 0x11, 0xe7, 0x9e, 0xf3, 0x60, 0xbb, 0x79, - 0xd7, 0xb5, 0xe9, 0xee, 0x24, 0xdd, 0x7d, 0xfd, 0x34, 0xd6, 0x47, 0xcd, 0x1e, 0x0b, 0x0d, 0x74, - 0xfe, 0x2f, 0x41, 0xc7, 0x59, 0x86, 0x4f, 0xd0, 0x26, 0x8f, 0x35, 0xc8, 0x94, 0x85, 0xa4, 0x52, - 0xf0, 0xf5, 0x1b, 0xfc, 0xd9, 0xf8, 0xef, 0x5a, 0xe8, 0xdb, 0xef, 0xef, 0x2b, 0x6b, 0x57, 0x4e, - 0xe5, 0xf0, 0xbf, 0xce, 0x14, 0xc3, 0x5d, 0x84, 0xfb, 0x4c, 0x01, 0x85, 0x4f, 0xb6, 0x34, 0xaa, - 0x79, 0x04, 0x64, 0x65, 0x19, 0xd9, 0x4e, 0x2e, 0x68, 0x8f, 0xf9, 0x57, 0x3c, 0x02, 0xfc, 0x16, - 0x55, 0x23, 0x96, 0xcd, 0x9c, 0x09, 0x48, 0x1f, 0x62, 0x4d, 0x56, 0xff, 0xfd, 0x8f, 0xad, 0xad, - 0xdc, 0xbc, 0x7a, 0x58, 0x21, 0x83, 0x0e, 0x8e, 0x58, 0x36, 0xf1, 0xbe, 0xb4, 0x0a, 0xec, 0xa3, - 0x3a, 0xc4, 0x43, 0x21, 0x7d, 0x1e, 0x07, 0xf4, 0x7a, 0x0f, 0xd7, 0x96, 0xf3, 0xd7, 0xa6, 0xa6, - 0xd3, 0xf9, 0xbe, 0x7e, 0x40, 0xbb, 0xb3, 0x10, 0x65, 0x7c, 0x1f, 0x94, 0xa2, 0x92, 0x69, 0x20, - 0xeb, 0xcb, 0x25, 0x54, 0xa7, 0x9a, 0xae, 0xb5, 0x74, 0x98, 0xce, 0xdb, 0xb3, 0x57, 0x96, 0xd2, - 0x88, 0xc7, 0x3c, 0x32, 0x11, 0xfd, 0x28, 0x94, 0x56, 0x64, 0x63, 0x81, 0x41, 0xa8, 0xa9, 0x99, - 0xee, 0x99, 0xa5, 0x9f, 0xe4, 0x30, 0x7e, 0x87, 0xf6, 0xe7, 0xd4, 0x12, 0x3e, 0x1b, 0x50, 0x9a, - 0xa6, 0x22, 0x34, 0x11, 0x90, 0xcd, 0x05, 0xdc, 0xa4, 0xe4, 0xee, 0x58, 0xbc, 0x57, 0xd0, 0xf8, - 0x0d, 0xaa, 0xcf, 0xc9, 0x95, 0x1e, 0x40, 0x4a, 0x87, 0xcc, 0xd7, 0x42, 0x92, 0xad, 0x05, 0xd4, - 0xbb, 0x25, 0x75, 0x37, 0x87, 0xcf, 0x0b, 0x16, 0xbf, 0x47, 0xfb, 0xe5, 0xab, 0x0c, 0x98, 0x86, - 0x0b, 0x76, 0x49, 0x87, 0x8c, 0x87, 0x46, 0x02, 0x41, 0x0b, 0xa8, 0xeb, 0x25, 0xc1, 0x63, 0xcb, - 0x9f, 0x5b, 0x1c, 0x7f, 0x41, 0xf7, 0x6f, 0x1f, 0x99, 0xeb, 0x39, 0xdb, 0xcb, 0x5d, 0xee, 0xc1, - 0x6d, 0xe3, 0x33, 0x9f, 0xdd, 0x7a, 0xf8, 0x75, 0xd4, 0x70, 0x7e, 0x8c, 0x1a, 0xce, 0xcf, 0x51, - 0xc3, 0xf9, 0x35, 0x6a, 0x38, 0x57, 0x95, 0xdd, 0x76, 0xf1, 0x2a, 0x9d, 0x24, 0xdc, 0xed, 0x35, - 0xdd, 0x53, 0xfb, 0x2a, 0x3d, 0xef, 0xf6, 0xd7, 0x8b, 0xbc, 0xa3, 0xbf, 0x01, 0x00, 0x00, 0xff, - 0xff, 0xd4, 0x46, 0xcd, 0x39, 0xe4, 0x04, 0x00, 0x00, +var fileDescriptor_outlier_detection_0c8d6ce7b5a7bd59 = []byte{ + // 549 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdd, 0x6a, 0x13, 0x41, + 0x14, 0xc7, 0xdd, 0xf4, 0x7b, 0x0a, 0x5a, 0x86, 0xd0, 0x6c, 0x5a, 0x09, 0x12, 0x10, 0xa4, 0xc8, + 0x2e, 0xa4, 0xf4, 0x01, 0x9a, 0x36, 0x55, 0x2f, 0xb4, 0x25, 0xd1, 0x88, 0xa8, 0x0c, 0x93, 0xcd, + 0xc9, 0x3a, 0xb2, 0xbb, 0xb3, 0xce, 0xc7, 0x76, 0xe3, 0x13, 0x49, 0x1f, 0xc1, 0x2b, 0x2f, 0xbd, + 0xf4, 0x11, 0x24, 0x77, 0x3e, 0x83, 0x37, 0xb2, 0x3b, 0xf9, 0xd8, 0xb4, 0x01, 0x93, 0xbb, 0x61, + 0xcf, 0xfc, 0x7e, 0xff, 0xb3, 0x33, 0x87, 0x41, 0x4f, 0x21, 0x4a, 0xf8, 0xd0, 0xa5, 0x31, 0x73, + 0x93, 0x86, 0xeb, 0x05, 0x5a, 0x2a, 0x10, 0x2e, 0xd7, 0x2a, 0x60, 0x20, 0x48, 0x1f, 0x14, 0x78, + 0x8a, 0xf1, 0xc8, 0x89, 0x05, 0x57, 0x1c, 0x97, 0xf3, 0xdd, 0x0e, 0x8d, 0x99, 0x93, 0x34, 0x9c, + 0xf1, 0xee, 0x83, 0x9a, 0xcf, 0xb9, 0x1f, 0x80, 0x9b, 0xef, 0xe9, 0xe9, 0x81, 0xdb, 0xd7, 0x82, + 0xce, 0xa8, 0xbb, 0xf5, 0x6b, 0x41, 0xe3, 0x18, 0x84, 0x1c, 0xd7, 0x2b, 0x09, 0x0d, 0x58, 0x9f, + 0x2a, 0x70, 0x27, 0x8b, 0x71, 0xa1, 0xec, 0x73, 0x9f, 0xe7, 0x4b, 0x37, 0x5b, 0x99, 0xaf, 0xf5, + 0xbf, 0x5b, 0x68, 0xef, 0xd2, 0x34, 0x78, 0x3e, 0xe9, 0x0f, 0xb7, 0xd0, 0x03, 0x8f, 0x47, 0x12, + 0x3c, 0xad, 0x58, 0x02, 0xe4, 0x24, 0x4d, 0x6d, 0xeb, 0x91, 0xf5, 0x64, 0xb7, 0xf1, 0xd0, 0x31, + 0xe9, 0xce, 0x24, 0xdd, 0x79, 0xf3, 0x22, 0x52, 0xc7, 0x8d, 0x2e, 0x0d, 0x34, 0xb4, 0xef, 0x17, + 0xa0, 0x93, 0x34, 0xc5, 0xa7, 0x68, 0x9b, 0x45, 0x0a, 0x44, 0x42, 0x03, 0xbb, 0x94, 0xf3, 0xd5, + 0x3b, 0xfc, 0xf9, 0xf8, 0xef, 0x9a, 0xe8, 0xfb, 0x9f, 0x1f, 0x6b, 0x1b, 0x37, 0x56, 0xe9, 0xe8, + 0x5e, 0x7b, 0x8a, 0xe1, 0x0e, 0xc2, 0x3d, 0x2a, 0x81, 0xc0, 0x67, 0xd3, 0x1a, 0x51, 0x2c, 0x04, + 0x7b, 0x6d, 0x15, 0xd9, 0x5e, 0x26, 0x68, 0x8d, 0xf9, 0xd7, 0x2c, 0x04, 0xfc, 0x0e, 0x95, 0x43, + 0x9a, 0xce, 0x9c, 0x31, 0x08, 0x0f, 0x22, 0x65, 0xaf, 0xff, 0xff, 0x1f, 0x9b, 0x3b, 0x99, 0x79, + 0xfd, 0xa8, 0x64, 0xf7, 0xdb, 0x38, 0xa4, 0xe9, 0xc4, 0x7b, 0x65, 0x14, 0xd8, 0x43, 0x55, 0x88, + 0x06, 0x5c, 0x78, 0x2c, 0xf2, 0xc9, 0xed, 0x33, 0xdc, 0x58, 0xcd, 0x5f, 0x99, 0x9a, 0xce, 0xe6, + 0xcf, 0xf5, 0x23, 0xda, 0x9f, 0x85, 0x48, 0xed, 0x79, 0x20, 0x25, 0x11, 0x54, 0x81, 0xbd, 0xb9, + 0x5a, 0x42, 0x79, 0xaa, 0xe9, 0x18, 0x4b, 0x9b, 0xaa, 0xec, 0x78, 0x0e, 0x8a, 0x52, 0x12, 0xb2, + 0x88, 0x85, 0x3a, 0x24, 0x9f, 0xb8, 0x54, 0xd2, 0xde, 0x5a, 0x62, 0x10, 0x2a, 0x72, 0xa6, 0x7b, + 0x69, 0xe8, 0xe7, 0x19, 0x8c, 0xdf, 0xa3, 0xc3, 0x39, 0xb5, 0x80, 0x2f, 0x1a, 0xa4, 0x22, 0x09, + 0x0f, 0x74, 0x08, 0xf6, 0xf6, 0x12, 0x6e, 0xbb, 0xe0, 0x6e, 0x1b, 0xbc, 0x9b, 0xd3, 0xf8, 0x2d, + 0xaa, 0xce, 0xc9, 0xa5, 0xea, 0x43, 0x42, 0x06, 0xd4, 0x53, 0x5c, 0xd8, 0x3b, 0x4b, 0xa8, 0xf7, + 0x0b, 0xea, 0x4e, 0x06, 0x5f, 0xe4, 0x2c, 0xfe, 0x80, 0x0e, 0x8b, 0x57, 0xe9, 0x53, 0x05, 0xd7, + 0x74, 0x48, 0x06, 0x94, 0x05, 0x5a, 0x80, 0x8d, 0x96, 0x50, 0x57, 0x0b, 0x82, 0x67, 0x86, 0xbf, + 0x30, 0x38, 0xfe, 0x8a, 0x1e, 0x2f, 0x1e, 0x99, 0xdb, 0x39, 0xbb, 0xab, 0x5d, 0x6e, 0x7d, 0xd1, + 0xf8, 0xcc, 0x67, 0x37, 0x2f, 0xbf, 0x8d, 0x6a, 0xd6, 0xcf, 0x51, 0xcd, 0xfa, 0x35, 0xaa, 0x59, + 0xbf, 0x47, 0x35, 0x0b, 0xd5, 0x19, 0x77, 0xf2, 0x77, 0x29, 0x16, 0x3c, 0x1d, 0x3a, 0x8b, 0x9e, + 0xa8, 0x2b, 0xeb, 0xa6, 0xb4, 0xdf, 0xca, 0x0b, 0xa7, 0x31, 0x73, 0xba, 0x0d, 0xe7, 0xcc, 0x14, + 0x5e, 0x75, 0x7a, 0x9b, 0x79, 0x57, 0xc7, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xd0, 0xa8, 0x70, + 0x30, 0x0a, 0x05, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.go index 4b73a5ae64ac..8253ebc8d76d 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.go @@ -46,7 +46,7 @@ func (x SocketAddress_Protocol) String() string { return proto.EnumName(SocketAddress_Protocol_name, int32(x)) } func (SocketAddress_Protocol) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_address_8b64fe4d7f540fd7, []int{1, 0} + return fileDescriptor_address_620f812a25aa7f86, []int{1, 0} } type Pipe struct { @@ -64,7 +64,7 @@ func (m *Pipe) Reset() { *m = Pipe{} } func (m *Pipe) String() string { return proto.CompactTextString(m) } func (*Pipe) ProtoMessage() {} func (*Pipe) Descriptor() ([]byte, []int) { - return fileDescriptor_address_8b64fe4d7f540fd7, []int{0} + return fileDescriptor_address_620f812a25aa7f86, []int{0} } func (m *Pipe) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -137,7 +137,7 @@ func (m *SocketAddress) Reset() { *m = SocketAddress{} } func (m *SocketAddress) String() string { return proto.CompactTextString(m) } func (*SocketAddress) ProtoMessage() {} func (*SocketAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_address_8b64fe4d7f540fd7, []int{1} + return fileDescriptor_address_620f812a25aa7f86, []int{1} } func (m *SocketAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -318,7 +318,7 @@ func (m *TcpKeepalive) Reset() { *m = TcpKeepalive{} } func (m *TcpKeepalive) String() string { return proto.CompactTextString(m) } func (*TcpKeepalive) ProtoMessage() {} func (*TcpKeepalive) Descriptor() ([]byte, []int) { - return fileDescriptor_address_8b64fe4d7f540fd7, []int{2} + return fileDescriptor_address_620f812a25aa7f86, []int{2} } func (m *TcpKeepalive) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -391,7 +391,7 @@ func (m *BindConfig) Reset() { *m = BindConfig{} } func (m *BindConfig) String() string { return proto.CompactTextString(m) } func (*BindConfig) ProtoMessage() {} func (*BindConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_address_8b64fe4d7f540fd7, []int{3} + return fileDescriptor_address_620f812a25aa7f86, []int{3} } func (m *BindConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -458,7 +458,7 @@ func (m *Address) Reset() { *m = Address{} } func (m *Address) String() string { return proto.CompactTextString(m) } func (*Address) ProtoMessage() {} func (*Address) Descriptor() ([]byte, []int) { - return fileDescriptor_address_8b64fe4d7f540fd7, []int{4} + return fileDescriptor_address_620f812a25aa7f86, []int{4} } func (m *Address) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -615,7 +615,7 @@ func (m *CidrRange) Reset() { *m = CidrRange{} } func (m *CidrRange) String() string { return proto.CompactTextString(m) } func (*CidrRange) ProtoMessage() {} func (*CidrRange) Descriptor() ([]byte, []int) { - return fileDescriptor_address_8b64fe4d7f540fd7, []int{5} + return fileDescriptor_address_620f812a25aa7f86, []int{5} } func (m *CidrRange) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2360,53 +2360,53 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/core/address.proto", fileDescriptor_address_8b64fe4d7f540fd7) -} - -var fileDescriptor_address_8b64fe4d7f540fd7 = []byte{ - // 691 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0xc1, 0x6e, 0x13, 0x3b, - 0x14, 0x8d, 0x33, 0x69, 0x9b, 0xdc, 0x34, 0x79, 0xa9, 0xf5, 0xa4, 0x8e, 0xa2, 0xbe, 0x24, 0x4a, - 0xf5, 0xa4, 0x50, 0xc1, 0x0c, 0x4a, 0x11, 0x7b, 0x26, 0x88, 0xb6, 0x2a, 0x82, 0x30, 0xb4, 0xb0, - 0x1c, 0x39, 0x89, 0x13, 0xac, 0x4e, 0xc6, 0x96, 0x67, 0x3a, 0xc0, 0x0e, 0xb1, 0x40, 0x88, 0x3d, - 0x5f, 0xc0, 0x86, 0x4f, 0x40, 0xac, 0xba, 0xec, 0x92, 0x2d, 0x1b, 0x84, 0x22, 0xb1, 0xe8, 0x57, - 0x14, 0xd9, 0x33, 0x93, 0x0a, 0x02, 0x2a, 0xec, 0xec, 0x73, 0xcf, 0x39, 0x3e, 0xd7, 0xbe, 0x86, - 0x26, 0x0d, 0x62, 0xfe, 0xdc, 0x26, 0x82, 0xd9, 0x71, 0xd7, 0x1e, 0x72, 0x49, 0x6d, 0x32, 0x1a, - 0x49, 0x1a, 0x86, 0x96, 0x90, 0x3c, 0xe2, 0x78, 0x4d, 0x13, 0x2c, 0x22, 0x98, 0x15, 0x77, 0x2d, - 0x45, 0xa8, 0x6f, 0x2c, 0x6a, 0x06, 0x24, 0xa4, 0x89, 0xa0, 0xde, 0x98, 0x70, 0x3e, 0xf1, 0xa9, - 0xad, 0x77, 0x83, 0xe3, 0xb1, 0xfd, 0x54, 0x12, 0x21, 0xa8, 0x4c, 0x0d, 0xeb, 0xeb, 0x31, 0xf1, - 0xd9, 0x88, 0x44, 0xd4, 0xce, 0x16, 0x69, 0xe1, 0xdf, 0x09, 0x9f, 0x70, 0xbd, 0xb4, 0xd5, 0x2a, - 0x41, 0xdb, 0xff, 0x43, 0xa1, 0xcf, 0x04, 0xc5, 0xff, 0x41, 0x41, 0x90, 0xe8, 0x89, 0x89, 0x5a, - 0xa8, 0x53, 0x72, 0x4a, 0x1f, 0xcf, 0x4e, 0x8c, 0x82, 0xcc, 0xb7, 0x90, 0xab, 0xe1, 0xf6, 0xe7, - 0x3c, 0x54, 0x1e, 0xf2, 0xe1, 0x11, 0x8d, 0x6e, 0x25, 0xf1, 0xf1, 0x03, 0x28, 0x6a, 0x87, 0x21, - 0xf7, 0xb5, 0xa8, 0xda, 0xbd, 0x62, 0x2d, 0xf4, 0x62, 0xfd, 0xa0, 0xb1, 0xfa, 0xa9, 0xc0, 0x01, - 0xe5, 0xbf, 0xf4, 0x12, 0xe5, 0x6b, 0xc8, 0x9d, 0xdb, 0xe0, 0x4d, 0x58, 0x49, 0x2f, 0xc7, 0xcc, - 0xff, 0x1c, 0x23, 0xab, 0xe0, 0xab, 0x00, 0x82, 0xcb, 0xc8, 0x8b, 0x89, 0x7f, 0x4c, 0x4d, 0xa3, - 0x85, 0x3a, 0x15, 0xa7, 0xac, 0x78, 0xcb, 0x5b, 0x05, 0xf3, 0xfc, 0xdc, 0xd8, 0xcd, 0xb9, 0x25, - 0x45, 0x78, 0xa4, 0xea, 0xb8, 0x09, 0x10, 0x90, 0x29, 0x1d, 0x79, 0x0a, 0x32, 0x0b, 0xca, 0x55, - 0x11, 0x34, 0xd6, 0xe7, 0x32, 0xc2, 0x9b, 0x50, 0x91, 0x34, 0xe4, 0x7e, 0x4c, 0xa5, 0xa7, 0x50, - 0x73, 0x49, 0x71, 0xdc, 0xd5, 0x0c, 0xbc, 0x47, 0xa6, 0xca, 0xa5, 0xcc, 0x44, 0x7c, 0xc3, 0x1b, - 0xf2, 0xa9, 0x20, 0x91, 0xb9, 0xdc, 0x42, 0x9d, 0xa2, 0x0b, 0x0a, 0xea, 0x69, 0xa4, 0xdd, 0x86, - 0x62, 0xd6, 0x1b, 0x5e, 0x01, 0xe3, 0xa0, 0xd7, 0xaf, 0xe5, 0xd4, 0xe2, 0xf0, 0x76, 0xbf, 0x86, - 0xea, 0x85, 0xd7, 0xef, 0x1a, 0x39, 0x67, 0x1d, 0xaa, 0x3a, 0x78, 0x28, 0xe8, 0x90, 0x8d, 0x19, - 0x95, 0x78, 0xe9, 0xc3, 0xd9, 0x89, 0x81, 0xda, 0x67, 0x08, 0x56, 0x0f, 0x86, 0x62, 0x9f, 0x52, - 0x41, 0x7c, 0x16, 0x53, 0xbc, 0x03, 0xb5, 0xa3, 0x6c, 0xe3, 0x09, 0xc9, 0x07, 0x34, 0xd4, 0x57, - 0x5c, 0xee, 0x6e, 0x58, 0xc9, 0xeb, 0x5b, 0xd9, 0xeb, 0x5b, 0x87, 0x7b, 0x41, 0xb4, 0xdd, 0xd5, - 0xcd, 0xba, 0xff, 0xcc, 0x55, 0x7d, 0x2d, 0xc2, 0x3d, 0xa8, 0x5e, 0x18, 0x45, 0x6c, 0x4a, 0xf5, - 0xbd, 0x5e, 0x66, 0x53, 0x99, 0x6b, 0x0e, 0xd8, 0x94, 0xe2, 0x7d, 0xc0, 0x17, 0x26, 0x2c, 0x88, - 0xa8, 0x8c, 0x89, 0xaf, 0x2f, 0xfe, 0x32, 0xa3, 0xb5, 0xb9, 0x6e, 0x2f, 0x95, 0xb5, 0xbf, 0x21, - 0x00, 0x87, 0x05, 0xa3, 0x1e, 0x0f, 0xc6, 0x6c, 0x82, 0x1f, 0x43, 0x35, 0xe4, 0xc7, 0x72, 0x48, - 0xbd, 0xec, 0xe1, 0x93, 0x3e, 0x5b, 0x97, 0x8d, 0x92, 0x53, 0x3d, 0xfd, 0xd2, 0xcc, 0xe9, 0x29, - 0x7a, 0xa3, 0xa7, 0xa8, 0x92, 0xf8, 0x64, 0xd3, 0x79, 0x13, 0x8a, 0x63, 0x49, 0xe9, 0x80, 0x05, - 0xa3, 0xb4, 0xe7, 0xfa, 0x42, 0x54, 0x87, 0x73, 0x3f, 0x09, 0x3a, 0xe7, 0xe2, 0x3b, 0x2a, 0x90, - 0x3a, 0xc7, 0xe3, 0x22, 0x62, 0x3c, 0x08, 0x4d, 0xa3, 0x65, 0x74, 0xca, 0xdd, 0xe6, 0x6f, 0x03, - 0xdd, 0xd7, 0x3c, 0x75, 0xfe, 0xc5, 0x2e, 0x6c, 0xbf, 0x45, 0xb0, 0x92, 0x65, 0xd9, 0x9b, 0x7b, - 0xfe, 0x65, 0x93, 0xbb, 0xb9, 0xcc, 0x36, 0xb3, 0xba, 0x06, 0x05, 0xc1, 0x44, 0xf6, 0x8c, 0xeb, - 0xbf, 0x30, 0x50, 0x9f, 0x79, 0x37, 0xe7, 0x6a, 0x9a, 0x53, 0x9b, 0x7f, 0xa8, 0x6c, 0xd6, 0x5e, - 0x21, 0x28, 0xf5, 0xd8, 0x48, 0xba, 0x24, 0x98, 0x50, 0x7c, 0x1d, 0xaa, 0x69, 0xdd, 0x13, 0x92, - 0x8e, 0xd9, 0xb3, 0xc5, 0xef, 0x5f, 0x49, 0x09, 0x7d, 0x5d, 0xc7, 0x3b, 0x00, 0x09, 0xd3, 0xf3, - 0x69, 0xf0, 0x27, 0xd3, 0x94, 0x7e, 0xf5, 0x2d, 0xc3, 0x7c, 0x81, 0xdc, 0x52, 0xa2, 0xbd, 0x4b, - 0x03, 0xa7, 0xf6, 0x7e, 0xd6, 0x40, 0xa7, 0xb3, 0x06, 0xfa, 0x34, 0x6b, 0xa0, 0xaf, 0xb3, 0x06, - 0x1a, 0x2c, 0x6b, 0xf9, 0xf6, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x27, 0x78, 0x14, 0x9e, 0x33, - 0x05, 0x00, 0x00, + proto.RegisterFile("envoy/api/v2/core/address.proto", fileDescriptor_address_620f812a25aa7f86) +} + +var fileDescriptor_address_620f812a25aa7f86 = []byte{ + // 701 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x41, 0x6f, 0xd3, 0x30, + 0x18, 0xad, 0x9b, 0x6e, 0x6b, 0xbf, 0xae, 0xa5, 0xb3, 0x90, 0x16, 0x55, 0xa3, 0xad, 0x3a, 0x21, + 0x95, 0x09, 0x12, 0xd4, 0x21, 0xee, 0xa4, 0x88, 0x6d, 0x1a, 0x82, 0x10, 0x36, 0x38, 0x46, 0x69, + 0xeb, 0x16, 0x6b, 0x69, 0x6c, 0x39, 0x59, 0xd8, 0x6e, 0x88, 0x03, 0x42, 0xdc, 0xf9, 0x05, 0x5c, + 0xf8, 0x09, 0x88, 0xd3, 0x8e, 0x3b, 0x72, 0xe5, 0x82, 0x50, 0x25, 0x0e, 0xfb, 0x15, 0x43, 0x76, + 0x92, 0x4e, 0x50, 0xd0, 0xe0, 0x66, 0x7f, 0xdf, 0x7b, 0xcf, 0xef, 0xd9, 0x9f, 0xa1, 0x49, 0x82, + 0x98, 0x1d, 0x9b, 0x1e, 0xa7, 0x66, 0xdc, 0x35, 0x07, 0x4c, 0x10, 0xd3, 0x1b, 0x0e, 0x05, 0x09, + 0x43, 0x83, 0x0b, 0x16, 0x31, 0xbc, 0xa2, 0x00, 0x86, 0xc7, 0xa9, 0x11, 0x77, 0x0d, 0x09, 0xa8, + 0xaf, 0xcd, 0x73, 0xfa, 0x5e, 0x48, 0x12, 0x42, 0xbd, 0x31, 0x66, 0x6c, 0xec, 0x13, 0x53, 0xed, + 0xfa, 0x87, 0x23, 0xf3, 0xa5, 0xf0, 0x38, 0x27, 0x22, 0x15, 0xac, 0xaf, 0xc6, 0x9e, 0x4f, 0x87, + 0x5e, 0x44, 0xcc, 0x6c, 0x91, 0x36, 0xae, 0x8e, 0xd9, 0x98, 0xa9, 0xa5, 0x29, 0x57, 0x49, 0xb5, + 0x7d, 0x1d, 0x0a, 0x36, 0xe5, 0x04, 0x5f, 0x83, 0x02, 0xf7, 0xa2, 0x17, 0x3a, 0x6a, 0xa1, 0x4e, + 0xc9, 0x2a, 0x7d, 0x3e, 0x3b, 0xd1, 0x0a, 0x22, 0xdf, 0x42, 0x8e, 0x2a, 0xb7, 0xbf, 0xe6, 0xa1, + 0xf2, 0x94, 0x0d, 0x0e, 0x48, 0x74, 0x2f, 0xb1, 0x8f, 0x9f, 0x40, 0x51, 0x29, 0x0c, 0x98, 0xaf, + 0x48, 0xd5, 0xee, 0x0d, 0x63, 0x2e, 0x8b, 0xf1, 0x0b, 0xc7, 0xb0, 0x53, 0x82, 0x05, 0x52, 0x7f, + 0xe1, 0x35, 0xca, 0xd7, 0x90, 0x33, 0x93, 0xc1, 0xeb, 0xb0, 0x94, 0x5e, 0x8e, 0x9e, 0xff, 0xdd, + 0x46, 0xd6, 0xc1, 0x37, 0x01, 0x38, 0x13, 0x91, 0x1b, 0x7b, 0xfe, 0x21, 0xd1, 0xb5, 0x16, 0xea, + 0x54, 0xac, 0xb2, 0xc4, 0x2d, 0x6e, 0x14, 0xf4, 0xf3, 0x73, 0x6d, 0x3b, 0xe7, 0x94, 0x24, 0xe0, + 0x99, 0xec, 0xe3, 0x26, 0x40, 0xe0, 0x4d, 0xc8, 0xd0, 0x95, 0x25, 0xbd, 0x20, 0x55, 0x25, 0x40, + 0xd5, 0x6c, 0x26, 0x22, 0xbc, 0x0e, 0x15, 0x41, 0x42, 0xe6, 0xc7, 0x44, 0xb8, 0xb2, 0xaa, 0x2f, + 0x48, 0x8c, 0xb3, 0x9c, 0x15, 0x1f, 0x79, 0x13, 0xa9, 0x52, 0xa6, 0x3c, 0xbe, 0xe3, 0x0e, 0xd8, + 0x84, 0x7b, 0x91, 0xbe, 0xd8, 0x42, 0x9d, 0xa2, 0x03, 0xb2, 0xd4, 0x53, 0x95, 0x76, 0x1b, 0x8a, + 0x59, 0x36, 0xbc, 0x04, 0xda, 0x5e, 0xcf, 0xae, 0xe5, 0xe4, 0x62, 0xff, 0xbe, 0x5d, 0x43, 0xf5, + 0xc2, 0xdb, 0x0f, 0x8d, 0x9c, 0xb5, 0x0a, 0x55, 0x65, 0x3c, 0xe4, 0x64, 0x40, 0x47, 0x94, 0x08, + 0xbc, 0xf0, 0xe9, 0xec, 0x44, 0x43, 0xed, 0x33, 0x04, 0xcb, 0x7b, 0x03, 0xbe, 0x4b, 0x08, 0xf7, + 0x7c, 0x1a, 0x13, 0xbc, 0x05, 0xb5, 0x83, 0x6c, 0xe3, 0x72, 0xc1, 0xfa, 0x24, 0x54, 0x57, 0x5c, + 0xee, 0xae, 0x19, 0xc9, 0xeb, 0x1b, 0xd9, 0xeb, 0x1b, 0xfb, 0x3b, 0x41, 0xb4, 0xd9, 0x55, 0x61, + 0x9d, 0x2b, 0x33, 0x96, 0xad, 0x48, 0xb8, 0x07, 0xd5, 0x0b, 0xa1, 0x88, 0x4e, 0x88, 0xba, 0xd7, + 0xcb, 0x64, 0x2a, 0x33, 0xce, 0x1e, 0x9d, 0x10, 0xbc, 0x0b, 0xf8, 0x42, 0x84, 0x06, 0x11, 0x11, + 0xb1, 0xe7, 0xab, 0x8b, 0xbf, 0x4c, 0x68, 0x65, 0xc6, 0xdb, 0x49, 0x69, 0xed, 0x1f, 0x08, 0xc0, + 0xa2, 0xc1, 0xb0, 0xc7, 0x82, 0x11, 0x1d, 0xe3, 0xe7, 0x50, 0x0d, 0xd9, 0xa1, 0x18, 0x10, 0x37, + 0x7b, 0xf8, 0x24, 0x67, 0xeb, 0xb2, 0x51, 0xb2, 0xaa, 0xa7, 0xdf, 0x9a, 0x39, 0x35, 0x45, 0xef, + 0xd4, 0x14, 0x55, 0x12, 0x9d, 0x6c, 0x3a, 0xef, 0x42, 0x71, 0x24, 0x08, 0xe9, 0xd3, 0x60, 0x98, + 0x66, 0xae, 0xcf, 0x59, 0xb5, 0x18, 0xf3, 0x13, 0xa3, 0x33, 0x2c, 0x7e, 0x20, 0x0d, 0xc9, 0x73, + 0x5c, 0xc6, 0x23, 0xca, 0x82, 0x50, 0xd7, 0x5a, 0x5a, 0xa7, 0xdc, 0x6d, 0xfe, 0xd5, 0xd0, 0x63, + 0x85, 0x93, 0xe7, 0x5f, 0xec, 0xc2, 0xf6, 0x7b, 0x04, 0x4b, 0x99, 0x97, 0x9d, 0x99, 0xe6, 0x7f, + 0x86, 0xdc, 0xce, 0x65, 0xb2, 0x99, 0xd4, 0x2d, 0x28, 0x70, 0xca, 0xb3, 0x67, 0x5c, 0xfd, 0x83, + 0x80, 0xfc, 0xcc, 0xdb, 0x39, 0x47, 0xc1, 0xac, 0xda, 0xec, 0x43, 0x65, 0xb3, 0xf6, 0x06, 0x41, + 0xa9, 0x47, 0x87, 0xc2, 0xf1, 0x82, 0x31, 0xc1, 0xb7, 0xa1, 0x9a, 0xf6, 0x5d, 0x2e, 0xc8, 0x88, + 0x1e, 0xcd, 0x7f, 0xff, 0x4a, 0x0a, 0xb0, 0x55, 0x1f, 0x6f, 0x01, 0x24, 0x48, 0xd7, 0x27, 0xc1, + 0xbf, 0x4c, 0x53, 0xfa, 0xd5, 0x37, 0x34, 0xfd, 0x15, 0x72, 0x4a, 0x09, 0xf7, 0x21, 0x09, 0xac, + 0xcd, 0x8f, 0xd3, 0x06, 0x3a, 0x9d, 0x36, 0xd0, 0x97, 0x69, 0x03, 0x7d, 0x9f, 0x36, 0x10, 0x34, + 0x29, 0x4b, 0xf2, 0x70, 0xc1, 0x8e, 0x8e, 0xe7, 0xa3, 0xd9, 0xa8, 0xbf, 0xa8, 0x4e, 0xd8, 0xfc, + 0x19, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x2e, 0xc3, 0xce, 0x56, 0x05, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.go index 472a76f19555..6347cc7da439 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.go @@ -53,7 +53,7 @@ func (x RoutingPriority) String() string { return proto.EnumName(RoutingPriority_name, int32(x)) } func (RoutingPriority) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{0} + return fileDescriptor_base_419cdaccf481f7c3, []int{0} } // HTTP request method. @@ -98,7 +98,7 @@ func (x RequestMethod) String() string { return proto.EnumName(RequestMethod_name, int32(x)) } func (RequestMethod) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{1} + return fileDescriptor_base_419cdaccf481f7c3, []int{1} } type SocketOption_SocketState int32 @@ -127,7 +127,7 @@ func (x SocketOption_SocketState) String() string { return proto.EnumName(SocketOption_SocketState_name, int32(x)) } func (SocketOption_SocketState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{8, 0} + return fileDescriptor_base_419cdaccf481f7c3, []int{8, 0} } // Identifies location of where either Envoy runs or where upstream hosts run. @@ -156,7 +156,7 @@ func (m *Locality) Reset() { *m = Locality{} } func (m *Locality) String() string { return proto.CompactTextString(m) } func (*Locality) ProtoMessage() {} func (*Locality) Descriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{0} + return fileDescriptor_base_419cdaccf481f7c3, []int{0} } func (m *Locality) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -247,7 +247,7 @@ func (m *Node) Reset() { *m = Node{} } func (m *Node) String() string { return proto.CompactTextString(m) } func (*Node) ProtoMessage() {} func (*Node) Descriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{1} + return fileDescriptor_base_419cdaccf481f7c3, []int{1} } func (m *Node) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -345,7 +345,7 @@ func (m *Metadata) Reset() { *m = Metadata{} } func (m *Metadata) String() string { return proto.CompactTextString(m) } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{2} + return fileDescriptor_base_419cdaccf481f7c3, []int{2} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -396,7 +396,7 @@ func (m *RuntimeUInt32) Reset() { *m = RuntimeUInt32{} } func (m *RuntimeUInt32) String() string { return proto.CompactTextString(m) } func (*RuntimeUInt32) ProtoMessage() {} func (*RuntimeUInt32) Descriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{3} + return fileDescriptor_base_419cdaccf481f7c3, []int{3} } func (m *RuntimeUInt32) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -458,7 +458,7 @@ func (m *HeaderValue) Reset() { *m = HeaderValue{} } func (m *HeaderValue) String() string { return proto.CompactTextString(m) } func (*HeaderValue) ProtoMessage() {} func (*HeaderValue) Descriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{4} + return fileDescriptor_base_419cdaccf481f7c3, []int{4} } func (m *HeaderValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -517,7 +517,7 @@ func (m *HeaderValueOption) Reset() { *m = HeaderValueOption{} } func (m *HeaderValueOption) String() string { return proto.CompactTextString(m) } func (*HeaderValueOption) ProtoMessage() {} func (*HeaderValueOption) Descriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{5} + return fileDescriptor_base_419cdaccf481f7c3, []int{5} } func (m *HeaderValueOption) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -576,7 +576,7 @@ func (m *DataSource) Reset() { *m = DataSource{} } func (m *DataSource) String() string { return proto.CompactTextString(m) } func (*DataSource) ProtoMessage() {} func (*DataSource) Descriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{6} + return fileDescriptor_base_419cdaccf481f7c3, []int{6} } func (m *DataSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -759,7 +759,7 @@ func (m *TransportSocket) Reset() { *m = TransportSocket{} } func (m *TransportSocket) String() string { return proto.CompactTextString(m) } func (*TransportSocket) ProtoMessage() {} func (*TransportSocket) Descriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{7} + return fileDescriptor_base_419cdaccf481f7c3, []int{7} } func (m *TransportSocket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -933,7 +933,7 @@ func (m *SocketOption) Reset() { *m = SocketOption{} } func (m *SocketOption) String() string { return proto.CompactTextString(m) } func (*SocketOption) ProtoMessage() {} func (*SocketOption) Descriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{8} + return fileDescriptor_base_419cdaccf481f7c3, []int{8} } func (m *SocketOption) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1109,7 +1109,7 @@ func (m *RuntimeFractionalPercent) Reset() { *m = RuntimeFractionalPerce func (m *RuntimeFractionalPercent) String() string { return proto.CompactTextString(m) } func (*RuntimeFractionalPercent) ProtoMessage() {} func (*RuntimeFractionalPercent) Descriptor() ([]byte, []int) { - return fileDescriptor_base_30add123ac7b426a, []int{9} + return fileDescriptor_base_419cdaccf481f7c3, []int{9} } func (m *RuntimeFractionalPercent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3996,77 +3996,78 @@ var ( ErrIntOverflowBase = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("envoy/api/v2/core/base.proto", fileDescriptor_base_30add123ac7b426a) } - -var fileDescriptor_base_30add123ac7b426a = []byte{ - // 1092 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x4b, 0x6f, 0x23, 0x45, - 0x10, 0x76, 0xfb, 0x15, 0xbb, 0xc6, 0x4e, 0x66, 0x7b, 0xa3, 0xac, 0x37, 0x6c, 0xbc, 0xc1, 0x1c, - 0x88, 0x82, 0x18, 0x83, 0x73, 0xe0, 0x71, 0xcb, 0xc4, 0x93, 0xd8, 0x22, 0xb1, 0xbd, 0xe3, 0xc9, - 0x82, 0x72, 0x31, 0x63, 0x4f, 0xdb, 0x3b, 0xda, 0xc9, 0x8c, 0xe9, 0xe9, 0x31, 0xf2, 0x9e, 0x56, - 0x88, 0x03, 0x62, 0x7f, 0x06, 0x17, 0x24, 0xc4, 0x1d, 0x71, 0x8a, 0xc4, 0x85, 0x1b, 0xfc, 0x04, - 0x94, 0xdb, 0xfe, 0x0b, 0xd4, 0x0f, 0x27, 0xce, 0x43, 0x70, 0xeb, 0xfe, 0xea, 0xfb, 0xaa, 0xab, - 0xaa, 0xab, 0x0a, 0x9e, 0x90, 0x70, 0x16, 0xcd, 0xeb, 0xee, 0xd4, 0xaf, 0xcf, 0x1a, 0xf5, 0x51, - 0x44, 0x49, 0x7d, 0xe8, 0xc6, 0xc4, 0x98, 0xd2, 0x88, 0x45, 0xf8, 0x81, 0xb0, 0x1a, 0xee, 0xd4, - 0x37, 0x66, 0x0d, 0x83, 0x5b, 0x37, 0x1f, 0x4f, 0xa2, 0x68, 0x12, 0x90, 0xba, 0x20, 0x0c, 0x93, - 0x71, 0xdd, 0x0d, 0xe7, 0x92, 0xbd, 0xf9, 0xe4, 0xb6, 0x29, 0x66, 0x34, 0x19, 0x31, 0x65, 0xad, - 0xde, 0xb6, 0x7e, 0x4b, 0xdd, 0xe9, 0x94, 0xd0, 0x58, 0xd9, 0x1f, 0xcd, 0xdc, 0xc0, 0xf7, 0x5c, - 0x46, 0xea, 0x8b, 0x83, 0x32, 0xac, 0x4f, 0xa2, 0x49, 0x24, 0x8e, 0x75, 0x7e, 0x52, 0x68, 0x45, - 0x06, 0xce, 0xe6, 0x53, 0x52, 0x9f, 0x12, 0x3a, 0x22, 0xa1, 0x7a, 0xa8, 0xf6, 0x0c, 0x0a, 0xc7, - 0xd1, 0xc8, 0x0d, 0x7c, 0x36, 0xc7, 0x1b, 0x90, 0xa7, 0x64, 0xe2, 0x47, 0x61, 0x05, 0x6d, 0xa3, - 0x9d, 0xa2, 0xad, 0x6e, 0x18, 0x43, 0xf6, 0x55, 0x14, 0x92, 0x4a, 0x5a, 0xa0, 0xe2, 0x8c, 0x1f, - 0x43, 0x21, 0x4e, 0x86, 0x03, 0x81, 0x67, 0x04, 0xbe, 0x12, 0x27, 0xc3, 0xb3, 0x28, 0x24, 0xb5, - 0x3f, 0x10, 0x64, 0x3b, 0x91, 0x47, 0xf0, 0x2a, 0xa4, 0x7d, 0x4f, 0xf9, 0x4a, 0xfb, 0x1e, 0xae, - 0xc0, 0xca, 0x28, 0x48, 0x62, 0x46, 0xa8, 0x72, 0xb5, 0xb8, 0xe2, 0x3d, 0x28, 0x9c, 0x13, 0xe6, - 0x7a, 0x2e, 0x73, 0x85, 0x37, 0xad, 0xf1, 0xc8, 0x90, 0x15, 0x30, 0x16, 0x15, 0x30, 0xfa, 0xa2, - 0x3e, 0xf6, 0x15, 0x11, 0x7f, 0x02, 0x85, 0x40, 0x85, 0x5e, 0xc9, 0x0a, 0xd1, 0x3b, 0xc6, 0x9d, - 0x2f, 0x30, 0x16, 0xd9, 0xd9, 0x57, 0x64, 0xfc, 0x1e, 0x94, 0x87, 0x89, 0x1f, 0x78, 0x83, 0x19, - 0xa1, 0x31, 0x4f, 0x37, 0x27, 0xa2, 0x29, 0x09, 0xf0, 0xb9, 0xc4, 0x6a, 0x17, 0x08, 0x0a, 0x27, - 0x8b, 0xa7, 0xbe, 0x82, 0xb5, 0xb1, 0x1f, 0x30, 0x42, 0x07, 0x57, 0x61, 0xa2, 0xed, 0xcc, 0x8e, - 0xd6, 0xa8, 0xdf, 0xf3, 0xe2, 0x42, 0x65, 0x1c, 0x0a, 0xc9, 0xe2, 0x6a, 0x85, 0x8c, 0xce, 0xed, - 0xd5, 0xf1, 0x0d, 0x70, 0xf3, 0x0c, 0x1e, 0xde, 0x43, 0xc3, 0x3a, 0x64, 0x5e, 0x92, 0xb9, 0xaa, - 0x1d, 0x3f, 0xe2, 0x0f, 0x21, 0x37, 0x73, 0x83, 0x44, 0xfe, 0xc2, 0x7f, 0xd4, 0x47, 0xb2, 0x3e, - 0x4f, 0x7f, 0x8a, 0x6a, 0x5f, 0x43, 0xd9, 0x4e, 0x42, 0xe6, 0x9f, 0x93, 0xd3, 0x76, 0xc8, 0xf6, - 0x1a, 0x3c, 0x71, 0x8f, 0x8c, 0xdd, 0x24, 0x60, 0x83, 0x6b, 0x5f, 0x65, 0xbb, 0xa4, 0xc0, 0xe7, - 0x1c, 0xc3, 0xbb, 0xa0, 0x51, 0xa9, 0x1a, 0xf0, 0x10, 0xc4, 0xe7, 0x9a, 0xc5, 0xdf, 0xdf, 0x5e, - 0x64, 0xb2, 0x34, 0xbd, 0x8d, 0x6c, 0x50, 0xd6, 0x2f, 0xc8, 0xbc, 0xf6, 0x0c, 0xb4, 0x16, 0x71, - 0x3d, 0x42, 0xa5, 0xf4, 0xe9, 0x52, 0xd4, 0x66, 0x99, 0x4b, 0x0a, 0x34, 0xbf, 0x8d, 0x76, 0x5e, - 0xbf, 0x46, 0x32, 0x89, 0x77, 0x97, 0x93, 0x28, 0x9a, 0x1a, 0xa7, 0xe4, 0x69, 0x56, 0x10, 0xa4, - 0xa5, 0xf6, 0x06, 0xc1, 0x83, 0x25, 0x9f, 0xdd, 0x29, 0xe3, 0x2d, 0x68, 0x42, 0xfe, 0x85, 0x00, - 0x85, 0x73, 0xad, 0x51, 0xbd, 0xa7, 0xee, 0x4b, 0x2a, 0x13, 0xb8, 0xe7, 0xdc, 0x8f, 0x28, 0xad, - 0x23, 0x5b, 0x29, 0x71, 0x03, 0xf2, 0x7c, 0x86, 0x42, 0x4f, 0x95, 0x70, 0xf3, 0x4e, 0x09, 0xcd, - 0x28, 0x0a, 0x84, 0xde, 0x56, 0xcc, 0xda, 0x2f, 0x08, 0xa0, 0xe9, 0x32, 0xb7, 0x1f, 0x25, 0x74, - 0x44, 0xf0, 0xfb, 0x50, 0x18, 0xfb, 0x01, 0x09, 0xdd, 0x73, 0xa2, 0xb2, 0xbc, 0x2e, 0x4c, 0x2b, - 0x65, 0x5f, 0x19, 0xb1, 0x01, 0x25, 0x3f, 0x0c, 0xfc, 0x90, 0x0c, 0x86, 0x73, 0x46, 0x62, 0xf1, - 0x62, 0x49, 0x91, 0x5f, 0xa5, 0x75, 0x4e, 0xd6, 0x24, 0xc1, 0xe4, 0x76, 0xfc, 0x11, 0x94, 0x15, - 0x3f, 0x66, 0xd4, 0x0f, 0x27, 0x77, 0xca, 0xde, 0x4a, 0xd9, 0xca, 0x63, 0x5f, 0x10, 0x4c, 0x0c, - 0xc5, 0x78, 0x4a, 0x46, 0xfe, 0xd8, 0x27, 0x14, 0xe7, 0x7e, 0x7b, 0x7b, 0x91, 0x41, 0xb5, 0x5f, - 0x11, 0xac, 0x39, 0xd4, 0x0d, 0xe3, 0x69, 0x44, 0x59, 0x3f, 0x1a, 0xbd, 0x24, 0x0c, 0x6f, 0x41, - 0xf6, 0xde, 0x70, 0x6d, 0x01, 0xe3, 0x8f, 0x21, 0x3f, 0x8a, 0xc2, 0xb1, 0x3f, 0xf9, 0x9f, 0xbe, - 0x6a, 0xa5, 0x6c, 0x45, 0xc4, 0x9f, 0x41, 0x89, 0x2f, 0x12, 0x6f, 0xa0, 0x84, 0x72, 0x60, 0xd7, - 0xef, 0x08, 0xf7, 0xc3, 0x39, 0x4f, 0x53, 0x70, 0x0f, 0x04, 0xd5, 0x2c, 0x83, 0x26, 0x45, 0x03, - 0x8e, 0xd6, 0xfe, 0x4a, 0x43, 0x49, 0x86, 0xa9, 0xbe, 0x79, 0x1b, 0x34, 0x8f, 0xc4, 0x23, 0xea, - 0x8b, 0xab, 0x6a, 0xff, 0x65, 0x08, 0xaf, 0x43, 0x2e, 0x20, 0x33, 0x12, 0x88, 0x70, 0x33, 0xb6, - 0xbc, 0xf0, 0x0d, 0x25, 0x92, 0xcc, 0x08, 0x50, 0x66, 0xb6, 0x05, 0x45, 0x3f, 0x5c, 0x34, 0x3a, - 0xdf, 0x0f, 0x19, 0xfe, 0x43, 0x7e, 0xa8, 0xda, 0x7c, 0x0b, 0x8a, 0xc3, 0x64, 0xac, 0xcc, 0x7c, - 0x01, 0x94, 0xb8, 0x79, 0x98, 0x8c, 0xa5, 0xf9, 0x4b, 0xc8, 0xc5, 0xcc, 0x65, 0xa4, 0xc2, 0xfb, - 0x77, 0xb5, 0xf1, 0xc1, 0x3d, 0xfd, 0xb6, 0x1c, 0xb9, 0xba, 0xf4, 0xb9, 0xc4, 0x5c, 0xbf, 0x6e, - 0x3e, 0x71, 0xfa, 0x4e, 0xb4, 0xa1, 0xf4, 0x57, 0x3b, 0x06, 0x6d, 0x89, 0x8b, 0x1f, 0x40, 0xb9, - 0xef, 0xec, 0x3b, 0xd6, 0xa0, 0x67, 0x5b, 0x66, 0xbb, 0xd3, 0xd4, 0x53, 0x78, 0x0d, 0x34, 0x09, - 0x99, 0xdd, 0xd3, 0x4e, 0x53, 0x47, 0xf8, 0x21, 0xac, 0x49, 0xe0, 0xb8, 0xdd, 0x77, 0xac, 0x4e, - 0xbb, 0x73, 0xa4, 0xa7, 0x37, 0xb3, 0x3f, 0xfc, 0x54, 0x4d, 0x99, 0xab, 0x6a, 0xa0, 0x16, 0x1d, - 0xf0, 0x06, 0x41, 0x45, 0xcd, 0xfc, 0x21, 0x75, 0x47, 0x3c, 0x34, 0x37, 0xe8, 0xc9, 0x8d, 0x8f, - 0x3b, 0xb7, 0xc7, 0x5f, 0xce, 0xd2, 0x96, 0xca, 0x8d, 0x7f, 0x89, 0x71, 0x47, 0x75, 0x63, 0x94, - 0x6e, 0x6e, 0x8a, 0xa7, 0x37, 0x37, 0x85, 0xdc, 0xe9, 0x4b, 0xeb, 0x61, 0x77, 0x07, 0xd6, 0xec, - 0x28, 0x61, 0x7e, 0x38, 0xe9, 0x51, 0x3f, 0xa2, 0x7c, 0xf7, 0x6a, 0xb0, 0xd2, 0xb4, 0x0e, 0xf7, - 0x4f, 0x8f, 0x1d, 0x3d, 0x85, 0x0b, 0x90, 0x6d, 0xb5, 0x8f, 0x5a, 0x3a, 0xda, 0xfd, 0x1e, 0x41, - 0xd9, 0x26, 0xdf, 0x24, 0x24, 0x66, 0x27, 0x84, 0xbd, 0x88, 0x3c, 0xbc, 0x01, 0xf8, 0xc4, 0x72, - 0x5a, 0xdd, 0xe6, 0xe0, 0xb4, 0xd3, 0xef, 0x59, 0x07, 0xed, 0xc3, 0xb6, 0xc5, 0xab, 0xb3, 0x02, - 0x99, 0x23, 0xcb, 0xd1, 0x91, 0x10, 0x5b, 0xfb, 0x4d, 0x3d, 0xcd, 0x4f, 0xbd, 0x6e, 0xdf, 0xd1, - 0x33, 0xdc, 0xd8, 0x3b, 0x75, 0xf4, 0x2c, 0x06, 0xc8, 0x37, 0xad, 0x63, 0xcb, 0xb1, 0xf4, 0x1c, - 0x7f, 0xf2, 0xa0, 0xdb, 0xe9, 0x58, 0x07, 0x8e, 0x9e, 0xe7, 0x97, 0x6e, 0xcf, 0x69, 0x77, 0x3b, - 0x7d, 0x7d, 0x05, 0x17, 0x21, 0xe7, 0xd8, 0xfb, 0x07, 0x96, 0x5e, 0x50, 0xe5, 0xdc, 0xf8, 0xf9, - 0xb2, 0x8a, 0xfe, 0xbc, 0xac, 0xa2, 0xbf, 0x2f, 0xab, 0xe8, 0x9f, 0xcb, 0x2a, 0x3a, 0xcb, 0xf2, - 0xaf, 0x1e, 0xe6, 0x45, 0x53, 0xef, 0xfd, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x74, 0xa8, 0x98, 0xf9, - 0x01, 0x08, 0x00, 0x00, +func init() { proto.RegisterFile("envoy/api/v2/core/base.proto", fileDescriptor_base_419cdaccf481f7c3) } + +var fileDescriptor_base_419cdaccf481f7c3 = []byte{ + // 1110 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0xf8, 0x5f, 0xec, 0xb7, 0x76, 0xb2, 0x9d, 0x46, 0xad, 0x1b, 0x1a, 0x37, 0x98, 0x03, + 0x51, 0x11, 0x6b, 0xe4, 0x0a, 0x41, 0xb9, 0x65, 0xe3, 0x4d, 0x6d, 0x91, 0xda, 0xee, 0x7a, 0x53, + 0x50, 0x2f, 0x66, 0xed, 0x1d, 0xbb, 0xab, 0x6e, 0x77, 0xcc, 0xec, 0xac, 0xc1, 0x3d, 0x55, 0x88, + 0x03, 0xa2, 0x1f, 0x83, 0x0b, 0x12, 0x27, 0x6e, 0x88, 0x53, 0x25, 0x2e, 0xdc, 0xe0, 0x23, 0xa0, + 0xdc, 0xfa, 0x2d, 0xd0, 0xfc, 0x71, 0xea, 0xc4, 0x11, 0x9c, 0x76, 0xe6, 0xf7, 0x7e, 0xbf, 0xb7, + 0xef, 0xbd, 0x79, 0xef, 0xc1, 0x6d, 0x12, 0xcf, 0xe9, 0xa2, 0xe1, 0xcf, 0xc2, 0xc6, 0xbc, 0xd9, + 0x18, 0x53, 0x46, 0x1a, 0x23, 0x3f, 0x21, 0xd6, 0x8c, 0x51, 0x4e, 0xf1, 0x35, 0x69, 0xb5, 0xfc, + 0x59, 0x68, 0xcd, 0x9b, 0x96, 0xb0, 0xee, 0xde, 0x9a, 0x52, 0x3a, 0x8d, 0x48, 0x43, 0x12, 0x46, + 0xe9, 0xa4, 0xe1, 0xc7, 0x0b, 0xc5, 0xde, 0xbd, 0x7d, 0xd9, 0x94, 0x70, 0x96, 0x8e, 0xb9, 0xb6, + 0xd6, 0x2e, 0x5b, 0xbf, 0x61, 0xfe, 0x6c, 0x46, 0x58, 0xa2, 0xed, 0x37, 0xe7, 0x7e, 0x14, 0x06, + 0x3e, 0x27, 0x8d, 0xe5, 0x41, 0x1b, 0x76, 0xa6, 0x74, 0x4a, 0xe5, 0xb1, 0x21, 0x4e, 0x1a, 0xad, + 0xaa, 0xc0, 0xf9, 0x62, 0x46, 0x1a, 0x33, 0xc2, 0xc6, 0x24, 0xd6, 0x3f, 0xaa, 0x3f, 0x82, 0xe2, + 0x09, 0x1d, 0xfb, 0x51, 0xc8, 0x17, 0xf8, 0x06, 0x14, 0x18, 0x99, 0x86, 0x34, 0xae, 0xa2, 0x7d, + 0x74, 0x50, 0x72, 0xf5, 0x0d, 0x63, 0xc8, 0xbd, 0xa0, 0x31, 0xa9, 0x66, 0x24, 0x2a, 0xcf, 0xf8, + 0x16, 0x14, 0x93, 0x74, 0x34, 0x94, 0x78, 0x56, 0xe2, 0x9b, 0x49, 0x3a, 0x7a, 0x42, 0x63, 0x52, + 0xff, 0x03, 0x41, 0xae, 0x4b, 0x03, 0x82, 0xb7, 0x20, 0x13, 0x06, 0xda, 0x57, 0x26, 0x0c, 0x70, + 0x15, 0x36, 0xc7, 0x51, 0x9a, 0x70, 0xc2, 0xb4, 0xab, 0xe5, 0x15, 0xdf, 0x83, 0xe2, 0x73, 0xc2, + 0xfd, 0xc0, 0xe7, 0xbe, 0xf4, 0x66, 0x34, 0x6f, 0x5a, 0xaa, 0x02, 0xd6, 0xb2, 0x02, 0xd6, 0x40, + 0xd6, 0xc7, 0x3d, 0x27, 0xe2, 0x4f, 0xa0, 0x18, 0xe9, 0xd0, 0xab, 0x39, 0x29, 0x7a, 0xc7, 0x5a, + 0x7b, 0x02, 0x6b, 0x99, 0x9d, 0x7b, 0x4e, 0xc6, 0xef, 0x41, 0x65, 0x94, 0x86, 0x51, 0x30, 0x9c, + 0x13, 0x96, 0x88, 0x74, 0xf3, 0x32, 0x9a, 0xb2, 0x04, 0x1f, 0x2b, 0xac, 0xfe, 0x1a, 0x41, 0xf1, + 0xe1, 0xf2, 0x57, 0x5f, 0xc2, 0xf6, 0x24, 0x8c, 0x38, 0x61, 0xc3, 0xf3, 0x30, 0xd1, 0x7e, 0xf6, + 0xc0, 0x68, 0x36, 0xae, 0xf8, 0xe3, 0x52, 0x65, 0x1d, 0x4b, 0xc9, 0xf2, 0xea, 0xc4, 0x9c, 0x2d, + 0xdc, 0xad, 0xc9, 0x05, 0x70, 0xf7, 0x09, 0x5c, 0xbf, 0x82, 0x86, 0x4d, 0xc8, 0x3e, 0x23, 0x0b, + 0x5d, 0x3b, 0x71, 0xc4, 0x1f, 0x42, 0x7e, 0xee, 0x47, 0xa9, 0x7a, 0x85, 0xff, 0xa8, 0x8f, 0x62, + 0x7d, 0x96, 0xf9, 0x14, 0xd5, 0xbf, 0x82, 0x8a, 0x9b, 0xc6, 0x3c, 0x7c, 0x4e, 0x4e, 0x3b, 0x31, + 0xbf, 0xd7, 0x14, 0x89, 0x07, 0x64, 0xe2, 0xa7, 0x11, 0x1f, 0xbe, 0xf5, 0x55, 0x71, 0xcb, 0x1a, + 0x7c, 0x2c, 0x30, 0x7c, 0x17, 0x0c, 0xa6, 0x54, 0x43, 0x11, 0x82, 0x7c, 0x5c, 0xbb, 0xf4, 0xfb, + 0x9b, 0xd7, 0xd9, 0x1c, 0xcb, 0xec, 0x23, 0x17, 0xb4, 0xf5, 0x73, 0xb2, 0xa8, 0x3f, 0x02, 0xa3, + 0x4d, 0xfc, 0x80, 0x30, 0x25, 0xbd, 0xb3, 0x12, 0xb5, 0x5d, 0x11, 0x92, 0x22, 0x2b, 0xec, 0xa3, + 0x83, 0x97, 0x2f, 0x91, 0x4a, 0xe2, 0xdd, 0xd5, 0x24, 0x4a, 0xb6, 0x21, 0x28, 0x05, 0x96, 0x93, + 0x04, 0x65, 0xa9, 0xbf, 0x42, 0x70, 0x6d, 0xc5, 0x67, 0x6f, 0xc6, 0x45, 0x0b, 0xda, 0x50, 0x78, + 0x2a, 0x41, 0xe9, 0xdc, 0x68, 0xd6, 0xae, 0xa8, 0xfb, 0x8a, 0xca, 0x06, 0xe1, 0x39, 0xff, 0x23, + 0xca, 0x98, 0xc8, 0xd5, 0x4a, 0xdc, 0x84, 0x82, 0x98, 0xa1, 0x38, 0xd0, 0x25, 0xdc, 0x5d, 0x2b, + 0xa1, 0x4d, 0x69, 0x24, 0xf5, 0xae, 0x66, 0xd6, 0x7f, 0x41, 0x00, 0x2d, 0x9f, 0xfb, 0x03, 0x9a, + 0xb2, 0x31, 0xc1, 0xef, 0x43, 0x71, 0x12, 0x46, 0x24, 0xf6, 0x9f, 0x13, 0x9d, 0xe5, 0xdb, 0xc2, + 0xb4, 0x37, 0xdc, 0x73, 0x23, 0xb6, 0xa0, 0x1c, 0xc6, 0x51, 0x18, 0x93, 0xe1, 0x68, 0xc1, 0x49, + 0x22, 0xff, 0x58, 0xd6, 0xe4, 0x17, 0x19, 0x53, 0x90, 0x0d, 0x45, 0xb0, 0x85, 0x1d, 0x7f, 0x04, + 0x15, 0xcd, 0x4f, 0x38, 0x0b, 0xe3, 0xe9, 0x5a, 0xd9, 0xdb, 0x1b, 0xae, 0xf6, 0x38, 0x90, 0x04, + 0x1b, 0x43, 0x29, 0x99, 0x91, 0x71, 0x38, 0x09, 0x09, 0xc3, 0xf9, 0xdf, 0xde, 0xbc, 0xce, 0xa2, + 0xfa, 0xaf, 0x08, 0xb6, 0x3d, 0xe6, 0xc7, 0xc9, 0x8c, 0x32, 0x3e, 0xa0, 0xe3, 0x67, 0x84, 0xe3, + 0x3d, 0xc8, 0x5d, 0x19, 0xae, 0x2b, 0x61, 0xfc, 0x31, 0x14, 0xc6, 0x34, 0x9e, 0x84, 0xd3, 0xff, + 0xe9, 0x2b, 0x3b, 0x53, 0x15, 0x31, 0x68, 0x32, 0xbe, 0x0f, 0x65, 0xb1, 0x4c, 0x82, 0xa1, 0x16, + 0xab, 0xa1, 0xdd, 0x59, 0x13, 0x1f, 0xc6, 0x0b, 0x91, 0xaa, 0xe4, 0x1e, 0x49, 0xaa, 0x5d, 0x01, + 0x43, 0x89, 0x86, 0x02, 0xad, 0xff, 0x95, 0x81, 0xb2, 0x0a, 0x55, 0x3f, 0xf5, 0x3e, 0x18, 0x01, + 0x49, 0xc6, 0x2c, 0x94, 0x57, 0x3d, 0x02, 0xab, 0x10, 0xde, 0x81, 0x7c, 0x44, 0xe6, 0x24, 0x92, + 0x21, 0x67, 0x5d, 0x75, 0x11, 0x5b, 0x4a, 0x26, 0x9a, 0x95, 0xa0, 0xca, 0x6e, 0x0f, 0x4a, 0x61, + 0xbc, 0x6c, 0x76, 0xb1, 0x23, 0xb2, 0xe2, 0x95, 0xc2, 0x58, 0xb7, 0xfa, 0x1e, 0x94, 0x46, 0xe9, + 0x44, 0x9b, 0xc5, 0x12, 0x28, 0x0b, 0xf3, 0x28, 0x9d, 0x28, 0xf3, 0x17, 0x90, 0x4f, 0xb8, 0xcf, + 0x49, 0x55, 0xf4, 0xf0, 0x56, 0xf3, 0x83, 0x2b, 0x7a, 0x6e, 0x35, 0x72, 0x7d, 0x19, 0x08, 0x89, + 0xbd, 0xf3, 0xb6, 0x01, 0xe5, 0xe9, 0x3b, 0xd9, 0x8a, 0xca, 0x5f, 0xfd, 0x04, 0x8c, 0x15, 0x2e, + 0xbe, 0x06, 0x95, 0x81, 0x77, 0xe8, 0x39, 0xc3, 0xbe, 0xeb, 0xd8, 0x9d, 0x6e, 0xcb, 0xdc, 0xc0, + 0xdb, 0x60, 0x28, 0xc8, 0xee, 0x9d, 0x76, 0x5b, 0x26, 0xc2, 0xd7, 0x61, 0x5b, 0x01, 0x27, 0x9d, + 0x81, 0xe7, 0x74, 0x3b, 0xdd, 0x07, 0x66, 0x66, 0x37, 0xf7, 0xc3, 0x4f, 0xb5, 0x0d, 0x7b, 0x4b, + 0x0f, 0xd5, 0xb2, 0x0b, 0x5e, 0x21, 0xa8, 0xea, 0xb9, 0x3f, 0x66, 0xfe, 0x58, 0x84, 0xe6, 0x47, + 0x7d, 0xb5, 0xf5, 0x71, 0xf7, 0xf2, 0x0a, 0x50, 0xf3, 0xb4, 0xa7, 0x73, 0x13, 0x4f, 0x62, 0xad, + 0xa9, 0x2e, 0x8c, 0xd3, 0xc5, 0x6d, 0x71, 0xe7, 0xe2, 0xb6, 0x50, 0x7b, 0x7d, 0x65, 0x45, 0xdc, + 0x3d, 0x80, 0x6d, 0x97, 0xa6, 0x3c, 0x8c, 0xa7, 0x7d, 0x16, 0x52, 0x26, 0xf6, 0xaf, 0x01, 0x9b, + 0x2d, 0xe7, 0xf8, 0xf0, 0xf4, 0xc4, 0x33, 0x37, 0x70, 0x11, 0x72, 0xed, 0xce, 0x83, 0xb6, 0x89, + 0xee, 0x7e, 0x8f, 0xa0, 0xe2, 0x92, 0xaf, 0x53, 0x92, 0xf0, 0x87, 0x84, 0x3f, 0xa5, 0x01, 0xbe, + 0x01, 0xf8, 0xa1, 0xe3, 0xb5, 0x7b, 0xad, 0xe1, 0x69, 0x77, 0xd0, 0x77, 0x8e, 0x3a, 0xc7, 0x1d, + 0x47, 0x54, 0x67, 0x13, 0xb2, 0x0f, 0x1c, 0xcf, 0x44, 0x52, 0xec, 0x1c, 0xb6, 0xcc, 0x8c, 0x38, + 0xf5, 0x7b, 0x03, 0xcf, 0xcc, 0x0a, 0x63, 0xff, 0xd4, 0x33, 0x73, 0x18, 0xa0, 0xd0, 0x72, 0x4e, + 0x1c, 0xcf, 0x31, 0xf3, 0xe2, 0x97, 0x47, 0xbd, 0x6e, 0xd7, 0x39, 0xf2, 0xcc, 0x82, 0xb8, 0xf4, + 0xfa, 0x5e, 0xa7, 0xd7, 0x1d, 0x98, 0x9b, 0xb8, 0x04, 0x79, 0xcf, 0x3d, 0x3c, 0x72, 0xcc, 0xa2, + 0x2e, 0xe7, 0xfd, 0x9f, 0xcf, 0x6a, 0xe8, 0xcf, 0xb3, 0x1a, 0xfa, 0xfb, 0xac, 0x86, 0xfe, 0x39, + 0xab, 0x21, 0xb8, 0x13, 0x52, 0x55, 0x9e, 0x19, 0xa3, 0xdf, 0x2e, 0xd6, 0xbb, 0xa0, 0x8f, 0x9e, + 0xe4, 0xc4, 0x77, 0x54, 0x90, 0x7d, 0x7f, 0xef, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3f, 0xc4, + 0x88, 0xc8, 0x28, 0x08, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.go index f5e728de31cd..d055de109c06 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.go @@ -34,8 +34,9 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type ApiConfigSource_ApiType int32 const ( - // REST-JSON legacy corresponds to the v1 API. - ApiConfigSource_REST_LEGACY ApiConfigSource_ApiType = 0 // Deprecated: Do not use. + // Ideally this would be 'reserved 0' but one can't reserve the default + // value. Instead we throw an exception if this is ever used. + ApiConfigSource_UNSUPPORTED_REST_LEGACY ApiConfigSource_ApiType = 0 // Deprecated: Do not use. // REST-JSON v2 API. The `canonical JSON encoding // `_ for // the v2 protos is used. @@ -45,28 +46,28 @@ const ( ) var ApiConfigSource_ApiType_name = map[int32]string{ - 0: "REST_LEGACY", + 0: "UNSUPPORTED_REST_LEGACY", 1: "REST", 2: "GRPC", } var ApiConfigSource_ApiType_value = map[string]int32{ - "REST_LEGACY": 0, - "REST": 1, - "GRPC": 2, + "UNSUPPORTED_REST_LEGACY": 0, + "REST": 1, + "GRPC": 2, } func (x ApiConfigSource_ApiType) String() string { return proto.EnumName(ApiConfigSource_ApiType_name, int32(x)) } func (ApiConfigSource_ApiType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_config_source_a5c3a8d06d8a28fe, []int{0, 0} + return fileDescriptor_config_source_02fa607e0a340b5a, []int{0, 0} } // API configuration source. This identifies the API type and cluster that Envoy // will use to fetch an xDS API. type ApiConfigSource struct { ApiType ApiConfigSource_ApiType `protobuf:"varint,1,opt,name=api_type,json=apiType,proto3,enum=envoy.api.v2.core.ApiConfigSource_ApiType" json:"api_type,omitempty"` - // Cluster names should be used only with REST_LEGACY/REST. If > 1 + // Cluster names should be used only with REST. If > 1 // cluster is defined, clusters will be cycled through if any kind of failure // occurs. // @@ -94,7 +95,7 @@ func (m *ApiConfigSource) Reset() { *m = ApiConfigSource{} } func (m *ApiConfigSource) String() string { return proto.CompactTextString(m) } func (*ApiConfigSource) ProtoMessage() {} func (*ApiConfigSource) Descriptor() ([]byte, []int) { - return fileDescriptor_config_source_a5c3a8d06d8a28fe, []int{0} + return fileDescriptor_config_source_02fa607e0a340b5a, []int{0} } func (m *ApiConfigSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -127,7 +128,7 @@ func (m *ApiConfigSource) GetApiType() ApiConfigSource_ApiType { if m != nil { return m.ApiType } - return ApiConfigSource_REST_LEGACY + return ApiConfigSource_UNSUPPORTED_REST_LEGACY } func (m *ApiConfigSource) GetClusterNames() []string { @@ -178,7 +179,7 @@ func (m *AggregatedConfigSource) Reset() { *m = AggregatedConfigSource{} func (m *AggregatedConfigSource) String() string { return proto.CompactTextString(m) } func (*AggregatedConfigSource) ProtoMessage() {} func (*AggregatedConfigSource) Descriptor() ([]byte, []int) { - return fileDescriptor_config_source_a5c3a8d06d8a28fe, []int{1} + return fileDescriptor_config_source_02fa607e0a340b5a, []int{1} } func (m *AggregatedConfigSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -224,7 +225,7 @@ func (m *RateLimitSettings) Reset() { *m = RateLimitSettings{} } func (m *RateLimitSettings) String() string { return proto.CompactTextString(m) } func (*RateLimitSettings) ProtoMessage() {} func (*RateLimitSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_config_source_a5c3a8d06d8a28fe, []int{2} + return fileDescriptor_config_source_02fa607e0a340b5a, []int{2} } func (m *RateLimitSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -288,7 +289,7 @@ func (m *ConfigSource) Reset() { *m = ConfigSource{} } func (m *ConfigSource) String() string { return proto.CompactTextString(m) } func (*ConfigSource) ProtoMessage() {} func (*ConfigSource) Descriptor() ([]byte, []int) { - return fileDescriptor_config_source_a5c3a8d06d8a28fe, []int{3} + return fileDescriptor_config_source_02fa607e0a340b5a, []int{3} } func (m *ConfigSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1684,49 +1685,51 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/core/config_source.proto", fileDescriptor_config_source_a5c3a8d06d8a28fe) -} - -var fileDescriptor_config_source_a5c3a8d06d8a28fe = []byte{ - // 634 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0xb1, 0x6f, 0xd3, 0x4e, - 0x14, 0xce, 0xc5, 0x69, 0x9b, 0x5c, 0xd2, 0xd6, 0xb9, 0x56, 0xbf, 0xfa, 0x57, 0xa1, 0x10, 0x42, - 0x91, 0x42, 0x07, 0x5b, 0x72, 0x47, 0xc4, 0xd0, 0x24, 0x55, 0x8b, 0xa8, 0x50, 0xb9, 0x04, 0x24, - 0x26, 0xeb, 0xea, 0x5c, 0xdc, 0x13, 0x8e, 0xcf, 0xdc, 0x9d, 0x43, 0xb3, 0xf2, 0x57, 0xb0, 0xb0, - 0x23, 0xfe, 0x02, 0xc4, 0xd4, 0x91, 0x91, 0x8d, 0x11, 0x94, 0xad, 0x3b, 0x7f, 0x00, 0x3a, 0xc7, - 0x15, 0x6d, 0x92, 0xaa, 0x9e, 0xde, 0x7b, 0xf7, 0xbe, 0x77, 0xdf, 0xf7, 0xf9, 0x1d, 0x7c, 0x44, - 0xa3, 0x11, 0x1f, 0x3b, 0x24, 0x66, 0xce, 0xc8, 0x75, 0x7c, 0x2e, 0xa8, 0xe3, 0xf3, 0x68, 0xc0, - 0x02, 0x4f, 0xf2, 0x44, 0xf8, 0xd4, 0x8e, 0x05, 0x57, 0x1c, 0x55, 0xd3, 0x36, 0x9b, 0xc4, 0xcc, - 0x1e, 0xb9, 0xb6, 0x6e, 0xdb, 0xde, 0x99, 0x47, 0x06, 0x22, 0xf6, 0x3d, 0x49, 0xc5, 0x88, 0x5d, - 0x01, 0xb7, 0x6b, 0x01, 0xe7, 0x41, 0x48, 0x9d, 0x34, 0x3b, 0x4d, 0x06, 0x4e, 0x3f, 0x11, 0x44, - 0x31, 0x1e, 0xdd, 0x76, 0xfe, 0x5e, 0x90, 0x38, 0xa6, 0x42, 0x66, 0xe7, 0x5b, 0x23, 0x12, 0xb2, - 0x3e, 0x51, 0xd4, 0xb9, 0x0a, 0xb2, 0x83, 0xcd, 0x80, 0x07, 0x3c, 0x0d, 0x1d, 0x1d, 0x4d, 0xab, - 0x8d, 0x3f, 0x06, 0x5c, 0xdf, 0x8f, 0x59, 0x3b, 0x95, 0xd0, 0x4d, 0x15, 0xa0, 0x97, 0xb0, 0x48, - 0x62, 0xe6, 0xa9, 0x71, 0x4c, 0x2d, 0x50, 0x07, 0xcd, 0x35, 0x77, 0xd7, 0x9e, 0x93, 0x63, 0xcf, - 0xa0, 0x74, 0xde, 0x1b, 0xc7, 0xb4, 0x05, 0xbf, 0x5d, 0x5e, 0x18, 0x4b, 0x1f, 0x40, 0xde, 0x04, - 0x78, 0x85, 0x4c, 0x8b, 0xe8, 0x21, 0x5c, 0xf5, 0xc3, 0x44, 0x2a, 0x2a, 0xbc, 0x88, 0x0c, 0xa9, - 0xb4, 0xf2, 0x75, 0xa3, 0x59, 0xc2, 0x95, 0xac, 0xf8, 0x42, 0xd7, 0x50, 0x07, 0xae, 0x0a, 0x3a, - 0x10, 0x54, 0x9e, 0x79, 0x7d, 0x1a, 0x92, 0xb1, 0x65, 0xd4, 0x41, 0xb3, 0xec, 0xfe, 0x6f, 0x4f, - 0x25, 0xdb, 0x57, 0x92, 0xed, 0x4e, 0x66, 0x49, 0xab, 0xf0, 0xf1, 0xd7, 0x7d, 0x80, 0x2b, 0x19, - 0xaa, 0xa3, 0x41, 0xa8, 0x0d, 0x57, 0xaf, 0xdb, 0x2a, 0xad, 0x42, 0xdd, 0x68, 0x96, 0xdd, 0xda, - 0x02, 0x09, 0x87, 0x22, 0xf6, 0xbb, 0xd3, 0x36, 0x5c, 0x09, 0xfe, 0x25, 0x12, 0xf5, 0xe0, 0xba, - 0xa0, 0xef, 0x12, 0x2a, 0x95, 0xa7, 0xd8, 0x90, 0xf2, 0x44, 0x59, 0x4b, 0x77, 0x91, 0x31, 0x35, - 0x19, 0x2d, 0x7e, 0xe5, 0x0b, 0x28, 0xec, 0xe6, 0x8b, 0x39, 0xbc, 0x96, 0xcd, 0xe8, 0x4d, 0x47, - 0xa0, 0x1e, 0xdc, 0x10, 0x44, 0x51, 0x2f, 0x64, 0x43, 0xa6, 0x3c, 0x49, 0x95, 0x62, 0x51, 0x20, - 0xad, 0xe5, 0x74, 0xf2, 0xce, 0x02, 0x82, 0x98, 0x28, 0x7a, 0xac, 0x9b, 0xbb, 0x59, 0x2f, 0xae, - 0x8a, 0xd9, 0x52, 0xc3, 0x85, 0x2b, 0x99, 0xf7, 0x68, 0x03, 0x96, 0xf1, 0x41, 0xb7, 0xe7, 0x1d, - 0x1f, 0x1c, 0xee, 0xb7, 0xdf, 0x98, 0xb9, 0xed, 0x7c, 0x11, 0xa0, 0x22, 0x2c, 0xe8, 0xa2, 0x99, - 0x46, 0x87, 0xf8, 0xa4, 0x6d, 0xe6, 0x1b, 0x16, 0xfc, 0x6f, 0x3f, 0x08, 0x04, 0x0d, 0x88, 0xa2, - 0xfd, 0xeb, 0xbf, 0xb1, 0xf1, 0x09, 0xc0, 0xea, 0xdc, 0xb5, 0xe8, 0x09, 0x84, 0x43, 0x72, 0xee, - 0x29, 0xfe, 0x96, 0x46, 0x32, 0x5d, 0x8a, 0xb2, 0x7b, 0x6f, 0xce, 0x8a, 0x57, 0xcf, 0x22, 0xb5, - 0xe7, 0xbe, 0x26, 0x61, 0x42, 0x71, 0x69, 0x48, 0xce, 0x7b, 0x69, 0x3b, 0x7a, 0x0e, 0x4b, 0x03, - 0x16, 0x86, 0x9e, 0xa6, 0x6e, 0xe5, 0x6f, 0xc1, 0x76, 0x78, 0x72, 0x1a, 0xd2, 0x14, 0xdb, 0x32, - 0xb5, 0x8b, 0x65, 0x54, 0x7a, 0x90, 0xcb, 0x3e, 0x5c, 0xd4, 0x03, 0x34, 0xad, 0xc6, 0x4f, 0x00, - 0x2b, 0x37, 0xb6, 0x75, 0x13, 0x16, 0x62, 0xa2, 0xce, 0x52, 0x52, 0xa5, 0xa3, 0x1c, 0x4e, 0x33, - 0x74, 0x02, 0xab, 0x7a, 0x87, 0x6f, 0x3c, 0xcd, 0xec, 0xee, 0xc6, 0xdd, 0xcb, 0x7c, 0x94, 0xc3, - 0xeb, 0x64, 0xe6, 0x55, 0x3c, 0x85, 0x06, 0xe9, 0xcb, 0x6c, 0x27, 0x1f, 0x2f, 0x9a, 0xb1, 0xd0, - 0xd0, 0xa3, 0x1c, 0xd6, 0xb8, 0x56, 0x1d, 0x6e, 0xdd, 0x20, 0xe3, 0xc9, 0x98, 0xfa, 0x6c, 0xc0, - 0xa8, 0x40, 0x4b, 0x5f, 0x2f, 0x2f, 0x0c, 0xd0, 0x32, 0x3f, 0x4f, 0x6a, 0xe0, 0xfb, 0xa4, 0x06, - 0x7e, 0x4c, 0x6a, 0xe0, 0xf7, 0xa4, 0x06, 0x4e, 0x97, 0x53, 0x77, 0xf6, 0xfe, 0x06, 0x00, 0x00, - 0xff, 0xff, 0x93, 0x06, 0xb8, 0xb2, 0x74, 0x04, 0x00, 0x00, + proto.RegisterFile("envoy/api/v2/core/config_source.proto", fileDescriptor_config_source_02fa607e0a340b5a) +} + +var fileDescriptor_config_source_02fa607e0a340b5a = []byte{ + // 658 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0xc1, 0x4f, 0x13, 0x4f, + 0x14, 0xee, 0xb4, 0x05, 0xda, 0x69, 0x81, 0x76, 0x7e, 0xe4, 0xc7, 0x4a, 0x4c, 0xa9, 0x15, 0x93, + 0xca, 0x61, 0x37, 0x29, 0x47, 0xa3, 0x09, 0x6d, 0x09, 0x18, 0x09, 0xd6, 0x69, 0x31, 0xf1, 0xb4, + 0x19, 0xb6, 0xd3, 0x65, 0xe2, 0x76, 0x67, 0x9c, 0x99, 0xad, 0xf4, 0x66, 0xfc, 0x2b, 0xbc, 0x78, + 0x37, 0xfe, 0x05, 0xc6, 0x13, 0x47, 0x8f, 0xde, 0x3c, 0x6a, 0x7a, 0xe3, 0xbf, 0x30, 0xb3, 0x5d, + 0x22, 0xd0, 0x12, 0xf6, 0xf4, 0xde, 0x9b, 0xf7, 0xbd, 0xf9, 0xbe, 0x6f, 0xdf, 0xc0, 0x47, 0x34, + 0x1c, 0xf1, 0xb1, 0x43, 0x04, 0x73, 0x46, 0x0d, 0xc7, 0xe3, 0x92, 0x3a, 0x1e, 0x0f, 0x07, 0xcc, + 0x77, 0x15, 0x8f, 0xa4, 0x47, 0x6d, 0x21, 0xb9, 0xe6, 0xa8, 0x1c, 0xb7, 0xd9, 0x44, 0x30, 0x7b, + 0xd4, 0xb0, 0x4d, 0xdb, 0xc6, 0xd6, 0x2c, 0xd2, 0x97, 0xc2, 0x73, 0x15, 0x95, 0x23, 0x76, 0x09, + 0xdc, 0xa8, 0xf8, 0x9c, 0xfb, 0x01, 0x75, 0xe2, 0xec, 0x24, 0x1a, 0x38, 0xfd, 0x48, 0x12, 0xcd, + 0x78, 0x78, 0xdb, 0xf9, 0x7b, 0x49, 0x84, 0xa0, 0x52, 0x25, 0xe7, 0xeb, 0x23, 0x12, 0xb0, 0x3e, + 0xd1, 0xd4, 0xb9, 0x0c, 0x92, 0x83, 0x35, 0x9f, 0xfb, 0x3c, 0x0e, 0x1d, 0x13, 0x4d, 0xab, 0xb5, + 0x0f, 0x59, 0xb8, 0xba, 0x2b, 0x58, 0x2b, 0x96, 0xd0, 0x8d, 0x15, 0xa0, 0x57, 0x30, 0x47, 0x04, + 0x73, 0xf5, 0x58, 0x50, 0x0b, 0x54, 0x41, 0x7d, 0xa5, 0xb1, 0x6d, 0xcf, 0xc8, 0xb1, 0x6f, 0xa0, + 0x4c, 0xde, 0x1b, 0x0b, 0xda, 0x84, 0xdf, 0x2f, 0xce, 0x33, 0x0b, 0x1f, 0x41, 0xba, 0x04, 0xf0, + 0x12, 0x99, 0x16, 0xd1, 0x43, 0xb8, 0xec, 0x05, 0x91, 0xd2, 0x54, 0xba, 0x21, 0x19, 0x52, 0x65, + 0xa5, 0xab, 0x99, 0x7a, 0x1e, 0x17, 0x93, 0xe2, 0x91, 0xa9, 0xa1, 0x36, 0x5c, 0x96, 0x74, 0x20, + 0xa9, 0x3a, 0x75, 0xfb, 0x34, 0x20, 0x63, 0x2b, 0x53, 0x05, 0xf5, 0x42, 0xe3, 0x9e, 0x3d, 0x95, + 0x6c, 0x5f, 0x4a, 0xb6, 0xdb, 0x89, 0x25, 0xcd, 0xec, 0xa7, 0xdf, 0x9b, 0x00, 0x17, 0x13, 0x54, + 0xdb, 0x80, 0x50, 0x0b, 0x2e, 0x5f, 0xb5, 0x55, 0x59, 0xd9, 0x6a, 0xa6, 0x5e, 0x68, 0x54, 0xe6, + 0x48, 0xd8, 0x97, 0xc2, 0xeb, 0x4e, 0xdb, 0x70, 0xd1, 0xff, 0x97, 0x28, 0xd4, 0x83, 0xab, 0x92, + 0xbe, 0x8b, 0xa8, 0xd2, 0xae, 0x66, 0x43, 0xca, 0x23, 0x6d, 0x2d, 0xdc, 0x45, 0xa6, 0x64, 0xc8, + 0x18, 0xf1, 0x4b, 0x5f, 0x41, 0x76, 0x3b, 0x9d, 0x4b, 0xe1, 0x95, 0x64, 0x46, 0x6f, 0x3a, 0x02, + 0xf5, 0xe0, 0x7f, 0x92, 0x68, 0xea, 0x06, 0x6c, 0xc8, 0xb4, 0xab, 0xa8, 0xd6, 0x2c, 0xf4, 0x95, + 0xb5, 0x18, 0x4f, 0xde, 0x9a, 0x43, 0x10, 0x13, 0x4d, 0x0f, 0x4d, 0x73, 0x37, 0xe9, 0xc5, 0x65, + 0x79, 0xb3, 0x54, 0x7b, 0x06, 0x97, 0x12, 0xef, 0xd1, 0x26, 0x5c, 0x3f, 0x3e, 0xea, 0x1e, 0x77, + 0x3a, 0x2f, 0x71, 0x6f, 0xaf, 0xed, 0xe2, 0xbd, 0x6e, 0xcf, 0x3d, 0xdc, 0xdb, 0xdf, 0x6d, 0xbd, + 0x29, 0xa5, 0x36, 0xd2, 0x39, 0x80, 0x72, 0x30, 0x6b, 0x8a, 0xa5, 0x38, 0xda, 0xc7, 0x9d, 0x56, + 0x29, 0x5d, 0xb3, 0xe0, 0xff, 0xbb, 0xbe, 0x2f, 0xa9, 0x4f, 0x34, 0xed, 0x5f, 0xfd, 0xa5, 0xb5, + 0xcf, 0x00, 0x96, 0x67, 0x28, 0xa0, 0x27, 0x10, 0x0e, 0xc9, 0x99, 0xab, 0xf9, 0x5b, 0x1a, 0xaa, + 0x78, 0x41, 0x0a, 0x8d, 0xfb, 0x33, 0xb6, 0x1c, 0x3f, 0x0f, 0xf5, 0x4e, 0xe3, 0x35, 0x09, 0x22, + 0x8a, 0xf3, 0x43, 0x72, 0xd6, 0x8b, 0xdb, 0xd1, 0x0b, 0x98, 0x1f, 0xb0, 0x20, 0x70, 0x8d, 0x0c, + 0x2b, 0x7d, 0x0b, 0xb6, 0xcd, 0xa3, 0x93, 0x80, 0xc6, 0xd8, 0x66, 0xc9, 0x38, 0x5a, 0x40, 0xf9, + 0x07, 0xa9, 0xe4, 0xc3, 0x39, 0x33, 0xc0, 0xd0, 0xaa, 0xfd, 0x02, 0xb0, 0x78, 0x6d, 0x73, 0xd7, + 0x60, 0x56, 0x10, 0x7d, 0x1a, 0x93, 0xca, 0x1f, 0xa4, 0x70, 0x9c, 0xa1, 0x0e, 0x2c, 0x9b, 0x7d, + 0xbe, 0xf6, 0x4c, 0x93, 0xbb, 0x6b, 0x77, 0x2f, 0xf6, 0x41, 0x0a, 0xaf, 0x92, 0x1b, 0x2f, 0xe4, + 0x29, 0xcc, 0x90, 0xbe, 0x4a, 0xf6, 0xf3, 0xf1, 0xbc, 0x19, 0x73, 0x0d, 0x3d, 0x48, 0x61, 0x83, + 0x6b, 0x56, 0xe1, 0xfa, 0x35, 0x32, 0xae, 0x12, 0xd4, 0x63, 0x03, 0x46, 0x25, 0x5a, 0xf8, 0x76, + 0x71, 0x9e, 0x01, 0xcd, 0x9d, 0x2f, 0x93, 0x0a, 0xf8, 0x31, 0xa9, 0x80, 0x9f, 0x93, 0x0a, 0xf8, + 0x33, 0xa9, 0x00, 0xb8, 0xc9, 0xf8, 0xf4, 0x1e, 0x21, 0xf9, 0xd9, 0x78, 0xf6, 0xca, 0x0e, 0x38, + 0x59, 0x8c, 0x0d, 0xdc, 0xf9, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x36, 0x54, 0x0e, 0xa3, 0x04, + 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.go index bbef8472789b..6d2b41f3cfa8 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.go @@ -48,7 +48,7 @@ func (m *GrpcService) Reset() { *m = GrpcService{} } func (m *GrpcService) String() string { return proto.CompactTextString(m) } func (*GrpcService) ProtoMessage() {} func (*GrpcService) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_service_d48ceca6bb08a52e, []int{0} + return fileDescriptor_grpc_service_3518abc970ca407e, []int{0} } func (m *GrpcService) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -217,7 +217,7 @@ func (m *GrpcService_EnvoyGrpc) Reset() { *m = GrpcService_EnvoyGrpc{} } func (m *GrpcService_EnvoyGrpc) String() string { return proto.CompactTextString(m) } func (*GrpcService_EnvoyGrpc) ProtoMessage() {} func (*GrpcService_EnvoyGrpc) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_service_d48ceca6bb08a52e, []int{0, 0} + return fileDescriptor_grpc_service_3518abc970ca407e, []int{0, 0} } func (m *GrpcService_EnvoyGrpc) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -289,7 +289,7 @@ func (m *GrpcService_GoogleGrpc) Reset() { *m = GrpcService_GoogleGrpc{} func (m *GrpcService_GoogleGrpc) String() string { return proto.CompactTextString(m) } func (*GrpcService_GoogleGrpc) ProtoMessage() {} func (*GrpcService_GoogleGrpc) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_service_d48ceca6bb08a52e, []int{0, 1} + return fileDescriptor_grpc_service_3518abc970ca407e, []int{0, 1} } func (m *GrpcService_GoogleGrpc) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -377,7 +377,7 @@ func (m *GrpcService_GoogleGrpc_SslCredentials) Reset() { *m = GrpcServi func (m *GrpcService_GoogleGrpc_SslCredentials) String() string { return proto.CompactTextString(m) } func (*GrpcService_GoogleGrpc_SslCredentials) ProtoMessage() {} func (*GrpcService_GoogleGrpc_SslCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_service_d48ceca6bb08a52e, []int{0, 1, 0} + return fileDescriptor_grpc_service_3518abc970ca407e, []int{0, 1, 0} } func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -443,7 +443,7 @@ func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) String() string { } func (*GrpcService_GoogleGrpc_GoogleLocalCredentials) ProtoMessage() {} func (*GrpcService_GoogleGrpc_GoogleLocalCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_service_d48ceca6bb08a52e, []int{0, 1, 1} + return fileDescriptor_grpc_service_3518abc970ca407e, []int{0, 1, 1} } func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -491,7 +491,7 @@ func (m *GrpcService_GoogleGrpc_ChannelCredentials) Reset() { func (m *GrpcService_GoogleGrpc_ChannelCredentials) String() string { return proto.CompactTextString(m) } func (*GrpcService_GoogleGrpc_ChannelCredentials) ProtoMessage() {} func (*GrpcService_GoogleGrpc_ChannelCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_service_d48ceca6bb08a52e, []int{0, 1, 2} + return fileDescriptor_grpc_service_3518abc970ca407e, []int{0, 1, 2} } func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -685,7 +685,7 @@ func (m *GrpcService_GoogleGrpc_CallCredentials) Reset() { func (m *GrpcService_GoogleGrpc_CallCredentials) String() string { return proto.CompactTextString(m) } func (*GrpcService_GoogleGrpc_CallCredentials) ProtoMessage() {} func (*GrpcService_GoogleGrpc_CallCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_service_d48ceca6bb08a52e, []int{0, 1, 3} + return fileDescriptor_grpc_service_3518abc970ca407e, []int{0, 1, 3} } func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -960,7 +960,7 @@ func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentia } func (*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) ProtoMessage() {} func (*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_service_d48ceca6bb08a52e, []int{0, 1, 3, 0} + return fileDescriptor_grpc_service_3518abc970ca407e, []int{0, 1, 3, 0} } func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1019,7 +1019,7 @@ func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) String() s } func (*GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) ProtoMessage() {} func (*GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_service_d48ceca6bb08a52e, []int{0, 1, 3, 1} + return fileDescriptor_grpc_service_3518abc970ca407e, []int{0, 1, 3, 1} } func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1081,7 +1081,7 @@ func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) S } func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) ProtoMessage() {} func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) Descriptor() ([]byte, []int) { - return fileDescriptor_grpc_service_d48ceca6bb08a52e, []int{0, 1, 3, 2} + return fileDescriptor_grpc_service_3518abc970ca407e, []int{0, 1, 3, 2} } func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4352,76 +4352,77 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/core/grpc_service.proto", fileDescriptor_grpc_service_d48ceca6bb08a52e) -} - -var fileDescriptor_grpc_service_d48ceca6bb08a52e = []byte{ - // 1062 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcb, 0x6e, 0x1b, 0x37, - 0x17, 0x96, 0x2c, 0x39, 0x89, 0xce, 0x38, 0xb6, 0x4c, 0xeb, 0xb7, 0xe5, 0xf9, 0x63, 0xc1, 0x48, - 0xbb, 0x70, 0x8b, 0x76, 0x84, 0x2a, 0x5d, 0xc4, 0x40, 0xd0, 0xd6, 0x96, 0x9d, 0xc8, 0xa9, 0x13, - 0x04, 0xa3, 0xb4, 0xd9, 0x14, 0x20, 0x68, 0x8a, 0x92, 0x99, 0x8c, 0x86, 0x03, 0x0e, 0x47, 0xa9, - 0xb2, 0xee, 0x5b, 0xf4, 0x05, 0xba, 0xec, 0xb2, 0xe8, 0x2a, 0xcb, 0xa2, 0xe8, 0xa2, 0x6f, 0xd0, - 0xc2, 0xe8, 0x26, 0x6f, 0x51, 0xf0, 0x22, 0x5b, 0x17, 0x23, 0x72, 0xbd, 0x23, 0xcf, 0x77, 0xbe, - 0x73, 0xf9, 0x48, 0x1e, 0xc2, 0x87, 0x2c, 0x1e, 0x88, 0x61, 0x9d, 0x24, 0xbc, 0x3e, 0x68, 0xd4, - 0xa9, 0x90, 0xac, 0xde, 0x93, 0x09, 0xc5, 0x29, 0x93, 0x03, 0x4e, 0x59, 0x90, 0x48, 0xa1, 0x04, - 0x5a, 0x35, 0x5e, 0x01, 0x49, 0x78, 0x30, 0x68, 0x04, 0xda, 0xcb, 0xbf, 0x33, 0x4b, 0x3c, 0x21, - 0xa9, 0x23, 0xf8, 0x9b, 0x3d, 0x21, 0x7a, 0x11, 0xab, 0x9b, 0xdd, 0x49, 0xd6, 0xad, 0x93, 0x78, - 0xe8, 0xa0, 0xda, 0x34, 0xd4, 0xc9, 0x24, 0x51, 0x5c, 0xc4, 0x0e, 0xbf, 0x33, 0x8d, 0xa7, 0x4a, - 0x66, 0x54, 0x39, 0xf4, 0xff, 0xd3, 0x28, 0xeb, 0x27, 0x6a, 0x14, 0x7a, 0x63, 0x40, 0x22, 0xde, - 0x21, 0x8a, 0xd5, 0x47, 0x0b, 0x07, 0x54, 0x7a, 0xa2, 0x27, 0xcc, 0xb2, 0xae, 0x57, 0xd6, 0x7a, - 0xf7, 0x1f, 0x04, 0xde, 0x23, 0x99, 0xd0, 0xb6, 0xed, 0x15, 0x1d, 0x01, 0x98, 0xa6, 0xb0, 0x56, - 0xa0, 0x9a, 0xdf, 0xce, 0xef, 0x78, 0x8d, 0x9d, 0x60, 0xa6, 0xf5, 0x60, 0x8c, 0x13, 0x1c, 0x6a, - 0x54, 0x1b, 0x5a, 0xb9, 0xb0, 0xc4, 0x46, 0x1b, 0x74, 0x0c, 0x9e, 0x2d, 0xd4, 0xc6, 0x5a, 0x30, - 0xb1, 0x3e, 0x9a, 0x13, 0xeb, 0x91, 0x61, 0xb8, 0x60, 0xd0, 0x3b, 0xdf, 0xa1, 0x7b, 0x70, 0x53, - 0xf1, 0x3e, 0x13, 0x99, 0xaa, 0x16, 0x4c, 0xa4, 0xcd, 0xc0, 0xa2, 0xc1, 0x48, 0x86, 0xe0, 0xc0, - 0x89, 0x18, 0x8e, 0x3c, 0xd1, 0x11, 0x94, 0x79, 0xcc, 0x15, 0x27, 0x11, 0xee, 0x33, 0x45, 0x3a, - 0x44, 0x91, 0xea, 0xe2, 0x76, 0x61, 0xc7, 0x6b, 0xd4, 0x2e, 0xa9, 0xa3, 0xc5, 0x48, 0x87, 0xc9, - 0x6f, 0x49, 0x94, 0xb1, 0x70, 0xc5, 0xf1, 0x9e, 0x38, 0x9a, 0xbf, 0x0b, 0xa5, 0xf3, 0x3e, 0xd1, - 0x27, 0xb0, 0x44, 0xa3, 0x2c, 0x55, 0x4c, 0xe2, 0x98, 0xf4, 0x99, 0xd1, 0xa9, 0xb4, 0x5f, 0xfa, - 0xf5, 0xdd, 0xdb, 0x42, 0x51, 0x2e, 0x6c, 0xe7, 0x43, 0xcf, 0xc1, 0x4f, 0x49, 0x9f, 0xf9, 0x7f, - 0xad, 0x00, 0x5c, 0xf4, 0x85, 0x76, 0x00, 0x14, 0x91, 0x3d, 0xa6, 0x70, 0x26, 0xf9, 0x2c, 0xb5, - 0x64, 0xc1, 0x6f, 0x24, 0x47, 0x7d, 0x58, 0xa3, 0xa7, 0x24, 0x8e, 0x59, 0x84, 0xa9, 0x64, 0x1d, - 0x16, 0xeb, 0x8a, 0x52, 0xa7, 0xe4, 0x83, 0x2b, 0x2b, 0x19, 0x34, 0x6d, 0x90, 0xe6, 0x45, 0x8c, - 0x10, 0xd1, 0x19, 0x1b, 0xea, 0x40, 0x99, 0x92, 0x68, 0x32, 0x57, 0xc1, 0xa8, 0xb5, 0xfb, 0x1f, - 0x72, 0x91, 0x68, 0x22, 0xd1, 0x0a, 0x9d, 0x34, 0xa0, 0x8f, 0xc1, 0x4b, 0x15, 0x51, 0x38, 0x91, - 0xac, 0xcb, 0xbf, 0xaf, 0x16, 0xa7, 0xfb, 0x07, 0x8d, 0x3e, 0x33, 0x20, 0xba, 0x0f, 0xd5, 0xb1, - 0x62, 0x70, 0x97, 0x50, 0x25, 0xe4, 0xd0, 0x6a, 0xbe, 0xa8, 0x89, 0xe1, 0xfa, 0x18, 0xfe, 0xd0, - 0xc2, 0x5a, 0x73, 0x54, 0x87, 0x1b, 0x54, 0xc4, 0x5d, 0xde, 0xab, 0xde, 0x30, 0x6a, 0x6d, 0xcc, - 0xdc, 0x96, 0xb6, 0x79, 0x52, 0xa1, 0x73, 0xf3, 0xff, 0xc8, 0xc3, 0x72, 0x3b, 0x9d, 0xa8, 0xf4, - 0x01, 0x80, 0x14, 0x42, 0x61, 0xca, 0xa4, 0x4a, 0xdd, 0x5b, 0xd8, 0xba, 0x44, 0x89, 0x03, 0xa2, - 0x48, 0x5b, 0x64, 0x92, 0xb2, 0xb0, 0xa4, 0x09, 0x4d, 0xed, 0x8f, 0xbe, 0x00, 0x2f, 0x91, 0x7c, - 0x40, 0x14, 0xc3, 0xaf, 0xd8, 0xd0, 0x1d, 0xda, 0x1c, 0x3a, 0x38, 0xc6, 0xd7, 0x6c, 0xa8, 0xb3, - 0xeb, 0xc4, 0x98, 0x9e, 0x12, 0x1e, 0xbb, 0x3b, 0x3f, 0x2f, 0xbb, 0x26, 0x34, 0xb5, 0xbf, 0x5f, - 0x85, 0x75, 0x7b, 0x28, 0xc7, 0x82, 0x92, 0xf1, 0xae, 0xfc, 0xdf, 0x17, 0x00, 0xcd, 0x5e, 0x08, - 0x44, 0x61, 0x25, 0x4d, 0x27, 0xcf, 0xde, 0x76, 0x7c, 0xff, 0xea, 0x67, 0x3f, 0xa9, 0x5f, 0x2b, - 0x17, 0x2e, 0xa7, 0x93, 0x8a, 0x7e, 0x09, 0xcb, 0x6e, 0x24, 0x74, 0x58, 0x97, 0x64, 0x91, 0x72, - 0xb2, 0xac, 0xcf, 0x9c, 0xce, 0xa1, 0x1e, 0x69, 0xad, 0x5c, 0x78, 0xdb, 0x02, 0x07, 0xd6, 0x1d, - 0x09, 0x58, 0x8d, 0x74, 0x43, 0x53, 0x77, 0x54, 0xc7, 0xf8, 0xea, 0xea, 0x75, 0x5e, 0xae, 0x4c, - 0x2b, 0x17, 0x96, 0xa3, 0x29, 0xdb, 0xfe, 0x16, 0x54, 0x2e, 0x52, 0xe1, 0x34, 0x61, 0x94, 0x77, - 0x39, 0x93, 0x68, 0xf1, 0x97, 0x77, 0x6f, 0x0b, 0x79, 0xff, 0x87, 0x5b, 0xb0, 0x32, 0x75, 0xe3, - 0xd1, 0x07, 0xb0, 0x44, 0x28, 0x65, 0x69, 0x8a, 0x95, 0x78, 0xc5, 0x62, 0xfb, 0xc2, 0x5b, 0xb9, - 0xd0, 0xb3, 0xd6, 0xe7, 0xda, 0x88, 0x8e, 0xe1, 0x7f, 0x4e, 0x09, 0x2a, 0xfa, 0x49, 0xa6, 0x18, - 0x66, 0x71, 0x8f, 0xc7, 0x6c, 0xae, 0x20, 0x6b, 0x16, 0x68, 0x5a, 0xd6, 0xa1, 0x21, 0xa1, 0x06, - 0x54, 0x5c, 0x34, 0xc9, 0xba, 0x92, 0xa5, 0xa7, 0x2e, 0x75, 0xc1, 0xa5, 0x46, 0x16, 0x0d, 0x2d, - 0x68, 0x2b, 0xf8, 0x31, 0x0f, 0xbe, 0xfb, 0xe1, 0x30, 0xa1, 0x54, 0x64, 0xb1, 0xc2, 0x2f, 0x5f, - 0x2b, 0x6c, 0xab, 0x34, 0xef, 0xd2, 0x6b, 0x7c, 0x77, 0xed, 0x87, 0x1f, 0x38, 0x97, 0x3d, 0x1b, - 0xfa, 0xf1, 0x8b, 0xe7, 0x7b, 0x26, 0xf0, 0xa4, 0xe0, 0x1b, 0xe9, 0xa4, 0xd7, 0x6b, 0x65, 0xbd, - 0x90, 0x00, 0x37, 0xfc, 0x31, 0x27, 0x7d, 0xf3, 0xd6, 0xbd, 0xc6, 0xd3, 0xeb, 0x17, 0x63, 0xa1, - 0xa3, 0xbd, 0x27, 0x93, 0xe9, 0x4b, 0x36, 0xc7, 0x11, 0xe9, 0xa3, 0x37, 0xe0, 0x75, 0xa5, 0xe8, - 0xe3, 0x24, 0xca, 0x7a, 0x3c, 0x76, 0x53, 0xe3, 0xc5, 0xf5, 0x33, 0x8e, 0x3e, 0x8e, 0x31, 0xdb, - 0x43, 0x29, 0xfa, 0xcf, 0x4c, 0x78, 0xfd, 0xb7, 0x75, 0xcf, 0x77, 0x7e, 0x06, 0x77, 0xe7, 0xab, - 0x85, 0x36, 0xe1, 0xd6, 0xcb, 0x54, 0xc4, 0x66, 0x9a, 0x98, 0x3b, 0x15, 0xde, 0xd4, 0x7b, 0x3d, - 0x2b, 0x3e, 0x87, 0x75, 0x73, 0xe0, 0x38, 0xe2, 0x5d, 0xa6, 0x3f, 0x3f, 0x9c, 0x32, 0x2a, 0xe2, - 0x8e, 0xfd, 0x2b, 0x8a, 0x61, 0xc5, 0xa0, 0xc7, 0x0e, 0x6c, 0x5b, 0xcc, 0x1f, 0x40, 0xe5, 0x32, - 0x5d, 0x50, 0x1d, 0xd6, 0x48, 0xa6, 0x4e, 0x85, 0xe4, 0x6f, 0xcc, 0x7f, 0x3a, 0x7e, 0x8f, 0x43, - 0x34, 0x01, 0xd9, 0xab, 0xf4, 0x29, 0x8c, 0xac, 0x6a, 0x88, 0x53, 0x16, 0x31, 0x3d, 0x87, 0x4d, - 0xea, 0x52, 0xb8, 0x7a, 0x8e, 0xb4, 0x1d, 0xe0, 0xff, 0x9c, 0x87, 0xad, 0xf7, 0xca, 0x83, 0x10, - 0x14, 0x2f, 0xfe, 0xd5, 0xd0, 0xac, 0xd1, 0x67, 0xe7, 0x13, 0x7d, 0xe1, 0xbd, 0x13, 0xbd, 0x95, - 0x1b, 0xcd, 0x74, 0xb4, 0x0b, 0x4b, 0x6a, 0x98, 0xb0, 0x0e, 0x76, 0x44, 0x3b, 0x28, 0x2a, 0x33, - 0xc4, 0xbd, 0x58, 0xbf, 0x2c, 0xcf, 0xf8, 0x36, 0x8d, 0xeb, 0xfe, 0x6d, 0xf0, 0x2c, 0x09, 0x6b, - 0xeb, 0x9c, 0x31, 0xb0, 0xbf, 0x09, 0x65, 0xf7, 0xa5, 0x4f, 0x43, 0x8f, 0x8b, 0xb7, 0x8a, 0xe5, - 0xc5, 0xfd, 0xf2, 0x4f, 0x67, 0xb5, 0xfc, 0x6f, 0x67, 0xb5, 0xfc, 0x9f, 0x67, 0xb5, 0xfc, 0xdf, - 0x67, 0xb5, 0xfc, 0xc9, 0x0d, 0x93, 0xfd, 0xde, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x47, 0xf5, - 0x0d, 0x5c, 0x7d, 0x0a, 0x00, 0x00, + proto.RegisterFile("envoy/api/v2/core/grpc_service.proto", fileDescriptor_grpc_service_3518abc970ca407e) +} + +var fileDescriptor_grpc_service_3518abc970ca407e = []byte{ + // 1081 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xdd, 0x6e, 0x1b, 0xc5, + 0x17, 0xf7, 0xc6, 0x4e, 0x1b, 0x9f, 0x4d, 0xf3, 0x31, 0xf1, 0x3f, 0x71, 0xf6, 0xdf, 0x98, 0xa8, + 0x70, 0x11, 0x10, 0xac, 0x25, 0x07, 0xa4, 0x46, 0xaa, 0x80, 0xd8, 0x49, 0xeb, 0x94, 0xb4, 0x8a, + 0xd6, 0x85, 0xde, 0x20, 0x8d, 0x26, 0xe3, 0xb1, 0xb3, 0xed, 0x7a, 0x67, 0x35, 0x3b, 0xeb, 0xd6, + 0x7d, 0x02, 0xde, 0x81, 0x17, 0xe0, 0x01, 0xb8, 0x40, 0x5c, 0xf5, 0x12, 0x21, 0x2e, 0x78, 0x04, + 0x14, 0x6e, 0xe8, 0x5b, 0xa0, 0xf9, 0x70, 0xe2, 0x8f, 0xa8, 0x0e, 0xb9, 0xdb, 0x3d, 0xbf, 0xf3, + 0x3b, 0x1f, 0xbf, 0x39, 0x73, 0x06, 0x3e, 0x62, 0x71, 0x9f, 0x0f, 0xaa, 0x24, 0x09, 0xab, 0xfd, + 0x5a, 0x95, 0x72, 0xc1, 0xaa, 0x5d, 0x91, 0x50, 0x9c, 0x32, 0xd1, 0x0f, 0x29, 0xf3, 0x13, 0xc1, + 0x25, 0x47, 0xab, 0xda, 0xcb, 0x27, 0x49, 0xe8, 0xf7, 0x6b, 0xbe, 0xf2, 0xf2, 0xee, 0x4e, 0x13, + 0x4f, 0x49, 0x6a, 0x09, 0xde, 0x66, 0x97, 0xf3, 0x6e, 0xc4, 0xaa, 0xfa, 0xef, 0x34, 0xeb, 0x54, + 0x49, 0x3c, 0xb0, 0x50, 0x65, 0x12, 0x6a, 0x67, 0x82, 0xc8, 0x90, 0xc7, 0x16, 0xbf, 0x3b, 0x89, + 0xa7, 0x52, 0x64, 0x54, 0x5a, 0xf4, 0xff, 0x93, 0x28, 0xeb, 0x25, 0x72, 0x18, 0x7a, 0xa3, 0x4f, + 0xa2, 0xb0, 0x4d, 0x24, 0xab, 0x0e, 0x3f, 0x2c, 0x50, 0xea, 0xf2, 0x2e, 0xd7, 0x9f, 0x55, 0xf5, + 0x65, 0xac, 0xf7, 0xfe, 0x41, 0xe0, 0x3e, 0x12, 0x09, 0x6d, 0x99, 0x5e, 0xd1, 0x11, 0x80, 0x6e, + 0x0a, 0x2b, 0x05, 0xca, 0xce, 0xb6, 0xb3, 0xe3, 0xd6, 0x76, 0xfc, 0xa9, 0xd6, 0xfd, 0x11, 0x8e, + 0x7f, 0xa8, 0x50, 0x65, 0x68, 0xe6, 0x82, 0x22, 0x1b, 0xfe, 0xa0, 0x63, 0x70, 0x4d, 0xa1, 0x26, + 0xd6, 0x9c, 0x8e, 0xf5, 0xf1, 0x8c, 0x58, 0x8f, 0x34, 0xc3, 0x06, 0x83, 0xee, 0xc5, 0x1f, 0xda, + 0x85, 0xdb, 0x32, 0xec, 0x31, 0x9e, 0xc9, 0x72, 0x5e, 0x47, 0xda, 0xf4, 0x0d, 0xea, 0x0f, 0x65, + 0xf0, 0x0f, 0xac, 0x88, 0xc1, 0xd0, 0x13, 0x1d, 0xc1, 0x4a, 0x18, 0x87, 0x32, 0x24, 0x11, 0xee, + 0x31, 0x49, 0xda, 0x44, 0x92, 0xf2, 0xfc, 0x76, 0x7e, 0xc7, 0xad, 0x55, 0xae, 0xa8, 0xa3, 0xc9, + 0x48, 0x9b, 0x89, 0xef, 0x48, 0x94, 0xb1, 0x60, 0xd9, 0xf2, 0x9e, 0x58, 0x9a, 0xb7, 0x07, 0xc5, + 0x8b, 0x3e, 0xd1, 0xa7, 0xb0, 0x48, 0xa3, 0x2c, 0x95, 0x4c, 0xe0, 0x98, 0xf4, 0x98, 0xd6, 0xa9, + 0x58, 0x2f, 0xfe, 0xfa, 0xee, 0x6d, 0xbe, 0x20, 0xe6, 0xb6, 0x9d, 0xc0, 0xb5, 0xf0, 0x53, 0xd2, + 0x63, 0xde, 0xdf, 0xcb, 0x00, 0x97, 0x7d, 0xa1, 0x1d, 0x00, 0x49, 0x44, 0x97, 0x49, 0x9c, 0x89, + 0x70, 0x9a, 0x5a, 0x34, 0xe0, 0xb7, 0x22, 0x44, 0x3d, 0x58, 0xa3, 0x67, 0x24, 0x8e, 0x59, 0x84, + 0xa9, 0x60, 0x6d, 0x16, 0xab, 0x8a, 0x52, 0xab, 0xe4, 0x83, 0x6b, 0x2b, 0xe9, 0x37, 0x4c, 0x90, + 0xc6, 0x65, 0x8c, 0x00, 0xd1, 0x29, 0x1b, 0x6a, 0xc3, 0x0a, 0x25, 0xd1, 0x78, 0xae, 0xbc, 0x56, + 0x6b, 0xef, 0x3f, 0xe4, 0x22, 0xd1, 0x58, 0xa2, 0x65, 0x3a, 0x6e, 0x40, 0x9f, 0x80, 0x9b, 0x4a, + 0x22, 0x71, 0x22, 0x58, 0x27, 0x7c, 0x5d, 0x2e, 0x4c, 0xf6, 0x0f, 0x0a, 0x3d, 0xd1, 0x20, 0xba, + 0x0f, 0xe5, 0x91, 0x62, 0x70, 0x87, 0x50, 0xc9, 0xc5, 0xc0, 0x68, 0x3e, 0xaf, 0x88, 0xc1, 0xfa, + 0x08, 0xfe, 0xd0, 0xc0, 0x4a, 0x73, 0x54, 0x85, 0x5b, 0x94, 0xc7, 0x9d, 0xb0, 0x5b, 0xbe, 0xa5, + 0xd5, 0xda, 0x98, 0x9a, 0x96, 0x96, 0xbe, 0x52, 0x81, 0x75, 0xf3, 0xfe, 0x70, 0x60, 0xa9, 0x95, + 0x8e, 0x55, 0xfa, 0x00, 0x40, 0x70, 0x2e, 0x31, 0x65, 0x42, 0xa6, 0xf6, 0x2e, 0x6c, 0x5d, 0xa1, + 0xc4, 0x01, 0x91, 0xa4, 0xc5, 0x33, 0x41, 0x59, 0x50, 0x54, 0x84, 0x86, 0xf2, 0x47, 0x5f, 0x82, + 0x9b, 0x88, 0xb0, 0x4f, 0x24, 0xc3, 0x2f, 0xd9, 0xc0, 0x1e, 0xda, 0x0c, 0x3a, 0x58, 0xc6, 0x37, + 0x6c, 0xa0, 0xb2, 0xab, 0xc4, 0x98, 0x9e, 0x91, 0x30, 0xb6, 0x33, 0x3f, 0x2b, 0xbb, 0x22, 0x34, + 0x94, 0xbf, 0x57, 0x86, 0x75, 0x73, 0x28, 0xc7, 0x9c, 0x92, 0xd1, 0xae, 0xbc, 0xdf, 0xe7, 0x00, + 0x4d, 0x0f, 0x04, 0xa2, 0xb0, 0x9c, 0xa6, 0xe3, 0x67, 0x6f, 0x3a, 0xbe, 0x7f, 0xfd, 0xb3, 0x1f, + 0xd7, 0xaf, 0x99, 0x0b, 0x96, 0xd2, 0x71, 0x45, 0xbf, 0x82, 0x25, 0xbb, 0x12, 0xda, 0xac, 0x43, + 0xb2, 0x48, 0x5a, 0x59, 0xd6, 0xa7, 0x4e, 0xe7, 0x50, 0xad, 0xb4, 0x66, 0x2e, 0xb8, 0x63, 0x80, + 0x03, 0xe3, 0x8e, 0x38, 0xac, 0x46, 0xaa, 0xa1, 0x89, 0x19, 0x55, 0x31, 0xbe, 0xbe, 0x7e, 0x9d, + 0x57, 0x2b, 0xd3, 0xcc, 0x05, 0x2b, 0xd1, 0x84, 0xad, 0xbe, 0x05, 0xa5, 0xcb, 0x54, 0x38, 0x4d, + 0x18, 0x0d, 0x3b, 0x21, 0x13, 0x68, 0xfe, 0x97, 0x77, 0x6f, 0xf3, 0x8e, 0xf7, 0xc3, 0x02, 0x2c, + 0x4f, 0x4c, 0x3c, 0xfa, 0x10, 0x16, 0x09, 0xa5, 0x2c, 0x4d, 0xb1, 0xe4, 0x2f, 0x59, 0x6c, 0x6e, + 0x78, 0x33, 0x17, 0xb8, 0xc6, 0xfa, 0x4c, 0x19, 0xd1, 0x31, 0xfc, 0xcf, 0x2a, 0x41, 0x79, 0x2f, + 0xc9, 0x24, 0xc3, 0x2c, 0xee, 0x86, 0x31, 0x9b, 0x29, 0xc8, 0x9a, 0x01, 0x1a, 0x86, 0x75, 0xa8, + 0x49, 0xa8, 0x06, 0x25, 0x1b, 0x4d, 0xb0, 0x8e, 0x60, 0xe9, 0x99, 0x4d, 0x9d, 0xb7, 0xa9, 0x91, + 0x41, 0x03, 0x03, 0x9a, 0x0a, 0x7e, 0x74, 0xc0, 0xb3, 0x2f, 0x1c, 0x26, 0x94, 0xf2, 0x2c, 0x96, + 0xf8, 0xc5, 0x2b, 0x89, 0x4d, 0x95, 0xfa, 0x5e, 0xba, 0xb5, 0xef, 0x6f, 0x7c, 0xf1, 0x7d, 0xeb, + 0xb2, 0x6f, 0x42, 0x3f, 0x7e, 0xfe, 0x6c, 0x5f, 0x07, 0x1e, 0x17, 0x7c, 0x23, 0x1d, 0xf7, 0x7a, + 0x25, 0x8d, 0x17, 0xe2, 0x60, 0x97, 0x3f, 0x0e, 0x49, 0x4f, 0xdf, 0x75, 0xb7, 0xf6, 0xf4, 0xe6, + 0xc5, 0x18, 0xe8, 0x68, 0xff, 0xc9, 0x78, 0xfa, 0xa2, 0xc9, 0x71, 0x44, 0x7a, 0xe8, 0x0d, 0xb8, + 0x1d, 0xc1, 0x7b, 0x38, 0x89, 0xb2, 0x6e, 0x18, 0xdb, 0xad, 0xf1, 0xfc, 0xe6, 0x19, 0x87, 0x0f, + 0xc7, 0x88, 0xed, 0xa1, 0xe0, 0xbd, 0x13, 0x1d, 0x5e, 0xbd, 0x6d, 0x9d, 0x8b, 0x3f, 0x2f, 0x83, + 0x7b, 0xb3, 0xd5, 0x42, 0x9b, 0xb0, 0xf0, 0x22, 0xe5, 0xb1, 0xde, 0x26, 0x7a, 0xa6, 0x82, 0xdb, + 0xea, 0x5f, 0xed, 0x8a, 0xcf, 0x61, 0x5d, 0x1f, 0x38, 0x8e, 0xc2, 0x0e, 0x53, 0x8f, 0x1f, 0x4e, + 0x19, 0xe5, 0x71, 0xdb, 0xbc, 0x15, 0x85, 0xa0, 0xa4, 0xd1, 0x63, 0x0b, 0xb6, 0x0c, 0xe6, 0xf5, + 0xa1, 0x74, 0x95, 0x2e, 0xa8, 0x0a, 0x6b, 0x24, 0x93, 0x67, 0x5c, 0x84, 0x6f, 0xf4, 0x7b, 0x3a, + 0x3a, 0xc7, 0x01, 0x1a, 0x83, 0xcc, 0x28, 0x7d, 0x06, 0x43, 0xab, 0x1c, 0xe0, 0x94, 0x45, 0x4c, + 0xed, 0x61, 0x9d, 0xba, 0x18, 0xac, 0x5e, 0x20, 0x2d, 0x0b, 0x78, 0x3f, 0x3b, 0xb0, 0xf5, 0x5e, + 0x79, 0x10, 0x82, 0xc2, 0xe5, 0xbb, 0x1a, 0xe8, 0x6f, 0xf4, 0xc5, 0xc5, 0x46, 0x9f, 0x7b, 0xef, + 0x46, 0xaf, 0xcf, 0x95, 0x9d, 0x66, 0x6e, 0xb8, 0xd7, 0xd1, 0x1e, 0x2c, 0xca, 0x41, 0xc2, 0xda, + 0xd8, 0x92, 0xcd, 0xb2, 0x28, 0x4d, 0x91, 0xf7, 0x63, 0x75, 0xbb, 0x5c, 0xed, 0xdb, 0xd0, 0xae, + 0xf5, 0x3b, 0xe0, 0x1a, 0x12, 0x56, 0xd6, 0x19, 0xab, 0xa0, 0xbe, 0x09, 0x2b, 0xf6, 0x59, 0x9f, + 0x84, 0x1e, 0x17, 0x16, 0x0a, 0x2b, 0xf3, 0xf5, 0xdd, 0x9f, 0xce, 0x2b, 0xce, 0x6f, 0xe7, 0x15, + 0xe7, 0xcf, 0xf3, 0x8a, 0xf3, 0xd7, 0x79, 0xc5, 0x81, 0x0f, 0x42, 0x6e, 0x06, 0x2c, 0x11, 0xfc, + 0xf5, 0x60, 0x7a, 0xd6, 0x4e, 0x9c, 0xd3, 0x5b, 0xba, 0xc0, 0xdd, 0x7f, 0x03, 0x00, 0x00, 0xff, + 0xff, 0x23, 0x78, 0xd7, 0x30, 0xa4, 0x0a, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.go index 8c54eef160fb..1a24679def16 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.go @@ -70,7 +70,7 @@ func (x HealthStatus) String() string { return proto.EnumName(HealthStatus_name, int32(x)) } func (HealthStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_health_check_716df7b498b2ed9f, []int{0} + return fileDescriptor_health_check_a6c6d74e5548d884, []int{0} } type HealthCheck struct { @@ -151,7 +151,7 @@ func (m *HealthCheck) Reset() { *m = HealthCheck{} } func (m *HealthCheck) String() string { return proto.CompactTextString(m) } func (*HealthCheck) ProtoMessage() {} func (*HealthCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_716df7b498b2ed9f, []int{0} + return fileDescriptor_health_check_a6c6d74e5548d884, []int{0} } func (m *HealthCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -465,7 +465,7 @@ func (m *HealthCheck_Payload) Reset() { *m = HealthCheck_Payload{} } func (m *HealthCheck_Payload) String() string { return proto.CompactTextString(m) } func (*HealthCheck_Payload) ProtoMessage() {} func (*HealthCheck_Payload) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_716df7b498b2ed9f, []int{0, 0} + return fileDescriptor_health_check_a6c6d74e5548d884, []int{0, 0} } func (m *HealthCheck_Payload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -634,7 +634,7 @@ func (m *HealthCheck_HttpHealthCheck) Reset() { *m = HealthCheck_HttpHea func (m *HealthCheck_HttpHealthCheck) String() string { return proto.CompactTextString(m) } func (*HealthCheck_HttpHealthCheck) ProtoMessage() {} func (*HealthCheck_HttpHealthCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_716df7b498b2ed9f, []int{0, 1} + return fileDescriptor_health_check_a6c6d74e5548d884, []int{0, 1} } func (m *HealthCheck_HttpHealthCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -735,7 +735,7 @@ func (m *HealthCheck_TcpHealthCheck) Reset() { *m = HealthCheck_TcpHealt func (m *HealthCheck_TcpHealthCheck) String() string { return proto.CompactTextString(m) } func (*HealthCheck_TcpHealthCheck) ProtoMessage() {} func (*HealthCheck_TcpHealthCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_716df7b498b2ed9f, []int{0, 2} + return fileDescriptor_health_check_a6c6d74e5548d884, []int{0, 2} } func (m *HealthCheck_TcpHealthCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -793,7 +793,7 @@ func (m *HealthCheck_RedisHealthCheck) Reset() { *m = HealthCheck_RedisH func (m *HealthCheck_RedisHealthCheck) String() string { return proto.CompactTextString(m) } func (*HealthCheck_RedisHealthCheck) ProtoMessage() {} func (*HealthCheck_RedisHealthCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_716df7b498b2ed9f, []int{0, 3} + return fileDescriptor_health_check_a6c6d74e5548d884, []int{0, 3} } func (m *HealthCheck_RedisHealthCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -853,7 +853,7 @@ func (m *HealthCheck_GrpcHealthCheck) Reset() { *m = HealthCheck_GrpcHea func (m *HealthCheck_GrpcHealthCheck) String() string { return proto.CompactTextString(m) } func (*HealthCheck_GrpcHealthCheck) ProtoMessage() {} func (*HealthCheck_GrpcHealthCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_716df7b498b2ed9f, []int{0, 4} + return fileDescriptor_health_check_a6c6d74e5548d884, []int{0, 4} } func (m *HealthCheck_GrpcHealthCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -916,7 +916,7 @@ func (m *HealthCheck_CustomHealthCheck) Reset() { *m = HealthCheck_Custo func (m *HealthCheck_CustomHealthCheck) String() string { return proto.CompactTextString(m) } func (*HealthCheck_CustomHealthCheck) ProtoMessage() {} func (*HealthCheck_CustomHealthCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_716df7b498b2ed9f, []int{0, 5} + return fileDescriptor_health_check_a6c6d74e5548d884, []int{0, 5} } func (m *HealthCheck_CustomHealthCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3985,80 +3985,81 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/core/health_check.proto", fileDescriptor_health_check_716df7b498b2ed9f) -} - -var fileDescriptor_health_check_716df7b498b2ed9f = []byte{ - // 1128 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x96, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xc7, 0xbd, 0xb6, 0xeb, 0x1f, 0xcf, 0x8e, 0xbd, 0x1e, 0xb7, 0xcd, 0xd6, 0x84, 0xd4, 0xa0, - 0x08, 0x59, 0x95, 0xb0, 0xc1, 0x95, 0x40, 0xe5, 0x44, 0x9c, 0xa6, 0xb1, 0x4b, 0xea, 0x44, 0x53, - 0xa7, 0x28, 0x12, 0x68, 0x35, 0xd9, 0x1d, 0xaf, 0x97, 0x6e, 0x76, 0x96, 0xd9, 0x59, 0x17, 0xff, - 0x13, 0x1c, 0x38, 0xf1, 0x0f, 0x20, 0xa1, 0x5e, 0xb8, 0x22, 0x4e, 0x3d, 0x72, 0xe4, 0x3f, 0x00, - 0xe5, 0x44, 0xcf, 0xfc, 0x03, 0x68, 0x67, 0xd7, 0xbf, 0x83, 0x92, 0x88, 0xdb, 0xcc, 0x7b, 0xef, - 0xfb, 0x99, 0xf7, 0x66, 0xde, 0x3e, 0x2d, 0xec, 0x50, 0x77, 0xcc, 0x26, 0x2d, 0xe2, 0xd9, 0xad, - 0x71, 0xbb, 0x65, 0x30, 0x4e, 0x5b, 0x23, 0x4a, 0x1c, 0x31, 0xd2, 0x8d, 0x11, 0x35, 0x5e, 0x36, - 0x3d, 0xce, 0x04, 0x43, 0x15, 0x19, 0xd5, 0x24, 0x9e, 0xdd, 0x1c, 0xb7, 0x9b, 0x61, 0x54, 0x6d, - 0x6b, 0x5d, 0x78, 0x46, 0x7c, 0x1a, 0x09, 0x6a, 0xf7, 0x2c, 0xc6, 0x2c, 0x87, 0xb6, 0xe4, 0xee, - 0x2c, 0x18, 0xb6, 0x88, 0x3b, 0x89, 0x5d, 0xdb, 0xab, 0x2e, 0x33, 0xe0, 0x44, 0xd8, 0xcc, 0x8d, - 0xfd, 0x5b, 0xab, 0x7e, 0x5f, 0xf0, 0xc0, 0x10, 0xff, 0xa5, 0x7e, 0xc5, 0x89, 0xe7, 0x51, 0xee, - 0xc7, 0xfe, 0xcd, 0x31, 0x71, 0x6c, 0x93, 0x08, 0xda, 0x9a, 0x2e, 0x62, 0xc7, 0x6d, 0x8b, 0x59, - 0x4c, 0x2e, 0x5b, 0xe1, 0x2a, 0xb2, 0xbe, 0xff, 0x0f, 0x82, 0x42, 0x57, 0xd6, 0xbb, 0x17, 0x96, - 0x8b, 0xf6, 0x21, 0x2b, 0xec, 0x73, 0xca, 0x02, 0xa1, 0x29, 0x75, 0xa5, 0x51, 0x68, 0xdf, 0x6b, - 0x46, 0x07, 0x36, 0xa7, 0x07, 0x36, 0x1f, 0xc7, 0xe9, 0x76, 0xd4, 0x1f, 0xff, 0xbc, 0xaf, 0xfc, - 0xf6, 0xf6, 0x4d, 0x2a, 0xfb, 0x5a, 0x49, 0xe7, 0x94, 0x07, 0x09, 0x3c, 0xd5, 0xa2, 0x03, 0xc8, - 0xd9, 0xae, 0xa0, 0x7c, 0x4c, 0x1c, 0x2d, 0x79, 0x73, 0xce, 0x4c, 0x8c, 0x3a, 0x50, 0x9e, 0xae, - 0xf5, 0x6f, 0x6c, 0x21, 0x28, 0xd7, 0x52, 0x57, 0xf0, 0x70, 0x69, 0xaa, 0x78, 0x2a, 0x05, 0xe8, - 0x19, 0x54, 0x03, 0x37, 0x7a, 0xd4, 0x89, 0x2e, 0x46, 0x9c, 0xfa, 0x23, 0xe6, 0x98, 0x5a, 0x5a, - 0x72, 0xb6, 0xd6, 0x38, 0x27, 0x3d, 0x57, 0x3c, 0x6c, 0xbf, 0x20, 0x4e, 0x40, 0x31, 0x9a, 0x09, - 0x07, 0x53, 0x1d, 0xea, 0x41, 0x65, 0x1d, 0x76, 0xeb, 0x1a, 0x30, 0x75, 0x0d, 0xf5, 0x29, 0xe4, - 0x88, 0x23, 0x74, 0x8f, 0x71, 0xa1, 0x65, 0xae, 0x41, 0xc8, 0x12, 0x47, 0x1c, 0x33, 0x2e, 0xd0, - 0x3e, 0xa8, 0x9c, 0x06, 0x3e, 0xd5, 0x0d, 0xe6, 0xba, 0xd4, 0x08, 0xcb, 0xd6, 0xb2, 0x12, 0x50, - 0x5b, 0x03, 0x74, 0x18, 0x73, 0x22, 0x79, 0x59, 0x6a, 0xf6, 0x66, 0x12, 0xf4, 0x15, 0x54, 0x46, - 0x42, 0x78, 0xfa, 0x62, 0xc7, 0x6b, 0x39, 0xc9, 0x69, 0x36, 0xd7, 0x5a, 0xbe, 0xb9, 0xd0, 0x28, - 0xcd, 0xae, 0x10, 0xde, 0xc2, 0xbe, 0x9b, 0xc0, 0xe5, 0xd1, 0xb2, 0x09, 0x9d, 0x82, 0x2a, 0x8c, - 0x15, 0x78, 0x5e, 0xc2, 0x3f, 0xbc, 0x02, 0x3e, 0x30, 0x56, 0xd8, 0x25, 0xb1, 0x64, 0x09, 0x13, - 0xb7, 0xb8, 0x67, 0x2c, 0xb3, 0x0b, 0xd7, 0x4a, 0xfc, 0x80, 0x7b, 0xc6, 0x4a, 0xe2, 0xd6, 0xb2, - 0x09, 0x9d, 0x40, 0xd5, 0x65, 0xba, 0xe0, 0x64, 0x38, 0xb4, 0x0d, 0x7d, 0xd6, 0xc8, 0xc5, 0xab, - 0x1a, 0x19, 0xc2, 0x26, 0xbe, 0xf5, 0x5a, 0x49, 0x3e, 0x48, 0xe0, 0x8a, 0xcb, 0x06, 0x11, 0xa0, - 0x37, 0xed, 0xe5, 0x33, 0xa8, 0x1a, 0x81, 0x2f, 0xd8, 0xf9, 0x72, 0xda, 0x1b, 0x12, 0xfb, 0xd1, - 0x15, 0x69, 0xef, 0x49, 0xe5, 0x72, 0xe2, 0x15, 0x63, 0xd5, 0x88, 0x06, 0x30, 0x6f, 0xd9, 0x79, - 0xe6, 0xa5, 0x1b, 0x65, 0x3e, 0x03, 0xcc, 0x32, 0xff, 0x1a, 0x36, 0xe7, 0x54, 0x6a, 0x5a, 0x74, - 0x8e, 0x2e, 0xdf, 0x04, 0x7d, 0x67, 0x46, 0xd9, 0x37, 0x2d, 0x3a, 0xc3, 0x9f, 0xc2, 0x9d, 0xcb, - 0xe1, 0xea, 0x4d, 0xe0, 0xd5, 0xcb, 0xd0, 0x3b, 0x50, 0xa2, 0x63, 0xea, 0x0a, 0xdd, 0x61, 0x96, - 0xee, 0x11, 0x31, 0xd2, 0x2a, 0x75, 0xa5, 0x91, 0xc7, 0x45, 0x69, 0x3d, 0x64, 0xd6, 0x31, 0x11, - 0x23, 0xf4, 0x09, 0x6c, 0xae, 0x4c, 0x19, 0xdd, 0xa3, 0xdc, 0xa0, 0xae, 0xd0, 0x50, 0x5d, 0x69, - 0x6c, 0xe0, 0x3b, 0xcb, 0x23, 0xe5, 0x38, 0x72, 0xa2, 0x27, 0x50, 0x27, 0xce, 0x2b, 0x32, 0xf1, - 0x25, 0x7e, 0xf1, 0x55, 0xf5, 0x21, 0xb1, 0x9d, 0x80, 0x53, 0x5f, 0xab, 0xd6, 0x95, 0x46, 0x0e, - 0x6f, 0x45, 0x71, 0x87, 0xcc, 0x5a, 0x78, 0xad, 0x27, 0x71, 0x4c, 0xed, 0x05, 0x64, 0x8f, 0xc9, - 0xc4, 0x61, 0xc4, 0x44, 0xf7, 0x21, 0x2d, 0xe8, 0x77, 0xd1, 0xf4, 0xcd, 0x77, 0xf2, 0x61, 0x7d, - 0x69, 0x9e, 0xac, 0x2b, 0xdd, 0x04, 0x96, 0x0e, 0xa4, 0x41, 0xe6, 0xcc, 0x76, 0x09, 0x9f, 0xc8, - 0xc1, 0x5a, 0xec, 0x26, 0x70, 0xbc, 0xef, 0xa8, 0x90, 0xf5, 0x62, 0xca, 0xad, 0x5f, 0xdf, 0xbe, - 0x49, 0x29, 0xb5, 0x9f, 0x52, 0x50, 0x5e, 0xf9, 0x50, 0x11, 0x82, 0xf4, 0x88, 0xf9, 0xf1, 0x01, - 0x58, 0xae, 0xd1, 0xbb, 0x90, 0x96, 0x77, 0x93, 0x5c, 0x39, 0x14, 0x4b, 0x33, 0xfa, 0x0c, 0xd2, - 0x3e, 0x75, 0xcd, 0x78, 0xf2, 0x7e, 0x70, 0x45, 0xa7, 0xc6, 0x95, 0x60, 0xa9, 0x41, 0x9f, 0x43, - 0x96, 0x53, 0x83, 0xda, 0x63, 0x1a, 0x0f, 0xdc, 0xeb, 0xca, 0xa7, 0x32, 0xf4, 0x1e, 0x14, 0x7d, - 0xca, 0xc7, 0xb6, 0x41, 0x75, 0x97, 0x9c, 0x53, 0x39, 0x6a, 0xf3, 0xb8, 0x10, 0xdb, 0xfa, 0xe4, - 0x9c, 0xa2, 0x21, 0xdc, 0xe5, 0xf4, 0xdb, 0x80, 0xfa, 0x22, 0x7c, 0x04, 0x93, 0x72, 0x5f, 0x17, - 0x4c, 0x27, 0xa6, 0xa9, 0x65, 0xea, 0xa9, 0x46, 0xa1, 0xbd, 0x73, 0xf9, 0x99, 0x26, 0xe5, 0x72, - 0x30, 0x1e, 0x79, 0xb2, 0x99, 0x0a, 0x61, 0xdd, 0x99, 0x1f, 0x94, 0x94, 0xfa, 0x77, 0x16, 0x57, - 0x63, 0x60, 0x14, 0xe6, 0x0f, 0xd8, 0xae, 0x69, 0xa2, 0x77, 0x20, 0x1f, 0x0e, 0xdd, 0x70, 0xd0, - 0xb5, 0xe5, 0xbc, 0xcd, 0xe1, 0x5c, 0xe0, 0xd3, 0xf0, 0x8a, 0xdb, 0xe8, 0x11, 0xdc, 0xbb, 0x24, - 0x09, 0x4e, 0xcf, 0xd9, 0x98, 0x6a, 0xb9, 0x7a, 0xaa, 0x91, 0xc7, 0x77, 0x57, 0xa1, 0x58, 0x7a, - 0x6b, 0xdf, 0x2b, 0x50, 0x5a, 0x9e, 0x79, 0xb3, 0x3b, 0x57, 0xfe, 0xdf, 0x9d, 0x27, 0x65, 0xfd, - 0x37, 0xbd, 0xf3, 0xda, 0x0e, 0xa8, 0x98, 0x9a, 0xb6, 0xbf, 0x98, 0x91, 0x0a, 0xa9, 0x97, 0x74, - 0x12, 0xf7, 0x4d, 0xb8, 0xac, 0x61, 0x28, 0xaf, 0x4c, 0xd3, 0xb5, 0xc7, 0x52, 0xd6, 0x1f, 0x6b, - 0x0b, 0xf2, 0x24, 0x10, 0x23, 0xc6, 0x6d, 0x11, 0xf5, 0x70, 0x1e, 0xcf, 0x0d, 0xb5, 0x5f, 0x14, - 0xa8, 0xac, 0xcd, 0xba, 0xb0, 0x41, 0xe7, 0xb8, 0xa5, 0x06, 0x0d, 0xcd, 0xe8, 0x63, 0xc8, 0x18, - 0xcc, 0x1d, 0xda, 0x56, 0xfc, 0xb3, 0xb1, 0xb9, 0x36, 0x31, 0x9e, 0xcb, 0x7f, 0xa8, 0xf0, 0x63, - 0x89, 0x02, 0xd1, 0x23, 0x28, 0x8a, 0x89, 0x47, 0x4d, 0x3d, 0x16, 0x46, 0xbd, 0x7d, 0x7b, 0x4d, - 0xb8, 0xeb, 0x4e, 0xba, 0x09, 0x5c, 0x90, 0xb1, 0x7b, 0x32, 0xb4, 0xb3, 0x01, 0x85, 0x48, 0xa4, - 0x87, 0xd6, 0xce, 0x26, 0x94, 0x16, 0xbf, 0x7c, 0xca, 0xe3, 0xaf, 0xef, 0x69, 0x3a, 0x07, 0x6a, - 0x01, 0x23, 0x1e, 0x5e, 0xe4, 0xd2, 0x70, 0x78, 0x80, 0xa1, 0x18, 0x55, 0xf7, 0x5c, 0x10, 0x11, - 0xf8, 0xa8, 0x00, 0xd9, 0x93, 0xfe, 0x17, 0xfd, 0xa3, 0x2f, 0xfb, 0x6a, 0x22, 0xdc, 0x74, 0xf7, - 0x77, 0x0f, 0x07, 0xdd, 0x53, 0x55, 0x41, 0x1b, 0x90, 0x3f, 0xe9, 0x4f, 0xb7, 0x49, 0x54, 0x84, - 0xdc, 0x63, 0xbc, 0xdb, 0xeb, 0xf7, 0xfa, 0x07, 0x6a, 0x2a, 0x8c, 0x1c, 0xf4, 0x9e, 0xed, 0x1f, - 0x9d, 0x0c, 0xd4, 0x74, 0x47, 0xfd, 0xf9, 0x62, 0x5b, 0xf9, 0xfd, 0x62, 0x5b, 0xf9, 0xe3, 0x62, - 0x5b, 0xf9, 0xeb, 0x62, 0x5b, 0x39, 0xcb, 0xc8, 0x22, 0x1e, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, - 0xf2, 0xf3, 0x61, 0x7f, 0xe3, 0x0a, 0x00, 0x00, + proto.RegisterFile("envoy/api/v2/core/health_check.proto", fileDescriptor_health_check_a6c6d74e5548d884) +} + +var fileDescriptor_health_check_a6c6d74e5548d884 = []byte{ + // 1146 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x96, 0xcf, 0x6e, 0xdb, 0xc6, + 0x13, 0xc7, 0x45, 0x49, 0xd1, 0x9f, 0x91, 0x2c, 0x51, 0xab, 0x24, 0x66, 0xf4, 0xf3, 0xcf, 0x51, + 0x0b, 0xa3, 0x10, 0x02, 0x54, 0x2a, 0x14, 0xb4, 0x45, 0x7a, 0xaa, 0xe5, 0x38, 0x91, 0xd2, 0x44, + 0x31, 0x36, 0x72, 0x8a, 0x00, 0x2d, 0x88, 0x35, 0xb9, 0xa2, 0xd8, 0xd0, 0x5c, 0x76, 0xb9, 0x54, + 0xa2, 0x97, 0xe8, 0xa1, 0xa7, 0xbe, 0x40, 0x81, 0x22, 0xd7, 0x5e, 0x8a, 0x9e, 0x72, 0xec, 0xb1, + 0x6f, 0xd0, 0xc2, 0xa7, 0xe6, 0x09, 0x7a, 0x2d, 0xb8, 0xa4, 0xfe, 0xd2, 0x85, 0x6d, 0xf4, 0xb6, + 0x3b, 0x33, 0xdf, 0xcf, 0xce, 0xec, 0x0e, 0x07, 0x84, 0x3d, 0xea, 0x4e, 0xd9, 0xac, 0x43, 0x3c, + 0xbb, 0x33, 0xed, 0x76, 0x0c, 0xc6, 0x69, 0x67, 0x42, 0x89, 0x23, 0x26, 0xba, 0x31, 0xa1, 0xc6, + 0xcb, 0xb6, 0xc7, 0x99, 0x60, 0xa8, 0x26, 0xa3, 0xda, 0xc4, 0xb3, 0xdb, 0xd3, 0x6e, 0x3b, 0x8c, + 0x6a, 0xec, 0x24, 0x85, 0x27, 0xc4, 0xa7, 0x91, 0xa0, 0x71, 0xcb, 0x62, 0xcc, 0x72, 0x68, 0x47, + 0xee, 0x4e, 0x82, 0x71, 0x87, 0xb8, 0xb3, 0xd8, 0xb5, 0xbb, 0xe9, 0x32, 0x03, 0x4e, 0x84, 0xcd, + 0xdc, 0xd8, 0xbf, 0xb3, 0xe9, 0xf7, 0x05, 0x0f, 0x0c, 0xf1, 0x6f, 0xea, 0x57, 0x9c, 0x78, 0x1e, + 0xe5, 0x7e, 0xec, 0xdf, 0x9e, 0x12, 0xc7, 0x36, 0x89, 0xa0, 0x9d, 0xf9, 0x22, 0x76, 0x5c, 0xb7, + 0x98, 0xc5, 0xe4, 0xb2, 0x13, 0xae, 0x22, 0xeb, 0xfb, 0x7f, 0x23, 0x28, 0xf5, 0x65, 0xbd, 0x07, + 0x61, 0xb9, 0xe8, 0x10, 0xf2, 0xc2, 0x3e, 0xa5, 0x2c, 0x10, 0x9a, 0xd2, 0x54, 0x5a, 0xa5, 0xee, + 0xad, 0x76, 0x74, 0x60, 0x7b, 0x7e, 0x60, 0xfb, 0x7e, 0x9c, 0x6e, 0x4f, 0xfd, 0xe1, 0x8f, 0xdb, + 0xca, 0xaf, 0xef, 0xde, 0x66, 0xf2, 0x6f, 0x94, 0x6c, 0x41, 0xb9, 0x93, 0xc2, 0x73, 0x2d, 0x7a, + 0x08, 0x05, 0xdb, 0x15, 0x94, 0x4f, 0x89, 0xa3, 0xa5, 0xaf, 0xce, 0x59, 0x88, 0x51, 0x0f, 0xaa, + 0xf3, 0xb5, 0xfe, 0x8d, 0x2d, 0x04, 0xe5, 0x5a, 0xe6, 0x02, 0x1e, 0xae, 0xcc, 0x15, 0x8f, 0xa4, + 0x00, 0x3d, 0x81, 0x7a, 0xe0, 0x46, 0x8f, 0x3a, 0xd3, 0xc5, 0x84, 0x53, 0x7f, 0xc2, 0x1c, 0x53, + 0xcb, 0x4a, 0xce, 0x4e, 0x82, 0x73, 0x3c, 0x70, 0xc5, 0xdd, 0xee, 0x73, 0xe2, 0x04, 0x14, 0xa3, + 0x85, 0x70, 0x34, 0xd7, 0xa1, 0x01, 0xd4, 0x92, 0xb0, 0x6b, 0x97, 0x80, 0xa9, 0x09, 0xd4, 0xa7, + 0x50, 0x20, 0x8e, 0xd0, 0x3d, 0xc6, 0x85, 0x96, 0xbb, 0x04, 0x21, 0x4f, 0x1c, 0x71, 0xc4, 0xb8, + 0x40, 0x87, 0xa0, 0x72, 0x1a, 0xf8, 0x54, 0x37, 0x98, 0xeb, 0x52, 0x23, 0x2c, 0x5b, 0xcb, 0x4b, + 0x40, 0x23, 0x01, 0xe8, 0x31, 0xe6, 0x44, 0xf2, 0xaa, 0xd4, 0x1c, 0x2c, 0x24, 0xe8, 0x2b, 0xa8, + 0x4d, 0x84, 0xf0, 0xf4, 0xd5, 0x8e, 0xd7, 0x0a, 0x92, 0xd3, 0x6e, 0x27, 0x5a, 0xbe, 0xbd, 0xd2, + 0x28, 0xed, 0xbe, 0x10, 0xde, 0xca, 0xbe, 0x9f, 0xc2, 0xd5, 0xc9, 0xba, 0x09, 0xbd, 0x00, 0x55, + 0x18, 0x1b, 0xf0, 0xa2, 0x84, 0x7f, 0x78, 0x01, 0x7c, 0x64, 0x6c, 0xb0, 0x2b, 0x62, 0xcd, 0x12, + 0x26, 0x6e, 0x71, 0xcf, 0x58, 0x67, 0x97, 0x2e, 0x95, 0xf8, 0x43, 0xee, 0x19, 0x1b, 0x89, 0x5b, + 0xeb, 0x26, 0x74, 0x0c, 0x75, 0x97, 0xe9, 0x82, 0x93, 0xf1, 0xd8, 0x36, 0xf4, 0x45, 0x23, 0x97, + 0x2f, 0x6a, 0x64, 0x08, 0x9b, 0xf8, 0xda, 0x1b, 0x25, 0x7d, 0x27, 0x85, 0x6b, 0x2e, 0x1b, 0x45, + 0x80, 0xc1, 0xbc, 0x97, 0x4f, 0xa0, 0x6e, 0x04, 0xbe, 0x60, 0xa7, 0xeb, 0x69, 0x6f, 0x49, 0xec, + 0x47, 0x17, 0xa4, 0x7d, 0x20, 0x95, 0xeb, 0x89, 0xd7, 0x8c, 0x4d, 0x23, 0x1a, 0xc1, 0xb2, 0x65, + 0x97, 0x99, 0x57, 0xae, 0x94, 0xf9, 0x02, 0xb0, 0xc8, 0xfc, 0x6b, 0xd8, 0x5e, 0x52, 0xa9, 0x69, + 0xd1, 0x25, 0xba, 0x7a, 0x15, 0xf4, 0x8d, 0x05, 0xe5, 0xd0, 0xb4, 0xe8, 0x02, 0xff, 0x02, 0x6e, + 0x9c, 0x0f, 0x57, 0xaf, 0x02, 0xaf, 0x9f, 0x87, 0xde, 0x83, 0x0a, 0x9d, 0x52, 0x57, 0xe8, 0x0e, + 0xb3, 0x74, 0x8f, 0x88, 0x89, 0x56, 0x6b, 0x2a, 0xad, 0x22, 0x2e, 0x4b, 0xeb, 0x63, 0x66, 0x1d, + 0x11, 0x31, 0x41, 0x9f, 0xc0, 0xf6, 0xc6, 0x94, 0xd1, 0x3d, 0xca, 0x0d, 0xea, 0x0a, 0x0d, 0x35, + 0x95, 0xd6, 0x16, 0xbe, 0xb1, 0x3e, 0x52, 0x8e, 0x22, 0x27, 0x7a, 0x00, 0x4d, 0xe2, 0xbc, 0x22, + 0x33, 0x5f, 0xe2, 0x57, 0x5f, 0x55, 0x1f, 0x13, 0xdb, 0x09, 0x38, 0xf5, 0xb5, 0x7a, 0x53, 0x69, + 0x15, 0xf0, 0x4e, 0x14, 0xf7, 0x98, 0x59, 0x2b, 0xaf, 0xf5, 0x20, 0x8e, 0x69, 0x3c, 0x87, 0xfc, + 0x11, 0x99, 0x39, 0x8c, 0x98, 0xe8, 0x36, 0x64, 0x05, 0x7d, 0x1d, 0x4d, 0xdf, 0x62, 0xaf, 0x18, + 0xd6, 0x97, 0xe5, 0xe9, 0xa6, 0xd2, 0x4f, 0x61, 0xe9, 0x40, 0x1a, 0xe4, 0x4e, 0x6c, 0x97, 0xf0, + 0x99, 0x1c, 0xac, 0xe5, 0x7e, 0x0a, 0xc7, 0xfb, 0x9e, 0x0a, 0x79, 0x2f, 0xa6, 0x5c, 0xfb, 0xe5, + 0xdd, 0xdb, 0x8c, 0xd2, 0xf8, 0x31, 0x03, 0xd5, 0x8d, 0x0f, 0x15, 0x21, 0xc8, 0x4e, 0x98, 0x1f, + 0x1f, 0x80, 0xe5, 0x1a, 0xfd, 0x1f, 0xb2, 0xf2, 0x6e, 0xd2, 0x1b, 0x87, 0x62, 0x69, 0x46, 0x9f, + 0x41, 0xd6, 0xa7, 0xae, 0x19, 0x4f, 0xde, 0x0f, 0x2e, 0xe8, 0xd4, 0xb8, 0x12, 0x2c, 0x35, 0xe8, + 0x73, 0xc8, 0x73, 0x6a, 0x50, 0x7b, 0x4a, 0xe3, 0x81, 0x7b, 0x59, 0xf9, 0x5c, 0x86, 0xde, 0x83, + 0xb2, 0x4f, 0xf9, 0xd4, 0x36, 0xa8, 0xee, 0x92, 0x53, 0x2a, 0x47, 0x6d, 0x11, 0x97, 0x62, 0xdb, + 0x90, 0x9c, 0x52, 0x34, 0x86, 0x9b, 0x9c, 0x7e, 0x1b, 0x50, 0x5f, 0x84, 0x8f, 0x60, 0x52, 0xee, + 0xeb, 0x82, 0xe9, 0xc4, 0x34, 0xb5, 0x5c, 0x33, 0xd3, 0x2a, 0x75, 0xf7, 0xce, 0x3f, 0xd3, 0xa4, + 0x5c, 0x0e, 0xc6, 0xa7, 0x9e, 0x6c, 0xa6, 0x52, 0x58, 0x77, 0xee, 0x7b, 0x25, 0xa3, 0xfe, 0x95, + 0xc7, 0xf5, 0x18, 0x18, 0x85, 0xf9, 0x23, 0xb6, 0x6f, 0x9a, 0xe8, 0x7f, 0x50, 0x0c, 0x87, 0x6e, + 0x38, 0xe8, 0xba, 0x72, 0xde, 0x16, 0x70, 0x21, 0xf0, 0x69, 0x78, 0xc5, 0x5d, 0x74, 0x0f, 0x6e, + 0x9d, 0x93, 0x04, 0xa7, 0xa7, 0x6c, 0x4a, 0xb5, 0x42, 0x33, 0xd3, 0x2a, 0xe2, 0x9b, 0x9b, 0x50, + 0x2c, 0xbd, 0x8d, 0xef, 0x14, 0xa8, 0xac, 0xcf, 0xbc, 0xc5, 0x9d, 0x2b, 0xff, 0xed, 0xce, 0xd3, + 0xb2, 0xfe, 0xab, 0xde, 0x79, 0x63, 0x0f, 0x54, 0x4c, 0x4d, 0xdb, 0x5f, 0xcd, 0x48, 0x85, 0xcc, + 0x4b, 0x3a, 0x8b, 0xfb, 0x26, 0x5c, 0x36, 0x30, 0x54, 0x37, 0xa6, 0x69, 0xe2, 0xb1, 0x94, 0xe4, + 0x63, 0xed, 0x40, 0x91, 0x04, 0x62, 0xc2, 0xb8, 0x2d, 0xa2, 0x1e, 0x2e, 0xe2, 0xa5, 0xa1, 0xf1, + 0xb3, 0x02, 0xb5, 0xc4, 0xac, 0x0b, 0x1b, 0x74, 0x89, 0x5b, 0x6b, 0xd0, 0xd0, 0x8c, 0x3e, 0x86, + 0x9c, 0xc1, 0xdc, 0xb1, 0x6d, 0xc5, 0x3f, 0x1b, 0xdb, 0x89, 0x89, 0xf1, 0x4c, 0xfe, 0x43, 0xf5, + 0xd2, 0x5a, 0xf8, 0x21, 0xc5, 0xc1, 0xe8, 0x1e, 0x94, 0xc5, 0xcc, 0xa3, 0xa6, 0x1e, 0x8b, 0xa3, + 0xfe, 0xbe, 0x9e, 0x10, 0xef, 0xbb, 0xb3, 0x7e, 0x0a, 0x97, 0x64, 0xec, 0x81, 0x0c, 0xed, 0x6d, + 0x41, 0x29, 0x12, 0xe9, 0xa1, 0xb5, 0xb7, 0x0d, 0x95, 0xd5, 0xaf, 0x9f, 0xf2, 0xf8, 0x0b, 0x7c, + 0x94, 0x2d, 0x80, 0x5a, 0xc2, 0x88, 0x87, 0x97, 0xb9, 0x36, 0x20, 0xee, 0x60, 0x28, 0x47, 0x15, + 0x3e, 0x13, 0x44, 0x04, 0x3e, 0x2a, 0x41, 0xfe, 0x78, 0xf8, 0xc5, 0xf0, 0xe9, 0x97, 0x43, 0x35, + 0x15, 0x6e, 0xfa, 0x87, 0xfb, 0x8f, 0x47, 0xfd, 0x17, 0xaa, 0x82, 0xb6, 0xa0, 0x78, 0x3c, 0x9c, + 0x6f, 0xd3, 0xa8, 0x0c, 0x85, 0xfb, 0x78, 0x7f, 0x30, 0x1c, 0x0c, 0x1f, 0xaa, 0x99, 0x30, 0x72, + 0x34, 0x78, 0x72, 0xf8, 0xf4, 0x78, 0xa4, 0x66, 0x7b, 0x77, 0x7f, 0x3a, 0xdb, 0x55, 0x7e, 0x3b, + 0xdb, 0x55, 0x7e, 0x3f, 0xdb, 0x55, 0xfe, 0x3c, 0xdb, 0x55, 0xe0, 0xb6, 0xcd, 0xa2, 0xb7, 0xf7, + 0x38, 0x7b, 0x3d, 0x4b, 0xb6, 0xc1, 0x91, 0x72, 0x92, 0x93, 0x75, 0xde, 0xfd, 0x27, 0x00, 0x00, + 0xff, 0xff, 0xe0, 0xa2, 0x3d, 0xee, 0x0a, 0x0b, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.go index 669792133558..5fad7979d461 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.go @@ -58,7 +58,7 @@ func (m *HttpUri) Reset() { *m = HttpUri{} } func (m *HttpUri) String() string { return proto.CompactTextString(m) } func (*HttpUri) ProtoMessage() {} func (*HttpUri) Descriptor() ([]byte, []int) { - return fileDescriptor_http_uri_94e07cd1454c33f4, []int{0} + return fileDescriptor_http_uri_afe3f719d6326ca8, []int{0} } func (m *HttpUri) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -537,27 +537,28 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/core/http_uri.proto", fileDescriptor_http_uri_94e07cd1454c33f4) + proto.RegisterFile("envoy/api/v2/core/http_uri.proto", fileDescriptor_http_uri_afe3f719d6326ca8) } -var fileDescriptor_http_uri_94e07cd1454c33f4 = []byte{ - // 279 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x90, 0x31, 0x4e, 0xf3, 0x30, - 0x14, 0xc7, 0xfb, 0x92, 0xaf, 0x5f, 0xa8, 0x61, 0xc1, 0x42, 0x22, 0xb4, 0x52, 0x88, 0x90, 0x90, - 0x3a, 0xd9, 0x52, 0xb8, 0x41, 0xc4, 0xd0, 0x85, 0x25, 0x12, 0x73, 0xe5, 0xb6, 0x26, 0x58, 0x4a, - 0x6b, 0xcb, 0x7d, 0x8e, 0xd4, 0x9b, 0x70, 0x06, 0x4e, 0x00, 0x4c, 0x1d, 0x19, 0xb9, 0x01, 0x28, - 0x5b, 0x6f, 0x81, 0x92, 0xd4, 0x0b, 0xdb, 0x4f, 0xef, 0xfd, 0xfc, 0xf7, 0x5f, 0x8f, 0xa4, 0x72, - 0x53, 0xeb, 0x1d, 0x17, 0x46, 0xf1, 0x3a, 0xe3, 0x4b, 0x6d, 0x25, 0x7f, 0x46, 0x34, 0x73, 0x67, - 0x15, 0x33, 0x56, 0xa3, 0xa6, 0xe7, 0x9d, 0xc1, 0x84, 0x51, 0xac, 0xce, 0x58, 0x6b, 0x8c, 0x93, - 0x52, 0xeb, 0xb2, 0x92, 0xbc, 0x13, 0x16, 0xee, 0x89, 0xaf, 0x9c, 0x15, 0xa8, 0xf4, 0xa6, 0x7f, - 0x32, 0xbe, 0x28, 0x75, 0xa9, 0x3b, 0xe4, 0x2d, 0x1d, 0xa7, 0x97, 0xb5, 0xa8, 0xd4, 0x4a, 0xa0, - 0xe4, 0x1e, 0xfa, 0xc5, 0xcd, 0x3b, 0x90, 0x68, 0x86, 0x68, 0x1e, 0xad, 0xa2, 0x13, 0x12, 0x3a, - 0xab, 0x62, 0x48, 0x61, 0x3a, 0xca, 0x47, 0x1f, 0x87, 0x7d, 0xf8, 0xcf, 0x06, 0x29, 0x14, 0xed, - 0x94, 0xde, 0x92, 0x68, 0x59, 0xb9, 0x2d, 0x4a, 0x1b, 0x07, 0x7f, 0x84, 0xd9, 0xa0, 0xf0, 0x3b, - 0xfa, 0x40, 0x22, 0x54, 0x6b, 0xa9, 0x1d, 0xc6, 0x61, 0x0a, 0xd3, 0xd3, 0xec, 0x8a, 0xf5, 0x85, - 0x99, 0x2f, 0xcc, 0xee, 0x8f, 0x85, 0xf3, 0xf8, 0xe5, 0xfb, 0x1a, 0xda, 0x94, 0xe1, 0x2b, 0x04, - 0xd9, 0xc0, 0xd3, 0x09, 0x14, 0x3e, 0x23, 0x9f, 0x10, 0xda, 0x9f, 0xc4, 0x6c, 0xd1, 0x4a, 0xb1, - 0x9e, 0xe3, 0xce, 0x48, 0x3a, 0x7c, 0x3b, 0xec, 0x43, 0xc8, 0xcf, 0x3e, 0x9b, 0x04, 0xbe, 0x9a, - 0x04, 0x7e, 0x9a, 0x04, 0x16, 0xff, 0xbb, 0x0f, 0xee, 0x7e, 0x03, 0x00, 0x00, 0xff, 0xff, 0xee, - 0x33, 0x45, 0x4d, 0x56, 0x01, 0x00, 0x00, +var fileDescriptor_http_uri_afe3f719d6326ca8 = []byte{ + // 291 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xc1, 0x4a, 0xc3, 0x40, + 0x10, 0x86, 0x3b, 0x8d, 0xb5, 0x76, 0x3d, 0xb9, 0x08, 0xc6, 0x16, 0xd2, 0x20, 0x08, 0x3d, 0xed, + 0x42, 0x7c, 0x83, 0xe0, 0xa1, 0x17, 0x41, 0x0a, 0x9e, 0xcb, 0xb6, 0x5d, 0xe3, 0x42, 0xdb, 0x59, + 0xb6, 0xb3, 0xc1, 0xbe, 0x89, 0xcf, 0xe0, 0x13, 0xa8, 0xa7, 0x1e, 0x3d, 0xfa, 0x06, 0x4a, 0x6e, + 0x7d, 0x0b, 0x49, 0xd2, 0x5c, 0xf4, 0xf6, 0x33, 0xf3, 0xcd, 0xf0, 0xf1, 0xb3, 0x58, 0xaf, 0x73, + 0xdc, 0x4a, 0x65, 0x8d, 0xcc, 0x13, 0x39, 0x47, 0xa7, 0xe5, 0x13, 0x91, 0x9d, 0x7a, 0x67, 0x84, + 0x75, 0x48, 0xc8, 0xcf, 0x2a, 0x42, 0x28, 0x6b, 0x44, 0x9e, 0x88, 0x92, 0xe8, 0x47, 0x19, 0x62, + 0xb6, 0xd4, 0xb2, 0x02, 0x66, 0xfe, 0x51, 0x2e, 0xbc, 0x53, 0x64, 0x70, 0x5d, 0x9f, 0xf4, 0xcf, + 0x33, 0xcc, 0xb0, 0x8a, 0xb2, 0x4c, 0x87, 0xe9, 0x45, 0xae, 0x96, 0x66, 0xa1, 0x48, 0xcb, 0x26, + 0xd4, 0x8b, 0xab, 0x77, 0x60, 0xdd, 0x31, 0x91, 0x7d, 0x70, 0x86, 0x0f, 0x58, 0xe0, 0x9d, 0x09, + 0x21, 0x86, 0x51, 0x2f, 0xed, 0x7d, 0xec, 0x77, 0xc1, 0x91, 0x6b, 0xc7, 0x30, 0x29, 0xa7, 0xfc, + 0x9a, 0x75, 0xe7, 0x4b, 0xbf, 0x21, 0xed, 0xc2, 0xf6, 0x1f, 0x60, 0xdc, 0x9a, 0x34, 0x3b, 0x7e, + 0xc7, 0xba, 0x64, 0x56, 0x1a, 0x3d, 0x85, 0x41, 0x0c, 0xa3, 0xd3, 0xe4, 0x52, 0xd4, 0xc2, 0xa2, + 0x11, 0x16, 0xb7, 0x07, 0xe1, 0x34, 0x7c, 0xf9, 0x1e, 0x42, 0xf9, 0xa5, 0xf3, 0x0a, 0xed, 0xa4, + 0xd5, 0xa4, 0x13, 0x98, 0x34, 0x3f, 0xd2, 0x01, 0xe3, 0x75, 0x25, 0x76, 0x43, 0x4e, 0xab, 0xd5, + 0x94, 0xb6, 0x56, 0xf3, 0xce, 0xdb, 0x7e, 0x17, 0x40, 0x2a, 0x3f, 0x8b, 0x08, 0xbe, 0x8a, 0x08, + 0x7e, 0x8a, 0x08, 0xd8, 0xd0, 0xa0, 0xa8, 0xea, 0xb2, 0x0e, 0x9f, 0xb7, 0xe2, 0x5f, 0x73, 0xf7, + 0x30, 0x3b, 0xae, 0x1c, 0x6e, 0x7e, 0x03, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xf1, 0x5e, 0xdc, 0x79, + 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.go index 33eeb10734b0..e99b1fcf320b 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.go @@ -41,7 +41,7 @@ func (m *TcpProtocolOptions) Reset() { *m = TcpProtocolOptions{} } func (m *TcpProtocolOptions) String() string { return proto.CompactTextString(m) } func (*TcpProtocolOptions) ProtoMessage() {} func (*TcpProtocolOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_protocol_821e02c837d354b2, []int{0} + return fileDescriptor_protocol_ba1b912989daba33, []int{0} } func (m *TcpProtocolOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -85,7 +85,7 @@ func (m *HttpProtocolOptions) Reset() { *m = HttpProtocolOptions{} } func (m *HttpProtocolOptions) String() string { return proto.CompactTextString(m) } func (*HttpProtocolOptions) ProtoMessage() {} func (*HttpProtocolOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_protocol_821e02c837d354b2, []int{1} + return fileDescriptor_protocol_ba1b912989daba33, []int{1} } func (m *HttpProtocolOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -145,7 +145,7 @@ func (m *Http1ProtocolOptions) Reset() { *m = Http1ProtocolOptions{} } func (m *Http1ProtocolOptions) String() string { return proto.CompactTextString(m) } func (*Http1ProtocolOptions) ProtoMessage() {} func (*Http1ProtocolOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_protocol_821e02c837d354b2, []int{2} + return fileDescriptor_protocol_ba1b912989daba33, []int{2} } func (m *Http1ProtocolOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -230,7 +230,7 @@ func (m *Http2ProtocolOptions) Reset() { *m = Http2ProtocolOptions{} } func (m *Http2ProtocolOptions) String() string { return proto.CompactTextString(m) } func (*Http2ProtocolOptions) ProtoMessage() {} func (*Http2ProtocolOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_protocol_821e02c837d354b2, []int{3} + return fileDescriptor_protocol_ba1b912989daba33, []int{3} } func (m *Http2ProtocolOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -313,7 +313,7 @@ func (m *GrpcProtocolOptions) Reset() { *m = GrpcProtocolOptions{} } func (m *GrpcProtocolOptions) String() string { return proto.CompactTextString(m) } func (*GrpcProtocolOptions) ProtoMessage() {} func (*GrpcProtocolOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_protocol_821e02c837d354b2, []int{4} + return fileDescriptor_protocol_ba1b912989daba33, []int{4} } func (m *GrpcProtocolOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1530,46 +1530,46 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/core/protocol.proto", fileDescriptor_protocol_821e02c837d354b2) + proto.RegisterFile("envoy/api/v2/core/protocol.proto", fileDescriptor_protocol_ba1b912989daba33) } -var fileDescriptor_protocol_821e02c837d354b2 = []byte{ - // 577 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0xc1, 0x6e, 0xd3, 0x4c, - 0x10, 0xc7, 0xe5, 0x2f, 0xfd, 0x4a, 0xd9, 0x96, 0xd2, 0xba, 0x56, 0x6b, 0x02, 0x32, 0x51, 0x00, - 0x11, 0xf5, 0x60, 0xb7, 0xae, 0xc4, 0x9d, 0x14, 0x95, 0x70, 0x40, 0x20, 0x37, 0x05, 0x71, 0x40, - 0xab, 0xcd, 0x7a, 0x93, 0xac, 0xd8, 0x78, 0xad, 0xf5, 0x38, 0x29, 0x7d, 0x12, 0x1e, 0x81, 0x67, - 0xe0, 0x80, 0x38, 0x72, 0xe4, 0x0d, 0x40, 0xb9, 0x71, 0xe6, 0x01, 0x8c, 0xec, 0xdd, 0x44, 0x90, - 0x54, 0x02, 0x71, 0x1b, 0xcd, 0xcc, 0xff, 0xff, 0x9b, 0xb1, 0x67, 0x51, 0x83, 0x25, 0x63, 0xf9, - 0x36, 0x20, 0x29, 0x0f, 0xc6, 0x61, 0x40, 0xa5, 0x62, 0x41, 0xaa, 0x24, 0x48, 0x2a, 0x85, 0x5f, - 0x05, 0xf6, 0x76, 0xd5, 0xe1, 0x93, 0x94, 0xfb, 0xe3, 0xd0, 0x2f, 0x3b, 0xea, 0xde, 0x40, 0xca, - 0x81, 0x30, 0x9d, 0xbd, 0xbc, 0x1f, 0xc4, 0xb9, 0x22, 0xc0, 0x65, 0xa2, 0x25, 0xcb, 0xf5, 0x89, - 0x22, 0x69, 0xca, 0x54, 0x66, 0xea, 0x7b, 0x63, 0x22, 0x78, 0x4c, 0x80, 0x05, 0xb3, 0xc0, 0x14, - 0x9c, 0x81, 0x1c, 0xc8, 0x2a, 0x0c, 0xca, 0x48, 0x67, 0x9b, 0x0e, 0xb2, 0xbb, 0x34, 0x7d, 0x6e, - 0xc6, 0x7a, 0x96, 0x96, 0xa4, 0xac, 0xf9, 0x0a, 0xed, 0x74, 0x00, 0x16, 0xd3, 0x76, 0x1b, 0x6d, - 0xf0, 0x58, 0x30, 0x0c, 0x7c, 0xc4, 0x64, 0x0e, 0xae, 0xd5, 0xb0, 0x5a, 0xeb, 0xe1, 0x0d, 0x5f, - 0x8f, 0xe4, 0xcf, 0x46, 0xf2, 0x1f, 0x99, 0x91, 0xdb, 0x2b, 0xef, 0xbe, 0xde, 0xb6, 0xa2, 0xf5, - 0x52, 0xd4, 0xd5, 0x9a, 0xe6, 0x47, 0x0b, 0x39, 0xa5, 0xf7, 0xe1, 0xa2, 0x79, 0x07, 0xd9, 0x44, - 0x08, 0x39, 0xc1, 0xa4, 0x97, 0x49, 0x91, 0x03, 0xc3, 0xb9, 0x12, 0x06, 0x51, 0x5f, 0x42, 0xb4, - 0xa5, 0x14, 0x2f, 0x88, 0xc8, 0x59, 0xb4, 0x55, 0xa9, 0x1e, 0x1a, 0xd1, 0x99, 0x12, 0xf6, 0x5d, - 0xb4, 0x49, 0x28, 0x65, 0x29, 0xe0, 0x21, 0x40, 0x8a, 0x0f, 0x0f, 0xdc, 0xff, 0x1a, 0x56, 0x6b, - 0x2d, 0xda, 0xd0, 0xd9, 0x8a, 0x7e, 0x60, 0x3f, 0x40, 0x6e, 0xcc, 0xfa, 0x24, 0x17, 0x80, 0x87, - 0x32, 0x03, 0xdc, 0x97, 0x6a, 0xde, 0x5f, 0x6b, 0x58, 0xad, 0xab, 0x91, 0x63, 0xea, 0x1d, 0x99, - 0xc1, 0x89, 0x54, 0x5a, 0xd7, 0xfc, 0x51, 0xd3, 0x0b, 0x84, 0x8b, 0x0b, 0x9c, 0xa0, 0xad, 0x61, - 0x4a, 0xe8, 0x1b, 0x0c, 0xa4, 0x27, 0x18, 0xce, 0xf8, 0x05, 0x33, 0xe3, 0xdf, 0x5a, 0x1a, 0xff, - 0xec, 0x49, 0x02, 0x47, 0xa1, 0x5e, 0x60, 0xb3, 0x52, 0x75, 0x4b, 0xd1, 0x29, 0xbf, 0x60, 0x36, - 0x45, 0xbb, 0x23, 0x72, 0x8e, 0xa9, 0x4c, 0x68, 0xae, 0x14, 0x4b, 0x00, 0x67, 0xa0, 0x18, 0x19, - 0x65, 0xd5, 0x1a, 0x7f, 0x70, 0x6b, 0x5f, 0xff, 0xf0, 0xfd, 0x53, 0x0d, 0xed, 0xaf, 0xb9, 0x45, - 0x51, 0x14, 0x57, 0x5a, 0x56, 0xe4, 0x8c, 0xc8, 0xf9, 0xf1, 0xdc, 0xeb, 0x54, 0x5b, 0xd9, 0x02, - 0xd5, 0x79, 0xc2, 0x81, 0x13, 0x61, 0xdc, 0xf1, 0x84, 0x27, 0xb1, 0x9c, 0xe8, 0xb1, 0x6b, 0x7f, - 0x01, 0xda, 0x2e, 0x41, 0x1b, 0xfb, 0xc8, 0x80, 0x8a, 0xa2, 0x16, 0xed, 0x19, 0x4b, 0x0d, 0x79, - 0x59, 0x19, 0x56, 0x2b, 0x01, 0xf2, 0x66, 0x34, 0x2a, 0x93, 0x84, 0xd1, 0xf2, 0x8b, 0xfd, 0x46, - 0x5c, 0xf9, 0x37, 0xe2, 0x4d, 0x63, 0x7b, 0x3c, 0x77, 0xfd, 0x85, 0x7a, 0x07, 0x5d, 0xd3, 0x17, - 0x65, 0x98, 0xee, 0xff, 0xe6, 0x0c, 0xca, 0xa4, 0x51, 0xd8, 0xf7, 0xd0, 0xa6, 0x6e, 0x1a, 0x31, - 0x20, 0x31, 0x01, 0xe2, 0xae, 0x56, 0x5d, 0x5a, 0xfa, 0xd4, 0x24, 0x9b, 0x80, 0x76, 0x1e, 0xab, - 0x94, 0x2e, 0xfe, 0xf3, 0xd7, 0x68, 0xb7, 0xbc, 0x99, 0x10, 0xcf, 0x1e, 0x36, 0x96, 0xba, 0x62, - 0xfe, 0xfc, 0x7d, 0x7f, 0xe9, 0x85, 0xfb, 0x97, 0x1d, 0x4f, 0xe4, 0x0c, 0x2f, 0xc9, 0xb6, 0xb7, - 0xde, 0x4f, 0x3d, 0xeb, 0xf3, 0xd4, 0xb3, 0xbe, 0x4c, 0x3d, 0xeb, 0xdb, 0xd4, 0xb3, 0x7a, 0xab, - 0x15, 0xe8, 0xe8, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x99, 0xf6, 0xe2, 0xfd, 0x5c, 0x04, 0x00, - 0x00, +var fileDescriptor_protocol_ba1b912989daba33 = []byte{ + // 586 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x4f, 0x4f, 0x13, 0x41, + 0x14, 0xcf, 0x58, 0x44, 0x1c, 0x10, 0x61, 0x69, 0xa0, 0xa2, 0x29, 0x4d, 0xd5, 0xd8, 0x70, 0xd8, + 0x85, 0x25, 0xf1, 0x6e, 0x31, 0x88, 0x07, 0x23, 0x59, 0x40, 0xe3, 0xc1, 0x4c, 0xa6, 0xb3, 0x43, + 0x3b, 0x71, 0xba, 0x6f, 0x32, 0x3b, 0xdb, 0x02, 0x9f, 0xc4, 0x8f, 0xe0, 0x67, 0xf0, 0x60, 0x3c, + 0x7a, 0xf4, 0x1b, 0x68, 0x7a, 0xf3, 0xec, 0x07, 0x58, 0xb3, 0x3b, 0xd3, 0x46, 0x5b, 0x12, 0x8d, + 0xb7, 0x97, 0xf7, 0x7e, 0xff, 0xde, 0xee, 0x1b, 0xdc, 0xe0, 0xc9, 0x00, 0x2e, 0x02, 0xaa, 0x44, + 0x30, 0x08, 0x03, 0x06, 0x9a, 0x07, 0x4a, 0x83, 0x01, 0x06, 0xd2, 0x2f, 0x0b, 0x6f, 0xb5, 0x44, + 0xf8, 0x54, 0x09, 0x7f, 0x10, 0xfa, 0x05, 0x62, 0xb3, 0xde, 0x05, 0xe8, 0x4a, 0x87, 0xec, 0x64, + 0x67, 0x41, 0x9c, 0x69, 0x6a, 0x04, 0x24, 0x96, 0x32, 0x3b, 0x1f, 0x6a, 0xaa, 0x14, 0xd7, 0xa9, + 0x9b, 0x6f, 0x0c, 0xa8, 0x14, 0x31, 0x35, 0x3c, 0x18, 0x17, 0x6e, 0x50, 0xed, 0x42, 0x17, 0xca, + 0x32, 0x28, 0x2a, 0xdb, 0x6d, 0x56, 0xb1, 0x77, 0xc2, 0xd4, 0x91, 0x8b, 0xf5, 0x52, 0x15, 0x4e, + 0x69, 0xf3, 0x0d, 0x5e, 0x3b, 0x34, 0x66, 0xba, 0xed, 0xb5, 0xf1, 0x92, 0x88, 0x25, 0x27, 0x46, + 0xf4, 0x39, 0x64, 0xa6, 0x86, 0x1a, 0xa8, 0xb5, 0x18, 0xde, 0xf1, 0x6d, 0x24, 0x7f, 0x1c, 0xc9, + 0x7f, 0xea, 0x22, 0xb7, 0xe7, 0xde, 0x7f, 0xdb, 0x42, 0xd1, 0x62, 0x41, 0x3a, 0xb1, 0x9c, 0xe6, + 0x27, 0x84, 0xab, 0x85, 0xf6, 0xee, 0xb4, 0xf8, 0x21, 0xf6, 0xa8, 0x94, 0x30, 0x24, 0xb4, 0x93, + 0x82, 0xcc, 0x0c, 0x27, 0x99, 0x96, 0xce, 0x62, 0x73, 0xc6, 0xa2, 0x0d, 0x20, 0x5f, 0x51, 0x99, + 0xf1, 0x68, 0xa5, 0x64, 0x3d, 0x71, 0xa4, 0x53, 0x2d, 0xbd, 0x07, 0x78, 0x99, 0x32, 0xc6, 0x95, + 0x21, 0x3d, 0x63, 0x14, 0xd9, 0xdd, 0xa9, 0x5d, 0x6b, 0xa0, 0xd6, 0x42, 0xb4, 0x64, 0xbb, 0xa5, + 0xfb, 0x8e, 0xf7, 0x18, 0xd7, 0x62, 0x7e, 0x46, 0x33, 0x69, 0x48, 0x0f, 0x52, 0x43, 0xce, 0x40, + 0x4f, 0xf0, 0x95, 0x06, 0x6a, 0xdd, 0x8c, 0xaa, 0x6e, 0x7e, 0x08, 0xa9, 0x39, 0x00, 0x6d, 0x79, + 0xcd, 0x9f, 0x15, 0xbb, 0x40, 0x38, 0xbd, 0xc0, 0x01, 0x5e, 0xe9, 0x29, 0xca, 0xde, 0x11, 0x43, + 0x3b, 0x92, 0x93, 0x54, 0x5c, 0x72, 0x17, 0xff, 0xde, 0x4c, 0xfc, 0xd3, 0xe7, 0x89, 0xd9, 0x0b, + 0xed, 0x02, 0xcb, 0x25, 0xeb, 0xa4, 0x20, 0x1d, 0x8b, 0x4b, 0xee, 0x31, 0xbc, 0xde, 0xa7, 0xe7, + 0x84, 0x41, 0xc2, 0x32, 0xad, 0x79, 0x62, 0x48, 0x6a, 0x34, 0xa7, 0xfd, 0xb4, 0x5c, 0xe3, 0x2f, + 0x6a, 0xed, 0xdb, 0x1f, 0x7f, 0x7c, 0xae, 0xe0, 0xed, 0x85, 0x5a, 0x9e, 0xe7, 0xf9, 0x8d, 0x16, + 0x8a, 0xaa, 0x7d, 0x7a, 0xbe, 0x3f, 0xd1, 0x3a, 0xb6, 0x52, 0x9e, 0xc4, 0x9b, 0x22, 0x11, 0x46, + 0x50, 0xe9, 0xd4, 0xc9, 0x50, 0x24, 0x31, 0x0c, 0x6d, 0xec, 0xca, 0x3f, 0x18, 0xad, 0x16, 0x46, + 0x4b, 0xdb, 0xd8, 0x19, 0xe5, 0x79, 0x25, 0xda, 0x70, 0x92, 0xd6, 0xe4, 0x75, 0x29, 0x58, 0xae, + 0x64, 0x70, 0x7d, 0xec, 0xc6, 0x20, 0x49, 0x38, 0x2b, 0xbe, 0xd8, 0x1f, 0x8e, 0x73, 0xff, 0xe7, + 0x78, 0xd7, 0xc9, 0xee, 0x4f, 0x54, 0x7f, 0x73, 0xbd, 0x8f, 0x6f, 0xd9, 0x8b, 0x72, 0x9e, 0xb5, + 0xeb, 0xee, 0x0c, 0x8a, 0xa6, 0x63, 0x78, 0x0f, 0xf1, 0xb2, 0x05, 0xf5, 0xb9, 0xa1, 0x31, 0x35, + 0xb4, 0x36, 0x5f, 0xa2, 0x2c, 0xf5, 0x85, 0x6b, 0x36, 0x0d, 0x5e, 0x7b, 0xa6, 0x15, 0x9b, 0xfe, + 0xe7, 0x6f, 0xf1, 0x7a, 0x71, 0x33, 0x21, 0x19, 0x3f, 0x6c, 0x02, 0x76, 0xe2, 0xfe, 0xfc, 0x23, + 0x7f, 0xe6, 0x85, 0xfb, 0x57, 0x1d, 0x4f, 0x54, 0xed, 0x5d, 0xd1, 0x6d, 0xef, 0x7d, 0x18, 0xd5, + 0xd1, 0x97, 0x51, 0x1d, 0x7d, 0x1d, 0xd5, 0xd1, 0xf7, 0x51, 0x1d, 0xe1, 0x2d, 0x01, 0x56, 0x52, + 0x69, 0x38, 0xbf, 0x98, 0x55, 0x3f, 0x42, 0x9d, 0xf9, 0x32, 0xcb, 0xde, 0xaf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xec, 0xbd, 0x59, 0xf0, 0x7f, 0x04, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.go index bbfc3eff78b3..30a6a8cb4e24 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.go @@ -70,7 +70,7 @@ func (m *DiscoveryRequest) Reset() { *m = DiscoveryRequest{} } func (m *DiscoveryRequest) String() string { return proto.CompactTextString(m) } func (*DiscoveryRequest) ProtoMessage() {} func (*DiscoveryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_discovery_0b15f11441efc7a2, []int{0} + return fileDescriptor_discovery_9492033681c56a51, []int{0} } func (m *DiscoveryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -183,7 +183,7 @@ func (m *DiscoveryResponse) Reset() { *m = DiscoveryResponse{} } func (m *DiscoveryResponse) String() string { return proto.CompactTextString(m) } func (*DiscoveryResponse) ProtoMessage() {} func (*DiscoveryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_discovery_0b15f11441efc7a2, []int{1} + return fileDescriptor_discovery_9492033681c56a51, []int{1} } func (m *DiscoveryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -322,7 +322,7 @@ func (m *IncrementalDiscoveryRequest) Reset() { *m = IncrementalDiscover func (m *IncrementalDiscoveryRequest) String() string { return proto.CompactTextString(m) } func (*IncrementalDiscoveryRequest) ProtoMessage() {} func (*IncrementalDiscoveryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_discovery_0b15f11441efc7a2, []int{2} + return fileDescriptor_discovery_9492033681c56a51, []int{2} } func (m *IncrementalDiscoveryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -421,7 +421,7 @@ func (m *IncrementalDiscoveryResponse) Reset() { *m = IncrementalDiscove func (m *IncrementalDiscoveryResponse) String() string { return proto.CompactTextString(m) } func (*IncrementalDiscoveryResponse) ProtoMessage() {} func (*IncrementalDiscoveryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_discovery_0b15f11441efc7a2, []int{3} + return fileDescriptor_discovery_9492033681c56a51, []int{3} } func (m *IncrementalDiscoveryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -493,7 +493,7 @@ func (m *Resource) Reset() { *m = Resource{} } func (m *Resource) String() string { return proto.CompactTextString(m) } func (*Resource) ProtoMessage() {} func (*Resource) Descriptor() ([]byte, []int) { - return fileDescriptor_discovery_0b15f11441efc7a2, []int{4} + return fileDescriptor_discovery_9492033681c56a51, []int{4} } func (m *Resource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2457,49 +2457,50 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/discovery.proto", fileDescriptor_discovery_0b15f11441efc7a2) -} - -var fileDescriptor_discovery_0b15f11441efc7a2 = []byte{ - // 633 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xc1, 0x6a, 0xdb, 0x4c, - 0x10, 0xfe, 0xd7, 0x76, 0x1c, 0x67, 0x9d, 0xfc, 0x24, 0x5b, 0x93, 0x28, 0x6e, 0x70, 0x5d, 0x43, - 0xc1, 0x10, 0x58, 0x15, 0x97, 0x42, 0x08, 0xbd, 0x34, 0xa4, 0x85, 0xf4, 0x90, 0x83, 0x42, 0x72, - 0xe8, 0x45, 0xac, 0xe5, 0x89, 0x11, 0x95, 0x77, 0xd5, 0x5d, 0x49, 0xa0, 0x6b, 0xce, 0x7d, 0x90, - 0xbe, 0x42, 0xdf, 0x20, 0x97, 0x42, 0x9f, 0xa0, 0x14, 0x3f, 0x49, 0xd1, 0x6a, 0x37, 0xb6, 0x1a, - 0x13, 0x7c, 0xdb, 0x99, 0xf9, 0xf6, 0xdb, 0x99, 0xf9, 0x3e, 0x09, 0x1f, 0x01, 0xcf, 0x44, 0xee, - 0xb2, 0x38, 0x74, 0xb3, 0x91, 0x3b, 0x09, 0x55, 0x20, 0x32, 0x90, 0x39, 0x8d, 0xa5, 0x48, 0x04, - 0xd9, 0xd6, 0x55, 0xca, 0xe2, 0x90, 0x66, 0xa3, 0x6e, 0x15, 0x1b, 0x08, 0x09, 0xee, 0x98, 0x29, - 0x28, 0xb1, 0xdd, 0xc3, 0xa9, 0x10, 0xd3, 0x08, 0x5c, 0x1d, 0x8d, 0xd3, 0x5b, 0x97, 0x71, 0x43, - 0xd3, 0x3d, 0x30, 0x25, 0x19, 0x07, 0xae, 0x4a, 0x58, 0x92, 0x2a, 0x53, 0xe8, 0x4c, 0xc5, 0x54, - 0xe8, 0xa3, 0x5b, 0x9c, 0xca, 0xec, 0xe0, 0xae, 0x86, 0x77, 0xcf, 0x6d, 0x27, 0x1e, 0x7c, 0x4d, - 0x41, 0x25, 0xe4, 0x25, 0xde, 0xce, 0x40, 0xaa, 0x50, 0x70, 0x3f, 0xe4, 0xb7, 0xc2, 0x41, 0x7d, - 0x34, 0xdc, 0xf2, 0xda, 0x26, 0x77, 0xc1, 0x6f, 0x05, 0x39, 0xc6, 0x0d, 0x2e, 0x26, 0xe0, 0xd4, - 0xfa, 0x68, 0xd8, 0x1e, 0x1d, 0xd0, 0xe5, 0xe6, 0x69, 0xd1, 0x2e, 0xbd, 0x14, 0x13, 0xf0, 0x34, - 0x88, 0xbc, 0xc2, 0xff, 0x4b, 0x50, 0x22, 0x95, 0x01, 0xf8, 0x9c, 0xcd, 0x40, 0x39, 0xf5, 0x7e, - 0x7d, 0xb8, 0xe5, 0xed, 0xd8, 0xec, 0x65, 0x91, 0x24, 0x87, 0xb8, 0x95, 0xe4, 0x31, 0xf8, 0xa9, - 0x8c, 0x9c, 0x86, 0x7e, 0x72, 0xb3, 0x88, 0xaf, 0x65, 0x64, 0x18, 0x62, 0xc1, 0x15, 0xf8, 0x5c, - 0xf0, 0x00, 0x9c, 0x0d, 0x0d, 0xd8, 0xb1, 0xd9, 0xcb, 0x22, 0x49, 0xde, 0xe2, 0x6d, 0x90, 0x52, - 0x48, 0x7f, 0x02, 0x09, 0x0b, 0x23, 0xa7, 0xa9, 0xbb, 0x23, 0xb4, 0xdc, 0x09, 0x95, 0x71, 0x40, - 0xaf, 0xf4, 0x4e, 0xbc, 0xb6, 0xc6, 0x9d, 0x6b, 0xd8, 0xe0, 0x07, 0xc2, 0x7b, 0x4b, 0x4b, 0x28, - 0x19, 0xd7, 0xd9, 0xc2, 0x09, 0xde, 0xb2, 0x23, 0x28, 0xa7, 0xd6, 0xaf, 0x0f, 0xdb, 0xa3, 0x8e, - 0x7d, 0xcc, 0x6a, 0x43, 0xdf, 0xf3, 0xfc, 0xac, 0x71, 0xff, 0xfb, 0xc5, 0x7f, 0xde, 0x02, 0x4c, - 0xf6, 0x71, 0x33, 0x60, 0x9c, 0xc9, 0xdc, 0xa9, 0xf7, 0xd1, 0xb0, 0xe5, 0x99, 0xe8, 0xa9, 0x1d, - 0x74, 0xf0, 0xc6, 0xf2, 0xe8, 0x65, 0x30, 0xf8, 0xd6, 0xc0, 0xcf, 0x2f, 0x78, 0x20, 0x61, 0x06, - 0x3c, 0x61, 0xd1, 0x23, 0x2d, 0xad, 0x50, 0x68, 0x1d, 0xa1, 0x96, 0x5f, 0xaf, 0x55, 0x5f, 0x3f, - 0xc1, 0x4e, 0x55, 0x43, 0x5f, 0xa5, 0x63, 0x15, 0xc8, 0x70, 0x0c, 0x46, 0xcd, 0xfd, 0x8a, 0x9a, - 0x57, 0xb6, 0x4a, 0xde, 0xe1, 0xee, 0x3f, 0x37, 0x53, 0xbe, 0xb8, 0xdb, 0xd0, 0x77, 0x9d, 0xca, - 0xdd, 0xeb, 0x45, 0x9d, 0xdc, 0x21, 0x7c, 0x18, 0xf2, 0x30, 0x09, 0x59, 0xe4, 0x3f, 0xd0, 0x18, - 0x0d, 0x94, 0xb3, 0xa1, 0x77, 0xfe, 0xb1, 0x3a, 0xd5, 0x13, 0xeb, 0xa0, 0x17, 0x25, 0x95, 0x67, - 0x98, 0x6e, 0x0c, 0xd1, 0x07, 0x9e, 0xc8, 0xdc, 0x3b, 0x08, 0x57, 0x57, 0x57, 0xd8, 0xaf, 0xb9, - 0x8e, 0xfd, 0x36, 0xd7, 0xb2, 0x5f, 0xf7, 0x13, 0x3e, 0x7a, 0xaa, 0x2d, 0xb2, 0x8b, 0xeb, 0x5f, - 0x20, 0x37, 0xfe, 0x2b, 0x8e, 0x85, 0x15, 0x32, 0x16, 0xa5, 0x60, 0x44, 0x2a, 0x83, 0xd3, 0xda, - 0x09, 0x1a, 0xfc, 0x44, 0x05, 0xd9, 0xaa, 0xf9, 0x8d, 0xab, 0x29, 0x7e, 0xa6, 0x72, 0x95, 0xc0, - 0xcc, 0x5f, 0x61, 0xee, 0xbd, 0xb2, 0x74, 0xb3, 0x64, 0xf1, 0xd3, 0xc7, 0x16, 0xdf, 0xaf, 0xae, - 0xdb, 0x36, 0xfd, 0xd8, 0xe4, 0x2b, 0x1d, 0x4b, 0x8e, 0xf1, 0x9e, 0x84, 0x99, 0xc8, 0x60, 0xe2, - 0x2f, 0x98, 0x9b, 0xda, 0x06, 0xbb, 0xa6, 0x60, 0x29, 0xd5, 0xe0, 0x06, 0xb7, 0x6c, 0x40, 0x1c, - 0xbc, 0x69, 0x7a, 0x36, 0xed, 0xda, 0x90, 0xbc, 0xc6, 0x2d, 0x4b, 0x65, 0xfe, 0x48, 0x2b, 0x3f, - 0x43, 0xef, 0x01, 0x75, 0xd6, 0xf9, 0x3e, 0xef, 0xa1, 0xfb, 0x79, 0x0f, 0xfd, 0x9a, 0xf7, 0xd0, - 0x9f, 0x79, 0x0f, 0x7d, 0xae, 0x65, 0xa3, 0x71, 0x53, 0xa3, 0xdf, 0xfc, 0x0d, 0x00, 0x00, 0xff, - 0xff, 0x29, 0x86, 0xc0, 0x01, 0xaa, 0x05, 0x00, 0x00, + proto.RegisterFile("envoy/api/v2/discovery.proto", fileDescriptor_discovery_9492033681c56a51) +} + +var fileDescriptor_discovery_9492033681c56a51 = []byte{ + // 646 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdf, 0x6a, 0xdb, 0x3e, + 0x14, 0xfe, 0x29, 0x49, 0xd3, 0x54, 0x69, 0x7f, 0xb4, 0x5a, 0x69, 0xdd, 0xac, 0x64, 0x59, 0x60, + 0x10, 0x28, 0xd8, 0x23, 0x63, 0x50, 0xca, 0x6e, 0x56, 0xba, 0x41, 0x77, 0x51, 0x86, 0x4b, 0x7b, + 0xb1, 0x1b, 0xa3, 0x38, 0xa7, 0x41, 0xcc, 0x91, 0x3c, 0xc9, 0x36, 0xf3, 0x6d, 0xaf, 0xf7, 0x20, + 0x7b, 0x85, 0xbd, 0x41, 0x6f, 0x06, 0x7b, 0x82, 0x31, 0xf2, 0x24, 0xc3, 0xb2, 0xd4, 0xc4, 0x6b, + 0x28, 0xb9, 0xd3, 0xf9, 0xa3, 0x4f, 0xe7, 0x7c, 0xdf, 0x67, 0xe3, 0x43, 0xe0, 0x99, 0xc8, 0x3d, + 0x1a, 0x33, 0x2f, 0x1b, 0x7a, 0x63, 0xa6, 0x42, 0x91, 0x81, 0xcc, 0xdd, 0x58, 0x8a, 0x44, 0x90, + 0x4d, 0x5d, 0x75, 0x69, 0xcc, 0xdc, 0x6c, 0xd8, 0xa9, 0xf6, 0x86, 0x42, 0x82, 0x37, 0xa2, 0x0a, + 0xca, 0xde, 0xce, 0xc1, 0x44, 0x88, 0x49, 0x04, 0x9e, 0x8e, 0x46, 0xe9, 0x8d, 0x47, 0xb9, 0x81, + 0xe9, 0xec, 0x9b, 0x92, 0x8c, 0x43, 0x4f, 0x25, 0x34, 0x49, 0x95, 0x29, 0xec, 0x4e, 0xc4, 0x44, + 0xe8, 0xa3, 0x57, 0x9c, 0xca, 0x6c, 0xff, 0xb6, 0x86, 0xb7, 0xcf, 0xec, 0x24, 0x3e, 0x7c, 0x49, + 0x41, 0x25, 0xe4, 0x39, 0xde, 0xcc, 0x40, 0x2a, 0x26, 0x78, 0xc0, 0xf8, 0x8d, 0x70, 0x50, 0x0f, + 0x0d, 0x36, 0xfc, 0xb6, 0xc9, 0x9d, 0xf3, 0x1b, 0x41, 0x8e, 0x70, 0x83, 0x8b, 0x31, 0x38, 0xb5, + 0x1e, 0x1a, 0xb4, 0x87, 0xfb, 0xee, 0xe2, 0xf0, 0x6e, 0x31, 0xae, 0x7b, 0x21, 0xc6, 0xe0, 0xeb, + 0x26, 0xf2, 0x02, 0xff, 0x2f, 0x41, 0x89, 0x54, 0x86, 0x10, 0x70, 0x3a, 0x05, 0xe5, 0xd4, 0x7b, + 0xf5, 0xc1, 0x86, 0xbf, 0x65, 0xb3, 0x17, 0x45, 0x92, 0x1c, 0xe0, 0x56, 0x92, 0xc7, 0x10, 0xa4, + 0x32, 0x72, 0x1a, 0xfa, 0xc9, 0xf5, 0x22, 0xbe, 0x92, 0x91, 0x41, 0x88, 0x05, 0x57, 0x10, 0x70, + 0xc1, 0x43, 0x70, 0xd6, 0x74, 0xc3, 0x96, 0xcd, 0x5e, 0x14, 0x49, 0xf2, 0x1a, 0x6f, 0x82, 0x94, + 0x42, 0x06, 0x63, 0x48, 0x28, 0x8b, 0x9c, 0xa6, 0x9e, 0x8e, 0xb8, 0x25, 0x27, 0xae, 0x8c, 0x43, + 0xf7, 0x52, 0x73, 0xe2, 0xb7, 0x75, 0xdf, 0x99, 0x6e, 0xeb, 0xff, 0x40, 0x78, 0x67, 0x81, 0x84, + 0x12, 0x71, 0x15, 0x16, 0x8e, 0xf1, 0x86, 0x5d, 0x41, 0x39, 0xb5, 0x5e, 0x7d, 0xd0, 0x1e, 0xee, + 0xda, 0xc7, 0xac, 0x36, 0xee, 0x5b, 0x9e, 0x9f, 0x36, 0xee, 0x7e, 0x3f, 0xfb, 0xcf, 0x9f, 0x37, + 0x93, 0x3d, 0xdc, 0x0c, 0x29, 0xa7, 0x32, 0x77, 0xea, 0x3d, 0x34, 0x68, 0xf9, 0x26, 0x7a, 0x8c, + 0x83, 0x5d, 0xbc, 0xb6, 0xb8, 0x7a, 0x19, 0xf4, 0xbf, 0x35, 0xf0, 0xd3, 0x73, 0x1e, 0x4a, 0x98, + 0x02, 0x4f, 0x68, 0xf4, 0x40, 0x4b, 0x2b, 0x14, 0x5a, 0x45, 0xa8, 0xc5, 0xd7, 0x6b, 0xd5, 0xd7, + 0x8f, 0xb1, 0x53, 0xd5, 0x30, 0x50, 0xe9, 0x48, 0x85, 0x92, 0x8d, 0xc0, 0xa8, 0xb9, 0x57, 0x51, + 0xf3, 0xd2, 0x56, 0xc9, 0x1b, 0xdc, 0xf9, 0xe7, 0x66, 0xca, 0xe7, 0x77, 0x1b, 0xfa, 0xae, 0x53, + 0xb9, 0x7b, 0x35, 0xaf, 0x93, 0x5b, 0x84, 0x0f, 0x18, 0x67, 0x09, 0xa3, 0x51, 0x70, 0x0f, 0x63, + 0x34, 0x50, 0xce, 0x9a, 0xe6, 0xfc, 0x7d, 0x75, 0xab, 0x47, 0xe8, 0x70, 0xcf, 0x4b, 0x28, 0xdf, + 0x20, 0x5d, 0x1b, 0xa0, 0x77, 0x3c, 0x91, 0xb9, 0xbf, 0xcf, 0x96, 0x57, 0x97, 0xd8, 0xaf, 0xb9, + 0x8a, 0xfd, 0xd6, 0x57, 0xb2, 0x5f, 0xe7, 0x03, 0x3e, 0x7c, 0x6c, 0x2c, 0xb2, 0x8d, 0xeb, 0x9f, + 0x21, 0x37, 0xfe, 0x2b, 0x8e, 0x85, 0x15, 0x32, 0x1a, 0xa5, 0x60, 0x44, 0x2a, 0x83, 0x93, 0xda, + 0x31, 0xea, 0xff, 0x44, 0x05, 0xd8, 0xb2, 0xfd, 0x8d, 0xab, 0x5d, 0xfc, 0x44, 0xe5, 0x2a, 0x81, + 0x69, 0xb0, 0xc4, 0xdc, 0x3b, 0x65, 0xe9, 0x7a, 0xc1, 0xe2, 0x27, 0x0f, 0x2d, 0xbe, 0x57, 0xa5, + 0xdb, 0x0e, 0xfd, 0xd0, 0xe4, 0x4b, 0x1d, 0x4b, 0x8e, 0xf0, 0x8e, 0x84, 0xa9, 0xc8, 0x60, 0x1c, + 0xcc, 0x91, 0x9b, 0xda, 0x06, 0xdb, 0xa6, 0x60, 0x21, 0x55, 0xff, 0x1a, 0xb7, 0x6c, 0x40, 0x1c, + 0xbc, 0x6e, 0x66, 0x36, 0xe3, 0xda, 0x90, 0xbc, 0xc4, 0x2d, 0x0b, 0x65, 0xfe, 0x48, 0x4b, 0x3f, + 0x43, 0xff, 0xbe, 0xeb, 0x74, 0xf8, 0x7d, 0xd6, 0x45, 0x77, 0xb3, 0x2e, 0xfa, 0x35, 0xeb, 0xa2, + 0x3f, 0xb3, 0x2e, 0xc2, 0x1d, 0x26, 0xca, 0xbd, 0x62, 0x29, 0xbe, 0xe6, 0x95, 0x15, 0x3f, 0xa2, + 0x4f, 0xb5, 0x6c, 0x38, 0x6a, 0x6a, 0xac, 0x57, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x18, + 0xee, 0xdd, 0xc8, 0x05, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.go index 93337f0aa6be..b6090717fea4 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.go @@ -49,6 +49,8 @@ type ClusterLoadAssignment struct { ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` // List of endpoints to load balance to. Endpoints []endpoint.LocalityLbEndpoints `protobuf:"bytes,2,rep,name=endpoints,proto3" json:"endpoints"` + // Map of named endpoints that can be referenced in LocalityLbEndpoints. + NamedEndpoints map[string]*endpoint.Endpoint `protobuf:"bytes,5,rep,name=named_endpoints,json=namedEndpoints,proto3" json:"named_endpoints,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Load balancing policy settings. Policy *ClusterLoadAssignment_Policy `protobuf:"bytes,4,opt,name=policy,proto3" json:"policy,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -60,7 +62,7 @@ func (m *ClusterLoadAssignment) Reset() { *m = ClusterLoadAssignment{} } func (m *ClusterLoadAssignment) String() string { return proto.CompactTextString(m) } func (*ClusterLoadAssignment) ProtoMessage() {} func (*ClusterLoadAssignment) Descriptor() ([]byte, []int) { - return fileDescriptor_eds_54f904bbf5198003, []int{0} + return fileDescriptor_eds_c8a7199540478c60, []int{0} } func (m *ClusterLoadAssignment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -103,6 +105,13 @@ func (m *ClusterLoadAssignment) GetEndpoints() []endpoint.LocalityLbEndpoints { return nil } +func (m *ClusterLoadAssignment) GetNamedEndpoints() map[string]*endpoint.Endpoint { + if m != nil { + return m.NamedEndpoints + } + return nil +} + func (m *ClusterLoadAssignment) GetPolicy() *ClusterLoadAssignment_Policy { if m != nil { return m.Policy @@ -156,7 +165,7 @@ func (m *ClusterLoadAssignment_Policy) Reset() { *m = ClusterLoadAssignm func (m *ClusterLoadAssignment_Policy) String() string { return proto.CompactTextString(m) } func (*ClusterLoadAssignment_Policy) ProtoMessage() {} func (*ClusterLoadAssignment_Policy) Descriptor() ([]byte, []int) { - return fileDescriptor_eds_54f904bbf5198003, []int{0, 0} + return fileDescriptor_eds_c8a7199540478c60, []int{0, 1} } func (m *ClusterLoadAssignment_Policy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -215,7 +224,7 @@ func (m *ClusterLoadAssignment_Policy_DropOverload) Reset() { func (m *ClusterLoadAssignment_Policy_DropOverload) String() string { return proto.CompactTextString(m) } func (*ClusterLoadAssignment_Policy_DropOverload) ProtoMessage() {} func (*ClusterLoadAssignment_Policy_DropOverload) Descriptor() ([]byte, []int) { - return fileDescriptor_eds_54f904bbf5198003, []int{0, 0, 0} + return fileDescriptor_eds_c8a7199540478c60, []int{0, 1, 0} } func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -260,6 +269,7 @@ func (m *ClusterLoadAssignment_Policy_DropOverload) GetDropPercentage() *_type.F func init() { proto.RegisterType((*ClusterLoadAssignment)(nil), "envoy.api.v2.ClusterLoadAssignment") + proto.RegisterMapType((map[string]*endpoint.Endpoint)(nil), "envoy.api.v2.ClusterLoadAssignment.NamedEndpointsEntry") proto.RegisterType((*ClusterLoadAssignment_Policy)(nil), "envoy.api.v2.ClusterLoadAssignment.Policy") proto.RegisterType((*ClusterLoadAssignment_Policy_DropOverload)(nil), "envoy.api.v2.ClusterLoadAssignment.Policy.DropOverload") } @@ -293,6 +303,14 @@ func (this *ClusterLoadAssignment) Equal(that interface{}) bool { return false } } + if len(this.NamedEndpoints) != len(that1.NamedEndpoints) { + return false + } + for i := range this.NamedEndpoints { + if !this.NamedEndpoints[i].Equal(that1.NamedEndpoints[i]) { + return false + } + } if !this.Policy.Equal(that1.Policy) { return false } @@ -552,6 +570,34 @@ func (m *ClusterLoadAssignment) MarshalTo(dAtA []byte) (int, error) { } i += n1 } + if len(m.NamedEndpoints) > 0 { + for k, _ := range m.NamedEndpoints { + dAtA[i] = 0x2a + i++ + v := m.NamedEndpoints[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovEds(uint64(msgSize)) + } + mapSize := 1 + len(k) + sovEds(uint64(len(k))) + msgSize + i = encodeVarintEds(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintEds(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintEds(dAtA, i, uint64(v.Size())) + n2, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + } + } + } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -589,11 +635,11 @@ func (m *ClusterLoadAssignment_Policy) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintEds(dAtA, i, uint64(m.OverprovisioningFactor.Size())) - n2, err := m.OverprovisioningFactor.MarshalTo(dAtA[i:]) + n3, err := m.OverprovisioningFactor.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n2 + i += n3 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -626,11 +672,11 @@ func (m *ClusterLoadAssignment_Policy_DropOverload) MarshalTo(dAtA []byte) (int, dAtA[i] = 0x12 i++ i = encodeVarintEds(dAtA, i, uint64(m.DropPercentage.Size())) - n3, err := m.DropPercentage.MarshalTo(dAtA[i:]) + n4, err := m.DropPercentage.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n3 + i += n4 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -667,6 +713,19 @@ func (m *ClusterLoadAssignment) Size() (n int) { l = m.Policy.Size() n += 1 + l + sovEds(uint64(l)) } + if len(m.NamedEndpoints) > 0 { + for k, v := range m.NamedEndpoints { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovEds(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovEds(uint64(len(k))) + l + n += mapEntrySize + 1 + sovEds(uint64(mapEntrySize)) + } + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -850,6 +909,129 @@ func (m *ClusterLoadAssignment) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NamedEndpoints", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEds + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEds + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NamedEndpoints == nil { + m.NamedEndpoints = make(map[string]*endpoint.Endpoint) + } + var mapkey string + var mapvalue *endpoint.Endpoint + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEds + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEds + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthEds + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEds + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthEds + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthEds + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &endpoint.Endpoint{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipEds(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthEds + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NamedEndpoints[mapkey] = mapvalue + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEds(dAtA[iNdEx:]) @@ -1205,44 +1387,49 @@ var ( ErrIntOverflowEds = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("envoy/api/v2/eds.proto", fileDescriptor_eds_54f904bbf5198003) } - -var fileDescriptor_eds_54f904bbf5198003 = []byte{ - // 562 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0x41, 0x8b, 0xd3, 0x40, - 0x14, 0xde, 0xc9, 0x96, 0x65, 0x77, 0xb6, 0xee, 0x4a, 0xd4, 0x6d, 0x08, 0x35, 0x5b, 0x8a, 0x42, - 0x29, 0x92, 0x48, 0xf7, 0x20, 0xec, 0xcd, 0xba, 0x16, 0x94, 0xb2, 0x96, 0x2c, 0x8a, 0x27, 0xeb, - 0x34, 0x79, 0x1b, 0x07, 0xd2, 0x99, 0x71, 0x32, 0x8d, 0xe4, 0xe0, 0xc5, 0x93, 0x77, 0xff, 0x84, - 0xe0, 0x3f, 0xf0, 0xe4, 0x71, 0x6f, 0x0a, 0xde, 0x45, 0x8a, 0x17, 0xf1, 0x4f, 0x48, 0x93, 0x49, - 0x6c, 0x5d, 0x05, 0x0f, 0xde, 0x5e, 0xe6, 0x7b, 0xdf, 0xc7, 0xf7, 0xde, 0xf7, 0x82, 0xf7, 0x80, - 0xa5, 0x3c, 0xf3, 0x88, 0xa0, 0x5e, 0xda, 0xf3, 0x20, 0x4c, 0x5c, 0x21, 0xb9, 0xe2, 0x66, 0x3d, - 0x7f, 0x77, 0x89, 0xa0, 0x6e, 0xda, 0xb3, 0x9b, 0x2b, 0x5d, 0x21, 0x4d, 0x02, 0x9e, 0x82, 0xcc, - 0x8a, 0x5e, 0xfb, 0xda, 0xaa, 0x06, 0x0b, 0x05, 0xa7, 0x4c, 0x55, 0x85, 0xee, 0xb2, 0x8a, 0x2e, - 0x95, 0x09, 0xf0, 0x04, 0xc8, 0x00, 0x2a, 0xa4, 0x19, 0x71, 0x1e, 0xc5, 0x90, 0x0b, 0x10, 0xc6, - 0xb8, 0x22, 0x8a, 0x72, 0xa6, 0x9d, 0xd8, 0x8d, 0x94, 0xc4, 0x34, 0x24, 0x0a, 0xbc, 0xb2, 0xd0, - 0xc0, 0xe5, 0x88, 0x47, 0x3c, 0x2f, 0xbd, 0x45, 0xa5, 0x5f, 0x1d, 0x2d, 0x96, 0x7f, 0x4d, 0x66, - 0xa7, 0xde, 0x0b, 0x49, 0x84, 0x00, 0xa9, 0xe5, 0xda, 0xef, 0x6a, 0xf8, 0xca, 0x9d, 0x78, 0x96, - 0x28, 0x90, 0x43, 0x4e, 0xc2, 0xdb, 0x49, 0x42, 0x23, 0x36, 0x05, 0xa6, 0xcc, 0x1b, 0xb8, 0x1e, - 0x14, 0xc0, 0x98, 0x91, 0x29, 0x58, 0xa8, 0x85, 0x3a, 0x5b, 0xfd, 0xad, 0xf7, 0xdf, 0x3f, 0xac, - 0xd7, 0xa4, 0xd1, 0x42, 0xfe, 0xb6, 0x86, 0x8f, 0xc9, 0x14, 0xcc, 0x63, 0xbc, 0x55, 0x0e, 0x98, - 0x58, 0x46, 0x6b, 0xbd, 0xb3, 0xdd, 0xeb, 0xba, 0xcb, 0x4b, 0x73, 0xab, 0xf9, 0x87, 0x3c, 0x20, - 0x31, 0x55, 0xd9, 0x70, 0x72, 0xb7, 0x64, 0xf4, 0x6b, 0x67, 0x5f, 0xf6, 0xd7, 0xfc, 0x5f, 0x12, - 0x66, 0x1f, 0x6f, 0x08, 0x1e, 0xd3, 0x20, 0xb3, 0x6a, 0x2d, 0x74, 0x5e, 0xec, 0x8f, 0x96, 0xdd, - 0x51, 0xce, 0xf0, 0x35, 0xd3, 0xfe, 0x68, 0xe0, 0x8d, 0xe2, 0xc9, 0x7c, 0x82, 0x77, 0x42, 0xc9, - 0xc5, 0x78, 0x91, 0x53, 0xcc, 0x49, 0x58, 0x7a, 0xbc, 0xf5, 0xef, 0xb2, 0xee, 0x91, 0xe4, 0xe2, - 0x81, 0xe6, 0xfb, 0x17, 0xc2, 0xa5, 0xaf, 0xc4, 0x7c, 0x8a, 0x1b, 0x0b, 0x69, 0x21, 0x79, 0x4a, - 0x13, 0xca, 0x19, 0x65, 0xd1, 0xf8, 0x94, 0x04, 0x8a, 0x4b, 0x6b, 0x3d, 0xf7, 0xdf, 0x74, 0x8b, - 0x20, 0xdc, 0x32, 0x08, 0xf7, 0xe1, 0x3d, 0xa6, 0x0e, 0x7a, 0x8f, 0x48, 0x3c, 0x03, 0xbd, 0xd5, - 0xae, 0xd1, 0x5a, 0xf3, 0xf7, 0x7e, 0xd7, 0x19, 0xe4, 0x32, 0xf6, 0x4b, 0x5c, 0x5f, 0x36, 0x60, - 0x5e, 0xc7, 0x9b, 0x01, 0x51, 0x10, 0x71, 0x99, 0x9d, 0x8f, 0xa6, 0x82, 0xcc, 0x01, 0xde, 0xcd, - 0x07, 0xd7, 0x27, 0x46, 0x22, 0xb0, 0x8c, 0xdc, 0xd0, 0x55, 0x3d, 0xf9, 0xe2, 0x00, 0xdd, 0x81, - 0x24, 0xc1, 0xe2, 0xc8, 0x48, 0x3c, 0x2a, 0xfa, 0xfc, 0x7c, 0x5d, 0xa3, 0x8a, 0x74, 0xbf, 0xb6, - 0x89, 0x2e, 0x1a, 0xbd, 0x1f, 0x08, 0x5b, 0x65, 0x68, 0x47, 0xe5, 0xd9, 0x9f, 0x80, 0x4c, 0x69, - 0x00, 0xe6, 0x63, 0xbc, 0x7b, 0xa2, 0x24, 0x90, 0x69, 0x15, 0xab, 0xe9, 0xac, 0xae, 0xb7, 0xa2, - 0xf8, 0xf0, 0x7c, 0x06, 0x89, 0xb2, 0xf7, 0xff, 0x8a, 0x27, 0x82, 0xb3, 0x04, 0xda, 0x6b, 0x1d, - 0x74, 0x13, 0x99, 0x33, 0xbc, 0x33, 0x00, 0x15, 0x3c, 0xfb, 0x8f, 0xc2, 0xed, 0x57, 0x9f, 0xbf, - 0xbd, 0x31, 0x9a, 0xed, 0xc6, 0xca, 0x1f, 0x7c, 0x58, 0x1d, 0xe0, 0x21, 0xea, 0xf6, 0x2f, 0xbd, - 0x9d, 0x3b, 0xe8, 0x6c, 0xee, 0xa0, 0x4f, 0x73, 0x07, 0x7d, 0x9d, 0x3b, 0xe8, 0x35, 0x42, 0x93, - 0x8d, 0x3c, 0xc0, 0x83, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x05, 0x1a, 0x1d, 0x66, 0x2a, 0x04, - 0x00, 0x00, +func init() { proto.RegisterFile("envoy/api/v2/eds.proto", fileDescriptor_eds_c8a7199540478c60) } + +var fileDescriptor_eds_c8a7199540478c60 = []byte{ + // 643 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xc1, 0x4f, 0xd4, 0x4e, + 0x14, 0x66, 0xba, 0x0b, 0x81, 0x81, 0x1f, 0x90, 0xf9, 0x29, 0x34, 0xcd, 0xba, 0x6c, 0x36, 0x9a, + 0x10, 0x62, 0x5a, 0x5d, 0x62, 0x30, 0xdc, 0x5c, 0x61, 0x13, 0x0d, 0xc1, 0x4d, 0x89, 0xc6, 0x93, + 0xcb, 0x6c, 0x3b, 0xd4, 0x89, 0xdd, 0x99, 0x71, 0x3a, 0x5b, 0xed, 0xc1, 0x8b, 0x27, 0xef, 0xfe, + 0x13, 0xfe, 0x0d, 0x9e, 0x3c, 0x72, 0xd3, 0xc4, 0xbb, 0x31, 0x1b, 0x2f, 0xc6, 0x93, 0xff, 0x81, + 0x69, 0x3b, 0x2d, 0x54, 0x20, 0xe1, 0xe0, 0xed, 0xcd, 0xbc, 0xf7, 0xbe, 0x7e, 0xdf, 0x37, 0xef, + 0x15, 0xae, 0x10, 0x16, 0xf3, 0xc4, 0xc1, 0x82, 0x3a, 0x71, 0xc7, 0x21, 0x7e, 0x64, 0x0b, 0xc9, + 0x15, 0x47, 0x0b, 0xd9, 0xbd, 0x8d, 0x05, 0xb5, 0xe3, 0x8e, 0xd5, 0xa8, 0x54, 0xf9, 0x34, 0xf2, + 0x78, 0x4c, 0x64, 0x92, 0xd7, 0x5a, 0xd7, 0xab, 0x18, 0xcc, 0x17, 0x9c, 0x32, 0x55, 0x06, 0xba, + 0xca, 0xcc, 0xab, 0x54, 0x22, 0x88, 0x23, 0x88, 0xf4, 0x48, 0x99, 0x69, 0x04, 0x9c, 0x07, 0x21, + 0xc9, 0x00, 0x30, 0x63, 0x5c, 0x61, 0x45, 0x39, 0xd3, 0x4c, 0xac, 0xd5, 0x18, 0x87, 0xd4, 0xc7, + 0x8a, 0x38, 0x45, 0xa0, 0x13, 0x57, 0x02, 0x1e, 0xf0, 0x2c, 0x74, 0xd2, 0x48, 0xdf, 0x36, 0x35, + 0x58, 0x76, 0x1a, 0x8e, 0x8f, 0x9c, 0x57, 0x12, 0x0b, 0x41, 0xa4, 0x86, 0x6b, 0xff, 0x9e, 0x86, + 0x57, 0xef, 0x87, 0xe3, 0x48, 0x11, 0xb9, 0xc7, 0xb1, 0x7f, 0x2f, 0x8a, 0x68, 0xc0, 0x46, 0x84, + 0x29, 0x74, 0x13, 0x2e, 0x78, 0x79, 0x62, 0xc0, 0xf0, 0x88, 0x98, 0xa0, 0x05, 0xd6, 0xe7, 0xba, + 0x73, 0x1f, 0x7f, 0x7e, 0xaa, 0xd5, 0xa5, 0xd1, 0x02, 0xee, 0xbc, 0x4e, 0xef, 0xe3, 0x11, 0x41, + 0xfb, 0x70, 0xae, 0x10, 0x18, 0x99, 0x46, 0xab, 0xb6, 0x3e, 0xdf, 0xd9, 0xb0, 0x4f, 0x9b, 0x66, + 0x97, 0xfa, 0xf7, 0xb8, 0x87, 0x43, 0xaa, 0x92, 0xbd, 0xe1, 0x6e, 0xd1, 0xd1, 0xad, 0x1f, 0x7f, + 0x5b, 0x9b, 0x72, 0x4f, 0x20, 0x50, 0x17, 0xce, 0x08, 0x1e, 0x52, 0x2f, 0x31, 0xeb, 0x2d, 0x70, + 0x16, 0xec, 0x5c, 0xca, 0x76, 0x3f, 0xeb, 0x70, 0x75, 0x27, 0x3a, 0x84, 0x4b, 0x29, 0x73, 0x7f, + 0x70, 0xc2, 0x6c, 0x3a, 0x63, 0xb6, 0x75, 0x19, 0xb0, 0x54, 0x96, 0x5f, 0x32, 0xdc, 0x65, 0x4a, + 0x26, 0xee, 0x22, 0xab, 0x5c, 0x5a, 0x43, 0xf8, 0xff, 0x39, 0x65, 0x68, 0x19, 0xd6, 0x5e, 0x90, + 0x24, 0x77, 0xcc, 0x4d, 0x43, 0x74, 0x07, 0x4e, 0xc7, 0x38, 0x1c, 0x13, 0xd3, 0xc8, 0xd4, 0xac, + 0x5d, 0x60, 0x4d, 0x81, 0xe3, 0xe6, 0xd5, 0xdb, 0xc6, 0x5d, 0x60, 0x7d, 0x36, 0xe0, 0x4c, 0x2e, + 0x0c, 0x3d, 0x83, 0x8b, 0xbe, 0xe4, 0x62, 0x90, 0x4e, 0x5b, 0xc8, 0xb1, 0x5f, 0x38, 0xbd, 0x75, + 0x79, 0x73, 0xec, 0x1d, 0xc9, 0xc5, 0x23, 0xdd, 0xef, 0xfe, 0xe7, 0x9f, 0x3a, 0x45, 0xe8, 0x10, + 0xae, 0xa6, 0xd0, 0x42, 0xf2, 0x98, 0x46, 0x94, 0x33, 0xca, 0x82, 0xc1, 0x11, 0xf6, 0x14, 0x97, + 0x66, 0x2d, 0xe3, 0xdd, 0xb0, 0xf3, 0x71, 0xb2, 0x8b, 0x71, 0xb2, 0x1f, 0x3f, 0x60, 0x6a, 0xb3, + 0xf3, 0x24, 0x65, 0xab, 0x67, 0x63, 0xc3, 0x68, 0x4d, 0xb9, 0x2b, 0x7f, 0xe3, 0xf4, 0x32, 0x18, + 0xeb, 0x0d, 0x5c, 0x38, 0x4d, 0x00, 0xdd, 0x80, 0xb3, 0x1e, 0x56, 0x24, 0xe0, 0x32, 0x39, 0x3b, + 0x60, 0x65, 0x0a, 0xf5, 0xe0, 0x52, 0x26, 0x5c, 0x2f, 0x0a, 0x0e, 0x0a, 0x23, 0xaf, 0x69, 0xe5, + 0xe9, 0x1a, 0xd9, 0x3d, 0x89, 0xbd, 0x74, 0x55, 0x70, 0xd8, 0xcf, 0xeb, 0xdc, 0xcc, 0xae, 0x7e, + 0xd9, 0xf4, 0xb0, 0x3e, 0x0b, 0x96, 0x8d, 0xce, 0x2f, 0x00, 0xcd, 0xc2, 0xe9, 0x9d, 0x62, 0x79, + 0x0f, 0x88, 0x8c, 0xa9, 0x47, 0xd0, 0x53, 0xb8, 0x74, 0xa0, 0x24, 0xc1, 0xa3, 0xf2, 0x4d, 0x51, + 0xb3, 0x6a, 0x6f, 0xd9, 0xe2, 0x92, 0x97, 0x63, 0x12, 0x29, 0x6b, 0xed, 0xc2, 0x7c, 0x24, 0x38, + 0x8b, 0x48, 0x7b, 0x6a, 0x1d, 0xdc, 0x02, 0x68, 0x0c, 0x17, 0x7b, 0x44, 0x79, 0xcf, 0xff, 0x21, + 0x70, 0xfb, 0xed, 0xd7, 0x1f, 0xef, 0x8d, 0x46, 0x7b, 0xb5, 0xf2, 0x1f, 0xda, 0x2e, 0xe7, 0x7d, + 0x1b, 0x6c, 0x74, 0x6f, 0x7f, 0x98, 0x34, 0xc1, 0xf1, 0xa4, 0x09, 0xbe, 0x4c, 0x9a, 0xe0, 0xfb, + 0xa4, 0x09, 0xa0, 0x45, 0x79, 0x0e, 0x2c, 0x24, 0x7f, 0x9d, 0x54, 0xbe, 0xd1, 0x07, 0xef, 0x00, + 0x18, 0xce, 0x64, 0xcf, 0xbb, 0xf9, 0x27, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xd6, 0xc7, 0x27, 0x0e, + 0x05, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.validate.go index 4d89c90d182e..8d48f847d2a2 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.validate.go @@ -64,6 +64,8 @@ func (m *ClusterLoadAssignment) Validate() error { } + // no validation rules for NamedEndpoints + if v, ok := interface{}(m.GetPolicy()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterLoadAssignmentValidationError{ diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.go index fd3a5bc3ef64..5cfc3edcff06 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.go @@ -55,7 +55,7 @@ func (m *Endpoint) Reset() { *m = Endpoint{} } func (m *Endpoint) String() string { return proto.CompactTextString(m) } func (*Endpoint) ProtoMessage() {} func (*Endpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_endpoint_831f394d40c2aa11, []int{0} + return fileDescriptor_endpoint_b31e45b01d8125cc, []int{0} } func (m *Endpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -116,7 +116,7 @@ func (m *Endpoint_HealthCheckConfig) Reset() { *m = Endpoint_HealthCheck func (m *Endpoint_HealthCheckConfig) String() string { return proto.CompactTextString(m) } func (*Endpoint_HealthCheckConfig) ProtoMessage() {} func (*Endpoint_HealthCheckConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_endpoint_831f394d40c2aa11, []int{0, 0} + return fileDescriptor_endpoint_b31e45b01d8125cc, []int{0, 0} } func (m *Endpoint_HealthCheckConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -154,8 +154,12 @@ func (m *Endpoint_HealthCheckConfig) GetPortValue() uint32 { // An Endpoint that Envoy can route traffic to. type LbEndpoint struct { - // Upstream host identifier - Endpoint *Endpoint `protobuf:"bytes,1,opt,name=endpoint,proto3" json:"endpoint,omitempty"` + // Upstream host identifier or a named reference. + // + // Types that are valid to be assigned to HostIdentifier: + // *LbEndpoint_Endpoint + // *LbEndpoint_EndpointName + HostIdentifier isLbEndpoint_HostIdentifier `protobuf_oneof:"host_identifier"` // Optional health status when known and supplied by EDS server. HealthStatus core.HealthStatus `protobuf:"varint,2,opt,name=health_status,json=healthStatus,proto3,enum=envoy.api.v2.core.HealthStatus" json:"health_status,omitempty"` // The endpoint metadata specifies values that may be used by the load @@ -190,7 +194,7 @@ func (m *LbEndpoint) Reset() { *m = LbEndpoint{} } func (m *LbEndpoint) String() string { return proto.CompactTextString(m) } func (*LbEndpoint) ProtoMessage() {} func (*LbEndpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_endpoint_831f394d40c2aa11, []int{1} + return fileDescriptor_endpoint_b31e45b01d8125cc, []int{1} } func (m *LbEndpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -219,13 +223,44 @@ func (m *LbEndpoint) XXX_DiscardUnknown() { var xxx_messageInfo_LbEndpoint proto.InternalMessageInfo -func (m *LbEndpoint) GetEndpoint() *Endpoint { +type isLbEndpoint_HostIdentifier interface { + isLbEndpoint_HostIdentifier() + Equal(interface{}) bool + MarshalTo([]byte) (int, error) + Size() int +} + +type LbEndpoint_Endpoint struct { + Endpoint *Endpoint `protobuf:"bytes,1,opt,name=endpoint,proto3,oneof"` +} +type LbEndpoint_EndpointName struct { + EndpointName string `protobuf:"bytes,5,opt,name=endpoint_name,json=endpointName,proto3,oneof"` +} + +func (*LbEndpoint_Endpoint) isLbEndpoint_HostIdentifier() {} +func (*LbEndpoint_EndpointName) isLbEndpoint_HostIdentifier() {} + +func (m *LbEndpoint) GetHostIdentifier() isLbEndpoint_HostIdentifier { if m != nil { - return m.Endpoint + return m.HostIdentifier + } + return nil +} + +func (m *LbEndpoint) GetEndpoint() *Endpoint { + if x, ok := m.GetHostIdentifier().(*LbEndpoint_Endpoint); ok { + return x.Endpoint } return nil } +func (m *LbEndpoint) GetEndpointName() string { + if x, ok := m.GetHostIdentifier().(*LbEndpoint_EndpointName); ok { + return x.EndpointName + } + return "" +} + func (m *LbEndpoint) GetHealthStatus() core.HealthStatus { if m != nil { return m.HealthStatus @@ -247,6 +282,76 @@ func (m *LbEndpoint) GetLoadBalancingWeight() *types.UInt32Value { return nil } +// XXX_OneofFuncs is for the internal use of the proto package. +func (*LbEndpoint) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _LbEndpoint_OneofMarshaler, _LbEndpoint_OneofUnmarshaler, _LbEndpoint_OneofSizer, []interface{}{ + (*LbEndpoint_Endpoint)(nil), + (*LbEndpoint_EndpointName)(nil), + } +} + +func _LbEndpoint_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*LbEndpoint) + // host_identifier + switch x := m.HostIdentifier.(type) { + case *LbEndpoint_Endpoint: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Endpoint); err != nil { + return err + } + case *LbEndpoint_EndpointName: + _ = b.EncodeVarint(5<<3 | proto.WireBytes) + _ = b.EncodeStringBytes(x.EndpointName) + case nil: + default: + return fmt.Errorf("LbEndpoint.HostIdentifier has unexpected type %T", x) + } + return nil +} + +func _LbEndpoint_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*LbEndpoint) + switch tag { + case 1: // host_identifier.endpoint + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Endpoint) + err := b.DecodeMessage(msg) + m.HostIdentifier = &LbEndpoint_Endpoint{msg} + return true, err + case 5: // host_identifier.endpoint_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.HostIdentifier = &LbEndpoint_EndpointName{x} + return true, err + default: + return false, nil + } +} + +func _LbEndpoint_OneofSizer(msg proto.Message) (n int) { + m := msg.(*LbEndpoint) + // host_identifier + switch x := m.HostIdentifier.(type) { + case *LbEndpoint_Endpoint: + s := proto.Size(x.Endpoint) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *LbEndpoint_EndpointName: + n += 1 // tag and wire + n += proto.SizeVarint(uint64(len(x.EndpointName))) + n += len(x.EndpointName) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + // A group of endpoints belonging to a Locality. // One can have multiple LocalityLbEndpoints for a locality, but this is // generally only done if the different groups need to have different load @@ -292,7 +397,7 @@ func (m *LocalityLbEndpoints) Reset() { *m = LocalityLbEndpoints{} } func (m *LocalityLbEndpoints) String() string { return proto.CompactTextString(m) } func (*LocalityLbEndpoints) ProtoMessage() {} func (*LocalityLbEndpoints) Descriptor() ([]byte, []int) { - return fileDescriptor_endpoint_831f394d40c2aa11, []int{2} + return fileDescriptor_endpoint_b31e45b01d8125cc, []int{2} } func (m *LocalityLbEndpoints) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -431,7 +536,13 @@ func (this *LbEndpoint) Equal(that interface{}) bool { } else if this == nil { return false } - if !this.Endpoint.Equal(that1.Endpoint) { + if that1.HostIdentifier == nil { + if this.HostIdentifier != nil { + return false + } + } else if this.HostIdentifier == nil { + return false + } else if !this.HostIdentifier.Equal(that1.HostIdentifier) { return false } if this.HealthStatus != that1.HealthStatus { @@ -448,6 +559,54 @@ func (this *LbEndpoint) Equal(that interface{}) bool { } return true } +func (this *LbEndpoint_Endpoint) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*LbEndpoint_Endpoint) + if !ok { + that2, ok := that.(LbEndpoint_Endpoint) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Endpoint.Equal(that1.Endpoint) { + return false + } + return true +} +func (this *LbEndpoint_EndpointName) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*LbEndpoint_EndpointName) + if !ok { + that2, ok := that.(LbEndpoint_EndpointName) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.EndpointName != that1.EndpointName { + return false + } + return true +} func (this *LocalityLbEndpoints) Equal(that interface{}) bool { if that == nil { return this == nil @@ -571,15 +730,12 @@ func (m *LbEndpoint) MarshalTo(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.Endpoint != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.Endpoint.Size())) - n3, err := m.Endpoint.MarshalTo(dAtA[i:]) + if m.HostIdentifier != nil { + nn3, err := m.HostIdentifier.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n3 + i += nn3 } if m.HealthStatus != 0 { dAtA[i] = 0x10 @@ -612,6 +768,28 @@ func (m *LbEndpoint) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *LbEndpoint_Endpoint) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Endpoint != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintEndpoint(dAtA, i, uint64(m.Endpoint.Size())) + n6, err := m.Endpoint.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n6 + } + return i, nil +} +func (m *LbEndpoint_EndpointName) MarshalTo(dAtA []byte) (int, error) { + i := 0 + dAtA[i] = 0x2a + i++ + i = encodeVarintEndpoint(dAtA, i, uint64(len(m.EndpointName))) + i += copy(dAtA[i:], m.EndpointName) + return i, nil +} func (m *LocalityLbEndpoints) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -631,11 +809,11 @@ func (m *LocalityLbEndpoints) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintEndpoint(dAtA, i, uint64(m.Locality.Size())) - n6, err := m.Locality.MarshalTo(dAtA[i:]) + n7, err := m.Locality.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n6 + i += n7 } if len(m.LbEndpoints) > 0 { for _, msg := range m.LbEndpoints { @@ -653,11 +831,11 @@ func (m *LocalityLbEndpoints) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintEndpoint(dAtA, i, uint64(m.LoadBalancingWeight.Size())) - n7, err := m.LoadBalancingWeight.MarshalTo(dAtA[i:]) + n8, err := m.LoadBalancingWeight.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n7 + i += n8 } if m.Priority != 0 { dAtA[i] = 0x28 @@ -720,9 +898,8 @@ func (m *LbEndpoint) Size() (n int) { } var l int _ = l - if m.Endpoint != nil { - l = m.Endpoint.Size() - n += 1 + l + sovEndpoint(uint64(l)) + if m.HostIdentifier != nil { + n += m.HostIdentifier.Size() } if m.HealthStatus != 0 { n += 1 + sovEndpoint(uint64(m.HealthStatus)) @@ -741,6 +918,28 @@ func (m *LbEndpoint) Size() (n int) { return n } +func (m *LbEndpoint_Endpoint) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Endpoint != nil { + l = m.Endpoint.Size() + n += 1 + l + sovEndpoint(uint64(l)) + } + return n +} +func (m *LbEndpoint_EndpointName) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.EndpointName) + n += 1 + l + sovEndpoint(uint64(l)) + return n +} func (m *LocalityLbEndpoints) Size() (n int) { if m == nil { return 0 @@ -1025,12 +1224,11 @@ func (m *LbEndpoint) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Endpoint == nil { - m.Endpoint = &Endpoint{} - } - if err := m.Endpoint.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := &Endpoint{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.HostIdentifier = &LbEndpoint_Endpoint{v} iNdEx = postIndex case 2: if wireType != 0 { @@ -1117,6 +1315,35 @@ func (m *LbEndpoint) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndpointName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEndpoint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEndpoint + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostIdentifier = &LbEndpoint_EndpointName{string(dAtA[iNdEx:postIndex])} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEndpoint(dAtA[iNdEx:]) @@ -1412,43 +1639,46 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/endpoint/endpoint.proto", fileDescriptor_endpoint_831f394d40c2aa11) -} - -var fileDescriptor_endpoint_831f394d40c2aa11 = []byte{ - // 532 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x52, 0x41, 0x6f, 0xd3, 0x30, - 0x14, 0xc6, 0x4b, 0xbb, 0x15, 0xb7, 0x43, 0x5a, 0xca, 0x44, 0x54, 0xa6, 0x16, 0xaa, 0x09, 0x55, - 0x3d, 0x38, 0xa2, 0x43, 0xe2, 0xc0, 0x01, 0xd1, 0x81, 0x04, 0x68, 0x5c, 0x8c, 0x00, 0x89, 0x03, - 0x91, 0x93, 0x78, 0x49, 0x84, 0x89, 0xa3, 0xc4, 0xcd, 0xb4, 0xdb, 0x7e, 0x0b, 0xa7, 0xfd, 0x06, - 0x4e, 0x1c, 0x77, 0xe4, 0x17, 0x20, 0x54, 0x71, 0xe1, 0x57, 0x0c, 0xd9, 0xb1, 0xb3, 0x6e, 0xed, - 0xc4, 0x85, 0xdb, 0xb3, 0xdf, 0xf7, 0xbd, 0xf7, 0x7d, 0x9f, 0x1e, 0xdc, 0xa5, 0x69, 0xc9, 0x8f, - 0x5d, 0x92, 0x25, 0x6e, 0x39, 0x71, 0x69, 0x1a, 0x66, 0x3c, 0x49, 0x45, 0x5d, 0xa0, 0x2c, 0xe7, - 0x82, 0xdb, 0xdb, 0x0a, 0x85, 0x48, 0x96, 0xa0, 0x72, 0x82, 0x4c, 0xb3, 0x37, 0xb8, 0x44, 0x0e, - 0x78, 0x4e, 0x5d, 0x12, 0x86, 0x39, 0x2d, 0x8a, 0x8a, 0xd7, 0xdb, 0x59, 0x06, 0xf8, 0xa4, 0xa0, - 0xba, 0xbb, 0xbb, 0xdc, 0x8d, 0x29, 0x61, 0x22, 0xf6, 0x82, 0x98, 0x06, 0x9f, 0x35, 0xaa, 0x1f, - 0x71, 0x1e, 0x31, 0xea, 0xaa, 0x97, 0x3f, 0x3b, 0x74, 0x8f, 0x72, 0x92, 0x65, 0x34, 0x37, 0x3b, - 0xee, 0x94, 0x84, 0x25, 0x21, 0x11, 0xd4, 0x35, 0x85, 0x6e, 0xdc, 0x8e, 0x78, 0xc4, 0x55, 0xe9, - 0xca, 0xaa, 0xfa, 0x1d, 0xfe, 0x06, 0xb0, 0xf5, 0x42, 0x1b, 0xb0, 0x1f, 0xc1, 0x0d, 0x2d, 0xd8, - 0x01, 0xf7, 0xc0, 0xa8, 0x3d, 0xe9, 0xa1, 0x4b, 0x4e, 0xa5, 0x26, 0xf4, 0xac, 0x42, 0x60, 0x03, - 0xb5, 0x09, 0xec, 0x2e, 0xea, 0xf4, 0x02, 0x9e, 0x1e, 0x26, 0x91, 0xb3, 0xa6, 0x26, 0x3c, 0x44, - 0x2b, 0xb3, 0x42, 0x66, 0x27, 0x7a, 0xa9, 0xa8, 0xfb, 0x92, 0xb9, 0xaf, 0x88, 0x78, 0x2b, 0xbe, - 0xfa, 0xd5, 0x7b, 0x0a, 0xb7, 0x96, 0x70, 0xf6, 0x18, 0xc2, 0x8c, 0xe7, 0xc2, 0x2b, 0x09, 0x9b, - 0x51, 0x25, 0x78, 0x73, 0xda, 0xfe, 0xf6, 0xe7, 0xbb, 0xb5, 0x3e, 0x6e, 0x38, 0xe7, 0xe7, 0x16, - 0xbe, 0x29, 0xdb, 0xef, 0x65, 0x77, 0x78, 0xba, 0x06, 0xe1, 0x81, 0x5f, 0x1b, 0x7d, 0x02, 0x5b, - 0x46, 0x89, 0x76, 0x3a, 0xf8, 0x87, 0x4e, 0x5c, 0x13, 0xec, 0xe7, 0x70, 0x53, 0xfb, 0x2d, 0x04, - 0x11, 0xb3, 0x42, 0x39, 0xbd, 0x75, 0x75, 0x82, 0xca, 0xaa, 0x12, 0xfd, 0x56, 0xc1, 0x70, 0x27, - 0x5e, 0x78, 0xd9, 0x8f, 0x61, 0xeb, 0x0b, 0x15, 0x24, 0x24, 0x82, 0x38, 0x96, 0x92, 0x70, 0x77, - 0xc5, 0x80, 0x37, 0x1a, 0x82, 0x6b, 0xb0, 0xfd, 0x09, 0x6e, 0x33, 0x4e, 0x42, 0xcf, 0x27, 0x8c, - 0xa4, 0x41, 0x92, 0x46, 0xde, 0x11, 0x4d, 0xa2, 0x58, 0x38, 0x0d, 0x35, 0x65, 0x07, 0x55, 0x07, - 0x82, 0xcc, 0x81, 0xa0, 0x77, 0xaf, 0x52, 0xb1, 0x37, 0x51, 0x39, 0x4c, 0x3b, 0x32, 0x9f, 0x8d, - 0x71, 0xd3, 0x39, 0x01, 0x23, 0x80, 0xbb, 0x72, 0xd0, 0xd4, 0xcc, 0xf9, 0xa0, 0xc6, 0x0c, 0xbf, - 0xae, 0xc1, 0xee, 0x01, 0x0f, 0x08, 0x4b, 0xc4, 0xf1, 0x45, 0x64, 0x4a, 0x30, 0xd3, 0xdf, 0x3a, - 0xb3, 0x55, 0x82, 0x0d, 0x13, 0xd7, 0x60, 0xfb, 0x35, 0xec, 0x30, 0xdf, 0x33, 0xf1, 0xc9, 0xb8, - 0xac, 0x51, 0x7b, 0x72, 0xff, 0x9a, 0xc0, 0x2f, 0x56, 0x4e, 0x1b, 0x67, 0x3f, 0x07, 0x37, 0x70, - 0x9b, 0x2d, 0x88, 0xb8, 0xd6, 0xbc, 0xf5, 0x5f, 0xcc, 0xdb, 0x0f, 0x60, 0x2b, 0xcb, 0x13, 0x9e, - 0x4b, 0x93, 0x4d, 0x75, 0x51, 0x50, 0x92, 0x9a, 0x63, 0xcb, 0x39, 0x01, 0xb8, 0xee, 0x4d, 0x7b, - 0xa7, 0xf3, 0x3e, 0x38, 0x9b, 0xf7, 0xc1, 0x8f, 0x79, 0x1f, 0xfc, 0x9a, 0xf7, 0xc1, 0xc7, 0xfa, - 0x3e, 0xfc, 0x75, 0xb5, 0x7c, 0xef, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc8, 0xe0, 0x0f, 0x4c, - 0x4c, 0x04, 0x00, 0x00, + proto.RegisterFile("envoy/api/v2/endpoint/endpoint.proto", fileDescriptor_endpoint_b31e45b01d8125cc) +} + +var fileDescriptor_endpoint_b31e45b01d8125cc = []byte{ + // 584 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x52, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0xed, 0xd6, 0x49, 0x9b, 0x6e, 0x12, 0x50, 0x1c, 0x2a, 0xac, 0x50, 0x25, 0x25, 0x14, 0x14, + 0xe5, 0xb0, 0x16, 0x29, 0x12, 0x27, 0x84, 0xea, 0x82, 0x14, 0x50, 0x41, 0xc8, 0x08, 0x90, 0x38, + 0x60, 0xad, 0xed, 0x8d, 0xbd, 0xc2, 0xf1, 0x5a, 0xf6, 0x26, 0x25, 0xb7, 0x7e, 0x0b, 0x27, 0xbe, + 0x81, 0x13, 0xc7, 0x1e, 0xf9, 0x02, 0x84, 0xa2, 0x5e, 0xf8, 0x8a, 0x22, 0xaf, 0xbd, 0x6e, 0xda, + 0xa4, 0xe2, 0xc2, 0x6d, 0x3d, 0xf3, 0xde, 0xcc, 0x7b, 0xcf, 0x03, 0xf7, 0x48, 0x38, 0x65, 0x33, + 0x1d, 0x47, 0x54, 0x9f, 0x0e, 0x74, 0x12, 0xba, 0x11, 0xa3, 0x21, 0x2f, 0x1e, 0x28, 0x8a, 0x19, + 0x67, 0xea, 0xb6, 0x40, 0x21, 0x1c, 0x51, 0x34, 0x1d, 0x20, 0xd9, 0x6c, 0x75, 0x2e, 0x91, 0x1d, + 0x16, 0x13, 0x1d, 0xbb, 0x6e, 0x4c, 0x92, 0x24, 0xe3, 0xb5, 0x76, 0x96, 0x01, 0x36, 0x4e, 0x48, + 0xde, 0xdd, 0x5b, 0xee, 0xfa, 0x04, 0x07, 0xdc, 0xb7, 0x1c, 0x9f, 0x38, 0x9f, 0x73, 0x54, 0xdb, + 0x63, 0xcc, 0x0b, 0x88, 0x2e, 0xbe, 0xec, 0xc9, 0x48, 0x3f, 0x8e, 0x71, 0x14, 0x91, 0x58, 0xee, + 0xb8, 0x3d, 0xc5, 0x01, 0x75, 0x31, 0x27, 0xba, 0x7c, 0xe4, 0x8d, 0x5b, 0x1e, 0xf3, 0x98, 0x78, + 0xea, 0xe9, 0x2b, 0xab, 0x76, 0xcf, 0x00, 0xac, 0x3c, 0xcf, 0x0d, 0xa8, 0x8f, 0xe0, 0x66, 0x2e, + 0x58, 0x03, 0xbb, 0xa0, 0x57, 0x1d, 0xb4, 0xd0, 0x25, 0xa7, 0xa9, 0x26, 0x74, 0x90, 0x21, 0x4c, + 0x09, 0x55, 0x31, 0x6c, 0x2e, 0xea, 0xb4, 0x1c, 0x16, 0x8e, 0xa8, 0xa7, 0xad, 0x8b, 0x09, 0x0f, + 0xd1, 0xca, 0xac, 0x90, 0xdc, 0x89, 0x86, 0x82, 0x7a, 0x98, 0x32, 0x0f, 0x05, 0xd1, 0x6c, 0xf8, + 0x57, 0x4b, 0xad, 0xa7, 0xb0, 0xb1, 0x84, 0x53, 0xfb, 0x10, 0x46, 0x2c, 0xe6, 0xd6, 0x14, 0x07, + 0x13, 0x22, 0x04, 0xd7, 0x8d, 0xea, 0xf7, 0x3f, 0x3f, 0x94, 0x8d, 0x7e, 0x49, 0x3b, 0x3f, 0x57, + 0xcc, 0xad, 0xb4, 0xfd, 0x3e, 0xed, 0x76, 0xcf, 0xd6, 0x21, 0x3c, 0xb2, 0x0b, 0xa3, 0x4f, 0x60, + 0x45, 0x2a, 0xc9, 0x9d, 0x76, 0xfe, 0xa1, 0x73, 0xb8, 0x66, 0x16, 0x14, 0xf5, 0x19, 0xac, 0xe7, + 0x8e, 0x13, 0x8e, 0xf9, 0x24, 0x11, 0x5e, 0x6f, 0x5c, 0x9d, 0x21, 0xd2, 0xca, 0x64, 0xbf, 0x15, + 0x30, 0xb3, 0xe6, 0x2f, 0x7c, 0xa9, 0x8f, 0x61, 0x65, 0x4c, 0x38, 0x76, 0x31, 0xc7, 0x9a, 0x22, + 0x44, 0xdc, 0x59, 0x31, 0xe0, 0x55, 0x0e, 0x31, 0x0b, 0xb0, 0xfa, 0x09, 0x6e, 0x07, 0x0c, 0xbb, + 0x96, 0x8d, 0x03, 0x1c, 0x3a, 0x34, 0xf4, 0xac, 0x63, 0x42, 0x3d, 0x9f, 0x6b, 0x25, 0x31, 0x65, + 0x07, 0x65, 0x27, 0x82, 0xe4, 0x89, 0xa0, 0x77, 0x2f, 0x42, 0xbe, 0x3f, 0x10, 0x49, 0x18, 0xb5, + 0x34, 0xa1, 0xcd, 0x7e, 0x59, 0x3b, 0x01, 0x3d, 0x60, 0x36, 0xd3, 0x41, 0x86, 0x9c, 0xf3, 0x41, + 0x8c, 0x51, 0xef, 0xc3, 0xba, 0xb4, 0x6a, 0x85, 0x78, 0x4c, 0xb4, 0xf2, 0x2e, 0xe8, 0x6d, 0x0d, + 0xd7, 0xcc, 0x9a, 0x2c, 0xbf, 0xc6, 0x63, 0x62, 0x34, 0xe0, 0x4d, 0x9f, 0x25, 0xdc, 0xa2, 0x2e, + 0x09, 0x39, 0x1d, 0x51, 0x12, 0x77, 0xbf, 0xae, 0xc3, 0xe6, 0x11, 0x73, 0x70, 0x40, 0xf9, 0xec, + 0x22, 0x6e, 0x61, 0x35, 0xc8, 0xcb, 0x79, 0xde, 0xab, 0xac, 0x4a, 0xa6, 0x59, 0x80, 0xd5, 0x97, + 0xb0, 0x16, 0xd8, 0x96, 0x5c, 0x9b, 0x06, 0xad, 0xf4, 0xaa, 0x83, 0xbb, 0xd7, 0xfc, 0xac, 0x8b, + 0x95, 0x46, 0xe9, 0xf4, 0x57, 0x67, 0xcd, 0xac, 0x06, 0x0b, 0x22, 0xae, 0x8d, 0x4d, 0xf9, 0x3f, + 0xb1, 0x3d, 0x80, 0x95, 0x28, 0xa6, 0x2c, 0x4e, 0x4d, 0x96, 0xc5, 0x35, 0xc2, 0x94, 0x54, 0xee, + 0x2b, 0xda, 0x09, 0x30, 0x8b, 0x9e, 0x71, 0xf0, 0x6d, 0xde, 0x06, 0xa7, 0xf3, 0x36, 0xf8, 0x39, + 0x6f, 0x83, 0xdf, 0xf3, 0x36, 0x80, 0xf7, 0x28, 0xcb, 0x1c, 0x45, 0x31, 0xfb, 0x32, 0x5b, 0x6d, + 0xee, 0x0d, 0xf8, 0x58, 0x1c, 0xa0, 0xbd, 0x21, 0x34, 0xee, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, + 0xbd, 0xfb, 0xa3, 0xef, 0xaf, 0x04, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.validate.go index c52d2f80d9f9..a761c8e8ddcd 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.validate.go @@ -102,16 +102,6 @@ func (m *LbEndpoint) Validate() error { return nil } - if v, ok := interface{}(m.GetEndpoint()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return LbEndpointValidationError{ - Field: "Endpoint", - Reason: "embedded message failed validation", - Cause: err, - } - } - } - // no validation rules for HealthStatus if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { @@ -135,6 +125,25 @@ func (m *LbEndpoint) Validate() error { } + switch m.HostIdentifier.(type) { + + case *LbEndpoint_Endpoint: + + if v, ok := interface{}(m.GetEndpoint()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LbEndpointValidationError{ + Field: "Endpoint", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + case *LbEndpoint_EndpointName: + // no validation rules for EndpointName + + } + return nil } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.go index bc8718f3e7ca..d32bab38632d 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.go @@ -70,7 +70,7 @@ func (m *UpstreamLocalityStats) Reset() { *m = UpstreamLocalityStats{} } func (m *UpstreamLocalityStats) String() string { return proto.CompactTextString(m) } func (*UpstreamLocalityStats) ProtoMessage() {} func (*UpstreamLocalityStats) Descriptor() ([]byte, []int) { - return fileDescriptor_load_report_14d2bc06b8bcdbbd, []int{0} + return fileDescriptor_load_report_ed223d3ebdb23ceb, []int{0} } func (m *UpstreamLocalityStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -193,7 +193,7 @@ func (m *UpstreamEndpointStats) Reset() { *m = UpstreamEndpointStats{} } func (m *UpstreamEndpointStats) String() string { return proto.CompactTextString(m) } func (*UpstreamEndpointStats) ProtoMessage() {} func (*UpstreamEndpointStats) Descriptor() ([]byte, []int) { - return fileDescriptor_load_report_14d2bc06b8bcdbbd, []int{1} + return fileDescriptor_load_report_ed223d3ebdb23ceb, []int{1} } func (m *UpstreamEndpointStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -282,7 +282,7 @@ func (m *EndpointLoadMetricStats) Reset() { *m = EndpointLoadMetricStats func (m *EndpointLoadMetricStats) String() string { return proto.CompactTextString(m) } func (*EndpointLoadMetricStats) ProtoMessage() {} func (*EndpointLoadMetricStats) Descriptor() ([]byte, []int) { - return fileDescriptor_load_report_14d2bc06b8bcdbbd, []int{2} + return fileDescriptor_load_report_ed223d3ebdb23ceb, []int{2} } func (m *EndpointLoadMetricStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -370,7 +370,7 @@ func (m *ClusterStats) Reset() { *m = ClusterStats{} } func (m *ClusterStats) String() string { return proto.CompactTextString(m) } func (*ClusterStats) ProtoMessage() {} func (*ClusterStats) Descriptor() ([]byte, []int) { - return fileDescriptor_load_report_14d2bc06b8bcdbbd, []int{3} + return fileDescriptor_load_report_ed223d3ebdb23ceb, []int{3} } func (m *ClusterStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -448,7 +448,7 @@ func (m *ClusterStats_DroppedRequests) Reset() { *m = ClusterStats_Dropp func (m *ClusterStats_DroppedRequests) String() string { return proto.CompactTextString(m) } func (*ClusterStats_DroppedRequests) ProtoMessage() {} func (*ClusterStats_DroppedRequests) Descriptor() ([]byte, []int) { - return fileDescriptor_load_report_14d2bc06b8bcdbbd, []int{3, 0} + return fileDescriptor_load_report_ed223d3ebdb23ceb, []int{3, 0} } func (m *ClusterStats_DroppedRequests) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1886,55 +1886,55 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/endpoint/load_report.proto", fileDescriptor_load_report_14d2bc06b8bcdbbd) -} - -var fileDescriptor_load_report_14d2bc06b8bcdbbd = []byte{ - // 722 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x54, 0xcb, 0x6e, 0xd3, 0x4a, - 0x18, 0x96, 0x93, 0x5e, 0xd2, 0x49, 0xaa, 0xf6, 0x8c, 0xda, 0x93, 0xd4, 0xe7, 0x90, 0x86, 0x20, - 0x44, 0x16, 0x95, 0x8d, 0xd2, 0x4a, 0x48, 0xb0, 0xa2, 0x17, 0x44, 0x45, 0x41, 0xc8, 0x15, 0x20, - 0x21, 0x81, 0x35, 0xb5, 0xa7, 0xe9, 0x48, 0xb6, 0xc7, 0xcc, 0x25, 0xa8, 0x8f, 0xc0, 0x96, 0x47, - 0x61, 0xc9, 0x8a, 0x25, 0x4b, 0xb6, 0xec, 0x50, 0x77, 0xec, 0x78, 0x04, 0xe4, 0xb9, 0x38, 0x71, - 0xd3, 0x4a, 0x3c, 0x00, 0xbb, 0xf1, 0xff, 0xfd, 0x9f, 0xff, 0xcb, 0xf7, 0xcd, 0x80, 0x3b, 0x38, - 0x1b, 0xd3, 0x73, 0x1f, 0xe5, 0xc4, 0x1f, 0x0f, 0x7d, 0x9c, 0xc5, 0x39, 0x25, 0x99, 0xf0, 0x13, - 0x8a, 0xe2, 0x90, 0xe1, 0x9c, 0x32, 0xe1, 0xe5, 0x8c, 0x0a, 0x0a, 0xd7, 0x55, 0xa2, 0x87, 0x72, - 0xe2, 0x8d, 0x87, 0x9e, 0x4d, 0x74, 0x37, 0x2b, 0xfc, 0x88, 0x32, 0xec, 0xa3, 0x38, 0x66, 0x98, - 0x73, 0xcd, 0x73, 0xff, 0x9f, 0x4d, 0x38, 0x41, 0x1c, 0x1b, 0xb4, 0x3b, 0xa2, 0x74, 0x94, 0x60, - 0x5f, 0x7d, 0x9d, 0xc8, 0x53, 0x3f, 0x96, 0x0c, 0x09, 0x42, 0x33, 0xcb, 0xbe, 0x8c, 0x73, 0xc1, - 0x64, 0x64, 0x7a, 0x72, 0xdb, 0x63, 0x94, 0x90, 0x18, 0x09, 0xec, 0xdb, 0x83, 0x01, 0xd6, 0x46, - 0x74, 0x44, 0xd5, 0xd1, 0x2f, 0x4e, 0x3a, 0xda, 0xff, 0x5e, 0x07, 0xeb, 0x2f, 0x72, 0x2e, 0x18, - 0x46, 0xe9, 0x11, 0x8d, 0x50, 0x42, 0xc4, 0xf9, 0xb1, 0x40, 0x82, 0xc3, 0x7b, 0xa0, 0x91, 0x98, - 0x40, 0xc7, 0xe9, 0x39, 0x83, 0xe6, 0xf0, 0x3f, 0xaf, 0x32, 0x6f, 0xd1, 0xb7, 0x67, 0x39, 0x41, - 0x99, 0x0c, 0xef, 0x83, 0x0d, 0x41, 0x05, 0x4a, 0x42, 0x2e, 0xa3, 0x08, 0x73, 0x7e, 0x2a, 0x93, - 0x90, 0xe1, 0x77, 0x12, 0x73, 0xc1, 0x3b, 0xb5, 0x9e, 0x33, 0x98, 0x0b, 0xda, 0x2a, 0xe1, 0xb8, - 0xc4, 0x03, 0x03, 0xc3, 0x07, 0xc0, 0xd5, 0x5c, 0x4b, 0x08, 0x49, 0x16, 0xe6, 0x8c, 0x8e, 0x8a, - 0xed, 0x75, 0xea, 0x53, 0x64, 0x4b, 0x39, 0xcc, 0x9e, 0x1b, 0x18, 0xde, 0x05, 0x6b, 0x9a, 0x8c, - 0x19, 0xa3, 0x6c, 0x52, 0x73, 0x4e, 0xd1, 0xa0, 0xc2, 0x0e, 0x0a, 0xa8, 0x2c, 0xf7, 0x1a, 0xfc, - 0xa3, 0x54, 0x4d, 0xb1, 0x60, 0x24, 0x0a, 0x79, 0x31, 0x78, 0x67, 0xbe, 0x57, 0x1f, 0x34, 0x87, - 0x9e, 0x77, 0xa5, 0xb8, 0xde, 0x81, 0x39, 0x1c, 0x51, 0x14, 0x3f, 0x55, 0x34, 0xb5, 0xae, 0x60, - 0x25, 0xa9, 0x06, 0xa0, 0x0b, 0x1a, 0x39, 0x23, 0x94, 0x15, 0xfb, 0x5b, 0xe8, 0x39, 0x83, 0xe5, - 0xa0, 0xfc, 0x86, 0x31, 0x68, 0x4b, 0xb3, 0xf4, 0xd0, 0xfe, 0xd9, 0x54, 0x5f, 0x54, 0xd5, 0xb7, - 0xae, 0xa9, 0x6e, 0xa5, 0xb2, 0x5d, 0xe8, 0xda, 0xeb, 0xf2, 0xaa, 0x70, 0xff, 0xc3, 0x94, 0xb6, - 0x15, 0x04, 0xee, 0x80, 0x45, 0xe3, 0x48, 0x23, 0xad, 0x7b, 0x85, 0xb4, 0x0f, 0x75, 0x46, 0x60, - 0x53, 0xff, 0x0a, 0xab, 0x97, 0xb7, 0x0d, 0x1a, 0x29, 0x16, 0x28, 0x46, 0x02, 0x29, 0x61, 0x9b, - 0xc3, 0xb6, 0xa7, 0xaf, 0xa4, 0x67, 0xaf, 0xa4, 0x77, 0xac, 0xae, 0x64, 0x50, 0x26, 0xf6, 0x3f, - 0x39, 0xa0, 0x7d, 0x4d, 0x05, 0xb8, 0x09, 0x9a, 0xa6, 0xcf, 0x0c, 0xa5, 0x58, 0x29, 0xb2, 0x14, - 0x00, 0x1d, 0x7a, 0x86, 0x52, 0x0c, 0x1f, 0x83, 0x9b, 0x99, 0x4c, 0x27, 0xab, 0x3b, 0x25, 0x19, - 0xe1, 0x67, 0x38, 0x0e, 0xdf, 0x13, 0x71, 0x66, 0x66, 0x34, 0x02, 0xdc, 0xc8, 0x64, 0x6a, 0xb7, - 0xf0, 0xc8, 0xa4, 0xbd, 0x22, 0xe2, 0x4c, 0xd7, 0x83, 0x5b, 0x40, 0x6f, 0xcb, 0x2e, 0x66, 0x8c, - 0x12, 0x89, 0xd5, 0xfa, 0x9d, 0x60, 0x55, 0x21, 0x3a, 0xf1, 0x65, 0x11, 0xef, 0xff, 0xaa, 0x83, - 0xd6, 0x5e, 0x22, 0xb9, 0xc0, 0x4c, 0x77, 0xba, 0x05, 0x5a, 0x91, 0xfe, 0x9e, 0x6a, 0x75, 0x77, - 0xe9, 0xf3, 0xcf, 0x2f, 0xf5, 0x39, 0x56, 0xeb, 0x39, 0x41, 0xd3, 0xc0, 0xaa, 0xed, 0x7c, 0xca, - 0xe5, 0xf6, 0x75, 0x30, 0x52, 0xd4, 0xfe, 0xc8, 0xe5, 0x95, 0x07, 0x69, 0x17, 0x14, 0x65, 0xe6, - 0x3f, 0x3a, 0xb5, 0x86, 0x33, 0x71, 0x7c, 0xf5, 0xcd, 0xda, 0x01, 0xff, 0xea, 0xf1, 0x62, 0x46, - 0xf3, 0x1c, 0xc7, 0x13, 0xab, 0x68, 0x87, 0x69, 0x1b, 0xed, 0x6b, 0xb0, 0x34, 0xcb, 0x13, 0xb0, - 0x36, 0xf5, 0xb6, 0x87, 0x24, 0x13, 0x98, 0x8d, 0x51, 0xa2, 0xec, 0xd5, 0x1c, 0x6e, 0xcc, 0x88, - 0xbb, 0x6f, 0xde, 0xe3, 0x00, 0x16, 0xb4, 0x40, 0xb1, 0x0e, 0x0d, 0x09, 0xbe, 0x05, 0xab, 0x33, - 0xc5, 0xb5, 0xf1, 0xb6, 0xaf, 0x99, 0x76, 0x7a, 0xc3, 0xde, 0xa5, 0xde, 0x82, 0x95, 0xb8, 0x1a, - 0x70, 0xdf, 0x80, 0x95, 0xcb, 0xfd, 0xdf, 0x06, 0x8d, 0x08, 0x09, 0x3c, 0xa2, 0xec, 0x7c, 0x56, - 0x91, 0x12, 0x82, 0xb7, 0xc0, 0xb2, 0xed, 0x2c, 0xa2, 0x32, 0x13, 0xc6, 0x31, 0x2d, 0x13, 0xdc, - 0x2b, 0x62, 0xbb, 0xad, 0xaf, 0x17, 0x5d, 0xe7, 0xdb, 0x45, 0xd7, 0xf9, 0x71, 0xd1, 0x75, 0x4e, - 0x16, 0xd4, 0xcc, 0xdb, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xae, 0xc8, 0x1f, 0x5a, 0x12, 0x07, - 0x00, 0x00, + proto.RegisterFile("envoy/api/v2/endpoint/load_report.proto", fileDescriptor_load_report_ed223d3ebdb23ceb) +} + +var fileDescriptor_load_report_ed223d3ebdb23ceb = []byte{ + // 736 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x54, 0xcd, 0x6e, 0xd3, 0x4c, + 0x14, 0x95, 0x93, 0xfe, 0xa4, 0x93, 0x56, 0xed, 0x37, 0x6a, 0xbf, 0xa4, 0x06, 0xd2, 0x90, 0x0a, + 0x91, 0x45, 0x65, 0xa3, 0xa4, 0x12, 0x12, 0xac, 0xe8, 0x0f, 0xa2, 0xa2, 0xa0, 0xca, 0x15, 0x20, + 0x21, 0x81, 0x35, 0xb5, 0xa7, 0xe9, 0x48, 0xb6, 0xc7, 0xcc, 0x8c, 0x03, 0x79, 0x04, 0xb6, 0x3c, + 0x0a, 0x4b, 0x56, 0x2c, 0x59, 0xb2, 0x65, 0x87, 0xba, 0x63, 0xc7, 0x23, 0x20, 0xcf, 0x8f, 0x13, + 0x37, 0xa9, 0xc4, 0x03, 0xb0, 0x9b, 0xdc, 0x73, 0x4f, 0xee, 0x99, 0x73, 0xae, 0x07, 0xdc, 0xc5, + 0xc9, 0x90, 0x8e, 0x5c, 0x94, 0x12, 0x77, 0xd8, 0x73, 0x71, 0x12, 0xa6, 0x94, 0x24, 0xc2, 0x8d, + 0x28, 0x0a, 0x7d, 0x86, 0x53, 0xca, 0x84, 0x93, 0x32, 0x2a, 0x28, 0xdc, 0x90, 0x8d, 0x0e, 0x4a, + 0x89, 0x33, 0xec, 0x39, 0xa6, 0xd1, 0xde, 0x2a, 0xf1, 0x03, 0xca, 0xb0, 0x8b, 0xc2, 0x90, 0x61, + 0xce, 0x15, 0xcf, 0xbe, 0x39, 0xdd, 0x70, 0x86, 0x38, 0xd6, 0x68, 0x6b, 0x40, 0xe9, 0x20, 0xc2, + 0xae, 0xfc, 0x75, 0x96, 0x9d, 0xbb, 0x61, 0xc6, 0x90, 0x20, 0x34, 0x31, 0xec, 0xab, 0x38, 0x17, + 0x2c, 0x0b, 0xb4, 0x26, 0xbb, 0x31, 0x44, 0x11, 0x09, 0x91, 0xc0, 0xae, 0x39, 0x68, 0x60, 0x7d, + 0x40, 0x07, 0x54, 0x1e, 0xdd, 0xfc, 0xa4, 0xaa, 0x9d, 0x1f, 0x55, 0xb0, 0xf1, 0x22, 0xe5, 0x82, + 0x61, 0x14, 0x1f, 0xd3, 0x00, 0x45, 0x44, 0x8c, 0x4e, 0x05, 0x12, 0x1c, 0xde, 0x07, 0xb5, 0x48, + 0x17, 0x9a, 0x56, 0xdb, 0xea, 0xd6, 0x7b, 0x37, 0x9c, 0xd2, 0x7d, 0x73, 0xdd, 0x8e, 0xe1, 0x78, + 0x45, 0x33, 0x7c, 0x00, 0x36, 0x05, 0x15, 0x28, 0xf2, 0x79, 0x16, 0x04, 0x98, 0xf3, 0xf3, 0x2c, + 0xf2, 0x19, 0x7e, 0x97, 0x61, 0x2e, 0x78, 0xb3, 0xd2, 0xb6, 0xba, 0x73, 0x5e, 0x43, 0x36, 0x9c, + 0x16, 0xb8, 0xa7, 0x61, 0xf8, 0x10, 0xd8, 0x8a, 0x6b, 0x08, 0x3e, 0x49, 0xfc, 0x94, 0xd1, 0x41, + 0xee, 0x5e, 0xb3, 0x3a, 0x41, 0x36, 0x94, 0xa3, 0xe4, 0x44, 0xc3, 0xf0, 0x1e, 0x58, 0x57, 0x64, + 0xcc, 0x18, 0x65, 0xe3, 0x99, 0x73, 0x92, 0x06, 0x25, 0x76, 0x98, 0x43, 0xc5, 0xb8, 0xd7, 0xe0, + 0x3f, 0x99, 0x6a, 0x8c, 0x05, 0x23, 0x81, 0xcf, 0xf3, 0x8b, 0x37, 0xe7, 0xdb, 0xd5, 0x6e, 0xbd, + 0xe7, 0x38, 0x33, 0xc3, 0x75, 0x0e, 0xf5, 0xe1, 0x98, 0xa2, 0xf0, 0x99, 0xa4, 0x49, 0xbb, 0xbc, + 0xd5, 0xa8, 0x5c, 0x80, 0x36, 0xa8, 0xa5, 0x8c, 0x50, 0x96, 0xfb, 0xb7, 0xd0, 0xb6, 0xba, 0x2b, + 0x5e, 0xf1, 0x1b, 0x86, 0xa0, 0x91, 0x69, 0xd3, 0x7d, 0xf3, 0xcf, 0x7a, 0xfa, 0xa2, 0x9c, 0xbe, + 0x73, 0xcd, 0x74, 0x13, 0x95, 0x51, 0xa1, 0x66, 0x6f, 0x64, 0xb3, 0xca, 0x9d, 0x8f, 0x13, 0xd9, + 0x96, 0x10, 0xb8, 0x0b, 0x16, 0xf5, 0x46, 0xea, 0x68, 0xed, 0x19, 0xd1, 0x3e, 0x52, 0x1d, 0x9e, + 0x69, 0xfd, 0x17, 0xac, 0x32, 0xaf, 0x0f, 0x6a, 0x31, 0x16, 0x28, 0x44, 0x02, 0xc9, 0x60, 0xeb, + 0xbd, 0x86, 0xa3, 0x3e, 0x49, 0xc7, 0x7c, 0x92, 0xce, 0xa9, 0xfc, 0x24, 0xbd, 0xa2, 0xb1, 0xf3, + 0xd9, 0x02, 0x8d, 0x6b, 0x26, 0xc0, 0x2d, 0x50, 0xd7, 0x3a, 0x13, 0x14, 0x63, 0x99, 0xc8, 0x92, + 0x07, 0x54, 0xe9, 0x39, 0x8a, 0x31, 0x7c, 0x02, 0x6e, 0x27, 0x59, 0x3c, 0xb6, 0xee, 0x9c, 0x24, + 0x84, 0x5f, 0xe0, 0xd0, 0x7f, 0x4f, 0xc4, 0x85, 0xbe, 0xa3, 0x0e, 0xe0, 0x56, 0x92, 0xc5, 0xc6, + 0x85, 0xc7, 0xba, 0xed, 0x15, 0x11, 0x17, 0x6a, 0x1e, 0xdc, 0x01, 0xca, 0x2d, 0x63, 0xcc, 0x10, + 0x45, 0x19, 0x96, 0xf6, 0x5b, 0xde, 0x9a, 0x44, 0x54, 0xe3, 0xcb, 0xbc, 0xde, 0xf9, 0x5d, 0x05, + 0xcb, 0xfb, 0x51, 0xc6, 0x05, 0x66, 0x4a, 0xe9, 0x0e, 0x58, 0x0e, 0xd4, 0xef, 0x09, 0xa9, 0x7b, + 0x4b, 0x5f, 0x7e, 0x7d, 0xad, 0xce, 0xb1, 0x4a, 0xdb, 0xf2, 0xea, 0x1a, 0x96, 0xb2, 0xd3, 0x89, + 0x2d, 0x37, 0xaf, 0x83, 0x8e, 0xa2, 0xf2, 0x57, 0x5b, 0x5e, 0x7a, 0x90, 0xf6, 0x40, 0x3e, 0x66, + 0xfe, 0x93, 0x55, 0xa9, 0x59, 0xe3, 0x8d, 0x2f, 0xbf, 0x59, 0xbb, 0xe0, 0x7f, 0x75, 0xbd, 0x90, + 0xd1, 0x34, 0xc5, 0xe1, 0x78, 0x55, 0xd4, 0x86, 0xa9, 0x35, 0x3a, 0x50, 0x60, 0xb1, 0x2c, 0x4f, + 0xc1, 0xfa, 0xc4, 0xdb, 0xee, 0x93, 0x44, 0x60, 0x36, 0x44, 0x91, 0x5c, 0xaf, 0x7a, 0x6f, 0x73, + 0x2a, 0xdc, 0x03, 0xfd, 0x1e, 0x7b, 0x30, 0xa7, 0x79, 0x92, 0x75, 0xa4, 0x49, 0xf0, 0x2d, 0x58, + 0x9b, 0x1a, 0xae, 0x16, 0xaf, 0x7f, 0xcd, 0x6d, 0x27, 0x1d, 0x76, 0xae, 0x68, 0xf3, 0x56, 0xc3, + 0x72, 0xc1, 0x7e, 0x03, 0x56, 0xaf, 0xea, 0xbf, 0x03, 0x6a, 0x01, 0x12, 0x78, 0x40, 0xd9, 0x68, + 0x3a, 0x91, 0x02, 0x82, 0xdb, 0x60, 0xc5, 0x28, 0x0b, 0x68, 0x96, 0x08, 0xbd, 0x31, 0xcb, 0xba, + 0xb8, 0x9f, 0xd7, 0xf6, 0xfa, 0xdf, 0x2e, 0x5b, 0xd6, 0xf7, 0xcb, 0x96, 0xf5, 0xf3, 0xb2, 0x65, + 0x81, 0x6d, 0x42, 0x95, 0xe8, 0x94, 0xd1, 0x0f, 0xa3, 0xd9, 0xfa, 0x4f, 0xac, 0xb3, 0x05, 0x69, + 0x4d, 0xff, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xce, 0xf4, 0x0f, 0x0b, 0x39, 0x07, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.go index 05a3c0dcf1d0..975df8f54cf0 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.go @@ -63,7 +63,7 @@ func (x Listener_DrainType) String() string { return proto.EnumName(Listener_DrainType_name, int32(x)) } func (Listener_DrainType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_lds_c95cf2bbe1967f3a, []int{0, 0} + return fileDescriptor_lds_55ff9a91a3ab1c60, []int{0, 0} } // [#comment:next free field: 16] @@ -178,7 +178,7 @@ func (m *Listener) Reset() { *m = Listener{} } func (m *Listener) String() string { return proto.CompactTextString(m) } func (*Listener) ProtoMessage() {} func (*Listener) Descriptor() ([]byte, []int) { - return fileDescriptor_lds_c95cf2bbe1967f3a, []int{0} + return fileDescriptor_lds_55ff9a91a3ab1c60, []int{0} } func (m *Listener) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -336,7 +336,7 @@ func (m *Listener_DeprecatedV1) Reset() { *m = Listener_DeprecatedV1{} } func (m *Listener_DeprecatedV1) String() string { return proto.CompactTextString(m) } func (*Listener_DeprecatedV1) ProtoMessage() {} func (*Listener_DeprecatedV1) Descriptor() ([]byte, []int) { - return fileDescriptor_lds_c95cf2bbe1967f3a, []int{0, 0} + return fileDescriptor_lds_55ff9a91a3ab1c60, []int{0, 0} } func (m *Listener_DeprecatedV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1651,63 +1651,64 @@ var ( ErrIntOverflowLds = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("envoy/api/v2/lds.proto", fileDescriptor_lds_c95cf2bbe1967f3a) } +func init() { proto.RegisterFile("envoy/api/v2/lds.proto", fileDescriptor_lds_55ff9a91a3ab1c60) } -var fileDescriptor_lds_c95cf2bbe1967f3a = []byte{ - // 872 bytes of a gzipped FileDescriptorProto +var fileDescriptor_lds_55ff9a91a3ab1c60 = []byte{ + // 885 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x4f, 0x6f, 0x1b, 0x45, - 0x18, 0xc6, 0x33, 0x49, 0xda, 0xd8, 0x63, 0xc7, 0xb1, 0x06, 0x94, 0x0e, 0x26, 0xb5, 0x5d, 0x03, - 0x92, 0xe1, 0x60, 0x53, 0x57, 0x02, 0xa9, 0xaa, 0x84, 0xea, 0x1a, 0xab, 0x95, 0x5c, 0x0c, 0x9b, - 0x34, 0x6d, 0x4e, 0xa3, 0xf1, 0xee, 0x6b, 0x67, 0xc4, 0x7a, 0x66, 0x3b, 0x33, 0xeb, 0xe2, 0x2b, - 0x27, 0xc4, 0x11, 0x2e, 0x7c, 0x04, 0x3e, 0x03, 0x27, 0x8e, 0x3d, 0x22, 0x71, 0xe7, 0x4f, 0xc4, - 0x05, 0xf1, 0x25, 0xd0, 0x8e, 0x77, 0x8d, 0xdd, 0x24, 0xb4, 0x87, 0xde, 0xde, 0x9d, 0xf7, 0x79, - 0x7f, 0x33, 0x7a, 0x9e, 0xf1, 0x18, 0xef, 0x83, 0x9c, 0xa9, 0x79, 0x9b, 0x47, 0xa2, 0x3d, 0xeb, - 0xb4, 0xc3, 0xc0, 0xb4, 0x22, 0xad, 0xac, 0x22, 0x45, 0xb7, 0xde, 0xe2, 0x91, 0x68, 0xcd, 0x3a, - 0x95, 0xda, 0x9a, 0xca, 0x57, 0x1a, 0xda, 0x3c, 0x08, 0x34, 0x98, 0x54, 0x5e, 0x39, 0x38, 0x2f, - 0x18, 0x71, 0x03, 0x17, 0x76, 0x03, 0x61, 0x7c, 0x35, 0x03, 0x3d, 0x4f, 0xbb, 0xef, 0xae, 0x1f, - 0x41, 0x18, 0x0b, 0x12, 0xf4, 0xb2, 0xc8, 0x18, 0x13, 0xa5, 0x26, 0x21, 0x38, 0x19, 0x97, 0x52, - 0x59, 0x6e, 0x85, 0x92, 0xd9, 0xfe, 0xd5, 0xb4, 0xeb, 0xbe, 0x46, 0xf1, 0xb8, 0x1d, 0xc4, 0xda, - 0x09, 0x2e, 0xeb, 0x3f, 0xd3, 0x3c, 0x8a, 0x40, 0x67, 0xf3, 0xd7, 0x66, 0x3c, 0x14, 0x01, 0xb7, - 0xd0, 0xce, 0x8a, 0xb4, 0xf1, 0xe6, 0x44, 0x4d, 0x94, 0x2b, 0xdb, 0x49, 0xb5, 0x58, 0x6d, 0xfc, - 0x99, 0xc7, 0xb9, 0x41, 0x7a, 0x3e, 0x42, 0xf0, 0xb6, 0xe4, 0x53, 0xa0, 0xa8, 0x8e, 0x9a, 0x79, - 0xcf, 0xd5, 0xa4, 0x87, 0x77, 0x52, 0x83, 0xe8, 0x66, 0x1d, 0x35, 0x0b, 0x9d, 0x4a, 0x6b, 0xd5, - 0xd0, 0x56, 0xe2, 0x50, 0xeb, 0xee, 0x42, 0xd1, 0x2d, 0x3d, 0xff, 0xad, 0xb6, 0xf1, 0xd3, 0xdf, - 0x3f, 0x6f, 0x5d, 0xf9, 0x16, 0x6d, 0x96, 0x91, 0x97, 0x8d, 0x92, 0xc7, 0x78, 0x77, 0x2c, 0x42, - 0x0b, 0x9a, 0xf9, 0xa7, 0x5c, 0x48, 0x43, 0xb7, 0xea, 0x5b, 0xcd, 0x42, 0xa7, 0xb1, 0xce, 0x5a, - 0x1a, 0xd5, 0x77, 0xda, 0x7b, 0x89, 0x74, 0x85, 0xf9, 0x1d, 0xda, 0xcc, 0x21, 0xaf, 0x38, 0xfe, - 0xaf, 0x69, 0xc8, 0x7d, 0x5c, 0x8e, 0x0d, 0x30, 0xa5, 0xc5, 0x44, 0x48, 0x1e, 0xb2, 0xc0, 0x58, - 0xba, 0x9d, 0x9e, 0x73, 0xe1, 0x54, 0x2b, 0x73, 0xaa, 0xd5, 0x55, 0x2a, 0x3c, 0xe6, 0x61, 0x0c, - 0xdd, 0x4d, 0x8a, 0xbc, 0x52, 0x6c, 0x60, 0x98, 0x8e, 0xf5, 0x8c, 0x25, 0x63, 0x7c, 0x23, 0x4a, - 0xce, 0xa7, 0xa4, 0x04, 0x3f, 0x31, 0x9c, 0x8d, 0xe2, 0xf1, 0x18, 0x34, 0x0b, 0xc5, 0x54, 0x58, - 0x36, 0x9a, 0x5b, 0x30, 0xf4, 0x8a, 0x43, 0x1f, 0x9c, 0x43, 0x3f, 0x7a, 0x20, 0xed, 0xad, 0x8e, - 0x83, 0x7b, 0xd7, 0x23, 0xd0, 0xf7, 0x96, 0x94, 0xae, 0x83, 0x0c, 0x12, 0x46, 0x37, 0x41, 0x90, - 0x8f, 0x71, 0x6e, 0x0a, 0x96, 0x07, 0xdc, 0x72, 0x7a, 0xd5, 0xe1, 0xde, 0xbe, 0xc0, 0xd1, 0x87, - 0xa9, 0xc4, 0x5b, 0x8a, 0xc9, 0x7d, 0xbc, 0x1b, 0x40, 0xa4, 0xc1, 0xe7, 0x16, 0x02, 0x36, 0xbb, - 0x49, 0x77, 0xdc, 0xf4, 0x3b, 0xeb, 0xd3, 0x59, 0x98, 0xad, 0xde, 0x52, 0x7b, 0x7c, 0xd3, 0x2b, - 0x06, 0x2b, 0x5f, 0xe4, 0x13, 0x8c, 0x03, 0xcd, 0x85, 0x64, 0x76, 0x1e, 0x01, 0xcd, 0xd5, 0x51, - 0xb3, 0xd4, 0xa9, 0x5f, 0x86, 0x49, 0x84, 0x47, 0xf3, 0x08, 0xbc, 0x7c, 0x90, 0x95, 0xe4, 0x18, - 0x97, 0xb3, 0xac, 0xd8, 0x22, 0x0e, 0x43, 0xf3, 0x2e, 0xd1, 0xf7, 0x2e, 0x49, 0x34, 0xe3, 0x2d, - 0x92, 0xed, 0x6e, 0x27, 0xa1, 0x7a, 0x7b, 0xe1, 0xda, 0xaa, 0x21, 0x77, 0x70, 0xc1, 0x6a, 0x2e, - 0x4d, 0xc4, 0x35, 0x48, 0x4b, 0xf1, 0xcb, 0x82, 0xf4, 0x56, 0xe5, 0xe4, 0x23, 0x9c, 0x1b, 0x6b, - 0x80, 0x91, 0x90, 0x01, 0x2d, 0xbc, 0x74, 0x74, 0xa9, 0x25, 0x4f, 0x70, 0xc5, 0xfa, 0x11, 0x1b, - 0x73, 0x63, 0x99, 0x8a, 0x40, 0xb2, 0xa7, 0x31, 0xc4, 0xc0, 0x42, 0x90, 0x13, 0x7b, 0x4a, 0x8b, - 0xaf, 0x10, 0xf9, 0xbe, 0xf5, 0xa3, 0x3e, 0x37, 0x76, 0x18, 0x81, 0xfc, 0x22, 0x19, 0x1e, 0xb8, - 0x59, 0xd2, 0xc7, 0x25, 0xa3, 0xfc, 0x2f, 0x21, 0xe1, 0xba, 0x1f, 0x39, 0xdd, 0x75, 0x2e, 0xd5, - 0x2e, 0x48, 0xfc, 0xd0, 0x09, 0x87, 0x4e, 0xe7, 0xed, 0x9a, 0x95, 0x2f, 0x43, 0x4e, 0xf1, 0x8d, - 0x51, 0x3c, 0x19, 0x8b, 0xaf, 0x98, 0x86, 0x19, 0x68, 0x03, 0xec, 0x99, 0x16, 0x16, 0x52, 0xef, - 0x99, 0xd2, 0x01, 0x68, 0x5a, 0x7a, 0xa5, 0x6b, 0x7f, 0x7d, 0x01, 0xf2, 0x16, 0x9c, 0xc7, 0x09, - 0x66, 0xe1, 0xfe, 0x30, 0x81, 0x90, 0x13, 0x4c, 0x5f, 0x4c, 0x96, 0x59, 0x31, 0x05, 0x15, 0x5b, - 0xba, 0xe7, 0x36, 0x78, 0xeb, 0xdc, 0x06, 0xbd, 0xf4, 0x85, 0xea, 0x6e, 0xff, 0xf0, 0x7b, 0x0d, - 0x79, 0xfb, 0x2f, 0xa4, 0x7a, 0xb4, 0x18, 0xaf, 0x0c, 0x70, 0x71, 0xf5, 0x4e, 0x92, 0x3b, 0xb8, - 0x98, 0xd8, 0xcf, 0xac, 0x62, 0x91, 0xd2, 0xd6, 0xbd, 0x3a, 0xff, 0x1f, 0x19, 0x4e, 0xf4, 0x47, - 0xea, 0x73, 0xa5, 0x6d, 0xe3, 0x7d, 0x9c, 0x5f, 0x5e, 0x4d, 0x52, 0xc0, 0x3b, 0xbd, 0x4f, 0xfb, - 0x77, 0x1f, 0x0d, 0x8e, 0xca, 0x1b, 0x64, 0x0f, 0x17, 0x1e, 0x0e, 0x7b, 0x0f, 0xfa, 0x27, 0x6c, - 0xf8, 0xd9, 0xe0, 0xa4, 0x8c, 0x3a, 0xff, 0x20, 0x4c, 0xb3, 0xfb, 0xd7, 0xcb, 0x9e, 0xec, 0x43, - 0xd0, 0x33, 0xe1, 0x03, 0x79, 0x82, 0xf7, 0x0e, 0xad, 0x06, 0x3e, 0xcd, 0x14, 0x86, 0x54, 0xd7, - 0xd3, 0x59, 0x8e, 0x78, 0xf0, 0x34, 0x06, 0x63, 0x2b, 0xb5, 0x4b, 0xfb, 0x26, 0x52, 0xd2, 0x40, - 0x63, 0xa3, 0x89, 0x3e, 0x44, 0x24, 0xc6, 0xa5, 0x3e, 0x58, 0xff, 0xf4, 0x35, 0x82, 0x1b, 0x5f, - 0xff, 0xfa, 0xd7, 0xf7, 0x9b, 0x07, 0x8d, 0x6b, 0x6b, 0xff, 0x3e, 0xb7, 0x33, 0xc3, 0xcd, 0x6d, - 0xf4, 0x41, 0xf7, 0x8d, 0x1f, 0xcf, 0xaa, 0xe8, 0xf9, 0x59, 0x15, 0xfd, 0x72, 0x56, 0x45, 0x7f, - 0x9c, 0x55, 0xd1, 0x37, 0x08, 0x8d, 0xae, 0x3a, 0x37, 0x6f, 0xfd, 0x1b, 0x00, 0x00, 0xff, 0xff, - 0x36, 0x1d, 0x31, 0x21, 0x25, 0x07, 0x00, 0x00, + 0x18, 0xc6, 0x33, 0x4e, 0xda, 0xd8, 0x63, 0xc7, 0xb1, 0x46, 0x28, 0x5d, 0x4c, 0x6a, 0xbb, 0x06, + 0x24, 0xc3, 0xc1, 0x26, 0xae, 0x04, 0x52, 0x55, 0x09, 0xd5, 0x35, 0x56, 0x2b, 0xb9, 0xb8, 0x6c, + 0xd2, 0xb4, 0x39, 0x8d, 0xc6, 0xbb, 0xaf, 0x9d, 0x11, 0xeb, 0x99, 0xed, 0xcc, 0xac, 0x5b, 0x5f, + 0x39, 0x21, 0x8e, 0x70, 0xe1, 0x23, 0xf0, 0x19, 0x38, 0x71, 0xec, 0x11, 0x89, 0x3b, 0x7f, 0x22, + 0x2e, 0x88, 0x2f, 0x81, 0x76, 0x76, 0xd7, 0xd8, 0x4d, 0x42, 0x73, 0xe0, 0xf6, 0xee, 0xbc, 0xcf, + 0xfb, 0x9b, 0xd1, 0xf3, 0x8c, 0xc7, 0x78, 0x0f, 0xc4, 0x5c, 0x2e, 0x3a, 0x2c, 0xe4, 0x9d, 0x79, + 0xb7, 0x13, 0xf8, 0xba, 0x1d, 0x2a, 0x69, 0x24, 0x29, 0xd9, 0xf5, 0x36, 0x0b, 0x79, 0x7b, 0xde, + 0xad, 0xd6, 0xd7, 0x54, 0x9e, 0x54, 0xd0, 0x61, 0xbe, 0xaf, 0x40, 0xa7, 0xf2, 0xea, 0xfe, 0x79, + 0xc1, 0x98, 0x69, 0xb8, 0xb0, 0xeb, 0x73, 0xed, 0xc9, 0x39, 0xa8, 0x45, 0xda, 0x7d, 0x6f, 0xfd, + 0x08, 0x5c, 0x1b, 0x10, 0xa0, 0x96, 0x45, 0xc6, 0x98, 0x4a, 0x39, 0x0d, 0xc0, 0xca, 0x98, 0x10, + 0xd2, 0x30, 0xc3, 0xa5, 0xc8, 0xf6, 0xaf, 0xa5, 0x5d, 0xfb, 0x35, 0x8e, 0x26, 0x1d, 0x3f, 0x52, + 0x56, 0x70, 0x59, 0xff, 0x85, 0x62, 0x61, 0x08, 0x2a, 0x9b, 0xbf, 0x31, 0x67, 0x01, 0xf7, 0x99, + 0x81, 0x4e, 0x56, 0xa4, 0x8d, 0xb7, 0xa6, 0x72, 0x2a, 0x6d, 0xd9, 0x89, 0xab, 0x64, 0xb5, 0xf9, + 0x47, 0x01, 0xe7, 0x87, 0xe9, 0xf9, 0x08, 0xc1, 0x5b, 0x82, 0xcd, 0xc0, 0x41, 0x0d, 0xd4, 0x2a, + 0xb8, 0xb6, 0x26, 0x7d, 0xbc, 0x9d, 0x1a, 0xe4, 0xe4, 0x1a, 0xa8, 0x55, 0xec, 0x56, 0xdb, 0xab, + 0x86, 0xb6, 0x63, 0x87, 0xda, 0xf7, 0x12, 0x45, 0xaf, 0xfc, 0xea, 0xd7, 0xfa, 0xc6, 0x8f, 0x7f, + 0xfd, 0xb4, 0x79, 0xed, 0x1b, 0x94, 0xab, 0x20, 0x37, 0x1b, 0x25, 0x4f, 0xf1, 0xce, 0x84, 0x07, + 0x06, 0x14, 0xf5, 0x4e, 0x19, 0x17, 0xda, 0xd9, 0x6c, 0x6c, 0xb6, 0x8a, 0xdd, 0xe6, 0x3a, 0x6b, + 0x69, 0xd4, 0xc0, 0x6a, 0xef, 0xc7, 0xd2, 0x15, 0xe6, 0xb7, 0x28, 0x97, 0x47, 0x6e, 0x69, 0xf2, + 0x6f, 0x53, 0x93, 0x07, 0xb8, 0x12, 0x69, 0xa0, 0x52, 0xf1, 0x29, 0x17, 0x2c, 0xa0, 0xbe, 0x36, + 0xce, 0x56, 0x7a, 0xce, 0xc4, 0xa9, 0x76, 0xe6, 0x54, 0xbb, 0x27, 0x65, 0x70, 0xcc, 0x82, 0x08, + 0x7a, 0x39, 0x07, 0xb9, 0xe5, 0x48, 0xc3, 0x28, 0x1d, 0xeb, 0x6b, 0x43, 0x26, 0xf8, 0x56, 0x18, + 0x9f, 0x4f, 0x0a, 0x01, 0x5e, 0x6c, 0x38, 0x1d, 0x47, 0x93, 0x09, 0x28, 0x1a, 0xf0, 0x19, 0x37, + 0x74, 0xbc, 0x30, 0xa0, 0x9d, 0x6b, 0x16, 0xbd, 0x7f, 0x0e, 0xfd, 0xe4, 0xa1, 0x30, 0xb7, 0xbb, + 0x16, 0xee, 0xde, 0x0c, 0x41, 0xdd, 0x5f, 0x52, 0x7a, 0x16, 0x32, 0x8c, 0x19, 0xbd, 0x18, 0x41, + 0x3e, 0xc1, 0xf9, 0x19, 0x18, 0xe6, 0x33, 0xc3, 0x9c, 0xeb, 0x16, 0xf7, 0xce, 0x05, 0x8e, 0x3e, + 0x4a, 0x25, 0xee, 0x52, 0x4c, 0x1e, 0xe0, 0x1d, 0x1f, 0x42, 0x05, 0x1e, 0x33, 0xe0, 0xd3, 0xf9, + 0x81, 0xb3, 0x6d, 0xa7, 0xdf, 0x5d, 0x9f, 0xce, 0xc2, 0x6c, 0xf7, 0x97, 0xda, 0xe3, 0x03, 0xb7, + 0xe4, 0xaf, 0x7c, 0x91, 0x4f, 0x31, 0xf6, 0x15, 0xe3, 0x82, 0x9a, 0x45, 0x08, 0x4e, 0xbe, 0x81, + 0x5a, 0xe5, 0x6e, 0xe3, 0x32, 0x4c, 0x2c, 0x3c, 0x5a, 0x84, 0xe0, 0x16, 0xfc, 0xac, 0x24, 0xc7, + 0xb8, 0x92, 0x65, 0x45, 0x93, 0x38, 0xb4, 0x53, 0xb0, 0x89, 0xbe, 0x7f, 0x49, 0xa2, 0x19, 0x2f, + 0x49, 0xb6, 0xb7, 0x15, 0x87, 0xea, 0xee, 0x06, 0x6b, 0xab, 0x9a, 0xdc, 0xc5, 0x45, 0xa3, 0x98, + 0xd0, 0x21, 0x53, 0x20, 0x8c, 0x83, 0xdf, 0x14, 0xa4, 0xbb, 0x2a, 0x27, 0x1f, 0xe3, 0xfc, 0x44, + 0x01, 0x8c, 0xb9, 0xf0, 0x9d, 0xe2, 0x1b, 0x47, 0x97, 0x5a, 0xf2, 0x0c, 0x57, 0x8d, 0x17, 0xd2, + 0x09, 0xd3, 0x86, 0xca, 0x10, 0x04, 0x7d, 0x1e, 0x41, 0x04, 0x34, 0x00, 0x31, 0x35, 0xa7, 0x4e, + 0xe9, 0x0a, 0x91, 0xef, 0x19, 0x2f, 0x1c, 0x30, 0x6d, 0x46, 0x21, 0x88, 0x2f, 0xe2, 0xe1, 0xa1, + 0x9d, 0x25, 0x03, 0x5c, 0xd6, 0xd2, 0xfb, 0x12, 0x62, 0xae, 0xfd, 0x91, 0x3b, 0x3b, 0xd6, 0xa5, + 0xfa, 0x05, 0x89, 0x1f, 0x5a, 0xe1, 0xc8, 0xea, 0xdc, 0x1d, 0xbd, 0xf2, 0xa5, 0xc9, 0x29, 0xbe, + 0x35, 0x8e, 0xa6, 0x13, 0xfe, 0x92, 0x2a, 0x98, 0x83, 0xd2, 0x40, 0x5f, 0x28, 0x6e, 0x20, 0xf5, + 0x9e, 0x4a, 0xe5, 0x83, 0x72, 0xca, 0x57, 0xba, 0xf6, 0x37, 0x13, 0x90, 0x9b, 0x70, 0x9e, 0xc6, + 0x98, 0xc4, 0xfd, 0x51, 0x0c, 0x21, 0x27, 0xd8, 0x79, 0x3d, 0x59, 0x6a, 0xf8, 0x0c, 0x64, 0x64, + 0x9c, 0x5d, 0xbb, 0xc1, 0xdb, 0xe7, 0x36, 0xe8, 0xa7, 0x2f, 0x54, 0x6f, 0xeb, 0xfb, 0xdf, 0xea, + 0xc8, 0xdd, 0x7b, 0x2d, 0xd5, 0xa3, 0x64, 0xbc, 0x3a, 0xc4, 0xa5, 0xd5, 0x3b, 0x49, 0xee, 0xe2, + 0x52, 0x6c, 0x3f, 0x35, 0x92, 0x86, 0x52, 0x19, 0xfb, 0xea, 0xfc, 0x77, 0x64, 0x38, 0xd6, 0x1f, + 0xc9, 0xc7, 0x52, 0x99, 0xe6, 0x07, 0xb8, 0xb0, 0xbc, 0x9a, 0xa4, 0x88, 0xb7, 0xfb, 0x9f, 0x0d, + 0xee, 0x3d, 0x19, 0x1e, 0x55, 0x36, 0xc8, 0x2e, 0x2e, 0x3e, 0x1a, 0xf5, 0x1f, 0x0e, 0x4e, 0xe8, + 0xe8, 0xf3, 0xe1, 0x49, 0x05, 0x75, 0xff, 0x46, 0xd8, 0xc9, 0xee, 0x5f, 0x3f, 0x7b, 0xb2, 0x0f, + 0x41, 0xcd, 0xb9, 0x07, 0xe4, 0x19, 0xde, 0x3d, 0x34, 0x0a, 0xd8, 0x2c, 0x53, 0x68, 0x52, 0x5b, + 0x4f, 0x67, 0x39, 0xe2, 0xc2, 0xf3, 0x08, 0xb4, 0xa9, 0xd6, 0x2f, 0xed, 0xeb, 0x50, 0x0a, 0x0d, + 0xcd, 0x8d, 0x16, 0xfa, 0x08, 0x91, 0x08, 0x97, 0x07, 0x60, 0xbc, 0xd3, 0xff, 0x11, 0xdc, 0xfc, + 0xea, 0x97, 0x3f, 0xbf, 0xcb, 0xed, 0x37, 0x6f, 0xac, 0xfd, 0xfb, 0xdc, 0xc9, 0x0c, 0xd7, 0x77, + 0xd0, 0x87, 0xbd, 0x83, 0x1f, 0xce, 0x6a, 0xe8, 0xd5, 0x59, 0x0d, 0xfd, 0x7c, 0x56, 0x43, 0xbf, + 0x9f, 0xd5, 0x10, 0xae, 0x72, 0x99, 0x80, 0x43, 0x25, 0x5f, 0x2e, 0xd6, 0xf6, 0x78, 0x8c, 0xbe, + 0x46, 0x68, 0x7c, 0xdd, 0x7a, 0x7d, 0xfb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8e, 0x5e, 0x3c, + 0x8b, 0x43, 0x07, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.go index b6e90989ee5f..9c1b34b7923e 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.go @@ -53,7 +53,7 @@ func (x FilterChainMatch_ConnectionSourceType) String() string { return proto.EnumName(FilterChainMatch_ConnectionSourceType_name, int32(x)) } func (FilterChainMatch_ConnectionSourceType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_listener_ef3b6967d70fb7bd, []int{1, 0} + return fileDescriptor_listener_ae31d2c6c5b4e4cc, []int{1, 0} } type Filter struct { @@ -85,7 +85,7 @@ func (m *Filter) Reset() { *m = Filter{} } func (m *Filter) String() string { return proto.CompactTextString(m) } func (*Filter) ProtoMessage() {} func (*Filter) Descriptor() ([]byte, []int) { - return fileDescriptor_listener_ef3b6967d70fb7bd, []int{0} + return fileDescriptor_listener_ae31d2c6c5b4e4cc, []int{0} } func (m *Filter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -338,7 +338,7 @@ func (m *FilterChainMatch) Reset() { *m = FilterChainMatch{} } func (m *FilterChainMatch) String() string { return proto.CompactTextString(m) } func (*FilterChainMatch) ProtoMessage() {} func (*FilterChainMatch) Descriptor() ([]byte, []int) { - return fileDescriptor_listener_ef3b6967d70fb7bd, []int{1} + return fileDescriptor_listener_ae31d2c6c5b4e4cc, []int{1} } func (m *FilterChainMatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -469,7 +469,7 @@ func (m *FilterChain) Reset() { *m = FilterChain{} } func (m *FilterChain) String() string { return proto.CompactTextString(m) } func (*FilterChain) ProtoMessage() {} func (*FilterChain) Descriptor() ([]byte, []int) { - return fileDescriptor_listener_ef3b6967d70fb7bd, []int{2} + return fileDescriptor_listener_ae31d2c6c5b4e4cc, []int{2} } func (m *FilterChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -564,7 +564,7 @@ func (m *ListenerFilter) Reset() { *m = ListenerFilter{} } func (m *ListenerFilter) String() string { return proto.CompactTextString(m) } func (*ListenerFilter) ProtoMessage() {} func (*ListenerFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_listener_ef3b6967d70fb7bd, []int{3} + return fileDescriptor_listener_ae31d2c6c5b4e4cc, []int{3} } func (m *ListenerFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2538,64 +2538,64 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/listener/listener.proto", fileDescriptor_listener_ef3b6967d70fb7bd) -} - -var fileDescriptor_listener_ef3b6967d70fb7bd = []byte{ - // 865 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0x41, 0x6f, 0xe3, 0x44, - 0x14, 0xae, 0xe3, 0x34, 0x4d, 0x9e, 0xd3, 0xd6, 0x8c, 0xb2, 0xaa, 0x29, 0xdd, 0x6c, 0x88, 0x40, - 0x44, 0x48, 0xd8, 0x22, 0x45, 0x02, 0x04, 0x08, 0x25, 0xa1, 0xa8, 0xac, 0xd2, 0x50, 0x39, 0xdd, - 0x0a, 0xb8, 0x58, 0x53, 0x67, 0x92, 0x5a, 0x38, 0x33, 0xd6, 0xcc, 0x24, 0xdb, 0x5c, 0xf9, 0x35, - 0x68, 0xc5, 0x1f, 0x80, 0x13, 0xc7, 0x3d, 0xf2, 0x0b, 0x10, 0xf4, 0xc6, 0xaf, 0x58, 0x34, 0x63, - 0x3b, 0x34, 0x69, 0xb4, 0xac, 0x38, 0x70, 0x7b, 0xf3, 0xde, 0xf7, 0x7d, 0xfe, 0x9e, 0xe7, 0xbd, - 0x81, 0xb7, 0x08, 0x9d, 0xb3, 0x85, 0x87, 0x93, 0xc8, 0x9b, 0xb7, 0xbd, 0x38, 0x12, 0x92, 0x50, - 0xc2, 0x97, 0x81, 0x9b, 0x70, 0x26, 0x19, 0x7a, 0xa0, 0x51, 0x2e, 0x4e, 0x22, 0x77, 0xde, 0x76, - 0xf3, 0xe2, 0xe1, 0xa3, 0x15, 0x72, 0xc8, 0x38, 0xf1, 0xf0, 0x68, 0xc4, 0x89, 0x10, 0x29, 0xef, - 0xf0, 0x68, 0x05, 0x80, 0x67, 0xf2, 0xda, 0x0b, 0x09, 0x97, 0x1b, 0xab, 0x9a, 0x7e, 0x85, 0x05, - 0xc9, 0xaa, 0xaf, 0x4f, 0x18, 0x9b, 0xc4, 0xc4, 0xd3, 0xa7, 0xab, 0xd9, 0xd8, 0xc3, 0x74, 0x91, - 0x13, 0xd7, 0x4b, 0x42, 0xf2, 0x59, 0x98, 0xcb, 0xd6, 0xd7, 0xab, 0x4f, 0x39, 0x4e, 0x12, 0xc2, - 0x73, 0x53, 0x07, 0x73, 0x1c, 0x47, 0x23, 0x2c, 0x89, 0x97, 0x07, 0x59, 0xa1, 0x36, 0x61, 0x13, - 0xa6, 0x43, 0x4f, 0x45, 0x69, 0xb6, 0xf9, 0xcc, 0x80, 0xd2, 0x97, 0x51, 0x2c, 0x09, 0x47, 0x0f, - 0xa1, 0x48, 0xf1, 0x94, 0x38, 0x46, 0xc3, 0x68, 0x55, 0xba, 0x95, 0x5f, 0xfe, 0xfa, 0xd5, 0x2c, - 0xf2, 0x42, 0xc3, 0xf0, 0x75, 0x1a, 0xbd, 0x0f, 0xa5, 0x90, 0xd1, 0x71, 0x34, 0x71, 0x0a, 0x0d, - 0xa3, 0x65, 0xb5, 0x0f, 0xdc, 0xd4, 0x89, 0x9b, 0x3b, 0x71, 0x87, 0xda, 0xe7, 0xe9, 0x96, 0x9f, - 0x01, 0xd1, 0xc7, 0x50, 0x95, 0x8b, 0x84, 0x8c, 0x82, 0x8c, 0x58, 0xd4, 0xc4, 0xda, 0x3d, 0x62, - 0x87, 0x2e, 0x4e, 0xb7, 0x7c, 0x4b, 0x63, 0x7b, 0x1a, 0xda, 0xdd, 0x05, 0x2b, 0x25, 0x05, 0x2a, - 0xfb, 0xb8, 0x58, 0x36, 0xed, 0x62, 0xf3, 0xcf, 0x6d, 0xb0, 0x53, 0xb3, 0xbd, 0x6b, 0x1c, 0xd1, - 0x33, 0x2c, 0xc3, 0x6b, 0xd4, 0x81, 0xdd, 0x84, 0x93, 0x71, 0x74, 0x13, 0x70, 0x4c, 0x27, 0x44, - 0x38, 0x66, 0xc3, 0x6c, 0x59, 0xed, 0x23, 0x77, 0xe5, 0x56, 0xd5, 0xff, 0x77, 0x7b, 0xd1, 0x88, - 0xfb, 0x0a, 0xe4, 0x57, 0x53, 0x8a, 0x3e, 0x08, 0xf4, 0x36, 0xec, 0x65, 0x37, 0x1b, 0x88, 0xd9, - 0x78, 0x1c, 0xdd, 0x68, 0xa7, 0x15, 0x7f, 0x37, 0xcb, 0x0e, 0x75, 0x12, 0x7d, 0x02, 0x90, 0x96, - 0x83, 0x98, 0x50, 0x67, 0x5b, 0x37, 0x73, 0x74, 0xaf, 0x99, 0x27, 0x5f, 0x51, 0x79, 0xdc, 0xbe, - 0xc4, 0xf1, 0x8c, 0xf8, 0x95, 0x14, 0xdf, 0x27, 0x14, 0x0d, 0xa0, 0x26, 0xd8, 0x8c, 0x87, 0x24, - 0x58, 0x75, 0x5b, 0x7a, 0x05, 0xb7, 0x28, 0x65, 0x9e, 0xdf, 0xf5, 0xfc, 0x39, 0x54, 0x73, 0x3d, - 0xc6, 0xa5, 0x70, 0x76, 0x32, 0x9d, 0x97, 0xd9, 0xb1, 0x32, 0x1d, 0x45, 0x40, 0x97, 0x60, 0x8f, - 0x88, 0x90, 0x11, 0xc5, 0x32, 0x62, 0x54, 0xab, 0x38, 0xe5, 0x7f, 0xef, 0xa9, 0xbb, 0xab, 0x06, - 0xa3, 0xfc, 0x6e, 0xc9, 0x79, 0xf1, 0xc2, 0x6c, 0x19, 0xfe, 0xfe, 0x1d, 0x11, 0x25, 0x8c, 0xde, - 0x03, 0x24, 0x39, 0xa6, 0x42, 0x09, 0x06, 0x5a, 0x21, 0x64, 0xb1, 0x53, 0xd1, 0x3f, 0xf4, 0xb5, - 0x65, 0xe5, 0x3c, 0x2b, 0xa0, 0x63, 0x78, 0x80, 0x93, 0x24, 0x8e, 0xc2, 0xcc, 0x46, 0x96, 0x17, - 0x0e, 0x34, 0xcc, 0x56, 0xc5, 0xaf, 0xdd, 0x29, 0xe6, 0x1c, 0x81, 0xde, 0x84, 0xaa, 0x20, 0x7c, - 0x4e, 0x78, 0xa0, 0x46, 0x53, 0x38, 0x96, 0xc6, 0x5a, 0x69, 0x6e, 0xa0, 0x52, 0x28, 0x82, 0xac, - 0x5b, 0x3d, 0x40, 0x4e, 0xb5, 0x61, 0xb4, 0xf6, 0xda, 0x9f, 0xba, 0x1b, 0x57, 0xdd, 0x5d, 0x1f, - 0x2a, 0xb7, 0xc7, 0x28, 0x25, 0xa1, 0xfa, 0xe8, 0x50, 0x8b, 0x5c, 0x2c, 0x12, 0xd2, 0x05, 0xd5, - 0xf9, 0xf6, 0x0f, 0x46, 0xc1, 0x36, 0x7c, 0x10, 0xcb, 0x7c, 0xf3, 0x23, 0xa8, 0x6d, 0xc2, 0xa3, - 0x1d, 0x30, 0x3b, 0x83, 0x6f, 0xed, 0x2d, 0x54, 0x81, 0xed, 0xfe, 0xd7, 0xbd, 0x4e, 0xdf, 0x36, - 0x50, 0x15, 0xca, 0x27, 0xdf, 0x5c, 0x9c, 0xf8, 0x83, 0x4e, 0xdf, 0x2e, 0x3c, 0x2e, 0x96, 0x0d, - 0xbb, 0xe0, 0x5b, 0x82, 0x46, 0xc1, 0x88, 0x4d, 0x71, 0x44, 0x45, 0xf3, 0x67, 0x13, 0xac, 0x3b, - 0x76, 0xd0, 0x13, 0x40, 0x63, 0x7d, 0x0c, 0x42, 0x75, 0x0e, 0xa6, 0xca, 0x9f, 0xde, 0x51, 0xab, - 0xfd, 0xce, 0x2b, 0xb6, 0xe3, 0xdb, 0xe3, 0xf5, 0xad, 0x39, 0x05, 0x4b, 0xc6, 0x42, 0x2d, 0xa6, - 0x24, 0x37, 0x32, 0x5b, 0xe9, 0x35, 0x3d, 0xf5, 0xa2, 0xb9, 0x5f, 0xb0, 0xa7, 0x54, 0x48, 0x4e, - 0xf0, 0xf4, 0x22, 0x16, 0xbd, 0x14, 0xee, 0x83, 0x5c, 0xc6, 0xe8, 0x33, 0xd8, 0x49, 0xd5, 0xf3, - 0xcd, 0x7b, 0xf8, 0x52, 0x57, 0xdd, 0xe2, 0xf3, 0xdf, 0x1f, 0x6d, 0xf9, 0x39, 0x07, 0x75, 0x61, - 0x7f, 0x26, 0xd4, 0x52, 0xb0, 0x9b, 0x45, 0x7a, 0xfb, 0xd9, 0x33, 0x71, 0x78, 0x6f, 0x0a, 0xbb, - 0x8c, 0xc5, 0xe9, 0x20, 0xef, 0xce, 0x04, 0x39, 0x57, 0x0c, 0x3d, 0x12, 0xe8, 0x43, 0x28, 0x4f, - 0x89, 0xc4, 0x23, 0x2c, 0x71, 0xb6, 0x96, 0x6f, 0x6c, 0xd8, 0xa7, 0xb3, 0x0c, 0xe2, 0x2f, 0xc1, - 0xe8, 0x0c, 0xec, 0x7f, 0x66, 0x55, 0xb0, 0xf0, 0x7b, 0x22, 0x9d, 0x92, 0x16, 0x68, 0x6e, 0x10, - 0xb8, 0xc8, 0xa1, 0x43, 0x8d, 0xf4, 0xf7, 0xe5, 0x6a, 0xa2, 0xf9, 0x93, 0x01, 0x7b, 0xfd, 0xac, - 0xdd, 0xff, 0xed, 0x51, 0x35, 0xff, 0xeb, 0xa3, 0xda, 0xfd, 0xe0, 0xc7, 0xdb, 0xba, 0xf1, 0xfc, - 0xb6, 0x6e, 0xfc, 0x76, 0x5b, 0x37, 0xfe, 0xb8, 0xad, 0x1b, 0xdf, 0x95, 0xf3, 0xcb, 0x7a, 0x56, - 0x38, 0x38, 0xd1, 0xfd, 0x77, 0x92, 0xc8, 0xbd, 0x6c, 0xbb, 0x79, 0x57, 0x83, 0xe1, 0x55, 0x49, - 0x7f, 0xe1, 0xf8, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x51, 0x3e, 0xfd, 0x5c, 0x07, 0x00, - 0x00, + proto.RegisterFile("envoy/api/v2/listener/listener.proto", fileDescriptor_listener_ae31d2c6c5b4e4cc) +} + +var fileDescriptor_listener_ae31d2c6c5b4e4cc = []byte{ + // 880 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xcf, 0x6f, 0x23, 0x35, + 0x14, 0xae, 0x93, 0x34, 0x4d, 0x3c, 0x49, 0x3b, 0x58, 0x59, 0x75, 0x28, 0xdd, 0x6c, 0x08, 0x20, + 0x22, 0x24, 0x26, 0x52, 0x2a, 0x04, 0x08, 0x10, 0xca, 0x84, 0xa2, 0xb2, 0x4a, 0x43, 0x35, 0xe9, + 0x56, 0xfc, 0x38, 0x8c, 0xdc, 0x89, 0x93, 0x5a, 0x4c, 0xec, 0x91, 0xed, 0x64, 0x9b, 0x2b, 0x7f, + 0x0d, 0xe2, 0x80, 0xb8, 0xc2, 0x89, 0xe3, 0x1e, 0xf9, 0x0b, 0x10, 0xf4, 0xc6, 0x5f, 0xb1, 0xc8, + 0x9e, 0x99, 0xd0, 0xa4, 0xd1, 0x52, 0x71, 0xd8, 0x9b, 0xfd, 0xde, 0xf7, 0x7d, 0xf3, 0xbd, 0x79, + 0xef, 0x19, 0xbe, 0x49, 0xd8, 0x9c, 0x2f, 0xda, 0x38, 0xa6, 0xed, 0x79, 0xa7, 0x1d, 0x51, 0xa9, + 0x08, 0x23, 0x62, 0x79, 0x70, 0x63, 0xc1, 0x15, 0x47, 0x0f, 0x0c, 0xca, 0xc5, 0x31, 0x75, 0xe7, + 0x1d, 0x37, 0x4b, 0x1e, 0x3c, 0x5a, 0x21, 0x87, 0x5c, 0x90, 0x36, 0x1e, 0x8d, 0x04, 0x91, 0x32, + 0xe1, 0x1d, 0x1c, 0xae, 0x00, 0xf0, 0x4c, 0x5d, 0xb5, 0x43, 0x22, 0xd4, 0xc6, 0xac, 0xa1, 0x5f, + 0x62, 0x49, 0xd2, 0xec, 0xab, 0x13, 0xce, 0x27, 0x11, 0x69, 0x9b, 0xdb, 0xe5, 0x6c, 0xdc, 0xc6, + 0x6c, 0x91, 0x11, 0xd7, 0x53, 0x52, 0x89, 0x59, 0x98, 0xc9, 0xd6, 0xd7, 0xb3, 0x4f, 0x05, 0x8e, + 0x63, 0x22, 0x32, 0x53, 0xfb, 0x73, 0x1c, 0xd1, 0x11, 0x56, 0xa4, 0x9d, 0x1d, 0xd2, 0x44, 0x6d, + 0xc2, 0x27, 0xdc, 0x1c, 0xdb, 0xfa, 0x94, 0x44, 0x9b, 0x3f, 0x01, 0x58, 0xfc, 0x9c, 0x46, 0x8a, + 0x08, 0xf4, 0x10, 0x16, 0x18, 0x9e, 0x12, 0x07, 0x34, 0x40, 0xab, 0xec, 0x95, 0x7f, 0xfd, 0xfb, + 0xb7, 0x7c, 0x41, 0xe4, 0x1a, 0xc0, 0x37, 0x61, 0xf4, 0x1e, 0x2c, 0x86, 0x9c, 0x8d, 0xe9, 0xc4, + 0xc9, 0x35, 0x40, 0xcb, 0xea, 0xec, 0xbb, 0x89, 0x13, 0x37, 0x73, 0xe2, 0x0e, 0x8d, 0x4f, 0x2f, + 0xe7, 0x80, 0x93, 0x2d, 0x3f, 0x05, 0xa3, 0x0f, 0x61, 0x45, 0x2d, 0x62, 0x32, 0x0a, 0x52, 0x72, + 0xc1, 0x90, 0x6b, 0x77, 0xc8, 0x5d, 0xb6, 0x38, 0xd9, 0xf2, 0x2d, 0x83, 0xed, 0x19, 0xa8, 0x57, + 0x85, 0x56, 0x42, 0x0a, 0x74, 0xf4, 0x71, 0xa1, 0x94, 0xb7, 0x0b, 0xcd, 0xbf, 0xb6, 0xa1, 0x9d, + 0x18, 0xee, 0x5d, 0x61, 0xca, 0x4e, 0xb1, 0x0a, 0xaf, 0x50, 0x17, 0x56, 0x63, 0x41, 0xc6, 0xf4, + 0x3a, 0x10, 0x98, 0x4d, 0x88, 0x74, 0xf2, 0x8d, 0x7c, 0xcb, 0xea, 0x1c, 0xba, 0x2b, 0x9d, 0xd5, + 0x3d, 0x70, 0x7b, 0x74, 0x24, 0x7c, 0x0d, 0xf2, 0x2b, 0x09, 0xc5, 0x5c, 0x24, 0x7a, 0x0b, 0xee, + 0xa6, 0xdd, 0x0d, 0xe4, 0x6c, 0x3c, 0xa6, 0xd7, 0xc6, 0x69, 0xd9, 0xaf, 0xa6, 0xd1, 0xa1, 0x09, + 0xa2, 0x8f, 0x20, 0x4c, 0xd2, 0x41, 0x44, 0x98, 0xb3, 0x6d, 0x8a, 0x39, 0xbc, 0x53, 0xcc, 0x93, + 0x2f, 0x98, 0x3a, 0xea, 0x5c, 0xe0, 0x68, 0x46, 0xfc, 0x72, 0x82, 0xef, 0x13, 0x86, 0x06, 0xb0, + 0x26, 0xf9, 0x4c, 0x84, 0x24, 0x58, 0x75, 0x5b, 0xbc, 0x87, 0x5b, 0x94, 0x30, 0xcf, 0x6e, 0x7b, + 0xfe, 0x14, 0x56, 0x32, 0x3d, 0x2e, 0x94, 0x74, 0x76, 0x52, 0x9d, 0x17, 0xd9, 0xb1, 0x52, 0x1d, + 0x4d, 0x40, 0x17, 0xd0, 0x1e, 0x11, 0xa9, 0x28, 0xc3, 0x8a, 0x72, 0x66, 0x54, 0x9c, 0xd2, 0x7f, + 0xd7, 0xe4, 0x55, 0xf5, 0x70, 0x94, 0xde, 0x29, 0x3a, 0xcf, 0x9f, 0xe7, 0x5b, 0xc0, 0xdf, 0xbb, + 0x25, 0xa2, 0x85, 0xd1, 0xbb, 0x10, 0x29, 0x81, 0x99, 0xd4, 0x82, 0x81, 0x51, 0x08, 0x79, 0xe4, + 0x94, 0xcd, 0x0f, 0x7d, 0x65, 0x99, 0x39, 0x4b, 0x13, 0xe8, 0x08, 0x3e, 0xc0, 0x71, 0x1c, 0xd1, + 0x30, 0xb5, 0x91, 0xc6, 0xa5, 0x03, 0x1b, 0xf9, 0x56, 0xd9, 0xaf, 0xdd, 0x4a, 0x66, 0x1c, 0x89, + 0x5e, 0x87, 0x15, 0x49, 0xc4, 0x9c, 0x88, 0x40, 0x8f, 0xa7, 0x74, 0x2c, 0x83, 0xb5, 0x92, 0xd8, + 0x40, 0x87, 0x10, 0x85, 0x69, 0xb5, 0x66, 0x80, 0x9c, 0x4a, 0x03, 0xb4, 0x76, 0x3b, 0x1f, 0xbb, + 0x1b, 0xd7, 0xdd, 0x5d, 0x1f, 0x2a, 0xb7, 0xc7, 0x19, 0x23, 0xa1, 0xfe, 0xe8, 0xd0, 0x88, 0x9c, + 0x2f, 0x62, 0xe2, 0x41, 0x5d, 0xf9, 0xf6, 0xf7, 0x20, 0x67, 0x03, 0x1f, 0xca, 0x65, 0xbc, 0xf9, + 0x01, 0xac, 0x6d, 0xc2, 0xa3, 0x1d, 0x98, 0xef, 0x0e, 0xbe, 0xb6, 0xb7, 0x50, 0x19, 0x6e, 0xf7, + 0xbf, 0xec, 0x75, 0xfb, 0x36, 0x40, 0x15, 0x58, 0x3a, 0xfe, 0xea, 0xfc, 0xd8, 0x1f, 0x74, 0xfb, + 0x76, 0xee, 0x71, 0xa1, 0x04, 0xec, 0x9c, 0x6f, 0x49, 0x46, 0x83, 0x11, 0x9f, 0x62, 0xca, 0x64, + 0xf3, 0x97, 0x3c, 0xb4, 0x6e, 0xd9, 0x41, 0x4f, 0x20, 0x1a, 0x9b, 0x6b, 0x10, 0xea, 0x7b, 0x30, + 0xd5, 0xfe, 0xcc, 0x9e, 0x5a, 0x9d, 0xb7, 0xef, 0x59, 0x8e, 0x6f, 0x8f, 0xd7, 0xb7, 0xe6, 0x04, + 0x5a, 0x2a, 0x92, 0x7a, 0x31, 0x15, 0xb9, 0x56, 0xe9, 0x5a, 0xaf, 0xe9, 0xe9, 0x57, 0xcd, 0xfd, + 0x8c, 0x3f, 0x65, 0x52, 0x09, 0x82, 0xa7, 0xe7, 0x91, 0xec, 0x25, 0x70, 0x1f, 0xaa, 0xe5, 0x19, + 0x7d, 0x02, 0x77, 0x12, 0xf5, 0x6c, 0xf3, 0x1e, 0xbe, 0xd0, 0x95, 0x57, 0x78, 0xf6, 0xc7, 0xa3, + 0x2d, 0x3f, 0xe3, 0x20, 0x0f, 0xee, 0xcd, 0xa4, 0x5e, 0x0a, 0x7e, 0xbd, 0x48, 0xba, 0x9f, 0x3e, + 0x13, 0x07, 0x77, 0xa6, 0xd0, 0xe3, 0x3c, 0x4a, 0x06, 0xb9, 0x3a, 0x93, 0xe4, 0x4c, 0x33, 0xcc, + 0x48, 0xa0, 0xf7, 0x61, 0x69, 0x4a, 0x14, 0x1e, 0x61, 0x85, 0xd3, 0xb5, 0x7c, 0x6d, 0xc3, 0x3e, + 0x9d, 0xa6, 0x10, 0x7f, 0x09, 0x46, 0xa7, 0xd0, 0xfe, 0x77, 0x56, 0x25, 0x0f, 0xbf, 0x23, 0xca, + 0x29, 0x1a, 0x81, 0xe6, 0x06, 0x81, 0xf3, 0x0c, 0x3a, 0x34, 0x48, 0x7f, 0x4f, 0xad, 0x06, 0x9a, + 0x3f, 0x03, 0xb8, 0xdb, 0x4f, 0xcb, 0x7d, 0xa9, 0x0f, 0x6b, 0xfe, 0xff, 0x3e, 0xac, 0xde, 0xb7, + 0x3f, 0xdc, 0xd4, 0xc1, 0xb3, 0x9b, 0x3a, 0xf8, 0xfd, 0xa6, 0x0e, 0xfe, 0xbc, 0xa9, 0x03, 0xf8, + 0x06, 0xe5, 0x49, 0xed, 0xa6, 0x25, 0x9b, 0x7b, 0x79, 0x06, 0xbe, 0x29, 0x65, 0xe7, 0x1f, 0x73, + 0xfb, 0xc7, 0x06, 0xd3, 0x8d, 0xa9, 0x7b, 0xd1, 0x71, 0xb3, 0x1f, 0x30, 0x18, 0x5e, 0x16, 0x8d, + 0x91, 0xa3, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x8d, 0xd5, 0x71, 0xc4, 0x8b, 0x07, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/ratelimit/ratelimit.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/ratelimit/ratelimit.pb.go index 585273932e2d..a10fa7e3b0ea 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/ratelimit/ratelimit.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/ratelimit/ratelimit.pb.go @@ -74,7 +74,7 @@ func (m *RateLimitDescriptor) Reset() { *m = RateLimitDescriptor{} } func (m *RateLimitDescriptor) String() string { return proto.CompactTextString(m) } func (*RateLimitDescriptor) ProtoMessage() {} func (*RateLimitDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_ratelimit_5e2e983505abdc02, []int{0} + return fileDescriptor_ratelimit_9ad566e9b8a348d7, []int{0} } func (m *RateLimitDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -124,7 +124,7 @@ func (m *RateLimitDescriptor_Entry) Reset() { *m = RateLimitDescriptor_E func (m *RateLimitDescriptor_Entry) String() string { return proto.CompactTextString(m) } func (*RateLimitDescriptor_Entry) ProtoMessage() {} func (*RateLimitDescriptor_Entry) Descriptor() ([]byte, []int) { - return fileDescriptor_ratelimit_5e2e983505abdc02, []int{0, 0} + return fileDescriptor_ratelimit_9ad566e9b8a348d7, []int{0, 0} } func (m *RateLimitDescriptor_Entry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -594,11 +594,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/ratelimit/ratelimit.proto", fileDescriptor_ratelimit_5e2e983505abdc02) + proto.RegisterFile("envoy/api/v2/ratelimit/ratelimit.proto", fileDescriptor_ratelimit_9ad566e9b8a348d7) } -var fileDescriptor_ratelimit_5e2e983505abdc02 = []byte{ - // 224 bytes of a gzipped FileDescriptorProto +var fileDescriptor_ratelimit_9ad566e9b8a348d7 = []byte{ + // 239 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4b, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0x2c, 0xc8, 0xd4, 0x2f, 0x33, 0xd2, 0x2f, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, 0x41, 0xb0, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0xc4, 0xc0, 0xea, 0xf4, 0x12, @@ -610,7 +610,8 @@ var fileDescriptor_ratelimit_5e2e983505abdc02 = []byte{ 0xe5, 0x01, 0x66, 0xd6, 0x49, 0x8c, 0x4c, 0x1c, 0x8c, 0x41, 0x30, 0xd3, 0xa4, 0x5c, 0xb9, 0x58, 0xc1, 0xb2, 0x42, 0xd2, 0x5c, 0xcc, 0xd9, 0xa9, 0x95, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x4e, 0x9c, 0x20, 0xa5, 0x2c, 0x45, 0x4c, 0x0a, 0x8c, 0x41, 0x20, 0x51, 0x21, 0x79, 0x2e, 0xd6, 0xb2, - 0xc4, 0x9c, 0xd2, 0x54, 0x09, 0x26, 0x74, 0x69, 0x88, 0xb8, 0x93, 0xf8, 0x89, 0x47, 0x72, 0x8c, - 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x18, 0xc5, 0x09, 0x77, 0x4e, 0x12, 0x1b, 0xd8, - 0x5f, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x64, 0x13, 0x49, 0x1f, 0x32, 0x01, 0x00, 0x00, + 0xc4, 0x9c, 0xd2, 0x54, 0x09, 0x26, 0x74, 0x69, 0x88, 0xb8, 0x93, 0xfd, 0x89, 0x47, 0x72, 0x8c, + 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0xc8, 0xa5, 0x92, 0x99, 0x0f, 0x71, 0x5e, 0x41, + 0x51, 0x7e, 0x45, 0x25, 0x0e, 0x97, 0x06, 0x30, 0x46, 0x71, 0xc2, 0x39, 0x49, 0x6c, 0x60, 0xff, + 0x1b, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x8b, 0x52, 0x75, 0x5a, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.go index e766a0caa862..28f9f54ca9f5 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.go @@ -90,7 +90,7 @@ func (m *RouteConfiguration) Reset() { *m = RouteConfiguration{} } func (m *RouteConfiguration) String() string { return proto.CompactTextString(m) } func (*RouteConfiguration) ProtoMessage() {} func (*RouteConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_rds_2cdbcdf15bb9c97b, []int{0} + return fileDescriptor_rds_6318040f4fe6d9cb, []int{0} } func (m *RouteConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1054,44 +1054,45 @@ var ( ErrIntOverflowRds = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("envoy/api/v2/rds.proto", fileDescriptor_rds_2cdbcdf15bb9c97b) } +func init() { proto.RegisterFile("envoy/api/v2/rds.proto", fileDescriptor_rds_6318040f4fe6d9cb) } -var fileDescriptor_rds_2cdbcdf15bb9c97b = []byte{ - // 567 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x31, 0x6f, 0xd3, 0x40, - 0x14, 0xee, 0x25, 0x21, 0xa5, 0x97, 0x20, 0xb5, 0x97, 0x34, 0x49, 0x23, 0xe4, 0x44, 0x11, 0x43, - 0xe8, 0x60, 0x23, 0x33, 0x51, 0x26, 0x52, 0x04, 0x85, 0xa5, 0x92, 0x0b, 0x5d, 0xad, 0x8b, 0xfd, - 0x92, 0x58, 0x72, 0xee, 0xcc, 0xdd, 0xd9, 0x28, 0x2b, 0x13, 0x33, 0xfc, 0x09, 0x7e, 0x03, 0x2c, - 0x8c, 0x1d, 0x41, 0xec, 0x08, 0x45, 0x0c, 0xf0, 0x2f, 0x50, 0xce, 0x36, 0xd4, 0x69, 0x91, 0x10, - 0xea, 0x12, 0xbd, 0xdc, 0xf7, 0xbd, 0xf7, 0x7d, 0xdf, 0xdd, 0x4b, 0x70, 0x0b, 0x58, 0xc2, 0x17, - 0x16, 0x8d, 0x02, 0x2b, 0xb1, 0x2d, 0xe1, 0x4b, 0x33, 0x12, 0x5c, 0x71, 0x52, 0xd7, 0xe7, 0x26, - 0x8d, 0x02, 0x33, 0xb1, 0xbb, 0x37, 0x0b, 0x2c, 0x8f, 0x0b, 0xb0, 0xc6, 0x54, 0x42, 0xca, 0x5d, - 0x43, 0xfd, 0x40, 0x7a, 0x3c, 0x01, 0xb1, 0xc8, 0x50, 0xa3, 0xa8, 0xc0, 0x63, 0x05, 0xe9, 0x67, - 0xde, 0x3d, 0xe5, 0x7c, 0x1a, 0x82, 0x26, 0x50, 0xc6, 0xb8, 0xa2, 0x2a, 0xe0, 0x4c, 0xe6, 0xdd, - 0x19, 0xaa, 0xbf, 0x8d, 0xe3, 0x89, 0xf5, 0x52, 0xd0, 0x28, 0x02, 0x91, 0xe3, 0xed, 0x84, 0x86, - 0x81, 0x4f, 0x15, 0x58, 0x79, 0x91, 0x01, 0xcd, 0x29, 0x9f, 0x72, 0x5d, 0x5a, 0xab, 0x2a, 0x3d, - 0x1d, 0x7c, 0xa8, 0x60, 0xe2, 0xac, 0xc4, 0x0f, 0x39, 0x9b, 0x04, 0xd3, 0x58, 0x68, 0x31, 0x42, - 0x70, 0x85, 0xd1, 0x39, 0x74, 0x50, 0x1f, 0x0d, 0xb7, 0x1c, 0x5d, 0x93, 0xa7, 0xf8, 0x46, 0x12, - 0x08, 0x15, 0xd3, 0xd0, 0x9d, 0x71, 0xa9, 0x64, 0xa7, 0xd4, 0x2f, 0x0f, 0x6b, 0x76, 0xcf, 0x3c, - 0x7f, 0x33, 0x66, 0x9a, 0xe4, 0x34, 0x25, 0x1e, 0x71, 0xa9, 0x46, 0x95, 0xb3, 0xaf, 0xbd, 0x0d, - 0xa7, 0x9e, 0xfc, 0x39, 0x92, 0xc4, 0xc6, 0xbb, 0x01, 0x53, 0x20, 0x18, 0x0d, 0x5d, 0xce, 0xc2, - 0x85, 0x3b, 0x03, 0xea, 0x83, 0x90, 0x9d, 0x72, 0xbf, 0x3c, 0xdc, 0x72, 0x1a, 0x39, 0x78, 0xcc, - 0xc2, 0xc5, 0x51, 0x0a, 0x91, 0x19, 0x6e, 0x0b, 0x90, 0x11, 0x67, 0x12, 0x72, 0xba, 0xab, 0xb8, - 0x4b, 0x7d, 0xbf, 0x53, 0xd1, 0x4e, 0x6e, 0x15, 0x9d, 0xac, 0x5e, 0xc5, 0x4c, 0x9b, 0x4f, 0x69, - 0x18, 0xc3, 0x71, 0xb4, 0x8a, 0x36, 0xaa, 0xbd, 0xff, 0xf9, 0xb1, 0x5c, 0x7d, 0x83, 0xca, 0xdb, - 0x3f, 0x36, 0x9d, 0x66, 0x3e, 0x31, 0x13, 0x79, 0xc6, 0x1f, 0xf8, 0x3e, 0xb9, 0x8f, 0xbb, 0x97, - 0x29, 0x09, 0x98, 0xf3, 0x04, 0x3a, 0xd7, 0xb4, 0xc5, 0xf6, 0x85, 0x4e, 0x47, 0xc3, 0x64, 0x82, - 0x5b, 0x02, 0x5e, 0xc4, 0x20, 0xd5, 0xba, 0xcb, 0xea, 0xff, 0xba, 0x6c, 0x64, 0x03, 0x0b, 0x26, - 0x1f, 0xe3, 0x9d, 0xfc, 0x85, 0x5d, 0x2f, 0x8c, 0xa5, 0x5a, 0x5d, 0xdf, 0x66, 0x1f, 0x0d, 0x6b, - 0x76, 0xd7, 0x4c, 0x97, 0xc4, 0xcc, 0x97, 0xc4, 0x1c, 0x71, 0x1e, 0xea, 0xf1, 0xce, 0x76, 0xde, - 0x74, 0x98, 0xf5, 0x90, 0x7b, 0x78, 0xef, 0x12, 0xc3, 0x59, 0xd8, 0xeb, 0x3a, 0x6c, 0x6b, 0xdd, - 0x40, 0x9a, 0xd5, 0xfe, 0x5c, 0xc2, 0xbb, 0x7a, 0x7b, 0x1e, 0xe6, 0x3b, 0x7e, 0x02, 0x22, 0x09, - 0x3c, 0x20, 0xcf, 0x71, 0xfd, 0x44, 0x09, 0xa0, 0x73, 0x0d, 0x4b, 0x62, 0x14, 0x53, 0xff, 0xe6, - 0x3b, 0xe9, 0xe0, 0x6e, 0xef, 0xaf, 0x78, 0x7a, 0xcb, 0x83, 0x8d, 0x21, 0xba, 0x83, 0x48, 0x84, - 0x77, 0x9e, 0x30, 0x4f, 0xc0, 0x1c, 0x98, 0xa2, 0x61, 0x36, 0xfb, 0x76, 0xb1, 0xf7, 0x1c, 0xe1, - 0x82, 0xcc, 0xfe, 0xbf, 0x50, 0x0b, 0x8a, 0x1c, 0xd7, 0x1e, 0x81, 0xf2, 0x66, 0x57, 0x95, 0xa3, - 0xf7, 0xea, 0xcb, 0xf7, 0xb7, 0xa5, 0xbd, 0x41, 0xb3, 0xf0, 0xd7, 0x70, 0xa0, 0x7f, 0x36, 0xf2, - 0x00, 0xed, 0x8f, 0x1a, 0xef, 0x96, 0x06, 0x3a, 0x5b, 0x1a, 0xe8, 0xd3, 0xd2, 0x40, 0xdf, 0x96, - 0x06, 0x7a, 0x8d, 0xd0, 0xb8, 0xaa, 0x5f, 0xf2, 0xee, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x79, - 0x2e, 0xcd, 0x65, 0x9e, 0x04, 0x00, 0x00, +var fileDescriptor_rds_6318040f4fe6d9cb = []byte{ + // 579 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xbf, 0x6f, 0xd3, 0x40, + 0x14, 0xee, 0x35, 0xa1, 0xa5, 0x97, 0x22, 0xb5, 0xd7, 0x5f, 0x69, 0x84, 0x92, 0xa8, 0x62, 0x08, + 0x1d, 0x6c, 0x30, 0x13, 0x65, 0x22, 0x45, 0x50, 0x58, 0x8a, 0x5c, 0xe8, 0x6a, 0x5d, 0xed, 0xd7, + 0xc4, 0x92, 0x73, 0xcf, 0xdc, 0x9d, 0x0d, 0x59, 0x99, 0x98, 0xe1, 0x9f, 0xe0, 0x6f, 0x80, 0x85, + 0xb1, 0x23, 0x88, 0x1d, 0xa1, 0x88, 0x01, 0xfe, 0x0b, 0x94, 0x3b, 0x1b, 0xea, 0xb6, 0x48, 0x08, + 0xb1, 0x44, 0x2f, 0xf7, 0x7d, 0xef, 0x7d, 0xdf, 0x77, 0xf7, 0x12, 0xba, 0x0e, 0x22, 0xc7, 0xb1, + 0xcb, 0xd3, 0xd8, 0xcd, 0x3d, 0x57, 0x46, 0xca, 0x49, 0x25, 0x6a, 0x64, 0x8b, 0xe6, 0xdc, 0xe1, + 0x69, 0xec, 0xe4, 0x5e, 0xeb, 0x6a, 0x85, 0x15, 0xa2, 0x04, 0xf7, 0x88, 0x2b, 0xb0, 0xdc, 0x33, + 0x68, 0x14, 0xab, 0x10, 0x73, 0x90, 0xe3, 0x02, 0x6d, 0x57, 0x15, 0x30, 0xd3, 0x60, 0x3f, 0xcb, + 0xee, 0x01, 0xe2, 0x20, 0x01, 0x43, 0xe0, 0x42, 0xa0, 0xe6, 0x3a, 0x46, 0xa1, 0xca, 0xee, 0x02, + 0x35, 0xdf, 0x8e, 0xb2, 0x63, 0xf7, 0xb9, 0xe4, 0x69, 0x0a, 0xb2, 0xc4, 0x37, 0x72, 0x9e, 0xc4, + 0x11, 0xd7, 0xe0, 0x96, 0x45, 0x01, 0xac, 0x0e, 0x70, 0x80, 0xa6, 0x74, 0xa7, 0x95, 0x3d, 0xdd, + 0x7a, 0x5f, 0xa7, 0xcc, 0x9f, 0x8a, 0xef, 0xa2, 0x38, 0x8e, 0x07, 0x99, 0x34, 0x62, 0x8c, 0xd1, + 0xba, 0xe0, 0x23, 0x68, 0x92, 0x2e, 0xe9, 0x2d, 0xf8, 0xa6, 0x66, 0x8f, 0xe8, 0x95, 0x3c, 0x96, + 0x3a, 0xe3, 0x49, 0x30, 0x44, 0xa5, 0x55, 0x73, 0xb6, 0x5b, 0xeb, 0x35, 0xbc, 0x8e, 0x73, 0xfa, + 0x66, 0x1c, 0x9b, 0xe4, 0xd0, 0x12, 0xf7, 0x50, 0xe9, 0x7e, 0xfd, 0xe4, 0x4b, 0x67, 0xc6, 0x5f, + 0xcc, 0x7f, 0x1f, 0x29, 0xe6, 0xd1, 0xb5, 0x58, 0x68, 0x90, 0x82, 0x27, 0x01, 0x8a, 0x64, 0x1c, + 0x0c, 0x81, 0x47, 0x20, 0x55, 0xb3, 0xd6, 0xad, 0xf5, 0x16, 0xfc, 0x95, 0x12, 0xdc, 0x17, 0xc9, + 0x78, 0xcf, 0x42, 0x6c, 0x48, 0x37, 0x24, 0xa8, 0x14, 0x85, 0x82, 0x92, 0x1e, 0x68, 0x0c, 0x78, + 0x14, 0x35, 0xeb, 0xc6, 0xc9, 0xb5, 0xaa, 0x93, 0xe9, 0xab, 0x38, 0xb6, 0xf9, 0x90, 0x27, 0x19, + 0xec, 0xa7, 0xd3, 0x68, 0xfd, 0xc6, 0xbb, 0x1f, 0x1f, 0x6a, 0x73, 0xaf, 0x49, 0x6d, 0xe9, 0xfb, + 0xbc, 0xbf, 0x5a, 0x4e, 0x2c, 0x44, 0x9e, 0xe0, 0xdd, 0x28, 0x62, 0x77, 0x68, 0xeb, 0x22, 0x25, + 0x09, 0x23, 0xcc, 0xa1, 0x79, 0xc9, 0x58, 0xdc, 0x38, 0xd7, 0xe9, 0x1b, 0x98, 0x1d, 0xd3, 0x75, + 0x09, 0xcf, 0x32, 0x50, 0xfa, 0xac, 0xcb, 0xb9, 0x7f, 0x75, 0xb9, 0x52, 0x0c, 0xac, 0x98, 0x7c, + 0x40, 0x97, 0xcb, 0x17, 0x0e, 0xc2, 0x24, 0x53, 0x7a, 0x7a, 0x7d, 0xf3, 0x5d, 0xd2, 0x6b, 0x78, + 0x2d, 0xc7, 0x2e, 0x89, 0x53, 0x2e, 0x89, 0xd3, 0x47, 0x4c, 0xcc, 0x78, 0x7f, 0xa9, 0x6c, 0xda, + 0x2d, 0x7a, 0xd8, 0x6d, 0xba, 0x79, 0x81, 0xe1, 0x22, 0xec, 0x65, 0x13, 0x76, 0xfd, 0xac, 0x01, + 0x9b, 0xd5, 0xfb, 0x34, 0x4b, 0xd7, 0xcc, 0xf6, 0xdc, 0x2b, 0x77, 0xfc, 0x00, 0x64, 0x1e, 0x87, + 0xc0, 0x9e, 0xd2, 0xc5, 0x03, 0x2d, 0x81, 0x8f, 0x0c, 0xac, 0x58, 0xbb, 0x9a, 0xfa, 0x17, 0xdf, + 0xb7, 0x83, 0x5b, 0x9d, 0x3f, 0xe2, 0xf6, 0x96, 0xb7, 0x66, 0x7a, 0xe4, 0x06, 0x61, 0x29, 0x5d, + 0x7e, 0x28, 0x42, 0x09, 0x23, 0x10, 0x9a, 0x27, 0xc5, 0xec, 0xeb, 0xd5, 0xde, 0x53, 0x84, 0x73, + 0x32, 0xdb, 0x7f, 0x43, 0xad, 0x28, 0x22, 0x6d, 0xdc, 0x07, 0x1d, 0x0e, 0xff, 0x57, 0x8e, 0xce, + 0xcb, 0xcf, 0xdf, 0xde, 0xcc, 0x6e, 0x6e, 0xad, 0x56, 0xfe, 0x1a, 0x76, 0xcc, 0xcf, 0x46, 0xed, + 0x90, 0xed, 0xfe, 0xcd, 0xb7, 0x93, 0x36, 0x39, 0x99, 0xb4, 0xc9, 0xc7, 0x49, 0x9b, 0x7c, 0x9d, + 0xb4, 0x09, 0x6d, 0xc5, 0x68, 0xa7, 0xa6, 0x12, 0x5f, 0x8c, 0x2b, 0x02, 0x8f, 0xc9, 0x2b, 0x42, + 0x8e, 0xe6, 0xcc, 0x3b, 0xdf, 0xfa, 0x19, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x82, 0x72, 0xb9, 0xbc, + 0x04, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.go index 427ffbe63bd8..6948a3d532df 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.go @@ -60,7 +60,7 @@ func (x VirtualHost_TlsRequirementType) String() string { return proto.EnumName(VirtualHost_TlsRequirementType_name, int32(x)) } func (VirtualHost_TlsRequirementType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{0, 0} + return fileDescriptor_route_ee11921c49fa9e35, []int{0, 0} } type RouteAction_ClusterNotFoundResponseCode int32 @@ -85,7 +85,31 @@ func (x RouteAction_ClusterNotFoundResponseCode) String() string { return proto.EnumName(RouteAction_ClusterNotFoundResponseCode_name, int32(x)) } func (RouteAction_ClusterNotFoundResponseCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5, 0} + return fileDescriptor_route_ee11921c49fa9e35, []int{5, 0} +} + +// Configures :ref:`internal redirect ` behavior. +type RouteAction_InternalRedirectAction int32 + +const ( + RouteAction_PASS_THROUGH_INTERNAL_REDIRECT RouteAction_InternalRedirectAction = 0 + RouteAction_HANDLE_INTERNAL_REDIRECT RouteAction_InternalRedirectAction = 1 +) + +var RouteAction_InternalRedirectAction_name = map[int32]string{ + 0: "PASS_THROUGH_INTERNAL_REDIRECT", + 1: "HANDLE_INTERNAL_REDIRECT", +} +var RouteAction_InternalRedirectAction_value = map[string]int32{ + "PASS_THROUGH_INTERNAL_REDIRECT": 0, + "HANDLE_INTERNAL_REDIRECT": 1, +} + +func (x RouteAction_InternalRedirectAction) String() string { + return proto.EnumName(RouteAction_InternalRedirectAction_name, int32(x)) +} +func (RouteAction_InternalRedirectAction) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_route_ee11921c49fa9e35, []int{5, 1} } type RedirectAction_RedirectResponseCode int32 @@ -122,7 +146,7 @@ func (x RedirectAction_RedirectResponseCode) String() string { return proto.EnumName(RedirectAction_RedirectResponseCode_name, int32(x)) } func (RedirectAction_RedirectResponseCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{6, 0} + return fileDescriptor_route_ee11921c49fa9e35, []int{7, 0} } // The top level element in the routing configuration is a virtual host. Each virtual host has @@ -130,7 +154,7 @@ func (RedirectAction_RedirectResponseCode) EnumDescriptor() ([]byte, []int) { // host header. This allows a single listener to service multiple top level domain path trees. Once // a virtual host is selected based on the domain, the routes are processed in order to see which // upstream cluster to route to or whether to perform a redirect. -// [#comment:next free field: 16] +// [#comment:next free field: 17] type VirtualHost struct { // The logical name of the virtual host. This is used when emitting certain // statistics but is not relevant for routing. @@ -187,8 +211,7 @@ type VirtualHost struct { // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter // specific; see the :ref:`HTTP filter documentation ` // for if and how it is utilized. - PerFilterConfig map[string]*types.Struct `protobuf:"bytes,12,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // [#not-implemented-hide:] + PerFilterConfig map[string]*types.Struct `protobuf:"bytes,12,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use. // The per_filter_config field can be used to provide virtual host-specific // configurations for filters. The key should match the filter name, such as // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter @@ -203,17 +226,21 @@ type VirtualHost struct { // This header is unaffected by the // :ref:`suppress_envoy_headers // ` flag. - IncludeRequestAttemptCount bool `protobuf:"varint,14,opt,name=include_request_attempt_count,json=includeRequestAttemptCount,proto3" json:"include_request_attempt_count,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + IncludeRequestAttemptCount bool `protobuf:"varint,14,opt,name=include_request_attempt_count,json=includeRequestAttemptCount,proto3" json:"include_request_attempt_count,omitempty"` + // Indicates the retry policy for all routes in this virtual host. Note that setting a + // route level entry will take precedence over this config and it'll be treated + // independently (e.g.: values are not inherited). + RetryPolicy *RetryPolicy `protobuf:"bytes,16,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *VirtualHost) Reset() { *m = VirtualHost{} } func (m *VirtualHost) String() string { return proto.CompactTextString(m) } func (*VirtualHost) ProtoMessage() {} func (*VirtualHost) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{0} + return fileDescriptor_route_ee11921c49fa9e35, []int{0} } func (m *VirtualHost) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -319,6 +346,7 @@ func (m *VirtualHost) GetCors() *CorsPolicy { return nil } +// Deprecated: Do not use. func (m *VirtualHost) GetPerFilterConfig() map[string]*types.Struct { if m != nil { return m.PerFilterConfig @@ -340,6 +368,13 @@ func (m *VirtualHost) GetIncludeRequestAttemptCount() bool { return false } +func (m *VirtualHost) GetRetryPolicy() *RetryPolicy { + if m != nil { + return m.RetryPolicy + } + return nil +} + // A route is both a specification of how to match a request as well as an indication of what to do // next (e.g., redirect, forward, rewrite, etc.). // @@ -369,8 +404,7 @@ type Route struct { // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter // specific; see the :ref:`HTTP filter documentation ` for // if and how it is utilized. - PerFilterConfig map[string]*types.Struct `protobuf:"bytes,8,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // [#not-implemented-hide:] + PerFilterConfig map[string]*types.Struct `protobuf:"bytes,8,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use. // The per_filter_config field can be used to provide route-specific // configurations for filters. The key should match the filter name, such as // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter @@ -406,7 +440,7 @@ func (m *Route) Reset() { *m = Route{} } func (m *Route) String() string { return proto.CompactTextString(m) } func (*Route) ProtoMessage() {} func (*Route) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{1} + return fileDescriptor_route_ee11921c49fa9e35, []int{1} } func (m *Route) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -505,6 +539,7 @@ func (m *Route) GetDecorator() *Decorator { return nil } +// Deprecated: Do not use. func (m *Route) GetPerFilterConfig() map[string]*types.Struct { if m != nil { return m.PerFilterConfig @@ -671,7 +706,7 @@ func (m *WeightedCluster) Reset() { *m = WeightedCluster{} } func (m *WeightedCluster) String() string { return proto.CompactTextString(m) } func (*WeightedCluster) ProtoMessage() {} func (*WeightedCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{2} + return fileDescriptor_route_ee11921c49fa9e35, []int{2} } func (m *WeightedCluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -763,8 +798,7 @@ type WeightedCluster_ClusterWeight struct { // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter // specific; see the :ref:`HTTP filter documentation ` // for if and how it is utilized. - PerFilterConfig map[string]*types.Struct `protobuf:"bytes,8,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // [#not-implemented-hide:] + PerFilterConfig map[string]*types.Struct `protobuf:"bytes,8,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use. // The per_filter_config field can be used to provide weighted cluster-specific // configurations for filters. The key should match the filter name, such as // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter @@ -780,7 +814,7 @@ func (m *WeightedCluster_ClusterWeight) Reset() { *m = WeightedCluster_C func (m *WeightedCluster_ClusterWeight) String() string { return proto.CompactTextString(m) } func (*WeightedCluster_ClusterWeight) ProtoMessage() {} func (*WeightedCluster_ClusterWeight) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{2, 0} + return fileDescriptor_route_ee11921c49fa9e35, []int{2, 0} } func (m *WeightedCluster_ClusterWeight) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -858,6 +892,7 @@ func (m *WeightedCluster_ClusterWeight) GetResponseHeadersToRemove() []string { return nil } +// Deprecated: Do not use. func (m *WeightedCluster_ClusterWeight) GetPerFilterConfig() map[string]*types.Struct { if m != nil { return m.PerFilterConfig @@ -923,7 +958,7 @@ func (m *RouteMatch) Reset() { *m = RouteMatch{} } func (m *RouteMatch) String() string { return proto.CompactTextString(m) } func (*RouteMatch) ProtoMessage() {} func (*RouteMatch) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{3} + return fileDescriptor_route_ee11921c49fa9e35, []int{3} } func (m *RouteMatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1127,7 +1162,7 @@ func (m *RouteMatch_GrpcRouteMatchOptions) Reset() { *m = RouteMatch_Grp func (m *RouteMatch_GrpcRouteMatchOptions) String() string { return proto.CompactTextString(m) } func (*RouteMatch_GrpcRouteMatchOptions) ProtoMessage() {} func (*RouteMatch_GrpcRouteMatchOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{3, 0} + return fileDescriptor_route_ee11921c49fa9e35, []int{3, 0} } func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1156,7 +1191,7 @@ func (m *RouteMatch_GrpcRouteMatchOptions) XXX_DiscardUnknown() { var xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions proto.InternalMessageInfo -// [#comment:next free field: 9] +// [#comment:next free field: 11] type CorsPolicy struct { // Specifies the origins that will be allowed to do CORS requests. // @@ -1176,18 +1211,31 @@ type CorsPolicy struct { MaxAge string `protobuf:"bytes,5,opt,name=max_age,json=maxAge,proto3" json:"max_age,omitempty"` // Specifies whether the resource allows credentials. AllowCredentials *types.BoolValue `protobuf:"bytes,6,opt,name=allow_credentials,json=allowCredentials,proto3" json:"allow_credentials,omitempty"` - // Specifies if CORS is enabled. Defaults to true. Only effective on route. - Enabled *types.BoolValue `protobuf:"bytes,7,opt,name=enabled,proto3" json:"enabled,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // Types that are valid to be assigned to EnabledSpecifier: + // *CorsPolicy_Enabled + // *CorsPolicy_FilterEnabled + EnabledSpecifier isCorsPolicy_EnabledSpecifier `protobuf_oneof:"enabled_specifier"` + // Specifies if CORS policies are evaluated and tracked when filter is off but + // does not enforce any policies. + // + // More information on how this can be controlled via runtime can be found + // :ref:`here `. + // + // .. note:: + // + // This field defaults to 100/:ref:`HUNDRED + // `. + ShadowEnabled *core.RuntimeFractionalPercent `protobuf:"bytes,10,opt,name=shadow_enabled,json=shadowEnabled,proto3" json:"shadow_enabled,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *CorsPolicy) Reset() { *m = CorsPolicy{} } func (m *CorsPolicy) String() string { return proto.CompactTextString(m) } func (*CorsPolicy) ProtoMessage() {} func (*CorsPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{4} + return fileDescriptor_route_ee11921c49fa9e35, []int{4} } func (m *CorsPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1216,6 +1264,30 @@ func (m *CorsPolicy) XXX_DiscardUnknown() { var xxx_messageInfo_CorsPolicy proto.InternalMessageInfo +type isCorsPolicy_EnabledSpecifier interface { + isCorsPolicy_EnabledSpecifier() + Equal(interface{}) bool + MarshalTo([]byte) (int, error) + Size() int +} + +type CorsPolicy_Enabled struct { + Enabled *types.BoolValue `protobuf:"bytes,7,opt,name=enabled,proto3,oneof"` +} +type CorsPolicy_FilterEnabled struct { + FilterEnabled *core.RuntimeFractionalPercent `protobuf:"bytes,9,opt,name=filter_enabled,json=filterEnabled,proto3,oneof"` +} + +func (*CorsPolicy_Enabled) isCorsPolicy_EnabledSpecifier() {} +func (*CorsPolicy_FilterEnabled) isCorsPolicy_EnabledSpecifier() {} + +func (m *CorsPolicy) GetEnabledSpecifier() isCorsPolicy_EnabledSpecifier { + if m != nil { + return m.EnabledSpecifier + } + return nil +} + func (m *CorsPolicy) GetAllowOrigin() []string { if m != nil { return m.AllowOrigin @@ -1266,13 +1338,101 @@ func (m *CorsPolicy) GetAllowCredentials() *types.BoolValue { } func (m *CorsPolicy) GetEnabled() *types.BoolValue { + if x, ok := m.GetEnabledSpecifier().(*CorsPolicy_Enabled); ok { + return x.Enabled + } + return nil +} + +func (m *CorsPolicy) GetFilterEnabled() *core.RuntimeFractionalPercent { + if x, ok := m.GetEnabledSpecifier().(*CorsPolicy_FilterEnabled); ok { + return x.FilterEnabled + } + return nil +} + +func (m *CorsPolicy) GetShadowEnabled() *core.RuntimeFractionalPercent { if m != nil { - return m.Enabled + return m.ShadowEnabled + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CorsPolicy) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CorsPolicy_OneofMarshaler, _CorsPolicy_OneofUnmarshaler, _CorsPolicy_OneofSizer, []interface{}{ + (*CorsPolicy_Enabled)(nil), + (*CorsPolicy_FilterEnabled)(nil), + } +} + +func _CorsPolicy_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CorsPolicy) + // enabled_specifier + switch x := m.EnabledSpecifier.(type) { + case *CorsPolicy_Enabled: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Enabled); err != nil { + return err + } + case *CorsPolicy_FilterEnabled: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.FilterEnabled); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CorsPolicy.EnabledSpecifier has unexpected type %T", x) } return nil } -// [#comment:next free field: 26] +func _CorsPolicy_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CorsPolicy) + switch tag { + case 7: // enabled_specifier.enabled + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.BoolValue) + err := b.DecodeMessage(msg) + m.EnabledSpecifier = &CorsPolicy_Enabled{msg} + return true, err + case 9: // enabled_specifier.filter_enabled + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(core.RuntimeFractionalPercent) + err := b.DecodeMessage(msg) + m.EnabledSpecifier = &CorsPolicy_FilterEnabled{msg} + return true, err + default: + return false, nil + } +} + +func _CorsPolicy_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CorsPolicy) + // enabled_specifier + switch x := m.EnabledSpecifier.(type) { + case *CorsPolicy_Enabled: + s := proto.Size(x.Enabled) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *CorsPolicy_FilterEnabled: + s := proto.Size(x.FilterEnabled) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// [#comment:next free field: 27] type RouteAction struct { // Types that are valid to be assigned to ClusterSpecifier: // *RouteAction_Cluster @@ -1350,8 +1510,10 @@ type RouteAction struct { // upstream response header has been received, otherwise a stream reset // occurs. IdleTimeout *time.Duration `protobuf:"bytes,24,opt,name=idle_timeout,json=idleTimeout,proto3,stdduration" json:"idle_timeout,omitempty"` - // Indicates that the route has a retry policy. - RetryPolicy *RouteAction_RetryPolicy `protobuf:"bytes,9,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"` + // Indicates that the route has a retry policy. Note that if this is set, + // it'll take precedence over the virtual host level retry policy entirely + // (e.g.: policies are not merged, most internal one becomes the enforced policy). + RetryPolicy *RetryPolicy `protobuf:"bytes,9,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"` // Indicates that the route has a request mirroring policy. RequestMirrorPolicy *RouteAction_RequestMirrorPolicy `protobuf:"bytes,10,opt,name=request_mirror_policy,json=requestMirrorPolicy,proto3" json:"request_mirror_policy,omitempty"` // Optionally specifies the :ref:`routing priority `. @@ -1397,18 +1559,19 @@ type RouteAction struct { // :ref:`timeout ` or its default. // This can be used to prevent unexpected upstream request timeouts due to potentially long // time gaps between gRPC request and response in gRPC streaming mode. - MaxGrpcTimeout *time.Duration `protobuf:"bytes,23,opt,name=max_grpc_timeout,json=maxGrpcTimeout,proto3,stdduration" json:"max_grpc_timeout,omitempty"` - UpgradeConfigs []*RouteAction_UpgradeConfig `protobuf:"bytes,25,rep,name=upgrade_configs,json=upgradeConfigs,proto3" json:"upgrade_configs,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + MaxGrpcTimeout *time.Duration `protobuf:"bytes,23,opt,name=max_grpc_timeout,json=maxGrpcTimeout,proto3,stdduration" json:"max_grpc_timeout,omitempty"` + UpgradeConfigs []*RouteAction_UpgradeConfig `protobuf:"bytes,25,rep,name=upgrade_configs,json=upgradeConfigs,proto3" json:"upgrade_configs,omitempty"` + InternalRedirectAction RouteAction_InternalRedirectAction `protobuf:"varint,26,opt,name=internal_redirect_action,json=internalRedirectAction,proto3,enum=envoy.api.v2.route.RouteAction_InternalRedirectAction" json:"internal_redirect_action,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RouteAction) Reset() { *m = RouteAction{} } func (m *RouteAction) String() string { return proto.CompactTextString(m) } func (*RouteAction) ProtoMessage() {} func (*RouteAction) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5} + return fileDescriptor_route_ee11921c49fa9e35, []int{5} } func (m *RouteAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1555,7 +1718,7 @@ func (m *RouteAction) GetIdleTimeout() *time.Duration { return nil } -func (m *RouteAction) GetRetryPolicy() *RouteAction_RetryPolicy { +func (m *RouteAction) GetRetryPolicy() *RetryPolicy { if m != nil { return m.RetryPolicy } @@ -1642,6 +1805,13 @@ func (m *RouteAction) GetUpgradeConfigs() []*RouteAction_UpgradeConfig { return nil } +func (m *RouteAction) GetInternalRedirectAction() RouteAction_InternalRedirectAction { + if m != nil { + return m.InternalRedirectAction + } + return RouteAction_PASS_THROUGH_INTERNAL_REDIRECT +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*RouteAction) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _RouteAction_OneofMarshaler, _RouteAction_OneofUnmarshaler, _RouteAction_OneofSizer, []interface{}{ @@ -1773,60 +1943,68 @@ func _RouteAction_OneofSizer(msg proto.Message) (n int) { return n } -// HTTP retry :ref:`architecture overview `. -type RouteAction_RetryPolicy struct { - // Specifies the conditions under which retry takes place. These are the same - // conditions documented for :ref:`config_http_filters_router_x-envoy-retry-on` and - // :ref:`config_http_filters_router_x-envoy-retry-grpc-on`. - RetryOn string `protobuf:"bytes,1,opt,name=retry_on,json=retryOn,proto3" json:"retry_on,omitempty"` - // Specifies the allowed number of retries. This parameter is optional and - // defaults to 1. These are the same conditions documented for - // :ref:`config_http_filters_router_x-envoy-max-retries`. - NumRetries *types.UInt32Value `protobuf:"bytes,2,opt,name=num_retries,json=numRetries,proto3" json:"num_retries,omitempty"` - // Specifies a non-zero upstream timeout per retry attempt. This parameter is optional. The - // same conditions documented for - // :ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms` apply. +// The router is capable of shadowing traffic from one cluster to another. The current +// implementation is "fire and forget," meaning Envoy will not wait for the shadow cluster to +// respond before returning the response from the primary cluster. All normal statistics are +// collected for the shadow cluster making this feature useful for testing. +// +// During shadowing, the host/authority header is altered such that *-shadow* is appended. This is +// useful for logging. For example, *cluster1* becomes *cluster1-shadow*. +type RouteAction_RequestMirrorPolicy struct { + // Specifies the cluster that requests will be mirrored to. The cluster must + // exist in the cluster manager configuration. + Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` + // If not specified, all requests to the target cluster will be mirrored. If + // specified, Envoy will lookup the runtime key to get the % of requests to + // mirror. Valid values are from 0 to 10000, allowing for increments of + // 0.01% of requests to be mirrored. If the runtime key is specified in the + // configuration but not present in runtime, 0 is the default and thus 0% of + // requests will be mirrored. + // + // .. attention:: + // + // **This field is deprecated**. Set the + // :ref:`runtime_fraction + // ` field instead. + RuntimeKey string `protobuf:"bytes,2,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` // Deprecated: Do not use. + // If both :ref:`runtime_key + // ` and this field are not + // specified, all requests to the target cluster will be mirrored. + // + // If specified, this field takes precedence over the `runtime_key` field and requests must also + // fall under the percentage of matches indicated by this field. + // + // For some fraction N/D, a random number in the range [0,D) is selected. If the + // number is <= the value of the numberator N, or if the key is not present, the default + // value, the request will be mirrored. // // .. note:: // - // If left unspecified, Envoy will use the global - // :ref:`route timeout ` for the request. - // Consequently, when using a :ref:`5xx ` based - // retry policy, a request that times out will not be retried as the total timeout budget - // would have been exhausted. - PerTryTimeout *time.Duration `protobuf:"bytes,3,opt,name=per_try_timeout,json=perTryTimeout,proto3,stdduration" json:"per_try_timeout,omitempty"` - // Specifies an implementation of a RetryPriority which is used to determine the - // distribution of load across priorities used for retries. Refer to - // :ref:`retry plugin configuration ` for more details. - RetryPriority *RouteAction_RetryPolicy_RetryPriority `protobuf:"bytes,4,opt,name=retry_priority,json=retryPriority,proto3" json:"retry_priority,omitempty"` - // Specifies a collection of RetryHostPredicates that will be consulted when selecting a host - // for retries. If any of the predicates reject the host, host selection will be reattempted. - // Refer to :ref:`retry plugin configuration ` for more - // details. - RetryHostPredicate []*RouteAction_RetryPolicy_RetryHostPredicate `protobuf:"bytes,5,rep,name=retry_host_predicate,json=retryHostPredicate,proto3" json:"retry_host_predicate,omitempty"` - // The maximum number of times host selection will be reattempted before giving up, at which - // point the host that was last selected will be routed to. If unspecified, this will default to - // retrying once. - HostSelectionRetryMaxAttempts int64 `protobuf:"varint,6,opt,name=host_selection_retry_max_attempts,json=hostSelectionRetryMaxAttempts,proto3" json:"host_selection_retry_max_attempts,omitempty"` - // HTTP status codes that should trigger a retry in addition to those specified by retry_on. - RetriableStatusCodes []uint32 `protobuf:"varint,7,rep,packed,name=retriable_status_codes,json=retriableStatusCodes,proto3" json:"retriable_status_codes,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // Parsing this field is implemented such that the runtime key's data may be represented + // as a :ref:`FractionalPercent ` proto represented + // as JSON/YAML and may also be represented as an integer with the assumption that the value + // is an integral percentage out of 100. For instance, a runtime key lookup returning the + // value "42" would parse as a `FractionalPercent` whose numerator is 42 and denominator is + // HUNDRED. This is behaviour is different to that of the deprecated `runtime_key` field, + // where the implicit denominator is 10000. + RuntimeFraction *core.RuntimeFractionalPercent `protobuf:"bytes,3,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *RouteAction_RetryPolicy) Reset() { *m = RouteAction_RetryPolicy{} } -func (m *RouteAction_RetryPolicy) String() string { return proto.CompactTextString(m) } -func (*RouteAction_RetryPolicy) ProtoMessage() {} -func (*RouteAction_RetryPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5, 0} +func (m *RouteAction_RequestMirrorPolicy) Reset() { *m = RouteAction_RequestMirrorPolicy{} } +func (m *RouteAction_RequestMirrorPolicy) String() string { return proto.CompactTextString(m) } +func (*RouteAction_RequestMirrorPolicy) ProtoMessage() {} +func (*RouteAction_RequestMirrorPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_route_ee11921c49fa9e35, []int{5, 0} } -func (m *RouteAction_RetryPolicy) XXX_Unmarshal(b []byte) error { +func (m *RouteAction_RequestMirrorPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *RouteAction_RetryPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *RouteAction_RequestMirrorPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_RouteAction_RetryPolicy.Marshal(b, m, deterministic) + return xxx_messageInfo_RouteAction_RequestMirrorPolicy.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -1836,90 +2014,85 @@ func (m *RouteAction_RetryPolicy) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (dst *RouteAction_RetryPolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_RetryPolicy.Merge(dst, src) +func (dst *RouteAction_RequestMirrorPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_RequestMirrorPolicy.Merge(dst, src) } -func (m *RouteAction_RetryPolicy) XXX_Size() int { +func (m *RouteAction_RequestMirrorPolicy) XXX_Size() int { return m.Size() } -func (m *RouteAction_RetryPolicy) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_RetryPolicy.DiscardUnknown(m) +func (m *RouteAction_RequestMirrorPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_RequestMirrorPolicy.DiscardUnknown(m) } -var xxx_messageInfo_RouteAction_RetryPolicy proto.InternalMessageInfo +var xxx_messageInfo_RouteAction_RequestMirrorPolicy proto.InternalMessageInfo -func (m *RouteAction_RetryPolicy) GetRetryOn() string { +func (m *RouteAction_RequestMirrorPolicy) GetCluster() string { if m != nil { - return m.RetryOn + return m.Cluster } return "" } -func (m *RouteAction_RetryPolicy) GetNumRetries() *types.UInt32Value { +// Deprecated: Do not use. +func (m *RouteAction_RequestMirrorPolicy) GetRuntimeKey() string { if m != nil { - return m.NumRetries + return m.RuntimeKey } - return nil + return "" } -func (m *RouteAction_RetryPolicy) GetPerTryTimeout() *time.Duration { +func (m *RouteAction_RequestMirrorPolicy) GetRuntimeFraction() *core.RuntimeFractionalPercent { if m != nil { - return m.PerTryTimeout + return m.RuntimeFraction } return nil } -func (m *RouteAction_RetryPolicy) GetRetryPriority() *RouteAction_RetryPolicy_RetryPriority { - if m != nil { - return m.RetryPriority - } - return nil +// Specifies the route's hashing policy if the upstream cluster uses a hashing :ref:`load balancer +// `. +type RouteAction_HashPolicy struct { + // Types that are valid to be assigned to PolicySpecifier: + // *RouteAction_HashPolicy_Header_ + // *RouteAction_HashPolicy_Cookie_ + // *RouteAction_HashPolicy_ConnectionProperties_ + PolicySpecifier isRouteAction_HashPolicy_PolicySpecifier `protobuf_oneof:"policy_specifier"` + // The flag that shortcircuits the hash computing. This field provides a + // 'fallback' style of configuration: "if a terminal policy doesn't work, + // fallback to rest of the policy list", it saves time when the terminal + // policy works. + // + // If true, and there is already a hash computed, ignore rest of the + // list of hash polices. + // For example, if the following hash methods are configured: + // + // ========= ======== + // specifier terminal + // ========= ======== + // Header A true + // Header B false + // Header C false + // ========= ======== + // + // The generateHash process ends if policy "header A" generates a hash, as + // it's a terminal policy. + Terminal bool `protobuf:"varint,4,opt,name=terminal,proto3" json:"terminal,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *RouteAction_RetryPolicy) GetRetryHostPredicate() []*RouteAction_RetryPolicy_RetryHostPredicate { - if m != nil { - return m.RetryHostPredicate - } - return nil +func (m *RouteAction_HashPolicy) Reset() { *m = RouteAction_HashPolicy{} } +func (m *RouteAction_HashPolicy) String() string { return proto.CompactTextString(m) } +func (*RouteAction_HashPolicy) ProtoMessage() {} +func (*RouteAction_HashPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_route_ee11921c49fa9e35, []int{5, 1} } - -func (m *RouteAction_RetryPolicy) GetHostSelectionRetryMaxAttempts() int64 { - if m != nil { - return m.HostSelectionRetryMaxAttempts - } - return 0 -} - -func (m *RouteAction_RetryPolicy) GetRetriableStatusCodes() []uint32 { - if m != nil { - return m.RetriableStatusCodes - } - return nil -} - -type RouteAction_RetryPolicy_RetryPriority struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Types that are valid to be assigned to ConfigType: - // *RouteAction_RetryPolicy_RetryPriority_Config - // *RouteAction_RetryPolicy_RetryPriority_TypedConfig - ConfigType isRouteAction_RetryPolicy_RetryPriority_ConfigType `protobuf_oneof:"config_type"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteAction_RetryPolicy_RetryPriority) Reset() { *m = RouteAction_RetryPolicy_RetryPriority{} } -func (m *RouteAction_RetryPolicy_RetryPriority) String() string { return proto.CompactTextString(m) } -func (*RouteAction_RetryPolicy_RetryPriority) ProtoMessage() {} -func (*RouteAction_RetryPolicy_RetryPriority) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5, 0, 0} -} -func (m *RouteAction_RetryPolicy_RetryPriority) XXX_Unmarshal(b []byte) error { +func (m *RouteAction_HashPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *RouteAction_RetryPolicy_RetryPriority) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *RouteAction_HashPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_RouteAction_RetryPolicy_RetryPriority.Marshal(b, m, deterministic) + return xxx_messageInfo_RouteAction_HashPolicy.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -1929,129 +2102,157 @@ func (m *RouteAction_RetryPolicy_RetryPriority) XXX_Marshal(b []byte, determinis return b[:n], nil } } -func (dst *RouteAction_RetryPolicy_RetryPriority) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_RetryPolicy_RetryPriority.Merge(dst, src) +func (dst *RouteAction_HashPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_HashPolicy.Merge(dst, src) } -func (m *RouteAction_RetryPolicy_RetryPriority) XXX_Size() int { +func (m *RouteAction_HashPolicy) XXX_Size() int { return m.Size() } -func (m *RouteAction_RetryPolicy_RetryPriority) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_RetryPolicy_RetryPriority.DiscardUnknown(m) +func (m *RouteAction_HashPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_HashPolicy.DiscardUnknown(m) } -var xxx_messageInfo_RouteAction_RetryPolicy_RetryPriority proto.InternalMessageInfo +var xxx_messageInfo_RouteAction_HashPolicy proto.InternalMessageInfo -type isRouteAction_RetryPolicy_RetryPriority_ConfigType interface { - isRouteAction_RetryPolicy_RetryPriority_ConfigType() +type isRouteAction_HashPolicy_PolicySpecifier interface { + isRouteAction_HashPolicy_PolicySpecifier() Equal(interface{}) bool MarshalTo([]byte) (int, error) Size() int } -type RouteAction_RetryPolicy_RetryPriority_Config struct { - Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` -} -type RouteAction_RetryPolicy_RetryPriority_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` +type RouteAction_HashPolicy_Header_ struct { + Header *RouteAction_HashPolicy_Header `protobuf:"bytes,1,opt,name=header,proto3,oneof"` } - -func (*RouteAction_RetryPolicy_RetryPriority_Config) isRouteAction_RetryPolicy_RetryPriority_ConfigType() { +type RouteAction_HashPolicy_Cookie_ struct { + Cookie *RouteAction_HashPolicy_Cookie `protobuf:"bytes,2,opt,name=cookie,proto3,oneof"` } -func (*RouteAction_RetryPolicy_RetryPriority_TypedConfig) isRouteAction_RetryPolicy_RetryPriority_ConfigType() { +type RouteAction_HashPolicy_ConnectionProperties_ struct { + ConnectionProperties *RouteAction_HashPolicy_ConnectionProperties `protobuf:"bytes,3,opt,name=connection_properties,json=connectionProperties,proto3,oneof"` } -func (m *RouteAction_RetryPolicy_RetryPriority) GetConfigType() isRouteAction_RetryPolicy_RetryPriority_ConfigType { +func (*RouteAction_HashPolicy_Header_) isRouteAction_HashPolicy_PolicySpecifier() {} +func (*RouteAction_HashPolicy_Cookie_) isRouteAction_HashPolicy_PolicySpecifier() {} +func (*RouteAction_HashPolicy_ConnectionProperties_) isRouteAction_HashPolicy_PolicySpecifier() {} + +func (m *RouteAction_HashPolicy) GetPolicySpecifier() isRouteAction_HashPolicy_PolicySpecifier { if m != nil { - return m.ConfigType + return m.PolicySpecifier } return nil } -func (m *RouteAction_RetryPolicy_RetryPriority) GetName() string { - if m != nil { - return m.Name +func (m *RouteAction_HashPolicy) GetHeader() *RouteAction_HashPolicy_Header { + if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_Header_); ok { + return x.Header } - return "" + return nil } -func (m *RouteAction_RetryPolicy_RetryPriority) GetConfig() *types.Struct { - if x, ok := m.GetConfigType().(*RouteAction_RetryPolicy_RetryPriority_Config); ok { - return x.Config +func (m *RouteAction_HashPolicy) GetCookie() *RouteAction_HashPolicy_Cookie { + if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_Cookie_); ok { + return x.Cookie } return nil } -func (m *RouteAction_RetryPolicy_RetryPriority) GetTypedConfig() *types.Any { - if x, ok := m.GetConfigType().(*RouteAction_RetryPolicy_RetryPriority_TypedConfig); ok { - return x.TypedConfig +func (m *RouteAction_HashPolicy) GetConnectionProperties() *RouteAction_HashPolicy_ConnectionProperties { + if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_ConnectionProperties_); ok { + return x.ConnectionProperties } return nil } +func (m *RouteAction_HashPolicy) GetTerminal() bool { + if m != nil { + return m.Terminal + } + return false +} + // XXX_OneofFuncs is for the internal use of the proto package. -func (*RouteAction_RetryPolicy_RetryPriority) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RouteAction_RetryPolicy_RetryPriority_OneofMarshaler, _RouteAction_RetryPolicy_RetryPriority_OneofUnmarshaler, _RouteAction_RetryPolicy_RetryPriority_OneofSizer, []interface{}{ - (*RouteAction_RetryPolicy_RetryPriority_Config)(nil), - (*RouteAction_RetryPolicy_RetryPriority_TypedConfig)(nil), +func (*RouteAction_HashPolicy) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RouteAction_HashPolicy_OneofMarshaler, _RouteAction_HashPolicy_OneofUnmarshaler, _RouteAction_HashPolicy_OneofSizer, []interface{}{ + (*RouteAction_HashPolicy_Header_)(nil), + (*RouteAction_HashPolicy_Cookie_)(nil), + (*RouteAction_HashPolicy_ConnectionProperties_)(nil), } } -func _RouteAction_RetryPolicy_RetryPriority_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RouteAction_RetryPolicy_RetryPriority) - // config_type - switch x := m.ConfigType.(type) { - case *RouteAction_RetryPolicy_RetryPriority_Config: +func _RouteAction_HashPolicy_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RouteAction_HashPolicy) + // policy_specifier + switch x := m.PolicySpecifier.(type) { + case *RouteAction_HashPolicy_Header_: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Header); err != nil { + return err + } + case *RouteAction_HashPolicy_Cookie_: _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { + if err := b.EncodeMessage(x.Cookie); err != nil { return err } - case *RouteAction_RetryPolicy_RetryPriority_TypedConfig: + case *RouteAction_HashPolicy_ConnectionProperties_: _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { + if err := b.EncodeMessage(x.ConnectionProperties); err != nil { return err } case nil: default: - return fmt.Errorf("RouteAction_RetryPolicy_RetryPriority.ConfigType has unexpected type %T", x) + return fmt.Errorf("RouteAction_HashPolicy.PolicySpecifier has unexpected type %T", x) } return nil } -func _RouteAction_RetryPolicy_RetryPriority_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RouteAction_RetryPolicy_RetryPriority) +func _RouteAction_HashPolicy_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RouteAction_HashPolicy) switch tag { - case 2: // config_type.config + case 1: // policy_specifier.header if wire != proto.WireBytes { return true, proto.ErrInternalBadWireType } - msg := new(types.Struct) + msg := new(RouteAction_HashPolicy_Header) err := b.DecodeMessage(msg) - m.ConfigType = &RouteAction_RetryPolicy_RetryPriority_Config{msg} + m.PolicySpecifier = &RouteAction_HashPolicy_Header_{msg} return true, err - case 3: // config_type.typed_config + case 2: // policy_specifier.cookie if wire != proto.WireBytes { return true, proto.ErrInternalBadWireType } - msg := new(types.Any) + msg := new(RouteAction_HashPolicy_Cookie) + err := b.DecodeMessage(msg) + m.PolicySpecifier = &RouteAction_HashPolicy_Cookie_{msg} + return true, err + case 3: // policy_specifier.connection_properties + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RouteAction_HashPolicy_ConnectionProperties) err := b.DecodeMessage(msg) - m.ConfigType = &RouteAction_RetryPolicy_RetryPriority_TypedConfig{msg} + m.PolicySpecifier = &RouteAction_HashPolicy_ConnectionProperties_{msg} return true, err default: return false, nil } } -func _RouteAction_RetryPolicy_RetryPriority_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RouteAction_RetryPolicy_RetryPriority) - // config_type - switch x := m.ConfigType.(type) { - case *RouteAction_RetryPolicy_RetryPriority_Config: - s := proto.Size(x.Config) +func _RouteAction_HashPolicy_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RouteAction_HashPolicy) + // policy_specifier + switch x := m.PolicySpecifier.(type) { + case *RouteAction_HashPolicy_Header_: + s := proto.Size(x.Header) n += 1 // tag and wire n += proto.SizeVarint(uint64(s)) n += s - case *RouteAction_RetryPolicy_RetryPriority_TypedConfig: - s := proto.Size(x.TypedConfig) + case *RouteAction_HashPolicy_Cookie_: + s := proto.Size(x.Cookie) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *RouteAction_HashPolicy_ConnectionProperties_: + s := proto.Size(x.ConnectionProperties) n += 1 // tag and wire n += proto.SizeVarint(uint64(s)) n += s @@ -2062,33 +2263,27 @@ func _RouteAction_RetryPolicy_RetryPriority_OneofSizer(msg proto.Message) (n int return n } -type RouteAction_RetryPolicy_RetryHostPredicate struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Types that are valid to be assigned to ConfigType: - // *RouteAction_RetryPolicy_RetryHostPredicate_Config - // *RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig - ConfigType isRouteAction_RetryPolicy_RetryHostPredicate_ConfigType `protobuf_oneof:"config_type"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type RouteAction_HashPolicy_Header struct { + // The name of the request header that will be used to obtain the hash + // key. If the request header is not present, no hash will be produced. + HeaderName string `protobuf:"bytes,1,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *RouteAction_RetryPolicy_RetryHostPredicate) Reset() { - *m = RouteAction_RetryPolicy_RetryHostPredicate{} -} -func (m *RouteAction_RetryPolicy_RetryHostPredicate) String() string { - return proto.CompactTextString(m) -} -func (*RouteAction_RetryPolicy_RetryHostPredicate) ProtoMessage() {} -func (*RouteAction_RetryPolicy_RetryHostPredicate) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5, 0, 1} +func (m *RouteAction_HashPolicy_Header) Reset() { *m = RouteAction_HashPolicy_Header{} } +func (m *RouteAction_HashPolicy_Header) String() string { return proto.CompactTextString(m) } +func (*RouteAction_HashPolicy_Header) ProtoMessage() {} +func (*RouteAction_HashPolicy_Header) Descriptor() ([]byte, []int) { + return fileDescriptor_route_ee11921c49fa9e35, []int{5, 1, 0} } -func (m *RouteAction_RetryPolicy_RetryHostPredicate) XXX_Unmarshal(b []byte) error { +func (m *RouteAction_HashPolicy_Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *RouteAction_RetryPolicy_RetryHostPredicate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *RouteAction_HashPolicy_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_RouteAction_RetryPolicy_RetryHostPredicate.Marshal(b, m, deterministic) + return xxx_messageInfo_RouteAction_HashPolicy_Header.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -2098,201 +2293,281 @@ func (m *RouteAction_RetryPolicy_RetryHostPredicate) XXX_Marshal(b []byte, deter return b[:n], nil } } -func (dst *RouteAction_RetryPolicy_RetryHostPredicate) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_RetryPolicy_RetryHostPredicate.Merge(dst, src) +func (dst *RouteAction_HashPolicy_Header) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_HashPolicy_Header.Merge(dst, src) } -func (m *RouteAction_RetryPolicy_RetryHostPredicate) XXX_Size() int { +func (m *RouteAction_HashPolicy_Header) XXX_Size() int { return m.Size() } -func (m *RouteAction_RetryPolicy_RetryHostPredicate) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_RetryPolicy_RetryHostPredicate.DiscardUnknown(m) +func (m *RouteAction_HashPolicy_Header) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_HashPolicy_Header.DiscardUnknown(m) } -var xxx_messageInfo_RouteAction_RetryPolicy_RetryHostPredicate proto.InternalMessageInfo +var xxx_messageInfo_RouteAction_HashPolicy_Header proto.InternalMessageInfo -type isRouteAction_RetryPolicy_RetryHostPredicate_ConfigType interface { - isRouteAction_RetryPolicy_RetryHostPredicate_ConfigType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int +func (m *RouteAction_HashPolicy_Header) GetHeaderName() string { + if m != nil { + return m.HeaderName + } + return "" } -type RouteAction_RetryPolicy_RetryHostPredicate_Config struct { - Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` -} -type RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` +// Envoy supports two types of cookie affinity: +// +// 1. Passive. Envoy takes a cookie that's present in the cookies header and +// hashes on its value. +// +// 2. Generated. Envoy generates and sets a cookie with an expiration (TTL) +// on the first request from the client in its response to the client, +// based on the endpoint the request gets sent to. The client then +// presents this on the next and all subsequent requests. The hash of +// this is sufficient to ensure these requests get sent to the same +// endpoint. The cookie is generated by hashing the source and +// destination ports and addresses so that multiple independent HTTP2 +// streams on the same connection will independently receive the same +// cookie, even if they arrive at the Envoy simultaneously. +type RouteAction_HashPolicy_Cookie struct { + // The name of the cookie that will be used to obtain the hash key. If the + // cookie is not present and ttl below is not set, no hash will be + // produced. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // If specified, a cookie with the TTL will be generated if the cookie is + // not present. If the TTL is present and zero, the generated cookie will + // be a session cookie. + Ttl *time.Duration `protobuf:"bytes,2,opt,name=ttl,proto3,stdduration" json:"ttl,omitempty"` + // The name of the path for the cookie. If no path is specified here, no path + // will be set for the cookie. + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (*RouteAction_RetryPolicy_RetryHostPredicate_Config) isRouteAction_RetryPolicy_RetryHostPredicate_ConfigType() { +func (m *RouteAction_HashPolicy_Cookie) Reset() { *m = RouteAction_HashPolicy_Cookie{} } +func (m *RouteAction_HashPolicy_Cookie) String() string { return proto.CompactTextString(m) } +func (*RouteAction_HashPolicy_Cookie) ProtoMessage() {} +func (*RouteAction_HashPolicy_Cookie) Descriptor() ([]byte, []int) { + return fileDescriptor_route_ee11921c49fa9e35, []int{5, 1, 1} } -func (*RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig) isRouteAction_RetryPolicy_RetryHostPredicate_ConfigType() { +func (m *RouteAction_HashPolicy_Cookie) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } - -func (m *RouteAction_RetryPolicy_RetryHostPredicate) GetConfigType() isRouteAction_RetryPolicy_RetryHostPredicate_ConfigType { - if m != nil { - return m.ConfigType +func (m *RouteAction_HashPolicy_Cookie) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RouteAction_HashPolicy_Cookie.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil } - return nil } +func (dst *RouteAction_HashPolicy_Cookie) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_HashPolicy_Cookie.Merge(dst, src) +} +func (m *RouteAction_HashPolicy_Cookie) XXX_Size() int { + return m.Size() +} +func (m *RouteAction_HashPolicy_Cookie) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_HashPolicy_Cookie.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction_HashPolicy_Cookie proto.InternalMessageInfo -func (m *RouteAction_RetryPolicy_RetryHostPredicate) GetName() string { +func (m *RouteAction_HashPolicy_Cookie) GetName() string { if m != nil { return m.Name } return "" } -func (m *RouteAction_RetryPolicy_RetryHostPredicate) GetConfig() *types.Struct { - if x, ok := m.GetConfigType().(*RouteAction_RetryPolicy_RetryHostPredicate_Config); ok { - return x.Config +func (m *RouteAction_HashPolicy_Cookie) GetTtl() *time.Duration { + if m != nil { + return m.Ttl } return nil } -func (m *RouteAction_RetryPolicy_RetryHostPredicate) GetTypedConfig() *types.Any { - if x, ok := m.GetConfigType().(*RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig); ok { - return x.TypedConfig +func (m *RouteAction_HashPolicy_Cookie) GetPath() string { + if m != nil { + return m.Path } - return nil + return "" } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*RouteAction_RetryPolicy_RetryHostPredicate) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RouteAction_RetryPolicy_RetryHostPredicate_OneofMarshaler, _RouteAction_RetryPolicy_RetryHostPredicate_OneofUnmarshaler, _RouteAction_RetryPolicy_RetryHostPredicate_OneofSizer, []interface{}{ - (*RouteAction_RetryPolicy_RetryHostPredicate_Config)(nil), - (*RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig)(nil), - } +type RouteAction_HashPolicy_ConnectionProperties struct { + // Hash on source IP address. + SourceIp bool `protobuf:"varint,1,opt,name=source_ip,json=sourceIp,proto3" json:"source_ip,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func _RouteAction_RetryPolicy_RetryHostPredicate_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RouteAction_RetryPolicy_RetryHostPredicate) - // config_type - switch x := m.ConfigType.(type) { - case *RouteAction_RetryPolicy_RetryHostPredicate_Config: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { - return err - } - case *RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("RouteAction_RetryPolicy_RetryHostPredicate.ConfigType has unexpected type %T", x) - } - return nil +func (m *RouteAction_HashPolicy_ConnectionProperties) Reset() { + *m = RouteAction_HashPolicy_ConnectionProperties{} } - -func _RouteAction_RetryPolicy_RetryHostPredicate_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RouteAction_RetryPolicy_RetryHostPredicate) - switch tag { - case 2: // config_type.config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType +func (m *RouteAction_HashPolicy_ConnectionProperties) String() string { + return proto.CompactTextString(m) +} +func (*RouteAction_HashPolicy_ConnectionProperties) ProtoMessage() {} +func (*RouteAction_HashPolicy_ConnectionProperties) Descriptor() ([]byte, []int) { + return fileDescriptor_route_ee11921c49fa9e35, []int{5, 1, 2} +} +func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err } - msg := new(types.Struct) - err := b.DecodeMessage(msg) - m.ConfigType = &RouteAction_RetryPolicy_RetryHostPredicate_Config{msg} - return true, err - case 3: // config_type.typed_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType + return b[:n], nil + } +} +func (dst *RouteAction_HashPolicy_ConnectionProperties) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Merge(dst, src) +} +func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Size() int { + return m.Size() +} +func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties proto.InternalMessageInfo + +func (m *RouteAction_HashPolicy_ConnectionProperties) GetSourceIp() bool { + if m != nil { + return m.SourceIp + } + return false +} + +// Allows enabling and disabling upgrades on a per-route basis. +// This overrides any enabled/disabled upgrade filter chain specified in the +// HttpConnectionManager +// :ref:upgrade_configs` +// ` +// but does not affect any custom filter chain specified there. +type RouteAction_UpgradeConfig struct { + // The case-insensitive name of this upgrade, e.g. "websocket". + // For each upgrade type present in upgrade_configs, requests with + // Upgrade: [upgrade_type] will be proxied upstream. + UpgradeType string `protobuf:"bytes,1,opt,name=upgrade_type,json=upgradeType,proto3" json:"upgrade_type,omitempty"` + // Determines if upgrades are available on this route. Defaults to true. + Enabled *types.BoolValue `protobuf:"bytes,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteAction_UpgradeConfig) Reset() { *m = RouteAction_UpgradeConfig{} } +func (m *RouteAction_UpgradeConfig) String() string { return proto.CompactTextString(m) } +func (*RouteAction_UpgradeConfig) ProtoMessage() {} +func (*RouteAction_UpgradeConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_route_ee11921c49fa9e35, []int{5, 2} +} +func (m *RouteAction_UpgradeConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RouteAction_UpgradeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RouteAction_UpgradeConfig.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err } - msg := new(types.Any) - err := b.DecodeMessage(msg) - m.ConfigType = &RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig{msg} - return true, err - default: - return false, nil + return b[:n], nil } } +func (dst *RouteAction_UpgradeConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_UpgradeConfig.Merge(dst, src) +} +func (m *RouteAction_UpgradeConfig) XXX_Size() int { + return m.Size() +} +func (m *RouteAction_UpgradeConfig) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_UpgradeConfig.DiscardUnknown(m) +} -func _RouteAction_RetryPolicy_RetryHostPredicate_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RouteAction_RetryPolicy_RetryHostPredicate) - // config_type - switch x := m.ConfigType.(type) { - case *RouteAction_RetryPolicy_RetryHostPredicate_Config: - s := proto.Size(x.Config) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig: - s := proto.Size(x.TypedConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +var xxx_messageInfo_RouteAction_UpgradeConfig proto.InternalMessageInfo + +func (m *RouteAction_UpgradeConfig) GetUpgradeType() string { + if m != nil { + return m.UpgradeType } - return n + return "" } -// The router is capable of shadowing traffic from one cluster to another. The current -// implementation is "fire and forget," meaning Envoy will not wait for the shadow cluster to -// respond before returning the response from the primary cluster. All normal statistics are -// collected for the shadow cluster making this feature useful for testing. -// -// During shadowing, the host/authority header is altered such that *-shadow* is appended. This is -// useful for logging. For example, *cluster1* becomes *cluster1-shadow*. -type RouteAction_RequestMirrorPolicy struct { - // Specifies the cluster that requests will be mirrored to. The cluster must - // exist in the cluster manager configuration. - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` - // If not specified, all requests to the target cluster will be mirrored. If - // specified, Envoy will lookup the runtime key to get the % of requests to - // mirror. Valid values are from 0 to 10000, allowing for increments of - // 0.01% of requests to be mirrored. If the runtime key is specified in the - // configuration but not present in runtime, 0 is the default and thus 0% of - // requests will be mirrored. - // - // .. attention:: - // - // **This field is deprecated**. Set the - // :ref:`runtime_fraction - // ` field instead. - RuntimeKey string `protobuf:"bytes,2,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` // Deprecated: Do not use. - // If both :ref:`runtime_key - // ` and this field are not - // specified, all requests to the target cluster will be mirrored. - // - // If specified, this field takes precedence over the `runtime_key` field and requests must also - // fall under the percentage of matches indicated by this field. - // - // For some fraction N/D, a random number in the range [0,D) is selected. If the - // number is <= the value of the numberator N, or if the key is not present, the default - // value, the request will be mirrored. +func (m *RouteAction_UpgradeConfig) GetEnabled() *types.BoolValue { + if m != nil { + return m.Enabled + } + return nil +} + +// HTTP retry :ref:`architecture overview `. +type RetryPolicy struct { + // Specifies the conditions under which retry takes place. These are the same + // conditions documented for :ref:`config_http_filters_router_x-envoy-retry-on` and + // :ref:`config_http_filters_router_x-envoy-retry-grpc-on`. + RetryOn string `protobuf:"bytes,1,opt,name=retry_on,json=retryOn,proto3" json:"retry_on,omitempty"` + // Specifies the allowed number of retries. This parameter is optional and + // defaults to 1. These are the same conditions documented for + // :ref:`config_http_filters_router_x-envoy-max-retries`. + NumRetries *types.UInt32Value `protobuf:"bytes,2,opt,name=num_retries,json=numRetries,proto3" json:"num_retries,omitempty"` + // Specifies a non-zero upstream timeout per retry attempt. This parameter is optional. The + // same conditions documented for + // :ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms` apply. // // .. note:: // - // Parsing this field is implemented such that the runtime key's data may be represented - // as a :ref:`FractionalPercent ` proto represented - // as JSON/YAML and may also be represented as an integer with the assumption that the value - // is an integral percentage out of 100. For instance, a runtime key lookup returning the - // value "42" would parse as a `FractionalPercent` whose numerator is 42 and denominator is - // HUNDRED. This is behaviour is different to that of the deprecated `runtime_key` field, - // where the implicit denominator is 10000. - RuntimeFraction *core.RuntimeFractionalPercent `protobuf:"bytes,3,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // If left unspecified, Envoy will use the global + // :ref:`route timeout ` for the request. + // Consequently, when using a :ref:`5xx ` based + // retry policy, a request that times out will not be retried as the total timeout budget + // would have been exhausted. + PerTryTimeout *time.Duration `protobuf:"bytes,3,opt,name=per_try_timeout,json=perTryTimeout,proto3,stdduration" json:"per_try_timeout,omitempty"` + // Specifies an implementation of a RetryPriority which is used to determine the + // distribution of load across priorities used for retries. Refer to + // :ref:`retry plugin configuration ` for more details. + RetryPriority *RetryPolicy_RetryPriority `protobuf:"bytes,4,opt,name=retry_priority,json=retryPriority,proto3" json:"retry_priority,omitempty"` + // Specifies a collection of RetryHostPredicates that will be consulted when selecting a host + // for retries. If any of the predicates reject the host, host selection will be reattempted. + // Refer to :ref:`retry plugin configuration ` for more + // details. + RetryHostPredicate []*RetryPolicy_RetryHostPredicate `protobuf:"bytes,5,rep,name=retry_host_predicate,json=retryHostPredicate,proto3" json:"retry_host_predicate,omitempty"` + // The maximum number of times host selection will be reattempted before giving up, at which + // point the host that was last selected will be routed to. If unspecified, this will default to + // retrying once. + HostSelectionRetryMaxAttempts int64 `protobuf:"varint,6,opt,name=host_selection_retry_max_attempts,json=hostSelectionRetryMaxAttempts,proto3" json:"host_selection_retry_max_attempts,omitempty"` + // HTTP status codes that should trigger a retry in addition to those specified by retry_on. + RetriableStatusCodes []uint32 `protobuf:"varint,7,rep,packed,name=retriable_status_codes,json=retriableStatusCodes,proto3" json:"retriable_status_codes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *RouteAction_RequestMirrorPolicy) Reset() { *m = RouteAction_RequestMirrorPolicy{} } -func (m *RouteAction_RequestMirrorPolicy) String() string { return proto.CompactTextString(m) } -func (*RouteAction_RequestMirrorPolicy) ProtoMessage() {} -func (*RouteAction_RequestMirrorPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5, 1} +func (m *RetryPolicy) Reset() { *m = RetryPolicy{} } +func (m *RetryPolicy) String() string { return proto.CompactTextString(m) } +func (*RetryPolicy) ProtoMessage() {} +func (*RetryPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_route_ee11921c49fa9e35, []int{6} } -func (m *RouteAction_RequestMirrorPolicy) XXX_Unmarshal(b []byte) error { +func (m *RetryPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *RouteAction_RequestMirrorPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *RetryPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_RouteAction_RequestMirrorPolicy.Marshal(b, m, deterministic) + return xxx_messageInfo_RetryPolicy.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -2302,85 +2577,90 @@ func (m *RouteAction_RequestMirrorPolicy) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } -func (dst *RouteAction_RequestMirrorPolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_RequestMirrorPolicy.Merge(dst, src) +func (dst *RetryPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RetryPolicy.Merge(dst, src) } -func (m *RouteAction_RequestMirrorPolicy) XXX_Size() int { +func (m *RetryPolicy) XXX_Size() int { return m.Size() } -func (m *RouteAction_RequestMirrorPolicy) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_RequestMirrorPolicy.DiscardUnknown(m) +func (m *RetryPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_RetryPolicy.DiscardUnknown(m) } -var xxx_messageInfo_RouteAction_RequestMirrorPolicy proto.InternalMessageInfo +var xxx_messageInfo_RetryPolicy proto.InternalMessageInfo -func (m *RouteAction_RequestMirrorPolicy) GetCluster() string { +func (m *RetryPolicy) GetRetryOn() string { if m != nil { - return m.Cluster + return m.RetryOn } return "" } -// Deprecated: Do not use. -func (m *RouteAction_RequestMirrorPolicy) GetRuntimeKey() string { +func (m *RetryPolicy) GetNumRetries() *types.UInt32Value { if m != nil { - return m.RuntimeKey + return m.NumRetries } - return "" + return nil } -func (m *RouteAction_RequestMirrorPolicy) GetRuntimeFraction() *core.RuntimeFractionalPercent { +func (m *RetryPolicy) GetPerTryTimeout() *time.Duration { if m != nil { - return m.RuntimeFraction + return m.PerTryTimeout } return nil } -// Specifies the route's hashing policy if the upstream cluster uses a hashing :ref:`load balancer -// `. -type RouteAction_HashPolicy struct { - // Types that are valid to be assigned to PolicySpecifier: - // *RouteAction_HashPolicy_Header_ - // *RouteAction_HashPolicy_Cookie_ - // *RouteAction_HashPolicy_ConnectionProperties_ - PolicySpecifier isRouteAction_HashPolicy_PolicySpecifier `protobuf_oneof:"policy_specifier"` - // The flag that shortcircuits the hash computing. This field provides a - // 'fallback' style of configuration: "if a terminal policy doesn't work, - // fallback to rest of the policy list", it saves time when the terminal - // policy works. - // - // If true, and there is already a hash computed, ignore rest of the - // list of hash polices. - // For example, if the following hash methods are configured: - // - // ========= ======== - // specifier terminal - // ========= ======== - // Header A true - // Header B false - // Header C false - // ========= ======== - // - // The generateHash process ends if policy "header A" generates a hash, as - // it's a terminal policy. - Terminal bool `protobuf:"varint,4,opt,name=terminal,proto3" json:"terminal,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RetryPolicy) GetRetryPriority() *RetryPolicy_RetryPriority { + if m != nil { + return m.RetryPriority + } + return nil +} + +func (m *RetryPolicy) GetRetryHostPredicate() []*RetryPolicy_RetryHostPredicate { + if m != nil { + return m.RetryHostPredicate + } + return nil +} + +func (m *RetryPolicy) GetHostSelectionRetryMaxAttempts() int64 { + if m != nil { + return m.HostSelectionRetryMaxAttempts + } + return 0 +} + +func (m *RetryPolicy) GetRetriableStatusCodes() []uint32 { + if m != nil { + return m.RetriableStatusCodes + } + return nil } -func (m *RouteAction_HashPolicy) Reset() { *m = RouteAction_HashPolicy{} } -func (m *RouteAction_HashPolicy) String() string { return proto.CompactTextString(m) } -func (*RouteAction_HashPolicy) ProtoMessage() {} -func (*RouteAction_HashPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5, 2} +type RetryPolicy_RetryPriority struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *RetryPolicy_RetryPriority_Config + // *RetryPolicy_RetryPriority_TypedConfig + ConfigType isRetryPolicy_RetryPriority_ConfigType `protobuf_oneof:"config_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *RouteAction_HashPolicy) XXX_Unmarshal(b []byte) error { + +func (m *RetryPolicy_RetryPriority) Reset() { *m = RetryPolicy_RetryPriority{} } +func (m *RetryPolicy_RetryPriority) String() string { return proto.CompactTextString(m) } +func (*RetryPolicy_RetryPriority) ProtoMessage() {} +func (*RetryPolicy_RetryPriority) Descriptor() ([]byte, []int) { + return fileDescriptor_route_ee11921c49fa9e35, []int{6, 0} +} +func (m *RetryPolicy_RetryPriority) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *RouteAction_HashPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *RetryPolicy_RetryPriority) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_RouteAction_HashPolicy.Marshal(b, m, deterministic) + return xxx_messageInfo_RetryPolicy_RetryPriority.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -2390,325 +2670,160 @@ func (m *RouteAction_HashPolicy) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (dst *RouteAction_HashPolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_HashPolicy.Merge(dst, src) +func (dst *RetryPolicy_RetryPriority) XXX_Merge(src proto.Message) { + xxx_messageInfo_RetryPolicy_RetryPriority.Merge(dst, src) } -func (m *RouteAction_HashPolicy) XXX_Size() int { +func (m *RetryPolicy_RetryPriority) XXX_Size() int { return m.Size() } -func (m *RouteAction_HashPolicy) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_HashPolicy.DiscardUnknown(m) +func (m *RetryPolicy_RetryPriority) XXX_DiscardUnknown() { + xxx_messageInfo_RetryPolicy_RetryPriority.DiscardUnknown(m) } -var xxx_messageInfo_RouteAction_HashPolicy proto.InternalMessageInfo +var xxx_messageInfo_RetryPolicy_RetryPriority proto.InternalMessageInfo -type isRouteAction_HashPolicy_PolicySpecifier interface { - isRouteAction_HashPolicy_PolicySpecifier() +type isRetryPolicy_RetryPriority_ConfigType interface { + isRetryPolicy_RetryPriority_ConfigType() Equal(interface{}) bool MarshalTo([]byte) (int, error) Size() int } -type RouteAction_HashPolicy_Header_ struct { - Header *RouteAction_HashPolicy_Header `protobuf:"bytes,1,opt,name=header,proto3,oneof"` -} -type RouteAction_HashPolicy_Cookie_ struct { - Cookie *RouteAction_HashPolicy_Cookie `protobuf:"bytes,2,opt,name=cookie,proto3,oneof"` +type RetryPolicy_RetryPriority_Config struct { + Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` } -type RouteAction_HashPolicy_ConnectionProperties_ struct { - ConnectionProperties *RouteAction_HashPolicy_ConnectionProperties `protobuf:"bytes,3,opt,name=connection_properties,json=connectionProperties,proto3,oneof"` +type RetryPolicy_RetryPriority_TypedConfig struct { + TypedConfig *types.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` } -func (*RouteAction_HashPolicy_Header_) isRouteAction_HashPolicy_PolicySpecifier() {} -func (*RouteAction_HashPolicy_Cookie_) isRouteAction_HashPolicy_PolicySpecifier() {} -func (*RouteAction_HashPolicy_ConnectionProperties_) isRouteAction_HashPolicy_PolicySpecifier() {} +func (*RetryPolicy_RetryPriority_Config) isRetryPolicy_RetryPriority_ConfigType() {} +func (*RetryPolicy_RetryPriority_TypedConfig) isRetryPolicy_RetryPriority_ConfigType() {} -func (m *RouteAction_HashPolicy) GetPolicySpecifier() isRouteAction_HashPolicy_PolicySpecifier { +func (m *RetryPolicy_RetryPriority) GetConfigType() isRetryPolicy_RetryPriority_ConfigType { if m != nil { - return m.PolicySpecifier + return m.ConfigType } return nil } -func (m *RouteAction_HashPolicy) GetHeader() *RouteAction_HashPolicy_Header { - if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_Header_); ok { - return x.Header +func (m *RetryPolicy_RetryPriority) GetName() string { + if m != nil { + return m.Name } - return nil + return "" } -func (m *RouteAction_HashPolicy) GetCookie() *RouteAction_HashPolicy_Cookie { - if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_Cookie_); ok { - return x.Cookie +func (m *RetryPolicy_RetryPriority) GetConfig() *types.Struct { + if x, ok := m.GetConfigType().(*RetryPolicy_RetryPriority_Config); ok { + return x.Config } return nil } -func (m *RouteAction_HashPolicy) GetConnectionProperties() *RouteAction_HashPolicy_ConnectionProperties { - if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_ConnectionProperties_); ok { - return x.ConnectionProperties +func (m *RetryPolicy_RetryPriority) GetTypedConfig() *types.Any { + if x, ok := m.GetConfigType().(*RetryPolicy_RetryPriority_TypedConfig); ok { + return x.TypedConfig } return nil } -func (m *RouteAction_HashPolicy) GetTerminal() bool { - if m != nil { - return m.Terminal - } - return false -} - // XXX_OneofFuncs is for the internal use of the proto package. -func (*RouteAction_HashPolicy) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RouteAction_HashPolicy_OneofMarshaler, _RouteAction_HashPolicy_OneofUnmarshaler, _RouteAction_HashPolicy_OneofSizer, []interface{}{ - (*RouteAction_HashPolicy_Header_)(nil), - (*RouteAction_HashPolicy_Cookie_)(nil), - (*RouteAction_HashPolicy_ConnectionProperties_)(nil), +func (*RetryPolicy_RetryPriority) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RetryPolicy_RetryPriority_OneofMarshaler, _RetryPolicy_RetryPriority_OneofUnmarshaler, _RetryPolicy_RetryPriority_OneofSizer, []interface{}{ + (*RetryPolicy_RetryPriority_Config)(nil), + (*RetryPolicy_RetryPriority_TypedConfig)(nil), } } -func _RouteAction_HashPolicy_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RouteAction_HashPolicy) - // policy_specifier - switch x := m.PolicySpecifier.(type) { - case *RouteAction_HashPolicy_Header_: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Header); err != nil { - return err - } - case *RouteAction_HashPolicy_Cookie_: +func _RetryPolicy_RetryPriority_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RetryPolicy_RetryPriority) + // config_type + switch x := m.ConfigType.(type) { + case *RetryPolicy_RetryPriority_Config: _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Cookie); err != nil { + if err := b.EncodeMessage(x.Config); err != nil { return err } - case *RouteAction_HashPolicy_ConnectionProperties_: + case *RetryPolicy_RetryPriority_TypedConfig: _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ConnectionProperties); err != nil { + if err := b.EncodeMessage(x.TypedConfig); err != nil { return err } case nil: default: - return fmt.Errorf("RouteAction_HashPolicy.PolicySpecifier has unexpected type %T", x) + return fmt.Errorf("RetryPolicy_RetryPriority.ConfigType has unexpected type %T", x) } return nil } -func _RouteAction_HashPolicy_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RouteAction_HashPolicy) +func _RetryPolicy_RetryPriority_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RetryPolicy_RetryPriority) switch tag { - case 1: // policy_specifier.header - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RouteAction_HashPolicy_Header) - err := b.DecodeMessage(msg) - m.PolicySpecifier = &RouteAction_HashPolicy_Header_{msg} - return true, err - case 2: // policy_specifier.cookie + case 2: // config_type.config if wire != proto.WireBytes { return true, proto.ErrInternalBadWireType } - msg := new(RouteAction_HashPolicy_Cookie) + msg := new(types.Struct) err := b.DecodeMessage(msg) - m.PolicySpecifier = &RouteAction_HashPolicy_Cookie_{msg} + m.ConfigType = &RetryPolicy_RetryPriority_Config{msg} return true, err - case 3: // policy_specifier.connection_properties + case 3: // config_type.typed_config if wire != proto.WireBytes { return true, proto.ErrInternalBadWireType } - msg := new(RouteAction_HashPolicy_ConnectionProperties) + msg := new(types.Any) err := b.DecodeMessage(msg) - m.PolicySpecifier = &RouteAction_HashPolicy_ConnectionProperties_{msg} + m.ConfigType = &RetryPolicy_RetryPriority_TypedConfig{msg} return true, err default: return false, nil } } -func _RouteAction_HashPolicy_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RouteAction_HashPolicy) - // policy_specifier - switch x := m.PolicySpecifier.(type) { - case *RouteAction_HashPolicy_Header_: - s := proto.Size(x.Header) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RouteAction_HashPolicy_Cookie_: - s := proto.Size(x.Cookie) +func _RetryPolicy_RetryPriority_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RetryPolicy_RetryPriority) + // config_type + switch x := m.ConfigType.(type) { + case *RetryPolicy_RetryPriority_Config: + s := proto.Size(x.Config) n += 1 // tag and wire n += proto.SizeVarint(uint64(s)) n += s - case *RouteAction_HashPolicy_ConnectionProperties_: - s := proto.Size(x.ConnectionProperties) + case *RetryPolicy_RetryPriority_TypedConfig: + s := proto.Size(x.TypedConfig) n += 1 // tag and wire n += proto.SizeVarint(uint64(s)) n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type RouteAction_HashPolicy_Header struct { - // The name of the request header that will be used to obtain the hash - // key. If the request header is not present, no hash will be produced. - HeaderName string `protobuf:"bytes,1,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteAction_HashPolicy_Header) Reset() { *m = RouteAction_HashPolicy_Header{} } -func (m *RouteAction_HashPolicy_Header) String() string { return proto.CompactTextString(m) } -func (*RouteAction_HashPolicy_Header) ProtoMessage() {} -func (*RouteAction_HashPolicy_Header) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5, 2, 0} -} -func (m *RouteAction_HashPolicy_Header) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteAction_HashPolicy_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RouteAction_HashPolicy_Header.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (dst *RouteAction_HashPolicy_Header) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_HashPolicy_Header.Merge(dst, src) -} -func (m *RouteAction_HashPolicy_Header) XXX_Size() int { - return m.Size() -} -func (m *RouteAction_HashPolicy_Header) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_HashPolicy_Header.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteAction_HashPolicy_Header proto.InternalMessageInfo - -func (m *RouteAction_HashPolicy_Header) GetHeaderName() string { - if m != nil { - return m.HeaderName - } - return "" -} - -// Envoy supports two types of cookie affinity: -// -// 1. Passive. Envoy takes a cookie that's present in the cookies header and -// hashes on its value. -// -// 2. Generated. Envoy generates and sets a cookie with an expiration (TTL) -// on the first request from the client in its response to the client, -// based on the endpoint the request gets sent to. The client then -// presents this on the next and all subsequent requests. The hash of -// this is sufficient to ensure these requests get sent to the same -// endpoint. The cookie is generated by hashing the source and -// destination ports and addresses so that multiple independent HTTP2 -// streams on the same connection will independently receive the same -// cookie, even if they arrive at the Envoy simultaneously. -type RouteAction_HashPolicy_Cookie struct { - // The name of the cookie that will be used to obtain the hash key. If the - // cookie is not present and ttl below is not set, no hash will be - // produced. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // If specified, a cookie with the TTL will be generated if the cookie is - // not present. If the TTL is present and zero, the generated cookie will - // be a session cookie. - Ttl *time.Duration `protobuf:"bytes,2,opt,name=ttl,proto3,stdduration" json:"ttl,omitempty"` - // The name of the path for the cookie. If no path is specified here, no path - // will be set for the cookie. - Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteAction_HashPolicy_Cookie) Reset() { *m = RouteAction_HashPolicy_Cookie{} } -func (m *RouteAction_HashPolicy_Cookie) String() string { return proto.CompactTextString(m) } -func (*RouteAction_HashPolicy_Cookie) ProtoMessage() {} -func (*RouteAction_HashPolicy_Cookie) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5, 2, 1} -} -func (m *RouteAction_HashPolicy_Cookie) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteAction_HashPolicy_Cookie) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RouteAction_HashPolicy_Cookie.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (dst *RouteAction_HashPolicy_Cookie) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_HashPolicy_Cookie.Merge(dst, src) -} -func (m *RouteAction_HashPolicy_Cookie) XXX_Size() int { - return m.Size() -} -func (m *RouteAction_HashPolicy_Cookie) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_HashPolicy_Cookie.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteAction_HashPolicy_Cookie proto.InternalMessageInfo - -func (m *RouteAction_HashPolicy_Cookie) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *RouteAction_HashPolicy_Cookie) GetTtl() *time.Duration { - if m != nil { - return m.Ttl - } - return nil -} - -func (m *RouteAction_HashPolicy_Cookie) GetPath() string { - if m != nil { - return m.Path + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) } - return "" + return n } -type RouteAction_HashPolicy_ConnectionProperties struct { - // Hash on source IP address. - SourceIp bool `protobuf:"varint,1,opt,name=source_ip,json=sourceIp,proto3" json:"source_ip,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type RetryPolicy_RetryHostPredicate struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *RetryPolicy_RetryHostPredicate_Config + // *RetryPolicy_RetryHostPredicate_TypedConfig + ConfigType isRetryPolicy_RetryHostPredicate_ConfigType `protobuf_oneof:"config_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *RouteAction_HashPolicy_ConnectionProperties) Reset() { - *m = RouteAction_HashPolicy_ConnectionProperties{} -} -func (m *RouteAction_HashPolicy_ConnectionProperties) String() string { - return proto.CompactTextString(m) -} -func (*RouteAction_HashPolicy_ConnectionProperties) ProtoMessage() {} -func (*RouteAction_HashPolicy_ConnectionProperties) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5, 2, 2} +func (m *RetryPolicy_RetryHostPredicate) Reset() { *m = RetryPolicy_RetryHostPredicate{} } +func (m *RetryPolicy_RetryHostPredicate) String() string { return proto.CompactTextString(m) } +func (*RetryPolicy_RetryHostPredicate) ProtoMessage() {} +func (*RetryPolicy_RetryHostPredicate) Descriptor() ([]byte, []int) { + return fileDescriptor_route_ee11921c49fa9e35, []int{6, 1} } -func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Unmarshal(b []byte) error { +func (m *RetryPolicy_RetryHostPredicate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *RetryPolicy_RetryHostPredicate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Marshal(b, m, deterministic) + return xxx_messageInfo_RetryPolicy_RetryHostPredicate.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalTo(b) @@ -2718,88 +2833,135 @@ func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Marshal(b []byte, dete return b[:n], nil } } -func (dst *RouteAction_HashPolicy_ConnectionProperties) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Merge(dst, src) +func (dst *RetryPolicy_RetryHostPredicate) XXX_Merge(src proto.Message) { + xxx_messageInfo_RetryPolicy_RetryHostPredicate.Merge(dst, src) } -func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Size() int { +func (m *RetryPolicy_RetryHostPredicate) XXX_Size() int { return m.Size() } -func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.DiscardUnknown(m) +func (m *RetryPolicy_RetryHostPredicate) XXX_DiscardUnknown() { + xxx_messageInfo_RetryPolicy_RetryHostPredicate.DiscardUnknown(m) } -var xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties proto.InternalMessageInfo +var xxx_messageInfo_RetryPolicy_RetryHostPredicate proto.InternalMessageInfo -func (m *RouteAction_HashPolicy_ConnectionProperties) GetSourceIp() bool { - if m != nil { - return m.SourceIp - } - return false +type isRetryPolicy_RetryHostPredicate_ConfigType interface { + isRetryPolicy_RetryHostPredicate_ConfigType() + Equal(interface{}) bool + MarshalTo([]byte) (int, error) + Size() int } -// Allows enabling and disabling upgrades on a per-route basis. -// This overrides any enabled/disabled upgrade filter chain specified in the -// HttpConnectionManager -// :ref:upgrade_configs` -// ` -// but does not affect any custom filter chain specified there. -type RouteAction_UpgradeConfig struct { - // The case-insensitive name of this upgrade, e.g. "websocket". - // For each upgrade type present in upgrade_configs, requests with - // Upgrade: [upgrade_type] will be proxied upstream. - UpgradeType string `protobuf:"bytes,1,opt,name=upgrade_type,json=upgradeType,proto3" json:"upgrade_type,omitempty"` - // Determines if upgrades are available on this route. Defaults to true. - Enabled *types.BoolValue `protobuf:"bytes,2,opt,name=enabled,proto3" json:"enabled,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type RetryPolicy_RetryHostPredicate_Config struct { + Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` } - -func (m *RouteAction_UpgradeConfig) Reset() { *m = RouteAction_UpgradeConfig{} } -func (m *RouteAction_UpgradeConfig) String() string { return proto.CompactTextString(m) } -func (*RouteAction_UpgradeConfig) ProtoMessage() {} -func (*RouteAction_UpgradeConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{5, 3} +type RetryPolicy_RetryHostPredicate_TypedConfig struct { + TypedConfig *types.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` } -func (m *RouteAction_UpgradeConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (*RetryPolicy_RetryHostPredicate_Config) isRetryPolicy_RetryHostPredicate_ConfigType() {} +func (*RetryPolicy_RetryHostPredicate_TypedConfig) isRetryPolicy_RetryHostPredicate_ConfigType() {} + +func (m *RetryPolicy_RetryHostPredicate) GetConfigType() isRetryPolicy_RetryHostPredicate_ConfigType { + if m != nil { + return m.ConfigType + } + return nil } -func (m *RouteAction_UpgradeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RouteAction_UpgradeConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + +func (m *RetryPolicy_RetryHostPredicate) GetName() string { + if m != nil { + return m.Name } + return "" } -func (dst *RouteAction_UpgradeConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_UpgradeConfig.Merge(dst, src) + +func (m *RetryPolicy_RetryHostPredicate) GetConfig() *types.Struct { + if x, ok := m.GetConfigType().(*RetryPolicy_RetryHostPredicate_Config); ok { + return x.Config + } + return nil } -func (m *RouteAction_UpgradeConfig) XXX_Size() int { - return m.Size() + +func (m *RetryPolicy_RetryHostPredicate) GetTypedConfig() *types.Any { + if x, ok := m.GetConfigType().(*RetryPolicy_RetryHostPredicate_TypedConfig); ok { + return x.TypedConfig + } + return nil } -func (m *RouteAction_UpgradeConfig) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_UpgradeConfig.DiscardUnknown(m) + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RetryPolicy_RetryHostPredicate) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RetryPolicy_RetryHostPredicate_OneofMarshaler, _RetryPolicy_RetryHostPredicate_OneofUnmarshaler, _RetryPolicy_RetryHostPredicate_OneofSizer, []interface{}{ + (*RetryPolicy_RetryHostPredicate_Config)(nil), + (*RetryPolicy_RetryHostPredicate_TypedConfig)(nil), + } } -var xxx_messageInfo_RouteAction_UpgradeConfig proto.InternalMessageInfo +func _RetryPolicy_RetryHostPredicate_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RetryPolicy_RetryHostPredicate) + // config_type + switch x := m.ConfigType.(type) { + case *RetryPolicy_RetryHostPredicate_Config: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Config); err != nil { + return err + } + case *RetryPolicy_RetryHostPredicate_TypedConfig: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TypedConfig); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RetryPolicy_RetryHostPredicate.ConfigType has unexpected type %T", x) + } + return nil +} -func (m *RouteAction_UpgradeConfig) GetUpgradeType() string { - if m != nil { - return m.UpgradeType +func _RetryPolicy_RetryHostPredicate_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RetryPolicy_RetryHostPredicate) + switch tag { + case 2: // config_type.config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.Struct) + err := b.DecodeMessage(msg) + m.ConfigType = &RetryPolicy_RetryHostPredicate_Config{msg} + return true, err + case 3: // config_type.typed_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(types.Any) + err := b.DecodeMessage(msg) + m.ConfigType = &RetryPolicy_RetryHostPredicate_TypedConfig{msg} + return true, err + default: + return false, nil } - return "" } -func (m *RouteAction_UpgradeConfig) GetEnabled() *types.BoolValue { - if m != nil { - return m.Enabled +func _RetryPolicy_RetryHostPredicate_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RetryPolicy_RetryHostPredicate) + // config_type + switch x := m.ConfigType.(type) { + case *RetryPolicy_RetryHostPredicate_Config: + s := proto.Size(x.Config) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *RetryPolicy_RetryHostPredicate_TypedConfig: + s := proto.Size(x.TypedConfig) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) } - return nil + return n } type RedirectAction struct { @@ -2836,7 +2998,7 @@ func (m *RedirectAction) Reset() { *m = RedirectAction{} } func (m *RedirectAction) String() string { return proto.CompactTextString(m) } func (*RedirectAction) ProtoMessage() {} func (*RedirectAction) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{6} + return fileDescriptor_route_ee11921c49fa9e35, []int{7} } func (m *RedirectAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3097,7 +3259,7 @@ func (m *DirectResponseAction) Reset() { *m = DirectResponseAction{} } func (m *DirectResponseAction) String() string { return proto.CompactTextString(m) } func (*DirectResponseAction) ProtoMessage() {} func (*DirectResponseAction) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{7} + return fileDescriptor_route_ee11921c49fa9e35, []int{8} } func (m *DirectResponseAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3159,7 +3321,7 @@ func (m *Decorator) Reset() { *m = Decorator{} } func (m *Decorator) String() string { return proto.CompactTextString(m) } func (*Decorator) ProtoMessage() {} func (*Decorator) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{8} + return fileDescriptor_route_ee11921c49fa9e35, []int{9} } func (m *Decorator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3241,7 +3403,7 @@ func (m *VirtualCluster) Reset() { *m = VirtualCluster{} } func (m *VirtualCluster) String() string { return proto.CompactTextString(m) } func (*VirtualCluster) ProtoMessage() {} func (*VirtualCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{9} + return fileDescriptor_route_ee11921c49fa9e35, []int{10} } func (m *VirtualCluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3319,7 +3481,7 @@ func (m *RateLimit) Reset() { *m = RateLimit{} } func (m *RateLimit) String() string { return proto.CompactTextString(m) } func (*RateLimit) ProtoMessage() {} func (*RateLimit) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{10} + return fileDescriptor_route_ee11921c49fa9e35, []int{11} } func (m *RateLimit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3387,7 +3549,7 @@ func (m *RateLimit_Action) Reset() { *m = RateLimit_Action{} } func (m *RateLimit_Action) String() string { return proto.CompactTextString(m) } func (*RateLimit_Action) ProtoMessage() {} func (*RateLimit_Action) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{10, 0} + return fileDescriptor_route_ee11921c49fa9e35, []int{11, 0} } func (m *RateLimit_Action) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3665,7 +3827,7 @@ func (m *RateLimit_Action_SourceCluster) Reset() { *m = RateLimit_Action func (m *RateLimit_Action_SourceCluster) String() string { return proto.CompactTextString(m) } func (*RateLimit_Action_SourceCluster) ProtoMessage() {} func (*RateLimit_Action_SourceCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{10, 0, 0} + return fileDescriptor_route_ee11921c49fa9e35, []int{11, 0, 0} } func (m *RateLimit_Action_SourceCluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3720,7 +3882,7 @@ func (m *RateLimit_Action_DestinationCluster) Reset() { *m = RateLimit_A func (m *RateLimit_Action_DestinationCluster) String() string { return proto.CompactTextString(m) } func (*RateLimit_Action_DestinationCluster) ProtoMessage() {} func (*RateLimit_Action_DestinationCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{10, 0, 1} + return fileDescriptor_route_ee11921c49fa9e35, []int{11, 0, 1} } func (m *RateLimit_Action_DestinationCluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3771,7 +3933,7 @@ func (m *RateLimit_Action_RequestHeaders) Reset() { *m = RateLimit_Actio func (m *RateLimit_Action_RequestHeaders) String() string { return proto.CompactTextString(m) } func (*RateLimit_Action_RequestHeaders) ProtoMessage() {} func (*RateLimit_Action_RequestHeaders) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{10, 0, 2} + return fileDescriptor_route_ee11921c49fa9e35, []int{11, 0, 2} } func (m *RateLimit_Action_RequestHeaders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3830,7 +3992,7 @@ func (m *RateLimit_Action_RemoteAddress) Reset() { *m = RateLimit_Action func (m *RateLimit_Action_RemoteAddress) String() string { return proto.CompactTextString(m) } func (*RateLimit_Action_RemoteAddress) ProtoMessage() {} func (*RateLimit_Action_RemoteAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{10, 0, 3} + return fileDescriptor_route_ee11921c49fa9e35, []int{11, 0, 3} } func (m *RateLimit_Action_RemoteAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3876,7 +4038,7 @@ func (m *RateLimit_Action_GenericKey) Reset() { *m = RateLimit_Action_Ge func (m *RateLimit_Action_GenericKey) String() string { return proto.CompactTextString(m) } func (*RateLimit_Action_GenericKey) ProtoMessage() {} func (*RateLimit_Action_GenericKey) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{10, 0, 4} + return fileDescriptor_route_ee11921c49fa9e35, []int{11, 0, 4} } func (m *RateLimit_Action_GenericKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3940,7 +4102,7 @@ func (m *RateLimit_Action_HeaderValueMatch) Reset() { *m = RateLimit_Act func (m *RateLimit_Action_HeaderValueMatch) String() string { return proto.CompactTextString(m) } func (*RateLimit_Action_HeaderValueMatch) ProtoMessage() {} func (*RateLimit_Action_HeaderValueMatch) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{10, 0, 5} + return fileDescriptor_route_ee11921c49fa9e35, []int{11, 0, 5} } func (m *RateLimit_Action_HeaderValueMatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4042,7 +4204,7 @@ func (m *HeaderMatcher) Reset() { *m = HeaderMatcher{} } func (m *HeaderMatcher) String() string { return proto.CompactTextString(m) } func (*HeaderMatcher) ProtoMessage() {} func (*HeaderMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{11} + return fileDescriptor_route_ee11921c49fa9e35, []int{12} } func (m *HeaderMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4324,7 +4486,7 @@ func (m *QueryParameterMatcher) Reset() { *m = QueryParameterMatcher{} } func (m *QueryParameterMatcher) String() string { return proto.CompactTextString(m) } func (*QueryParameterMatcher) ProtoMessage() {} func (*QueryParameterMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_route_f42e89314c1fe613, []int{12} + return fileDescriptor_route_ee11921c49fa9e35, []int{13} } func (m *QueryParameterMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4389,15 +4551,15 @@ func init() { proto.RegisterType((*RouteMatch_GrpcRouteMatchOptions)(nil), "envoy.api.v2.route.RouteMatch.GrpcRouteMatchOptions") proto.RegisterType((*CorsPolicy)(nil), "envoy.api.v2.route.CorsPolicy") proto.RegisterType((*RouteAction)(nil), "envoy.api.v2.route.RouteAction") - proto.RegisterType((*RouteAction_RetryPolicy)(nil), "envoy.api.v2.route.RouteAction.RetryPolicy") - proto.RegisterType((*RouteAction_RetryPolicy_RetryPriority)(nil), "envoy.api.v2.route.RouteAction.RetryPolicy.RetryPriority") - proto.RegisterType((*RouteAction_RetryPolicy_RetryHostPredicate)(nil), "envoy.api.v2.route.RouteAction.RetryPolicy.RetryHostPredicate") proto.RegisterType((*RouteAction_RequestMirrorPolicy)(nil), "envoy.api.v2.route.RouteAction.RequestMirrorPolicy") proto.RegisterType((*RouteAction_HashPolicy)(nil), "envoy.api.v2.route.RouteAction.HashPolicy") proto.RegisterType((*RouteAction_HashPolicy_Header)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.Header") proto.RegisterType((*RouteAction_HashPolicy_Cookie)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.Cookie") proto.RegisterType((*RouteAction_HashPolicy_ConnectionProperties)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.ConnectionProperties") proto.RegisterType((*RouteAction_UpgradeConfig)(nil), "envoy.api.v2.route.RouteAction.UpgradeConfig") + proto.RegisterType((*RetryPolicy)(nil), "envoy.api.v2.route.RetryPolicy") + proto.RegisterType((*RetryPolicy_RetryPriority)(nil), "envoy.api.v2.route.RetryPolicy.RetryPriority") + proto.RegisterType((*RetryPolicy_RetryHostPredicate)(nil), "envoy.api.v2.route.RetryPolicy.RetryHostPredicate") proto.RegisterType((*RedirectAction)(nil), "envoy.api.v2.route.RedirectAction") proto.RegisterType((*DirectResponseAction)(nil), "envoy.api.v2.route.DirectResponseAction") proto.RegisterType((*Decorator)(nil), "envoy.api.v2.route.Decorator") @@ -4414,6 +4576,7 @@ func init() { proto.RegisterType((*QueryParameterMatcher)(nil), "envoy.api.v2.route.QueryParameterMatcher") proto.RegisterEnum("envoy.api.v2.route.VirtualHost_TlsRequirementType", VirtualHost_TlsRequirementType_name, VirtualHost_TlsRequirementType_value) proto.RegisterEnum("envoy.api.v2.route.RouteAction_ClusterNotFoundResponseCode", RouteAction_ClusterNotFoundResponseCode_name, RouteAction_ClusterNotFoundResponseCode_value) + proto.RegisterEnum("envoy.api.v2.route.RouteAction_InternalRedirectAction", RouteAction_InternalRedirectAction_name, RouteAction_InternalRedirectAction_value) proto.RegisterEnum("envoy.api.v2.route.RedirectAction_RedirectResponseCode", RedirectAction_RedirectResponseCode_name, RedirectAction_RedirectResponseCode_value) } func (this *VirtualHost) Equal(that interface{}) bool { @@ -4527,6 +4690,9 @@ func (this *VirtualHost) Equal(that interface{}) bool { if this.IncludeRequestAttemptCount != that1.IncludeRequestAttemptCount { return false } + if !this.RetryPolicy.Equal(that1.RetryPolicy) { + return false + } if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } @@ -5017,7 +5183,16 @@ func (this *CorsPolicy) Equal(that interface{}) bool { if !this.AllowCredentials.Equal(that1.AllowCredentials) { return false } - if !this.Enabled.Equal(that1.Enabled) { + if that1.EnabledSpecifier == nil { + if this.EnabledSpecifier != nil { + return false + } + } else if this.EnabledSpecifier == nil { + return false + } else if !this.EnabledSpecifier.Equal(that1.EnabledSpecifier) { + return false + } + if !this.ShadowEnabled.Equal(that1.ShadowEnabled) { return false } if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { @@ -5025,6 +5200,54 @@ func (this *CorsPolicy) Equal(that interface{}) bool { } return true } +func (this *CorsPolicy_Enabled) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*CorsPolicy_Enabled) + if !ok { + that2, ok := that.(CorsPolicy_Enabled) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Enabled.Equal(that1.Enabled) { + return false + } + return true +} +func (this *CorsPolicy_FilterEnabled) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*CorsPolicy_FilterEnabled) + if !ok { + that2, ok := that.(CorsPolicy_FilterEnabled) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.FilterEnabled.Equal(that1.FilterEnabled) { + return false + } + return true +} func (this *RouteAction) Equal(that interface{}) bool { if that == nil { return this == nil @@ -5161,6 +5384,9 @@ func (this *RouteAction) Equal(that interface{}) bool { return false } } + if this.InternalRedirectAction != that1.InternalRedirectAction { + return false + } if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } @@ -5286,14 +5512,14 @@ func (this *RouteAction_AutoHostRewrite) Equal(that interface{}) bool { } return true } -func (this *RouteAction_RetryPolicy) Equal(that interface{}) bool { +func (this *RouteAction_RequestMirrorPolicy) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_RetryPolicy) + that1, ok := that.(*RouteAction_RequestMirrorPolicy) if !ok { - that2, ok := that.(RouteAction_RetryPolicy) + that2, ok := that.(RouteAction_RequestMirrorPolicy) if ok { that1 = &that2 } else { @@ -5305,56 +5531,64 @@ func (this *RouteAction_RetryPolicy) Equal(that interface{}) bool { } else if this == nil { return false } - if this.RetryOn != that1.RetryOn { + if this.Cluster != that1.Cluster { return false } - if !this.NumRetries.Equal(that1.NumRetries) { + if this.RuntimeKey != that1.RuntimeKey { return false } - if this.PerTryTimeout != nil && that1.PerTryTimeout != nil { - if *this.PerTryTimeout != *that1.PerTryTimeout { - return false - } - } else if this.PerTryTimeout != nil { - return false - } else if that1.PerTryTimeout != nil { + if !this.RuntimeFraction.Equal(that1.RuntimeFraction) { return false } - if !this.RetryPriority.Equal(that1.RetryPriority) { + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } - if len(this.RetryHostPredicate) != len(that1.RetryHostPredicate) { - return false + return true +} +func (this *RouteAction_HashPolicy) Equal(that interface{}) bool { + if that == nil { + return this == nil } - for i := range this.RetryHostPredicate { - if !this.RetryHostPredicate[i].Equal(that1.RetryHostPredicate[i]) { + + that1, ok := that.(*RouteAction_HashPolicy) + if !ok { + that2, ok := that.(RouteAction_HashPolicy) + if ok { + that1 = &that2 + } else { return false } } - if this.HostSelectionRetryMaxAttempts != that1.HostSelectionRetryMaxAttempts { - return false - } - if len(this.RetriableStatusCodes) != len(that1.RetriableStatusCodes) { + if that1 == nil { + return this == nil + } else if this == nil { return false } - for i := range this.RetriableStatusCodes { - if this.RetriableStatusCodes[i] != that1.RetriableStatusCodes[i] { + if that1.PolicySpecifier == nil { + if this.PolicySpecifier != nil { return false } + } else if this.PolicySpecifier == nil { + return false + } else if !this.PolicySpecifier.Equal(that1.PolicySpecifier) { + return false + } + if this.Terminal != that1.Terminal { + return false } if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } return true } -func (this *RouteAction_RetryPolicy_RetryPriority) Equal(that interface{}) bool { +func (this *RouteAction_HashPolicy_Header_) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_RetryPolicy_RetryPriority) + that1, ok := that.(*RouteAction_HashPolicy_Header_) if !ok { - that2, ok := that.(RouteAction_RetryPolicy_RetryPriority) + that2, ok := that.(RouteAction_HashPolicy_Header_) if ok { that1 = &that2 } else { @@ -5366,31 +5600,19 @@ func (this *RouteAction_RetryPolicy_RetryPriority) Equal(that interface{}) bool } else if this == nil { return false } - if this.Name != that1.Name { - return false - } - if that1.ConfigType == nil { - if this.ConfigType != nil { - return false - } - } else if this.ConfigType == nil { - return false - } else if !this.ConfigType.Equal(that1.ConfigType) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + if !this.Header.Equal(that1.Header) { return false } return true } -func (this *RouteAction_RetryPolicy_RetryPriority_Config) Equal(that interface{}) bool { +func (this *RouteAction_HashPolicy_Cookie_) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_RetryPolicy_RetryPriority_Config) + that1, ok := that.(*RouteAction_HashPolicy_Cookie_) if !ok { - that2, ok := that.(RouteAction_RetryPolicy_RetryPriority_Config) + that2, ok := that.(RouteAction_HashPolicy_Cookie_) if ok { that1 = &that2 } else { @@ -5402,19 +5624,19 @@ func (this *RouteAction_RetryPolicy_RetryPriority_Config) Equal(that interface{} } else if this == nil { return false } - if !this.Config.Equal(that1.Config) { + if !this.Cookie.Equal(that1.Cookie) { return false } return true } -func (this *RouteAction_RetryPolicy_RetryPriority_TypedConfig) Equal(that interface{}) bool { +func (this *RouteAction_HashPolicy_ConnectionProperties_) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_RetryPolicy_RetryPriority_TypedConfig) + that1, ok := that.(*RouteAction_HashPolicy_ConnectionProperties_) if !ok { - that2, ok := that.(RouteAction_RetryPolicy_RetryPriority_TypedConfig) + that2, ok := that.(RouteAction_HashPolicy_ConnectionProperties_) if ok { that1 = &that2 } else { @@ -5426,19 +5648,19 @@ func (this *RouteAction_RetryPolicy_RetryPriority_TypedConfig) Equal(that interf } else if this == nil { return false } - if !this.TypedConfig.Equal(that1.TypedConfig) { + if !this.ConnectionProperties.Equal(that1.ConnectionProperties) { return false } return true } -func (this *RouteAction_RetryPolicy_RetryHostPredicate) Equal(that interface{}) bool { +func (this *RouteAction_HashPolicy_Header) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_RetryPolicy_RetryHostPredicate) + that1, ok := that.(*RouteAction_HashPolicy_Header) if !ok { - that2, ok := that.(RouteAction_RetryPolicy_RetryHostPredicate) + that2, ok := that.(RouteAction_HashPolicy_Header) if ok { that1 = &that2 } else { @@ -5450,16 +5672,7 @@ func (this *RouteAction_RetryPolicy_RetryHostPredicate) Equal(that interface{}) } else if this == nil { return false } - if this.Name != that1.Name { - return false - } - if that1.ConfigType == nil { - if this.ConfigType != nil { - return false - } - } else if this.ConfigType == nil { - return false - } else if !this.ConfigType.Equal(that1.ConfigType) { + if this.HeaderName != that1.HeaderName { return false } if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { @@ -5467,14 +5680,14 @@ func (this *RouteAction_RetryPolicy_RetryHostPredicate) Equal(that interface{}) } return true } -func (this *RouteAction_RetryPolicy_RetryHostPredicate_Config) Equal(that interface{}) bool { +func (this *RouteAction_HashPolicy_Cookie) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_RetryPolicy_RetryHostPredicate_Config) + that1, ok := that.(*RouteAction_HashPolicy_Cookie) if !ok { - that2, ok := that.(RouteAction_RetryPolicy_RetryHostPredicate_Config) + that2, ok := that.(RouteAction_HashPolicy_Cookie) if ok { that1 = &that2 } else { @@ -5486,19 +5699,34 @@ func (this *RouteAction_RetryPolicy_RetryHostPredicate_Config) Equal(that interf } else if this == nil { return false } - if !this.Config.Equal(that1.Config) { + if this.Name != that1.Name { + return false + } + if this.Ttl != nil && that1.Ttl != nil { + if *this.Ttl != *that1.Ttl { + return false + } + } else if this.Ttl != nil { + return false + } else if that1.Ttl != nil { + return false + } + if this.Path != that1.Path { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } return true } -func (this *RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig) Equal(that interface{}) bool { +func (this *RouteAction_HashPolicy_ConnectionProperties) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig) + that1, ok := that.(*RouteAction_HashPolicy_ConnectionProperties) if !ok { - that2, ok := that.(RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig) + that2, ok := that.(RouteAction_HashPolicy_ConnectionProperties) if ok { that1 = &that2 } else { @@ -5510,19 +5738,22 @@ func (this *RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig) Equal(that i } else if this == nil { return false } - if !this.TypedConfig.Equal(that1.TypedConfig) { + if this.SourceIp != that1.SourceIp { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } return true } -func (this *RouteAction_RequestMirrorPolicy) Equal(that interface{}) bool { +func (this *RouteAction_UpgradeConfig) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_RequestMirrorPolicy) + that1, ok := that.(*RouteAction_UpgradeConfig) if !ok { - that2, ok := that.(RouteAction_RequestMirrorPolicy) + that2, ok := that.(RouteAction_UpgradeConfig) if ok { that1 = &that2 } else { @@ -5534,13 +5765,10 @@ func (this *RouteAction_RequestMirrorPolicy) Equal(that interface{}) bool { } else if this == nil { return false } - if this.Cluster != that1.Cluster { - return false - } - if this.RuntimeKey != that1.RuntimeKey { + if this.UpgradeType != that1.UpgradeType { return false } - if !this.RuntimeFraction.Equal(that1.RuntimeFraction) { + if !this.Enabled.Equal(that1.Enabled) { return false } if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { @@ -5548,14 +5776,14 @@ func (this *RouteAction_RequestMirrorPolicy) Equal(that interface{}) bool { } return true } -func (this *RouteAction_HashPolicy) Equal(that interface{}) bool { +func (this *RetryPolicy) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_HashPolicy) + that1, ok := that.(*RetryPolicy) if !ok { - that2, ok := that.(RouteAction_HashPolicy) + that2, ok := that.(RetryPolicy) if ok { that1 = &that2 } else { @@ -5567,55 +5795,56 @@ func (this *RouteAction_HashPolicy) Equal(that interface{}) bool { } else if this == nil { return false } - if that1.PolicySpecifier == nil { - if this.PolicySpecifier != nil { + if this.RetryOn != that1.RetryOn { + return false + } + if !this.NumRetries.Equal(that1.NumRetries) { + return false + } + if this.PerTryTimeout != nil && that1.PerTryTimeout != nil { + if *this.PerTryTimeout != *that1.PerTryTimeout { return false } - } else if this.PolicySpecifier == nil { + } else if this.PerTryTimeout != nil { return false - } else if !this.PolicySpecifier.Equal(that1.PolicySpecifier) { + } else if that1.PerTryTimeout != nil { return false } - if this.Terminal != that1.Terminal { + if !this.RetryPriority.Equal(that1.RetryPriority) { return false } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + if len(this.RetryHostPredicate) != len(that1.RetryHostPredicate) { return false } - return true -} -func (this *RouteAction_HashPolicy_Header_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_HashPolicy_Header_) - if !ok { - that2, ok := that.(RouteAction_HashPolicy_Header_) - if ok { - that1 = &that2 - } else { + for i := range this.RetryHostPredicate { + if !this.RetryHostPredicate[i].Equal(that1.RetryHostPredicate[i]) { return false } } - if that1 == nil { - return this == nil - } else if this == nil { + if this.HostSelectionRetryMaxAttempts != that1.HostSelectionRetryMaxAttempts { return false } - if !this.Header.Equal(that1.Header) { + if len(this.RetriableStatusCodes) != len(that1.RetriableStatusCodes) { + return false + } + for i := range this.RetriableStatusCodes { + if this.RetriableStatusCodes[i] != that1.RetriableStatusCodes[i] { + return false + } + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } return true } -func (this *RouteAction_HashPolicy_Cookie_) Equal(that interface{}) bool { +func (this *RetryPolicy_RetryPriority) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_HashPolicy_Cookie_) + that1, ok := that.(*RetryPolicy_RetryPriority) if !ok { - that2, ok := that.(RouteAction_HashPolicy_Cookie_) + that2, ok := that.(RetryPolicy_RetryPriority) if ok { that1 = &that2 } else { @@ -5627,19 +5856,31 @@ func (this *RouteAction_HashPolicy_Cookie_) Equal(that interface{}) bool { } else if this == nil { return false } - if !this.Cookie.Equal(that1.Cookie) { + if this.Name != that1.Name { + return false + } + if that1.ConfigType == nil { + if this.ConfigType != nil { + return false + } + } else if this.ConfigType == nil { + return false + } else if !this.ConfigType.Equal(that1.ConfigType) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { return false } return true } -func (this *RouteAction_HashPolicy_ConnectionProperties_) Equal(that interface{}) bool { +func (this *RetryPolicy_RetryPriority_Config) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_HashPolicy_ConnectionProperties_) + that1, ok := that.(*RetryPolicy_RetryPriority_Config) if !ok { - that2, ok := that.(RouteAction_HashPolicy_ConnectionProperties_) + that2, ok := that.(RetryPolicy_RetryPriority_Config) if ok { that1 = &that2 } else { @@ -5651,19 +5892,19 @@ func (this *RouteAction_HashPolicy_ConnectionProperties_) Equal(that interface{} } else if this == nil { return false } - if !this.ConnectionProperties.Equal(that1.ConnectionProperties) { + if !this.Config.Equal(that1.Config) { return false } return true } -func (this *RouteAction_HashPolicy_Header) Equal(that interface{}) bool { +func (this *RetryPolicy_RetryPriority_TypedConfig) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_HashPolicy_Header) + that1, ok := that.(*RetryPolicy_RetryPriority_TypedConfig) if !ok { - that2, ok := that.(RouteAction_HashPolicy_Header) + that2, ok := that.(RetryPolicy_RetryPriority_TypedConfig) if ok { that1 = &that2 } else { @@ -5675,22 +5916,19 @@ func (this *RouteAction_HashPolicy_Header) Equal(that interface{}) bool { } else if this == nil { return false } - if this.HeaderName != that1.HeaderName { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + if !this.TypedConfig.Equal(that1.TypedConfig) { return false } return true } -func (this *RouteAction_HashPolicy_Cookie) Equal(that interface{}) bool { +func (this *RetryPolicy_RetryHostPredicate) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_HashPolicy_Cookie) + that1, ok := that.(*RetryPolicy_RetryHostPredicate) if !ok { - that2, ok := that.(RouteAction_HashPolicy_Cookie) + that2, ok := that.(RetryPolicy_RetryHostPredicate) if ok { that1 = &that2 } else { @@ -5705,16 +5943,13 @@ func (this *RouteAction_HashPolicy_Cookie) Equal(that interface{}) bool { if this.Name != that1.Name { return false } - if this.Ttl != nil && that1.Ttl != nil { - if *this.Ttl != *that1.Ttl { + if that1.ConfigType == nil { + if this.ConfigType != nil { return false } - } else if this.Ttl != nil { - return false - } else if that1.Ttl != nil { + } else if this.ConfigType == nil { return false - } - if this.Path != that1.Path { + } else if !this.ConfigType.Equal(that1.ConfigType) { return false } if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { @@ -5722,14 +5957,14 @@ func (this *RouteAction_HashPolicy_Cookie) Equal(that interface{}) bool { } return true } -func (this *RouteAction_HashPolicy_ConnectionProperties) Equal(that interface{}) bool { +func (this *RetryPolicy_RetryHostPredicate_Config) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_HashPolicy_ConnectionProperties) + that1, ok := that.(*RetryPolicy_RetryHostPredicate_Config) if !ok { - that2, ok := that.(RouteAction_HashPolicy_ConnectionProperties) + that2, ok := that.(RetryPolicy_RetryHostPredicate_Config) if ok { that1 = &that2 } else { @@ -5741,22 +5976,19 @@ func (this *RouteAction_HashPolicy_ConnectionProperties) Equal(that interface{}) } else if this == nil { return false } - if this.SourceIp != that1.SourceIp { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + if !this.Config.Equal(that1.Config) { return false } return true } -func (this *RouteAction_UpgradeConfig) Equal(that interface{}) bool { +func (this *RetryPolicy_RetryHostPredicate_TypedConfig) Equal(that interface{}) bool { if that == nil { return this == nil } - that1, ok := that.(*RouteAction_UpgradeConfig) + that1, ok := that.(*RetryPolicy_RetryHostPredicate_TypedConfig) if !ok { - that2, ok := that.(RouteAction_UpgradeConfig) + that2, ok := that.(RetryPolicy_RetryHostPredicate_TypedConfig) if ok { that1 = &that2 } else { @@ -5768,13 +6000,7 @@ func (this *RouteAction_UpgradeConfig) Equal(that interface{}) bool { } else if this == nil { return false } - if this.UpgradeType != that1.UpgradeType { - return false - } - if !this.Enabled.Equal(that1.Enabled) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + if !this.TypedConfig.Equal(that1.TypedConfig) { return false } return true @@ -6824,6 +7050,18 @@ func (m *VirtualHost) MarshalTo(dAtA []byte) (int, error) { } } } + if m.RetryPolicy != nil { + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.RetryPolicy.Size())) + n4, err := m.RetryPolicy.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -6848,37 +7086,37 @@ func (m *Route) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintRoute(dAtA, i, uint64(m.Match.Size())) - n4, err := m.Match.MarshalTo(dAtA[i:]) + n5, err := m.Match.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n4 + i += n5 if m.Action != nil { - nn5, err := m.Action.MarshalTo(dAtA[i:]) + nn6, err := m.Action.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn5 + i += nn6 } if m.Metadata != nil { dAtA[i] = 0x22 i++ i = encodeVarintRoute(dAtA, i, uint64(m.Metadata.Size())) - n6, err := m.Metadata.MarshalTo(dAtA[i:]) + n7, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n6 + i += n7 } if m.Decorator != nil { dAtA[i] = 0x2a i++ i = encodeVarintRoute(dAtA, i, uint64(m.Decorator.Size())) - n7, err := m.Decorator.MarshalTo(dAtA[i:]) + n8, err := m.Decorator.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n7 + i += n8 } if len(m.PerFilterConfig) > 0 { for k, _ := range m.PerFilterConfig { @@ -6900,11 +7138,11 @@ func (m *Route) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(v.Size())) - n8, err := v.MarshalTo(dAtA[i:]) + n9, err := v.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n8 + i += n9 } } } @@ -6982,11 +7220,11 @@ func (m *Route) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(v.Size())) - n9, err := v.MarshalTo(dAtA[i:]) + n10, err := v.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n9 + i += n10 } } } @@ -7002,11 +7240,11 @@ func (m *Route_Route) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(m.Route.Size())) - n10, err := m.Route.MarshalTo(dAtA[i:]) + n11, err := m.Route.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n10 + i += n11 } return i, nil } @@ -7016,11 +7254,11 @@ func (m *Route_Redirect) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintRoute(dAtA, i, uint64(m.Redirect.Size())) - n11, err := m.Redirect.MarshalTo(dAtA[i:]) + n12, err := m.Redirect.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n11 + i += n12 } return i, nil } @@ -7030,11 +7268,11 @@ func (m *Route_DirectResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintRoute(dAtA, i, uint64(m.DirectResponse.Size())) - n12, err := m.DirectResponse.MarshalTo(dAtA[i:]) + n13, err := m.DirectResponse.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n12 + i += n13 } return i, nil } @@ -7075,11 +7313,11 @@ func (m *WeightedCluster) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintRoute(dAtA, i, uint64(m.TotalWeight.Size())) - n13, err := m.TotalWeight.MarshalTo(dAtA[i:]) + n14, err := m.TotalWeight.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n13 + i += n14 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -7112,21 +7350,21 @@ func (m *WeightedCluster_ClusterWeight) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(m.Weight.Size())) - n14, err := m.Weight.MarshalTo(dAtA[i:]) + n15, err := m.Weight.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n14 + i += n15 } if m.MetadataMatch != nil { dAtA[i] = 0x1a i++ i = encodeVarintRoute(dAtA, i, uint64(m.MetadataMatch.Size())) - n15, err := m.MetadataMatch.MarshalTo(dAtA[i:]) + n16, err := m.MetadataMatch.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n15 + i += n16 } if len(m.RequestHeadersToAdd) > 0 { for _, msg := range m.RequestHeadersToAdd { @@ -7187,11 +7425,11 @@ func (m *WeightedCluster_ClusterWeight) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(v.Size())) - n16, err := v.MarshalTo(dAtA[i:]) + n17, err := v.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n16 + i += n17 } } } @@ -7230,11 +7468,11 @@ func (m *WeightedCluster_ClusterWeight) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(v.Size())) - n17, err := v.MarshalTo(dAtA[i:]) + n18, err := v.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n17 + i += n18 } } } @@ -7260,21 +7498,21 @@ func (m *RouteMatch) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.PathSpecifier != nil { - nn18, err := m.PathSpecifier.MarshalTo(dAtA[i:]) + nn19, err := m.PathSpecifier.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn18 + i += nn19 } if m.CaseSensitive != nil { dAtA[i] = 0x22 i++ i = encodeVarintRoute(dAtA, i, uint64(m.CaseSensitive.Size())) - n19, err := m.CaseSensitive.MarshalTo(dAtA[i:]) + n20, err := m.CaseSensitive.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n19 + i += n20 } if len(m.Headers) > 0 { for _, msg := range m.Headers { @@ -7304,21 +7542,21 @@ func (m *RouteMatch) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x42 i++ i = encodeVarintRoute(dAtA, i, uint64(m.Grpc.Size())) - n20, err := m.Grpc.MarshalTo(dAtA[i:]) + n21, err := m.Grpc.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n20 + i += n21 } if m.RuntimeFraction != nil { dAtA[i] = 0x4a i++ i = encodeVarintRoute(dAtA, i, uint64(m.RuntimeFraction.Size())) - n21, err := m.RuntimeFraction.MarshalTo(dAtA[i:]) + n22, err := m.RuntimeFraction.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n21 + i += n22 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -7429,21 +7667,18 @@ func (m *CorsPolicy) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintRoute(dAtA, i, uint64(m.AllowCredentials.Size())) - n22, err := m.AllowCredentials.MarshalTo(dAtA[i:]) + n23, err := m.AllowCredentials.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n22 + i += n23 } - if m.Enabled != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Enabled.Size())) - n23, err := m.Enabled.MarshalTo(dAtA[i:]) + if m.EnabledSpecifier != nil { + nn24, err := m.EnabledSpecifier.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n23 + i += nn24 } if len(m.AllowOriginRegex) > 0 { for _, s := range m.AllowOriginRegex { @@ -7460,12 +7695,50 @@ func (m *CorsPolicy) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], s) } } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if m.ShadowEnabled != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.ShadowEnabled.Size())) + n25, err := m.ShadowEnabled.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n25 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *CorsPolicy_Enabled) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Enabled != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.Enabled.Size())) + n26, err := m.Enabled.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n26 + } + return i, nil +} +func (m *CorsPolicy_FilterEnabled) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.FilterEnabled != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.FilterEnabled.Size())) + n27, err := m.FilterEnabled.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n27 } return i, nil } - func (m *RouteAction) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7482,21 +7755,21 @@ func (m *RouteAction) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.ClusterSpecifier != nil { - nn24, err := m.ClusterSpecifier.MarshalTo(dAtA[i:]) + nn28, err := m.ClusterSpecifier.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn24 + i += nn28 } if m.MetadataMatch != nil { dAtA[i] = 0x22 i++ i = encodeVarintRoute(dAtA, i, uint64(m.MetadataMatch.Size())) - n25, err := m.MetadataMatch.MarshalTo(dAtA[i:]) + n29, err := m.MetadataMatch.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n25 + i += n29 } if len(m.PrefixRewrite) > 0 { dAtA[i] = 0x2a @@ -7505,41 +7778,41 @@ func (m *RouteAction) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.PrefixRewrite) } if m.HostRewriteSpecifier != nil { - nn26, err := m.HostRewriteSpecifier.MarshalTo(dAtA[i:]) + nn30, err := m.HostRewriteSpecifier.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn26 + i += nn30 } if m.Timeout != nil { dAtA[i] = 0x42 i++ i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Timeout))) - n27, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Timeout, dAtA[i:]) + n31, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Timeout, dAtA[i:]) if err != nil { return 0, err } - i += n27 + i += n31 } if m.RetryPolicy != nil { dAtA[i] = 0x4a i++ i = encodeVarintRoute(dAtA, i, uint64(m.RetryPolicy.Size())) - n28, err := m.RetryPolicy.MarshalTo(dAtA[i:]) + n32, err := m.RetryPolicy.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n28 + i += n32 } if m.RequestMirrorPolicy != nil { dAtA[i] = 0x52 i++ i = encodeVarintRoute(dAtA, i, uint64(m.RequestMirrorPolicy.Size())) - n29, err := m.RequestMirrorPolicy.MarshalTo(dAtA[i:]) + n33, err := m.RequestMirrorPolicy.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n29 + i += n33 } if m.Priority != 0 { dAtA[i] = 0x58 @@ -7574,11 +7847,11 @@ func (m *RouteAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x72 i++ i = encodeVarintRoute(dAtA, i, uint64(m.IncludeVhRateLimits.Size())) - n30, err := m.IncludeVhRateLimits.MarshalTo(dAtA[i:]) + n34, err := m.IncludeVhRateLimits.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n30 + i += n34 } if len(m.HashPolicy) > 0 { for _, msg := range m.HashPolicy { @@ -7598,11 +7871,11 @@ func (m *RouteAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintRoute(dAtA, i, uint64(m.Cors.Size())) - n31, err := m.Cors.MarshalTo(dAtA[i:]) + n35, err := m.Cors.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n31 + i += n35 } if len(m.ResponseHeadersToAdd) > 0 { for _, msg := range m.ResponseHeadersToAdd { @@ -7648,11 +7921,11 @@ func (m *RouteAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.MaxGrpcTimeout))) - n32, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.MaxGrpcTimeout, dAtA[i:]) + n36, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.MaxGrpcTimeout, dAtA[i:]) if err != nil { return 0, err } - i += n32 + i += n36 } if m.IdleTimeout != nil { dAtA[i] = 0xc2 @@ -7660,264 +7933,32 @@ func (m *RouteAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.IdleTimeout))) - n33, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.IdleTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n33 - } - if len(m.UpgradeConfigs) > 0 { - for _, msg := range m.UpgradeConfigs { - dAtA[i] = 0xca - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteAction_Cluster) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Cluster))) - i += copy(dAtA[i:], m.Cluster) - return i, nil -} -func (m *RouteAction_ClusterHeader) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.ClusterHeader))) - i += copy(dAtA[i:], m.ClusterHeader) - return i, nil -} -func (m *RouteAction_WeightedClusters) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.WeightedClusters != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.WeightedClusters.Size())) - n34, err := m.WeightedClusters.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n34 - } - return i, nil -} -func (m *RouteAction_HostRewrite) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x32 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.HostRewrite))) - i += copy(dAtA[i:], m.HostRewrite) - return i, nil -} -func (m *RouteAction_AutoHostRewrite) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.AutoHostRewrite != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.AutoHostRewrite.Size())) - n35, err := m.AutoHostRewrite.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n35 - } - return i, nil -} -func (m *RouteAction_RetryPolicy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteAction_RetryPolicy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.RetryOn) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.RetryOn))) - i += copy(dAtA[i:], m.RetryOn) - } - if m.NumRetries != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.NumRetries.Size())) - n36, err := m.NumRetries.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n36 - } - if m.PerTryTimeout != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.PerTryTimeout))) - n37, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.PerTryTimeout, dAtA[i:]) + n37, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.IdleTimeout, dAtA[i:]) if err != nil { return 0, err } i += n37 - } - if m.RetryPriority != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RetryPriority.Size())) - n38, err := m.RetryPriority.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n38 - } - if len(m.RetryHostPredicate) > 0 { - for _, msg := range m.RetryHostPredicate { - dAtA[i] = 0x2a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.HostSelectionRetryMaxAttempts != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.HostSelectionRetryMaxAttempts)) - } - if len(m.RetriableStatusCodes) > 0 { - dAtA40 := make([]byte, len(m.RetriableStatusCodes)*10) - var j39 int - for _, num := range m.RetriableStatusCodes { - for num >= 1<<7 { - dAtA40[j39] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j39++ - } - dAtA40[j39] = uint8(num) - j39++ - } - dAtA[i] = 0x3a - i++ - i = encodeVarintRoute(dAtA, i, uint64(j39)) - i += copy(dAtA[i:], dAtA40[:j39]) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteAction_RetryPolicy_RetryPriority) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteAction_RetryPolicy_RetryPriority) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ConfigType != nil { - nn41, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn41 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteAction_RetryPolicy_RetryPriority_Config) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Config != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Config.Size())) - n42, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n42 - } - return i, nil -} -func (m *RouteAction_RetryPolicy_RetryPriority_TypedConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.TypedConfig.Size())) - n43, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n43 - } - return i, nil -} -func (m *RouteAction_RetryPolicy_RetryHostPredicate) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteAction_RetryPolicy_RetryHostPredicate) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ConfigType != nil { - nn44, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if len(m.UpgradeConfigs) > 0 { + for _, msg := range m.UpgradeConfigs { + dAtA[i] = 0xca + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n } - i += nn44 + } + if m.InternalRedirectAction != 0 { + dAtA[i] = 0xd0 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.InternalRedirectAction)) } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -7925,31 +7966,55 @@ func (m *RouteAction_RetryPolicy_RetryHostPredicate) MarshalTo(dAtA []byte) (int return i, nil } -func (m *RouteAction_RetryPolicy_RetryHostPredicate_Config) MarshalTo(dAtA []byte) (int, error) { +func (m *RouteAction_Cluster) MarshalTo(dAtA []byte) (int, error) { i := 0 - if m.Config != nil { - dAtA[i] = 0x12 + dAtA[i] = 0xa + i++ + i = encodeVarintRoute(dAtA, i, uint64(len(m.Cluster))) + i += copy(dAtA[i:], m.Cluster) + return i, nil +} +func (m *RouteAction_ClusterHeader) MarshalTo(dAtA []byte) (int, error) { + i := 0 + dAtA[i] = 0x12 + i++ + i = encodeVarintRoute(dAtA, i, uint64(len(m.ClusterHeader))) + i += copy(dAtA[i:], m.ClusterHeader) + return i, nil +} +func (m *RouteAction_WeightedClusters) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.WeightedClusters != nil { + dAtA[i] = 0x1a i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Config.Size())) - n45, err := m.Config.MarshalTo(dAtA[i:]) + i = encodeVarintRoute(dAtA, i, uint64(m.WeightedClusters.Size())) + n38, err := m.WeightedClusters.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n45 + i += n38 } return i, nil } -func (m *RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig) MarshalTo(dAtA []byte) (int, error) { +func (m *RouteAction_HostRewrite) MarshalTo(dAtA []byte) (int, error) { i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x1a + dAtA[i] = 0x32 + i++ + i = encodeVarintRoute(dAtA, i, uint64(len(m.HostRewrite))) + i += copy(dAtA[i:], m.HostRewrite) + return i, nil +} +func (m *RouteAction_AutoHostRewrite) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.AutoHostRewrite != nil { + dAtA[i] = 0x3a i++ - i = encodeVarintRoute(dAtA, i, uint64(m.TypedConfig.Size())) - n46, err := m.TypedConfig.MarshalTo(dAtA[i:]) + i = encodeVarintRoute(dAtA, i, uint64(m.AutoHostRewrite.Size())) + n39, err := m.AutoHostRewrite.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n46 + i += n39 } return i, nil } @@ -7984,11 +8049,11 @@ func (m *RouteAction_RequestMirrorPolicy) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintRoute(dAtA, i, uint64(m.RuntimeFraction.Size())) - n47, err := m.RuntimeFraction.MarshalTo(dAtA[i:]) + n40, err := m.RuntimeFraction.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n47 + i += n40 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -8012,11 +8077,11 @@ func (m *RouteAction_HashPolicy) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.PolicySpecifier != nil { - nn48, err := m.PolicySpecifier.MarshalTo(dAtA[i:]) + nn41, err := m.PolicySpecifier.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn48 + i += nn41 } if m.Terminal { dAtA[i] = 0x20 @@ -8040,11 +8105,11 @@ func (m *RouteAction_HashPolicy_Header_) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintRoute(dAtA, i, uint64(m.Header.Size())) - n49, err := m.Header.MarshalTo(dAtA[i:]) + n42, err := m.Header.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n49 + i += n42 } return i, nil } @@ -8054,11 +8119,11 @@ func (m *RouteAction_HashPolicy_Cookie_) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(m.Cookie.Size())) - n50, err := m.Cookie.MarshalTo(dAtA[i:]) + n43, err := m.Cookie.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n50 + i += n43 } return i, nil } @@ -8068,11 +8133,11 @@ func (m *RouteAction_HashPolicy_ConnectionProperties_) MarshalTo(dAtA []byte) (i dAtA[i] = 0x1a i++ i = encodeVarintRoute(dAtA, i, uint64(m.ConnectionProperties.Size())) - n51, err := m.ConnectionProperties.MarshalTo(dAtA[i:]) + n44, err := m.ConnectionProperties.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n51 + i += n44 } return i, nil } @@ -8128,11 +8193,11 @@ func (m *RouteAction_HashPolicy_Cookie) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Ttl))) - n52, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Ttl, dAtA[i:]) + n45, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Ttl, dAtA[i:]) if err != nil { return 0, err } - i += n52 + i += n45 } if len(m.Path) > 0 { dAtA[i] = 0x1a @@ -8202,18 +8267,233 @@ func (m *RouteAction_UpgradeConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(m.Enabled.Size())) - n53, err := m.Enabled.MarshalTo(dAtA[i:]) + n46, err := m.Enabled.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n46 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *RetryPolicy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RetryPolicy) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.RetryOn) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintRoute(dAtA, i, uint64(len(m.RetryOn))) + i += copy(dAtA[i:], m.RetryOn) + } + if m.NumRetries != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.NumRetries.Size())) + n47, err := m.NumRetries.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n47 + } + if m.PerTryTimeout != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.PerTryTimeout))) + n48, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.PerTryTimeout, dAtA[i:]) + if err != nil { + return 0, err + } + i += n48 + } + if m.RetryPriority != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.RetryPriority.Size())) + n49, err := m.RetryPriority.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n49 + } + if len(m.RetryHostPredicate) > 0 { + for _, msg := range m.RetryHostPredicate { + dAtA[i] = 0x2a + i++ + i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.HostSelectionRetryMaxAttempts != 0 { + dAtA[i] = 0x30 + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.HostSelectionRetryMaxAttempts)) + } + if len(m.RetriableStatusCodes) > 0 { + dAtA51 := make([]byte, len(m.RetriableStatusCodes)*10) + var j50 int + for _, num := range m.RetriableStatusCodes { + for num >= 1<<7 { + dAtA51[j50] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j50++ + } + dAtA51[j50] = uint8(num) + j50++ + } + dAtA[i] = 0x3a + i++ + i = encodeVarintRoute(dAtA, i, uint64(j50)) + i += copy(dAtA[i:], dAtA51[:j50]) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *RetryPolicy_RetryPriority) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RetryPolicy_RetryPriority) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + } + if m.ConfigType != nil { + nn52, err := m.ConfigType.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += nn52 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *RetryPolicy_RetryPriority_Config) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Config != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.Config.Size())) + n53, err := m.Config.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n53 } + return i, nil +} +func (m *RetryPolicy_RetryPriority_TypedConfig) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.TypedConfig != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.TypedConfig.Size())) + n54, err := m.TypedConfig.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n54 + } + return i, nil +} +func (m *RetryPolicy_RetryHostPredicate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RetryPolicy_RetryHostPredicate) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + } + if m.ConfigType != nil { + nn55, err := m.ConfigType.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += nn55 + } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } return i, nil } +func (m *RetryPolicy_RetryHostPredicate_Config) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Config != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.Config.Size())) + n56, err := m.Config.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n56 + } + return i, nil +} +func (m *RetryPolicy_RetryHostPredicate_TypedConfig) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.TypedConfig != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintRoute(dAtA, i, uint64(m.TypedConfig.Size())) + n57, err := m.TypedConfig.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n57 + } + return i, nil +} func (m *RedirectAction) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -8236,11 +8516,11 @@ func (m *RedirectAction) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.HostRedirect) } if m.PathRewriteSpecifier != nil { - nn54, err := m.PathRewriteSpecifier.MarshalTo(dAtA[i:]) + nn58, err := m.PathRewriteSpecifier.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn54 + i += nn58 } if m.ResponseCode != 0 { dAtA[i] = 0x18 @@ -8248,11 +8528,11 @@ func (m *RedirectAction) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintRoute(dAtA, i, uint64(m.ResponseCode)) } if m.SchemeRewriteSpecifier != nil { - nn55, err := m.SchemeRewriteSpecifier.MarshalTo(dAtA[i:]) + nn59, err := m.SchemeRewriteSpecifier.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn55 + i += nn59 } if m.StripQuery { dAtA[i] = 0x30 @@ -8335,11 +8615,11 @@ func (m *DirectResponseAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(m.Body.Size())) - n56, err := m.Body.MarshalTo(dAtA[i:]) + n60, err := m.Body.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n56 + i += n60 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -8431,11 +8711,11 @@ func (m *RateLimit) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintRoute(dAtA, i, uint64(m.Stage.Size())) - n57, err := m.Stage.MarshalTo(dAtA[i:]) + n61, err := m.Stage.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n57 + i += n61 } if len(m.DisableKey) > 0 { dAtA[i] = 0x12 @@ -8477,11 +8757,11 @@ func (m *RateLimit_Action) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.ActionSpecifier != nil { - nn58, err := m.ActionSpecifier.MarshalTo(dAtA[i:]) + nn62, err := m.ActionSpecifier.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn58 + i += nn62 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -8495,11 +8775,11 @@ func (m *RateLimit_Action_SourceCluster_) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintRoute(dAtA, i, uint64(m.SourceCluster.Size())) - n59, err := m.SourceCluster.MarshalTo(dAtA[i:]) + n63, err := m.SourceCluster.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n59 + i += n63 } return i, nil } @@ -8509,11 +8789,11 @@ func (m *RateLimit_Action_DestinationCluster_) MarshalTo(dAtA []byte) (int, erro dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(m.DestinationCluster.Size())) - n60, err := m.DestinationCluster.MarshalTo(dAtA[i:]) + n64, err := m.DestinationCluster.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n60 + i += n64 } return i, nil } @@ -8523,11 +8803,11 @@ func (m *RateLimit_Action_RequestHeaders_) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintRoute(dAtA, i, uint64(m.RequestHeaders.Size())) - n61, err := m.RequestHeaders.MarshalTo(dAtA[i:]) + n65, err := m.RequestHeaders.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n61 + i += n65 } return i, nil } @@ -8537,11 +8817,11 @@ func (m *RateLimit_Action_RemoteAddress_) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintRoute(dAtA, i, uint64(m.RemoteAddress.Size())) - n62, err := m.RemoteAddress.MarshalTo(dAtA[i:]) + n66, err := m.RemoteAddress.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n62 + i += n66 } return i, nil } @@ -8551,11 +8831,11 @@ func (m *RateLimit_Action_GenericKey_) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintRoute(dAtA, i, uint64(m.GenericKey.Size())) - n63, err := m.GenericKey.MarshalTo(dAtA[i:]) + n67, err := m.GenericKey.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n63 + i += n67 } return i, nil } @@ -8565,11 +8845,11 @@ func (m *RateLimit_Action_HeaderValueMatch_) MarshalTo(dAtA []byte) (int, error) dAtA[i] = 0x32 i++ i = encodeVarintRoute(dAtA, i, uint64(m.HeaderValueMatch.Size())) - n64, err := m.HeaderValueMatch.MarshalTo(dAtA[i:]) + n68, err := m.HeaderValueMatch.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n64 + i += n68 } return i, nil } @@ -8721,11 +9001,11 @@ func (m *RateLimit_Action_HeaderValueMatch) MarshalTo(dAtA []byte) (int, error) dAtA[i] = 0x12 i++ i = encodeVarintRoute(dAtA, i, uint64(m.ExpectMatch.Size())) - n65, err := m.ExpectMatch.MarshalTo(dAtA[i:]) + n69, err := m.ExpectMatch.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n65 + i += n69 } if len(m.Headers) > 0 { for _, msg := range m.Headers { @@ -8767,11 +9047,11 @@ func (m *HeaderMatcher) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.Name) } if m.HeaderMatchSpecifier != nil { - nn66, err := m.HeaderMatchSpecifier.MarshalTo(dAtA[i:]) + nn70, err := m.HeaderMatchSpecifier.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn66 + i += nn70 } if m.InvertMatch { dAtA[i] = 0x40 @@ -8811,11 +9091,11 @@ func (m *HeaderMatcher_RangeMatch) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintRoute(dAtA, i, uint64(m.RangeMatch.Size())) - n67, err := m.RangeMatch.MarshalTo(dAtA[i:]) + n71, err := m.RangeMatch.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n67 + i += n71 } return i, nil } @@ -8878,11 +9158,11 @@ func (m *QueryParameterMatcher) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintRoute(dAtA, i, uint64(m.Regex.Size())) - n68, err := m.Regex.MarshalTo(dAtA[i:]) + n72, err := m.Regex.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n68 + i += n72 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -8993,6 +9273,10 @@ func (m *VirtualHost) Size() (n int) { n += mapEntrySize + 1 + sovRoute(uint64(mapEntrySize)) } } + if m.RetryPolicy != nil { + l = m.RetryPolicy.Size() + n += 2 + l + sovRoute(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -9323,9 +9607,8 @@ func (m *CorsPolicy) Size() (n int) { l = m.AllowCredentials.Size() n += 1 + l + sovRoute(uint64(l)) } - if m.Enabled != nil { - l = m.Enabled.Size() - n += 1 + l + sovRoute(uint64(l)) + if m.EnabledSpecifier != nil { + n += m.EnabledSpecifier.Size() } if len(m.AllowOriginRegex) > 0 { for _, s := range m.AllowOriginRegex { @@ -9333,12 +9616,40 @@ func (m *CorsPolicy) Size() (n int) { n += 1 + l + sovRoute(uint64(l)) } } + if m.ShadowEnabled != nil { + l = m.ShadowEnabled.Size() + n += 1 + l + sovRoute(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } +func (m *CorsPolicy_Enabled) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Enabled != nil { + l = m.Enabled.Size() + n += 1 + l + sovRoute(uint64(l)) + } + return n +} +func (m *CorsPolicy_FilterEnabled) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.FilterEnabled != nil { + l = m.FilterEnabled.Size() + n += 1 + l + sovRoute(uint64(l)) + } + return n +} func (m *RouteAction) Size() (n int) { if m == nil { return 0 @@ -9429,6 +9740,9 @@ func (m *RouteAction) Size() (n int) { n += 2 + l + sovRoute(uint64(l)) } } + if m.InternalRedirectAction != 0 { + n += 2 + sovRoute(uint64(m.InternalRedirectAction)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -9489,62 +9803,41 @@ func (m *RouteAction_AutoHostRewrite) Size() (n int) { } return n } -func (m *RouteAction_RetryPolicy) Size() (n int) { +func (m *RouteAction_RequestMirrorPolicy) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.RetryOn) + l = len(m.Cluster) if l > 0 { n += 1 + l + sovRoute(uint64(l)) } - if m.NumRetries != nil { - l = m.NumRetries.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.PerTryTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.PerTryTimeout) + l = len(m.RuntimeKey) + if l > 0 { n += 1 + l + sovRoute(uint64(l)) } - if m.RetryPriority != nil { - l = m.RetryPriority.Size() + if m.RuntimeFraction != nil { + l = m.RuntimeFraction.Size() n += 1 + l + sovRoute(uint64(l)) } - if len(m.RetryHostPredicate) > 0 { - for _, e := range m.RetryHostPredicate { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.HostSelectionRetryMaxAttempts != 0 { - n += 1 + sovRoute(uint64(m.HostSelectionRetryMaxAttempts)) - } - if len(m.RetriableStatusCodes) > 0 { - l = 0 - for _, e := range m.RetriableStatusCodes { - l += sovRoute(uint64(e)) - } - n += 1 + sovRoute(uint64(l)) + l - } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } -func (m *RouteAction_RetryPolicy_RetryPriority) Size() (n int) { +func (m *RouteAction_HashPolicy) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) + if m.PolicySpecifier != nil { + n += m.PolicySpecifier.Size() } - if m.ConfigType != nil { - n += m.ConfigType.Size() + if m.Terminal { + n += 2 } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) @@ -9552,42 +9845,51 @@ func (m *RouteAction_RetryPolicy_RetryPriority) Size() (n int) { return n } -func (m *RouteAction_RetryPolicy_RetryPriority_Config) Size() (n int) { +func (m *RouteAction_HashPolicy_Header_) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Config != nil { - l = m.Config.Size() + if m.Header != nil { + l = m.Header.Size() n += 1 + l + sovRoute(uint64(l)) } return n } -func (m *RouteAction_RetryPolicy_RetryPriority_TypedConfig) Size() (n int) { +func (m *RouteAction_HashPolicy_Cookie_) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() + if m.Cookie != nil { + l = m.Cookie.Size() n += 1 + l + sovRoute(uint64(l)) } return n } -func (m *RouteAction_RetryPolicy_RetryHostPredicate) Size() (n int) { +func (m *RouteAction_HashPolicy_ConnectionProperties_) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Name) - if l > 0 { + if m.ConnectionProperties != nil { + l = m.ConnectionProperties.Size() n += 1 + l + sovRoute(uint64(l)) } - if m.ConfigType != nil { - n += m.ConfigType.Size() + return n +} +func (m *RouteAction_HashPolicy_Header) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HeaderName) + if l > 0 { + n += 1 + l + sovRoute(uint64(l)) } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) @@ -9595,46 +9897,57 @@ func (m *RouteAction_RetryPolicy_RetryHostPredicate) Size() (n int) { return n } -func (m *RouteAction_RetryPolicy_RetryHostPredicate_Config) Size() (n int) { +func (m *RouteAction_HashPolicy_Cookie) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Config != nil { - l = m.Config.Size() + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRoute(uint64(l)) + } + if m.Ttl != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Ttl) n += 1 + l + sovRoute(uint64(l)) } + l = len(m.Path) + if l > 0 { + n += 1 + l + sovRoute(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } return n } -func (m *RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig) Size() (n int) { + +func (m *RouteAction_HashPolicy_ConnectionProperties) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovRoute(uint64(l)) + if m.SourceIp { + n += 2 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) } return n } -func (m *RouteAction_RequestMirrorPolicy) Size() (n int) { + +func (m *RouteAction_UpgradeConfig) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Cluster) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.RuntimeKey) + l = len(m.UpgradeType) if l > 0 { n += 1 + l + sovRoute(uint64(l)) } - if m.RuntimeFraction != nil { - l = m.RuntimeFraction.Size() + if m.Enabled != nil { + l = m.Enabled.Size() n += 1 + l + sovRoute(uint64(l)) } if m.XXX_unrecognized != nil { @@ -9643,17 +9956,43 @@ func (m *RouteAction_RequestMirrorPolicy) Size() (n int) { return n } -func (m *RouteAction_HashPolicy) Size() (n int) { +func (m *RetryPolicy) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.PolicySpecifier != nil { - n += m.PolicySpecifier.Size() + l = len(m.RetryOn) + if l > 0 { + n += 1 + l + sovRoute(uint64(l)) } - if m.Terminal { - n += 2 + if m.NumRetries != nil { + l = m.NumRetries.Size() + n += 1 + l + sovRoute(uint64(l)) + } + if m.PerTryTimeout != nil { + l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.PerTryTimeout) + n += 1 + l + sovRoute(uint64(l)) + } + if m.RetryPriority != nil { + l = m.RetryPriority.Size() + n += 1 + l + sovRoute(uint64(l)) + } + if len(m.RetryHostPredicate) > 0 { + for _, e := range m.RetryHostPredicate { + l = e.Size() + n += 1 + l + sovRoute(uint64(l)) + } + } + if m.HostSelectionRetryMaxAttempts != 0 { + n += 1 + sovRoute(uint64(m.HostSelectionRetryMaxAttempts)) + } + if len(m.RetriableStatusCodes) > 0 { + l = 0 + for _, e := range m.RetriableStatusCodes { + l += sovRoute(uint64(e)) + } + n += 1 + sovRoute(uint64(l)) + l } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) @@ -9661,59 +10000,50 @@ func (m *RouteAction_HashPolicy) Size() (n int) { return n } -func (m *RouteAction_HashPolicy_Header_) Size() (n int) { +func (m *RetryPolicy_RetryPriority) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Header != nil { - l = m.Header.Size() + l = len(m.Name) + if l > 0 { n += 1 + l + sovRoute(uint64(l)) } - return n -} -func (m *RouteAction_HashPolicy_Cookie_) Size() (n int) { - if m == nil { - return 0 + if m.ConfigType != nil { + n += m.ConfigType.Size() } - var l int - _ = l - if m.Cookie != nil { - l = m.Cookie.Size() - n += 1 + l + sovRoute(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) } return n } -func (m *RouteAction_HashPolicy_ConnectionProperties_) Size() (n int) { + +func (m *RetryPolicy_RetryPriority_Config) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.ConnectionProperties != nil { - l = m.ConnectionProperties.Size() + if m.Config != nil { + l = m.Config.Size() n += 1 + l + sovRoute(uint64(l)) } return n } -func (m *RouteAction_HashPolicy_Header) Size() (n int) { +func (m *RetryPolicy_RetryPriority_TypedConfig) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.HeaderName) - if l > 0 { + if m.TypedConfig != nil { + l = m.TypedConfig.Size() n += 1 + l + sovRoute(uint64(l)) } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } return n } - -func (m *RouteAction_HashPolicy_Cookie) Size() (n int) { +func (m *RetryPolicy_RetryHostPredicate) Size() (n int) { if m == nil { return 0 } @@ -9723,13 +10053,8 @@ func (m *RouteAction_HashPolicy_Cookie) Size() (n int) { if l > 0 { n += 1 + l + sovRoute(uint64(l)) } - if m.Ttl != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Ttl) - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.Path) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) + if m.ConfigType != nil { + n += m.ConfigType.Size() } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) @@ -9737,41 +10062,30 @@ func (m *RouteAction_HashPolicy_Cookie) Size() (n int) { return n } -func (m *RouteAction_HashPolicy_ConnectionProperties) Size() (n int) { +func (m *RetryPolicy_RetryHostPredicate_Config) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.SourceIp { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + if m.Config != nil { + l = m.Config.Size() + n += 1 + l + sovRoute(uint64(l)) } return n } - -func (m *RouteAction_UpgradeConfig) Size() (n int) { +func (m *RetryPolicy_RetryHostPredicate_TypedConfig) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.UpgradeType) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.Enabled != nil { - l = m.Enabled.Size() + if m.TypedConfig != nil { + l = m.TypedConfig.Size() n += 1 + l + sovRoute(uint64(l)) } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } return n } - func (m *RedirectAction) Size() (n int) { if m == nil { return 0 @@ -10847,7 +11161,40 @@ func (m *VirtualHost) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.TypedPerFilterConfig[mapkey] = mapvalue + m.TypedPerFilterConfig[mapkey] = mapvalue + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RetryPolicy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRoute + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RetryPolicy == nil { + m.RetryPolicy = &RetryPolicy{} + } + if err := m.RetryPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -12719,12 +13066,11 @@ func (m *CorsPolicy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Enabled == nil { - m.Enabled = &types.BoolValue{} - } - if err := m.Enabled.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := &types.BoolValue{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.EnabledSpecifier = &CorsPolicy_Enabled{v} iNdEx = postIndex case 8: if wireType != 2 { @@ -12755,6 +13101,71 @@ func (m *CorsPolicy) Unmarshal(dAtA []byte) error { } m.AllowOriginRegex = append(m.AllowOriginRegex, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FilterEnabled", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRoute + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &core.RuntimeFractionalPercent{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.EnabledSpecifier = &CorsPolicy_FilterEnabled{v} + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShadowEnabled", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRoute + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ShadowEnabled == nil { + m.ShadowEnabled = &core.RuntimeFractionalPercent{} + } + if err := m.ShadowEnabled.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRoute(dAtA[iNdEx:]) @@ -13079,7 +13490,7 @@ func (m *RouteAction) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.RetryPolicy == nil { - m.RetryPolicy = &RouteAction_RetryPolicy{} + m.RetryPolicy = &RetryPolicy{} } if err := m.RetryPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -13379,7 +13790,174 @@ func (m *RouteAction) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field MaxGrpcTimeout", wireType) } - var msglen int + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRoute + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxGrpcTimeout == nil { + m.MaxGrpcTimeout = new(time.Duration) + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.MaxGrpcTimeout, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IdleTimeout", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRoute + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.IdleTimeout == nil { + m.IdleTimeout = new(time.Duration) + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.IdleTimeout, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 25: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpgradeConfigs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRoute + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UpgradeConfigs = append(m.UpgradeConfigs, &RouteAction_UpgradeConfig{}) + if err := m.UpgradeConfigs[len(m.UpgradeConfigs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 26: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InternalRedirectAction", wireType) + } + m.InternalRedirectAction = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.InternalRedirectAction |= (RouteAction_InternalRedirectAction(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRoute(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRoute + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RouteAction_RequestMirrorPolicy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RequestMirrorPolicy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RequestMirrorPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) + } + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -13389,30 +13967,26 @@ func (m *RouteAction) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthRoute } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - if m.MaxGrpcTimeout == nil { - m.MaxGrpcTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.MaxGrpcTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Cluster = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 24: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IdleTimeout", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeKey", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -13422,28 +13996,24 @@ func (m *RouteAction) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthRoute } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - if m.IdleTimeout == nil { - m.IdleTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.IdleTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.RuntimeKey = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 25: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpgradeConfigs", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeFraction", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -13467,8 +14037,10 @@ func (m *RouteAction) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.UpgradeConfigs = append(m.UpgradeConfigs, &RouteAction_UpgradeConfig{}) - if err := m.UpgradeConfigs[len(m.UpgradeConfigs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.RuntimeFraction == nil { + m.RuntimeFraction = &core.RuntimeFractionalPercent{} + } + if err := m.RuntimeFraction.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -13494,7 +14066,7 @@ func (m *RouteAction) Unmarshal(dAtA []byte) error { } return nil } -func (m *RouteAction_RetryPolicy) Unmarshal(dAtA []byte) error { +func (m *RouteAction_HashPolicy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -13517,44 +14089,15 @@ func (m *RouteAction_RetryPolicy) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RetryPolicy: wiretype end group for non-group") + return fmt.Errorf("proto: HashPolicy: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RetryPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: HashPolicy: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RetryOn", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RetryOn = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NumRetries", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -13578,16 +14121,15 @@ func (m *RouteAction_RetryPolicy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.NumRetries == nil { - m.NumRetries = &types.UInt32Value{} - } - if err := m.NumRetries.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := &RouteAction_HashPolicy_Header{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.PolicySpecifier = &RouteAction_HashPolicy_Header_{v} iNdEx = postIndex - case 3: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PerTryTimeout", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Cookie", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -13611,16 +14153,15 @@ func (m *RouteAction_RetryPolicy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.PerTryTimeout == nil { - m.PerTryTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.PerTryTimeout, dAtA[iNdEx:postIndex]); err != nil { + v := &RouteAction_HashPolicy_Cookie{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.PolicySpecifier = &RouteAction_HashPolicy_Cookie_{v} iNdEx = postIndex - case 4: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RetryPriority", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionProperties", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -13644,18 +14185,17 @@ func (m *RouteAction_RetryPolicy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.RetryPriority == nil { - m.RetryPriority = &RouteAction_RetryPolicy_RetryPriority{} - } - if err := m.RetryPriority.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := &RouteAction_HashPolicy_ConnectionProperties{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.PolicySpecifier = &RouteAction_HashPolicy_ConnectionProperties_{v} iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RetryHostPredicate", wireType) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Terminal", wireType) } - var msglen int + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -13665,28 +14205,68 @@ func (m *RouteAction_RetryPolicy) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + v |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + m.Terminal = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipRoute(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { return ErrInvalidLengthRoute } - postIndex := iNdEx + msglen - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.RetryHostPredicate = append(m.RetryHostPredicate, &RouteAction_RetryPolicy_RetryHostPredicate{}) - if err := m.RetryHostPredicate[len(m.RetryHostPredicate)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RouteAction_HashPolicy_Header) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HostSelectionRetryMaxAttempts", wireType) + if iNdEx >= l { + return io.ErrUnexpectedEOF } - m.HostSelectionRetryMaxAttempts = 0 + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Header: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Header: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HeaderName", wireType) + } + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -13696,84 +14276,21 @@ func (m *RouteAction_RetryPolicy) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.HostSelectionRetryMaxAttempts |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType == 0 { - var v uint32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.RetriableStatusCodes = append(m.RetriableStatusCodes, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + packedLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - var count int - for _, integer := range dAtA { - if integer < 128 { - count++ - } - } - elementCount = count - if elementCount != 0 && len(m.RetriableStatusCodes) == 0 { - m.RetriableStatusCodes = make([]uint32, 0, elementCount) - } - for iNdEx < postIndex { - var v uint32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.RetriableStatusCodes = append(m.RetriableStatusCodes, v) + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field RetriableStatusCodes", wireType) } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRoute + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HeaderName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRoute(dAtA[iNdEx:]) @@ -13796,7 +14313,7 @@ func (m *RouteAction_RetryPolicy) Unmarshal(dAtA []byte) error { } return nil } -func (m *RouteAction_RetryPolicy_RetryPriority) Unmarshal(dAtA []byte) error { +func (m *RouteAction_HashPolicy_Cookie) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -13819,10 +14336,10 @@ func (m *RouteAction_RetryPolicy_RetryPriority) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RetryPriority: wiretype end group for non-group") + return fmt.Errorf("proto: Cookie: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RetryPriority: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: Cookie: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -13856,7 +14373,7 @@ func (m *RouteAction_RetryPolicy_RetryPriority) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Ttl", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -13880,17 +14397,18 @@ func (m *RouteAction_RetryPolicy_RetryPriority) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Ttl == nil { + m.Ttl = new(time.Duration) + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.Ttl, dAtA[iNdEx:postIndex]); err != nil { return err } - m.ConfigType = &RouteAction_RetryPolicy_RetryPriority_Config{v} iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -13900,23 +14418,20 @@ func (m *RouteAction_RetryPolicy_RetryPriority) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthRoute } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &RouteAction_RetryPolicy_RetryPriority_TypedConfig{v} + m.Path = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -13940,7 +14455,7 @@ func (m *RouteAction_RetryPolicy_RetryPriority) Unmarshal(dAtA []byte) error { } return nil } -func (m *RouteAction_RetryPolicy_RetryHostPredicate) Unmarshal(dAtA []byte) error { +func (m *RouteAction_HashPolicy_ConnectionProperties) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -13963,78 +14478,17 @@ func (m *RouteAction_RetryPolicy_RetryHostPredicate) Unmarshal(dAtA []byte) erro fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RetryHostPredicate: wiretype end group for non-group") + return fmt.Errorf("proto: ConnectionProperties: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RetryHostPredicate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ConnectionProperties: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &RouteAction_RetryPolicy_RetryHostPredicate_Config{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceIp", wireType) } - var msglen int + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -14044,24 +14498,12 @@ func (m *RouteAction_RetryPolicy_RetryHostPredicate) Unmarshal(dAtA []byte) erro } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + v |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig{v} - iNdEx = postIndex + m.SourceIp = bool(v != 0) default: iNdEx = preIndex skippy, err := skipRoute(dAtA[iNdEx:]) @@ -14084,7 +14526,7 @@ func (m *RouteAction_RetryPolicy_RetryHostPredicate) Unmarshal(dAtA []byte) erro } return nil } -func (m *RouteAction_RequestMirrorPolicy) Unmarshal(dAtA []byte) error { +func (m *RouteAction_UpgradeConfig) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -14107,15 +14549,15 @@ func (m *RouteAction_RequestMirrorPolicy) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RequestMirrorPolicy: wiretype end group for non-group") + return fmt.Errorf("proto: UpgradeConfig: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RequestMirrorPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: UpgradeConfig: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UpgradeType", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -14140,40 +14582,11 @@ func (m *RouteAction_RequestMirrorPolicy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cluster = string(dAtA[iNdEx:postIndex]) + m.UpgradeType = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeKey", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RuntimeKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeFraction", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -14197,10 +14610,10 @@ func (m *RouteAction_RequestMirrorPolicy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.RuntimeFraction == nil { - m.RuntimeFraction = &core.RuntimeFractionalPercent{} + if m.Enabled == nil { + m.Enabled = &types.BoolValue{} } - if err := m.RuntimeFraction.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Enabled.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -14226,7 +14639,7 @@ func (m *RouteAction_RequestMirrorPolicy) Unmarshal(dAtA []byte) error { } return nil } -func (m *RouteAction_HashPolicy) Unmarshal(dAtA []byte) error { +func (m *RetryPolicy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -14249,17 +14662,17 @@ func (m *RouteAction_HashPolicy) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: HashPolicy: wiretype end group for non-group") + return fmt.Errorf("proto: RetryPolicy: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: HashPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RetryPolicy: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RetryOn", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -14269,27 +14682,24 @@ func (m *RouteAction_HashPolicy) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthRoute } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - v := &RouteAction_HashPolicy_Header{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.PolicySpecifier = &RouteAction_HashPolicy_Header_{v} + m.RetryOn = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cookie", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NumRetries", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -14313,15 +14723,16 @@ func (m *RouteAction_HashPolicy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - v := &RouteAction_HashPolicy_Cookie{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.NumRetries == nil { + m.NumRetries = &types.UInt32Value{} + } + if err := m.NumRetries.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - m.PolicySpecifier = &RouteAction_HashPolicy_Cookie_{v} iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConnectionProperties", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PerTryTimeout", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -14345,17 +14756,18 @@ func (m *RouteAction_HashPolicy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - v := &RouteAction_HashPolicy_ConnectionProperties{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.PerTryTimeout == nil { + m.PerTryTimeout = new(time.Duration) + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.PerTryTimeout, dAtA[iNdEx:postIndex]); err != nil { return err } - m.PolicySpecifier = &RouteAction_HashPolicy_ConnectionProperties_{v} iNdEx = postIndex case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Terminal", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RetryPriority", wireType) } - var v int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -14365,68 +14777,30 @@ func (m *RouteAction_HashPolicy) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - m.Terminal = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if msglen < 0 { return ErrInvalidLengthRoute } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteAction_HashPolicy_Header) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { + postIndex := iNdEx + msglen + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + if m.RetryPriority == nil { + m.RetryPriority = &RetryPolicy_RetryPriority{} } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Header: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Header: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + if err := m.RetryPriority.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HeaderName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RetryHostPredicate", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -14436,21 +14810,115 @@ func (m *RouteAction_HashPolicy_Header) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthRoute } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.HeaderName = string(dAtA[iNdEx:postIndex]) + m.RetryHostPredicate = append(m.RetryHostPredicate, &RetryPolicy_RetryHostPredicate{}) + if err := m.RetryHostPredicate[len(m.RetryHostPredicate)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HostSelectionRetryMaxAttempts", wireType) + } + m.HostSelectionRetryMaxAttempts = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HostSelectionRetryMaxAttempts |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType == 0 { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (uint32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.RetriableStatusCodes = append(m.RetriableStatusCodes, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthRoute + } + postIndex := iNdEx + packedLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.RetriableStatusCodes) == 0 { + m.RetriableStatusCodes = make([]uint32, 0, elementCount) + } + for iNdEx < postIndex { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (uint32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.RetriableStatusCodes = append(m.RetriableStatusCodes, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field RetriableStatusCodes", wireType) + } default: iNdEx = preIndex skippy, err := skipRoute(dAtA[iNdEx:]) @@ -14473,7 +14941,7 @@ func (m *RouteAction_HashPolicy_Header) Unmarshal(dAtA []byte) error { } return nil } -func (m *RouteAction_HashPolicy_Cookie) Unmarshal(dAtA []byte) error { +func (m *RetryPolicy_RetryPriority) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -14496,10 +14964,10 @@ func (m *RouteAction_HashPolicy_Cookie) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Cookie: wiretype end group for non-group") + return fmt.Errorf("proto: RetryPriority: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Cookie: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RetryPriority: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -14533,7 +15001,7 @@ func (m *RouteAction_HashPolicy_Cookie) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ttl", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -14557,18 +15025,17 @@ func (m *RouteAction_HashPolicy_Cookie) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Ttl == nil { - m.Ttl = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.Ttl, dAtA[iNdEx:postIndex]); err != nil { + v := &types.Struct{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.ConfigType = &RetryPolicy_RetryPriority_Config{v} iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -14578,20 +15045,23 @@ func (m *RouteAction_HashPolicy_Cookie) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthRoute } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Path = string(dAtA[iNdEx:postIndex]) + v := &types.Any{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.ConfigType = &RetryPolicy_RetryPriority_TypedConfig{v} iNdEx = postIndex default: iNdEx = preIndex @@ -14615,7 +15085,7 @@ func (m *RouteAction_HashPolicy_Cookie) Unmarshal(dAtA []byte) error { } return nil } -func (m *RouteAction_HashPolicy_ConnectionProperties) Unmarshal(dAtA []byte) error { +func (m *RetryPolicy_RetryHostPredicate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -14638,17 +15108,17 @@ func (m *RouteAction_HashPolicy_ConnectionProperties) Unmarshal(dAtA []byte) err fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ConnectionProperties: wiretype end group for non-group") + return fmt.Errorf("proto: RetryHostPredicate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ConnectionProperties: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RetryHostPredicate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceIp", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var v int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -14658,68 +15128,26 @@ func (m *RouteAction_HashPolicy_ConnectionProperties) Unmarshal(dAtA []byte) err } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + stringLen |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - m.SourceIp = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthRoute } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteAction_UpgradeConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { + postIndex := iNdEx + intStringLen + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UpgradeConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpgradeConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpgradeType", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRoute @@ -14729,24 +15157,27 @@ func (m *RouteAction_UpgradeConfig) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthRoute } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.UpgradeType = string(dAtA[iNdEx:postIndex]) + v := &types.Struct{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.ConfigType = &RetryPolicy_RetryHostPredicate_Config{v} iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -14770,12 +15201,11 @@ func (m *RouteAction_UpgradeConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Enabled == nil { - m.Enabled = &types.BoolValue{} - } - if err := m.Enabled.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := &types.Any{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.ConfigType = &RetryPolicy_RetryHostPredicate_TypedConfig{v} iNdEx = postIndex default: iNdEx = preIndex @@ -16746,220 +17176,230 @@ var ( ) func init() { - proto.RegisterFile("envoy/api/v2/route/route.proto", fileDescriptor_route_f42e89314c1fe613) -} - -var fileDescriptor_route_f42e89314c1fe613 = []byte{ - // 3366 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcb, 0x6f, 0x1b, 0xd7, - 0xd5, 0xd7, 0x90, 0x14, 0x1f, 0x67, 0x48, 0x6a, 0x74, 0x2d, 0x4b, 0x14, 0x1d, 0xdb, 0x32, 0x6d, - 0x7f, 0x51, 0xfc, 0x35, 0x54, 0x2c, 0xab, 0x75, 0x1c, 0xc3, 0x49, 0x45, 0x89, 0x36, 0x2d, 0xeb, - 0xd5, 0x2b, 0x59, 0xad, 0x13, 0xa4, 0x93, 0x31, 0x79, 0x45, 0x4e, 0x42, 0xce, 0x4c, 0xee, 0x5c, - 0xca, 0xd2, 0x2e, 0xcd, 0xaa, 0x68, 0x51, 0xa0, 0xcd, 0xa2, 0xe8, 0xbe, 0x9b, 0xa2, 0x0f, 0x20, - 0xbb, 0x06, 0x5d, 0x65, 0x99, 0x65, 0x96, 0xdd, 0xf4, 0x01, 0x03, 0x05, 0x9a, 0xbf, 0xa0, 0x5d, - 0x16, 0xf7, 0x31, 0x7c, 0x88, 0x43, 0x51, 0x0a, 0x82, 0xa0, 0x45, 0x36, 0xd2, 0xcc, 0xb9, 0xbf, - 0x73, 0xee, 0xfb, 0x77, 0x1e, 0x43, 0xb8, 0x44, 0x9c, 0x03, 0xf7, 0x68, 0xc1, 0xf2, 0xec, 0x85, - 0x83, 0xc5, 0x05, 0xea, 0xb6, 0x19, 0x91, 0x7f, 0x8b, 0x1e, 0x75, 0x99, 0x8b, 0x90, 0x68, 0x2f, - 0x5a, 0x9e, 0x5d, 0x3c, 0x58, 0x2c, 0x8a, 0x96, 0xfc, 0x0b, 0x7d, 0x3a, 0x55, 0x97, 0x92, 0x85, - 0xa7, 0x96, 0xaf, 0x34, 0xf2, 0xd3, 0xb2, 0x95, 0x1d, 0x79, 0x64, 0x81, 0x5a, 0x4e, 0x3d, 0x90, - 0xcf, 0xd6, 0x5d, 0xb7, 0xde, 0x24, 0x0b, 0xe2, 0xed, 0x69, 0x7b, 0x7f, 0xc1, 0x72, 0x8e, 0x54, - 0xd3, 0xa5, 0xe3, 0x4d, 0xb5, 0x36, 0xb5, 0x98, 0xed, 0x3a, 0xaa, 0xfd, 0x85, 0xe3, 0xed, 0x3e, - 0xa3, 0xed, 0x2a, 0x1b, 0xa6, 0xfd, 0x8c, 0x5a, 0x9e, 0x47, 0xa8, 0xaf, 0xda, 0x67, 0x0e, 0xac, - 0xa6, 0x5d, 0xb3, 0x18, 0x59, 0x08, 0x1e, 0x54, 0xc3, 0x54, 0xdd, 0xad, 0xbb, 0xe2, 0x71, 0x81, - 0x3f, 0x49, 0x69, 0xe1, 0x43, 0x00, 0x7d, 0xcf, 0xa6, 0xac, 0x6d, 0x35, 0x2b, 0xae, 0xcf, 0xd0, - 0x45, 0x88, 0x39, 0x56, 0x8b, 0xe4, 0xb4, 0x39, 0x6d, 0x3e, 0x55, 0x4a, 0xfd, 0xe9, 0x8b, 0x4f, - 0xa3, 0x31, 0x1a, 0x99, 0xd3, 0xb0, 0x10, 0xa3, 0x6b, 0x90, 0xa8, 0xb9, 0x2d, 0xcb, 0x76, 0xfc, - 0x5c, 0x64, 0x2e, 0x3a, 0x9f, 0x2a, 0x01, 0x47, 0x8c, 0x7f, 0xa4, 0x45, 0x92, 0x1a, 0x0e, 0x9a, - 0xd0, 0x6d, 0x88, 0x8b, 0xb5, 0xf3, 0x73, 0xd1, 0xb9, 0xe8, 0xbc, 0xbe, 0x38, 0x5b, 0x1c, 0x5c, - 0xd7, 0x22, 0xe6, 0x7f, 0x4b, 0xb1, 0xcf, 0xfe, 0x7a, 0x79, 0x0c, 0x2b, 0x38, 0xda, 0x01, 0x9d, - 0x92, 0xf7, 0xdb, 0x36, 0x25, 0x26, 0x6b, 0xfa, 0xb9, 0xd8, 0x9c, 0x36, 0x9f, 0x5d, 0x5c, 0x0c, - 0xd3, 0xee, 0x19, 0x73, 0x71, 0xb7, 0xe9, 0x63, 0xa9, 0xd5, 0x22, 0x0e, 0xdb, 0x3d, 0xf2, 0x08, - 0x06, 0x65, 0x66, 0xb7, 0xe9, 0xa3, 0x0d, 0x30, 0x0e, 0x24, 0xda, 0xac, 0x36, 0xdb, 0x3e, 0x23, - 0xd4, 0xcf, 0x8d, 0x8b, 0x71, 0x15, 0x4e, 0xb0, 0xbc, 0x22, 0xa1, 0x78, 0xe2, 0xa0, 0xef, 0xdd, - 0x47, 0xaf, 0x83, 0x4e, 0x2d, 0x46, 0xcc, 0xa6, 0xdd, 0xb2, 0x99, 0x9f, 0x8b, 0x0b, 0x4b, 0x17, - 0x43, 0x67, 0x68, 0x31, 0xb2, 0xce, 0x51, 0x18, 0x68, 0xf0, 0xe8, 0xa3, 0x7d, 0x98, 0xe6, 0x83, - 0x23, 0x3e, 0x33, 0x1b, 0xc4, 0xaa, 0x11, 0xea, 0x9b, 0xcc, 0x35, 0xad, 0x5a, 0x2d, 0x97, 0x10, - 0xa6, 0xae, 0xf5, 0x9b, 0xe2, 0x07, 0xae, 0x58, 0x11, 0xc0, 0x3d, 0xab, 0xd9, 0x26, 0x5b, 0x1e, - 0x3f, 0x2a, 0x25, 0x9d, 0xaf, 0x7b, 0xfc, 0x23, 0x2d, 0x6a, 0xfc, 0x33, 0x81, 0xcf, 0x29, 0x83, - 0x12, 0xe6, 0xef, 0xba, 0xcb, 0xb5, 0x1a, 0x5a, 0x84, 0x58, 0xd5, 0xa5, 0x7e, 0x2e, 0x39, 0xa7, - 0xcd, 0xeb, 0x8b, 0x97, 0xc2, 0x06, 0xb8, 0xe2, 0x52, 0x7f, 0xdb, 0x6d, 0xda, 0xd5, 0x23, 0x2c, - 0xb0, 0xa8, 0x01, 0x33, 0x94, 0xf8, 0x9e, 0xeb, 0xf8, 0xe4, 0xf8, 0xe0, 0xe0, 0xcb, 0x0e, 0x6e, - 0x2a, 0xb0, 0xd8, 0x37, 0xba, 0xbb, 0x90, 0x0f, 0xeb, 0x89, 0x92, 0x96, 0x7b, 0x40, 0x72, 0x3a, - 0x3f, 0x5b, 0x78, 0x66, 0x40, 0x13, 0x8b, 0x66, 0xf4, 0x0e, 0x4c, 0x7a, 0x84, 0x9a, 0xfb, 0x76, - 0x93, 0x11, 0x6a, 0x56, 0x5d, 0x67, 0xdf, 0xae, 0xe7, 0xd2, 0x62, 0x80, 0x4b, 0xa3, 0x0e, 0xcb, - 0x36, 0xa1, 0xf7, 0x85, 0xde, 0x8a, 0x50, 0x2b, 0x3b, 0x8c, 0x1e, 0xe1, 0x09, 0xaf, 0x5f, 0x8a, - 0xee, 0xc0, 0x6c, 0xc8, 0x26, 0xa9, 0xd1, 0x65, 0xc4, 0xe8, 0xa6, 0x8f, 0x2f, 0xba, 0x1a, 0xdc, - 0x32, 0x5c, 0xb4, 0x9d, 0x6a, 0xb3, 0x5d, 0x23, 0x66, 0x60, 0xc2, 0x62, 0x8c, 0xb4, 0x3c, 0x66, - 0x56, 0xdd, 0xb6, 0xc3, 0x72, 0xd9, 0x39, 0x6d, 0x3e, 0x89, 0xf3, 0x0a, 0x84, 0x25, 0x66, 0x59, - 0x42, 0x56, 0x38, 0x02, 0x79, 0x30, 0xc3, 0x09, 0xa5, 0x66, 0x0e, 0xce, 0x72, 0x42, 0xcc, 0xf2, - 0xce, 0xc8, 0x2b, 0xc1, 0xd5, 0x43, 0xa7, 0x3a, 0xc5, 0x42, 0x9a, 0xf2, 0x6f, 0xc1, 0x54, 0x18, - 0x1a, 0x19, 0x10, 0x7d, 0x8f, 0x1c, 0x49, 0x36, 0xc0, 0xfc, 0x11, 0xbd, 0x0c, 0xe3, 0x07, 0x7c, - 0xab, 0x73, 0x11, 0x71, 0xae, 0x66, 0x8a, 0x92, 0x8f, 0x8a, 0x01, 0x1f, 0x15, 0x77, 0x04, 0x5b, - 0x61, 0x89, 0x7a, 0x2d, 0xf2, 0xaa, 0x96, 0x7f, 0x1b, 0x66, 0x87, 0x8e, 0x27, 0xa4, 0x87, 0x1b, - 0xfd, 0x3d, 0x4c, 0x0d, 0xf4, 0xb0, 0xec, 0x1c, 0xf5, 0x98, 0x2f, 0xbc, 0x06, 0x68, 0x90, 0x01, - 0x50, 0x12, 0x62, 0x9b, 0x5b, 0x9b, 0x65, 0x63, 0x0c, 0x4d, 0x42, 0xa6, 0xfc, 0x83, 0xdd, 0x32, - 0xde, 0x5c, 0x5e, 0x37, 0xb7, 0x36, 0xd7, 0x9f, 0x18, 0x1a, 0x4a, 0x40, 0x74, 0x79, 0x7d, 0xdd, - 0x88, 0xac, 0xc5, 0x92, 0x29, 0x03, 0x0a, 0xff, 0x4e, 0xc2, 0xb8, 0xa0, 0x23, 0xb4, 0x0a, 0xe3, - 0x2d, 0x8b, 0x55, 0x1b, 0x62, 0x3c, 0x43, 0x6e, 0x8d, 0x40, 0x6e, 0x70, 0x54, 0x29, 0xcb, 0xd9, - 0x4b, 0x30, 0xe0, 0x4f, 0xb4, 0x88, 0xa1, 0x61, 0xa9, 0x8c, 0x6e, 0xc3, 0xb8, 0x80, 0xaa, 0x19, - 0x5c, 0x1e, 0x6a, 0x65, 0xb9, 0xca, 0xef, 0x4b, 0x65, 0x0c, 0x4b, 0x3c, 0xfa, 0x2e, 0x24, 0x29, - 0xa9, 0xd9, 0x94, 0x54, 0x59, 0x2e, 0x2a, 0x74, 0x43, 0x29, 0x0a, 0x2b, 0x4c, 0x47, 0xbd, 0xa3, - 0x85, 0x6e, 0x43, 0xb2, 0x45, 0x98, 0x55, 0xb3, 0x98, 0x25, 0xe8, 0x53, 0x5f, 0xbc, 0x10, 0x72, - 0x65, 0x37, 0x14, 0x04, 0x77, 0xc0, 0xe8, 0x2e, 0xa4, 0x6a, 0xa4, 0xea, 0x52, 0x8b, 0xb9, 0x34, - 0x37, 0x2e, 0x34, 0x43, 0x49, 0x6d, 0x35, 0x00, 0xe1, 0x2e, 0x1e, 0xed, 0xc0, 0x84, 0xec, 0xdf, - 0x0c, 0xae, 0x6c, 0x2e, 0x21, 0x4c, 0xcc, 0x87, 0x9a, 0x10, 0x50, 0xac, 0x90, 0x9d, 0x49, 0x64, - 0x6b, 0x7d, 0x72, 0xf4, 0x66, 0xd8, 0x2d, 0x4f, 0x8a, 0xf3, 0x5f, 0x1c, 0xba, 0xa2, 0xa7, 0xbc, - 0xdf, 0xc3, 0x49, 0x38, 0xf5, 0x95, 0x92, 0xf0, 0xff, 0x08, 0xa1, 0x9e, 0x48, 0x77, 0xe9, 0x13, - 0xe9, 0xee, 0xdd, 0xe1, 0x5c, 0x95, 0x11, 0x33, 0xbc, 0x35, 0x7c, 0xaf, 0xbe, 0x41, 0x2c, 0x55, - 0x9a, 0x80, 0xb8, 0x25, 0x4e, 0x3a, 0x1a, 0xff, 0xe4, 0x8b, 0x4f, 0xa3, 0xda, 0x5a, 0x2c, 0x19, - 0x37, 0x12, 0x85, 0x5f, 0xa6, 0x60, 0xe2, 0xfb, 0xc4, 0xae, 0x37, 0x18, 0xa9, 0xa9, 0x10, 0x03, - 0x3d, 0x81, 0x64, 0x27, 0x50, 0xd1, 0xc4, 0x1a, 0xde, 0x0c, 0x5b, 0xc3, 0x63, 0x6a, 0x45, 0xf5, - 0x5f, 0x8a, 0xfb, 0x02, 0xb3, 0x8e, 0x39, 0xf4, 0x2d, 0x40, 0xb4, 0xed, 0x30, 0xbb, 0x45, 0xcc, - 0xf7, 0xc8, 0x91, 0xe9, 0x51, 0xb2, 0x6f, 0x1f, 0x8a, 0x29, 0xa4, 0xb0, 0xa1, 0x5a, 0x1e, 0x91, - 0xa3, 0x6d, 0x21, 0x47, 0x6b, 0x90, 0x66, 0x2e, 0xb3, 0x9a, 0xe6, 0x33, 0x61, 0x53, 0x51, 0xd2, - 0x0b, 0x03, 0x53, 0x7d, 0xfc, 0xd0, 0x61, 0xb7, 0x16, 0xc5, 0x81, 0x55, 0x21, 0xe3, 0x8d, 0xc8, - 0xbc, 0x86, 0x75, 0xa1, 0x2c, 0xc7, 0x93, 0xff, 0x43, 0x02, 0x32, 0x7d, 0x23, 0x1c, 0x15, 0x6a, - 0x2e, 0x41, 0x5c, 0x75, 0x1b, 0x19, 0xdd, 0x2d, 0x56, 0x58, 0x54, 0x82, 0x6c, 0x40, 0x69, 0xa6, - 0x64, 0xf2, 0xe8, 0x68, 0x16, 0xcc, 0x04, 0x2a, 0x82, 0xd5, 0x4f, 0x20, 0x87, 0xd8, 0xd7, 0x45, - 0x0e, 0xe3, 0x5f, 0x27, 0x39, 0xc4, 0x4f, 0x26, 0x07, 0x3a, 0x9c, 0x87, 0xef, 0x9f, 0xf9, 0x5c, - 0x7e, 0x15, 0xf1, 0x57, 0xea, 0x44, 0x42, 0xfa, 0x50, 0x1b, 0xce, 0x48, 0x92, 0x73, 0x1f, 0x9d, - 0x7d, 0xd4, 0xdf, 0x20, 0xa6, 0x5a, 0x8b, 0x25, 0x13, 0x46, 0xb2, 0xf0, 0xf3, 0x18, 0x40, 0x37, - 0xd2, 0x41, 0x39, 0x88, 0x2b, 0xb2, 0x10, 0x96, 0x2b, 0x63, 0x58, 0xbd, 0xa3, 0x29, 0x88, 0x79, - 0x16, 0x6b, 0x48, 0x12, 0xa9, 0x8c, 0x61, 0xf1, 0x86, 0x0a, 0x30, 0x4e, 0x49, 0x9d, 0x1c, 0x8a, - 0xeb, 0x17, 0xa4, 0x89, 0x34, 0x3a, 0xff, 0x41, 0x52, 0x44, 0x3b, 0xbc, 0x09, 0x2d, 0x43, 0xb6, - 0x6a, 0xf9, 0xc4, 0xf4, 0x89, 0xe3, 0xdb, 0xcc, 0x3e, 0x20, 0x2a, 0x62, 0xc9, 0x0f, 0x8c, 0xb0, - 0xe4, 0xba, 0x4d, 0x79, 0xcf, 0x33, 0x5c, 0x63, 0x27, 0x50, 0x40, 0x77, 0x21, 0xa1, 0xce, 0x87, - 0x4a, 0xc4, 0xae, 0x84, 0xed, 0xad, 0x3c, 0x22, 0x62, 0x22, 0x84, 0xe2, 0x40, 0x03, 0xed, 0x82, - 0xf1, 0x7e, 0x9b, 0xd0, 0x23, 0xd3, 0xb3, 0xa8, 0xd5, 0x22, 0x82, 0x6f, 0x65, 0x0e, 0xf6, 0x52, - 0x98, 0x95, 0xef, 0x71, 0xec, 0x76, 0x00, 0x0d, 0xac, 0x4d, 0xbc, 0xdf, 0x27, 0xf6, 0x51, 0x05, - 0x62, 0x75, 0xea, 0x55, 0x55, 0xde, 0xb5, 0x74, 0x72, 0x04, 0x59, 0x7c, 0x40, 0xbd, 0x6a, 0xf7, - 0x55, 0xde, 0x68, 0x1f, 0x0b, 0x0b, 0x68, 0x0f, 0x02, 0x4a, 0x36, 0xf7, 0xa9, 0x74, 0x1e, 0xb9, - 0x94, 0xb0, 0xfa, 0xff, 0x21, 0xc4, 0x80, 0x25, 0xf4, 0xbe, 0x42, 0x5a, 0xcd, 0x6d, 0x42, 0xab, - 0xc4, 0x61, 0x78, 0x82, 0xf6, 0xb7, 0xe4, 0x67, 0xe0, 0x7c, 0x68, 0xb7, 0xa5, 0x19, 0xc8, 0xf2, - 0xcd, 0x33, 0x7d, 0x8f, 0x54, 0xed, 0x7d, 0x9b, 0xd0, 0xae, 0xaf, 0x1a, 0x37, 0xe2, 0x85, 0x7f, - 0x45, 0x00, 0xba, 0x29, 0x23, 0xba, 0x02, 0x69, 0xab, 0xd9, 0x74, 0x9f, 0x99, 0x2e, 0xb5, 0xeb, - 0xb6, 0x23, 0x5c, 0x55, 0x0a, 0xeb, 0x42, 0xb6, 0x25, 0x44, 0xe8, 0x2a, 0x64, 0x24, 0xa4, 0x45, - 0x58, 0xc3, 0xad, 0xf9, 0xca, 0xd3, 0x48, 0xbd, 0x0d, 0x29, 0xeb, 0x82, 0x82, 0x9d, 0x8c, 0xf6, - 0x80, 0xd4, 0xed, 0x46, 0xd7, 0x21, 0x4b, 0x0e, 0x3d, 0xb7, 0xcb, 0x5f, 0xe2, 0xac, 0xa4, 0x70, - 0x46, 0x4a, 0x03, 0xd8, 0x0c, 0x24, 0x5a, 0xd6, 0xa1, 0x69, 0xd5, 0x89, 0x88, 0x61, 0x53, 0x38, - 0xde, 0xb2, 0x0e, 0x97, 0xeb, 0x04, 0x3d, 0x80, 0x49, 0xd9, 0x49, 0x95, 0x92, 0x1a, 0x71, 0x98, - 0x6d, 0x35, 0xf9, 0x91, 0x19, 0x75, 0xdc, 0x0c, 0xa1, 0xb4, 0xd2, 0xd5, 0x41, 0x4b, 0x90, 0x20, - 0x8e, 0xf5, 0xb4, 0x49, 0x6a, 0x2a, 0xc4, 0x3d, 0x49, 0x3d, 0x80, 0xa2, 0x7b, 0x80, 0x7a, 0xd7, - 0xca, 0x94, 0x77, 0x23, 0x29, 0x4a, 0x28, 0x13, 0xfc, 0x6e, 0xc0, 0x47, 0x5a, 0xa2, 0x20, 0x2f, - 0x88, 0xea, 0x54, 0x2e, 0x21, 0xe6, 0xc0, 0xc2, 0xef, 0x2f, 0x80, 0xde, 0x93, 0x30, 0xa0, 0xeb, - 0x90, 0x50, 0x2e, 0x7d, 0xc0, 0x7b, 0x56, 0xc6, 0x70, 0xd0, 0x86, 0x16, 0x21, 0xab, 0x1e, 0xd5, - 0xaa, 0xc9, 0xf5, 0xef, 0x47, 0x67, 0x14, 0x44, 0x2e, 0x21, 0xc2, 0x30, 0xf9, 0x4c, 0x51, 0x61, - 0xb7, 0x5c, 0x22, 0x7d, 0xe8, 0xd5, 0x53, 0xf0, 0x66, 0x65, 0x0c, 0x1b, 0xcf, 0xfa, 0x45, 0x7e, - 0x88, 0x53, 0x8e, 0x9d, 0xd9, 0x29, 0x5f, 0x87, 0xac, 0x24, 0x1c, 0x93, 0x92, 0x67, 0xd4, 0x66, - 0xc1, 0x06, 0x67, 0xa4, 0x14, 0x4b, 0x21, 0xba, 0x0a, 0xe9, 0x86, 0xeb, 0xb3, 0x0e, 0x28, 0x2e, - 0x58, 0x49, 0xc3, 0x3a, 0x97, 0x06, 0xa0, 0x0a, 0x4c, 0x5a, 0x6d, 0xe6, 0x9a, 0x7d, 0xc8, 0x91, - 0xbb, 0x59, 0xd1, 0xf0, 0x04, 0x57, 0xab, 0xf4, 0x58, 0xba, 0x03, 0x09, 0x7e, 0xb5, 0xdc, 0x36, - 0x53, 0xf7, 0x7d, 0x76, 0x40, 0x7f, 0x55, 0x55, 0xf7, 0x4a, 0xb1, 0x5f, 0xfd, 0xed, 0xb2, 0x86, - 0x03, 0x3c, 0xda, 0x84, 0x34, 0x25, 0x8c, 0xb3, 0x8f, 0xb8, 0x4e, 0xe1, 0x37, 0x7b, 0x20, 0x57, - 0x2c, 0x62, 0xae, 0xa3, 0x8a, 0x36, 0x3a, 0xed, 0xbe, 0xa0, 0x3a, 0x9c, 0x0f, 0x5c, 0x66, 0xcb, - 0xa6, 0xd4, 0xa5, 0x81, 0x61, 0x10, 0x86, 0x6f, 0x8d, 0x36, 0x2c, 0x94, 0x37, 0x84, 0xae, 0xea, - 0x20, 0x08, 0x5b, 0x7a, 0x85, 0xe8, 0x75, 0x48, 0x7a, 0xd4, 0x76, 0xa9, 0xcd, 0x8e, 0x72, 0xba, - 0xa8, 0xd0, 0x15, 0xc2, 0xe8, 0xc8, 0x6d, 0x33, 0xdb, 0xa9, 0x6f, 0x2b, 0x24, 0xee, 0xe8, 0xa0, - 0xb7, 0x87, 0x86, 0x57, 0xe9, 0x33, 0x44, 0x3d, 0x91, 0x9c, 0x16, 0x1e, 0x55, 0x1d, 0xab, 0xcf, - 0x65, 0xce, 0x5a, 0x9f, 0xdb, 0x82, 0xe9, 0xa0, 0x7e, 0x73, 0xd0, 0x30, 0x7b, 0x4d, 0x65, 0x47, - 0xde, 0xf7, 0x73, 0x4a, 0x73, 0xaf, 0x81, 0xbb, 0x06, 0x1f, 0x81, 0xde, 0xb0, 0xfc, 0x46, 0xb0, - 0x1d, 0xb2, 0x82, 0x73, 0x63, 0xd4, 0x76, 0x54, 0x2c, 0xbf, 0xa1, 0x76, 0x01, 0x1a, 0x9d, 0xe7, - 0x4e, 0x55, 0x6f, 0xf2, 0x0c, 0x55, 0x3d, 0x73, 0x78, 0x9c, 0x89, 0xce, 0xb8, 0xe2, 0xe1, 0xe1, - 0xe5, 0x1b, 0x27, 0x86, 0x97, 0xe7, 0x04, 0xcb, 0x71, 0xed, 0xa1, 0x21, 0xe6, 0xcf, 0x34, 0xb8, - 0x1c, 0x30, 0x95, 0xe3, 0x32, 0x73, 0xdf, 0x6d, 0x3b, 0xb5, 0x4e, 0x2d, 0xc1, 0xac, 0xba, 0x35, - 0x92, 0x9b, 0x12, 0x47, 0xed, 0xee, 0xa8, 0x75, 0x53, 0xa4, 0xb3, 0xe9, 0xb2, 0xfb, 0xdc, 0x48, - 0x50, 0x4d, 0x58, 0x71, 0x6b, 0x44, 0x45, 0x21, 0x1f, 0x8a, 0x52, 0xcd, 0x85, 0xea, 0x70, 0x20, - 0x7a, 0x08, 0x06, 0x77, 0x23, 0xdc, 0x0b, 0x9b, 0xc1, 0xfd, 0x9e, 0x39, 0xdd, 0xfd, 0xce, 0xb6, - 0xac, 0x43, 0xee, 0x5d, 0x77, 0xd5, 0x35, 0x5f, 0x87, 0xb4, 0x5d, 0x6b, 0x92, 0x8e, 0x99, 0xdc, - 0x28, 0x33, 0x59, 0x6e, 0x46, 0x0c, 0xf4, 0xb7, 0x5a, 0xe4, 0xc6, 0x18, 0xd6, 0xb9, 0x7a, 0x60, - 0x6d, 0x0f, 0x26, 0xda, 0x5e, 0x9d, 0x5a, 0x35, 0xa2, 0x42, 0x5a, 0x3f, 0x37, 0x2b, 0xb6, 0xf0, - 0xe5, 0x51, 0xeb, 0xf2, 0x58, 0xaa, 0xc9, 0x50, 0x11, 0x67, 0xdb, 0xbd, 0xaf, 0x7e, 0xfe, 0x1f, - 0x71, 0xd0, 0x7b, 0x98, 0x05, 0xcd, 0x42, 0x52, 0x92, 0x93, 0xeb, 0xa8, 0x50, 0x32, 0x21, 0xde, - 0xb7, 0x1c, 0x74, 0x0f, 0x74, 0xa7, 0xdd, 0x32, 0xf9, 0xab, 0x4d, 0xfc, 0x53, 0x25, 0x67, 0xe0, - 0xb4, 0x5b, 0x58, 0xe2, 0xd1, 0x03, 0xe0, 0xc1, 0xbe, 0xc9, 0x6d, 0x07, 0x4b, 0x12, 0x3d, 0xdd, - 0xca, 0x66, 0x3c, 0x42, 0x77, 0xe9, 0x51, 0xb0, 0x14, 0xef, 0x40, 0x56, 0xf1, 0x67, 0x40, 0x46, - 0xd2, 0xa9, 0xdc, 0x39, 0x03, 0x83, 0xaa, 0xe7, 0x80, 0xa3, 0x32, 0xb4, 0xf7, 0x15, 0x79, 0x30, - 0x25, 0x7b, 0x10, 0x7e, 0xc2, 0xa3, 0xa4, 0x66, 0x57, 0x2d, 0xe1, 0x78, 0xf8, 0x8a, 0xbf, 0x7e, - 0xe6, 0x7e, 0xb8, 0xe3, 0xd8, 0x0e, 0xac, 0x60, 0x44, 0x07, 0x64, 0xa8, 0x02, 0x57, 0x44, 0x5f, - 0x3e, 0x69, 0x12, 0x61, 0xc4, 0x94, 0x03, 0x10, 0x31, 0x8d, 0xac, 0x10, 0xcb, 0xa8, 0x25, 0x8a, - 0x2f, 0x72, 0xe0, 0x4e, 0x80, 0x13, 0xf6, 0x37, 0xac, 0x43, 0x55, 0x46, 0xe6, 0x61, 0xca, 0xb4, - 0xd8, 0x21, 0x1e, 0x7e, 0x98, 0x3e, 0xb3, 0x58, 0xdb, 0x17, 0xd7, 0x48, 0x46, 0xb8, 0x19, 0x3c, - 0xd5, 0x69, 0xdd, 0x11, 0x8d, 0xfc, 0xd8, 0xfb, 0xf9, 0xdf, 0x69, 0x90, 0xe9, 0x5b, 0x92, 0x51, - 0x49, 0xfa, 0x4d, 0x88, 0xab, 0xd4, 0xea, 0xe4, 0xf4, 0x85, 0xe7, 0x0b, 0xd5, 0x20, 0xb5, 0x4b, - 0xcb, 0xf4, 0x4c, 0x29, 0x46, 0x87, 0x67, 0x25, 0x95, 0x31, 0xac, 0x0b, 0xac, 0x3c, 0xa6, 0xa5, - 0x0c, 0xe8, 0x52, 0xc9, 0xe4, 0xd2, 0xfc, 0xc7, 0x1a, 0xa0, 0xc1, 0x85, 0xfd, 0xaf, 0x1e, 0xf2, - 0x1f, 0x35, 0x38, 0x17, 0xe2, 0x68, 0xd1, 0xd5, 0xe1, 0x01, 0x5d, 0x37, 0x9c, 0xbb, 0x0a, 0x7a, - 0x4f, 0xf1, 0x46, 0xc5, 0x72, 0x9c, 0x57, 0xa1, 0x5b, 0xb9, 0x09, 0x4d, 0x1a, 0xa2, 0x5f, 0x41, - 0xd2, 0xf0, 0x71, 0x0c, 0xa0, 0xeb, 0x93, 0xd0, 0x23, 0x88, 0xab, 0x90, 0x52, 0x56, 0xca, 0x6f, - 0x9e, 0xde, 0x9f, 0x29, 0xd7, 0xc2, 0xd7, 0x57, 0x9a, 0xe0, 0xc6, 0xaa, 0xae, 0xfb, 0x9e, 0x1d, - 0xa4, 0xa8, 0x67, 0x31, 0xb6, 0x22, 0x14, 0xe5, 0x66, 0xf1, 0x27, 0x74, 0x00, 0xe7, 0xab, 0xae, - 0xe3, 0xa8, 0xfb, 0xe3, 0x51, 0xd7, 0x23, 0x94, 0xd9, 0x24, 0x08, 0x62, 0xdf, 0x38, 0x93, 0xed, - 0xc0, 0xce, 0x76, 0xc7, 0x4c, 0x65, 0x0c, 0x4f, 0x55, 0x43, 0xe4, 0x28, 0x0f, 0x49, 0x46, 0x68, - 0xcb, 0x76, 0xac, 0xa6, 0x60, 0xa2, 0x24, 0xee, 0xbc, 0xe7, 0x97, 0x20, 0xae, 0xc2, 0xeb, 0x1b, - 0xa0, 0xcb, 0x49, 0x9b, 0xe1, 0x67, 0x14, 0x64, 0xeb, 0xa6, 0xd5, 0x22, 0x79, 0x07, 0xe2, 0x72, - 0x76, 0xa3, 0x8f, 0x74, 0x94, 0xb1, 0xa6, 0x5a, 0xbc, 0x91, 0x3c, 0xca, 0xb1, 0x08, 0xa9, 0xac, - 0x5d, 0xe6, 0x5a, 0xe2, 0x39, 0x7f, 0x0b, 0xa6, 0xc2, 0x66, 0x8c, 0x2e, 0x40, 0xca, 0x77, 0xdb, - 0xb4, 0x4a, 0x4c, 0xdb, 0x13, 0x43, 0x48, 0xe2, 0xa4, 0x14, 0x3c, 0xf4, 0x4a, 0xb3, 0x60, 0xc8, - 0xc0, 0x66, 0x20, 0x6b, 0xcc, 0x37, 0x20, 0xd3, 0xe7, 0x75, 0x78, 0xc6, 0x18, 0x78, 0x2f, 0x7e, - 0x1b, 0x94, 0x67, 0xd1, 0x95, 0x4c, 0x7c, 0xb6, 0xe9, 0x49, 0xaf, 0x22, 0xa7, 0x4e, 0xaf, 0x0a, - 0x65, 0xb8, 0x70, 0x82, 0xdf, 0x47, 0x33, 0x70, 0x6e, 0xa7, 0x8c, 0xf7, 0x1e, 0xae, 0x94, 0xcd, - 0xc7, 0x9b, 0xcb, 0x7b, 0xcb, 0x0f, 0xd7, 0x97, 0x4b, 0xeb, 0x65, 0x63, 0x0c, 0x65, 0x20, 0xb5, - 0xb9, 0xb5, 0x6b, 0xde, 0xdf, 0x7a, 0xbc, 0xb9, 0x6a, 0x68, 0xa5, 0x3c, 0x4c, 0x06, 0x51, 0xc8, - 0xf1, 0xc9, 0x94, 0x72, 0x30, 0xdd, 0x9b, 0x2e, 0x74, 0x01, 0x6b, 0xb1, 0xa4, 0x61, 0x4c, 0xae, - 0xc5, 0x92, 0xd3, 0xc6, 0xcc, 0x5a, 0x2c, 0x79, 0xde, 0x98, 0x2e, 0x7c, 0x12, 0x83, 0x6c, 0xff, - 0x37, 0x1a, 0x9e, 0xe4, 0x2a, 0x75, 0xf5, 0x79, 0x47, 0xce, 0x3d, 0x2d, 0xd3, 0x12, 0xf5, 0xf1, - 0xe6, 0x3a, 0x64, 0x44, 0xfe, 0xdd, 0x01, 0x45, 0x54, 0xf6, 0x92, 0xe6, 0xe2, 0x0e, 0xac, 0x01, - 0x99, 0xfe, 0xd0, 0x28, 0x2a, 0x42, 0xa3, 0xdb, 0xa3, 0x3f, 0x15, 0x75, 0x5e, 0x87, 0x86, 0x45, - 0x69, 0xda, 0xbb, 0x70, 0x2f, 0x42, 0xb6, 0xc1, 0x98, 0xe7, 0x77, 0x47, 0x24, 0x4e, 0x36, 0xcf, - 0x1a, 0x85, 0xbc, 0x33, 0xa4, 0x17, 0xc3, 0xb3, 0xb3, 0x8a, 0x76, 0x3c, 0x3f, 0xbb, 0x0c, 0xba, - 0xcf, 0xa8, 0xed, 0x99, 0xa2, 0x6c, 0x22, 0x7c, 0x59, 0x12, 0x83, 0x10, 0x89, 0xfa, 0x0a, 0x7a, - 0x09, 0x26, 0xfc, 0x6a, 0x83, 0xb4, 0x48, 0xb7, 0xcf, 0x84, 0xaa, 0x2c, 0x65, 0x65, 0x43, 0xa7, - 0xd3, 0xab, 0x90, 0xf1, 0x5c, 0xda, 0xb3, 0xa6, 0x3c, 0x05, 0xcb, 0xe0, 0x34, 0x17, 0x06, 0xa0, - 0xc2, 0x33, 0x98, 0x0a, 0x9b, 0x34, 0x3a, 0x0f, 0x93, 0x1b, 0x5b, 0x7b, 0xe5, 0x55, 0x73, 0xbb, - 0x8c, 0x37, 0x96, 0x37, 0xcb, 0x9b, 0xbb, 0xeb, 0x4f, 0x8c, 0x31, 0x94, 0x82, 0x71, 0x75, 0x1a, - 0xf8, 0xe1, 0xd8, 0x29, 0x97, 0xcd, 0xad, 0xdd, 0x4a, 0x19, 0x1b, 0x11, 0x34, 0x0d, 0x68, 0xb7, - 0xbc, 0xb1, 0xbd, 0x85, 0x97, 0xf1, 0x13, 0x13, 0x97, 0x57, 0x1f, 0xe2, 0xf2, 0xca, 0xae, 0x11, - 0xe5, 0xf2, 0x8e, 0x89, 0xae, 0x3c, 0x56, 0xca, 0x43, 0xae, 0x33, 0x91, 0x63, 0x47, 0x86, 0x1f, - 0x26, 0xb5, 0xd1, 0xc7, 0x5a, 0x0a, 0x2e, 0x4c, 0x85, 0x7d, 0x1e, 0x43, 0xd7, 0x20, 0x2e, 0xbd, - 0xb8, 0x38, 0x38, 0x99, 0x52, 0x9a, 0xef, 0x59, 0xe2, 0xc6, 0xb8, 0xf1, 0xe7, 0xd8, 0x7c, 0x0d, - 0xab, 0x36, 0x74, 0x13, 0x62, 0x4f, 0xdd, 0xda, 0x91, 0xba, 0x3a, 0x17, 0x43, 0x08, 0x7f, 0xd5, - 0x62, 0xd6, 0x8e, 0xb8, 0xbb, 0x58, 0x40, 0x0b, 0x4b, 0x90, 0xea, 0x7c, 0xd2, 0x43, 0x2f, 0x42, - 0x8a, 0xdf, 0x7a, 0xc1, 0x16, 0x83, 0x64, 0xd3, 0x6d, 0x2b, 0xfc, 0x42, 0x83, 0x6c, 0xff, 0x0f, - 0x25, 0xd0, 0xff, 0x41, 0xc2, 0xe3, 0x31, 0x0a, 0x0d, 0x34, 0xe5, 0x10, 0x29, 0x3f, 0x08, 0x1f, - 0x24, 0x71, 0xd0, 0xd8, 0xe1, 0xb2, 0x48, 0x38, 0x97, 0xbd, 0x0a, 0x71, 0x59, 0x2c, 0x52, 0xa7, - 0x7a, 0x2e, 0xcc, 0x6b, 0x29, 0x0f, 0x2a, 0x70, 0x58, 0xe1, 0x0b, 0x7f, 0x49, 0x41, 0xaa, 0x93, - 0x76, 0xa1, 0x7b, 0x30, 0xee, 0x33, 0xab, 0x4e, 0x94, 0x7f, 0x3a, 0xdd, 0x47, 0x8b, 0x1c, 0x60, - 0xa9, 0xc5, 0xcf, 0x69, 0xcd, 0xf6, 0x45, 0xf4, 0xd4, 0xf1, 0xb5, 0x18, 0x94, 0x88, 0xfb, 0xd9, - 0x35, 0x48, 0x48, 0xcf, 0x18, 0xfc, 0xc8, 0xe5, 0xda, 0x89, 0x29, 0x66, 0x51, 0xee, 0x63, 0xff, - 0xef, 0x65, 0x94, 0x81, 0xfc, 0xaf, 0x93, 0x10, 0x57, 0xfb, 0xfc, 0x16, 0x64, 0x15, 0xd7, 0xf6, - 0xc6, 0x03, 0x7a, 0xf8, 0x8f, 0x60, 0x8e, 0x5b, 0x2f, 0xca, 0x9d, 0xed, 0x96, 0x62, 0x32, 0x7e, - 0xaf, 0x00, 0xbd, 0x0b, 0xe7, 0x6a, 0xc4, 0x67, 0xb6, 0x23, 0x36, 0xb1, 0xd3, 0x83, 0x3c, 0x2d, - 0xb7, 0x4f, 0xd5, 0xc3, 0x6a, 0x57, 0xbf, 0xdb, 0x0d, 0xaa, 0x0d, 0x48, 0xd1, 0x0f, 0x61, 0xe2, - 0x58, 0x96, 0xaf, 0x1c, 0xf0, 0xad, 0x53, 0xf5, 0x83, 0xfb, 0x32, 0x7b, 0x7e, 0xf9, 0xfb, 0x73, - 0x7d, 0xbe, 0x50, 0x3c, 0xbf, 0x64, 0x84, 0xe7, 0xb1, 0x94, 0xf8, 0xbe, 0x0a, 0xff, 0x17, 0x4f, - 0x69, 0x9e, 0xab, 0x2e, 0x4b, 0x4d, 0xbe, 0x50, 0xb4, 0x57, 0x80, 0x30, 0xe8, 0x75, 0xe2, 0x10, - 0x6a, 0x57, 0xc5, 0xee, 0xcb, 0xcf, 0xe1, 0x0b, 0xa7, 0xb2, 0xfc, 0x40, 0xea, 0x3d, 0x22, 0x3c, - 0x14, 0x84, 0x7a, 0xe7, 0x0d, 0x11, 0x40, 0xca, 0xf3, 0x8b, 0x52, 0xbb, 0x2a, 0x84, 0xc9, 0x12, - 0xe4, 0xb7, 0x4f, 0x65, 0xba, 0x27, 0x25, 0x17, 0x35, 0xb1, 0xca, 0x18, 0x36, 0x1a, 0xc7, 0x64, - 0xf9, 0x09, 0xc8, 0xf4, 0x9d, 0x82, 0xfc, 0x14, 0xa0, 0xc1, 0x4d, 0xcb, 0x3b, 0xdc, 0x43, 0xf5, - 0x2d, 0xe8, 0x19, 0x22, 0x13, 0xf4, 0x0a, 0x64, 0x6b, 0xc4, 0xaf, 0x52, 0xdb, 0x63, 0x2e, 0xed, - 0x09, 0x46, 0x7b, 0xe0, 0x99, 0x2e, 0xe0, 0x11, 0x39, 0xe2, 0xc3, 0xea, 0x5b, 0xf3, 0x7c, 0x09, - 0xa0, 0xbb, 0x54, 0x68, 0x09, 0x8c, 0x1e, 0x83, 0xf2, 0x73, 0xc5, 0xc0, 0x08, 0x26, 0xba, 0x10, - 0x31, 0xe1, 0xfc, 0xe7, 0x1a, 0x18, 0xc7, 0x17, 0xe5, 0xcb, 0x99, 0x42, 0xf7, 0x20, 0x4d, 0x0e, - 0x3d, 0x52, 0x65, 0x6a, 0x5f, 0x46, 0x07, 0x1f, 0xba, 0xc4, 0xcb, 0x4e, 0x1f, 0x74, 0xbf, 0x43, - 0x44, 0x4f, 0xf9, 0x1d, 0xa2, 0x9f, 0x0a, 0x94, 0x36, 0x0f, 0xa7, 0x24, 0x2b, 0x0c, 0x44, 0x20, - 0x85, 0x9f, 0x46, 0x21, 0xd3, 0x67, 0x61, 0x54, 0x58, 0x78, 0x05, 0x74, 0x72, 0x68, 0x75, 0xa6, - 0x14, 0x53, 0x6e, 0x14, 0x84, 0x50, 0x8e, 0xfb, 0x65, 0xd0, 0x45, 0x29, 0x5a, 0x41, 0xc6, 0x43, - 0x3e, 0xd6, 0x80, 0x00, 0x48, 0xf8, 0x1d, 0xd0, 0xc5, 0x8f, 0x1c, 0xfb, 0x0e, 0xef, 0xb4, 0x9a, - 0x2a, 0x0f, 0xe9, 0x8a, 0x0f, 0x1d, 0xf6, 0x9d, 0x25, 0xcc, 0x31, 0x42, 0x95, 0x3f, 0x04, 0xf5, - 0x5b, 0x1e, 0x09, 0xf8, 0xc4, 0x09, 0x86, 0x93, 0x50, 0x91, 0x44, 0x5a, 0x89, 0x25, 0xec, 0x0a, - 0xa4, 0x6d, 0xe7, 0x80, 0xd0, 0x00, 0x95, 0x14, 0x01, 0x82, 0x2e, 0x65, 0x12, 0x52, 0x84, 0xb4, - 0x8a, 0x35, 0x24, 0x24, 0x35, 0x58, 0xd3, 0xd6, 0x25, 0xa0, 0x83, 0xf7, 0xdb, 0xfb, 0x5d, 0x3c, - 0x84, 0xe0, 0x25, 0x40, 0xfe, 0xa8, 0x87, 0x47, 0x7a, 0xf2, 0x22, 0x08, 0x7c, 0x5f, 0xa4, 0x17, - 0x31, 0xa2, 0x6b, 0xb1, 0x64, 0xd4, 0x88, 0x15, 0x7e, 0xa4, 0xc1, 0xf9, 0xd0, 0x2f, 0x42, 0x68, - 0xae, 0x6f, 0x57, 0xfa, 0xbd, 0xa0, 0xdc, 0x98, 0xa9, 0xe0, 0x8b, 0x9c, 0x8c, 0xbe, 0xe5, 0x0b, - 0x7a, 0x25, 0xf8, 0x64, 0x36, 0xfa, 0x2b, 0x98, 0x04, 0x96, 0xf2, 0xbf, 0x79, 0x7e, 0x49, 0xfb, - 0xec, 0xf9, 0x25, 0xed, 0xf3, 0xe7, 0x97, 0xb4, 0xbf, 0x3f, 0xbf, 0xa4, 0xbd, 0x29, 0x7f, 0x47, - 0xf4, 0x63, 0x4d, 0x7b, 0x1a, 0x17, 0x6a, 0xb7, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0xcf, 0x05, - 0x32, 0x5f, 0xf3, 0x2a, 0x00, 0x00, + proto.RegisterFile("envoy/api/v2/route/route.proto", fileDescriptor_route_ee11921c49fa9e35) +} + +var fileDescriptor_route_ee11921c49fa9e35 = []byte{ + // 3532 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcb, 0x6f, 0x23, 0xc9, + 0x79, 0x57, 0x93, 0x14, 0x1f, 0x1f, 0x5f, 0xad, 0x1a, 0x8d, 0x44, 0x71, 0x77, 0x34, 0x1a, 0xce, + 0x6e, 0x56, 0x9e, 0x64, 0x29, 0xaf, 0x46, 0xf6, 0x78, 0x76, 0x30, 0xeb, 0x90, 0x12, 0x67, 0x28, + 0x8d, 0x5e, 0x29, 0x71, 0x94, 0x8c, 0x0d, 0xbb, 0xd1, 0xc3, 0x2e, 0x91, 0xed, 0x25, 0xbb, 0x7b, + 0xab, 0x8b, 0x92, 0x78, 0x73, 0x7c, 0x08, 0x82, 0x04, 0x01, 0x92, 0x3d, 0x05, 0xb9, 0xe6, 0x12, + 0xe4, 0x92, 0x04, 0x08, 0x10, 0x23, 0xc8, 0xc1, 0x47, 0x23, 0x27, 0x5f, 0x02, 0xe4, 0x92, 0x07, + 0xe6, 0x14, 0xff, 0x0f, 0x39, 0x04, 0xf5, 0x68, 0x3e, 0xc4, 0xa6, 0x28, 0x19, 0x0b, 0x23, 0x0b, + 0x5f, 0xa4, 0xee, 0xaa, 0xdf, 0xf7, 0xd5, 0xeb, 0xab, 0x5f, 0xfd, 0xea, 0x6b, 0xc2, 0x2a, 0x71, + 0xce, 0xdd, 0xfe, 0x86, 0xe9, 0xd9, 0x1b, 0xe7, 0x9b, 0x1b, 0xd4, 0xed, 0x31, 0x22, 0xff, 0x96, + 0x3d, 0xea, 0x32, 0x17, 0x21, 0x51, 0x5f, 0x36, 0x3d, 0xbb, 0x7c, 0xbe, 0x59, 0x16, 0x35, 0xc5, + 0xf7, 0xc7, 0x6c, 0x9a, 0x2e, 0x25, 0x1b, 0x6f, 0x4d, 0x5f, 0x59, 0x14, 0x97, 0x64, 0x2d, 0xeb, + 0x7b, 0x64, 0x83, 0x9a, 0x4e, 0x2b, 0x28, 0x5f, 0x69, 0xb9, 0x6e, 0xab, 0x43, 0x36, 0xc4, 0xdb, + 0xdb, 0xde, 0xd9, 0x86, 0xe9, 0xf4, 0x55, 0xd5, 0xea, 0xd5, 0x2a, 0xab, 0x47, 0x4d, 0x66, 0xbb, + 0x8e, 0xaa, 0x7f, 0xff, 0x6a, 0xbd, 0xcf, 0x68, 0xaf, 0xc9, 0xa6, 0x59, 0x5f, 0x50, 0xd3, 0xf3, + 0x08, 0xf5, 0x55, 0xfd, 0xf2, 0xb9, 0xd9, 0xb1, 0x2d, 0x93, 0x91, 0x8d, 0xe0, 0x41, 0x55, 0x2c, + 0xb6, 0xdc, 0x96, 0x2b, 0x1e, 0x37, 0xf8, 0x93, 0x2c, 0x2d, 0xfd, 0x2b, 0x40, 0xfa, 0xd4, 0xa6, + 0xac, 0x67, 0x76, 0xea, 0xae, 0xcf, 0xd0, 0x3d, 0x88, 0x39, 0x66, 0x97, 0x14, 0xb4, 0x35, 0x6d, + 0x3d, 0x55, 0x4d, 0xfd, 0xf3, 0x2f, 0x7f, 0x16, 0x8d, 0xd1, 0xc8, 0x9a, 0x86, 0x45, 0x31, 0xfa, + 0x00, 0x12, 0x96, 0xdb, 0x35, 0x6d, 0xc7, 0x2f, 0x44, 0xd6, 0xa2, 0xeb, 0xa9, 0x2a, 0x70, 0xc4, + 0xfc, 0x97, 0x5a, 0x24, 0xa9, 0xe1, 0xa0, 0x0a, 0x3d, 0x81, 0xb8, 0x98, 0x3b, 0xbf, 0x10, 0x5d, + 0x8b, 0xae, 0xa7, 0x37, 0x57, 0xca, 0x93, 0xf3, 0x5a, 0xc6, 0xfc, 0x6f, 0x35, 0xf6, 0xf3, 0xff, + 0xbc, 0x3f, 0x87, 0x15, 0x1c, 0x9d, 0x40, 0x9a, 0x92, 0x2f, 0x7a, 0x36, 0x25, 0x06, 0xeb, 0xf8, + 0x85, 0xd8, 0x9a, 0xb6, 0x9e, 0xdb, 0xdc, 0x0c, 0xb3, 0x1e, 0xe9, 0x73, 0xb9, 0xd1, 0xf1, 0xb1, + 0xb4, 0xea, 0x12, 0x87, 0x35, 0xfa, 0x1e, 0xc1, 0xa0, 0xdc, 0x34, 0x3a, 0x3e, 0x3a, 0x00, 0xfd, + 0x5c, 0xa2, 0x8d, 0x66, 0xa7, 0xe7, 0x33, 0x42, 0xfd, 0xc2, 0xbc, 0xe8, 0x57, 0xe9, 0x1a, 0xcf, + 0xdb, 0x12, 0x8a, 0xf3, 0xe7, 0x63, 0xef, 0x3e, 0xfa, 0x0c, 0xd2, 0xd4, 0x64, 0xc4, 0xe8, 0xd8, + 0x5d, 0x9b, 0xf9, 0x85, 0xb8, 0xf0, 0x74, 0x2f, 0x74, 0x84, 0x26, 0x23, 0xfb, 0x1c, 0x85, 0x81, + 0x06, 0x8f, 0x3e, 0x3a, 0x83, 0x25, 0xde, 0x39, 0xe2, 0x33, 0xa3, 0x4d, 0x4c, 0x8b, 0x50, 0xdf, + 0x60, 0xae, 0x61, 0x5a, 0x56, 0x21, 0x21, 0x5c, 0x7d, 0x30, 0xee, 0x8a, 0x07, 0x5c, 0xb9, 0x2e, + 0x80, 0xa7, 0x66, 0xa7, 0x47, 0x8e, 0x3c, 0x1e, 0x2a, 0xd5, 0x34, 0x9f, 0xf7, 0xf8, 0x97, 0x5a, + 0x54, 0xff, 0x9f, 0x04, 0xbe, 0xa3, 0x1c, 0x4a, 0x98, 0xdf, 0x70, 0x2b, 0x96, 0x85, 0x36, 0x21, + 0xd6, 0x74, 0xa9, 0x5f, 0x48, 0xae, 0x69, 0xeb, 0xe9, 0xcd, 0xd5, 0xb0, 0x0e, 0x6e, 0xbb, 0xd4, + 0x3f, 0x76, 0x3b, 0x76, 0xb3, 0x8f, 0x05, 0x16, 0xb5, 0x61, 0x99, 0x12, 0xdf, 0x73, 0x1d, 0x9f, + 0x5c, 0xed, 0x1c, 0xfc, 0xaa, 0x9d, 0x5b, 0x0c, 0x3c, 0x8e, 0xf5, 0xee, 0x19, 0x14, 0xc3, 0x5a, + 0xa2, 0xa4, 0xeb, 0x9e, 0x93, 0x42, 0x9a, 0xc7, 0x16, 0x5e, 0x9e, 0xb0, 0xc4, 0xa2, 0x1a, 0x59, + 0xb0, 0xe0, 0x11, 0x6a, 0x9c, 0xd9, 0x1d, 0x46, 0xa8, 0xd1, 0x74, 0x9d, 0x33, 0xbb, 0x55, 0xc8, + 0x88, 0x0e, 0x6e, 0xcd, 0x0a, 0x96, 0x63, 0x42, 0x5f, 0x08, 0xbb, 0x6d, 0x61, 0x56, 0x73, 0x18, + 0xed, 0x57, 0x23, 0x05, 0x0d, 0xe7, 0xbd, 0xf1, 0x1a, 0xf4, 0x14, 0x56, 0x42, 0x16, 0x4a, 0xf5, + 0x30, 0x2b, 0x7a, 0xb8, 0x74, 0x75, 0xe2, 0x55, 0x07, 0x2b, 0x70, 0xcf, 0x76, 0x9a, 0x9d, 0x9e, + 0x45, 0x8c, 0xc0, 0x85, 0xc9, 0x18, 0xe9, 0x7a, 0xcc, 0x68, 0xba, 0x3d, 0x87, 0x15, 0x72, 0x6b, + 0xda, 0x7a, 0x12, 0x17, 0x15, 0x08, 0x4b, 0x4c, 0x45, 0x42, 0xb6, 0x39, 0x02, 0x79, 0xb0, 0xcc, + 0x49, 0xc5, 0x32, 0x26, 0x47, 0x9a, 0x17, 0x23, 0x7d, 0x3a, 0x73, 0x5b, 0x70, 0xf3, 0xb0, 0xe1, + 0xe2, 0x45, 0x16, 0x52, 0x85, 0xaa, 0x90, 0xa1, 0x84, 0xd1, 0xbe, 0xe1, 0x89, 0x90, 0x28, 0xe8, + 0x22, 0x70, 0xee, 0x87, 0x46, 0x36, 0xc7, 0xa9, 0xc8, 0x49, 0xd3, 0xe1, 0x4b, 0xf1, 0xfb, 0xb0, + 0x18, 0xd6, 0x22, 0xd2, 0x21, 0xfa, 0x39, 0xe9, 0x4b, 0x56, 0xc1, 0xfc, 0x11, 0x7d, 0x0c, 0xf3, + 0xe7, 0x3c, 0x64, 0x0a, 0x11, 0xd1, 0xcc, 0x72, 0x59, 0xf2, 0x5a, 0x39, 0xe0, 0xb5, 0xf2, 0x89, + 0x60, 0x3d, 0x2c, 0x51, 0x9f, 0x46, 0xbe, 0xa3, 0x15, 0x7f, 0x00, 0x2b, 0x53, 0xc7, 0x14, 0xd2, + 0xc2, 0xa3, 0xf1, 0x16, 0x16, 0x27, 0x5a, 0xa8, 0x38, 0xfd, 0x11, 0xf7, 0xa5, 0x4f, 0x01, 0x4d, + 0x32, 0x09, 0x4a, 0x42, 0xec, 0xf0, 0xe8, 0xb0, 0xa6, 0xcf, 0xa1, 0x05, 0xc8, 0xd6, 0xfe, 0xa0, + 0x51, 0xc3, 0x87, 0x95, 0x7d, 0xe3, 0xe8, 0x70, 0xff, 0x8d, 0xae, 0xa1, 0x04, 0x44, 0x2b, 0xfb, + 0xfb, 0x7a, 0x64, 0x2f, 0x96, 0x4c, 0xe9, 0x50, 0xfa, 0xdf, 0x24, 0xcc, 0x0b, 0x5a, 0x43, 0x3b, + 0x30, 0xdf, 0x35, 0x59, 0xb3, 0x2d, 0xfa, 0x33, 0x65, 0xf7, 0x09, 0xe4, 0x01, 0x47, 0x55, 0x73, + 0x9c, 0x05, 0x05, 0x93, 0xfe, 0x89, 0x16, 0xd1, 0x35, 0x2c, 0x8d, 0xd1, 0x13, 0x98, 0x17, 0x50, + 0x35, 0x82, 0xfb, 0x53, 0xbd, 0x54, 0x9a, 0x7c, 0xdf, 0xd5, 0xe7, 0xb0, 0xc4, 0xa3, 0xdf, 0x85, + 0x24, 0x25, 0x96, 0x4d, 0x49, 0x93, 0x15, 0xa2, 0xc2, 0xb6, 0x14, 0xbe, 0x8c, 0x12, 0x33, 0x30, + 0x1f, 0x58, 0xa1, 0x27, 0x90, 0xec, 0x12, 0x66, 0x5a, 0x26, 0x33, 0x05, 0x0d, 0xa7, 0x37, 0xdf, + 0x0b, 0xd9, 0xfa, 0x07, 0x0a, 0x82, 0x07, 0x60, 0xf4, 0x0c, 0x52, 0x16, 0x69, 0xba, 0xd4, 0x64, + 0x2e, 0x2d, 0xcc, 0x0b, 0xcb, 0x50, 0x72, 0xdc, 0x09, 0x40, 0x78, 0x88, 0x47, 0x27, 0x90, 0x97, + 0xed, 0x1b, 0xc1, 0xd6, 0x2f, 0x24, 0x84, 0x8b, 0xf5, 0x50, 0x17, 0x02, 0x8a, 0x15, 0x72, 0x30, + 0x88, 0x9c, 0x35, 0x56, 0x8e, 0x7e, 0x18, 0xc6, 0x16, 0x49, 0xb1, 0x87, 0xca, 0x53, 0x67, 0xf4, + 0x16, 0x3c, 0x31, 0x9d, 0xd0, 0x53, 0x5f, 0x29, 0xa1, 0x7f, 0x4d, 0xc8, 0xf9, 0x5a, 0xda, 0xcc, + 0x5c, 0x4b, 0x9b, 0x3f, 0x9a, 0xce, 0x79, 0x59, 0x31, 0xc2, 0xc7, 0xd3, 0xd7, 0xeb, 0x96, 0x6c, + 0xf7, 0x75, 0x66, 0xaa, 0x6a, 0x1e, 0xe2, 0xa6, 0x88, 0x76, 0x34, 0xff, 0xd3, 0x5f, 0xfe, 0x2c, + 0xaa, 0xed, 0xc5, 0x92, 0x71, 0x3d, 0x51, 0xfa, 0xab, 0x14, 0xe4, 0x7f, 0x9f, 0xd8, 0xad, 0x36, + 0x23, 0x96, 0x92, 0x2b, 0xe8, 0x0d, 0x24, 0x07, 0xa2, 0x47, 0x13, 0x73, 0xf8, 0x49, 0xd8, 0x1c, + 0x5e, 0x31, 0x2b, 0xab, 0xff, 0xb2, 0x78, 0x4c, 0xe4, 0x0d, 0xdc, 0xa1, 0xdf, 0x01, 0x44, 0x7b, + 0x0e, 0xb3, 0xbb, 0xc4, 0xf8, 0x9c, 0xf4, 0x0d, 0x8f, 0x92, 0x33, 0xfb, 0x52, 0x0c, 0x21, 0x85, + 0x75, 0x55, 0xf3, 0x8a, 0xf4, 0x8f, 0x45, 0x39, 0xda, 0x83, 0x0c, 0x73, 0x99, 0xd9, 0x31, 0x2e, + 0x84, 0x4f, 0x45, 0x4b, 0xef, 0x4f, 0x0c, 0xf5, 0xf5, 0xae, 0xc3, 0x1e, 0x6f, 0x8a, 0x80, 0x55, + 0xf2, 0xf3, 0x51, 0x64, 0x5d, 0xc3, 0x69, 0x61, 0x2c, 0xfb, 0x53, 0xfc, 0x87, 0x04, 0x64, 0xc7, + 0x7a, 0x38, 0x4b, 0xb6, 0x6e, 0x41, 0x5c, 0x35, 0x1b, 0x99, 0xdd, 0x2c, 0x56, 0x58, 0x54, 0x85, + 0x5c, 0x40, 0x6b, 0x86, 0x64, 0xf3, 0xe8, 0x6c, 0x26, 0xcc, 0x06, 0x26, 0x82, 0xd9, 0xaf, 0x21, + 0x87, 0xd8, 0xaf, 0x8b, 0x1c, 0xe6, 0x7f, 0x9d, 0xe4, 0x10, 0xbf, 0x9e, 0x1c, 0xce, 0xa7, 0x73, + 0xf1, 0x8b, 0x5b, 0xc7, 0xe5, 0x57, 0xa5, 0xe5, 0x52, 0xd7, 0x92, 0xd2, 0x4f, 0xb4, 0xe9, 0xac, + 0x24, 0x79, 0xf7, 0xd5, 0xed, 0x7b, 0xfe, 0x1b, 0xc4, 0x56, 0x7b, 0xb1, 0x64, 0x42, 0x4f, 0x96, + 0xfe, 0x3c, 0x06, 0x30, 0x54, 0x3c, 0xa8, 0x00, 0x71, 0x45, 0x18, 0xc2, 0x73, 0x7d, 0x0e, 0xab, + 0x77, 0xb4, 0x08, 0x31, 0xcf, 0x64, 0x6d, 0x49, 0x24, 0xf5, 0x39, 0x2c, 0xde, 0x50, 0x09, 0xe6, + 0x29, 0x69, 0x91, 0x4b, 0xb1, 0x05, 0x83, 0x6b, 0x27, 0x8d, 0xae, 0xff, 0x38, 0x29, 0x54, 0x0f, + 0xaf, 0x42, 0x15, 0xc8, 0x35, 0x4d, 0x9f, 0x18, 0x3e, 0x71, 0x7c, 0x9b, 0xd9, 0xe7, 0x44, 0x29, + 0x97, 0xe2, 0x44, 0x0f, 0xab, 0xae, 0xdb, 0x91, 0x7b, 0x3d, 0xcb, 0x2d, 0x4e, 0x02, 0x03, 0xf4, + 0x0c, 0x12, 0x2a, 0x3e, 0xd4, 0xc5, 0xee, 0x41, 0xd8, 0xda, 0xca, 0x10, 0x11, 0x03, 0x21, 0x14, + 0x07, 0x16, 0xa8, 0x01, 0xfa, 0x17, 0x3d, 0xc2, 0x05, 0xb4, 0x49, 0xcd, 0x2e, 0x11, 0x9c, 0x2b, + 0xef, 0x74, 0xdf, 0x08, 0xf3, 0xf2, 0x7b, 0x1c, 0x7b, 0x1c, 0x40, 0x03, 0x6f, 0xf9, 0x2f, 0xc6, + 0x8a, 0x7d, 0x54, 0x87, 0x58, 0x8b, 0x7a, 0x4d, 0x75, 0x8f, 0xdb, 0xba, 0x5e, 0x49, 0x96, 0x5f, + 0x52, 0xaf, 0x39, 0x7c, 0x95, 0xbb, 0xda, 0xc7, 0xc2, 0x03, 0x3a, 0x85, 0x80, 0x96, 0x8d, 0x33, + 0x2a, 0x0f, 0x90, 0x42, 0x4a, 0x78, 0xfd, 0xed, 0x10, 0x72, 0xc0, 0x12, 0xfa, 0x42, 0x21, 0xcd, + 0xce, 0x31, 0xa1, 0x4d, 0xe2, 0x30, 0x9c, 0xa7, 0xe3, 0x35, 0xc5, 0x65, 0xb8, 0x1b, 0xda, 0x6c, + 0x75, 0x19, 0x72, 0x7c, 0xf1, 0x0c, 0xdf, 0x23, 0x4d, 0xfb, 0xcc, 0x26, 0x74, 0x78, 0x5e, 0xcd, + 0xeb, 0xf1, 0xd2, 0xbf, 0xc4, 0x00, 0x86, 0x57, 0x50, 0xf4, 0x00, 0x32, 0x66, 0xa7, 0xe3, 0x5e, + 0x18, 0x2e, 0xb5, 0x5b, 0xb6, 0x23, 0x8e, 0xab, 0x14, 0x4e, 0x8b, 0xb2, 0x23, 0x51, 0x84, 0x1e, + 0x42, 0x56, 0x42, 0xba, 0x84, 0xb5, 0x5d, 0xcb, 0x57, 0xa7, 0x8d, 0xb4, 0x3b, 0x90, 0x65, 0x43, + 0x50, 0xb0, 0x92, 0xd1, 0x11, 0x90, 0xda, 0xdd, 0xe8, 0x43, 0xc8, 0x91, 0x4b, 0xcf, 0x1d, 0x72, + 0x98, 0x88, 0x95, 0x14, 0xce, 0xca, 0xd2, 0x00, 0xb6, 0x0c, 0x89, 0xae, 0x79, 0x69, 0x98, 0x2d, + 0x22, 0xb4, 0x6c, 0x0a, 0xc7, 0xbb, 0xe6, 0x65, 0xa5, 0x45, 0xd0, 0x4b, 0x58, 0x90, 0x8d, 0x34, + 0x29, 0xb1, 0x88, 0xc3, 0x6c, 0xb3, 0xc3, 0x43, 0x66, 0x56, 0xb8, 0xe9, 0xc2, 0x68, 0x7b, 0x68, + 0x83, 0x3e, 0x85, 0x04, 0x71, 0xcc, 0xb7, 0x1d, 0x62, 0x29, 0xa9, 0x7b, 0x8d, 0x39, 0xe7, 0xb6, + 0xfa, 0x1c, 0x0e, 0x0c, 0xd0, 0x73, 0x40, 0xa3, 0x33, 0x66, 0xc8, 0x1d, 0x92, 0x14, 0x89, 0x99, + 0x3c, 0xdf, 0x21, 0xf0, 0xa5, 0x96, 0x28, 0xc9, 0x6d, 0xa2, 0x9a, 0x96, 0x13, 0x89, 0xc5, 0x7e, + 0x69, 0x40, 0x4e, 0xd1, 0x59, 0xd0, 0x83, 0xdb, 0x47, 0x43, 0x7d, 0x0e, 0x67, 0xa5, 0x93, 0x9a, + 0xea, 0x14, 0x86, 0x9c, 0xdf, 0x36, 0x2d, 0xf7, 0x62, 0xe0, 0x15, 0x6e, 0x1f, 0x63, 0x59, 0xe9, + 0x42, 0xf9, 0xac, 0xde, 0x81, 0x05, 0xe5, 0x6c, 0x18, 0x4b, 0xa5, 0x3f, 0x5a, 0x82, 0xf4, 0xc8, + 0xed, 0x07, 0x7d, 0x08, 0x09, 0xa5, 0x4d, 0x26, 0x64, 0x00, 0x9f, 0x34, 0x55, 0x87, 0x36, 0x21, + 0xa7, 0x1e, 0xd5, 0xd2, 0xcb, 0x20, 0x1a, 0x47, 0x67, 0x15, 0x44, 0xc6, 0x01, 0xc2, 0xb0, 0x70, + 0xa1, 0xf8, 0x7c, 0x98, 0x43, 0x92, 0x62, 0xe0, 0xe1, 0x0d, 0xc8, 0xbf, 0x3e, 0x87, 0xf5, 0x8b, + 0xf1, 0x22, 0x3f, 0x44, 0x5d, 0xc4, 0x6e, 0xad, 0x2e, 0x3e, 0x84, 0x9c, 0x64, 0x4d, 0x83, 0x92, + 0x0b, 0x6a, 0xb3, 0x20, 0x4a, 0xb3, 0xb2, 0x14, 0xcb, 0x42, 0xf4, 0x10, 0x32, 0x6d, 0xd7, 0x67, + 0x03, 0x50, 0x5c, 0x50, 0xab, 0x86, 0xd3, 0xbc, 0x34, 0x00, 0xd5, 0x61, 0xc1, 0xec, 0x31, 0xd7, + 0x18, 0x43, 0xce, 0x0c, 0xc9, 0xba, 0x86, 0xf3, 0xdc, 0xac, 0x3e, 0xe2, 0xe9, 0x29, 0x24, 0xf8, + 0xaa, 0xba, 0x3d, 0xa6, 0x48, 0x6b, 0x65, 0xc2, 0x7e, 0x47, 0xa5, 0x3c, 0xab, 0xb1, 0xbf, 0xfc, + 0xaf, 0xfb, 0x1a, 0x0e, 0xf0, 0x13, 0x39, 0x88, 0xd4, 0xed, 0x73, 0x10, 0xa8, 0x05, 0x77, 0x83, + 0xb3, 0xbe, 0x6b, 0x53, 0xea, 0xd2, 0xc0, 0x99, 0x8c, 0xc3, 0xc7, 0x33, 0x6e, 0xd1, 0x65, 0x95, + 0x8d, 0x39, 0x10, 0xb6, 0xaa, 0x81, 0x40, 0x73, 0x8d, 0x16, 0xa2, 0xcf, 0x20, 0xe9, 0x51, 0xdb, + 0xa5, 0x36, 0xeb, 0x17, 0xd2, 0x22, 0x55, 0x59, 0x0a, 0x8b, 0x71, 0xb7, 0xc7, 0x6c, 0xa7, 0x75, + 0xac, 0x90, 0x78, 0x60, 0x83, 0x7e, 0x30, 0x55, 0x1b, 0x66, 0x6e, 0x21, 0xd9, 0xb8, 0xde, 0x09, + 0x95, 0x84, 0x57, 0x12, 0x95, 0xd9, 0xdb, 0x26, 0x2a, 0x8f, 0x60, 0x29, 0x48, 0x62, 0x9d, 0xb7, + 0x8d, 0x51, 0x57, 0xb9, 0x99, 0x3c, 0x77, 0x47, 0x59, 0x9e, 0xb6, 0xf1, 0xd0, 0xe1, 0x2b, 0x48, + 0xb7, 0x4d, 0xbf, 0x1d, 0x2c, 0x87, 0x4c, 0x63, 0x3d, 0x9a, 0xb5, 0x1c, 0x75, 0xd3, 0x6f, 0xab, + 0x55, 0x80, 0xf6, 0xe0, 0x79, 0x90, 0xde, 0x5c, 0xb8, 0x45, 0x7a, 0xd3, 0x98, 0x2e, 0x92, 0xd1, + 0x2d, 0x67, 0x3c, 0x5c, 0x1b, 0x7f, 0xf7, 0x5a, 0x6d, 0x7c, 0x47, 0x10, 0x33, 0xb7, 0x9e, 0xaa, + 0x8f, 0xff, 0x4c, 0x83, 0xfb, 0x01, 0x3b, 0x39, 0x2e, 0x33, 0xce, 0xdc, 0x9e, 0x63, 0x0d, 0x92, + 0x21, 0x46, 0xd3, 0xb5, 0x48, 0x61, 0x51, 0x84, 0xda, 0xb3, 0x59, 0xf3, 0xa6, 0x88, 0xe6, 0xd0, + 0x65, 0x2f, 0xb8, 0x93, 0x20, 0x1d, 0xb2, 0xed, 0x5a, 0x44, 0xc9, 0xa7, 0x9f, 0x88, 0x5c, 0xd3, + 0x7b, 0xcd, 0xe9, 0x40, 0xb4, 0x0b, 0x3a, 0x3f, 0xff, 0xb8, 0x7c, 0x30, 0x82, 0x3d, 0xbd, 0x7c, + 0xb3, 0x3d, 0x9d, 0xeb, 0x9a, 0x97, 0x5c, 0x16, 0x34, 0xd4, 0xd6, 0xde, 0x87, 0x8c, 0x6d, 0x75, + 0xc8, 0xc0, 0x4d, 0x61, 0x96, 0x9b, 0x1c, 0x77, 0x23, 0x3a, 0xfa, 0xb7, 0x5a, 0xe4, 0xd1, 0x1c, + 0x4e, 0x73, 0xf3, 0xc0, 0xdb, 0x29, 0xe4, 0x7b, 0x5e, 0x8b, 0x9a, 0x16, 0x51, 0x5a, 0xdc, 0x2f, + 0xac, 0x88, 0x25, 0xfc, 0x78, 0xd6, 0xbc, 0xbc, 0x96, 0x66, 0x52, 0xe3, 0xe2, 0x5c, 0x6f, 0xf4, + 0xd5, 0x47, 0x1e, 0x14, 0x6c, 0x87, 0x11, 0xea, 0x98, 0x1d, 0x23, 0x48, 0x86, 0x19, 0x4a, 0x2b, + 0x15, 0xc5, 0xc4, 0x7f, 0x7b, 0x56, 0x03, 0xbb, 0xca, 0x7e, 0x3c, 0xbb, 0x86, 0x97, 0xec, 0xd0, + 0xf2, 0xe2, 0x3f, 0x69, 0x70, 0x27, 0x84, 0x72, 0xd0, 0xc3, 0xe9, 0xc7, 0xd9, 0xf0, 0x30, 0x7b, + 0x08, 0xe9, 0x91, 0x3b, 0xb8, 0x3a, 0xc9, 0x78, 0x84, 0xc1, 0xf0, 0x02, 0x1e, 0xaa, 0xfb, 0xa2, + 0x5f, 0x81, 0xee, 0xfb, 0xfb, 0x18, 0xc0, 0x70, 0x77, 0xa2, 0x57, 0x10, 0x57, 0x07, 0xaa, 0x4c, + 0x7a, 0x7e, 0x72, 0xf3, 0x9d, 0xad, 0x36, 0x19, 0xbf, 0x05, 0x48, 0x17, 0xdc, 0x59, 0xd3, 0x75, + 0x3f, 0xb7, 0x83, 0x5b, 0xc6, 0x6d, 0x9c, 0x6d, 0x0b, 0x43, 0xee, 0x4c, 0xba, 0x40, 0xe7, 0x70, + 0xb7, 0xe9, 0x3a, 0x0e, 0x11, 0x48, 0xc3, 0xa3, 0xae, 0x47, 0x28, 0xb3, 0x49, 0x70, 0x84, 0x7f, + 0xf7, 0x56, 0xbe, 0x03, 0x3f, 0xc7, 0x03, 0x37, 0xf5, 0x39, 0xbc, 0xd8, 0x0c, 0x29, 0x47, 0x45, + 0x48, 0x32, 0x42, 0xbb, 0xb6, 0x63, 0x76, 0xc4, 0xe1, 0x9e, 0xc4, 0x83, 0xf7, 0xe2, 0x16, 0xc4, + 0x95, 0xb8, 0x78, 0x04, 0x69, 0x39, 0x68, 0x23, 0x3c, 0x85, 0x01, 0xb2, 0xf6, 0xd0, 0xec, 0x92, + 0xa2, 0x03, 0x71, 0x39, 0xba, 0x59, 0x19, 0x8f, 0x4f, 0x20, 0xca, 0x58, 0x47, 0x4d, 0xde, 0xcc, + 0xbd, 0xca, 0xb1, 0x08, 0xa9, 0x8b, 0x97, 0x94, 0xcb, 0xe2, 0xb9, 0xf8, 0x18, 0x16, 0xc3, 0x46, + 0x8c, 0xde, 0x83, 0x94, 0xef, 0xf6, 0x68, 0x93, 0x18, 0xb6, 0x27, 0xba, 0x90, 0xc4, 0x49, 0x59, + 0xb0, 0xeb, 0x55, 0x57, 0x40, 0x97, 0x14, 0x3f, 0x21, 0xfc, 0x8b, 0x6d, 0xc8, 0x8e, 0xed, 0x3f, + 0x2e, 0xfa, 0x83, 0x7d, 0xcc, 0x2f, 0xbe, 0xea, 0x9e, 0x99, 0x56, 0x65, 0x22, 0x03, 0xbf, 0x35, + 0x54, 0xc8, 0x91, 0x99, 0x07, 0x4f, 0x00, 0x2d, 0xd5, 0xe0, 0xbd, 0x6b, 0x18, 0x10, 0x2d, 0xc3, + 0x9d, 0x93, 0x1a, 0x3e, 0xdd, 0xdd, 0xae, 0x19, 0xaf, 0x0f, 0x2b, 0xa7, 0x95, 0xdd, 0xfd, 0x4a, + 0x75, 0xbf, 0xa6, 0xcf, 0xa1, 0x2c, 0xa4, 0x0e, 0x8f, 0x1a, 0xc6, 0x8b, 0xa3, 0xd7, 0x87, 0x3b, + 0xba, 0x56, 0xfa, 0x1e, 0x2c, 0x85, 0xef, 0x67, 0x54, 0x82, 0xd5, 0xe3, 0xca, 0xc9, 0x89, 0xd1, + 0xa8, 0xe3, 0xa3, 0xd7, 0x2f, 0xeb, 0xc6, 0xee, 0xa1, 0xfa, 0x36, 0x80, 0x6b, 0x3b, 0xbb, 0xb8, + 0xb6, 0xdd, 0xd0, 0xe7, 0xd0, 0xfb, 0x50, 0xa8, 0x57, 0x0e, 0x77, 0xf6, 0x6b, 0x21, 0xb5, 0x5a, + 0xb5, 0x08, 0x0b, 0x01, 0xd7, 0x5f, 0x9d, 0xa8, 0x6a, 0x01, 0x96, 0x46, 0x85, 0xd8, 0x10, 0xb0, + 0x17, 0x4b, 0xea, 0xfa, 0xc2, 0x5e, 0x2c, 0xb9, 0xa4, 0x2f, 0xef, 0xc5, 0x92, 0x77, 0xf5, 0xa5, + 0xd2, 0xbf, 0xc5, 0x21, 0x3d, 0xa2, 0x86, 0xd0, 0x0a, 0x24, 0xa5, 0x88, 0x72, 0x1d, 0x35, 0x9f, + 0x09, 0xf1, 0x7e, 0xe4, 0xa0, 0xe7, 0x90, 0x76, 0x7a, 0x5d, 0x83, 0xbf, 0xf2, 0xf8, 0xbf, 0x49, + 0x36, 0x0c, 0x9c, 0x5e, 0x17, 0x4b, 0x3c, 0x7a, 0x09, 0x79, 0x8f, 0x50, 0x83, 0xfb, 0x0e, 0x68, + 0x3c, 0x7a, 0xb3, 0x08, 0xcb, 0x7a, 0x84, 0x36, 0x68, 0x3f, 0xa0, 0xef, 0x06, 0xe4, 0x94, 0xce, + 0x0b, 0x04, 0x94, 0x14, 0xbf, 0x1f, 0xcf, 0x50, 0x7a, 0xea, 0x39, 0xd0, 0x52, 0x59, 0x3a, 0xfa, + 0x8a, 0x2c, 0x58, 0x94, 0x5e, 0xc5, 0xd4, 0x79, 0x9c, 0xbf, 0x9b, 0xa6, 0x10, 0xc5, 0xfc, 0x64, + 0xd8, 0xbc, 0x91, 0x6f, 0x2e, 0x64, 0x8f, 0x03, 0x4b, 0x8c, 0xe8, 0x44, 0x19, 0xaa, 0xc3, 0x03, + 0xe1, 0xdf, 0x27, 0x1d, 0xc5, 0x28, 0xb2, 0x51, 0x71, 0x51, 0x94, 0x9f, 0xf0, 0xe4, 0x55, 0x30, + 0x8a, 0xef, 0x71, 0xe0, 0x49, 0x80, 0x13, 0xfe, 0x0f, 0xcc, 0x4b, 0xf5, 0x9d, 0xcf, 0x47, 0x5b, + 0x5c, 0x00, 0x32, 0x6a, 0xf3, 0x88, 0x35, 0x7c, 0x66, 0xb2, 0x9e, 0x2f, 0x8e, 0x78, 0x99, 0x36, + 0xc8, 0xe2, 0xc5, 0x41, 0xed, 0x89, 0xa8, 0xe4, 0x91, 0xeb, 0x17, 0xff, 0x4e, 0x83, 0xec, 0xd8, + 0x34, 0xcc, 0xe2, 0x82, 0x6f, 0x71, 0x2e, 0x15, 0xf9, 0xaa, 0xeb, 0x73, 0x42, 0xea, 0x7a, 0xa9, + 0xc0, 0xe8, 0x29, 0x64, 0x64, 0xde, 0x4b, 0x19, 0x47, 0xa7, 0xa7, 0x7b, 0xea, 0x73, 0x38, 0x2d, + 0xb0, 0x72, 0x57, 0x57, 0xb3, 0x90, 0x96, 0x46, 0x62, 0x53, 0x17, 0xff, 0x51, 0x03, 0x34, 0x39, + 0xb9, 0xff, 0xdf, 0xbb, 0x5d, 0xfa, 0x69, 0x0c, 0x72, 0x57, 0x36, 0xfd, 0x43, 0xc8, 0xaa, 0x6d, + 0xa9, 0xbe, 0xae, 0xc9, 0xfd, 0x95, 0x91, 0x17, 0x29, 0xf5, 0xed, 0xec, 0x43, 0xc8, 0x8a, 0xb4, + 0xc7, 0x00, 0x14, 0x51, 0xf7, 0xad, 0x0c, 0x2f, 0x1e, 0xc0, 0xda, 0x90, 0x1d, 0x17, 0x76, 0x51, + 0xa1, 0x2f, 0x9e, 0xcc, 0xfe, 0x52, 0x37, 0x78, 0x9d, 0x2a, 0xea, 0x32, 0x74, 0x94, 0xec, 0x3e, + 0x82, 0x5c, 0x9b, 0x31, 0xcf, 0x1f, 0xf6, 0x48, 0x9c, 0x46, 0xfc, 0x9e, 0x2b, 0xca, 0x07, 0x5d, + 0xfa, 0x28, 0xfc, 0x3e, 0x59, 0xd7, 0xae, 0xde, 0x28, 0xef, 0x43, 0xda, 0x67, 0xd4, 0xf6, 0x0c, + 0x91, 0xad, 0x12, 0xd1, 0x9e, 0xc4, 0x20, 0x8a, 0x44, 0x5a, 0x0b, 0x7d, 0x03, 0xf2, 0x7e, 0xb3, + 0x4d, 0xba, 0x64, 0xd8, 0x66, 0x42, 0x25, 0xf4, 0x72, 0xb2, 0x62, 0xd0, 0xe8, 0x43, 0xc8, 0x7a, + 0x2e, 0x1d, 0x99, 0x53, 0x7e, 0x69, 0xcc, 0xe2, 0x0c, 0x2f, 0x0c, 0x40, 0xa5, 0x0b, 0x58, 0x0c, + 0x1b, 0x34, 0xba, 0x0b, 0x0b, 0x07, 0x47, 0xa7, 0xb5, 0x1d, 0xe3, 0xb8, 0x86, 0x0f, 0x2a, 0x87, + 0xb5, 0xc3, 0xc6, 0xfe, 0x1b, 0x7d, 0x0e, 0xa5, 0x60, 0x5e, 0x31, 0x38, 0x27, 0xf4, 0x93, 0x5a, + 0xcd, 0x38, 0x6a, 0xd4, 0x6b, 0x58, 0x8f, 0xa0, 0x25, 0x40, 0x8d, 0xda, 0xc1, 0xf1, 0x11, 0xae, + 0xe0, 0x37, 0x43, 0x32, 0x8e, 0xf2, 0xf2, 0x81, 0x8b, 0x61, 0x79, 0xac, 0x5a, 0x84, 0xc2, 0x60, + 0x20, 0x57, 0xa8, 0x98, 0x93, 0xb4, 0x5a, 0xe8, 0x2b, 0x35, 0x25, 0x17, 0x16, 0xc3, 0xbe, 0x4e, + 0xa2, 0x0f, 0x20, 0x2e, 0xf7, 0xb9, 0x08, 0x9c, 0x6c, 0x35, 0xc3, 0xd7, 0x2c, 0xf1, 0x68, 0x5e, + 0xff, 0xf7, 0xd8, 0xba, 0x85, 0x55, 0x1d, 0xfa, 0x04, 0x62, 0x6f, 0x5d, 0xab, 0xaf, 0xe2, 0xfe, + 0x5e, 0x88, 0x48, 0xdb, 0x31, 0x99, 0x79, 0x22, 0xce, 0x5b, 0x2c, 0xa0, 0xa5, 0x2d, 0x48, 0x0d, + 0xbe, 0xa8, 0xa2, 0x8f, 0x20, 0xc5, 0x4f, 0x6a, 0xc1, 0xbf, 0x93, 0xbb, 0x6b, 0x58, 0x57, 0xfa, + 0x0b, 0x0d, 0x72, 0xe3, 0xbf, 0x77, 0x41, 0xbf, 0x05, 0x09, 0x8f, 0xb3, 0x18, 0x0d, 0x2c, 0x65, + 0x17, 0x29, 0x0f, 0x84, 0x1f, 0x27, 0x71, 0x50, 0x39, 0xd8, 0xbc, 0x91, 0xf0, 0xcd, 0xfb, 0x1d, + 0x88, 0xcb, 0x1c, 0x9d, 0x8a, 0xea, 0xb5, 0x30, 0xa5, 0xa9, 0x54, 0xaf, 0xc0, 0x61, 0x85, 0x2f, + 0xfd, 0x47, 0x0a, 0x52, 0x83, 0x4b, 0x23, 0x7a, 0x0e, 0xf3, 0x3e, 0x33, 0x5b, 0x44, 0x69, 0xca, + 0x9b, 0x7d, 0x2f, 0x2a, 0x00, 0x96, 0x56, 0x3c, 0x4e, 0x2d, 0xdb, 0x17, 0xfc, 0x3a, 0xd0, 0xc7, + 0x18, 0x54, 0x11, 0xd7, 0xc6, 0x7b, 0x90, 0x90, 0x6a, 0x36, 0xf8, 0xad, 0xd2, 0x07, 0xd7, 0x5e, + 0x90, 0xcb, 0x72, 0x1d, 0xc7, 0x7f, 0xf6, 0xa4, 0x1c, 0x14, 0xff, 0x3a, 0x09, 0x71, 0xb5, 0xce, + 0xdf, 0x87, 0x9c, 0xd2, 0x47, 0xa3, 0x1a, 0x7e, 0xda, 0x19, 0x74, 0xc5, 0x7b, 0x59, 0xae, 0xec, + 0x30, 0x79, 0x94, 0xf5, 0x47, 0x0b, 0xd0, 0x8f, 0xe0, 0x8e, 0x45, 0x7c, 0x66, 0x3b, 0x62, 0x11, + 0x07, 0x2d, 0xc8, 0x68, 0x79, 0x72, 0xa3, 0x16, 0x76, 0x86, 0xf6, 0xc3, 0x66, 0x90, 0x35, 0x51, + 0x8a, 0x7e, 0x08, 0xf9, 0x2b, 0x39, 0x0a, 0x45, 0xa8, 0x8f, 0x6f, 0xd4, 0x0e, 0x1e, 0xcb, 0x4b, + 0xf0, 0xcd, 0x3f, 0x9e, 0xa9, 0xe0, 0x13, 0xc5, 0x6f, 0xc7, 0x8c, 0xf0, 0x5b, 0x38, 0x25, 0xbe, + 0xaf, 0x84, 0xc0, 0xe6, 0x0d, 0xdd, 0x73, 0xd3, 0x8a, 0xb4, 0xe4, 0x13, 0x45, 0x47, 0x0b, 0x10, + 0x86, 0x74, 0x8b, 0x38, 0x84, 0xda, 0x4d, 0xb1, 0xfa, 0xf2, 0xd7, 0x08, 0x1b, 0x37, 0xf2, 0xfc, + 0x52, 0xda, 0xbd, 0x22, 0xfc, 0x90, 0x80, 0xd6, 0xe0, 0x0d, 0x11, 0x40, 0x4a, 0xad, 0x8b, 0x2f, + 0x1c, 0x2a, 0x75, 0x27, 0x33, 0xbf, 0xdf, 0xba, 0x91, 0xeb, 0x91, 0x84, 0x82, 0xc8, 0xe2, 0xd5, + 0xe7, 0xb0, 0xde, 0xbe, 0x52, 0x56, 0xcc, 0x43, 0x76, 0x2c, 0x0a, 0x8a, 0x8b, 0x80, 0x26, 0x17, + 0xad, 0xe8, 0xf0, 0x13, 0x6a, 0x6c, 0x42, 0x6f, 0x71, 0x9b, 0x40, 0xdf, 0x84, 0x9c, 0x45, 0xfc, + 0x26, 0xb5, 0x3d, 0xe6, 0xd2, 0x91, 0x0b, 0xe4, 0x08, 0x3c, 0x3b, 0x04, 0xbc, 0x22, 0x7d, 0xde, + 0xad, 0xb1, 0x39, 0x2f, 0x56, 0x01, 0x86, 0x53, 0x85, 0xb6, 0x40, 0x1f, 0x71, 0x28, 0xbf, 0x12, + 0x4d, 0xf4, 0x20, 0x3f, 0x84, 0x88, 0x01, 0x17, 0x7f, 0xa1, 0x81, 0x7e, 0x75, 0x52, 0x7e, 0x35, + 0x57, 0xe8, 0x39, 0x64, 0xc8, 0xa5, 0xc7, 0xef, 0xec, 0x72, 0x5d, 0x66, 0x5f, 0x18, 0xd2, 0x12, + 0x2f, 0x1b, 0x7d, 0x39, 0xfc, 0xfc, 0x13, 0xbd, 0xe1, 0xe7, 0x9f, 0x71, 0x2a, 0x50, 0xd6, 0xfc, + 0x0a, 0x24, 0x59, 0x61, 0x42, 0xd9, 0x97, 0xfe, 0x34, 0x0a, 0xd9, 0x31, 0x0f, 0xb3, 0x74, 0xd0, + 0x03, 0x48, 0x93, 0x4b, 0x73, 0x30, 0xa4, 0x98, 0x3a, 0x46, 0x41, 0x14, 0xca, 0x7e, 0x7f, 0x0c, + 0x69, 0x91, 0xfb, 0x57, 0x90, 0xf9, 0x90, 0x6f, 0x64, 0x20, 0x00, 0x12, 0xfe, 0x14, 0xd2, 0xe2, + 0xb7, 0xaa, 0x63, 0xc1, 0xbb, 0xa4, 0x86, 0xca, 0xa5, 0x4f, 0x79, 0xd7, 0x61, 0xdf, 0xde, 0xc2, + 0x1c, 0x23, 0x4c, 0xf9, 0x43, 0x90, 0x71, 0xe6, 0x4a, 0xc0, 0x27, 0x4e, 0xd0, 0x9d, 0x84, 0x52, + 0x12, 0x19, 0x55, 0x2c, 0x61, 0x0f, 0x20, 0x63, 0x3b, 0xe7, 0x84, 0x06, 0xa8, 0xa4, 0x10, 0x08, + 0x69, 0x59, 0x26, 0x21, 0x65, 0xc8, 0x28, 0xad, 0x21, 0x21, 0xa9, 0xc9, 0x2c, 0x7c, 0x5a, 0x02, + 0x06, 0x78, 0xbf, 0x77, 0x36, 0xc4, 0x43, 0x08, 0x5e, 0x02, 0xe4, 0x6f, 0xaa, 0xf8, 0x0d, 0x4a, + 0x6e, 0x04, 0x81, 0x1f, 0xbb, 0x41, 0x45, 0xf4, 0xe8, 0x5e, 0x2c, 0x19, 0xd5, 0x63, 0xa5, 0x3f, + 0xd4, 0xe0, 0x6e, 0xe8, 0x87, 0x38, 0xb4, 0x36, 0xb6, 0x2a, 0xe3, 0xa7, 0xa0, 0x5c, 0x98, 0xc5, + 0xe0, 0x43, 0xa8, 0xbc, 0x31, 0xcb, 0x17, 0xf4, 0xcd, 0xe0, 0x4b, 0xe5, 0xec, 0x8f, 0x8f, 0x12, + 0x58, 0xfd, 0xec, 0x6f, 0xde, 0xad, 0x6a, 0x3f, 0x7f, 0xb7, 0xaa, 0xfd, 0xe2, 0xdd, 0xaa, 0xf6, + 0xdf, 0xef, 0x56, 0x35, 0x58, 0xb3, 0x5d, 0xb9, 0x1a, 0x1e, 0x75, 0x2f, 0xfb, 0x21, 0x31, 0x78, + 0xac, 0x7d, 0x4f, 0xfe, 0xd4, 0xeb, 0x8f, 0x35, 0xed, 0x6d, 0x5c, 0xb8, 0x7e, 0xfc, 0x7f, 0x01, + 0x00, 0x00, 0xff, 0xff, 0xa0, 0xda, 0x77, 0xc3, 0xde, 0x2c, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.validate.go index 19cb8f63ba74..112e75b8f2f5 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.validate.go @@ -163,6 +163,16 @@ func (m *VirtualHost) Validate() error { // no validation rules for IncludeRequestAttemptCount + if v, ok := interface{}(m.GetRetryPolicy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + Field: "RetryPolicy", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + return nil } @@ -602,16 +612,44 @@ func (m *CorsPolicy) Validate() error { } } - if v, ok := interface{}(m.GetEnabled()).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetShadowEnabled()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CorsPolicyValidationError{ - Field: "Enabled", + Field: "ShadowEnabled", Reason: "embedded message failed validation", Cause: err, } } } + switch m.EnabledSpecifier.(type) { + + case *CorsPolicy_Enabled: + + if v, ok := interface{}(m.GetEnabled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CorsPolicyValidationError{ + Field: "Enabled", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + case *CorsPolicy_FilterEnabled: + + if v, ok := interface{}(m.GetFilterEnabled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CorsPolicyValidationError{ + Field: "FilterEnabled", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + } + return nil } @@ -824,6 +862,8 @@ func (m *RouteAction) Validate() error { } + // no validation rules for InternalRedirectAction + switch m.ClusterSpecifier.(type) { case *RouteAction_Cluster: @@ -917,6 +957,97 @@ func (e RouteActionValidationError) Error() string { var _ error = RouteActionValidationError{} +// Validate checks the field values on RetryPolicy with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *RetryPolicy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for RetryOn + + if v, ok := interface{}(m.GetNumRetries()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + Field: "NumRetries", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + if v, ok := interface{}(m.GetPerTryTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + Field: "PerTryTimeout", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + if v, ok := interface{}(m.GetRetryPriority()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + Field: "RetryPriority", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + for idx, item := range m.GetRetryHostPredicate() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + Field: fmt.Sprintf("RetryHostPredicate[%v]", idx), + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + } + + // no validation rules for HostSelectionRetryMaxAttempts + + return nil +} + +// RetryPolicyValidationError is the validation error returned by +// RetryPolicy.Validate if the designated constraints aren't met. +type RetryPolicyValidationError struct { + Field string + Reason string + Cause error + Key bool +} + +// Error satisfies the builtin error interface +func (e RetryPolicyValidationError) Error() string { + cause := "" + if e.Cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.Cause) + } + + key := "" + if e.Key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRetryPolicy.%s: %s%s", + key, + e.Field, + e.Reason, + cause) +} + +var _ error = RetryPolicyValidationError{} + // Validate checks the field values on RedirectAction with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. @@ -1555,97 +1686,6 @@ func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Error() string { var _ error = RouteMatch_GrpcRouteMatchOptionsValidationError{} -// Validate checks the field values on RouteAction_RetryPolicy with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RouteAction_RetryPolicy) Validate() error { - if m == nil { - return nil - } - - // no validation rules for RetryOn - - if v, ok := interface{}(m.GetNumRetries()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RouteAction_RetryPolicyValidationError{ - Field: "NumRetries", - Reason: "embedded message failed validation", - Cause: err, - } - } - } - - if v, ok := interface{}(m.GetPerTryTimeout()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RouteAction_RetryPolicyValidationError{ - Field: "PerTryTimeout", - Reason: "embedded message failed validation", - Cause: err, - } - } - } - - if v, ok := interface{}(m.GetRetryPriority()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RouteAction_RetryPolicyValidationError{ - Field: "RetryPriority", - Reason: "embedded message failed validation", - Cause: err, - } - } - } - - for idx, item := range m.GetRetryHostPredicate() { - _, _ = idx, item - - if v, ok := interface{}(item).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RouteAction_RetryPolicyValidationError{ - Field: fmt.Sprintf("RetryHostPredicate[%v]", idx), - Reason: "embedded message failed validation", - Cause: err, - } - } - } - - } - - // no validation rules for HostSelectionRetryMaxAttempts - - return nil -} - -// RouteAction_RetryPolicyValidationError is the validation error returned by -// RouteAction_RetryPolicy.Validate if the designated constraints aren't met. -type RouteAction_RetryPolicyValidationError struct { - Field string - Reason string - Cause error - Key bool -} - -// Error satisfies the builtin error interface -func (e RouteAction_RetryPolicyValidationError) Error() string { - cause := "" - if e.Cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.Cause) - } - - key := "" - if e.Key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteAction_RetryPolicy.%s: %s%s", - key, - e.Field, - e.Reason, - cause) -} - -var _ error = RouteAction_RetryPolicyValidationError{} - // Validate checks the field values on RouteAction_RequestMirrorPolicy with the // rules defined in the proto definition for this message. If any rules are // violated, an error is returned. @@ -1852,56 +1892,28 @@ func (e RouteAction_UpgradeConfigValidationError) Error() string { var _ error = RouteAction_UpgradeConfigValidationError{} -// Validate checks the field values on RouteAction_RetryPolicy_RetryPriority -// with the rules defined in the proto definition for this message. If any -// rules are violated, an error is returned. -func (m *RouteAction_RetryPolicy_RetryPriority) Validate() error { +// Validate checks the field values on RouteAction_HashPolicy_Header with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RouteAction_HashPolicy_Header) Validate() error { if m == nil { return nil } - if len(m.GetName()) < 1 { - return RouteAction_RetryPolicy_RetryPriorityValidationError{ - Field: "Name", + if len(m.GetHeaderName()) < 1 { + return RouteAction_HashPolicy_HeaderValidationError{ + Field: "HeaderName", Reason: "value length must be at least 1 bytes", } } - switch m.ConfigType.(type) { - - case *RouteAction_RetryPolicy_RetryPriority_Config: - - if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RouteAction_RetryPolicy_RetryPriorityValidationError{ - Field: "Config", - Reason: "embedded message failed validation", - Cause: err, - } - } - } - - case *RouteAction_RetryPolicy_RetryPriority_TypedConfig: - - if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RouteAction_RetryPolicy_RetryPriorityValidationError{ - Field: "TypedConfig", - Reason: "embedded message failed validation", - Cause: err, - } - } - } - - } - return nil } -// RouteAction_RetryPolicy_RetryPriorityValidationError is the validation error -// returned by RouteAction_RetryPolicy_RetryPriority.Validate if the -// designated constraints aren't met. -type RouteAction_RetryPolicy_RetryPriorityValidationError struct { +// RouteAction_HashPolicy_HeaderValidationError is the validation error +// returned by RouteAction_HashPolicy_Header.Validate if the designated +// constraints aren't met. +type RouteAction_HashPolicy_HeaderValidationError struct { Field string Reason string Cause error @@ -1909,7 +1921,7 @@ type RouteAction_RetryPolicy_RetryPriorityValidationError struct { } // Error satisfies the builtin error interface -func (e RouteAction_RetryPolicy_RetryPriorityValidationError) Error() string { +func (e RouteAction_HashPolicy_HeaderValidationError) Error() string { cause := "" if e.Cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.Cause) @@ -1921,65 +1933,49 @@ func (e RouteAction_RetryPolicy_RetryPriorityValidationError) Error() string { } return fmt.Sprintf( - "invalid %sRouteAction_RetryPolicy_RetryPriority.%s: %s%s", + "invalid %sRouteAction_HashPolicy_Header.%s: %s%s", key, e.Field, e.Reason, cause) } -var _ error = RouteAction_RetryPolicy_RetryPriorityValidationError{} +var _ error = RouteAction_HashPolicy_HeaderValidationError{} -// Validate checks the field values on -// RouteAction_RetryPolicy_RetryHostPredicate with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *RouteAction_RetryPolicy_RetryHostPredicate) Validate() error { +// Validate checks the field values on RouteAction_HashPolicy_Cookie with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RouteAction_HashPolicy_Cookie) Validate() error { if m == nil { return nil } if len(m.GetName()) < 1 { - return RouteAction_RetryPolicy_RetryHostPredicateValidationError{ + return RouteAction_HashPolicy_CookieValidationError{ Field: "Name", Reason: "value length must be at least 1 bytes", } } - switch m.ConfigType.(type) { - - case *RouteAction_RetryPolicy_RetryHostPredicate_Config: - - if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RouteAction_RetryPolicy_RetryHostPredicateValidationError{ - Field: "Config", - Reason: "embedded message failed validation", - Cause: err, - } - } - } - - case *RouteAction_RetryPolicy_RetryHostPredicate_TypedConfig: - - if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RouteAction_RetryPolicy_RetryHostPredicateValidationError{ - Field: "TypedConfig", - Reason: "embedded message failed validation", - Cause: err, - } + if v, ok := interface{}(m.GetTtl()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteAction_HashPolicy_CookieValidationError{ + Field: "Ttl", + Reason: "embedded message failed validation", + Cause: err, } } - } + // no validation rules for Path + return nil } -// RouteAction_RetryPolicy_RetryHostPredicateValidationError is the validation -// error returned by RouteAction_RetryPolicy_RetryHostPredicate.Validate if -// the designated constraints aren't met. -type RouteAction_RetryPolicy_RetryHostPredicateValidationError struct { +// RouteAction_HashPolicy_CookieValidationError is the validation error +// returned by RouteAction_HashPolicy_Cookie.Validate if the designated +// constraints aren't met. +type RouteAction_HashPolicy_CookieValidationError struct { Field string Reason string Cause error @@ -1987,7 +1983,7 @@ type RouteAction_RetryPolicy_RetryHostPredicateValidationError struct { } // Error satisfies the builtin error interface -func (e RouteAction_RetryPolicy_RetryHostPredicateValidationError) Error() string { +func (e RouteAction_HashPolicy_CookieValidationError) Error() string { cause := "" if e.Cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.Cause) @@ -1999,37 +1995,32 @@ func (e RouteAction_RetryPolicy_RetryHostPredicateValidationError) Error() strin } return fmt.Sprintf( - "invalid %sRouteAction_RetryPolicy_RetryHostPredicate.%s: %s%s", + "invalid %sRouteAction_HashPolicy_Cookie.%s: %s%s", key, e.Field, e.Reason, cause) } -var _ error = RouteAction_RetryPolicy_RetryHostPredicateValidationError{} +var _ error = RouteAction_HashPolicy_CookieValidationError{} -// Validate checks the field values on RouteAction_HashPolicy_Header with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RouteAction_HashPolicy_Header) Validate() error { +// Validate checks the field values on +// RouteAction_HashPolicy_ConnectionProperties with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *RouteAction_HashPolicy_ConnectionProperties) Validate() error { if m == nil { return nil } - if len(m.GetHeaderName()) < 1 { - return RouteAction_HashPolicy_HeaderValidationError{ - Field: "HeaderName", - Reason: "value length must be at least 1 bytes", - } - } + // no validation rules for SourceIp return nil } -// RouteAction_HashPolicy_HeaderValidationError is the validation error -// returned by RouteAction_HashPolicy_Header.Validate if the designated -// constraints aren't met. -type RouteAction_HashPolicy_HeaderValidationError struct { +// RouteAction_HashPolicy_ConnectionPropertiesValidationError is the validation +// error returned by RouteAction_HashPolicy_ConnectionProperties.Validate if +// the designated constraints aren't met. +type RouteAction_HashPolicy_ConnectionPropertiesValidationError struct { Field string Reason string Cause error @@ -2037,7 +2028,7 @@ type RouteAction_HashPolicy_HeaderValidationError struct { } // Error satisfies the builtin error interface -func (e RouteAction_HashPolicy_HeaderValidationError) Error() string { +func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Error() string { cause := "" if e.Cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.Cause) @@ -2049,49 +2040,64 @@ func (e RouteAction_HashPolicy_HeaderValidationError) Error() string { } return fmt.Sprintf( - "invalid %sRouteAction_HashPolicy_Header.%s: %s%s", + "invalid %sRouteAction_HashPolicy_ConnectionProperties.%s: %s%s", key, e.Field, e.Reason, cause) } -var _ error = RouteAction_HashPolicy_HeaderValidationError{} +var _ error = RouteAction_HashPolicy_ConnectionPropertiesValidationError{} -// Validate checks the field values on RouteAction_HashPolicy_Cookie with the -// rules defined in the proto definition for this message. If any rules are +// Validate checks the field values on RetryPolicy_RetryPriority with the rules +// defined in the proto definition for this message. If any rules are // violated, an error is returned. -func (m *RouteAction_HashPolicy_Cookie) Validate() error { +func (m *RetryPolicy_RetryPriority) Validate() error { if m == nil { return nil } if len(m.GetName()) < 1 { - return RouteAction_HashPolicy_CookieValidationError{ + return RetryPolicy_RetryPriorityValidationError{ Field: "Name", Reason: "value length must be at least 1 bytes", } } - if v, ok := interface{}(m.GetTtl()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return RouteAction_HashPolicy_CookieValidationError{ - Field: "Ttl", - Reason: "embedded message failed validation", - Cause: err, + switch m.ConfigType.(type) { + + case *RetryPolicy_RetryPriority_Config: + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicy_RetryPriorityValidationError{ + Field: "Config", + Reason: "embedded message failed validation", + Cause: err, + } } } - } - // no validation rules for Path + case *RetryPolicy_RetryPriority_TypedConfig: + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicy_RetryPriorityValidationError{ + Field: "TypedConfig", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + } return nil } -// RouteAction_HashPolicy_CookieValidationError is the validation error -// returned by RouteAction_HashPolicy_Cookie.Validate if the designated -// constraints aren't met. -type RouteAction_HashPolicy_CookieValidationError struct { +// RetryPolicy_RetryPriorityValidationError is the validation error returned by +// RetryPolicy_RetryPriority.Validate if the designated constraints aren't met. +type RetryPolicy_RetryPriorityValidationError struct { Field string Reason string Cause error @@ -2099,7 +2105,7 @@ type RouteAction_HashPolicy_CookieValidationError struct { } // Error satisfies the builtin error interface -func (e RouteAction_HashPolicy_CookieValidationError) Error() string { +func (e RetryPolicy_RetryPriorityValidationError) Error() string { cause := "" if e.Cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.Cause) @@ -2111,32 +2117,65 @@ func (e RouteAction_HashPolicy_CookieValidationError) Error() string { } return fmt.Sprintf( - "invalid %sRouteAction_HashPolicy_Cookie.%s: %s%s", + "invalid %sRetryPolicy_RetryPriority.%s: %s%s", key, e.Field, e.Reason, cause) } -var _ error = RouteAction_HashPolicy_CookieValidationError{} +var _ error = RetryPolicy_RetryPriorityValidationError{} -// Validate checks the field values on -// RouteAction_HashPolicy_ConnectionProperties with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *RouteAction_HashPolicy_ConnectionProperties) Validate() error { +// Validate checks the field values on RetryPolicy_RetryHostPredicate with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RetryPolicy_RetryHostPredicate) Validate() error { if m == nil { return nil } - // no validation rules for SourceIp + if len(m.GetName()) < 1 { + return RetryPolicy_RetryHostPredicateValidationError{ + Field: "Name", + Reason: "value length must be at least 1 bytes", + } + } + + switch m.ConfigType.(type) { + + case *RetryPolicy_RetryHostPredicate_Config: + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicy_RetryHostPredicateValidationError{ + Field: "Config", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + case *RetryPolicy_RetryHostPredicate_TypedConfig: + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicy_RetryHostPredicateValidationError{ + Field: "TypedConfig", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + } return nil } -// RouteAction_HashPolicy_ConnectionPropertiesValidationError is the validation -// error returned by RouteAction_HashPolicy_ConnectionProperties.Validate if -// the designated constraints aren't met. -type RouteAction_HashPolicy_ConnectionPropertiesValidationError struct { +// RetryPolicy_RetryHostPredicateValidationError is the validation error +// returned by RetryPolicy_RetryHostPredicate.Validate if the designated +// constraints aren't met. +type RetryPolicy_RetryHostPredicateValidationError struct { Field string Reason string Cause error @@ -2144,7 +2183,7 @@ type RouteAction_HashPolicy_ConnectionPropertiesValidationError struct { } // Error satisfies the builtin error interface -func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Error() string { +func (e RetryPolicy_RetryHostPredicateValidationError) Error() string { cause := "" if e.Cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.Cause) @@ -2156,14 +2195,14 @@ func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Error() stri } return fmt.Sprintf( - "invalid %sRouteAction_HashPolicy_ConnectionProperties.%s: %s%s", + "invalid %sRetryPolicy_RetryHostPredicate.%s: %s%s", key, e.Field, e.Reason, cause) } -var _ error = RouteAction_HashPolicy_ConnectionPropertiesValidationError{} +var _ error = RetryPolicy_RetryHostPredicateValidationError{} // Validate checks the field values on RateLimit_Action with the rules defined // in the proto definition for this message. If any rules are violated, an diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v2/als.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v2/als.pb.go index edcd3ade1f6d..595428e3d881 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v2/als.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v2/als.pb.go @@ -46,7 +46,7 @@ func (m *HttpGrpcAccessLogConfig) Reset() { *m = HttpGrpcAccessLogConfig func (m *HttpGrpcAccessLogConfig) String() string { return proto.CompactTextString(m) } func (*HttpGrpcAccessLogConfig) ProtoMessage() {} func (*HttpGrpcAccessLogConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_als_e1ce8e0c0099b8bf, []int{0} + return fileDescriptor_als_a3fb2e2e68447b99, []int{0} } func (m *HttpGrpcAccessLogConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -117,7 +117,7 @@ func (m *TcpGrpcAccessLogConfig) Reset() { *m = TcpGrpcAccessLogConfig{} func (m *TcpGrpcAccessLogConfig) String() string { return proto.CompactTextString(m) } func (*TcpGrpcAccessLogConfig) ProtoMessage() {} func (*TcpGrpcAccessLogConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_als_e1ce8e0c0099b8bf, []int{1} + return fileDescriptor_als_a3fb2e2e68447b99, []int{1} } func (m *TcpGrpcAccessLogConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -170,7 +170,7 @@ func (m *CommonGrpcAccessLogConfig) Reset() { *m = CommonGrpcAccessLogCo func (m *CommonGrpcAccessLogConfig) String() string { return proto.CompactTextString(m) } func (*CommonGrpcAccessLogConfig) ProtoMessage() {} func (*CommonGrpcAccessLogConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_als_e1ce8e0c0099b8bf, []int{2} + return fileDescriptor_als_a3fb2e2e68447b99, []int{2} } func (m *CommonGrpcAccessLogConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -928,34 +928,34 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/accesslog/v2/als.proto", fileDescriptor_als_e1ce8e0c0099b8bf) -} - -var fileDescriptor_als_e1ce8e0c0099b8bf = []byte{ - // 388 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x92, 0xbd, 0xae, 0xd3, 0x30, - 0x14, 0xc7, 0xe5, 0xb4, 0x7c, 0xd4, 0x2d, 0x52, 0x95, 0x81, 0x7e, 0x48, 0x84, 0x92, 0x76, 0xe8, - 0x94, 0x48, 0x81, 0x17, 0xa0, 0x1d, 0xa8, 0x50, 0x61, 0x08, 0x9d, 0x58, 0x22, 0xe3, 0x18, 0x63, - 0xc9, 0xc9, 0x09, 0xb6, 0x89, 0xc4, 0xc4, 0xce, 0xc4, 0xf3, 0x30, 0x31, 0x32, 0xf2, 0x08, 0xa8, - 0x62, 0xe1, 0x2d, 0xae, 0x62, 0xf7, 0xde, 0x9b, 0xde, 0xdb, 0xce, 0x77, 0xb3, 0x74, 0x7e, 0xe7, - 0xf7, 0xff, 0xcb, 0x3a, 0x78, 0xce, 0xca, 0x1a, 0xbe, 0xc6, 0x14, 0xca, 0x8f, 0x82, 0xc7, 0x84, - 0x52, 0xa6, 0xb5, 0x04, 0x1e, 0xd7, 0x49, 0x4c, 0xa4, 0x8e, 0x2a, 0x05, 0x06, 0xfc, 0x89, 0x85, - 0x22, 0x07, 0x45, 0x57, 0x50, 0x54, 0x27, 0xd3, 0x85, 0xdb, 0x27, 0x95, 0x68, 0x56, 0x28, 0x28, - 0x16, 0x73, 0x55, 0xd1, 0x4c, 0x33, 0x55, 0x0b, 0xca, 0x9c, 0x60, 0x3a, 0xaa, 0x89, 0x14, 0x39, - 0x31, 0x2c, 0xbe, 0x7c, 0xb8, 0x41, 0xf8, 0xcf, 0xc3, 0xa3, 0x8d, 0x31, 0xd5, 0x2b, 0x55, 0xd1, - 0x97, 0xd6, 0xbb, 0x05, 0xbe, 0xb6, 0x39, 0x3e, 0xc3, 0x8f, 0x28, 0x14, 0x05, 0x94, 0x99, 0x0b, - 0x1e, 0xa3, 0x19, 0x5a, 0xf6, 0x93, 0x17, 0xd1, 0xd9, 0x36, 0xd1, 0xda, 0xf2, 0x27, 0x64, 0x2b, - 0xfc, 0xf3, 0xff, 0xaf, 0xce, 0xbd, 0xef, 0xc8, 0x1b, 0xa2, 0x74, 0xe0, 0xb4, 0x87, 0x98, 0x0d, - 0x7e, 0x46, 0xf2, 0x5c, 0x18, 0x01, 0x25, 0x91, 0x99, 0x62, 0x9f, 0xbf, 0x30, 0x6d, 0xb2, 0x4f, - 0x8c, 0xe4, 0x4c, 0xe9, 0xcc, 0x40, 0x26, 0x81, 0x8f, 0xbd, 0x59, 0x67, 0xd9, 0x4b, 0x9f, 0x5c, - 0x83, 0xa9, 0xe3, 0x36, 0x0e, 0xdb, 0xc1, 0x16, 0xb8, 0xff, 0x1a, 0x87, 0x47, 0x26, 0x5d, 0x41, - 0xa9, 0xd9, 0x4d, 0x55, 0xc7, 0xaa, 0x82, 0xb6, 0xca, 0x81, 0x47, 0xae, 0x2d, 0x9e, 0x9f, 0x72, - 0x19, 0x45, 0x84, 0x6c, 0xc9, 0xba, 0x56, 0xf6, 0xf4, 0xb6, 0x6c, 0x77, 0x00, 0xad, 0x2d, 0xfc, - 0x86, 0x1f, 0xef, 0xe8, 0x1d, 0x7e, 0x72, 0xf8, 0x03, 0xe1, 0xc9, 0xd9, 0x3d, 0x7f, 0x81, 0x1f, - 0x4a, 0xe0, 0x59, 0x49, 0x0a, 0x66, 0xf3, 0x7b, 0xab, 0x5e, 0x63, 0xea, 0x2a, 0x6f, 0x86, 0xd2, - 0x07, 0x12, 0xf8, 0x5b, 0x52, 0x30, 0xff, 0x0d, 0x1e, 0xb4, 0x4f, 0x6b, 0xec, 0xd9, 0xa6, 0xc1, - 0xa1, 0x29, 0xa9, 0x44, 0x53, 0xae, 0xb9, 0xc0, 0xa8, 0xc9, 0x78, 0xe7, 0xa8, 0xa3, 0x4e, 0x7d, - 0xde, 0x1a, 0x0c, 0x7f, 0xef, 0x03, 0xf4, 0x67, 0x1f, 0xa0, 0xbf, 0xfb, 0x00, 0xbd, 0xf7, 0xea, - 0xe4, 0xc3, 0x7d, 0x7b, 0x93, 0xcf, 0x2f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xcd, 0x83, 0xee, - 0x14, 0x03, 0x00, 0x00, + proto.RegisterFile("envoy/config/accesslog/v2/als.proto", fileDescriptor_als_a3fb2e2e68447b99) +} + +var fileDescriptor_als_a3fb2e2e68447b99 = []byte{ + // 400 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x92, 0x3d, 0xaf, 0xd3, 0x30, + 0x14, 0x86, 0xe5, 0xf4, 0xf2, 0x51, 0xdf, 0x8b, 0x84, 0x32, 0xd0, 0x0f, 0x89, 0x50, 0xd2, 0x4a, + 0x74, 0x4a, 0xa4, 0xc0, 0xc6, 0x44, 0x3b, 0x50, 0xa1, 0x82, 0x50, 0xe8, 0xc4, 0x12, 0x19, 0xc7, + 0x18, 0x4b, 0x4e, 0x8e, 0xb1, 0x4d, 0x44, 0x27, 0x76, 0x26, 0x7e, 0x0f, 0x13, 0x23, 0x23, 0x3f, + 0x01, 0x55, 0x2c, 0xfc, 0x0b, 0x14, 0xbb, 0x40, 0x0a, 0xed, 0x7c, 0xb7, 0x48, 0xe7, 0x39, 0xcf, + 0xfb, 0xc6, 0x3a, 0x78, 0xca, 0xea, 0x06, 0xb6, 0x29, 0x85, 0xfa, 0xb5, 0xe0, 0x29, 0xa1, 0x94, + 0x19, 0x23, 0x81, 0xa7, 0x4d, 0x96, 0x12, 0x69, 0x12, 0xa5, 0xc1, 0x42, 0x38, 0x72, 0x50, 0xe2, + 0xa1, 0xe4, 0x0f, 0x94, 0x34, 0xd9, 0x78, 0xe6, 0xf7, 0x89, 0x12, 0xed, 0x0a, 0x05, 0xcd, 0x52, + 0xae, 0x15, 0x2d, 0x0c, 0xd3, 0x8d, 0xa0, 0xcc, 0x0b, 0xc6, 0x83, 0x86, 0x48, 0x51, 0x12, 0xcb, + 0xd2, 0xdf, 0x1f, 0x7e, 0x10, 0xff, 0x08, 0xf0, 0x60, 0x65, 0xad, 0x7a, 0xac, 0x15, 0x7d, 0xe4, + 0xbc, 0x6b, 0xe0, 0x4b, 0x97, 0x13, 0x32, 0x7c, 0x83, 0x42, 0x55, 0x41, 0x5d, 0xf8, 0xe0, 0x21, + 0x9a, 0xa0, 0xf9, 0x79, 0xf6, 0x20, 0x39, 0xd9, 0x26, 0x59, 0x3a, 0xfe, 0x88, 0x6c, 0x81, 0x3f, + 0xff, 0xfc, 0xd2, 0xbb, 0xf2, 0x11, 0x05, 0x37, 0x51, 0x7e, 0xe1, 0xb5, 0xfb, 0x98, 0x15, 0xbe, + 0x4b, 0xca, 0x52, 0x58, 0x01, 0x35, 0x91, 0x85, 0x66, 0x6f, 0xdf, 0x31, 0x63, 0x8b, 0x37, 0x8c, + 0x94, 0x4c, 0x9b, 0xc2, 0x42, 0x21, 0x81, 0x0f, 0x83, 0x49, 0x6f, 0xde, 0xcf, 0x6f, 0xff, 0x05, + 0x73, 0xcf, 0xad, 0x3c, 0xb6, 0x81, 0x35, 0xf0, 0xf0, 0x09, 0x8e, 0x0f, 0x4c, 0x46, 0x41, 0x6d, + 0xd8, 0xbf, 0xaa, 0x9e, 0x53, 0x45, 0x5d, 0x95, 0x07, 0x0f, 0x5c, 0x6b, 0x3c, 0x3d, 0xe6, 0xb2, + 0x9a, 0x08, 0xd9, 0x91, 0x9d, 0x39, 0xd9, 0x9d, 0xff, 0x65, 0x9b, 0x3d, 0xe8, 0x6c, 0xf1, 0x07, + 0x7c, 0x6b, 0x43, 0x2f, 0xf1, 0x91, 0xe3, 0x4f, 0x08, 0x8f, 0x4e, 0xee, 0x85, 0x33, 0x7c, 0x5d, + 0x02, 0x2f, 0x6a, 0x52, 0x31, 0x97, 0xdf, 0x5f, 0xf4, 0x5b, 0xd3, 0x99, 0x0e, 0x26, 0x28, 0xbf, + 0x26, 0x81, 0x3f, 0x23, 0x15, 0x0b, 0x9f, 0xe2, 0x8b, 0xee, 0x69, 0x0d, 0x03, 0xd7, 0x34, 0xda, + 0x37, 0x25, 0x4a, 0xb4, 0xe5, 0xda, 0x0b, 0x4c, 0xda, 0x8c, 0x17, 0x9e, 0x3a, 0xe8, 0x74, 0xce, + 0x3b, 0x83, 0x87, 0x5f, 0x77, 0x11, 0xfa, 0xb6, 0x8b, 0xd0, 0xf7, 0x5d, 0x84, 0xf0, 0x3d, 0x01, + 0x5e, 0xa4, 0x34, 0xbc, 0xdf, 0x9e, 0xfe, 0xfb, 0xe7, 0xe8, 0x65, 0xd0, 0x64, 0xaf, 0xae, 0xba, + 0xf3, 0xbd, 0xff, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x5c, 0xbd, 0xbb, 0xbc, 0x3f, 0x03, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v2/file.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v2/file.pb.go index 8ab86aaefb30..2472be8ea42a 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v2/file.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v2/file.pb.go @@ -45,7 +45,7 @@ func (m *FileAccessLog) Reset() { *m = FileAccessLog{} } func (m *FileAccessLog) String() string { return proto.CompactTextString(m) } func (*FileAccessLog) ProtoMessage() {} func (*FileAccessLog) Descriptor() ([]byte, []int) { - return fileDescriptor_file_f3ece1fa5088fe2b, []int{0} + return fileDescriptor_file_baa5c59e70d5df3e, []int{0} } func (m *FileAccessLog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -558,11 +558,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/accesslog/v2/file.proto", fileDescriptor_file_f3ece1fa5088fe2b) + proto.RegisterFile("envoy/config/accesslog/v2/file.proto", fileDescriptor_file_baa5c59e70d5df3e) } -var fileDescriptor_file_f3ece1fa5088fe2b = []byte{ - // 248 bytes of a gzipped FileDescriptorProto +var fileDescriptor_file_baa5c59e70d5df3e = []byte{ + // 266 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x49, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0x4c, 0x4e, 0x4e, 0x2d, 0x2e, 0xce, 0xc9, 0x4f, 0xd7, 0x2f, 0x33, 0xd2, 0x4f, 0xcb, 0xcc, 0x49, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, @@ -576,7 +576,8 @@ var fileDescriptor_file_f3ece1fa5088fe2b = []byte{ 0xf9, 0x42, 0x56, 0x5c, 0xdc, 0x59, 0xc5, 0xf9, 0x79, 0xf1, 0x50, 0x69, 0x66, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x71, 0x3d, 0x88, 0xf5, 0x7a, 0x30, 0xeb, 0xf5, 0x82, 0xc1, 0xd6, 0x7b, 0x30, 0x04, 0x71, 0x81, 0x54, 0xbb, 0x81, 0x15, 0x3b, 0x09, 0x73, 0x09, 0x42, 0x7c, 0x13, 0x9f, 0x93, 0x9f, - 0x0e, 0x35, 0xc1, 0x49, 0xe0, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, - 0x63, 0x8c, 0x62, 0x2a, 0x33, 0x4a, 0x62, 0x03, 0x9b, 0x62, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, - 0xf5, 0xb3, 0x8d, 0xf2, 0x2e, 0x01, 0x00, 0x00, + 0x0e, 0x35, 0xc1, 0xc9, 0xfa, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, + 0x63, 0xe4, 0x52, 0xcf, 0xcc, 0xd7, 0x03, 0x7b, 0xbf, 0xa0, 0x28, 0xbf, 0xa2, 0x52, 0x0f, 0x67, + 0x48, 0x04, 0x30, 0x46, 0x31, 0x95, 0x19, 0x25, 0xb1, 0x81, 0x2d, 0x34, 0x06, 0x04, 0x00, 0x00, + 0xff, 0xff, 0xaa, 0x33, 0x09, 0xdb, 0x59, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v2/bootstrap.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v2/bootstrap.pb.go index 3b91a49403d9..72dc79114558 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v2/bootstrap.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v2/bootstrap.pb.go @@ -86,7 +86,7 @@ func (m *Bootstrap) Reset() { *m = Bootstrap{} } func (m *Bootstrap) String() string { return proto.CompactTextString(m) } func (*Bootstrap) ProtoMessage() {} func (*Bootstrap) Descriptor() ([]byte, []int) { - return fileDescriptor_bootstrap_b54220b856e1e3fe, []int{0} + return fileDescriptor_bootstrap_8fe415d0148933ad, []int{0} } func (m *Bootstrap) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -244,7 +244,7 @@ func (m *Bootstrap_StaticResources) Reset() { *m = Bootstrap_StaticResou func (m *Bootstrap_StaticResources) String() string { return proto.CompactTextString(m) } func (*Bootstrap_StaticResources) ProtoMessage() {} func (*Bootstrap_StaticResources) Descriptor() ([]byte, []int) { - return fileDescriptor_bootstrap_b54220b856e1e3fe, []int{0, 0} + return fileDescriptor_bootstrap_8fe415d0148933ad, []int{0, 0} } func (m *Bootstrap_StaticResources) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -309,19 +309,17 @@ type Bootstrap_DynamicResources struct { // :ref:`ConfigSources ` that have // the :ref:`ads ` field set will be // streamed on the ADS channel. - AdsConfig *core.ApiConfigSource `protobuf:"bytes,3,opt,name=ads_config,json=adsConfig,proto3" json:"ads_config,omitempty"` - // [#not-implemented-hide:] Hide from docs. - DeprecatedV1 *Bootstrap_DynamicResources_DeprecatedV1 `protobuf:"bytes,4,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` // Deprecated: Do not use. - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + AdsConfig *core.ApiConfigSource `protobuf:"bytes,3,opt,name=ads_config,json=adsConfig,proto3" json:"ads_config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Bootstrap_DynamicResources) Reset() { *m = Bootstrap_DynamicResources{} } func (m *Bootstrap_DynamicResources) String() string { return proto.CompactTextString(m) } func (*Bootstrap_DynamicResources) ProtoMessage() {} func (*Bootstrap_DynamicResources) Descriptor() ([]byte, []int) { - return fileDescriptor_bootstrap_b54220b856e1e3fe, []int{0, 1} + return fileDescriptor_bootstrap_8fe415d0148933ad, []int{0, 1} } func (m *Bootstrap_DynamicResources) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -371,65 +369,6 @@ func (m *Bootstrap_DynamicResources) GetAdsConfig() *core.ApiConfigSource { return nil } -// Deprecated: Do not use. -func (m *Bootstrap_DynamicResources) GetDeprecatedV1() *Bootstrap_DynamicResources_DeprecatedV1 { - if m != nil { - return m.DeprecatedV1 - } - return nil -} - -// [#not-implemented-hide:] Hide from docs. -type Bootstrap_DynamicResources_DeprecatedV1 struct { - // Deprecated service discovery service config for when using API v1 REST. - SdsConfig *core.ConfigSource `protobuf:"bytes,1,opt,name=sds_config,json=sdsConfig,proto3" json:"sds_config,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Bootstrap_DynamicResources_DeprecatedV1) Reset() { - *m = Bootstrap_DynamicResources_DeprecatedV1{} -} -func (m *Bootstrap_DynamicResources_DeprecatedV1) String() string { return proto.CompactTextString(m) } -func (*Bootstrap_DynamicResources_DeprecatedV1) ProtoMessage() {} -func (*Bootstrap_DynamicResources_DeprecatedV1) Descriptor() ([]byte, []int) { - return fileDescriptor_bootstrap_b54220b856e1e3fe, []int{0, 1, 0} -} -func (m *Bootstrap_DynamicResources_DeprecatedV1) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Bootstrap_DynamicResources_DeprecatedV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Bootstrap_DynamicResources_DeprecatedV1.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (dst *Bootstrap_DynamicResources_DeprecatedV1) XXX_Merge(src proto.Message) { - xxx_messageInfo_Bootstrap_DynamicResources_DeprecatedV1.Merge(dst, src) -} -func (m *Bootstrap_DynamicResources_DeprecatedV1) XXX_Size() int { - return m.Size() -} -func (m *Bootstrap_DynamicResources_DeprecatedV1) XXX_DiscardUnknown() { - xxx_messageInfo_Bootstrap_DynamicResources_DeprecatedV1.DiscardUnknown(m) -} - -var xxx_messageInfo_Bootstrap_DynamicResources_DeprecatedV1 proto.InternalMessageInfo - -func (m *Bootstrap_DynamicResources_DeprecatedV1) GetSdsConfig() *core.ConfigSource { - if m != nil { - return m.SdsConfig - } - return nil -} - // Administration interface :ref:`operations documentation // `. type Admin struct { @@ -452,7 +391,7 @@ func (m *Admin) Reset() { *m = Admin{} } func (m *Admin) String() string { return proto.CompactTextString(m) } func (*Admin) ProtoMessage() {} func (*Admin) Descriptor() ([]byte, []int) { - return fileDescriptor_bootstrap_b54220b856e1e3fe, []int{1} + return fileDescriptor_bootstrap_8fe415d0148933ad, []int{1} } func (m *Admin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -533,7 +472,7 @@ func (m *ClusterManager) Reset() { *m = ClusterManager{} } func (m *ClusterManager) String() string { return proto.CompactTextString(m) } func (*ClusterManager) ProtoMessage() {} func (*ClusterManager) Descriptor() ([]byte, []int) { - return fileDescriptor_bootstrap_b54220b856e1e3fe, []int{2} + return fileDescriptor_bootstrap_8fe415d0148933ad, []int{2} } func (m *ClusterManager) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -602,7 +541,7 @@ func (m *ClusterManager_OutlierDetection) Reset() { *m = ClusterManager_ func (m *ClusterManager_OutlierDetection) String() string { return proto.CompactTextString(m) } func (*ClusterManager_OutlierDetection) ProtoMessage() {} func (*ClusterManager_OutlierDetection) Descriptor() ([]byte, []int) { - return fileDescriptor_bootstrap_b54220b856e1e3fe, []int{2, 0} + return fileDescriptor_bootstrap_8fe415d0148933ad, []int{2, 0} } func (m *ClusterManager_OutlierDetection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -665,7 +604,7 @@ func (m *Watchdog) Reset() { *m = Watchdog{} } func (m *Watchdog) String() string { return proto.CompactTextString(m) } func (*Watchdog) ProtoMessage() {} func (*Watchdog) Descriptor() ([]byte, []int) { - return fileDescriptor_bootstrap_b54220b856e1e3fe, []int{3} + return fileDescriptor_bootstrap_8fe415d0148933ad, []int{3} } func (m *Watchdog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -750,7 +689,7 @@ func (m *Runtime) Reset() { *m = Runtime{} } func (m *Runtime) String() string { return proto.CompactTextString(m) } func (*Runtime) ProtoMessage() {} func (*Runtime) Descriptor() ([]byte, []int) { - return fileDescriptor_bootstrap_b54220b856e1e3fe, []int{4} + return fileDescriptor_bootstrap_8fe415d0148933ad, []int{4} } func (m *Runtime) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -804,7 +743,6 @@ func init() { proto.RegisterType((*Bootstrap)(nil), "envoy.config.bootstrap.v2.Bootstrap") proto.RegisterType((*Bootstrap_StaticResources)(nil), "envoy.config.bootstrap.v2.Bootstrap.StaticResources") proto.RegisterType((*Bootstrap_DynamicResources)(nil), "envoy.config.bootstrap.v2.Bootstrap.DynamicResources") - proto.RegisterType((*Bootstrap_DynamicResources_DeprecatedV1)(nil), "envoy.config.bootstrap.v2.Bootstrap.DynamicResources.DeprecatedV1") proto.RegisterType((*Admin)(nil), "envoy.config.bootstrap.v2.Admin") proto.RegisterType((*ClusterManager)(nil), "envoy.config.bootstrap.v2.ClusterManager") proto.RegisterType((*ClusterManager_OutlierDetection)(nil), "envoy.config.bootstrap.v2.ClusterManager.OutlierDetection") @@ -1082,47 +1020,6 @@ func (m *Bootstrap_DynamicResources) MarshalTo(dAtA []byte) (int, error) { } i += n16 } - if m.DeprecatedV1 != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintBootstrap(dAtA, i, uint64(m.DeprecatedV1.Size())) - n17, err := m.DeprecatedV1.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Bootstrap_DynamicResources_DeprecatedV1) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Bootstrap_DynamicResources_DeprecatedV1) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.SdsConfig != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintBootstrap(dAtA, i, uint64(m.SdsConfig.Size())) - n18, err := m.SdsConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -1160,11 +1057,11 @@ func (m *Admin) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintBootstrap(dAtA, i, uint64(m.Address.Size())) - n19, err := m.Address.MarshalTo(dAtA[i:]) + n17, err := m.Address.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n19 + i += n17 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -1197,31 +1094,31 @@ func (m *ClusterManager) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintBootstrap(dAtA, i, uint64(m.OutlierDetection.Size())) - n20, err := m.OutlierDetection.MarshalTo(dAtA[i:]) + n18, err := m.OutlierDetection.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n20 + i += n18 } if m.UpstreamBindConfig != nil { dAtA[i] = 0x1a i++ i = encodeVarintBootstrap(dAtA, i, uint64(m.UpstreamBindConfig.Size())) - n21, err := m.UpstreamBindConfig.MarshalTo(dAtA[i:]) + n19, err := m.UpstreamBindConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n21 + i += n19 } if m.LoadStatsConfig != nil { dAtA[i] = 0x22 i++ i = encodeVarintBootstrap(dAtA, i, uint64(m.LoadStatsConfig.Size())) - n22, err := m.LoadStatsConfig.MarshalTo(dAtA[i:]) + n20, err := m.LoadStatsConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n22 + i += n20 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -1275,41 +1172,41 @@ func (m *Watchdog) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintBootstrap(dAtA, i, uint64(m.MissTimeout.Size())) - n23, err := m.MissTimeout.MarshalTo(dAtA[i:]) + n21, err := m.MissTimeout.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n23 + i += n21 } if m.MegamissTimeout != nil { dAtA[i] = 0x12 i++ i = encodeVarintBootstrap(dAtA, i, uint64(m.MegamissTimeout.Size())) - n24, err := m.MegamissTimeout.MarshalTo(dAtA[i:]) + n22, err := m.MegamissTimeout.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n24 + i += n22 } if m.KillTimeout != nil { dAtA[i] = 0x1a i++ i = encodeVarintBootstrap(dAtA, i, uint64(m.KillTimeout.Size())) - n25, err := m.KillTimeout.MarshalTo(dAtA[i:]) + n23, err := m.KillTimeout.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n25 + i += n23 } if m.MultikillTimeout != nil { dAtA[i] = 0x22 i++ i = encodeVarintBootstrap(dAtA, i, uint64(m.MultikillTimeout.Size())) - n26, err := m.MultikillTimeout.MarshalTo(dAtA[i:]) + n24, err := m.MultikillTimeout.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n26 + i += n24 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -1487,26 +1384,6 @@ func (m *Bootstrap_DynamicResources) Size() (n int) { l = m.AdsConfig.Size() n += 1 + l + sovBootstrap(uint64(l)) } - if m.DeprecatedV1 != nil { - l = m.DeprecatedV1.Size() - n += 1 + l + sovBootstrap(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Bootstrap_DynamicResources_DeprecatedV1) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SdsConfig != nil { - l = m.SdsConfig.Size() - n += 1 + l + sovBootstrap(uint64(l)) - } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -2458,123 +2335,6 @@ func (m *Bootstrap_DynamicResources) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedV1", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBootstrap - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBootstrap - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DeprecatedV1 == nil { - m.DeprecatedV1 = &Bootstrap_DynamicResources_DeprecatedV1{} - } - if err := m.DeprecatedV1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBootstrap(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBootstrap - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Bootstrap_DynamicResources_DeprecatedV1) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBootstrap - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DeprecatedV1: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DeprecatedV1: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SdsConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBootstrap - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBootstrap - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SdsConfig == nil { - m.SdsConfig = &core.ConfigSource{} - } - if err := m.SdsConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipBootstrap(dAtA[iNdEx:]) @@ -3425,86 +3185,84 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/bootstrap/v2/bootstrap.proto", fileDescriptor_bootstrap_b54220b856e1e3fe) -} - -var fileDescriptor_bootstrap_b54220b856e1e3fe = []byte{ - // 1221 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0x66, 0x6d, 0xb7, 0x89, 0x9f, 0x9d, 0xd8, 0x19, 0xa5, 0xed, 0xd6, 0xa2, 0x49, 0xea, 0x16, - 0xd4, 0x8a, 0x6a, 0xad, 0xba, 0x05, 0x4a, 0x55, 0x15, 0xd5, 0x8d, 0x8a, 0x90, 0x4a, 0x0a, 0x9b, - 0x0a, 0x04, 0x97, 0xd5, 0x78, 0x77, 0xb2, 0x1e, 0x65, 0x77, 0xc7, 0x9a, 0x99, 0x5d, 0x94, 0x2b, - 0x27, 0x8e, 0x08, 0x71, 0xe0, 0xc4, 0x1f, 0xc2, 0x09, 0x6e, 0x3d, 0xf2, 0x17, 0x00, 0xea, 0x8d, - 0xff, 0x02, 0xcd, 0x8f, 0x5d, 0x67, 0xdd, 0x34, 0x0d, 0xdc, 0xbc, 0xef, 0x7d, 0xdf, 0x37, 0x33, - 0x6f, 0xde, 0xfb, 0xc6, 0x70, 0x93, 0x64, 0x05, 0x3b, 0x1a, 0x85, 0x2c, 0x3b, 0xa0, 0xf1, 0x68, - 0xca, 0x98, 0x14, 0x92, 0xe3, 0xf9, 0xa8, 0x18, 0x2f, 0x3e, 0xbc, 0x39, 0x67, 0x92, 0xa1, 0xcb, - 0x1a, 0xea, 0x19, 0xa8, 0xb7, 0xc8, 0x16, 0xe3, 0xc1, 0xb6, 0x51, 0xc1, 0x73, 0xaa, 0x88, 0x21, - 0xe3, 0x64, 0x84, 0xa3, 0x88, 0x13, 0x21, 0x0c, 0x77, 0xf0, 0xf6, 0xab, 0x80, 0x29, 0x16, 0xe4, - 0xc4, 0x2c, 0xce, 0xe5, 0x6c, 0x14, 0x12, 0x2e, 0x6d, 0xf6, 0x9d, 0x57, 0xb9, 0x66, 0x0f, 0x81, - 0x60, 0x39, 0x0f, 0x4b, 0x91, 0x8b, 0x75, 0x58, 0x24, 0x4e, 0x8c, 0x27, 0x55, 0xfc, 0x6a, 0xed, - 0xe4, 0x92, 0xe3, 0x90, 0x28, 0x80, 0xfe, 0x61, 0x21, 0xd7, 0x6a, 0x90, 0x94, 0x48, 0x4e, 0x43, - 0xa1, 0x40, 0x42, 0x62, 0x59, 0xea, 0xdc, 0xaa, 0x81, 0x58, 0x41, 0x78, 0xc2, 0x70, 0x34, 0x2a, - 0xc6, 0x38, 0x99, 0xcf, 0x70, 0x15, 0x38, 0x51, 0x92, 0x63, 0x49, 0x12, 0x9a, 0x52, 0xa9, 0x44, - 0x79, 0x52, 0x4a, 0x6e, 0xc5, 0x8c, 0xc5, 0x09, 0x19, 0xe9, 0xaf, 0x69, 0x7e, 0x30, 0x8a, 0x72, - 0x8e, 0x25, 0x65, 0x99, 0xcd, 0x5f, 0x2a, 0x70, 0x42, 0x23, 0x2c, 0xc9, 0xa8, 0xfc, 0x61, 0x13, - 0x9b, 0x31, 0x8b, 0x99, 0xfe, 0x39, 0x52, 0xbf, 0x4c, 0x74, 0xf8, 0xcb, 0x1a, 0xb4, 0x27, 0xe5, - 0x75, 0xa1, 0xf7, 0xa0, 0x95, 0xb1, 0x88, 0xb8, 0xce, 0x8e, 0x73, 0xa3, 0x33, 0xbe, 0xe4, 0x99, - 0x5b, 0xc5, 0x73, 0xea, 0x15, 0x63, 0x4f, 0x55, 0xd7, 0xdb, 0x63, 0x11, 0xf1, 0x35, 0x08, 0x05, - 0xd0, 0x57, 0x67, 0xa5, 0x61, 0xc0, 0x89, 0xa9, 0xb6, 0x70, 0x1b, 0x9a, 0x78, 0xd7, 0x7b, 0x6d, - 0x3b, 0x78, 0xd5, 0x62, 0xde, 0xbe, 0x26, 0xfb, 0x25, 0xd7, 0xef, 0x89, 0x7a, 0x00, 0x4d, 0x61, - 0x23, 0x3a, 0xca, 0x70, 0x5a, 0x5b, 0xa1, 0xa9, 0x57, 0x78, 0xff, 0x4c, 0x2b, 0xec, 0x1a, 0xf6, - 0x62, 0x89, 0x7e, 0xb4, 0x14, 0x41, 0x3e, 0xf4, 0xc2, 0x24, 0x17, 0x92, 0xf0, 0x20, 0xc5, 0x19, - 0x8e, 0x09, 0x77, 0x5b, 0x7a, 0x85, 0x9b, 0xa7, 0xac, 0xf0, 0xd8, 0x30, 0x3e, 0x33, 0x04, 0x7f, - 0x3d, 0xac, 0x7d, 0xa3, 0x2b, 0x00, 0x07, 0x09, 0x8e, 0x45, 0x30, 0xc7, 0x72, 0xe6, 0x9e, 0xdb, - 0x71, 0x6e, 0xb4, 0xfd, 0xb6, 0x8e, 0x7c, 0x8e, 0xe5, 0x0c, 0x3d, 0x86, 0x8e, 0xee, 0x91, 0x40, - 0xd0, 0xec, 0x50, 0xb8, 0xe7, 0x77, 0x9a, 0x37, 0x3a, 0xe3, 0x61, 0x7d, 0x39, 0xdb, 0x4f, 0x6a, - 0x31, 0x55, 0x26, 0xb1, 0x4f, 0xb3, 0x43, 0x1f, 0x44, 0xf9, 0x53, 0xa0, 0x2f, 0x60, 0xd3, 0x88, - 0x1c, 0x24, 0xb9, 0x98, 0x05, 0x34, 0x93, 0x84, 0x17, 0x38, 0x71, 0x57, 0xf4, 0xe6, 0x2f, 0x7b, - 0xa6, 0x4b, 0xbc, 0xb2, 0x4b, 0xbc, 0x5d, 0xdb, 0x25, 0x93, 0xd6, 0xcf, 0x7f, 0x6d, 0x3b, 0x3e, - 0xd2, 0xe4, 0x27, 0x8a, 0xfb, 0xa9, 0xa5, 0xa2, 0x8f, 0x61, 0xf5, 0x5b, 0x2c, 0xc3, 0x59, 0xc4, - 0x62, 0x77, 0x55, 0xcb, 0x5c, 0x3b, 0xa5, 0x06, 0x5f, 0x59, 0xa8, 0x5f, 0x91, 0xd0, 0x3d, 0x58, - 0x51, 0x13, 0x42, 0xb3, 0xd8, 0x6d, 0x6b, 0xfe, 0x56, 0x9d, 0x6f, 0xc6, 0xa7, 0x18, 0x7b, 0xcf, - 0x0d, 0xca, 0x2f, 0xe1, 0x28, 0x04, 0xa4, 0xda, 0x3d, 0xd0, 0xfd, 0x1e, 0x08, 0xc2, 0x0b, 0x1a, - 0x12, 0x17, 0xb4, 0xc8, 0xed, 0xba, 0x48, 0x35, 0x16, 0x4a, 0xc8, 0xc7, 0x92, 0x3c, 0x55, 0x1f, - 0xfb, 0x86, 0xf2, 0x58, 0x63, 0x26, 0x0d, 0xd7, 0xf1, 0xfb, 0x7c, 0x29, 0x87, 0x1e, 0xc0, 0x0a, - 0xcf, 0x33, 0x49, 0x53, 0xe2, 0x76, 0xb4, 0xf2, 0xf0, 0x94, 0xe3, 0xf9, 0x06, 0xe9, 0x97, 0x14, - 0xf4, 0x01, 0x9c, 0xc3, 0x51, 0x4a, 0x33, 0xb7, 0xab, 0xb9, 0x3b, 0xa7, 0x70, 0x1f, 0x29, 0x9c, - 0x6f, 0xe0, 0xe8, 0x13, 0xe8, 0x9a, 0x8b, 0x32, 0x48, 0x77, 0x4d, 0xd3, 0xaf, 0x9f, 0x7e, 0xdd, - 0xe6, 0x1c, 0xbe, 0xe9, 0x13, 0xf3, 0x81, 0x1e, 0x01, 0xcc, 0xa2, 0x4a, 0x66, 0xbd, 0x76, 0x82, - 0xe3, 0x13, 0xfa, 0x68, 0x4e, 0x0d, 0x63, 0x5f, 0xb7, 0xb8, 0xdf, 0x9e, 0x45, 0xa5, 0xc4, 0xd7, - 0xd0, 0x2f, 0x2d, 0xa7, 0xea, 0xf6, 0x9e, 0x16, 0xf2, 0xea, 0xfb, 0xa9, 0x8c, 0xc9, 0x3a, 0x95, - 0xf7, 0xcc, 0x06, 0xca, 0x96, 0xef, 0xb1, 0x7a, 0x60, 0xf0, 0xbb, 0x03, 0xbd, 0xa5, 0x81, 0x46, - 0xf7, 0xa1, 0x9d, 0x50, 0x21, 0x49, 0x46, 0xb8, 0x70, 0x1d, 0xdd, 0xe6, 0x17, 0xeb, 0x1b, 0x7e, - 0x6a, 0xd3, 0x93, 0xd6, 0x8b, 0x3f, 0xb7, 0xdf, 0xf2, 0x17, 0x70, 0xf4, 0x21, 0xac, 0xda, 0xa9, - 0x52, 0xa6, 0xa2, 0xa8, 0x17, 0xea, 0x54, 0x3b, 0x83, 0x96, 0x59, 0x81, 0xd1, 0x47, 0xb0, 0x22, - 0x48, 0xc8, 0x89, 0x54, 0x56, 0xd1, 0xd4, 0xb3, 0x50, 0xe3, 0xa9, 0x17, 0xc4, 0xdb, 0xd7, 0x08, - 0xcb, 0x2d, 0xf1, 0x83, 0x1f, 0x9b, 0xd0, 0x5f, 0xb6, 0x0c, 0xf4, 0x10, 0x20, 0x59, 0x94, 0xdd, - 0x18, 0xe3, 0xf6, 0x09, 0x65, 0xaf, 0xd7, 0x3c, 0xa9, 0x6a, 0xfe, 0x10, 0x20, 0x5c, 0xf0, 0x1b, - 0x67, 0xe4, 0x87, 0xd1, 0xb1, 0x6b, 0xc7, 0x0b, 0x7e, 0xf3, 0xec, 0xd7, 0x8e, 0x2b, 0x89, 0x43, - 0x58, 0x8b, 0xc8, 0x9c, 0x93, 0x10, 0x4b, 0x12, 0x05, 0xc5, 0x6d, 0xeb, 0x70, 0x93, 0xff, 0xe5, - 0xa1, 0xde, 0x6e, 0x25, 0xf5, 0xe5, 0x6d, 0x3d, 0x69, 0xdd, 0xe8, 0x58, 0x64, 0xb0, 0x07, 0xdd, - 0xe3, 0x08, 0x75, 0x7e, 0xf1, 0xdf, 0xeb, 0x27, 0xca, 0xcd, 0x0f, 0xbf, 0x77, 0xe0, 0x9c, 0x1e, - 0x28, 0xf4, 0x2e, 0xf4, 0x70, 0x18, 0x12, 0x21, 0x82, 0x84, 0xc5, 0xc6, 0x5b, 0x1d, 0xed, 0xad, - 0x6b, 0x26, 0xfc, 0x94, 0xc5, 0xda, 0x5f, 0xaf, 0x42, 0x77, 0xce, 0xd9, 0x01, 0x4d, 0x88, 0x01, - 0x35, 0x34, 0xa8, 0x63, 0x63, 0x1a, 0x72, 0x17, 0x56, 0xec, 0x7f, 0x10, 0x5b, 0xd1, 0xc1, 0x49, - 0x15, 0x35, 0x08, 0xbf, 0x84, 0x0e, 0xbf, 0x6b, 0xc2, 0x7a, 0xdd, 0xfa, 0xd1, 0x2d, 0x40, 0x09, - 0x0b, 0x71, 0x12, 0x94, 0x8f, 0x48, 0x86, 0x53, 0x62, 0xb7, 0xd5, 0xd7, 0x19, 0x4b, 0xd8, 0xc3, - 0x29, 0x41, 0x31, 0x6c, 0xb0, 0x5c, 0x26, 0x94, 0xf0, 0x20, 0x22, 0x92, 0x84, 0xca, 0x90, 0x6d, - 0x4b, 0xdc, 0x3f, 0xf3, 0x73, 0xe3, 0x3d, 0x33, 0x12, 0xbb, 0xa5, 0x82, 0xdf, 0x67, 0x4b, 0x11, - 0xf4, 0x0c, 0x36, 0xf3, 0xb9, 0x90, 0x9c, 0xe0, 0x34, 0x98, 0xd2, 0x2c, 0xaa, 0xb7, 0xcf, 0x95, - 0x13, 0x0e, 0x3b, 0xa1, 0x59, 0x64, 0x5d, 0x07, 0x95, 0xd4, 0x45, 0x0c, 0xed, 0xc1, 0x86, 0x76, - 0x8d, 0x9a, 0x95, 0xb5, 0xce, 0xdc, 0x8c, 0x3d, 0x45, 0x3e, 0xe6, 0x6c, 0x83, 0x7b, 0xd0, 0x5f, - 0x3e, 0x06, 0xba, 0x0e, 0xeb, 0xa4, 0x20, 0x99, 0x5c, 0xbe, 0xde, 0xae, 0x8e, 0xda, 0xdb, 0x1d, - 0xfe, 0xd4, 0x80, 0xd5, 0xf2, 0xed, 0x41, 0x0f, 0xa0, 0x9b, 0x52, 0x21, 0x02, 0xe5, 0xd0, 0x2c, - 0x97, 0xb6, 0xbd, 0x5e, 0xff, 0xfa, 0xf9, 0x1d, 0x05, 0x7f, 0x6e, 0xd0, 0x68, 0x17, 0xfa, 0x29, - 0x89, 0x71, 0x4d, 0xa1, 0xf1, 0x26, 0x85, 0x5e, 0x49, 0x29, 0x55, 0x1e, 0x40, 0xf7, 0x90, 0x26, - 0x49, 0xa5, 0xd0, 0x7c, 0xe3, 0x1e, 0x14, 0xbc, 0x64, 0x3f, 0x81, 0x8d, 0x34, 0x4f, 0x24, 0xad, - 0x49, 0xb4, 0xde, 0x24, 0xd1, 0xaf, 0x38, 0x56, 0x67, 0xf8, 0x83, 0x03, 0x2b, 0xf6, 0xcd, 0x42, - 0xb7, 0xa0, 0x2b, 0x8e, 0xd2, 0x84, 0x66, 0x87, 0x01, 0x67, 0xcc, 0x54, 0xa5, 0x3d, 0x69, 0xff, - 0xfa, 0xcf, 0x6f, 0xcd, 0x16, 0x6f, 0xec, 0x38, 0x7e, 0xc7, 0xa6, 0x7d, 0xc6, 0x24, 0x1a, 0x42, - 0x57, 0xe4, 0xd3, 0x88, 0x72, 0x12, 0x4a, 0xc6, 0x8f, 0xec, 0xb8, 0xd4, 0x62, 0xe8, 0x0e, 0x5c, - 0x50, 0x86, 0xcf, 0x69, 0x44, 0x82, 0x1a, 0xb8, 0xa9, 0xc1, 0x9b, 0x65, 0x72, 0xff, 0x58, 0x6e, - 0xd2, 0x7f, 0xf1, 0x72, 0xcb, 0xf9, 0xe3, 0xe5, 0x96, 0xf3, 0xf7, 0xcb, 0x2d, 0xe7, 0x9b, 0x46, - 0x31, 0x9e, 0x9e, 0xd7, 0x27, 0xb9, 0xf3, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x70, 0x53, 0xcb, - 0xa6, 0x59, 0x0c, 0x00, 0x00, + proto.RegisterFile("envoy/config/bootstrap/v2/bootstrap.proto", fileDescriptor_bootstrap_8fe415d0148933ad) +} + +var fileDescriptor_bootstrap_8fe415d0148933ad = []byte{ + // 1195 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xcf, 0x6f, 0x1b, 0xc5, + 0x17, 0xff, 0xae, 0xed, 0x34, 0xf1, 0xb3, 0x1b, 0x3b, 0xa3, 0xb4, 0xdd, 0x46, 0xdf, 0x26, 0xa9, + 0x5b, 0xa0, 0x15, 0xd5, 0x5a, 0xb8, 0x05, 0x4a, 0xa9, 0x8a, 0xea, 0x46, 0x45, 0xa0, 0xd2, 0x96, + 0x4d, 0x25, 0x04, 0x97, 0xd5, 0x78, 0x77, 0xb2, 0x1e, 0x65, 0x77, 0xc7, 0x9a, 0x19, 0x1b, 0x72, + 0xe5, 0xc4, 0x91, 0x03, 0x07, 0xfe, 0x16, 0x4e, 0x70, 0xeb, 0x91, 0x3b, 0x12, 0xa0, 0x5e, 0x10, + 0xff, 0x05, 0x9a, 0x1f, 0xbb, 0xce, 0xb8, 0x6e, 0x92, 0xdb, 0xce, 0x7b, 0x9f, 0xcf, 0x67, 0x7e, + 0xbc, 0xf7, 0x3e, 0x0b, 0x37, 0x49, 0x31, 0x63, 0x47, 0xfd, 0x98, 0x15, 0x07, 0x34, 0xed, 0x8f, + 0x18, 0x93, 0x42, 0x72, 0x3c, 0xe9, 0xcf, 0x06, 0xf3, 0x45, 0x30, 0xe1, 0x4c, 0x32, 0x74, 0x59, + 0x43, 0x03, 0x03, 0x0d, 0xe6, 0xd9, 0xd9, 0x60, 0x6b, 0xc7, 0xa8, 0xe0, 0x09, 0x55, 0xc4, 0x98, + 0x71, 0xd2, 0xc7, 0x49, 0xc2, 0x89, 0x10, 0x86, 0xbb, 0xf5, 0xff, 0xd7, 0x01, 0x23, 0x2c, 0xc8, + 0xd2, 0x2c, 0x9e, 0xca, 0x71, 0x3f, 0x26, 0x5c, 0xda, 0xec, 0x5b, 0xaf, 0x73, 0xcd, 0x19, 0x22, + 0xc1, 0xa6, 0x3c, 0x2e, 0x45, 0x2e, 0xba, 0xb0, 0x44, 0x2c, 0x8d, 0x67, 0x55, 0xfc, 0xaa, 0x73, + 0x73, 0xc9, 0x71, 0x4c, 0x14, 0x40, 0x7f, 0x58, 0xc8, 0x35, 0x07, 0x92, 0x13, 0xc9, 0x69, 0x2c, + 0x14, 0x48, 0x48, 0x2c, 0x4b, 0x9d, 0x5b, 0x0e, 0x88, 0xcd, 0x08, 0xcf, 0x18, 0x4e, 0xfa, 0xb3, + 0x01, 0xce, 0x26, 0x63, 0x5c, 0x05, 0x96, 0x4a, 0x72, 0x2c, 0x49, 0x46, 0x73, 0x2a, 0x95, 0x28, + 0xcf, 0x4a, 0xc9, 0xed, 0x94, 0xb1, 0x34, 0x23, 0x7d, 0xbd, 0x1a, 0x4d, 0x0f, 0xfa, 0xc9, 0x94, + 0x63, 0x49, 0x59, 0x61, 0xf3, 0x97, 0x66, 0x38, 0xa3, 0x09, 0x96, 0xa4, 0x5f, 0x7e, 0xd8, 0xc4, + 0x66, 0xca, 0x52, 0xa6, 0x3f, 0xfb, 0xea, 0xcb, 0x44, 0x7b, 0xff, 0xb4, 0xa0, 0x39, 0x2c, 0xcb, + 0x85, 0xde, 0x85, 0x46, 0xc1, 0x12, 0xe2, 0x7b, 0xbb, 0xde, 0x8d, 0xd6, 0xe0, 0x52, 0x60, 0xaa, + 0x8a, 0x27, 0x34, 0x98, 0x0d, 0x02, 0xf5, 0xba, 0xc1, 0x53, 0x96, 0x90, 0x50, 0x83, 0x50, 0x04, + 0x5d, 0x75, 0x57, 0x1a, 0x47, 0x9c, 0x98, 0xd7, 0x16, 0x7e, 0x4d, 0x13, 0xef, 0x04, 0x6f, 0x6c, + 0x87, 0xa0, 0xda, 0x2c, 0xd8, 0xd7, 0xe4, 0xb0, 0xe4, 0x86, 0x1d, 0xe1, 0x06, 0xd0, 0x08, 0x36, + 0x92, 0xa3, 0x02, 0xe7, 0xce, 0x0e, 0x75, 0xbd, 0xc3, 0xfb, 0x67, 0xda, 0x61, 0xcf, 0xb0, 0xe7, + 0x5b, 0x74, 0x93, 0x85, 0x08, 0x0a, 0xa1, 0x13, 0x67, 0x53, 0x21, 0x09, 0x8f, 0x72, 0x5c, 0xe0, + 0x94, 0x70, 0xbf, 0xa1, 0x77, 0xb8, 0x79, 0xc2, 0x0e, 0x8f, 0x0c, 0xe3, 0x0b, 0x43, 0x08, 0xd7, + 0x63, 0x67, 0x8d, 0xae, 0x00, 0x1c, 0x64, 0x38, 0x15, 0xd1, 0x04, 0xcb, 0xb1, 0xbf, 0xb2, 0xeb, + 0xdd, 0x68, 0x86, 0x4d, 0x1d, 0x79, 0x8e, 0xe5, 0x18, 0x3d, 0x82, 0x96, 0xee, 0x91, 0x48, 0xd0, + 0xe2, 0x50, 0xf8, 0xe7, 0x76, 0xeb, 0x37, 0x5a, 0x83, 0x9e, 0xbb, 0x9d, 0xed, 0x27, 0xb5, 0x99, + 0x7a, 0x26, 0xb1, 0x4f, 0x8b, 0xc3, 0x10, 0x44, 0xf9, 0x29, 0xd0, 0x97, 0xb0, 0x69, 0x44, 0x0e, + 0xb2, 0xa9, 0x18, 0x47, 0xb4, 0x90, 0x84, 0xcf, 0x70, 0xe6, 0xaf, 0xea, 0xc3, 0x5f, 0x0e, 0x4c, + 0x97, 0x04, 0x65, 0x97, 0x04, 0x7b, 0xb6, 0x4b, 0x86, 0x8d, 0x9f, 0xff, 0xda, 0xf1, 0x42, 0xa4, + 0xc9, 0x8f, 0x15, 0xf7, 0x33, 0x4b, 0x45, 0x9f, 0xc0, 0xda, 0xb7, 0x58, 0xc6, 0xe3, 0x84, 0xa5, + 0xfe, 0x9a, 0x96, 0xb9, 0x76, 0xc2, 0x1b, 0x7c, 0x65, 0xa1, 0x61, 0x45, 0x42, 0x77, 0x61, 0x55, + 0x4d, 0x08, 0x2d, 0x52, 0xbf, 0xa9, 0xf9, 0xdb, 0x2e, 0xdf, 0x8c, 0xcf, 0x6c, 0x10, 0xbc, 0x30, + 0xa8, 0xb0, 0x84, 0xa3, 0x18, 0x90, 0x6a, 0xf7, 0x48, 0xf7, 0x7b, 0x24, 0x08, 0x9f, 0xd1, 0x98, + 0xf8, 0xa0, 0x45, 0xde, 0x73, 0x45, 0xaa, 0xb1, 0x50, 0x42, 0x21, 0x96, 0xe4, 0x89, 0x5a, 0xec, + 0x1b, 0xca, 0x23, 0x8d, 0x19, 0xd6, 0x7c, 0x2f, 0xec, 0xf2, 0x85, 0x1c, 0xba, 0x0f, 0xab, 0x7c, + 0x5a, 0x48, 0x9a, 0x13, 0xbf, 0xa5, 0x95, 0x7b, 0x27, 0x5c, 0x2f, 0x34, 0xc8, 0xb0, 0xa4, 0xa0, + 0x0f, 0x60, 0x05, 0x27, 0x39, 0x2d, 0xfc, 0xb6, 0xe6, 0xee, 0x9e, 0xc0, 0x7d, 0xa8, 0x70, 0xa1, + 0x81, 0xa3, 0x4f, 0xa1, 0x6d, 0x0a, 0x65, 0x90, 0xfe, 0x79, 0x4d, 0xbf, 0x7e, 0x72, 0xb9, 0xcd, + 0x3d, 0x42, 0xd3, 0x27, 0x66, 0x81, 0x1e, 0x02, 0x8c, 0x93, 0x4a, 0x66, 0xdd, 0xb9, 0xc1, 0xf1, + 0x09, 0x7d, 0x38, 0xa1, 0x86, 0xb1, 0xaf, 0x5b, 0x3c, 0x6c, 0x8e, 0x93, 0x52, 0xe2, 0x6b, 0xe8, + 0x96, 0x96, 0x53, 0x75, 0x7b, 0x47, 0x0b, 0x05, 0xee, 0x79, 0x2a, 0x63, 0xb2, 0x4e, 0x15, 0x3c, + 0xb3, 0x81, 0xb2, 0xe5, 0x3b, 0xcc, 0x0d, 0x6c, 0xfd, 0xe6, 0x41, 0x67, 0x61, 0xa0, 0xd1, 0x3d, + 0x68, 0x66, 0x54, 0x48, 0x52, 0x10, 0x2e, 0x7c, 0x4f, 0xb7, 0xf9, 0x45, 0xf7, 0xc0, 0x4f, 0x6c, + 0x7a, 0xd8, 0x78, 0xf9, 0xe7, 0xce, 0xff, 0xc2, 0x39, 0x1c, 0x7d, 0x08, 0x6b, 0x76, 0xaa, 0x94, + 0xa9, 0x28, 0xea, 0x05, 0x97, 0x6a, 0x67, 0xd0, 0x32, 0x2b, 0x30, 0xfa, 0x08, 0x56, 0x05, 0x89, + 0x39, 0x91, 0xca, 0x2a, 0xea, 0x7a, 0x16, 0x1c, 0x9e, 0xfa, 0x83, 0x04, 0xfb, 0x1a, 0x61, 0xb9, + 0x25, 0x7e, 0xeb, 0x0f, 0x0f, 0xba, 0x8b, 0x96, 0x81, 0x1e, 0x00, 0x64, 0xf3, 0x67, 0x37, 0xc6, + 0xb8, 0xb3, 0xe4, 0xd9, 0xdd, 0x37, 0xcf, 0xaa, 0x37, 0x7f, 0x00, 0x10, 0xcf, 0xf9, 0xb5, 0x33, + 0xf2, 0xe3, 0xe4, 0x58, 0xd9, 0xf1, 0x9c, 0x5f, 0x3f, 0x7b, 0xd9, 0x71, 0x29, 0xf1, 0x79, 0x63, + 0xad, 0xd1, 0x5d, 0xe9, 0xfd, 0xe0, 0xc1, 0x8a, 0xee, 0x4c, 0xf4, 0x36, 0x74, 0x70, 0x1c, 0x13, + 0x21, 0xa2, 0x8c, 0xa5, 0xc6, 0xa4, 0x3c, 0x6d, 0x52, 0xe7, 0x4d, 0xf8, 0x09, 0x4b, 0xb5, 0x51, + 0x5d, 0x85, 0xf6, 0x84, 0xb3, 0x03, 0x9a, 0x11, 0x03, 0xaa, 0x69, 0x50, 0xcb, 0xc6, 0x34, 0xe4, + 0x0e, 0xac, 0xda, 0x9f, 0xb9, 0x3d, 0xda, 0xd6, 0xb2, 0xa3, 0x19, 0x44, 0x58, 0x42, 0x7b, 0xdf, + 0xd7, 0x61, 0xdd, 0xf5, 0x50, 0x74, 0x0b, 0x50, 0xc6, 0x62, 0x9c, 0x45, 0xa5, 0x1b, 0x17, 0x38, + 0x27, 0xf6, 0x58, 0x5d, 0x9d, 0xb1, 0x84, 0xa7, 0x38, 0x27, 0x28, 0x85, 0x0d, 0x36, 0x95, 0x19, + 0x25, 0x3c, 0x4a, 0x88, 0x24, 0xb1, 0x72, 0x36, 0xfb, 0xb6, 0xf7, 0xce, 0xec, 0xdb, 0xc1, 0x33, + 0x23, 0xb1, 0x57, 0x2a, 0x84, 0x5d, 0xb6, 0x10, 0x41, 0xcf, 0x60, 0x73, 0x3a, 0x11, 0x92, 0x13, + 0x9c, 0x47, 0x23, 0x5a, 0x24, 0x6e, 0x1d, 0xae, 0x2c, 0xb9, 0xec, 0x90, 0x16, 0x89, 0x1d, 0x5f, + 0x54, 0x52, 0xe7, 0x31, 0xf4, 0x14, 0x36, 0xf4, 0xf8, 0x39, 0x9e, 0xd0, 0x38, 0x73, 0x55, 0x3b, + 0x8a, 0x7c, 0xcc, 0x22, 0xb6, 0xee, 0x42, 0x77, 0xf1, 0x1a, 0xe8, 0x3a, 0xac, 0x93, 0x19, 0x29, + 0xe4, 0x62, 0x79, 0xdb, 0x3a, 0x6a, 0xab, 0xdb, 0xfb, 0xa9, 0x06, 0x6b, 0xa5, 0x89, 0xa3, 0xfb, + 0xd0, 0xce, 0xa9, 0x10, 0x91, 0xb2, 0x3a, 0x36, 0x95, 0xb6, 0xcf, 0xdf, 0xfc, 0x1b, 0x09, 0x5b, + 0x0a, 0xfe, 0xc2, 0xa0, 0xd1, 0x1e, 0x74, 0x73, 0x92, 0x62, 0x47, 0xa1, 0x76, 0x9a, 0x42, 0xa7, + 0xa4, 0x94, 0x2a, 0xf7, 0xa1, 0x7d, 0x48, 0xb3, 0xac, 0x52, 0xa8, 0x9f, 0x7a, 0x06, 0x05, 0x2f, + 0xd9, 0x8f, 0x61, 0x23, 0x9f, 0x66, 0x92, 0x3a, 0x12, 0x8d, 0xd3, 0x24, 0xba, 0x15, 0xc7, 0xea, + 0xf4, 0x7e, 0xf4, 0x60, 0xd5, 0x9a, 0x3f, 0xba, 0x05, 0x6d, 0x71, 0x94, 0x67, 0xb4, 0x38, 0x8c, + 0x38, 0x63, 0xe6, 0x55, 0x9a, 0xc3, 0xe6, 0x2f, 0xff, 0xfe, 0x5a, 0x6f, 0xf0, 0xda, 0xae, 0x17, + 0xb6, 0x6c, 0x3a, 0x64, 0x4c, 0xa2, 0x1e, 0xb4, 0xc5, 0x74, 0x94, 0x50, 0x4e, 0x62, 0xc9, 0xf8, + 0x91, 0x1d, 0x17, 0x27, 0x86, 0x6e, 0xc3, 0x05, 0xe5, 0x9c, 0x9c, 0x26, 0x24, 0x72, 0xc0, 0x75, + 0x0d, 0xde, 0x2c, 0x93, 0xfb, 0xc7, 0x72, 0xc3, 0x8f, 0x5f, 0xbe, 0xda, 0xf6, 0x7e, 0x7f, 0xb5, + 0xed, 0xfd, 0xfd, 0x6a, 0xdb, 0x83, 0x77, 0x28, 0x33, 0x8d, 0x32, 0xe1, 0xec, 0xbb, 0xa3, 0x37, + 0x77, 0xfb, 0x73, 0xef, 0x9b, 0xda, 0x6c, 0x30, 0x3a, 0xa7, 0x2f, 0x7d, 0xfb, 0xbf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xac, 0x70, 0xb3, 0x4f, 0xcd, 0x0b, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v2/bootstrap.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v2/bootstrap.pb.validate.go index b67a25f65928..7b56017bd4ec 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v2/bootstrap.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v2/bootstrap.pb.validate.go @@ -609,16 +609,6 @@ func (m *Bootstrap_DynamicResources) Validate() error { } } - if v, ok := interface{}(m.GetDeprecatedV1()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return Bootstrap_DynamicResourcesValidationError{ - Field: "DeprecatedV1", - Reason: "embedded message failed validation", - Cause: err, - } - } - } - return nil } @@ -653,59 +643,6 @@ func (e Bootstrap_DynamicResourcesValidationError) Error() string { var _ error = Bootstrap_DynamicResourcesValidationError{} -// Validate checks the field values on Bootstrap_DynamicResources_DeprecatedV1 -// with the rules defined in the proto definition for this message. If any -// rules are violated, an error is returned. -func (m *Bootstrap_DynamicResources_DeprecatedV1) Validate() error { - if m == nil { - return nil - } - - if v, ok := interface{}(m.GetSdsConfig()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return Bootstrap_DynamicResources_DeprecatedV1ValidationError{ - Field: "SdsConfig", - Reason: "embedded message failed validation", - Cause: err, - } - } - } - - return nil -} - -// Bootstrap_DynamicResources_DeprecatedV1ValidationError is the validation -// error returned by Bootstrap_DynamicResources_DeprecatedV1.Validate if the -// designated constraints aren't met. -type Bootstrap_DynamicResources_DeprecatedV1ValidationError struct { - Field string - Reason string - Cause error - Key bool -} - -// Error satisfies the builtin error interface -func (e Bootstrap_DynamicResources_DeprecatedV1ValidationError) Error() string { - cause := "" - if e.Cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.Cause) - } - - key := "" - if e.Key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sBootstrap_DynamicResources_DeprecatedV1.%s: %s%s", - key, - e.Field, - e.Reason, - cause) -} - -var _ error = Bootstrap_DynamicResources_DeprecatedV1ValidationError{} - // Validate checks the field values on ClusterManager_OutlierDetection with the // rules defined in the proto definition for this message. If any rules are // violated, an error is returned. diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.go index 12b2be2c3f0d..6b889172882d 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.go @@ -51,7 +51,7 @@ func (x ComparisonFilter_Op) String() string { return proto.EnumName(ComparisonFilter_Op_name, int32(x)) } func (ComparisonFilter_Op) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{2, 0} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{2, 0} } type AccessLog struct { @@ -84,7 +84,7 @@ func (m *AccessLog) Reset() { *m = AccessLog{} } func (m *AccessLog) String() string { return proto.CompactTextString(m) } func (*AccessLog) ProtoMessage() {} func (*AccessLog) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{0} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{0} } func (m *AccessLog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -259,7 +259,7 @@ func (m *AccessLogFilter) Reset() { *m = AccessLogFilter{} } func (m *AccessLogFilter) String() string { return proto.CompactTextString(m) } func (*AccessLogFilter) ProtoMessage() {} func (*AccessLogFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{1} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{1} } func (m *AccessLogFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -624,7 +624,7 @@ func (m *ComparisonFilter) Reset() { *m = ComparisonFilter{} } func (m *ComparisonFilter) String() string { return proto.CompactTextString(m) } func (*ComparisonFilter) ProtoMessage() {} func (*ComparisonFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{2} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{2} } func (m *ComparisonFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -680,7 +680,7 @@ func (m *StatusCodeFilter) Reset() { *m = StatusCodeFilter{} } func (m *StatusCodeFilter) String() string { return proto.CompactTextString(m) } func (*StatusCodeFilter) ProtoMessage() {} func (*StatusCodeFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{3} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{3} } func (m *StatusCodeFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -729,7 +729,7 @@ func (m *DurationFilter) Reset() { *m = DurationFilter{} } func (m *DurationFilter) String() string { return proto.CompactTextString(m) } func (*DurationFilter) ProtoMessage() {} func (*DurationFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{4} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{4} } func (m *DurationFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -777,7 +777,7 @@ func (m *NotHealthCheckFilter) Reset() { *m = NotHealthCheckFilter{} } func (m *NotHealthCheckFilter) String() string { return proto.CompactTextString(m) } func (*NotHealthCheckFilter) ProtoMessage() {} func (*NotHealthCheckFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{5} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{5} } func (m *NotHealthCheckFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -818,7 +818,7 @@ func (m *TraceableFilter) Reset() { *m = TraceableFilter{} } func (m *TraceableFilter) String() string { return proto.CompactTextString(m) } func (*TraceableFilter) ProtoMessage() {} func (*TraceableFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{6} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{6} } func (m *TraceableFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -876,7 +876,7 @@ func (m *RuntimeFilter) Reset() { *m = RuntimeFilter{} } func (m *RuntimeFilter) String() string { return proto.CompactTextString(m) } func (*RuntimeFilter) ProtoMessage() {} func (*RuntimeFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{7} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{7} } func (m *RuntimeFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -940,7 +940,7 @@ func (m *AndFilter) Reset() { *m = AndFilter{} } func (m *AndFilter) String() string { return proto.CompactTextString(m) } func (*AndFilter) ProtoMessage() {} func (*AndFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{8} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{8} } func (m *AndFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -990,7 +990,7 @@ func (m *OrFilter) Reset() { *m = OrFilter{} } func (m *OrFilter) String() string { return proto.CompactTextString(m) } func (*OrFilter) ProtoMessage() {} func (*OrFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{9} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{9} } func (m *OrFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1040,7 +1040,7 @@ func (m *HeaderFilter) Reset() { *m = HeaderFilter{} } func (m *HeaderFilter) String() string { return proto.CompactTextString(m) } func (*HeaderFilter) ProtoMessage() {} func (*HeaderFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{10} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{10} } func (m *HeaderFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1093,7 +1093,7 @@ func (m *ResponseFlagFilter) Reset() { *m = ResponseFlagFilter{} } func (m *ResponseFlagFilter) String() string { return proto.CompactTextString(m) } func (*ResponseFlagFilter) ProtoMessage() {} func (*ResponseFlagFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_6667b9f86c711a8c, []int{11} + return fileDescriptor_accesslog_4e8ae33558cf3fe3, []int{11} } func (m *ResponseFlagFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3506,70 +3506,72 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/accesslog/v2/accesslog.proto", fileDescriptor_accesslog_6667b9f86c711a8c) -} - -var fileDescriptor_accesslog_6667b9f86c711a8c = []byte{ - // 973 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x96, 0x41, 0x6f, 0xdb, 0x36, - 0x14, 0xc7, 0x23, 0xc6, 0x71, 0xe3, 0x97, 0x26, 0xd6, 0x88, 0x60, 0x71, 0x83, 0x2c, 0xf0, 0x74, - 0x2a, 0x3a, 0x40, 0x6a, 0xdd, 0xad, 0xc0, 0x80, 0x1d, 0x16, 0x3b, 0x76, 0x6d, 0xcc, 0x6b, 0x56, - 0xa6, 0xc6, 0x8a, 0x0d, 0xa8, 0x40, 0x4b, 0xb4, 0x2d, 0x54, 0x16, 0x05, 0x4a, 0x36, 0xe6, 0xeb, - 0x8e, 0x3b, 0xf6, 0xd3, 0x0c, 0xdb, 0xa5, 0xbb, 0xed, 0xb8, 0x8f, 0x30, 0xe4, 0x32, 0xf4, 0xba, - 0x4f, 0x30, 0x88, 0xa4, 0x14, 0xdb, 0x29, 0xe0, 0x60, 0xd8, 0x0e, 0x8a, 0x44, 0x3e, 0xfe, 0x7f, - 0x8f, 0xef, 0x85, 0xef, 0xd1, 0xf0, 0x90, 0x45, 0x73, 0xbe, 0x70, 0x3c, 0x1e, 0x8d, 0x82, 0xb1, - 0x33, 0x0a, 0xc2, 0x94, 0x09, 0x87, 0x7a, 0x1e, 0x4b, 0x92, 0x90, 0x8f, 0x9d, 0x79, 0xe3, 0x7a, - 0x60, 0xc7, 0x82, 0xa7, 0x1c, 0xd7, 0xa5, 0xc2, 0x56, 0x0a, 0x5b, 0x29, 0xec, 0xeb, 0x45, 0xf3, - 0xc6, 0xf1, 0x89, 0x62, 0xd2, 0x38, 0xc8, 0xf4, 0x1e, 0x17, 0xcc, 0x19, 0xd2, 0x84, 0x29, 0xfd, - 0xf1, 0xe9, 0x8a, 0x55, 0xf0, 0x59, 0xca, 0xd4, 0x5f, 0x6d, 0xaf, 0x29, 0x7b, 0xba, 0x88, 0x99, - 0x13, 0x33, 0xe1, 0xb1, 0x28, 0xd5, 0x96, 0x7b, 0x63, 0xce, 0xc7, 0x21, 0x73, 0xe4, 0x68, 0x38, - 0x1b, 0x39, 0x34, 0x5a, 0x68, 0xd3, 0xc9, 0xba, 0x29, 0x49, 0xc5, 0xcc, 0xcb, 0x85, 0x47, 0x73, - 0x1a, 0x06, 0x3e, 0x4d, 0x99, 0x93, 0x7f, 0x28, 0x83, 0xf5, 0x97, 0x01, 0x95, 0x33, 0xb9, 0xf5, - 0x3e, 0x1f, 0x63, 0x0c, 0xa5, 0x88, 0x4e, 0x59, 0xcd, 0xa8, 0x1b, 0xf7, 0x2b, 0x44, 0x7e, 0xe3, - 0x1e, 0x94, 0x55, 0x88, 0x35, 0x54, 0x37, 0xee, 0xef, 0x35, 0x1e, 0xd9, 0x9b, 0xc2, 0xb7, 0x0b, - 0x60, 0x47, 0x1a, 0x89, 0x06, 0xe0, 0x47, 0x50, 0x56, 0xaa, 0xda, 0xb6, 0x44, 0x1d, 0xd9, 0x6a, - 0xd3, 0x76, 0xbe, 0x69, 0xfb, 0x52, 0x6e, 0xba, 0xbb, 0x45, 0xf4, 0x42, 0xfc, 0x39, 0xdc, 0xcd, - 0xf2, 0xe0, 0xbb, 0x5a, 0x58, 0x92, 0xc2, 0xc3, 0x1b, 0xc2, 0xb3, 0x68, 0xd1, 0xdd, 0x22, 0x7b, - 0x72, 0x6d, 0x4b, 0x2e, 0x6d, 0xee, 0xc3, 0x9e, 0x12, 0xb9, 0xd9, 0xac, 0xf5, 0x77, 0x19, 0xaa, - 0x6b, 0x1b, 0xc3, 0x43, 0xc0, 0x49, 0x4a, 0xd3, 0x59, 0xe2, 0x7a, 0xdc, 0x67, 0xae, 0x8e, 0xd3, - 0x90, 0x3e, 0x1a, 0x9b, 0xe3, 0xbc, 0x94, 0xda, 0x16, 0xf7, 0x99, 0xe2, 0x75, 0xb7, 0x88, 0x99, - 0xac, 0xcd, 0xe1, 0xef, 0xa1, 0xea, 0xcf, 0x04, 0x4d, 0x03, 0x1e, 0xb9, 0x2b, 0x89, 0x7c, 0xb8, - 0xd9, 0xc1, 0xb9, 0x16, 0x16, 0xf8, 0x03, 0x7f, 0x65, 0x06, 0x73, 0x38, 0x8a, 0x78, 0xea, 0x4e, - 0x18, 0x0d, 0xd3, 0x89, 0xeb, 0x4d, 0x98, 0xf7, 0x3a, 0x77, 0xa2, 0x52, 0xfc, 0x64, 0xb3, 0x93, - 0x67, 0x3c, 0xed, 0x4a, 0x7d, 0x2b, 0x93, 0x17, 0xae, 0x0e, 0xa3, 0xf7, 0xcc, 0xe3, 0x57, 0x60, - 0xa6, 0x82, 0x7a, 0x8c, 0x0e, 0xc3, 0x22, 0x5f, 0xa5, 0xdb, 0x9e, 0x8b, 0x17, 0xb9, 0xb2, 0x70, - 0x52, 0x4d, 0x57, 0xa7, 0xf0, 0x4b, 0x38, 0x10, 0xb3, 0x28, 0x0d, 0xa6, 0x05, 0x7d, 0x47, 0xd2, - 0x9d, 0xcd, 0x74, 0xa2, 0x74, 0x05, 0x7b, 0x5f, 0x2c, 0x4f, 0xe0, 0x3e, 0x00, 0x8d, 0xfc, 0x9c, - 0x5a, 0x96, 0xd4, 0x4f, 0x6e, 0x71, 0x96, 0x23, 0xbf, 0x20, 0x56, 0x68, 0x3e, 0xc0, 0x3d, 0xa8, - 0x70, 0x91, 0xc3, 0xee, 0x48, 0xd8, 0x83, 0xcd, 0xb0, 0x0b, 0x51, 0xb0, 0x76, 0xb9, 0xfe, 0xc6, - 0x03, 0xd8, 0x9f, 0x30, 0xea, 0xb3, 0x02, 0xb7, 0x2b, 0x71, 0xf6, 0x66, 0x5c, 0x57, 0xca, 0x0a, - 0xe4, 0xdd, 0xc9, 0xd2, 0x18, 0x4f, 0xe0, 0x50, 0xb0, 0x24, 0xe6, 0x51, 0xc2, 0xdc, 0x51, 0x48, - 0xc7, 0x39, 0xbd, 0x22, 0xe9, 0x9f, 0xde, 0x22, 0x9f, 0x5a, 0xdd, 0x09, 0xe9, 0xb8, 0xf0, 0x81, - 0xc5, 0x8d, 0xd9, 0xe6, 0x3d, 0x30, 0x95, 0xde, 0x4d, 0x62, 0xe6, 0x05, 0xa3, 0x80, 0x09, 0xbc, - 0xf3, 0xf3, 0xbb, 0xb7, 0xdb, 0x86, 0xf5, 0xab, 0x01, 0x66, 0x8b, 0x4f, 0x63, 0x2a, 0x82, 0xa4, - 0x38, 0xb4, 0xcf, 0x01, 0xf1, 0x58, 0x56, 0xd9, 0x41, 0xe3, 0xb3, 0xcd, 0xfb, 0x58, 0xd7, 0xdb, - 0x17, 0x71, 0x13, 0x7e, 0x79, 0xf7, 0x76, 0x7b, 0xe7, 0x47, 0x03, 0x99, 0x06, 0x41, 0x3c, 0xc6, - 0x4f, 0x60, 0x67, 0x4e, 0xc3, 0x19, 0xd3, 0xa5, 0x55, 0xd7, 0x54, 0x1a, 0x07, 0x19, 0x21, 0x6b, - 0xc0, 0xf9, 0xf1, 0x18, 0xf4, 0xa2, 0xf4, 0x71, 0x83, 0xa8, 0xe5, 0xd6, 0x09, 0xa0, 0x8b, 0x18, - 0x97, 0x01, 0xb5, 0x9f, 0x9b, 0x5b, 0xd9, 0xfb, 0x69, 0xdb, 0x34, 0xb2, 0x77, 0xbf, 0x6d, 0x22, - 0x4b, 0x80, 0xb9, 0x5e, 0xe2, 0xf8, 0x15, 0x80, 0x57, 0x6c, 0xe8, 0xf6, 0xad, 0x62, 0x3d, 0x08, - 0x1d, 0xc1, 0x4f, 0x32, 0x82, 0x25, 0xa2, 0x15, 0xc3, 0xc1, 0x6a, 0xd5, 0xff, 0xef, 0x1e, 0x3f, - 0x84, 0xc3, 0xf7, 0xb5, 0x00, 0xeb, 0x03, 0xa8, 0xae, 0x15, 0xac, 0xf5, 0x9b, 0x01, 0xfb, 0x2b, - 0x65, 0x86, 0x1f, 0xc0, 0x5e, 0x5e, 0xaf, 0xaf, 0xd9, 0x42, 0x5d, 0x1c, 0xcd, 0x4a, 0xe6, 0xa9, - 0x24, 0x50, 0xdd, 0x20, 0xa0, 0xad, 0x5f, 0xb1, 0x05, 0xee, 0x40, 0x55, 0x5f, 0x67, 0x6e, 0x42, - 0xa7, 0x71, 0xc8, 0x7c, 0xfd, 0xef, 0xfa, 0x48, 0x47, 0x93, 0xf5, 0x69, 0xbb, 0x23, 0xa8, 0x97, - 0x45, 0x4f, 0xc3, 0x6f, 0xd4, 0x62, 0x72, 0xa0, 0x55, 0x97, 0x4a, 0x84, 0xbf, 0x80, 0xe3, 0x59, - 0xc2, 0xdc, 0x20, 0xf2, 0x59, 0xcc, 0x22, 0x3f, 0xe3, 0x09, 0x1a, 0xf9, 0x7c, 0x1a, 0xb1, 0x24, - 0x91, 0x7d, 0x6f, 0x97, 0xd4, 0x66, 0x09, 0xeb, 0x5d, 0x2f, 0x20, 0x85, 0xdd, 0xf2, 0xa1, 0x52, - 0xd4, 0x34, 0xfe, 0x16, 0xee, 0xa8, 0xdc, 0x25, 0x35, 0xa3, 0xbe, 0xfd, 0xaf, 0x6e, 0x37, 0x9d, - 0xd7, 0x37, 0x06, 0xda, 0x45, 0x24, 0xa7, 0x59, 0x1e, 0xec, 0xe6, 0xc5, 0xbe, 0xec, 0x04, 0xfd, - 0xa7, 0x4e, 0x06, 0x70, 0x77, 0xb9, 0x05, 0xe0, 0x36, 0x94, 0x55, 0x0b, 0xd0, 0xa7, 0xe4, 0xe3, - 0xd5, 0x32, 0x50, 0xbf, 0x31, 0x94, 0xe2, 0x6b, 0x9a, 0x7a, 0x93, 0xb5, 0x43, 0xa1, 0xc5, 0xd6, - 0x0f, 0x80, 0x6f, 0xd6, 0x3e, 0x1e, 0xc2, 0x4e, 0xd6, 0x46, 0x54, 0xa2, 0x2a, 0xcd, 0x7e, 0x26, - 0x7c, 0xfa, 0xc6, 0x38, 0xb7, 0x9a, 0xe2, 0x4b, 0x82, 0xfa, 0x5d, 0x82, 0x06, 0xd9, 0xf3, 0x82, - 0xa0, 0x3e, 0x21, 0x68, 0x90, 0x3d, 0x1d, 0x82, 0x06, 0x2d, 0x82, 0x06, 0x17, 0x04, 0x3d, 0x23, - 0x04, 0x9d, 0xf7, 0x08, 0xea, 0xf4, 0x08, 0x22, 0x7d, 0x52, 0x1a, 0x9c, 0xb5, 0x5f, 0x92, 0x12, - 0xe9, 0x5f, 0xb6, 0x09, 0x3a, 0x6f, 0x11, 0x85, 0x6e, 0x9a, 0xbf, 0x5f, 0x9d, 0x1a, 0x7f, 0x5c, - 0x9d, 0x1a, 0x7f, 0x5e, 0x9d, 0x1a, 0xdf, 0xa1, 0x79, 0x63, 0x58, 0x96, 0x37, 0xfc, 0xe3, 0x7f, - 0x02, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x25, 0xb4, 0x38, 0xa6, 0x09, 0x00, 0x00, + proto.RegisterFile("envoy/config/filter/accesslog/v2/accesslog.proto", fileDescriptor_accesslog_4e8ae33558cf3fe3) +} + +var fileDescriptor_accesslog_4e8ae33558cf3fe3 = []byte{ + // 994 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x96, 0xcf, 0x6f, 0xdb, 0x36, + 0x14, 0xc7, 0x43, 0xc6, 0x71, 0xe3, 0x97, 0x5f, 0x1e, 0x11, 0x2c, 0x6e, 0x90, 0x05, 0x9e, 0x4e, + 0x45, 0x07, 0x48, 0x9d, 0xbb, 0x16, 0x18, 0xb0, 0x4b, 0xec, 0xd8, 0xb5, 0x31, 0xaf, 0x69, 0x98, + 0x1a, 0x0b, 0x36, 0xa0, 0x02, 0x23, 0x31, 0xb6, 0x50, 0x45, 0x14, 0x28, 0xd9, 0x98, 0x0f, 0xbb, + 0xec, 0xb8, 0x63, 0xff, 0x9a, 0x61, 0xbb, 0x74, 0xb7, 0x1d, 0xf7, 0x27, 0x0c, 0xb9, 0x15, 0xbb, + 0xed, 0x2f, 0x18, 0x44, 0x52, 0x8a, 0xed, 0x14, 0x70, 0x30, 0xac, 0x07, 0x59, 0x22, 0x1f, 0xbf, + 0x9f, 0xc7, 0xf7, 0xcc, 0xf7, 0x24, 0x78, 0xc4, 0xa3, 0x89, 0x98, 0x3a, 0x9e, 0x88, 0x2e, 0x83, + 0xa1, 0x73, 0x19, 0x84, 0x29, 0x97, 0x0e, 0xf3, 0x3c, 0x9e, 0x24, 0xa1, 0x18, 0x3a, 0x93, 0xc6, + 0xcd, 0xc0, 0x8e, 0xa5, 0x48, 0x05, 0xa9, 0x2b, 0x85, 0xad, 0x15, 0xb6, 0x56, 0xd8, 0x37, 0x8b, + 0x26, 0x8d, 0xfd, 0x03, 0xcd, 0x64, 0x71, 0x90, 0xe9, 0x3d, 0x21, 0xb9, 0x73, 0xc1, 0x12, 0xae, + 0xf5, 0xfb, 0x87, 0x73, 0x56, 0x29, 0xc6, 0x29, 0xd7, 0xbf, 0xc6, 0x5e, 0xd3, 0xf6, 0x74, 0x1a, + 0x73, 0x27, 0xe6, 0xd2, 0xe3, 0x51, 0x6a, 0x2c, 0xf7, 0x87, 0x42, 0x0c, 0x43, 0xee, 0xa8, 0xd1, + 0xc5, 0xf8, 0xd2, 0x61, 0xd1, 0xd4, 0x98, 0x0e, 0x16, 0x4d, 0x49, 0x2a, 0xc7, 0x5e, 0x2e, 0xdc, + 0x9b, 0xb0, 0x30, 0xf0, 0x59, 0xca, 0x9d, 0xfc, 0x41, 0x1b, 0xac, 0xbf, 0x11, 0x54, 0x8e, 0xd4, + 0xd6, 0xfb, 0x62, 0x48, 0x08, 0x94, 0x22, 0x76, 0xc5, 0x6b, 0xa8, 0x8e, 0x1e, 0x54, 0xa8, 0x7a, + 0x26, 0x3d, 0x28, 0xeb, 0x10, 0x6b, 0xb8, 0x8e, 0x1e, 0x6c, 0x34, 0x3e, 0xb7, 0x97, 0x85, 0x6f, + 0x17, 0xc0, 0x8e, 0x32, 0x52, 0x03, 0x20, 0x4f, 0xa0, 0xac, 0x55, 0xb5, 0x55, 0x85, 0xda, 0xb3, + 0xf5, 0xa6, 0xed, 0x7c, 0xd3, 0xf6, 0x99, 0xda, 0x74, 0x13, 0xd7, 0x50, 0x77, 0x85, 0x9a, 0xc5, + 0xe4, 0x4b, 0xd8, 0xcc, 0x72, 0xe1, 0xbb, 0x46, 0x5c, 0x52, 0xe2, 0xdd, 0x5b, 0xe2, 0xa3, 0x68, + 0xda, 0x5d, 0xa1, 0x1b, 0x6a, 0x6d, 0x4b, 0x2d, 0x6d, 0x6e, 0xc1, 0x86, 0x16, 0xb9, 0xd9, 0xac, + 0xf5, 0x4f, 0x19, 0x76, 0x16, 0x36, 0x47, 0x2e, 0x80, 0x24, 0x29, 0x4b, 0xc7, 0x89, 0xeb, 0x09, + 0x9f, 0xbb, 0x26, 0x56, 0xa4, 0x7c, 0x34, 0x96, 0xc7, 0x7a, 0xa6, 0xb4, 0x2d, 0xe1, 0x73, 0xcd, + 0xeb, 0xae, 0xd0, 0x6a, 0xb2, 0x30, 0x47, 0xbe, 0x87, 0x1d, 0x7f, 0x2c, 0x59, 0x1a, 0x88, 0xc8, + 0x9d, 0x4b, 0xe6, 0xa3, 0xe5, 0x0e, 0x8e, 0x8d, 0xb0, 0xc0, 0x6f, 0xfb, 0x73, 0x33, 0x44, 0xc0, + 0x5e, 0x24, 0x52, 0x77, 0xc4, 0x59, 0x98, 0x8e, 0x5c, 0x6f, 0xc4, 0xbd, 0xd7, 0xb9, 0x13, 0x9d, + 0xe6, 0xa7, 0xcb, 0x9d, 0x3c, 0x17, 0x69, 0x57, 0xe9, 0x5b, 0x99, 0xbc, 0x70, 0xb5, 0x1b, 0xbd, + 0x67, 0x9e, 0xbc, 0x82, 0x6a, 0x2a, 0x99, 0xc7, 0xd9, 0x45, 0x58, 0xe4, 0xab, 0x74, 0xd7, 0xb3, + 0xf1, 0x32, 0x57, 0x16, 0x4e, 0x76, 0xd2, 0xf9, 0x29, 0x72, 0x0e, 0xdb, 0x72, 0x1c, 0xa5, 0xc1, + 0x55, 0x41, 0x5f, 0x53, 0x74, 0x67, 0x39, 0x9d, 0x6a, 0x5d, 0xc1, 0xde, 0x92, 0xb3, 0x13, 0xa4, + 0x0f, 0xc0, 0x22, 0x3f, 0xa7, 0x96, 0x15, 0xf5, 0xb3, 0x3b, 0x9c, 0xe7, 0xc8, 0x2f, 0x88, 0x15, + 0x96, 0x0f, 0x48, 0x0f, 0x2a, 0x42, 0xe6, 0xb0, 0x7b, 0x0a, 0xf6, 0x70, 0x39, 0xec, 0x44, 0x16, + 0xac, 0x75, 0x61, 0x9e, 0xc9, 0x00, 0xb6, 0x46, 0x9c, 0xf9, 0xbc, 0xc0, 0xad, 0x2b, 0x9c, 0xbd, + 0x1c, 0xd7, 0x55, 0xb2, 0x02, 0xb9, 0x39, 0x9a, 0x19, 0x93, 0x11, 0xec, 0x4a, 0x9e, 0xc4, 0x22, + 0x4a, 0xb8, 0x7b, 0x19, 0xb2, 0x61, 0x4e, 0xaf, 0x28, 0xfa, 0x17, 0x77, 0xc8, 0xa7, 0x51, 0x77, + 0x42, 0x36, 0x2c, 0x7c, 0x10, 0x79, 0x6b, 0xb6, 0x79, 0x1f, 0xaa, 0x5a, 0xef, 0x26, 0x31, 0xf7, + 0x82, 0xcb, 0x80, 0x4b, 0xb2, 0xf6, 0xcb, 0xbb, 0xb7, 0xab, 0xc8, 0xfa, 0x0d, 0x41, 0xb5, 0x25, + 0xae, 0x62, 0x26, 0x83, 0xa4, 0x38, 0xb4, 0xa7, 0x80, 0x45, 0xac, 0xaa, 0x6c, 0xbb, 0xf1, 0x64, + 0xf9, 0x3e, 0x16, 0xf5, 0xf6, 0x49, 0xdc, 0x84, 0x5f, 0xdf, 0xbd, 0x5d, 0x5d, 0xfb, 0x09, 0xe1, + 0x2a, 0xa2, 0x58, 0xc4, 0xe4, 0x29, 0xac, 0x4d, 0x58, 0x38, 0xe6, 0xa6, 0xb4, 0xea, 0x86, 0xca, + 0xe2, 0x20, 0x23, 0x64, 0x4d, 0x38, 0x3f, 0x1e, 0x83, 0x5e, 0x94, 0x3e, 0x6e, 0x50, 0xbd, 0xdc, + 0x3a, 0x00, 0x7c, 0x12, 0x93, 0x32, 0xe0, 0xf6, 0x69, 0x75, 0x25, 0xbb, 0x3f, 0x6b, 0x57, 0x51, + 0x76, 0xef, 0xb7, 0xab, 0xd8, 0x92, 0x50, 0x5d, 0x2c, 0x71, 0xf2, 0x0a, 0xc0, 0x2b, 0x36, 0x74, + 0xf7, 0x56, 0xb1, 0x18, 0x84, 0x89, 0xe0, 0x67, 0x15, 0xc1, 0x0c, 0xd1, 0x8a, 0x61, 0x7b, 0xbe, + 0xea, 0x3f, 0xb8, 0xc7, 0x8f, 0x61, 0xf7, 0x7d, 0x2d, 0xc0, 0xfa, 0x08, 0x76, 0x16, 0x0a, 0xd6, + 0xfa, 0x1d, 0xc1, 0xd6, 0x5c, 0x99, 0x91, 0x87, 0xb0, 0x91, 0xd7, 0xeb, 0x6b, 0x3e, 0xd5, 0x2f, + 0x8f, 0x66, 0x25, 0xf3, 0x54, 0x92, 0xb8, 0x8e, 0x28, 0x18, 0xeb, 0xd7, 0x7c, 0x4a, 0x3a, 0xb0, + 0x63, 0x5e, 0x69, 0x6e, 0xc2, 0xae, 0xe2, 0x90, 0xfb, 0xe6, 0xef, 0xfa, 0xc4, 0x44, 0x93, 0xf5, + 0x69, 0xbb, 0x23, 0x99, 0x97, 0x45, 0xcf, 0xc2, 0x17, 0x7a, 0x31, 0xdd, 0x36, 0xaa, 0x33, 0x2d, + 0x22, 0x5f, 0xc1, 0xfe, 0x38, 0xe1, 0x6e, 0x10, 0xf9, 0x3c, 0xe6, 0x91, 0x9f, 0xf1, 0x24, 0x8b, + 0x7c, 0x71, 0x15, 0xf1, 0x24, 0x51, 0x7d, 0x6f, 0x9d, 0xd6, 0xc6, 0x09, 0xef, 0xdd, 0x2c, 0xa0, + 0x85, 0xdd, 0xf2, 0xa1, 0x52, 0xd4, 0x34, 0xf9, 0x16, 0xee, 0xe9, 0xdc, 0x25, 0x35, 0x54, 0x5f, + 0xfd, 0x4f, 0x6f, 0x38, 0x93, 0xd7, 0x37, 0x08, 0xaf, 0x63, 0x9a, 0xd3, 0x2c, 0x0f, 0xd6, 0xf3, + 0x62, 0x9f, 0x75, 0x82, 0xff, 0x57, 0x27, 0x03, 0xd8, 0x9c, 0x6d, 0x01, 0xa4, 0x0d, 0x65, 0xdd, + 0x02, 0xcc, 0x29, 0xf9, 0x74, 0xbe, 0x0c, 0xf4, 0x77, 0x86, 0x56, 0x7c, 0xc3, 0x52, 0x6f, 0xb4, + 0x70, 0x28, 0x8c, 0xd8, 0xfa, 0x11, 0xc8, 0xed, 0xda, 0x27, 0x43, 0x58, 0xcb, 0xda, 0x88, 0x4e, + 0x54, 0xa5, 0x79, 0x9a, 0x09, 0xfb, 0x6f, 0x50, 0xcf, 0x7a, 0x26, 0xdb, 0x14, 0xf7, 0xbb, 0x14, + 0x0f, 0xb2, 0xeb, 0x25, 0xc5, 0x7d, 0x4a, 0xf1, 0x20, 0xbb, 0x3a, 0x14, 0x0f, 0x5a, 0x14, 0x0f, + 0x4e, 0x28, 0x7e, 0x4e, 0x29, 0x3e, 0xee, 0x51, 0xdc, 0xe9, 0x51, 0x4c, 0xfb, 0xb4, 0x34, 0x38, + 0x6a, 0x9f, 0xd3, 0x12, 0xed, 0x9f, 0xb5, 0x29, 0x3e, 0x6e, 0xd1, 0xd5, 0x01, 0x3d, 0xa7, 0x9a, + 0xdf, 0x6c, 0xfe, 0x71, 0x7d, 0x88, 0xfe, 0xbc, 0x3e, 0x44, 0x7f, 0x5d, 0x1f, 0x22, 0xb0, 0x03, + 0xa1, 0xa3, 0x88, 0xa5, 0xf8, 0x61, 0xba, 0x34, 0x71, 0x2f, 0xd0, 0x77, 0x78, 0xd2, 0xb8, 0x28, + 0xab, 0x0f, 0x83, 0xc7, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xdd, 0x9a, 0xe4, 0xf5, 0xe1, 0x09, + 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.validate.go index 333d6646c62b..750e6a066aef 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.validate.go @@ -796,7 +796,7 @@ func (m *ResponseFlagFilter) Validate() error { if _, ok := _ResponseFlagFilter_Flags_InLookup[item]; !ok { return ResponseFlagFilterValidationError{ Field: fmt.Sprintf("Flags[%v]", idx), - Reason: "value must be in list [LH UH UT LR UR UF UC UO NR DI FI RL UAEX RLSE DC]", + Reason: "value must be in list [LH UH UT LR UR UF UC UO NR DI FI RL UAEX RLSE DC URX]", } } @@ -852,4 +852,5 @@ var _ResponseFlagFilter_Flags_InLookup = map[string]struct{}{ "UAEX": {}, "RLSE": {}, "DC": {}, + "URX": {}, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/fault/v2/fault.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/fault/v2/fault.pb.go index 665d16839df9..f6ae8a6e389d 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/fault/v2/fault.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/fault/v2/fault.pb.go @@ -46,7 +46,7 @@ func (x FaultDelay_FaultDelayType) String() string { return proto.EnumName(FaultDelay_FaultDelayType_name, int32(x)) } func (FaultDelay_FaultDelayType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_fault_8d6edcb267807ce6, []int{0, 0} + return fileDescriptor_fault_a089bb335ffda0ce, []int{0, 0} } // Delay specification is used to inject latency into the @@ -69,7 +69,7 @@ func (m *FaultDelay) Reset() { *m = FaultDelay{} } func (m *FaultDelay) String() string { return proto.CompactTextString(m) } func (*FaultDelay) ProtoMessage() {} func (*FaultDelay) Descriptor() ([]byte, []int) { - return fileDescriptor_fault_8d6edcb267807ce6, []int{0} + return fileDescriptor_fault_a089bb335ffda0ce, []int{0} } func (m *FaultDelay) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -562,31 +562,32 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/fault/v2/fault.proto", fileDescriptor_fault_8d6edcb267807ce6) -} - -var fileDescriptor_fault_8d6edcb267807ce6 = []byte{ - // 350 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xbf, 0x4a, 0xc3, 0x40, - 0x18, 0xef, 0x25, 0xad, 0xe8, 0x15, 0x4a, 0x08, 0x05, 0x63, 0xb5, 0xb1, 0x74, 0x2a, 0x0e, 0x77, - 0x10, 0x07, 0x27, 0x97, 0x50, 0x8b, 0x8a, 0x83, 0x14, 0x41, 0x71, 0x29, 0xd7, 0xe4, 0x4b, 0x38, - 0x08, 0xb9, 0x10, 0xd3, 0x60, 0x56, 0x9f, 0xc2, 0x67, 0x70, 0x76, 0x10, 0xa7, 0x8e, 0x8e, 0xbe, - 0x81, 0x92, 0xad, 0x6f, 0x21, 0xb9, 0x4b, 0xb1, 0x2e, 0x6e, 0xbf, 0xe4, 0xfb, 0xfd, 0x3d, 0x3c, - 0x82, 0x38, 0x17, 0x05, 0xf5, 0x44, 0x1c, 0xf0, 0x90, 0x06, 0x3c, 0xca, 0x20, 0xa5, 0x01, 0x5b, - 0x44, 0x19, 0xcd, 0x1d, 0x05, 0x48, 0x92, 0x8a, 0x4c, 0x98, 0x07, 0x92, 0x49, 0x14, 0x93, 0x28, - 0x26, 0x51, 0x84, 0xdc, 0xe9, 0x59, 0xca, 0x27, 0x2b, 0x12, 0xa0, 0x09, 0xa4, 0x1e, 0xc4, 0xb5, - 0xae, 0x67, 0x87, 0x42, 0x84, 0x11, 0x50, 0xf9, 0x35, 0x5f, 0x04, 0xd4, 0x5f, 0xa4, 0x2c, 0xe3, - 0x22, 0xae, 0xef, 0xbb, 0x39, 0x8b, 0xb8, 0xcf, 0x32, 0xa0, 0x6b, 0x50, 0x1f, 0xba, 0xa1, 0x08, - 0x85, 0x84, 0xb4, 0x42, 0xea, 0xef, 0xf0, 0x55, 0xc3, 0x78, 0x52, 0xa5, 0x8e, 0x21, 0x62, 0x85, - 0x79, 0x8b, 0x9b, 0x55, 0xa6, 0x85, 0x06, 0x68, 0xd4, 0x71, 0x4e, 0xc8, 0x7f, 0x25, 0xc9, 0xaf, - 0x6e, 0x03, 0xde, 0x14, 0x09, 0xb8, 0xf8, 0x7d, 0xb5, 0xd4, 0x5b, 0x4f, 0x48, 0x33, 0xd0, 0x54, - 0x1a, 0x9a, 0x57, 0xb8, 0x1d, 0xf0, 0x47, 0xf0, 0x67, 0x7e, 0x45, 0xb2, 0xf4, 0x01, 0x1a, 0xb5, - 0x9d, 0x3d, 0xa2, 0xc6, 0x90, 0xf5, 0x18, 0x32, 0xae, 0xc7, 0xb8, 0x9d, 0xe7, 0xaf, 0x43, 0x24, - 0x5d, 0x5e, 0x90, 0x76, 0xd4, 0x38, 0x6f, 0x4c, 0xb1, 0xd4, 0xab, 0x9a, 0xa7, 0x18, 0xd7, 0xaf, - 0xc2, 0x42, 0xb0, 0x9a, 0xd2, 0xac, 0x5f, 0x97, 0xad, 0xe2, 0xc8, 0x24, 0x65, 0x5e, 0xe5, 0xc3, - 0xa2, 0x6b, 0xc5, 0x9b, 0x6e, 0x08, 0x86, 0xfb, 0xb8, 0xf3, 0xb7, 0xb0, 0xb9, 0x83, 0x5b, 0x93, - 0x8b, 0xbb, 0xb3, 0xb1, 0xd1, 0x70, 0xfb, 0xb8, 0x2b, 0x17, 0xaa, 0xa6, 0xb3, 0x07, 0xf0, 0x78, - 0xc0, 0x21, 0x35, 0x5b, 0x6f, 0xab, 0xa5, 0x8e, 0x2e, 0x9b, 0xdb, 0x9a, 0xa1, 0xbb, 0xc6, 0x47, - 0x69, 0xa3, 0xcf, 0xd2, 0x46, 0xdf, 0xa5, 0x8d, 0xee, 0xb5, 0xdc, 0x99, 0x6f, 0xc9, 0x0d, 0xc7, - 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x79, 0xb1, 0x51, 0xb0, 0x02, 0x02, 0x00, 0x00, + proto.RegisterFile("envoy/config/filter/fault/v2/fault.proto", fileDescriptor_fault_a089bb335ffda0ce) +} + +var fileDescriptor_fault_a089bb335ffda0ce = []byte{ + // 365 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x50, 0xbf, 0x4a, 0xfb, 0x40, + 0x1c, 0xef, 0x25, 0xed, 0x8f, 0x9f, 0x57, 0x28, 0x25, 0x14, 0x8c, 0xd5, 0xc6, 0xd2, 0xa9, 0x74, + 0xb8, 0x83, 0x38, 0x38, 0xe9, 0x10, 0x6a, 0x51, 0x71, 0x28, 0x45, 0x50, 0x5c, 0xca, 0x35, 0xf9, + 0x26, 0x1c, 0x84, 0x5c, 0x88, 0x69, 0x68, 0x56, 0x9f, 0xc2, 0x67, 0x70, 0x76, 0x10, 0xa7, 0x8e, + 0x8e, 0xbe, 0x81, 0xd2, 0xad, 0x6f, 0x21, 0xb9, 0x4b, 0xb1, 0x2e, 0xdd, 0x3e, 0xc9, 0x7d, 0xfe, + 0x7e, 0x71, 0x1f, 0xa2, 0x4c, 0xe4, 0xd4, 0x15, 0x91, 0xcf, 0x03, 0xea, 0xf3, 0x30, 0x85, 0x84, + 0xfa, 0x6c, 0x1e, 0xa6, 0x34, 0xb3, 0x15, 0x20, 0x71, 0x22, 0x52, 0x61, 0x1c, 0x49, 0x26, 0x51, + 0x4c, 0xa2, 0x98, 0x44, 0x11, 0x32, 0xbb, 0x6d, 0x2a, 0x9f, 0x34, 0x8f, 0x81, 0xc6, 0x90, 0xb8, + 0x10, 0x95, 0xba, 0xb6, 0x15, 0x08, 0x11, 0x84, 0x40, 0xe5, 0xd7, 0x6c, 0xee, 0x53, 0x6f, 0x9e, + 0xb0, 0x94, 0x8b, 0xa8, 0x7c, 0xdf, 0xcf, 0x58, 0xc8, 0x3d, 0x96, 0x02, 0xdd, 0x80, 0xf2, 0xa1, + 0x15, 0x88, 0x40, 0x48, 0x48, 0x0b, 0xa4, 0xfe, 0xf6, 0x5e, 0x35, 0x8c, 0x47, 0x45, 0xea, 0x10, + 0x42, 0x96, 0x1b, 0x77, 0xb8, 0x5a, 0x64, 0x9a, 0xa8, 0x8b, 0xfa, 0x0d, 0xfb, 0x94, 0xec, 0x2a, + 0x49, 0x7e, 0x75, 0x5b, 0xf0, 0x36, 0x8f, 0xc1, 0xc1, 0xef, 0xeb, 0xa5, 0x5e, 0x7b, 0x42, 0x5a, + 0x13, 0x4d, 0xa4, 0xa1, 0x71, 0x83, 0xeb, 0x3e, 0x5f, 0x80, 0x37, 0xf5, 0x0a, 0x92, 0xa9, 0x77, + 0x51, 0xbf, 0x6e, 0x1f, 0x10, 0x35, 0x86, 0x6c, 0xc6, 0x90, 0x61, 0x39, 0xc6, 0x69, 0x3c, 0x7f, + 0x1d, 0x23, 0xe9, 0xf2, 0x82, 0xb4, 0x41, 0xe5, 0xb2, 0x32, 0xc1, 0x52, 0xaf, 0x6a, 0x9e, 0x61, + 0x5c, 0x5e, 0x85, 0x05, 0x60, 0x56, 0xa5, 0x59, 0xa7, 0x2c, 0x5b, 0xc4, 0x91, 0x51, 0xc2, 0xdc, + 0xc2, 0x87, 0x85, 0x63, 0xc5, 0x9b, 0x6c, 0x09, 0x7a, 0x87, 0xb8, 0xf1, 0xb7, 0xb0, 0xb1, 0x87, + 0x6b, 0xa3, 0xab, 0xfb, 0x8b, 0x61, 0xb3, 0xe2, 0x74, 0x70, 0x4b, 0x2e, 0x54, 0x4d, 0xa7, 0x8f, + 0xe0, 0x72, 0x9f, 0x43, 0x62, 0xd4, 0xde, 0xd6, 0x4b, 0x1d, 0x5d, 0x57, 0xff, 0x6b, 0x4d, 0xdd, + 0x39, 0xff, 0x58, 0x59, 0xe8, 0x73, 0x65, 0xa1, 0xef, 0x95, 0x85, 0xf0, 0x80, 0x0b, 0x15, 0x1e, + 0x27, 0x62, 0x91, 0xef, 0x3c, 0xda, 0x18, 0x3d, 0x68, 0x99, 0x3d, 0xfb, 0x27, 0x17, 0x9f, 0xfc, + 0x04, 0x00, 0x00, 0xff, 0xff, 0xf3, 0x22, 0x71, 0xdd, 0x30, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/buffer/v2/buffer.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/buffer/v2/buffer.pb.go index eb7f058cc64f..238d096bc738 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/buffer/v2/buffer.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/buffer/v2/buffer.pb.go @@ -10,17 +10,12 @@ import _ "github.com/gogo/protobuf/gogoproto" import types "github.com/gogo/protobuf/types" import _ "github.com/lyft/protoc-gen-validate/validate" -import time "time" - -import github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - import io "io" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -31,20 +26,17 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type Buffer struct { // The maximum request size that the filter will buffer before the connection // manager will stop buffering and return a 413 response. - MaxRequestBytes *types.UInt32Value `protobuf:"bytes,1,opt,name=max_request_bytes,json=maxRequestBytes,proto3" json:"max_request_bytes,omitempty"` - // The maximum number of seconds that the filter will wait for a complete - // request before returning a 408 response. - MaxRequestTime *time.Duration `protobuf:"bytes,2,opt,name=max_request_time,json=maxRequestTime,proto3,stdduration" json:"max_request_time,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + MaxRequestBytes *types.UInt32Value `protobuf:"bytes,1,opt,name=max_request_bytes,json=maxRequestBytes,proto3" json:"max_request_bytes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Buffer) Reset() { *m = Buffer{} } func (m *Buffer) String() string { return proto.CompactTextString(m) } func (*Buffer) ProtoMessage() {} func (*Buffer) Descriptor() ([]byte, []int) { - return fileDescriptor_buffer_bab525dd99d47059, []int{0} + return fileDescriptor_buffer_15878113f6bc9bdb, []int{0} } func (m *Buffer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -80,13 +72,6 @@ func (m *Buffer) GetMaxRequestBytes() *types.UInt32Value { return nil } -func (m *Buffer) GetMaxRequestTime() *time.Duration { - if m != nil { - return m.MaxRequestTime - } - return nil -} - type BufferPerRoute struct { // Types that are valid to be assigned to Override: // *BufferPerRoute_Disabled @@ -101,7 +86,7 @@ func (m *BufferPerRoute) Reset() { *m = BufferPerRoute{} } func (m *BufferPerRoute) String() string { return proto.CompactTextString(m) } func (*BufferPerRoute) ProtoMessage() {} func (*BufferPerRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_buffer_bab525dd99d47059, []int{1} + return fileDescriptor_buffer_15878113f6bc9bdb, []int{1} } func (m *BufferPerRoute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -269,16 +254,6 @@ func (m *Buffer) MarshalTo(dAtA []byte) (int, error) { } i += n1 } - if m.MaxRequestTime != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintBuffer(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.MaxRequestTime))) - n2, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.MaxRequestTime, dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -301,11 +276,11 @@ func (m *BufferPerRoute) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.Override != nil { - nn3, err := m.Override.MarshalTo(dAtA[i:]) + nn2, err := m.Override.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn3 + i += nn2 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -331,11 +306,11 @@ func (m *BufferPerRoute_Buffer) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintBuffer(dAtA, i, uint64(m.Buffer.Size())) - n4, err := m.Buffer.MarshalTo(dAtA[i:]) + n3, err := m.Buffer.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n4 + i += n3 } return i, nil } @@ -358,10 +333,6 @@ func (m *Buffer) Size() (n int) { l = m.MaxRequestBytes.Size() n += 1 + l + sovBuffer(uint64(l)) } - if m.MaxRequestTime != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.MaxRequestTime) - n += 1 + l + sovBuffer(uint64(l)) - } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -480,39 +451,6 @@ func (m *Buffer) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxRequestTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBuffer - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBuffer - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxRequestTime == nil { - m.MaxRequestTime = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.MaxRequestTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipBuffer(dAtA[iNdEx:]) @@ -745,33 +683,31 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/buffer/v2/buffer.proto", fileDescriptor_buffer_bab525dd99d47059) -} - -var fileDescriptor_buffer_bab525dd99d47059 = []byte{ - // 378 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x3f, 0x8e, 0xd3, 0x40, - 0x18, 0xc5, 0x33, 0xce, 0x1f, 0xcc, 0x20, 0x05, 0xc7, 0x42, 0x22, 0x20, 0x64, 0xa2, 0x34, 0xa0, - 0x14, 0x33, 0x92, 0x73, 0x03, 0x8b, 0x02, 0xba, 0xc8, 0x10, 0x0a, 0x9a, 0x68, 0x8c, 0x3f, 0x9b, - 0x41, 0xb6, 0xc7, 0x8c, 0xc7, 0x26, 0xb9, 0x02, 0x27, 0xa0, 0xe2, 0x00, 0xd4, 0x14, 0x88, 0x2a, - 0x25, 0xe5, 0xde, 0x60, 0x57, 0xe9, 0x72, 0x8b, 0x95, 0x3d, 0x93, 0xdd, 0x95, 0x52, 0x6c, 0xf7, - 0xe4, 0xe7, 0xf7, 0x7b, 0xef, 0xb3, 0x31, 0x85, 0xa2, 0x11, 0x3b, 0xfa, 0x59, 0x14, 0x09, 0x4f, - 0x69, 0xc2, 0x33, 0x05, 0x92, 0x7e, 0x51, 0xaa, 0xa4, 0x51, 0x9d, 0x24, 0x20, 0x69, 0xe3, 0x1b, - 0x45, 0x4a, 0x29, 0x94, 0x70, 0xe7, 0x5d, 0x80, 0xe8, 0x00, 0xd1, 0x01, 0xd2, 0x06, 0x88, 0x79, - 0xad, 0xf1, 0x9f, 0x7b, 0xa9, 0x10, 0x69, 0x06, 0xb4, 0x4b, 0x44, 0x75, 0x42, 0xe3, 0x5a, 0x32, - 0xc5, 0x45, 0xa1, 0x19, 0xe7, 0xfe, 0x77, 0xc9, 0xca, 0x12, 0x64, 0x65, 0xfc, 0xa7, 0x0d, 0xcb, - 0x78, 0xcc, 0x14, 0xd0, 0x93, 0x30, 0xc6, 0x93, 0x54, 0xa4, 0xa2, 0x93, 0xb4, 0x55, 0xfa, 0xe9, - 0xfc, 0x0f, 0xc2, 0xa3, 0xa0, 0x2b, 0x77, 0xdf, 0xe3, 0x49, 0xce, 0xb6, 0x1b, 0x09, 0xdf, 0x6a, - 0xa8, 0xd4, 0x26, 0xda, 0x29, 0xa8, 0xa6, 0x68, 0x86, 0x5e, 0x3f, 0xf2, 0x5f, 0x10, 0xdd, 0x4a, - 0x4e, 0xad, 0x64, 0xfd, 0xae, 0x50, 0x4b, 0xff, 0x23, 0xcb, 0x6a, 0x08, 0x1e, 0xfe, 0x3b, 0xee, - 0xfb, 0x83, 0x85, 0x35, 0xeb, 0x85, 0x8f, 0x73, 0xb6, 0x0d, 0x35, 0x20, 0x68, 0xf3, 0xee, 0x1a, - 0x3b, 0x77, 0xa1, 0x8a, 0xe7, 0x30, 0xb5, 0x3a, 0xe6, 0xb3, 0x33, 0xe6, 0x1b, 0x73, 0x69, 0xe0, - 0xfc, 0xbc, 0x7c, 0x89, 0x5a, 0xe8, 0x83, 0xdf, 0x68, 0x60, 0xa3, 0x45, 0x2f, 0x1c, 0xdf, 0x72, - 0x3f, 0xf0, 0x1c, 0xe6, 0xbf, 0x10, 0x1e, 0xeb, 0xd9, 0x2b, 0x90, 0xa1, 0xa8, 0x15, 0xb8, 0xaf, - 0xb0, 0x1d, 0xf3, 0x8a, 0x45, 0x19, 0xc4, 0xdd, 0x6a, 0xdb, 0xec, 0xfa, 0x6a, 0xd9, 0xe8, 0x6d, - 0x2f, 0xbc, 0x31, 0xdd, 0x15, 0x1e, 0xe9, 0xcf, 0x6d, 0x86, 0x2c, 0xc8, 0xfd, 0xbf, 0x85, 0xe8, - 0xb2, 0x00, 0xb7, 0xc8, 0xe1, 0x0f, 0x64, 0x39, 0x2d, 0xd3, 0x70, 0x82, 0x09, 0xb6, 0x45, 0x03, - 0x52, 0xf2, 0x18, 0xdc, 0xe1, 0xdf, 0xe3, 0xbe, 0x8f, 0x02, 0xe7, 0xff, 0xc1, 0x43, 0x17, 0x07, - 0x0f, 0x5d, 0x1d, 0x3c, 0xf4, 0xc9, 0x6a, 0xfc, 0x68, 0xd4, 0xdd, 0xb9, 0xbc, 0x0e, 0x00, 0x00, - 0xff, 0xff, 0x5f, 0xce, 0x73, 0x1f, 0x36, 0x02, 0x00, 0x00, + proto.RegisterFile("envoy/config/filter/http/buffer/v2/buffer.proto", fileDescriptor_buffer_15878113f6bc9bdb) +} + +var fileDescriptor_buffer_15878113f6bc9bdb = []byte{ + // 352 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xbf, 0x4e, 0xeb, 0x30, + 0x18, 0xc5, 0xeb, 0xf4, 0x8f, 0x72, 0x7d, 0xa5, 0x7b, 0xdb, 0xe8, 0x4a, 0xb7, 0x42, 0x28, 0xaa, + 0xba, 0x80, 0x3a, 0xd8, 0x28, 0x7d, 0x83, 0x88, 0x01, 0x98, 0xaa, 0x20, 0x18, 0x58, 0x2a, 0xa7, + 0xf9, 0x12, 0x8c, 0xd2, 0x38, 0x38, 0x4e, 0x68, 0x5f, 0x81, 0x87, 0xe0, 0x39, 0x10, 0x53, 0x47, + 0x46, 0x1e, 0x01, 0x75, 0xeb, 0x5b, 0xa0, 0xd8, 0x29, 0x0b, 0x03, 0x6c, 0x47, 0x39, 0x39, 0xbf, + 0x9f, 0xf5, 0x61, 0x0a, 0x59, 0x25, 0xd6, 0x74, 0x21, 0xb2, 0x98, 0x27, 0x34, 0xe6, 0xa9, 0x02, + 0x49, 0x6f, 0x95, 0xca, 0x69, 0x58, 0xc6, 0x31, 0x48, 0x5a, 0x79, 0x4d, 0x22, 0xb9, 0x14, 0x4a, + 0x38, 0x63, 0x3d, 0x20, 0x66, 0x40, 0xcc, 0x80, 0xd4, 0x03, 0xd2, 0xfc, 0x56, 0x79, 0x07, 0x6e, + 0x22, 0x44, 0x92, 0x02, 0xd5, 0x8b, 0xb0, 0x8c, 0x69, 0x54, 0x4a, 0xa6, 0xb8, 0xc8, 0x0c, 0xe3, + 0x6b, 0xff, 0x20, 0x59, 0x9e, 0x83, 0x2c, 0x9a, 0xfe, 0x7f, 0xc5, 0x52, 0x1e, 0x31, 0x05, 0x74, + 0x1f, 0x9a, 0xe2, 0x5f, 0x22, 0x12, 0xa1, 0x23, 0xad, 0x93, 0xf9, 0x3a, 0x5e, 0xe0, 0x9e, 0xaf, + 0xdd, 0xce, 0x25, 0x1e, 0x2c, 0xd9, 0x6a, 0x2e, 0xe1, 0xbe, 0x84, 0x42, 0xcd, 0xc3, 0xb5, 0x82, + 0x62, 0x88, 0x46, 0xe8, 0xf8, 0xb7, 0x77, 0x48, 0x8c, 0x94, 0xec, 0xa5, 0xe4, 0xea, 0x3c, 0x53, + 0x53, 0xef, 0x9a, 0xa5, 0x25, 0xf8, 0xbf, 0x5e, 0x76, 0x9b, 0x76, 0x67, 0x62, 0x8d, 0x5a, 0xc1, + 0xdf, 0x25, 0x5b, 0x05, 0x06, 0xe0, 0xd7, 0xfb, 0x8b, 0x8e, 0x6d, 0xf5, 0xdb, 0xe3, 0x27, 0x84, + 0xff, 0x18, 0xcb, 0x0c, 0x64, 0x20, 0x4a, 0x05, 0xce, 0x11, 0xb6, 0x23, 0x5e, 0xb0, 0x30, 0x85, + 0x48, 0x4b, 0xec, 0x06, 0x73, 0x67, 0xd9, 0xe8, 0xac, 0x15, 0x7c, 0x96, 0xce, 0x0c, 0xf7, 0xcc, + 0x71, 0x86, 0x96, 0x7e, 0xcb, 0x84, 0x7c, 0x7f, 0x44, 0x62, 0x64, 0x3e, 0xae, 0x91, 0xdd, 0x47, + 0x64, 0xf5, 0x6b, 0x66, 0xc3, 0xf1, 0x07, 0xd8, 0x16, 0x15, 0x48, 0xc9, 0x23, 0x70, 0xba, 0xcf, + 0xbb, 0x4d, 0x1b, 0xf9, 0xa7, 0xaf, 0x5b, 0x17, 0xbd, 0x6d, 0x5d, 0xf4, 0xbe, 0x75, 0x11, 0x3e, + 0xe1, 0xc2, 0x48, 0x72, 0x29, 0x56, 0xeb, 0x1f, 0xf8, 0x66, 0xe8, 0xc6, 0xaa, 0xbc, 0xb0, 0xa7, + 0xcf, 0x33, 0xfd, 0x08, 0x00, 0x00, 0xff, 0xff, 0x55, 0x9e, 0x79, 0x3f, 0x18, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/buffer/v2/buffer.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/buffer/v2/buffer.pb.validate.go index 57b3ae3f9d4e..7a4b8fb17f12 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/buffer/v2/buffer.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/buffer/v2/buffer.pb.validate.go @@ -52,27 +52,6 @@ func (m *Buffer) Validate() error { } - if m.GetMaxRequestTime() == nil { - return BufferValidationError{ - Field: "MaxRequestTime", - Reason: "value is required", - } - } - - if d := m.GetMaxRequestTime(); d != nil { - dur := *d - - gt := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur <= gt { - return BufferValidationError{ - Field: "MaxRequestTime", - Reason: "value must be greater than 0s", - } - } - - } - return nil } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ext_authz/v2alpha/ext_authz.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ext_authz/v2alpha/ext_authz.pb.go index 7038cc10cabb..ebd7c7958639 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ext_authz/v2alpha/ext_authz.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ext_authz/v2alpha/ext_authz.pb.go @@ -7,6 +7,7 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" import core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" +import matcher "github.com/envoyproxy/go-control-plane/envoy/type/matcher" import _ "github.com/lyft/protoc-gen-validate/validate" import io "io" @@ -22,23 +23,25 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -// External Authorization filter calls out to an external service over either: -// -// 1. gRPC Authorization API defined by :ref:`CheckRequest -// `. -// 2. Raw HTTP Authorization server by passing the request headers to the service. -// -// A failed check will cause this filter to close the HTTP request normally with 403 (Forbidden), -// unless a different status code has been indicated in the authorization response. +// External Authorization filter calls out to an external service over either +// gRPC or raw HTTP clients. type ExtAuthz struct { // Types that are valid to be assigned to Services: // *ExtAuthz_GrpcService // *ExtAuthz_HttpService Services isExtAuthz_Services `protobuf_oneof:"services"` - // The filter's behaviour in case the external authorization service does - // not respond back. When set to true, Envoy will also allow traffic in cases when - // an error occurs during the authorization process. - // Defaults to false. + // Allows bypassing the filter on errors during the authorization process. + // + // 1. When *failure_mode_allow* is true, traffic will be allowed in the presence of an error. + // This includes any of the HTTP 5xx errors, or a communication failure between the filter and + // the authorization server. + // 2. When *failure_mode_allow* is false, the filter will *always* return a *Forbidden response* + // to the client. It will *not allow* traffic to the upstream in the presence of an error. This + // includes any of the HTTP 5xx errors, or a communication failure between the filter and the + // authorization server. + // + // Note that filter will produce stats on error. See *Statistics* at :ref:`configuration overview + // `. FailureModeAllow bool `protobuf:"varint,2,opt,name=failure_mode_allow,json=failureModeAllow,proto3" json:"failure_mode_allow,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -49,7 +52,7 @@ func (m *ExtAuthz) Reset() { *m = ExtAuthz{} } func (m *ExtAuthz) String() string { return proto.CompactTextString(m) } func (*ExtAuthz) ProtoMessage() {} func (*ExtAuthz) Descriptor() ([]byte, []int) { - return fileDescriptor_ext_authz_f362effcab29acea, []int{0} + return fileDescriptor_ext_authz_7f90224561a9d52f, []int{0} } func (m *ExtAuthz) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -196,59 +199,49 @@ func _ExtAuthz_OneofSizer(msg proto.Message) (n int) { return n } -// External Authorization filter calls out to an upstream authorization server by passing the raw +// External Authorization filter calls an authorization server by passing the raw // HTTP request headers to the server. This allows the authorization service to take a decision -// whether the request is authorized or not. +// whether the request should be authorized or not. // // A successful check allows the authorization service adding or overriding headers from the -// original request before dispatching it to the upstream. This is done by configuring which headers -// in the authorization response should be sent to the upstream. See *allowed_authorization_headers* -// below. +// original request before dispatching them to the upstream. This is done by configuring which +// headers in the authorization response should be sent to the upstream. See +// :ref:`allowed_upstream_headers +// ` +// for more details. // // A failed check will cause this filter to close the HTTP request with 403 (Forbidden), // unless a different status code has been indicated by the authorization server via response -// headers. -// -// If an error happens during the checking process, two situations may occur depending on the -// filter's configuration: +// headers. In addition to the the status code and with exception of the *Authority*, the filter +// will send all headers from the authorization server back to the client by default. See +// :ref:`allowed_client_headers +// ` +// for more details. // -// 1. When *failure_mode_allow* is true, traffic will be allowed in the presence of an error. This -// includes any of the HTTP 5xx errors, or a communication failure between the filter and the -// authorization server. -// 2. When *failure_mode_allow* is false, the filter will *always* return a *Forbidden response* to -// the client. It will *not allow* traffic to the upstream in the presence of an error. This -// includes any of the HTTP 5xx errors, or a communication failure between the filter and the -// authorization server. +// .. note:: // -// Note that filter will produce stats on error. See *Statistics* at :ref:`configuration overview -// `. +// Unlike the gRPC client that request and response headers are passed in the message, +// headers forwarded by via the raw HTTP client will affect the request or the response. type HttpService struct { // Sets the HTTP server URI which the authorization requests must be sent to. ServerUri *core.HttpUri `protobuf:"bytes,1,opt,name=server_uri,json=serverUri,proto3" json:"server_uri,omitempty"` // Sets an optional prefix to the value of authorization request header *Path*. PathPrefix string `protobuf:"bytes,2,opt,name=path_prefix,json=pathPrefix,proto3" json:"path_prefix,omitempty"` - // Sets a list of headers that can be sent from the authorization server to the upstream service, - // or to the downstream client when present in the authorization response. Note that a matched - // request header will have its value overridden by the ones sent from the authorization server. - AllowedAuthorizationHeaders []string `protobuf:"bytes,4,rep,name=allowed_authorization_headers,json=allowedAuthorizationHeaders,proto3" json:"allowed_authorization_headers,omitempty"` - // Sets a list of headers that should be sent *from the filter* to the authorization server - // when they are also present in the client request. Note that *Content-Length*, *Authority*, - // *Method* and *Path* are always dispatched to the authorization server by default. The message - // will not contain body data and the *Content-Length* will be set to zero. - AllowedRequestHeaders []string `protobuf:"bytes,5,rep,name=allowed_request_headers,json=allowedRequestHeaders,proto3" json:"allowed_request_headers,omitempty"` - // Sets a list of headers and their values that will be added to the request to external - // authorization server. Note that these will override the headers coming from the downstream. - AuthorizationHeadersToAdd []*core.HeaderValue `protobuf:"bytes,6,rep,name=authorization_headers_to_add,json=authorizationHeadersToAdd,proto3" json:"authorization_headers_to_add,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // Settings for controlling request headers forwarded from the filter to the authorization server. + AuthorizationRequest *AuthorizationRequest `protobuf:"bytes,7,opt,name=authorization_request,json=authorizationRequest,proto3" json:"authorization_request,omitempty"` + // Settings for controlling authorization response forwarded from the filter to a client, + // or to an upstream service. + AuthorizationResponse *AuthorizationResponse `protobuf:"bytes,8,opt,name=authorization_response,json=authorizationResponse,proto3" json:"authorization_response,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HttpService) Reset() { *m = HttpService{} } func (m *HttpService) String() string { return proto.CompactTextString(m) } func (*HttpService) ProtoMessage() {} func (*HttpService) Descriptor() ([]byte, []int) { - return fileDescriptor_ext_authz_f362effcab29acea, []int{1} + return fileDescriptor_ext_authz_7f90224561a9d52f, []int{1} } func (m *HttpService) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -291,23 +284,142 @@ func (m *HttpService) GetPathPrefix() string { return "" } -func (m *HttpService) GetAllowedAuthorizationHeaders() []string { +func (m *HttpService) GetAuthorizationRequest() *AuthorizationRequest { + if m != nil { + return m.AuthorizationRequest + } + return nil +} + +func (m *HttpService) GetAuthorizationResponse() *AuthorizationResponse { if m != nil { - return m.AllowedAuthorizationHeaders + return m.AuthorizationResponse } return nil } -func (m *HttpService) GetAllowedRequestHeaders() []string { +type AuthorizationRequest struct { + // Sets a list of matchers that are used to determine which client request headers should + // be forwarded *from the filter* to the authorization server. Note that *Content-Length*, + // *Authority*, *Method*, *Path* and *Authorization* are always dispatched to the authorization + // server by default. The message will not contain body data and the *Content-Length* will be set + // to zero. + AllowedHeaders *matcher.ListStringMatcher `protobuf:"bytes,1,opt,name=allowed_headers,json=allowedHeaders,proto3" json:"allowed_headers,omitempty"` + // Sets a list of headers and their values that will be added to the request to external + // authorization server. Note that these will override the headers coming from the downstream. + HeadersToAdd []*core.HeaderValue `protobuf:"bytes,2,rep,name=headers_to_add,json=headersToAdd,proto3" json:"headers_to_add,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AuthorizationRequest) Reset() { *m = AuthorizationRequest{} } +func (m *AuthorizationRequest) String() string { return proto.CompactTextString(m) } +func (*AuthorizationRequest) ProtoMessage() {} +func (*AuthorizationRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_ext_authz_7f90224561a9d52f, []int{2} +} +func (m *AuthorizationRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuthorizationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AuthorizationRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *AuthorizationRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuthorizationRequest.Merge(dst, src) +} +func (m *AuthorizationRequest) XXX_Size() int { + return m.Size() +} +func (m *AuthorizationRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AuthorizationRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AuthorizationRequest proto.InternalMessageInfo + +func (m *AuthorizationRequest) GetAllowedHeaders() *matcher.ListStringMatcher { if m != nil { - return m.AllowedRequestHeaders + return m.AllowedHeaders } return nil } -func (m *HttpService) GetAuthorizationHeadersToAdd() []*core.HeaderValue { +func (m *AuthorizationRequest) GetHeadersToAdd() []*core.HeaderValue { if m != nil { - return m.AuthorizationHeadersToAdd + return m.HeadersToAdd + } + return nil +} + +type AuthorizationResponse struct { + // Sets a list of matchers that are used to determine which authorization response headers should + // be forwarded *from the filter* to the upstream service only when the HTTP status is a 200 OK. + // Note that these headers will override that the original request headers when respectively + // matched. + AllowedUpstreamHeaders *matcher.ListStringMatcher `protobuf:"bytes,1,opt,name=allowed_upstream_headers,json=allowedUpstreamHeaders,proto3" json:"allowed_upstream_headers,omitempty"` + // Sets a list of keys that are used to determine which authorization response headers should + // be forwarded *from the filter* to the client when the HTTP status is *NOT* a 200 OK. Note that + // when this list is empty, all the authorization response headers, except *Authority* will be + // sent to the client (default). When a header is included in this list, *Path*, *Status*, + // *Content-Length*, *WWWAuthenticate* and *Location* are automatically added. + AllowedClientHeaders *matcher.ListStringMatcher `protobuf:"bytes,2,opt,name=allowed_client_headers,json=allowedClientHeaders,proto3" json:"allowed_client_headers,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AuthorizationResponse) Reset() { *m = AuthorizationResponse{} } +func (m *AuthorizationResponse) String() string { return proto.CompactTextString(m) } +func (*AuthorizationResponse) ProtoMessage() {} +func (*AuthorizationResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_ext_authz_7f90224561a9d52f, []int{3} +} +func (m *AuthorizationResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuthorizationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AuthorizationResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *AuthorizationResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuthorizationResponse.Merge(dst, src) +} +func (m *AuthorizationResponse) XXX_Size() int { + return m.Size() +} +func (m *AuthorizationResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AuthorizationResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AuthorizationResponse proto.InternalMessageInfo + +func (m *AuthorizationResponse) GetAllowedUpstreamHeaders() *matcher.ListStringMatcher { + if m != nil { + return m.AllowedUpstreamHeaders + } + return nil +} + +func (m *AuthorizationResponse) GetAllowedClientHeaders() *matcher.ListStringMatcher { + if m != nil { + return m.AllowedClientHeaders } return nil } @@ -327,7 +439,7 @@ func (m *ExtAuthzPerRoute) Reset() { *m = ExtAuthzPerRoute{} } func (m *ExtAuthzPerRoute) String() string { return proto.CompactTextString(m) } func (*ExtAuthzPerRoute) ProtoMessage() {} func (*ExtAuthzPerRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_ext_authz_f362effcab29acea, []int{2} + return fileDescriptor_ext_authz_7f90224561a9d52f, []int{4} } func (m *ExtAuthzPerRoute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -492,7 +604,7 @@ func (m *CheckSettings) Reset() { *m = CheckSettings{} } func (m *CheckSettings) String() string { return proto.CompactTextString(m) } func (*CheckSettings) ProtoMessage() {} func (*CheckSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ext_authz_f362effcab29acea, []int{3} + return fileDescriptor_ext_authz_7f90224561a9d52f, []int{5} } func (m *CheckSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -531,6 +643,8 @@ func (m *CheckSettings) GetContextExtensions() map[string]string { func init() { proto.RegisterType((*ExtAuthz)(nil), "envoy.config.filter.http.ext_authz.v2alpha.ExtAuthz") proto.RegisterType((*HttpService)(nil), "envoy.config.filter.http.ext_authz.v2alpha.HttpService") + proto.RegisterType((*AuthorizationRequest)(nil), "envoy.config.filter.http.ext_authz.v2alpha.AuthorizationRequest") + proto.RegisterType((*AuthorizationResponse)(nil), "envoy.config.filter.http.ext_authz.v2alpha.AuthorizationResponse") proto.RegisterType((*ExtAuthzPerRoute)(nil), "envoy.config.filter.http.ext_authz.v2alpha.ExtAuthzPerRoute") proto.RegisterType((*CheckSettings)(nil), "envoy.config.filter.http.ext_authz.v2alpha.CheckSettings") proto.RegisterMapType((map[string]string)(nil), "envoy.config.filter.http.ext_authz.v2alpha.CheckSettings.ContextExtensionsEntry") @@ -632,39 +746,60 @@ func (m *HttpService) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintExtAuthz(dAtA, i, uint64(len(m.PathPrefix))) i += copy(dAtA[i:], m.PathPrefix) } - if len(m.AllowedAuthorizationHeaders) > 0 { - for _, s := range m.AllowedAuthorizationHeaders { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if m.AuthorizationRequest != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintExtAuthz(dAtA, i, uint64(m.AuthorizationRequest.Size())) + n5, err := m.AuthorizationRequest.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err } + i += n5 } - if len(m.AllowedRequestHeaders) > 0 { - for _, s := range m.AllowedRequestHeaders { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if m.AuthorizationResponse != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintExtAuthz(dAtA, i, uint64(m.AuthorizationResponse.Size())) + n6, err := m.AuthorizationResponse.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err } + i += n6 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) } - if len(m.AuthorizationHeadersToAdd) > 0 { - for _, msg := range m.AuthorizationHeadersToAdd { - dAtA[i] = 0x32 + return i, nil +} + +func (m *AuthorizationRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AuthorizationRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.AllowedHeaders != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintExtAuthz(dAtA, i, uint64(m.AllowedHeaders.Size())) + n7, err := m.AllowedHeaders.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n7 + } + if len(m.HeadersToAdd) > 0 { + for _, msg := range m.HeadersToAdd { + dAtA[i] = 0x12 i++ i = encodeVarintExtAuthz(dAtA, i, uint64(msg.Size())) n, err := msg.MarshalTo(dAtA[i:]) @@ -680,6 +815,47 @@ func (m *HttpService) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *AuthorizationResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AuthorizationResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.AllowedUpstreamHeaders != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintExtAuthz(dAtA, i, uint64(m.AllowedUpstreamHeaders.Size())) + n8, err := m.AllowedUpstreamHeaders.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n8 + } + if m.AllowedClientHeaders != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintExtAuthz(dAtA, i, uint64(m.AllowedClientHeaders.Size())) + n9, err := m.AllowedClientHeaders.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n9 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + func (m *ExtAuthzPerRoute) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -696,11 +872,11 @@ func (m *ExtAuthzPerRoute) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.Override != nil { - nn5, err := m.Override.MarshalTo(dAtA[i:]) + nn10, err := m.Override.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn5 + i += nn10 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -726,11 +902,11 @@ func (m *ExtAuthzPerRoute_CheckSettings) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintExtAuthz(dAtA, i, uint64(m.CheckSettings.Size())) - n6, err := m.CheckSettings.MarshalTo(dAtA[i:]) + n11, err := m.CheckSettings.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n6 + i += n11 } return i, nil } @@ -837,20 +1013,32 @@ func (m *HttpService) Size() (n int) { if l > 0 { n += 1 + l + sovExtAuthz(uint64(l)) } - if len(m.AllowedAuthorizationHeaders) > 0 { - for _, s := range m.AllowedAuthorizationHeaders { - l = len(s) - n += 1 + l + sovExtAuthz(uint64(l)) - } + if m.AuthorizationRequest != nil { + l = m.AuthorizationRequest.Size() + n += 1 + l + sovExtAuthz(uint64(l)) } - if len(m.AllowedRequestHeaders) > 0 { - for _, s := range m.AllowedRequestHeaders { - l = len(s) - n += 1 + l + sovExtAuthz(uint64(l)) - } + if m.AuthorizationResponse != nil { + l = m.AuthorizationResponse.Size() + n += 1 + l + sovExtAuthz(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *AuthorizationRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.AllowedHeaders != nil { + l = m.AllowedHeaders.Size() + n += 1 + l + sovExtAuthz(uint64(l)) } - if len(m.AuthorizationHeadersToAdd) > 0 { - for _, e := range m.AuthorizationHeadersToAdd { + if len(m.HeadersToAdd) > 0 { + for _, e := range m.HeadersToAdd { l = e.Size() n += 1 + l + sovExtAuthz(uint64(l)) } @@ -861,6 +1049,26 @@ func (m *HttpService) Size() (n int) { return n } +func (m *AuthorizationResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.AllowedUpstreamHeaders != nil { + l = m.AllowedUpstreamHeaders.Size() + n += 1 + l + sovExtAuthz(uint64(l)) + } + if m.AllowedClientHeaders != nil { + l = m.AllowedClientHeaders.Size() + n += 1 + l + sovExtAuthz(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *ExtAuthzPerRoute) Size() (n int) { if m == nil { return 0 @@ -1156,11 +1364,11 @@ func (m *HttpService) Unmarshal(dAtA []byte) error { } m.PathPrefix = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedAuthorizationHeaders", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AuthorizationRequest", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowExtAuthz @@ -1170,26 +1378,30 @@ func (m *HttpService) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthExtAuthz } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedAuthorizationHeaders = append(m.AllowedAuthorizationHeaders, string(dAtA[iNdEx:postIndex])) + if m.AuthorizationRequest == nil { + m.AuthorizationRequest = &AuthorizationRequest{} + } + if err := m.AuthorizationRequest.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 5: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedRequestHeaders", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AuthorizationResponse", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowExtAuthz @@ -1199,24 +1411,79 @@ func (m *HttpService) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthExtAuthz } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedRequestHeaders = append(m.AllowedRequestHeaders, string(dAtA[iNdEx:postIndex])) + if m.AuthorizationResponse == nil { + m.AuthorizationResponse = &AuthorizationResponse{} + } + if err := m.AuthorizationResponse.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 6: + default: + iNdEx = preIndex + skippy, err := skipExtAuthz(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthExtAuthz + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthorizationRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExtAuthz + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthorizationRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthorizationRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthorizationHeadersToAdd", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedHeaders", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1240,8 +1507,158 @@ func (m *HttpService) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AuthorizationHeadersToAdd = append(m.AuthorizationHeadersToAdd, &core.HeaderValue{}) - if err := m.AuthorizationHeadersToAdd[len(m.AuthorizationHeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.AllowedHeaders == nil { + m.AllowedHeaders = &matcher.ListStringMatcher{} + } + if err := m.AllowedHeaders.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HeadersToAdd", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExtAuthz + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthExtAuthz + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HeadersToAdd = append(m.HeadersToAdd, &core.HeaderValue{}) + if err := m.HeadersToAdd[len(m.HeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipExtAuthz(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthExtAuthz + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthorizationResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExtAuthz + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthorizationResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthorizationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedUpstreamHeaders", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExtAuthz + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthExtAuthz + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AllowedUpstreamHeaders == nil { + m.AllowedUpstreamHeaders = &matcher.ListStringMatcher{} + } + if err := m.AllowedUpstreamHeaders.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedClientHeaders", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExtAuthz + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthExtAuthz + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AllowedClientHeaders == nil { + m.AllowedClientHeaders = &matcher.ListStringMatcher{} + } + if err := m.AllowedClientHeaders.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1646,49 +2063,58 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/ext_authz/v2alpha/ext_authz.proto", fileDescriptor_ext_authz_f362effcab29acea) -} - -var fileDescriptor_ext_authz_f362effcab29acea = []byte{ - // 630 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xcf, 0x6b, 0x13, 0x4f, - 0x14, 0xef, 0xe4, 0x47, 0xbf, 0x9b, 0x49, 0xfb, 0x25, 0x1d, 0xac, 0x8d, 0xb1, 0xc6, 0x10, 0x04, - 0x8b, 0xc8, 0x2e, 0x44, 0x50, 0xdb, 0x5b, 0x52, 0x8b, 0x41, 0x10, 0xca, 0xd6, 0x7a, 0x10, 0x61, - 0x99, 0xee, 0xbe, 0x64, 0xc7, 0xae, 0x3b, 0xeb, 0xec, 0x64, 0x4d, 0x7b, 0xf1, 0xee, 0x5f, 0x24, - 0x1e, 0xa4, 0x47, 0x0f, 0x1e, 0x3c, 0x79, 0x96, 0x5e, 0xa4, 0xff, 0x85, 0xcc, 0xcc, 0xa6, 0x49, - 0x6d, 0x04, 0xf5, 0xb6, 0xf3, 0x3e, 0xbf, 0xde, 0x7b, 0x33, 0x8b, 0xb7, 0x20, 0xce, 0xf8, 0x91, - 0xe3, 0xf3, 0x78, 0xc0, 0x86, 0xce, 0x80, 0x45, 0x12, 0x84, 0x13, 0x4a, 0x99, 0x38, 0x30, 0x96, - 0x1e, 0x1d, 0xc9, 0xf0, 0xd8, 0xc9, 0x3a, 0x34, 0x4a, 0x42, 0x3a, 0xad, 0xd8, 0x89, 0xe0, 0x92, - 0x93, 0x3b, 0x5a, 0x6b, 0x1b, 0xad, 0x6d, 0xb4, 0xb6, 0xd2, 0xda, 0x53, 0x66, 0xae, 0x6d, 0xac, - 0x9b, 0x1c, 0x9a, 0x30, 0x27, 0xeb, 0x38, 0x3e, 0x17, 0xe0, 0x1c, 0xd0, 0x14, 0x8c, 0x53, 0xe3, - 0xd6, 0x65, 0x74, 0x28, 0x12, 0xdf, 0x4b, 0x41, 0x64, 0xcc, 0x9f, 0xb0, 0x5a, 0x97, 0x59, 0x2a, - 0xcd, 0x1b, 0x09, 0x96, 0x33, 0xd6, 0x32, 0x1a, 0xb1, 0x80, 0x4a, 0x70, 0x26, 0x1f, 0x06, 0x68, - 0xff, 0x40, 0xd8, 0xda, 0x19, 0xcb, 0xae, 0xea, 0x89, 0x6c, 0xe3, 0xa5, 0x59, 0xf7, 0x3a, 0x6a, - 0xa1, 0x8d, 0x6a, 0xa7, 0x69, 0x9b, 0x71, 0x68, 0xc2, 0xec, 0xac, 0x63, 0x2b, 0x7b, 0xfb, 0xb1, - 0x48, 0xfc, 0x3d, 0xc3, 0xea, 0x2f, 0xb8, 0xd5, 0xe1, 0xf4, 0x48, 0xee, 0x62, 0x32, 0xa0, 0x2c, - 0x1a, 0x09, 0xf0, 0x5e, 0xf3, 0x00, 0x3c, 0x1a, 0x45, 0xfc, 0x6d, 0xbd, 0xd0, 0x42, 0x1b, 0x96, - 0x5b, 0xcb, 0x91, 0xa7, 0x3c, 0x80, 0xae, 0xaa, 0x93, 0x97, 0x78, 0x49, 0xb7, 0x3a, 0x89, 0x2c, - 0xea, 0xc8, 0x07, 0xf6, 0x9f, 0x6f, 0xd0, 0xee, 0x4b, 0x99, 0xcc, 0xf4, 0x12, 0x4e, 0x8f, 0x3d, - 0x8c, 0xad, 0xdc, 0x38, 0x6d, 0x7f, 0x29, 0xe0, 0xea, 0x0c, 0x95, 0x6c, 0x62, 0xac, 0x30, 0x10, - 0x6a, 0x4d, 0xf9, 0xa8, 0x8d, 0x39, 0xa3, 0x2a, 0xcd, 0xbe, 0x60, 0x6e, 0xc5, 0xb0, 0xf7, 0x05, - 0x23, 0x37, 0x71, 0x35, 0xa1, 0x32, 0xf4, 0x12, 0x01, 0x03, 0x36, 0xd6, 0xb3, 0x55, 0x5c, 0xac, - 0x4a, 0xbb, 0xba, 0x42, 0x7a, 0xf8, 0x86, 0x1e, 0x1b, 0x02, 0xdd, 0x2b, 0x17, 0xec, 0x98, 0x4a, - 0xc6, 0x63, 0x2f, 0x04, 0x1a, 0x80, 0x48, 0xeb, 0xa5, 0x56, 0x71, 0xa3, 0xe2, 0x5e, 0xcf, 0x49, - 0xdd, 0x59, 0x4e, 0xdf, 0x50, 0xc8, 0x7d, 0xbc, 0x36, 0xf1, 0x10, 0xf0, 0x66, 0x04, 0xa9, 0x3c, - 0x57, 0x97, 0xb5, 0x7a, 0x35, 0x87, 0x5d, 0x83, 0x4e, 0x74, 0x1e, 0x5e, 0x9f, 0x9b, 0xe9, 0x49, - 0xee, 0xd1, 0x20, 0xa8, 0x2f, 0xb6, 0x8a, 0xbf, 0xb9, 0x54, 0xe3, 0xf0, 0x9c, 0x46, 0x23, 0x70, - 0xaf, 0xd1, 0x39, 0x3d, 0x3d, 0xe3, 0xdd, 0x20, 0x78, 0x52, 0xb2, 0x8a, 0xb5, 0x52, 0xfb, 0x13, - 0xc2, 0xb5, 0xc9, 0xc3, 0xd9, 0x05, 0xe1, 0xf2, 0x91, 0x04, 0x72, 0x1b, 0x5b, 0x01, 0x4b, 0xe9, - 0x41, 0x04, 0x81, 0xde, 0xa8, 0xd5, 0xab, 0x7c, 0x3c, 0x3b, 0x29, 0x96, 0x5e, 0x15, 0x2c, 0xd4, - 0x5f, 0x70, 0xcf, 0x41, 0x12, 0xe3, 0xff, 0xfd, 0x10, 0xfc, 0x43, 0x2f, 0x05, 0x29, 0x59, 0x3c, - 0x4c, 0xf5, 0x12, 0xab, 0x9d, 0xcd, 0xbf, 0xb9, 0xf8, 0x6d, 0xe5, 0xb0, 0x97, 0x1b, 0xf4, 0xb0, - 0x4a, 0x2a, 0xbf, 0x47, 0x85, 0x9a, 0x8a, 0x5a, 0xf6, 0x2f, 0x80, 0x2b, 0xd8, 0xe2, 0x19, 0x08, - 0xc1, 0x02, 0x20, 0xe5, 0x0f, 0x67, 0x27, 0x45, 0xd4, 0xfe, 0x86, 0xf0, 0xf2, 0x05, 0x07, 0xf2, - 0x0e, 0x13, 0x9f, 0xc7, 0x52, 0x05, 0xc1, 0x58, 0x42, 0x9c, 0x32, 0x1e, 0xa7, 0x75, 0xa4, 0xf7, - 0xb5, 0xfb, 0xcf, 0x8d, 0xd9, 0xdb, 0xc6, 0x73, 0xe7, 0xdc, 0x72, 0x27, 0x96, 0xe2, 0xc8, 0x5d, - 0xf1, 0x7f, 0xad, 0x37, 0x1e, 0xe1, 0xab, 0xf3, 0xc9, 0xa4, 0x86, 0x8b, 0x87, 0x70, 0xa4, 0x77, - 0x5a, 0x71, 0xd5, 0x27, 0xb9, 0x82, 0xcb, 0x99, 0xba, 0xa9, 0xfc, 0xf5, 0x99, 0xc3, 0x56, 0xe1, - 0x21, 0xea, 0xad, 0x7e, 0x3e, 0x6d, 0xa2, 0xaf, 0xa7, 0x4d, 0xf4, 0xfd, 0xb4, 0x89, 0x5e, 0xfc, - 0x97, 0x37, 0x75, 0xb0, 0xa8, 0x7f, 0xf8, 0x7b, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xc5, 0x26, - 0x3e, 0xe1, 0xd9, 0x04, 0x00, 0x00, + proto.RegisterFile("envoy/config/filter/http/ext_authz/v2alpha/ext_authz.proto", fileDescriptor_ext_authz_7f90224561a9d52f) +} + +var fileDescriptor_ext_authz_7f90224561a9d52f = []byte{ + // 776 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4f, 0x8f, 0xdb, 0x44, + 0x14, 0xef, 0xe4, 0xcf, 0xae, 0x77, 0x76, 0xbb, 0xb8, 0xa3, 0xec, 0x12, 0x45, 0x28, 0x8d, 0x22, + 0x10, 0x15, 0x42, 0xb6, 0x14, 0x0e, 0xb4, 0x3d, 0x91, 0xa4, 0x2b, 0xa2, 0x88, 0xa2, 0xe0, 0x65, + 0x39, 0x00, 0x92, 0x35, 0x6b, 0xbf, 0xc4, 0x43, 0xbd, 0x1e, 0x33, 0x1e, 0x9b, 0xa4, 0x17, 0xee, + 0x7c, 0x16, 0x3e, 0x00, 0xe2, 0x80, 0x7a, 0xe4, 0xc8, 0x05, 0xce, 0x68, 0x2f, 0xa8, 0x57, 0x3e, + 0x01, 0x1a, 0xcf, 0x78, 0x93, 0xb6, 0x41, 0x22, 0xe5, 0xe6, 0x79, 0xef, 0xf7, 0xe7, 0xfd, 0x66, + 0x5e, 0x82, 0x1f, 0x42, 0x52, 0xf0, 0x95, 0x1b, 0xf0, 0x64, 0xce, 0x16, 0xee, 0x9c, 0xc5, 0x12, + 0x84, 0x1b, 0x49, 0x99, 0xba, 0xb0, 0x94, 0x3e, 0xcd, 0x65, 0xf4, 0xd4, 0x2d, 0x06, 0x34, 0x4e, + 0x23, 0xba, 0xae, 0x38, 0xa9, 0xe0, 0x92, 0x93, 0xf7, 0x4a, 0xae, 0xa3, 0xb9, 0x8e, 0xe6, 0x3a, + 0x8a, 0xeb, 0xac, 0x91, 0x86, 0xdb, 0x79, 0x4b, 0xfb, 0xd0, 0x94, 0xb9, 0xc5, 0xc0, 0x0d, 0xb8, + 0x00, 0xf7, 0x92, 0x66, 0xa0, 0x95, 0x3a, 0x6f, 0xbf, 0xda, 0x5d, 0x88, 0x34, 0xf0, 0x33, 0x10, + 0x05, 0x0b, 0x2a, 0x54, 0xef, 0x55, 0x94, 0x72, 0xf3, 0x73, 0xc1, 0x0c, 0xe2, 0xae, 0x46, 0xc8, + 0x55, 0x0a, 0xee, 0x15, 0x95, 0x41, 0x04, 0xc2, 0xcd, 0xa4, 0x60, 0xc9, 0xc2, 0x00, 0xde, 0x2c, + 0x68, 0xcc, 0x42, 0x2a, 0xc1, 0xad, 0x3e, 0x74, 0xa3, 0xff, 0x17, 0xc2, 0xd6, 0xd9, 0x52, 0x0e, + 0xd5, 0xd0, 0x64, 0x8c, 0x8f, 0x36, 0xed, 0xdb, 0xa8, 0x87, 0xee, 0x1d, 0x0e, 0xba, 0x8e, 0xce, + 0x4b, 0x53, 0xe6, 0x14, 0x03, 0x47, 0xf9, 0x3b, 0x1f, 0x8b, 0x34, 0x38, 0xd7, 0xa8, 0xc9, 0x2d, + 0xef, 0x70, 0xb1, 0x3e, 0x92, 0xf7, 0x31, 0x99, 0x53, 0x16, 0xe7, 0x02, 0xfc, 0x2b, 0x1e, 0x82, + 0x4f, 0xe3, 0x98, 0x7f, 0xd7, 0xae, 0xf5, 0xd0, 0x3d, 0xcb, 0xb3, 0x4d, 0xe7, 0x31, 0x0f, 0x61, + 0xa8, 0xea, 0xe4, 0x6b, 0x7c, 0x54, 0x66, 0xa9, 0x2c, 0xeb, 0xa5, 0xe5, 0x87, 0xce, 0x7f, 0xbf, + 0x62, 0x67, 0x22, 0x65, 0xba, 0x31, 0x4b, 0xb4, 0x3e, 0x8e, 0x30, 0xb6, 0x8c, 0x70, 0xd6, 0xff, + 0xbb, 0x86, 0x0f, 0x37, 0xa0, 0xe4, 0x01, 0xc6, 0xaa, 0x07, 0x42, 0xdd, 0xa3, 0x89, 0xda, 0xd9, + 0x12, 0x55, 0x71, 0x2e, 0x04, 0xf3, 0x0e, 0x34, 0xfa, 0x42, 0x30, 0x72, 0x17, 0x1f, 0xa6, 0x54, + 0x46, 0x7e, 0x2a, 0x60, 0xce, 0x96, 0x65, 0xb6, 0x03, 0x0f, 0xab, 0xd2, 0xac, 0xac, 0x90, 0x1c, + 0x9f, 0xa8, 0x19, 0xb9, 0x60, 0x4f, 0xa9, 0x64, 0x3c, 0xf1, 0x05, 0x7c, 0x9b, 0x43, 0x26, 0xdb, + 0xfb, 0xa5, 0xcd, 0x47, 0xbb, 0xc4, 0x1b, 0x6e, 0x0a, 0x79, 0x5a, 0xc7, 0x6b, 0xd1, 0x2d, 0x55, + 0xb2, 0xc4, 0xa7, 0x2f, 0xdb, 0x66, 0x29, 0x4f, 0x32, 0x68, 0x5b, 0xa5, 0xef, 0xf0, 0x7f, 0xf8, + 0x6a, 0x21, 0xef, 0x84, 0x6e, 0x2b, 0x4f, 0x1b, 0x56, 0xdd, 0x6e, 0x4c, 0x1b, 0x56, 0xc3, 0x6e, + 0x4e, 0x1b, 0x56, 0xd3, 0xde, 0x9b, 0x36, 0xac, 0x3d, 0x7b, 0xbf, 0xff, 0x23, 0xc2, 0xad, 0x6d, + 0x01, 0xc8, 0xa7, 0xf8, 0x8d, 0x72, 0x31, 0x20, 0xf4, 0x23, 0xa0, 0x21, 0x88, 0xcc, 0x3c, 0xc1, + 0x3b, 0x66, 0x46, 0xb5, 0xcb, 0x8e, 0xd9, 0x65, 0xe7, 0x13, 0x96, 0xc9, 0xf3, 0x72, 0x9f, 0x1f, + 0xeb, 0x8a, 0x77, 0x6c, 0xd8, 0x13, 0x4d, 0x26, 0x8f, 0xf0, 0xb1, 0xd1, 0xf1, 0x25, 0xf7, 0x69, + 0x18, 0xb6, 0x6b, 0xbd, 0xfa, 0xbf, 0x2c, 0xaf, 0xe6, 0x7c, 0x41, 0xe3, 0x1c, 0xbc, 0x23, 0xc3, + 0xfa, 0x9c, 0x0f, 0xc3, 0xb0, 0xff, 0x3b, 0xc2, 0x27, 0x5b, 0x73, 0x13, 0x1f, 0xb7, 0xab, 0x79, + 0xf3, 0x34, 0x93, 0x02, 0xe8, 0xd5, 0xeb, 0x0d, 0x7e, 0x6a, 0x64, 0x2e, 0x8c, 0x4a, 0x15, 0xe0, + 0x2b, 0x5c, 0x75, 0xfc, 0x20, 0x66, 0x90, 0xc8, 0x1b, 0xf9, 0xda, 0x2e, 0xf2, 0x2d, 0x23, 0x32, + 0x2e, 0x35, 0x8c, 0x78, 0xff, 0x17, 0x84, 0xed, 0xea, 0x57, 0x3e, 0x03, 0xe1, 0xf1, 0x5c, 0x02, + 0x79, 0x17, 0x5b, 0x21, 0xcb, 0xe8, 0x65, 0x0c, 0x61, 0x19, 0xc1, 0x1a, 0x1d, 0xfc, 0xfc, 0xfc, + 0x59, 0xbd, 0xf1, 0x4d, 0xcd, 0x42, 0x93, 0x5b, 0xde, 0x4d, 0x93, 0x24, 0xf8, 0x38, 0x88, 0x20, + 0x78, 0xe2, 0x67, 0x20, 0x25, 0x4b, 0x16, 0xd5, 0x48, 0x0f, 0x76, 0x59, 0xa7, 0xb1, 0x52, 0x38, + 0x37, 0x02, 0x23, 0xac, 0x9c, 0x9a, 0x3f, 0xa0, 0x9a, 0xad, 0xac, 0x6e, 0x07, 0x2f, 0x34, 0xef, + 0x60, 0x8b, 0x17, 0x20, 0x04, 0x0b, 0x81, 0x34, 0x7f, 0x7a, 0xfe, 0xac, 0x8e, 0xfa, 0x7f, 0x20, + 0x7c, 0xfb, 0x05, 0x05, 0xf2, 0x3d, 0x26, 0x01, 0x4f, 0xa4, 0x32, 0x82, 0xa5, 0x84, 0x24, 0x63, + 0x3c, 0x51, 0x4f, 0xa1, 0x1e, 0x7d, 0xf6, 0xda, 0x83, 0x39, 0x63, 0xad, 0x79, 0x76, 0x23, 0x79, + 0x96, 0x48, 0xb1, 0xf2, 0xee, 0x04, 0x2f, 0xd7, 0x3b, 0x8f, 0xf0, 0xe9, 0x76, 0x30, 0xb1, 0x71, + 0xfd, 0x09, 0xac, 0xca, 0x3b, 0x3d, 0xf0, 0xd4, 0x27, 0x69, 0xe1, 0x66, 0xa1, 0xd6, 0xcd, 0xfc, + 0x55, 0xe8, 0xc3, 0xc3, 0xda, 0x7d, 0x34, 0xfa, 0xec, 0xd7, 0xeb, 0x2e, 0xfa, 0xed, 0xba, 0x8b, + 0xfe, 0xbc, 0xee, 0x22, 0x7c, 0x9f, 0x71, 0x3d, 0x7a, 0x2a, 0xf8, 0x72, 0xb5, 0x43, 0x8a, 0x19, + 0xfa, 0x72, 0xdf, 0x7c, 0x5e, 0xee, 0x95, 0xff, 0xec, 0x1f, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, + 0xad, 0xf7, 0x02, 0xb5, 0xe3, 0x06, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ext_authz/v2alpha/ext_authz.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ext_authz/v2alpha/ext_authz.pb.validate.go index 5fd105d1f61e..57db2b313ec6 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ext_authz/v2alpha/ext_authz.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ext_authz/v2alpha/ext_authz.pb.validate.go @@ -125,13 +125,85 @@ func (m *HttpService) Validate() error { // no validation rules for PathPrefix - for idx, item := range m.GetAuthorizationHeadersToAdd() { + if v, ok := interface{}(m.GetAuthorizationRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpServiceValidationError{ + Field: "AuthorizationRequest", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + if v, ok := interface{}(m.GetAuthorizationResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpServiceValidationError{ + Field: "AuthorizationResponse", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + return nil +} + +// HttpServiceValidationError is the validation error returned by +// HttpService.Validate if the designated constraints aren't met. +type HttpServiceValidationError struct { + Field string + Reason string + Cause error + Key bool +} + +// Error satisfies the builtin error interface +func (e HttpServiceValidationError) Error() string { + cause := "" + if e.Cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.Cause) + } + + key := "" + if e.Key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHttpService.%s: %s%s", + key, + e.Field, + e.Reason, + cause) +} + +var _ error = HttpServiceValidationError{} + +// Validate checks the field values on AuthorizationRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *AuthorizationRequest) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetAllowedHeaders()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AuthorizationRequestValidationError{ + Field: "AllowedHeaders", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + for idx, item := range m.GetHeadersToAdd() { _, _ = idx, item if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return HttpServiceValidationError{ - Field: fmt.Sprintf("AuthorizationHeadersToAdd[%v]", idx), + return AuthorizationRequestValidationError{ + Field: fmt.Sprintf("HeadersToAdd[%v]", idx), Reason: "embedded message failed validation", Cause: err, } @@ -143,9 +215,9 @@ func (m *HttpService) Validate() error { return nil } -// HttpServiceValidationError is the validation error returned by -// HttpService.Validate if the designated constraints aren't met. -type HttpServiceValidationError struct { +// AuthorizationRequestValidationError is the validation error returned by +// AuthorizationRequest.Validate if the designated constraints aren't met. +type AuthorizationRequestValidationError struct { Field string Reason string Cause error @@ -153,7 +225,7 @@ type HttpServiceValidationError struct { } // Error satisfies the builtin error interface -func (e HttpServiceValidationError) Error() string { +func (e AuthorizationRequestValidationError) Error() string { cause := "" if e.Cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.Cause) @@ -165,14 +237,76 @@ func (e HttpServiceValidationError) Error() string { } return fmt.Sprintf( - "invalid %sHttpService.%s: %s%s", + "invalid %sAuthorizationRequest.%s: %s%s", key, e.Field, e.Reason, cause) } -var _ error = HttpServiceValidationError{} +var _ error = AuthorizationRequestValidationError{} + +// Validate checks the field values on AuthorizationResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *AuthorizationResponse) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetAllowedUpstreamHeaders()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AuthorizationResponseValidationError{ + Field: "AllowedUpstreamHeaders", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + if v, ok := interface{}(m.GetAllowedClientHeaders()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AuthorizationResponseValidationError{ + Field: "AllowedClientHeaders", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + return nil +} + +// AuthorizationResponseValidationError is the validation error returned by +// AuthorizationResponse.Validate if the designated constraints aren't met. +type AuthorizationResponseValidationError struct { + Field string + Reason string + Cause error + Key bool +} + +// Error satisfies the builtin error interface +func (e AuthorizationResponseValidationError) Error() string { + cause := "" + if e.Cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.Cause) + } + + key := "" + if e.Key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sAuthorizationResponse.%s: %s%s", + key, + e.Field, + e.Reason, + cause) +} + +var _ error = AuthorizationResponseValidationError{} // Validate checks the field values on ExtAuthzPerRoute with the rules defined // in the proto definition for this message. If any rules are violated, an diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/fault/v2/fault.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/fault/v2/fault.pb.go index d1e77e019c70..27df7df59e83 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/fault/v2/fault.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/fault/v2/fault.pb.go @@ -40,7 +40,7 @@ func (m *FaultAbort) Reset() { *m = FaultAbort{} } func (m *FaultAbort) String() string { return proto.CompactTextString(m) } func (*FaultAbort) ProtoMessage() {} func (*FaultAbort) Descriptor() ([]byte, []int) { - return fileDescriptor_fault_96e2e89be5d38910, []int{0} + return fileDescriptor_fault_9a333c6e52415b04, []int{0} } func (m *FaultAbort) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -189,7 +189,7 @@ func (m *HTTPFault) Reset() { *m = HTTPFault{} } func (m *HTTPFault) String() string { return proto.CompactTextString(m) } func (*HTTPFault) ProtoMessage() {} func (*HTTPFault) Descriptor() ([]byte, []int) { - return fileDescriptor_fault_96e2e89be5d38910, []int{1} + return fileDescriptor_fault_9a333c6e52415b04, []int{1} } func (m *HTTPFault) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -878,36 +878,37 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/fault/v2/fault.proto", fileDescriptor_fault_96e2e89be5d38910) -} - -var fileDescriptor_fault_96e2e89be5d38910 = []byte{ - // 425 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xcf, 0x8b, 0xd3, 0x40, - 0x14, 0xc7, 0x9d, 0xa4, 0x59, 0x77, 0x27, 0x2c, 0x86, 0xf1, 0x60, 0x28, 0x18, 0xb2, 0x7b, 0x8a, - 0xc2, 0x4e, 0x24, 0x1e, 0x45, 0xc1, 0xae, 0x94, 0x22, 0x28, 0x25, 0xf6, 0xe4, 0xa5, 0x4c, 0x93, - 0xd7, 0x36, 0x10, 0x33, 0x61, 0x32, 0x89, 0xf4, 0x3f, 0xf1, 0xee, 0x3f, 0x21, 0x9e, 0x7a, 0xec, - 0xd1, 0xa3, 0x47, 0xe9, 0xad, 0xff, 0x85, 0xcc, 0x4c, 0x43, 0x3d, 0x14, 0xbc, 0x0c, 0xc3, 0x7b, - 0x9f, 0xef, 0xfb, 0xbe, 0x1f, 0xf8, 0x0e, 0xaa, 0x8e, 0x6f, 0xe2, 0x8c, 0x57, 0xcb, 0x62, 0x15, - 0x2f, 0x8b, 0x52, 0x82, 0x88, 0xd7, 0x52, 0xd6, 0xf1, 0x92, 0xb5, 0xa5, 0x8c, 0xbb, 0xc4, 0x7c, - 0x68, 0x2d, 0xb8, 0xe4, 0xe4, 0x46, 0xe3, 0xd4, 0xe0, 0xd4, 0xe0, 0x54, 0xe1, 0xd4, 0x50, 0x5d, - 0x32, 0x0c, 0x4c, 0x45, 0x56, 0x17, 0x4a, 0x2c, 0x78, 0x2b, 0xc1, 0xbc, 0xa6, 0xc4, 0x30, 0x3a, - 0xe7, 0x78, 0xce, 0x6c, 0xe8, 0x1b, 0x52, 0x6e, 0x6a, 0x88, 0x6b, 0x10, 0x19, 0x54, 0x7d, 0xe6, - 0x49, 0xc7, 0xca, 0x22, 0x67, 0x12, 0xe2, 0xfe, 0x63, 0x12, 0xb7, 0xdf, 0x10, 0xc6, 0x63, 0x55, - 0xe2, 0xed, 0x82, 0x0b, 0x49, 0x5e, 0x60, 0x57, 0x35, 0x37, 0x6f, 0x24, 0x93, 0x6d, 0xe3, 0x5b, - 0x21, 0x8a, 0xae, 0x47, 0xd7, 0x3f, 0x0f, 0x5b, 0xfb, 0xf2, 0xf9, 0x85, 0xf7, 0x7b, 0x10, 0xed, - 0xd0, 0xe4, 0x41, 0x8a, 0x15, 0xf3, 0x49, 0x23, 0xe4, 0x35, 0xc6, 0x47, 0x2b, 0xb6, 0x02, 0xdf, - 0x0e, 0x51, 0xe4, 0x26, 0x4f, 0xa9, 0x99, 0x5a, 0x35, 0x42, 0xc7, 0x82, 0x65, 0xb2, 0xe0, 0x15, - 0x2b, 0xa7, 0x86, 0x4b, 0xff, 0x11, 0x8c, 0x1e, 0x63, 0x0c, 0x42, 0x70, 0x31, 0x57, 0x2c, 0x71, - 0x7e, 0x1c, 0xb6, 0x36, 0x7a, 0x3f, 0xb8, 0x44, 0x9e, 0x75, 0xfb, 0xdd, 0xc2, 0x57, 0x93, 0xd9, - 0x6c, 0xaa, 0xdb, 0x23, 0x6f, 0xb0, 0x93, 0x43, 0xc9, 0x36, 0x3e, 0xd2, 0x16, 0x11, 0x3d, 0xb7, - 0xd8, 0x7e, 0xa7, 0x54, 0x6b, 0xde, 0x29, 0x3e, 0x35, 0x32, 0x72, 0x8f, 0x1d, 0xa6, 0x46, 0xd4, - 0x33, 0xb9, 0xc9, 0x1d, 0xfd, 0xef, 0x61, 0xe8, 0x69, 0x2f, 0xa9, 0xd1, 0x92, 0x67, 0xd8, 0x6b, - 0xeb, 0x46, 0x0a, 0x60, 0x5f, 0xe6, 0x59, 0xd9, 0x36, 0x12, 0x84, 0x1e, 0xf9, 0x2a, 0x7d, 0xd4, - 0xc7, 0xef, 0x4d, 0x98, 0xbc, 0xc2, 0x0f, 0xd7, 0xc0, 0x72, 0x10, 0x8d, 0x3f, 0x08, 0xed, 0xc8, - 0x4d, 0x6e, 0x8e, 0x8e, 0xac, 0x2e, 0x54, 0x71, 0x73, 0xe1, 0x89, 0x46, 0x3e, 0x30, 0x99, 0xad, - 0x41, 0xa4, 0xbd, 0x42, 0xf9, 0xe4, 0xfc, 0x6b, 0x75, 0x74, 0xaa, 0x78, 0x0e, 0x8d, 0xef, 0x84, - 0xb6, 0xf2, 0x39, 0xc5, 0x3f, 0xaa, 0xf0, 0xc8, 0xdb, 0xed, 0x03, 0xf4, 0x6b, 0x1f, 0xa0, 0x3f, - 0xfb, 0x00, 0x7d, 0xb6, 0xba, 0x64, 0x71, 0xa1, 0x2f, 0xfb, 0xf2, 0x6f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x87, 0xf1, 0x30, 0xe1, 0xaa, 0x02, 0x00, 0x00, + proto.RegisterFile("envoy/config/filter/http/fault/v2/fault.proto", fileDescriptor_fault_9a333c6e52415b04) +} + +var fileDescriptor_fault_9a333c6e52415b04 = []byte{ + // 440 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x41, 0x8b, 0xd3, 0x40, + 0x14, 0xc7, 0x9d, 0xa6, 0x5d, 0x77, 0xa7, 0x2c, 0x96, 0xf1, 0x60, 0x28, 0x58, 0xba, 0x7b, 0x8a, + 0xc2, 0xce, 0x48, 0x3c, 0x8a, 0x82, 0xad, 0x2c, 0x45, 0x50, 0x4a, 0xdc, 0x93, 0x97, 0x32, 0x9b, + 0xbc, 0x6e, 0x03, 0x31, 0x33, 0x4c, 0x26, 0xd1, 0x7c, 0x13, 0xef, 0x7e, 0x09, 0xf1, 0xb4, 0xc7, + 0x3d, 0x7a, 0xf4, 0x28, 0xbd, 0xed, 0xb7, 0x90, 0x99, 0xd7, 0xb0, 0x1e, 0x0a, 0x7b, 0x09, 0xc3, + 0x9b, 0xdf, 0xff, 0xfd, 0xdf, 0xff, 0x4d, 0xe8, 0x19, 0x94, 0x8d, 0x6a, 0x45, 0xaa, 0xca, 0x75, + 0x7e, 0x25, 0xd6, 0x79, 0x61, 0xc1, 0x88, 0x8d, 0xb5, 0x5a, 0xac, 0x65, 0x5d, 0x58, 0xd1, 0xc4, + 0x78, 0xe0, 0xda, 0x28, 0xab, 0xd8, 0x89, 0xc7, 0x39, 0xe2, 0x1c, 0x71, 0xee, 0x70, 0x8e, 0x54, + 0x13, 0x8f, 0x27, 0xd8, 0x51, 0xea, 0xdc, 0x89, 0x8d, 0xaa, 0x2d, 0xe0, 0x17, 0x5b, 0x8c, 0xa3, + 0x7d, 0x8e, 0xfb, 0xcc, 0xc6, 0x21, 0x92, 0xb6, 0xd5, 0x20, 0x34, 0x98, 0x14, 0xca, 0xee, 0xe6, + 0x49, 0x23, 0x8b, 0x3c, 0x93, 0x16, 0x44, 0x77, 0xc0, 0x8b, 0xd3, 0xef, 0x84, 0xd2, 0x73, 0xd7, + 0xe2, 0xed, 0xa5, 0x32, 0x96, 0xbd, 0xa0, 0x43, 0x37, 0xdc, 0xaa, 0xb2, 0xd2, 0xd6, 0x55, 0xd8, + 0x9b, 0x92, 0xe8, 0x78, 0x76, 0xfc, 0xeb, 0xf6, 0x3a, 0x38, 0x7c, 0x7e, 0x30, 0xfa, 0xd3, 0x8f, + 0x6e, 0xc8, 0xe2, 0x41, 0x42, 0x1d, 0xf3, 0xc9, 0x23, 0xec, 0x35, 0xa5, 0x3b, 0x2b, 0x79, 0x05, + 0x61, 0x30, 0x25, 0xd1, 0x30, 0x7e, 0xca, 0x31, 0xb5, 0x1b, 0x84, 0x9f, 0x1b, 0x99, 0xda, 0x5c, + 0x95, 0xb2, 0x58, 0x22, 0x97, 0xfc, 0x27, 0x98, 0x3d, 0xa6, 0x14, 0x8c, 0x51, 0x66, 0xe5, 0x58, + 0x36, 0xf8, 0x79, 0x7b, 0x1d, 0x90, 0xf7, 0xfd, 0x43, 0x32, 0xea, 0x9d, 0xfe, 0xe8, 0xd1, 0xa3, + 0xc5, 0xc5, 0xc5, 0xd2, 0x8f, 0xc7, 0xde, 0xd0, 0x41, 0x06, 0x85, 0x6c, 0x43, 0xe2, 0x2d, 0x22, + 0xbe, 0x6f, 0xb1, 0xdd, 0x4e, 0xb9, 0xd7, 0xbc, 0x73, 0x7c, 0x82, 0x32, 0x36, 0xa7, 0x03, 0xe9, + 0x22, 0xfa, 0x4c, 0xc3, 0xf8, 0x8c, 0xdf, 0xfb, 0x30, 0xfc, 0x6e, 0x2f, 0x09, 0x6a, 0xd9, 0x33, + 0x3a, 0xaa, 0x75, 0x65, 0x0d, 0xc8, 0x2f, 0xab, 0xb4, 0xa8, 0x2b, 0x0b, 0xc6, 0x47, 0x3e, 0x4a, + 0x1e, 0x75, 0xf5, 0x39, 0x96, 0xd9, 0x2b, 0xfa, 0x70, 0x03, 0x32, 0x03, 0x53, 0x85, 0xfd, 0x69, + 0x10, 0x0d, 0xe3, 0x93, 0x9d, 0xa3, 0xd4, 0xb9, 0x6b, 0x8e, 0x2f, 0xbc, 0xf0, 0xc8, 0x07, 0x69, + 0xd3, 0x0d, 0x98, 0xa4, 0x53, 0x38, 0x9f, 0x4c, 0x7d, 0x2d, 0x77, 0x4e, 0xa5, 0xca, 0xa0, 0x0a, + 0x07, 0xd3, 0xc0, 0xf9, 0xdc, 0xd5, 0x3f, 0xba, 0xf2, 0x6c, 0x7e, 0xb3, 0x9d, 0x90, 0xdf, 0xdb, + 0x09, 0xf9, 0xbb, 0x9d, 0x10, 0x2a, 0x72, 0x85, 0x36, 0xda, 0xa8, 0x6f, 0xed, 0xfd, 0x19, 0x97, + 0xe4, 0x73, 0xaf, 0x89, 0x2f, 0x0f, 0xfc, 0xcf, 0xf0, 0xf2, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x01, 0xc0, 0x8b, 0x7d, 0xdd, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.pb.go new file mode 100644 index 000000000000..a37748f2bac7 --- /dev/null +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.pb.go @@ -0,0 +1,396 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.proto + +package v2 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/lyft/protoc-gen-validate/validate" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +// [#protodoc-title: Extensions gRPC Http1 Reverse Bridge] +// gRPC reverse bridge filter configuration +type FilterConfig struct { + // The content-type to pass to the upstream when the gRPC bridge filter is applied. + // The filter will also validate that the upstream responds with the same content type. + ContentType string `protobuf:"bytes,1,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + // If true, Envoy will assume that the upstream doesn't understand gRPC frames and + // strip the gRPC frame from the request, and add it back in to the response. This will + // hide the gRPC semantics from the upstream, allowing it to receive and respond with a + // simple binary encoded protobuf. + WithholdGrpcFrames bool `protobuf:"varint,2,opt,name=withhold_grpc_frames,json=withholdGrpcFrames,proto3" json:"withhold_grpc_frames,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FilterConfig) Reset() { *m = FilterConfig{} } +func (m *FilterConfig) String() string { return proto.CompactTextString(m) } +func (*FilterConfig) ProtoMessage() {} +func (*FilterConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_config_1e94024a72f198c9, []int{0} +} +func (m *FilterConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FilterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_FilterConfig.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *FilterConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_FilterConfig.Merge(dst, src) +} +func (m *FilterConfig) XXX_Size() int { + return m.Size() +} +func (m *FilterConfig) XXX_DiscardUnknown() { + xxx_messageInfo_FilterConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_FilterConfig proto.InternalMessageInfo + +func (m *FilterConfig) GetContentType() string { + if m != nil { + return m.ContentType + } + return "" +} + +func (m *FilterConfig) GetWithholdGrpcFrames() bool { + if m != nil { + return m.WithholdGrpcFrames + } + return false +} + +func init() { + proto.RegisterType((*FilterConfig)(nil), "envoy.extensions.filter.http.grpc_http1_reverse_bridge.v2alpha1.FilterConfig") +} +func (m *FilterConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *FilterConfig) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.ContentType) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintConfig(dAtA, i, uint64(len(m.ContentType))) + i += copy(dAtA[i:], m.ContentType) + } + if m.WithholdGrpcFrames { + dAtA[i] = 0x10 + i++ + if m.WithholdGrpcFrames { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeVarintConfig(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *FilterConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ContentType) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + if m.WithholdGrpcFrames { + n += 2 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovConfig(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozConfig(x uint64) (n int) { + return sovConfig(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *FilterConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FilterConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FilterConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContentType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContentType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WithholdGrpcFrames", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.WithholdGrpcFrames = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipConfig(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthConfig + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipConfig(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthConfig = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowConfig = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.proto", fileDescriptor_config_1e94024a72f198c9) +} + +var fileDescriptor_config_1e94024a72f198c9 = []byte{ + // 262 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0xcf, 0xb1, 0x4a, 0xc3, 0x40, + 0x18, 0x07, 0x70, 0x2e, 0x8a, 0xd8, 0xd8, 0x29, 0x08, 0x16, 0x87, 0x10, 0x9c, 0x3a, 0xc8, 0x9d, + 0xad, 0x0f, 0x20, 0x54, 0xa8, 0x2e, 0x82, 0x14, 0x27, 0x97, 0xe3, 0x9a, 0x7c, 0x49, 0x0e, 0xe2, + 0xdd, 0xf1, 0xe5, 0xe3, 0x6c, 0x5e, 0xcd, 0xc9, 0xd1, 0xd1, 0x47, 0x90, 0x6c, 0xbe, 0x85, 0xf4, + 0xda, 0x8c, 0x4e, 0xdd, 0xfe, 0xf0, 0xe7, 0x7e, 0xf7, 0xfd, 0xe3, 0x47, 0x30, 0xde, 0x76, 0x22, + 0xb7, 0xa6, 0xd4, 0x95, 0x28, 0x75, 0x43, 0x80, 0xa2, 0x26, 0x72, 0xa2, 0x42, 0x97, 0xcb, 0x6d, + 0x9a, 0x49, 0x04, 0x0f, 0xd8, 0x82, 0x5c, 0xa3, 0x2e, 0x2a, 0x10, 0x7e, 0xae, 0x1a, 0x57, 0xab, + 0xd9, 0xfe, 0x15, 0x77, 0x68, 0xc9, 0x26, 0x77, 0x41, 0xe2, 0xb0, 0x21, 0x30, 0xad, 0xb6, 0xa6, + 0xe5, 0x3b, 0x8d, 0x6f, 0x0d, 0xfe, 0xaf, 0xc6, 0x07, 0xed, 0xf2, 0xc2, 0xab, 0x46, 0x17, 0x8a, + 0x40, 0x0c, 0x61, 0x27, 0x5f, 0x99, 0x78, 0xbc, 0x0c, 0xd4, 0x7d, 0xf8, 0x2f, 0xb9, 0x8e, 0xc7, + 0xb9, 0x35, 0x04, 0x86, 0x24, 0x75, 0x0e, 0x26, 0x2c, 0x63, 0xd3, 0xd1, 0x62, 0xf4, 0xf1, 0xfb, + 0x79, 0x74, 0x8c, 0x51, 0xc6, 0x56, 0x67, 0xfb, 0xfa, 0xa5, 0x73, 0x90, 0xdc, 0xc4, 0xe7, 0xef, + 0x9a, 0xea, 0xda, 0x36, 0x85, 0x0c, 0x57, 0x94, 0xa8, 0xde, 0xa0, 0x9d, 0x44, 0x19, 0x9b, 0x9e, + 0xae, 0x92, 0xa1, 0x7b, 0x40, 0x97, 0x2f, 0x43, 0xb3, 0x50, 0x5f, 0x7d, 0xca, 0xbe, 0xfb, 0x94, + 0xfd, 0xf4, 0x29, 0x8b, 0x9f, 0xb4, 0xe5, 0x61, 0x9a, 0x43, 0xbb, 0xe9, 0xf8, 0x81, 0x2b, 0x9f, + 0xd9, 0x6b, 0xe4, 0xe7, 0xeb, 0x93, 0xb0, 0xec, 0xf6, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x4b, 0xa2, + 0xd3, 0xaf, 0x7f, 0x01, 0x00, 0x00, +} diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.pb.validate.go new file mode 100644 index 000000000000..5f4402b49d8a --- /dev/null +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.pb.validate.go @@ -0,0 +1,86 @@ +// Code generated by protoc-gen-validate +// source: envoy/config/filter/http/grpc_http1_reverse_bridge/v2alpha1/config.proto +// DO NOT EDIT!!! + +package v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/gogo/protobuf/types" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = types.DynamicAny{} +) + +// Validate checks the field values on FilterConfig with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *FilterConfig) Validate() error { + if m == nil { + return nil + } + + if len(m.GetContentType()) < 1 { + return FilterConfigValidationError{ + Field: "ContentType", + Reason: "value length must be at least 1 bytes", + } + } + + // no validation rules for WithholdGrpcFrames + + return nil +} + +// FilterConfigValidationError is the validation error returned by +// FilterConfig.Validate if the designated constraints aren't met. +type FilterConfigValidationError struct { + Field string + Reason string + Cause error + Key bool +} + +// Error satisfies the builtin error interface +func (e FilterConfigValidationError) Error() string { + cause := "" + if e.Cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.Cause) + } + + key := "" + if e.Key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFilterConfig.%s: %s%s", + key, + e.Field, + e.Reason, + cause) +} + +var _ error = FilterConfigValidationError{} diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/gzip/v2/gzip.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/gzip/v2/gzip.pb.go index 205bf0c22c20..a31a882bb639 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/gzip/v2/gzip.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/gzip/v2/gzip.pb.go @@ -49,7 +49,7 @@ func (x Gzip_CompressionStrategy) String() string { return proto.EnumName(Gzip_CompressionStrategy_name, int32(x)) } func (Gzip_CompressionStrategy) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_gzip_678bbbeace6246bb, []int{0, 0} + return fileDescriptor_gzip_0df02704b98a1a32, []int{0, 0} } type Gzip_CompressionLevel_Enum int32 @@ -75,7 +75,7 @@ func (x Gzip_CompressionLevel_Enum) String() string { return proto.EnumName(Gzip_CompressionLevel_Enum_name, int32(x)) } func (Gzip_CompressionLevel_Enum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_gzip_678bbbeace6246bb, []int{0, 0, 0} + return fileDescriptor_gzip_0df02704b98a1a32, []int{0, 0, 0} } type Gzip struct { @@ -122,7 +122,7 @@ func (m *Gzip) Reset() { *m = Gzip{} } func (m *Gzip) String() string { return proto.CompactTextString(m) } func (*Gzip) ProtoMessage() {} func (*Gzip) Descriptor() ([]byte, []int) { - return fileDescriptor_gzip_678bbbeace6246bb, []int{0} + return fileDescriptor_gzip_0df02704b98a1a32, []int{0} } func (m *Gzip) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -217,7 +217,7 @@ func (m *Gzip_CompressionLevel) Reset() { *m = Gzip_CompressionLevel{} } func (m *Gzip_CompressionLevel) String() string { return proto.CompactTextString(m) } func (*Gzip_CompressionLevel) ProtoMessage() {} func (*Gzip_CompressionLevel) Descriptor() ([]byte, []int) { - return fileDescriptor_gzip_678bbbeace6246bb, []int{0, 0} + return fileDescriptor_gzip_0df02704b98a1a32, []int{0, 0} } func (m *Gzip_CompressionLevel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -859,44 +859,45 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/gzip/v2/gzip.proto", fileDescriptor_gzip_678bbbeace6246bb) -} - -var fileDescriptor_gzip_678bbbeace6246bb = []byte{ - // 553 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xc1, 0x6e, 0xd3, 0x30, - 0x18, 0xc7, 0x71, 0x9a, 0x75, 0x8d, 0x33, 0x46, 0xf0, 0x26, 0x88, 0x2a, 0xa8, 0xaa, 0x9d, 0xa2, - 0x21, 0x1c, 0x29, 0xbd, 0xa1, 0x5d, 0x5a, 0x9a, 0xb2, 0xa1, 0x30, 0x50, 0xda, 0x72, 0xe0, 0x12, - 0xa5, 0xa9, 0x9b, 0x46, 0x4a, 0xed, 0x28, 0x71, 0x53, 0x65, 0x47, 0x5e, 0x00, 0x89, 0xc7, 0xe1, - 0xc4, 0x91, 0x23, 0x8f, 0x80, 0x7a, 0xe3, 0x2d, 0x50, 0x9c, 0x14, 0xd8, 0x40, 0x82, 0x9d, 0xfa, - 0xa9, 0xdf, 0xef, 0xf7, 0xfd, 0xed, 0xcf, 0x81, 0x4f, 0x08, 0xcd, 0x59, 0x61, 0x06, 0x8c, 0x2e, - 0xa2, 0xd0, 0x5c, 0x44, 0x31, 0x27, 0xa9, 0xb9, 0xe4, 0x3c, 0x31, 0xc3, 0xab, 0x28, 0x31, 0x73, - 0x4b, 0xfc, 0xe2, 0x24, 0x65, 0x9c, 0xa1, 0xae, 0x80, 0x71, 0x05, 0xe3, 0x0a, 0xc6, 0x25, 0x8c, - 0x05, 0x94, 0x5b, 0xed, 0x4e, 0xc8, 0x58, 0x18, 0x13, 0x53, 0xf0, 0xb3, 0xf5, 0xc2, 0xdc, 0xa4, - 0x7e, 0x92, 0x90, 0x34, 0xab, 0x26, 0xb4, 0x1f, 0xe6, 0x7e, 0x1c, 0xcd, 0x7d, 0x4e, 0xcc, 0x5d, - 0x51, 0x37, 0x8e, 0x43, 0x16, 0x32, 0x51, 0x9a, 0x65, 0x55, 0xfd, 0x7b, 0xf2, 0xa1, 0x09, 0xe5, - 0x17, 0x57, 0x51, 0x82, 0x1c, 0x78, 0xb0, 0x22, 0x2b, 0x96, 0x16, 0x5e, 0x4c, 0x72, 0x12, 0xeb, - 0xa0, 0x0b, 0x0c, 0xd5, 0x7a, 0x84, 0xab, 0x38, 0xbc, 0x8b, 0xc3, 0xd3, 0x0b, 0xca, 0x7b, 0xd6, - 0x5b, 0x3f, 0x5e, 0x93, 0x81, 0xfa, 0xe9, 0xfb, 0xe7, 0x46, 0xf3, 0x54, 0xd6, 0x15, 0x03, 0xb8, - 0x6a, 0xa5, 0x3b, 0xa5, 0x8d, 0x2e, 0xe1, 0x61, 0xc0, 0x28, 0x27, 0x94, 0x7b, 0x31, 0xa1, 0x21, - 0x5f, 0xea, 0xd2, 0x7f, 0xcc, 0x53, 0xca, 0x79, 0xf2, 0xa9, 0x64, 0x74, 0xdc, 0xbb, 0xb5, 0xee, - 0x08, 0x1b, 0xad, 0xe1, 0xfd, 0x80, 0xad, 0x92, 0x94, 0x64, 0x59, 0xc4, 0x68, 0x7d, 0xc4, 0x46, - 0x17, 0x18, 0x87, 0xd6, 0x19, 0xfe, 0xd7, 0xce, 0x70, 0x79, 0x41, 0xfc, 0xfc, 0x97, 0x2f, 0xce, - 0x88, 0x6d, 0xba, 0x5e, 0x0d, 0x60, 0x19, 0xb9, 0xf7, 0x1e, 0x48, 0x1a, 0x70, 0xb5, 0xe0, 0x06, - 0x82, 0x0a, 0x78, 0xfc, 0x7b, 0x6c, 0xc6, 0x53, 0x9f, 0x93, 0xb0, 0xd0, 0x65, 0x91, 0xfc, 0xec, - 0xf6, 0xc9, 0xe3, 0x7a, 0xc2, 0xb5, 0xdc, 0xa3, 0xe0, 0x4f, 0x00, 0x3d, 0x85, 0x07, 0xbb, 0x0d, - 0xf2, 0x22, 0x21, 0x7a, 0xb3, 0xdb, 0x30, 0x94, 0x5a, 0xfb, 0x08, 0x24, 0xcd, 0x72, 0xd5, 0xba, - 0x3f, 0x29, 0x12, 0x82, 0x7a, 0xf0, 0xc1, 0x3c, 0xca, 0xfc, 0x59, 0x4c, 0x3c, 0x46, 0x3d, 0xc2, - 0xfd, 0xd0, 0x5b, 0x12, 0x7f, 0x4e, 0x52, 0x7d, 0xbf, 0x0b, 0x8c, 0x96, 0x7b, 0x54, 0x77, 0x5f, - 0x53, 0x9b, 0xfb, 0xe1, 0xb9, 0x68, 0xa1, 0x3e, 0x7c, 0x9c, 0x92, 0x15, 0xcb, 0x89, 0xe7, 0x07, - 0x01, 0x49, 0xb8, 0x47, 0x68, 0xc0, 0xe6, 0x11, 0xfd, 0xe9, 0xb6, 0x84, 0xdb, 0xae, 0xa0, 0xbe, - 0x60, 0xec, 0x1a, 0xa9, 0x47, 0xbc, 0x84, 0xea, 0x26, 0xa2, 0x73, 0xb6, 0xf1, 0x66, 0x11, 0xcf, - 0x74, 0xe5, 0x36, 0x5f, 0xcd, 0x3d, 0x43, 0x71, 0x61, 0x65, 0x0f, 0x22, 0x9e, 0xb5, 0xcf, 0xa0, - 0x76, 0xf3, 0x91, 0x4e, 0x0c, 0x28, 0x97, 0xef, 0x84, 0x54, 0xb8, 0x3f, 0xb4, 0x47, 0xfd, 0xa9, - 0x33, 0xd1, 0xee, 0xa0, 0x16, 0x94, 0x07, 0xf6, 0x78, 0xa2, 0x01, 0xa4, 0xc0, 0xbd, 0xf1, 0x1b, - 0xdb, 0x1e, 0x6a, 0xd2, 0xc9, 0x08, 0x1e, 0xfd, 0x65, 0xd1, 0xd7, 0xc5, 0x03, 0xd8, 0x1a, 0x5d, - 0x38, 0x13, 0xdb, 0xb5, 0x87, 0x1a, 0x28, 0x5b, 0xe7, 0xd3, 0xd1, 0xe8, 0x55, 0xff, 0x52, 0x93, - 0xd0, 0x3e, 0x6c, 0xb8, 0x8e, 0xad, 0x35, 0x06, 0xda, 0x97, 0x6d, 0x07, 0x7c, 0xdd, 0x76, 0xc0, - 0xb7, 0x6d, 0x07, 0xbc, 0x93, 0x72, 0x6b, 0xd6, 0x14, 0xd7, 0xe8, 0xfd, 0x08, 0x00, 0x00, 0xff, - 0xff, 0xca, 0xe9, 0xc6, 0x99, 0xca, 0x03, 0x00, 0x00, + proto.RegisterFile("envoy/config/filter/http/gzip/v2/gzip.proto", fileDescriptor_gzip_0df02704b98a1a32) +} + +var fileDescriptor_gzip_0df02704b98a1a32 = []byte{ + // 569 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xc1, 0x6e, 0xd3, 0x4c, + 0x14, 0x85, 0xff, 0x71, 0xdc, 0x34, 0x1e, 0xf7, 0x2f, 0x66, 0x5a, 0x81, 0x15, 0x41, 0x14, 0x75, + 0x65, 0x15, 0x31, 0x96, 0xdc, 0x1d, 0xea, 0x26, 0xa6, 0x0e, 0x2d, 0x32, 0xa5, 0x72, 0x53, 0x16, + 0x6c, 0x2c, 0xc7, 0x99, 0xba, 0x23, 0x39, 0x33, 0x96, 0x3d, 0x71, 0x71, 0x97, 0xbc, 0x00, 0x12, + 0x8f, 0xc3, 0x8a, 0x25, 0x4b, 0x1e, 0x01, 0x65, 0xc7, 0x5b, 0x20, 0x8f, 0x1d, 0xa0, 0x05, 0xa9, + 0x74, 0xe5, 0x2b, 0xdf, 0xef, 0x9c, 0x33, 0x73, 0xef, 0xc0, 0x27, 0x84, 0x95, 0xbc, 0xb2, 0x63, + 0xce, 0xce, 0x69, 0x62, 0x9f, 0xd3, 0x54, 0x90, 0xdc, 0xbe, 0x10, 0x22, 0xb3, 0x93, 0x2b, 0x9a, + 0xd9, 0xa5, 0x23, 0xbf, 0x38, 0xcb, 0xb9, 0xe0, 0x68, 0x28, 0x61, 0xdc, 0xc0, 0xb8, 0x81, 0x71, + 0x0d, 0x63, 0x09, 0x95, 0x4e, 0x7f, 0x90, 0x70, 0x9e, 0xa4, 0xc4, 0x96, 0xfc, 0x74, 0x71, 0x6e, + 0x5f, 0xe6, 0x51, 0x96, 0x91, 0xbc, 0x68, 0x1c, 0xfa, 0x0f, 0xcb, 0x28, 0xa5, 0xb3, 0x48, 0x10, + 0x7b, 0x55, 0xb4, 0x8d, 0xed, 0x84, 0x27, 0x5c, 0x96, 0x76, 0x5d, 0x35, 0x7f, 0x77, 0x3e, 0x74, + 0xa1, 0xfa, 0xe2, 0x8a, 0x66, 0xc8, 0x87, 0x1b, 0x73, 0x32, 0xe7, 0x79, 0x15, 0xa6, 0xa4, 0x24, + 0xa9, 0x09, 0x86, 0xc0, 0xd2, 0x9d, 0x47, 0xb8, 0x89, 0xc3, 0xab, 0x38, 0x7c, 0x76, 0xc4, 0xc4, + 0x9e, 0xf3, 0x26, 0x4a, 0x17, 0xc4, 0xd5, 0x3f, 0x7d, 0xff, 0xdc, 0xe9, 0xee, 0xaa, 0xa6, 0x66, + 0x81, 0x40, 0x6f, 0xe4, 0x7e, 0xad, 0x46, 0xc7, 0x70, 0x33, 0xe6, 0x4c, 0x10, 0x26, 0xc2, 0x94, + 0xb0, 0x44, 0x5c, 0x98, 0xca, 0x3f, 0xf8, 0x69, 0xb5, 0x9f, 0xba, 0xab, 0x58, 0x83, 0xe0, 0xff, + 0x56, 0xee, 0x4b, 0x35, 0x5a, 0xc0, 0xfb, 0x31, 0x9f, 0x67, 0x39, 0x29, 0x0a, 0xca, 0x59, 0x7b, + 0xc4, 0xce, 0x10, 0x58, 0x9b, 0xce, 0x3e, 0xbe, 0x6d, 0x66, 0xb8, 0xbe, 0x20, 0x7e, 0xfe, 0x4b, + 0x2f, 0xcf, 0x88, 0x3d, 0xb6, 0x98, 0xbb, 0xb0, 0x8e, 0x5c, 0x7b, 0x0f, 0x14, 0x03, 0x04, 0x46, + 0x7c, 0x03, 0x41, 0x15, 0xdc, 0xfe, 0x3d, 0xb6, 0x10, 0x79, 0x24, 0x48, 0x52, 0x99, 0xaa, 0x4c, + 0x7e, 0x76, 0xf7, 0xe4, 0xd3, 0xd6, 0xe1, 0x5a, 0xee, 0x56, 0xfc, 0x27, 0x80, 0x9e, 0xc2, 0x8d, + 0xd5, 0x04, 0x45, 0x95, 0x11, 0xb3, 0x3b, 0xec, 0x58, 0x5a, 0x2b, 0xfb, 0x08, 0x14, 0xc3, 0x09, + 0xf4, 0xb6, 0x3f, 0xa9, 0x32, 0x82, 0xf6, 0xe0, 0x83, 0x19, 0x2d, 0xa2, 0x69, 0x4a, 0x42, 0xce, + 0x42, 0x22, 0xa2, 0x24, 0xbc, 0x20, 0xd1, 0x8c, 0xe4, 0xe6, 0xfa, 0x10, 0x58, 0xbd, 0x60, 0xab, + 0xed, 0xbe, 0x66, 0x9e, 0x88, 0x92, 0x43, 0xd9, 0x42, 0x23, 0xf8, 0x38, 0x27, 0x73, 0x5e, 0x92, + 0x30, 0x8a, 0x63, 0x92, 0x89, 0x90, 0xb0, 0x98, 0xcf, 0x28, 0xfb, 0xa9, 0xed, 0x49, 0x6d, 0xbf, + 0x81, 0x46, 0x92, 0xf1, 0x5a, 0xa4, 0xb5, 0x78, 0x09, 0xf5, 0x4b, 0xca, 0x66, 0xfc, 0x32, 0x9c, + 0x52, 0x51, 0x98, 0xda, 0x5d, 0x5e, 0xcd, 0x3d, 0x4b, 0x0b, 0x60, 0xa3, 0x76, 0xa9, 0x28, 0xfa, + 0xfb, 0xd0, 0xb8, 0xb9, 0xa4, 0x1d, 0x0b, 0xaa, 0xf5, 0x9e, 0x90, 0x0e, 0xd7, 0x0f, 0xbc, 0xf1, + 0xe8, 0xcc, 0x9f, 0x18, 0xff, 0xa1, 0x1e, 0x54, 0x5d, 0xef, 0x74, 0x62, 0x00, 0xa4, 0xc1, 0xb5, + 0xd3, 0x13, 0xcf, 0x3b, 0x30, 0x94, 0x9d, 0x31, 0xdc, 0xfa, 0xcb, 0xa0, 0xaf, 0x0b, 0x37, 0x60, + 0x6f, 0x7c, 0xe4, 0x4f, 0xbc, 0xc0, 0x3b, 0x30, 0x40, 0xdd, 0x3a, 0x3c, 0x1b, 0x8f, 0x5f, 0x8d, + 0x8e, 0x0d, 0x05, 0xad, 0xc3, 0x4e, 0xe0, 0x7b, 0x46, 0xc7, 0x75, 0xbf, 0x2c, 0x07, 0xe0, 0xeb, + 0x72, 0x00, 0xbe, 0x2d, 0x07, 0x00, 0x62, 0xca, 0x9b, 0x2d, 0x67, 0x39, 0x7f, 0x57, 0xdd, 0xba, + 0xf0, 0x13, 0xf0, 0x56, 0x29, 0x9d, 0x69, 0x57, 0x5e, 0x7c, 0xef, 0x47, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x7a, 0x4c, 0x51, 0xa5, 0xfc, 0x03, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/header_to_metadata/v2/header_to_metadata.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/header_to_metadata/v2/header_to_metadata.pb.go index 167e6f904aa3..d0a31c362f9b 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/header_to_metadata/v2/header_to_metadata.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/header_to_metadata/v2/header_to_metadata.pb.go @@ -41,7 +41,7 @@ func (x Config_ValueType) String() string { return proto.EnumName(Config_ValueType_name, int32(x)) } func (Config_ValueType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_header_to_metadata_ebf38654d4c2aa12, []int{0, 0} + return fileDescriptor_header_to_metadata_bb0ba90879f6097d, []int{0, 0} } type Config struct { @@ -58,7 +58,7 @@ func (m *Config) Reset() { *m = Config{} } func (m *Config) String() string { return proto.CompactTextString(m) } func (*Config) ProtoMessage() {} func (*Config) Descriptor() ([]byte, []int) { - return fileDescriptor_header_to_metadata_ebf38654d4c2aa12, []int{0} + return fileDescriptor_header_to_metadata_bb0ba90879f6097d, []int{0} } func (m *Config) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -125,7 +125,7 @@ func (m *Config_KeyValuePair) Reset() { *m = Config_KeyValuePair{} } func (m *Config_KeyValuePair) String() string { return proto.CompactTextString(m) } func (*Config_KeyValuePair) ProtoMessage() {} func (*Config_KeyValuePair) Descriptor() ([]byte, []int) { - return fileDescriptor_header_to_metadata_ebf38654d4c2aa12, []int{0, 0} + return fileDescriptor_header_to_metadata_bb0ba90879f6097d, []int{0, 0} } func (m *Config_KeyValuePair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -209,7 +209,7 @@ func (m *Config_Rule) Reset() { *m = Config_Rule{} } func (m *Config_Rule) String() string { return proto.CompactTextString(m) } func (*Config_Rule) ProtoMessage() {} func (*Config_Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_header_to_metadata_ebf38654d4c2aa12, []int{0, 1} + return fileDescriptor_header_to_metadata_bb0ba90879f6097d, []int{0, 1} } func (m *Config_Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1060,36 +1060,37 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/header_to_metadata/v2/header_to_metadata.proto", fileDescriptor_header_to_metadata_ebf38654d4c2aa12) + proto.RegisterFile("envoy/config/filter/http/header_to_metadata/v2/header_to_metadata.proto", fileDescriptor_header_to_metadata_bb0ba90879f6097d) } -var fileDescriptor_header_to_metadata_ebf38654d4c2aa12 = []byte{ - // 425 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x92, 0xcf, 0x6e, 0xd3, 0x40, - 0x10, 0xc6, 0x59, 0x27, 0xb5, 0xc8, 0xf4, 0x0f, 0xe9, 0x0a, 0x81, 0x15, 0xa4, 0x28, 0x94, 0x4b, - 0x2e, 0xac, 0x25, 0x73, 0xe4, 0x82, 0x52, 0xa1, 0x82, 0x50, 0xa3, 0x6a, 0x09, 0x1c, 0xb8, 0x98, - 0x6d, 0x33, 0x6d, 0x2d, 0x9c, 0x5d, 0xb3, 0xbb, 0xb6, 0xe4, 0xe7, 0xe1, 0x2d, 0x38, 0x71, 0x42, - 0x1c, 0x79, 0x04, 0xe4, 0x1b, 0x6f, 0x81, 0xbc, 0x6b, 0xa3, 0x22, 0xf5, 0x42, 0xe1, 0xb6, 0x33, - 0xe3, 0xf9, 0x7d, 0xdf, 0x7c, 0x32, 0x1c, 0xa1, 0xac, 0x54, 0x1d, 0x9f, 0x29, 0x79, 0x9e, 0x5d, - 0xc4, 0xe7, 0x59, 0x6e, 0x51, 0xc7, 0x97, 0xd6, 0x16, 0xf1, 0x25, 0x8a, 0x35, 0xea, 0xd4, 0xaa, - 0x74, 0x83, 0x56, 0xac, 0x85, 0x15, 0x71, 0x95, 0x5c, 0xd3, 0x65, 0x85, 0x56, 0x56, 0x51, 0xe6, - 0x40, 0xcc, 0x83, 0x98, 0x07, 0xb1, 0x16, 0xc4, 0xae, 0x59, 0xa9, 0x92, 0xc9, 0xfd, 0x4a, 0xe4, - 0xd9, 0x5a, 0x58, 0x8c, 0xfb, 0x87, 0x07, 0x1d, 0x34, 0x5b, 0x10, 0x1e, 0x3a, 0x0a, 0x7d, 0x0f, - 0xbb, 0x1a, 0x3f, 0x96, 0x68, 0x6c, 0xaa, 0xcb, 0x1c, 0x4d, 0x44, 0x66, 0x83, 0xf9, 0x76, 0xf2, - 0xf4, 0x2f, 0xb5, 0x98, 0xc7, 0x31, 0x5e, 0xe6, 0xc8, 0x77, 0x3a, 0x62, 0x5b, 0x18, 0x7a, 0x0a, - 0x7b, 0x1a, 0x4d, 0xa1, 0xa4, 0xc1, 0x4e, 0x22, 0xf8, 0x77, 0x89, 0xdd, 0x1e, 0xe9, 0x34, 0x26, - 0x5f, 0x09, 0xec, 0xbc, 0xc2, 0xfa, 0xad, 0xc8, 0x4b, 0x3c, 0x11, 0x99, 0xa6, 0x8f, 0x81, 0xf6, - 0xab, 0xa9, 0x14, 0x1b, 0x34, 0x85, 0x38, 0xc3, 0x88, 0xcc, 0xc8, 0x7c, 0xc4, 0xf7, 0xfb, 0xc9, - 0xb2, 0x1f, 0xd0, 0x07, 0x30, 0xf8, 0x80, 0x75, 0x14, 0xb4, 0xf3, 0xc5, 0xe8, 0xf3, 0xcf, 0x2f, - 0x83, 0xa1, 0x0e, 0x66, 0x84, 0xb7, 0x5d, 0x7a, 0x17, 0xb6, 0xaa, 0x16, 0x1c, 0x0d, 0xdc, 0xba, - 0x2f, 0xe8, 0x0a, 0x86, 0xb6, 0x2e, 0x30, 0x1a, 0xce, 0xc8, 0x7c, 0x2f, 0x79, 0x76, 0xc3, 0x63, - 0x9c, 0xe3, 0x55, 0x5d, 0x20, 0x77, 0xb4, 0xc9, 0xa7, 0x00, 0x86, 0xed, 0x49, 0xf4, 0x21, 0x84, - 0x7e, 0xd1, 0x9b, 0xbe, 0x6a, 0xaa, 0x1b, 0x50, 0x05, 0xfb, 0x4a, 0xa6, 0x1d, 0xbe, 0xd0, 0x68, - 0x50, 0x5a, 0x77, 0xc2, 0x76, 0x72, 0x78, 0x43, 0x3b, 0x57, 0x33, 0xe4, 0x77, 0x94, 0x7c, 0xe1, - 0x3e, 0x3e, 0xf1, 0xec, 0x3f, 0x05, 0x37, 0x99, 0x31, 0x99, 0xbc, 0x70, 0xa1, 0xfc, 0x6f, 0xc1, - 0x63, 0xcf, 0xa6, 0xf7, 0x20, 0xd4, 0xb8, 0x51, 0x95, 0x4f, 0xf9, 0x36, 0xef, 0xaa, 0x83, 0x47, - 0x30, 0xfa, 0x1d, 0x1c, 0x05, 0x08, 0x5f, 0xaf, 0xf8, 0xcb, 0xe5, 0xd1, 0xf8, 0x56, 0xfb, 0x5e, - 0xbe, 0x39, 0x5e, 0x3c, 0xe7, 0x63, 0xb2, 0x18, 0x7f, 0x6b, 0xa6, 0xe4, 0x7b, 0x33, 0x25, 0x3f, - 0x9a, 0x29, 0x79, 0x17, 0x54, 0xc9, 0x69, 0xe8, 0xfe, 0xfe, 0x27, 0xbf, 0x02, 0x00, 0x00, 0xff, - 0xff, 0xd2, 0x4f, 0x20, 0xa5, 0x91, 0x03, 0x00, 0x00, +var fileDescriptor_header_to_metadata_bb0ba90879f6097d = []byte{ + // 439 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xcf, 0x6e, 0xd3, 0x40, + 0x10, 0xc6, 0x59, 0x27, 0xb5, 0xc8, 0xf4, 0x0f, 0xed, 0x0a, 0x81, 0x15, 0xa4, 0x28, 0x94, 0x4b, + 0x2e, 0xd8, 0x92, 0x39, 0xc2, 0x01, 0xa5, 0x42, 0x05, 0xa1, 0x46, 0xd1, 0x12, 0x38, 0x70, 0x31, + 0xdb, 0x66, 0xda, 0x5a, 0x38, 0xbb, 0xcb, 0xee, 0xc6, 0xc2, 0xcf, 0xc3, 0x5b, 0x70, 0xe2, 0x84, + 0x38, 0xf2, 0x08, 0xc8, 0x37, 0xde, 0x02, 0x79, 0xd7, 0x46, 0x45, 0xea, 0xa5, 0xa5, 0xb7, 0x9d, + 0x19, 0xcf, 0xef, 0xfb, 0xe6, 0x93, 0x0c, 0x87, 0x28, 0x4a, 0x59, 0x25, 0x27, 0x52, 0x9c, 0xe6, + 0x67, 0xc9, 0x69, 0x5e, 0x58, 0xd4, 0xc9, 0xb9, 0xb5, 0x2a, 0x39, 0x47, 0xbe, 0x44, 0x9d, 0x59, + 0x99, 0xad, 0xd0, 0xf2, 0x25, 0xb7, 0x3c, 0x29, 0xd3, 0x4b, 0xba, 0xb1, 0xd2, 0xd2, 0x4a, 0x1a, + 0x3b, 0x50, 0xec, 0x41, 0xb1, 0x07, 0xc5, 0x0d, 0x28, 0xbe, 0x64, 0xa5, 0x4c, 0x87, 0xf7, 0x4b, + 0x5e, 0xe4, 0x4b, 0x6e, 0x31, 0xe9, 0x1e, 0x1e, 0xb4, 0x5f, 0x6f, 0x40, 0x78, 0xe0, 0x28, 0xf4, + 0x03, 0x6c, 0x6b, 0xfc, 0xb4, 0x46, 0x63, 0x33, 0xbd, 0x2e, 0xd0, 0x44, 0x64, 0xdc, 0x9b, 0x6c, + 0xa6, 0x4f, 0xaf, 0xa8, 0x15, 0x7b, 0x5c, 0xcc, 0xd6, 0x05, 0xb2, 0xad, 0x96, 0xd8, 0x14, 0x86, + 0x1e, 0xc3, 0x8e, 0x46, 0xa3, 0xa4, 0x30, 0xd8, 0x4a, 0x04, 0xff, 0x2f, 0xb1, 0xdd, 0x21, 0x9d, + 0xc6, 0xf0, 0x3b, 0x81, 0xad, 0xd7, 0x58, 0xbd, 0xe3, 0xc5, 0x1a, 0xe7, 0x3c, 0xd7, 0xf4, 0x31, + 0xd0, 0x6e, 0x35, 0x13, 0x7c, 0x85, 0x46, 0xf1, 0x13, 0x8c, 0xc8, 0x98, 0x4c, 0x06, 0x6c, 0xaf, + 0x9b, 0xcc, 0xba, 0x01, 0x7d, 0x00, 0xbd, 0x8f, 0x58, 0x45, 0x41, 0x33, 0x9f, 0x0e, 0xbe, 0xfe, + 0xfe, 0xd6, 0xeb, 0xeb, 0x60, 0x4c, 0x58, 0xd3, 0xa5, 0x77, 0x61, 0xa3, 0x6c, 0xc0, 0x51, 0xcf, + 0xad, 0xfb, 0x82, 0x2e, 0xa0, 0x6f, 0x2b, 0x85, 0x51, 0x7f, 0x4c, 0x26, 0x3b, 0xe9, 0xf3, 0x6b, + 0x1e, 0xe3, 0x1c, 0x2f, 0x2a, 0x85, 0xcc, 0xd1, 0x86, 0x5f, 0x02, 0xe8, 0x37, 0x27, 0xd1, 0x87, + 0x10, 0xfa, 0x45, 0x6f, 0xfa, 0xa2, 0xa9, 0x76, 0x40, 0x25, 0xec, 0x49, 0x91, 0xb5, 0x78, 0xa5, + 0xd1, 0xa0, 0xb0, 0xee, 0x84, 0xcd, 0xf4, 0xe0, 0x9a, 0x76, 0x2e, 0x66, 0xc8, 0xee, 0x48, 0xf1, + 0xd2, 0x7d, 0x3c, 0xf7, 0xec, 0x7f, 0x05, 0x57, 0xb9, 0x31, 0xb9, 0x38, 0x73, 0xa1, 0xdc, 0xb4, + 0xe0, 0x91, 0x67, 0xd3, 0x7b, 0x10, 0x6a, 0x5c, 0xc9, 0xd2, 0xa7, 0x7c, 0x9b, 0xb5, 0xd5, 0xfe, + 0x23, 0x18, 0xfc, 0x0d, 0x8e, 0x02, 0x84, 0x6f, 0x16, 0xec, 0xd5, 0xec, 0x70, 0xf7, 0x56, 0xf3, + 0x9e, 0xbd, 0x3d, 0x9a, 0xbe, 0x60, 0xbb, 0x64, 0x3a, 0xff, 0x51, 0x8f, 0xc8, 0xcf, 0x7a, 0x44, + 0x7e, 0xd5, 0x23, 0x02, 0xcf, 0x72, 0xe9, 0x2d, 0x2a, 0x2d, 0x3f, 0x57, 0x57, 0x74, 0x3b, 0x27, + 0xef, 0x83, 0x32, 0x3d, 0x0e, 0xdd, 0xdf, 0xf3, 0xe4, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0f, + 0x20, 0xcd, 0xd4, 0xd1, 0x03, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/health_check/v2/health_check.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/health_check/v2/health_check.pb.go index 93fd6e0da05b..b702682d9957 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/health_check/v2/health_check.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/health_check/v2/health_check.pb.go @@ -53,7 +53,7 @@ func (m *HealthCheck) Reset() { *m = HealthCheck{} } func (m *HealthCheck) String() string { return proto.CompactTextString(m) } func (*HealthCheck) ProtoMessage() {} func (*HealthCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_8fc8582e22949acd, []int{0} + return fileDescriptor_health_check_aa41ce37e0d40cf4, []int{0} } func (m *HealthCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -633,39 +633,40 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/health_check/v2/health_check.proto", fileDescriptor_health_check_8fc8582e22949acd) + proto.RegisterFile("envoy/config/filter/http/health_check/v2/health_check.proto", fileDescriptor_health_check_aa41ce37e0d40cf4) } -var fileDescriptor_health_check_8fc8582e22949acd = []byte{ - // 469 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xc1, 0x8a, 0xd4, 0x30, - 0x18, 0x26, 0xed, 0x8c, 0xee, 0x66, 0x0e, 0x8e, 0x55, 0xb0, 0x0e, 0x32, 0xbb, 0xeb, 0x69, 0xbc, - 0x24, 0x50, 0x2f, 0xe2, 0x82, 0x87, 0x59, 0x85, 0x45, 0x18, 0x90, 0xb2, 0x28, 0x78, 0x29, 0xd9, - 0xf6, 0x9f, 0x36, 0x6c, 0x27, 0x09, 0x69, 0x5a, 0xe9, 0x2b, 0xf8, 0x04, 0x9e, 0x7c, 0x10, 0x4f, - 0x1e, 0x3d, 0xfa, 0x06, 0xca, 0xdc, 0x7c, 0x00, 0xef, 0x92, 0xa4, 0x83, 0x2e, 0x03, 0xea, 0xa5, - 0xfc, 0xcd, 0xf7, 0x7f, 0xdf, 0xff, 0xe5, 0xff, 0x82, 0x4f, 0x41, 0x74, 0xb2, 0xa7, 0xb9, 0x14, - 0x6b, 0x5e, 0xd2, 0x35, 0xaf, 0x0d, 0x68, 0x5a, 0x19, 0xa3, 0x68, 0x05, 0xac, 0x36, 0x55, 0x96, - 0x57, 0x90, 0x5f, 0xd1, 0x2e, 0xb9, 0xf6, 0x4f, 0x94, 0x96, 0x46, 0x46, 0x0b, 0x47, 0x26, 0x9e, - 0x4c, 0x3c, 0x99, 0x58, 0x32, 0xb9, 0xd6, 0xdc, 0x25, 0xb3, 0x79, 0x29, 0x65, 0x59, 0x03, 0x75, - 0xbc, 0xcb, 0x76, 0x4d, 0x8b, 0x56, 0x33, 0xc3, 0xa5, 0xf0, 0x4a, 0xfb, 0xf8, 0x3b, 0xcd, 0x94, - 0x02, 0xdd, 0xec, 0x70, 0x6f, 0x93, 0x29, 0x6e, 0xad, 0x68, 0xd9, 0x1a, 0xf0, 0xdf, 0x01, 0x8f, - 0x3d, 0x6e, 0x7a, 0x05, 0x54, 0x81, 0xce, 0x41, 0x98, 0x01, 0xb9, 0xd7, 0xb1, 0x9a, 0x17, 0xcc, - 0x00, 0xdd, 0x15, 0x03, 0x70, 0xb7, 0x94, 0xa5, 0x74, 0x25, 0xb5, 0x95, 0x3f, 0x7d, 0xf8, 0x33, - 0xc4, 0x93, 0x73, 0x67, 0xfe, 0xcc, 0x7a, 0x8f, 0x52, 0x7c, 0x5b, 0xb1, 0xa6, 0xc9, 0x4c, 0xa5, - 0x65, 0x5b, 0x56, 0xd9, 0x46, 0x16, 0x10, 0xa3, 0x63, 0xb4, 0x98, 0x24, 0x33, 0xe2, 0x4d, 0x93, - 0x9d, 0x69, 0xb2, 0x94, 0xb2, 0x7e, 0xcd, 0xea, 0x16, 0x96, 0xf8, 0xd3, 0x8f, 0xcf, 0xe1, 0xf8, - 0x3d, 0x0a, 0xa6, 0x28, 0xbd, 0x65, 0x05, 0x2e, 0x3c, 0x7f, 0x25, 0x0b, 0x88, 0x9e, 0x61, 0x9c, - 0xb3, 0xbc, 0x82, 0xcc, 0xf0, 0x0d, 0xc4, 0xa1, 0x13, 0xbb, 0xbf, 0x27, 0xf6, 0x7c, 0xd8, 0xd0, - 0x72, 0xf4, 0xe1, 0xdb, 0x11, 0x4a, 0x0f, 0x1d, 0xe5, 0x82, 0x6f, 0x20, 0xfa, 0x88, 0xf0, 0x51, - 0x5e, 0xb7, 0x8d, 0x01, 0x9d, 0x6d, 0xb8, 0xc8, 0xfc, 0xb2, 0xfb, 0x6c, 0xb8, 0x38, 0x2b, 0xa1, - 0x89, 0x47, 0xc7, 0xe1, 0x62, 0x92, 0xbc, 0x21, 0xff, 0x9b, 0x10, 0xf9, 0xe3, 0xd2, 0xe4, 0xcc, - 0x8b, 0xaf, 0xb8, 0xf0, 0xa7, 0xfd, 0xab, 0xdf, 0xca, 0x2f, 0x84, 0xd1, 0x7d, 0xfa, 0x20, 0xff, - 0x4b, 0x4b, 0x74, 0x8a, 0x6f, 0x56, 0xc0, 0x0a, 0xd0, 0x4d, 0x3c, 0x76, 0x3e, 0x4e, 0x06, 0x1f, - 0x4c, 0x71, 0x3b, 0xcb, 0x27, 0x77, 0xee, 0x5a, 0x56, 0xcc, 0xe4, 0x15, 0xe8, 0x74, 0xc7, 0x98, - 0x15, 0xf8, 0xe4, 0x9f, 0xf3, 0xa3, 0x29, 0x0e, 0xaf, 0xa0, 0x77, 0x41, 0x1c, 0xa6, 0xb6, 0x8c, - 0x1e, 0xe1, 0x71, 0x67, 0x57, 0x1f, 0x07, 0x6e, 0x9f, 0x77, 0x86, 0x89, 0xf6, 0x45, 0x90, 0x81, - 0x9e, 0xfa, 0x8e, 0xa7, 0xc1, 0x13, 0xf4, 0x72, 0x74, 0x10, 0x4c, 0xc3, 0xf4, 0x00, 0x44, 0xa1, - 0x24, 0x17, 0x66, 0x39, 0xfd, 0xb2, 0x9d, 0xa3, 0xaf, 0xdb, 0x39, 0xfa, 0xbe, 0x9d, 0xa3, 0xb7, - 0x41, 0x97, 0x5c, 0xde, 0x70, 0x49, 0x3c, 0xfe, 0x15, 0x00, 0x00, 0xff, 0xff, 0x64, 0x1e, 0x13, - 0x74, 0x22, 0x03, 0x00, 0x00, +var fileDescriptor_health_check_aa41ce37e0d40cf4 = []byte{ + // 483 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x41, 0x6b, 0xd4, 0x40, + 0x14, 0x66, 0x36, 0xbb, 0xda, 0xce, 0x1e, 0x5c, 0xa3, 0x60, 0x5c, 0x64, 0xdb, 0x7a, 0x5a, 0x2f, + 0x33, 0x10, 0x41, 0xc4, 0x82, 0x87, 0xad, 0x42, 0x29, 0x2c, 0x94, 0x50, 0x14, 0xbc, 0x84, 0x69, + 0xf2, 0x36, 0x19, 0x9a, 0xcd, 0x1b, 0x26, 0x93, 0x68, 0xfe, 0x82, 0xbf, 0xc0, 0x93, 0x3f, 0xc4, + 0x93, 0x47, 0x8f, 0xfe, 0x03, 0x65, 0x6f, 0xfe, 0x00, 0xef, 0x92, 0x99, 0x2c, 0x5a, 0x0a, 0xb6, + 0x97, 0xf0, 0x32, 0xdf, 0xfb, 0xbe, 0xf7, 0xcd, 0xf7, 0x86, 0x1e, 0x42, 0xd9, 0x60, 0xcb, 0x13, + 0x2c, 0x57, 0x32, 0xe3, 0x2b, 0x59, 0x18, 0xd0, 0x3c, 0x37, 0x46, 0xf1, 0x1c, 0x44, 0x61, 0xf2, + 0x38, 0xc9, 0x21, 0xb9, 0xe0, 0x4d, 0x78, 0xe9, 0x9f, 0x29, 0x8d, 0x06, 0xfd, 0xb9, 0x25, 0x33, + 0x47, 0x66, 0x8e, 0xcc, 0x3a, 0x32, 0xbb, 0xd4, 0xdc, 0x84, 0xd3, 0x59, 0x86, 0x98, 0x15, 0xc0, + 0x2d, 0xef, 0xbc, 0x5e, 0xf1, 0xb4, 0xd6, 0xc2, 0x48, 0x2c, 0x9d, 0xd2, 0x55, 0xfc, 0xbd, 0x16, + 0x4a, 0x81, 0xae, 0xb6, 0xb8, 0xb3, 0x29, 0x94, 0xec, 0xac, 0x68, 0xac, 0x0d, 0xb8, 0x6f, 0x8f, + 0x07, 0x0e, 0x37, 0xad, 0x02, 0xae, 0x40, 0x27, 0x50, 0x9a, 0x1e, 0x79, 0xd0, 0x88, 0x42, 0xa6, + 0xc2, 0x00, 0xdf, 0x16, 0x3d, 0x70, 0x3f, 0xc3, 0x0c, 0x6d, 0xc9, 0xbb, 0xca, 0x9d, 0x3e, 0xfe, + 0xed, 0xd1, 0xf1, 0xb1, 0x35, 0x7f, 0xd4, 0x79, 0xf7, 0x23, 0x7a, 0x57, 0x89, 0xaa, 0x8a, 0x4d, + 0xae, 0xb1, 0xce, 0xf2, 0x78, 0x8d, 0x29, 0x04, 0x64, 0x9f, 0xcc, 0xc7, 0xe1, 0x94, 0x39, 0xd3, + 0x6c, 0x6b, 0x9a, 0x2d, 0x10, 0x8b, 0x37, 0xa2, 0xa8, 0x61, 0x41, 0xbf, 0xfc, 0xfa, 0xea, 0x8d, + 0x3e, 0x92, 0xc1, 0x84, 0x44, 0x77, 0x3a, 0x81, 0x33, 0xc7, 0x5f, 0x62, 0x0a, 0xfe, 0x4b, 0x4a, + 0x13, 0x91, 0xe4, 0x10, 0x1b, 0xb9, 0x86, 0xc0, 0xb3, 0x62, 0x0f, 0xaf, 0x88, 0xbd, 0xea, 0x13, + 0x5a, 0x0c, 0x3f, 0xfd, 0xd8, 0x23, 0xd1, 0xae, 0xa5, 0x9c, 0xc9, 0x35, 0xf8, 0x9f, 0x09, 0xdd, + 0x4b, 0x8a, 0xba, 0x32, 0xa0, 0xe3, 0xb5, 0x2c, 0x63, 0x17, 0x76, 0x1b, 0xf7, 0x17, 0x17, 0x19, + 0x54, 0xc1, 0x70, 0xdf, 0x9b, 0x8f, 0xc3, 0xb7, 0xec, 0xa6, 0x1b, 0x62, 0xff, 0x5c, 0x9a, 0x1d, + 0x39, 0xf1, 0xa5, 0x2c, 0xdd, 0x69, 0x7b, 0xfa, 0x57, 0xf9, 0x75, 0x69, 0x74, 0x1b, 0x3d, 0x4a, + 0xfe, 0xd3, 0xe2, 0x1f, 0xd2, 0xdb, 0x39, 0x88, 0x14, 0x74, 0x15, 0x8c, 0xac, 0x8f, 0x83, 0xde, + 0x87, 0x50, 0xb2, 0x9b, 0xe5, 0x36, 0x77, 0x6c, 0x5b, 0x96, 0xc2, 0x24, 0x39, 0xe8, 0x68, 0xcb, + 0x98, 0xa6, 0xf4, 0xe0, 0xda, 0xf9, 0xfe, 0x84, 0x7a, 0x17, 0xd0, 0xda, 0x45, 0xec, 0x46, 0x5d, + 0xe9, 0x3f, 0xa1, 0xa3, 0xa6, 0x8b, 0x3e, 0x18, 0xd8, 0x3c, 0xef, 0xf5, 0x13, 0xbb, 0x17, 0xc1, + 0x7a, 0x7a, 0xe4, 0x3a, 0x5e, 0x0c, 0x9e, 0x93, 0x93, 0xe1, 0xce, 0x60, 0xe2, 0x45, 0x3b, 0x50, + 0xa6, 0x0a, 0x65, 0x69, 0x16, 0x27, 0xdf, 0x36, 0x33, 0xf2, 0x7d, 0x33, 0x23, 0x3f, 0x37, 0x33, + 0x42, 0x9f, 0x49, 0x74, 0x7c, 0xa5, 0xf1, 0x43, 0x7b, 0xe3, 0x10, 0x4f, 0xc9, 0xbb, 0x41, 0x13, + 0x9e, 0xdf, 0xb2, 0x3b, 0x7c, 0xfa, 0x27, 0x00, 0x00, 0xff, 0xff, 0x82, 0x1a, 0x9c, 0x76, 0x5c, + 0x03, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ip_tagging/v2/ip_tagging.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ip_tagging/v2/ip_tagging.pb.go index 97c0f0fac15c..b43aa51def04 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ip_tagging/v2/ip_tagging.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/ip_tagging/v2/ip_tagging.pb.go @@ -55,7 +55,7 @@ func (x IPTagging_RequestType) String() string { return proto.EnumName(IPTagging_RequestType_name, int32(x)) } func (IPTagging_RequestType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_ip_tagging_93e0d5aed759f06a, []int{0, 0} + return fileDescriptor_ip_tagging_453e735e0775e1e3, []int{0, 0} } type IPTagging struct { @@ -74,7 +74,7 @@ func (m *IPTagging) Reset() { *m = IPTagging{} } func (m *IPTagging) String() string { return proto.CompactTextString(m) } func (*IPTagging) ProtoMessage() {} func (*IPTagging) Descriptor() ([]byte, []int) { - return fileDescriptor_ip_tagging_93e0d5aed759f06a, []int{0} + return fileDescriptor_ip_tagging_453e735e0775e1e3, []int{0} } func (m *IPTagging) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -133,7 +133,7 @@ func (m *IPTagging_IPTag) Reset() { *m = IPTagging_IPTag{} } func (m *IPTagging_IPTag) String() string { return proto.CompactTextString(m) } func (*IPTagging_IPTag) ProtoMessage() {} func (*IPTagging_IPTag) Descriptor() ([]byte, []int) { - return fileDescriptor_ip_tagging_93e0d5aed759f06a, []int{0, 0} + return fileDescriptor_ip_tagging_453e735e0775e1e3, []int{0, 0} } func (m *IPTagging_IPTag) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -641,33 +641,34 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/ip_tagging/v2/ip_tagging.proto", fileDescriptor_ip_tagging_93e0d5aed759f06a) + proto.RegisterFile("envoy/config/filter/http/ip_tagging/v2/ip_tagging.proto", fileDescriptor_ip_tagging_453e735e0775e1e3) } -var fileDescriptor_ip_tagging_93e0d5aed759f06a = []byte{ - // 371 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x51, 0xcd, 0x4a, 0xeb, 0x40, - 0x14, 0xbe, 0x93, 0xfe, 0xdc, 0x76, 0x52, 0x2e, 0x21, 0x9b, 0x5b, 0xca, 0x25, 0xb7, 0x74, 0x21, - 0x5d, 0xcd, 0x40, 0x8a, 0x74, 0xe5, 0xc2, 0x4a, 0xc1, 0x42, 0xa9, 0x12, 0xb2, 0x10, 0x11, 0xcb, - 0xb4, 0x99, 0x8e, 0x03, 0x69, 0x32, 0x4e, 0xa6, 0x91, 0x6e, 0x7d, 0x04, 0x1f, 0xc7, 0x95, 0x4b, - 0x97, 0x3e, 0x82, 0x74, 0x27, 0xf8, 0x10, 0x92, 0x99, 0x56, 0xbb, 0xd4, 0xdd, 0xf9, 0xf8, 0xce, - 0xf7, 0x73, 0x66, 0x60, 0x9f, 0x26, 0x79, 0xba, 0xc6, 0xf3, 0x34, 0x59, 0x70, 0x86, 0x17, 0x3c, - 0x56, 0x54, 0xe2, 0x1b, 0xa5, 0x04, 0xe6, 0x62, 0xaa, 0x08, 0x63, 0x3c, 0x61, 0x38, 0xf7, 0xf7, - 0x10, 0x12, 0x32, 0x55, 0xa9, 0x7b, 0xa0, 0x85, 0xc8, 0x08, 0x91, 0x11, 0xa2, 0x42, 0x88, 0xf6, - 0x56, 0x73, 0xbf, 0xf5, 0xdf, 0x04, 0x10, 0xc1, 0x0b, 0x9b, 0x79, 0x2a, 0x29, 0x26, 0x51, 0x24, - 0x69, 0x96, 0x19, 0xa3, 0x96, 0xc7, 0xd2, 0x94, 0xc5, 0x14, 0x6b, 0x34, 0x5b, 0x2d, 0xf0, 0x9d, - 0x24, 0x42, 0x50, 0xb9, 0xe3, 0xff, 0xe6, 0x24, 0xe6, 0x11, 0x51, 0x14, 0xef, 0x06, 0x43, 0x74, - 0xde, 0x2d, 0x58, 0x1f, 0x9d, 0x87, 0x26, 0xca, 0x8d, 0x61, 0x43, 0xd2, 0xdb, 0x15, 0xcd, 0xd4, - 0x54, 0xad, 0x05, 0x6d, 0x82, 0x36, 0xe8, 0xfe, 0xf1, 0x8f, 0xd0, 0xf7, 0x6a, 0xa2, 0x4f, 0x23, - 0x14, 0x18, 0x97, 0x70, 0x2d, 0xe8, 0x00, 0x3e, 0xbe, 0x3d, 0x95, 0x2a, 0xf7, 0xc0, 0x72, 0x40, - 0x60, 0xcb, 0x2f, 0xc2, 0xbd, 0x82, 0xbf, 0x8d, 0x3e, 0x6b, 0x96, 0xdb, 0xa5, 0xae, 0xed, 0xf7, - 0x7f, 0x1e, 0xa4, 0xa7, 0x6d, 0xc4, 0x03, 0xb0, 0x6a, 0x20, 0xa8, 0x72, 0x11, 0x12, 0x96, 0xb5, - 0xae, 0x61, 0x45, 0x93, 0xae, 0x07, 0x6d, 0xa3, 0x9e, 0x26, 0x64, 0x69, 0x6e, 0xaa, 0x07, 0x75, - 0xbd, 0x35, 0x21, 0x4b, 0xea, 0x1e, 0xea, 0x1a, 0x31, 0xcf, 0x54, 0xd3, 0xd2, 0x35, 0xfe, 0x6d, - 0x6b, 0x10, 0xc1, 0x8b, 0xb0, 0xe2, 0xb9, 0xd1, 0x09, 0x8f, 0x64, 0x40, 0x12, 0x46, 0x0b, 0xff, - 0x31, 0xcf, 0x54, 0xa7, 0x07, 0xed, 0xbd, 0x2b, 0xdd, 0x1a, 0x2c, 0x0f, 0xce, 0xc2, 0x53, 0xe7, - 0x97, 0xdb, 0x80, 0xb5, 0xd1, 0x24, 0x1c, 0x06, 0x93, 0xe3, 0xb1, 0x03, 0x0a, 0x34, 0xbc, 0xd8, - 0x22, 0x6b, 0xe0, 0x3c, 0x6f, 0x3c, 0xf0, 0xb2, 0xf1, 0xc0, 0xeb, 0xc6, 0x03, 0x97, 0x56, 0xee, - 0xcf, 0xaa, 0xfa, 0x1f, 0x7a, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x88, 0x02, 0x63, 0x67, 0x44, - 0x02, 0x00, 0x00, +var fileDescriptor_ip_tagging_453e735e0775e1e3 = []byte{ + // 385 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x51, 0x4d, 0x8b, 0x1a, 0x31, + 0x18, 0x6e, 0xc6, 0x8f, 0x6a, 0x46, 0x8a, 0xcc, 0xa5, 0x22, 0x65, 0x2a, 0x1e, 0x8a, 0xa7, 0x04, + 0xc6, 0x16, 0x4f, 0x3d, 0xd4, 0x22, 0x28, 0x88, 0x95, 0x61, 0x0e, 0xa5, 0x94, 0x4a, 0x74, 0x62, + 0x1a, 0x18, 0x27, 0x69, 0x26, 0x4e, 0x3b, 0xd7, 0xfe, 0x84, 0xfe, 0x9c, 0x9e, 0xf6, 0xb8, 0xc7, + 0xfd, 0x09, 0x8b, 0xb7, 0x85, 0xfd, 0x11, 0xcb, 0x24, 0xba, 0xeb, 0xd1, 0xbd, 0xbd, 0x0f, 0xcf, + 0xfb, 0x7c, 0xbc, 0x09, 0x1c, 0xd1, 0x34, 0x17, 0x05, 0xde, 0x88, 0x74, 0xcb, 0x19, 0xde, 0xf2, + 0x44, 0x53, 0x85, 0x7f, 0x6a, 0x2d, 0x31, 0x97, 0x2b, 0x4d, 0x18, 0xe3, 0x29, 0xc3, 0x79, 0x70, + 0x86, 0x90, 0x54, 0x42, 0x0b, 0xef, 0x9d, 0x11, 0x22, 0x2b, 0x44, 0x56, 0x88, 0x4a, 0x21, 0x3a, + 0x5b, 0xcd, 0x83, 0xee, 0x5b, 0x1b, 0x40, 0x24, 0x2f, 0x6d, 0x36, 0x42, 0x51, 0x4c, 0xe2, 0x58, + 0xd1, 0x2c, 0xb3, 0x46, 0x5d, 0x9f, 0x09, 0xc1, 0x12, 0x8a, 0x0d, 0x5a, 0xef, 0xb7, 0xf8, 0xb7, + 0x22, 0x52, 0x52, 0x75, 0xe2, 0x5f, 0xe7, 0x24, 0xe1, 0x31, 0xd1, 0x14, 0x9f, 0x06, 0x4b, 0xf4, + 0xef, 0x1d, 0xd8, 0x9c, 0x2d, 0x23, 0x1b, 0xe5, 0x25, 0xb0, 0xa5, 0xe8, 0xaf, 0x3d, 0xcd, 0xf4, + 0x4a, 0x17, 0x92, 0x76, 0x40, 0x0f, 0x0c, 0x5e, 0x05, 0x1f, 0xd1, 0x65, 0x35, 0xd1, 0xa3, 0x11, + 0x0a, 0xad, 0x4b, 0x54, 0x48, 0x3a, 0x86, 0xff, 0xef, 0xae, 0x2a, 0xb5, 0xbf, 0xc0, 0x69, 0x83, + 0xd0, 0x55, 0x4f, 0x84, 0xf7, 0x1d, 0xbe, 0xb4, 0xfa, 0xac, 0x53, 0xed, 0x55, 0x06, 0x6e, 0x30, + 0x7a, 0x7e, 0x90, 0x99, 0x8e, 0x11, 0xff, 0x80, 0xd3, 0x00, 0x61, 0x9d, 0xcb, 0x88, 0xb0, 0xac, + 0xfb, 0x03, 0xd6, 0x0c, 0xe9, 0xf9, 0xd0, 0xb5, 0xea, 0x55, 0x4a, 0x76, 0xf6, 0xa6, 0x66, 0xd8, + 0x34, 0x5b, 0x0b, 0xb2, 0xa3, 0xde, 0x07, 0x53, 0x23, 0xe1, 0x99, 0xee, 0x38, 0xa6, 0xc6, 0x9b, + 0x63, 0x0d, 0x22, 0x79, 0x19, 0x56, 0x3e, 0x37, 0xfa, 0xcc, 0x63, 0x15, 0x92, 0x94, 0xd1, 0xd2, + 0x7f, 0xce, 0x33, 0xdd, 0x1f, 0x42, 0xf7, 0xec, 0x4a, 0xaf, 0x01, 0xab, 0xe3, 0x2f, 0xd1, 0xb4, + 0xfd, 0xc2, 0x6b, 0xc1, 0xc6, 0x6c, 0x11, 0x4d, 0xc2, 0xc5, 0xa7, 0x79, 0x1b, 0x94, 0x68, 0xf2, + 0xf5, 0x88, 0x9c, 0xf1, 0xf4, 0xfa, 0xe0, 0x83, 0x9b, 0x83, 0x0f, 0x6e, 0x0f, 0x3e, 0x80, 0xef, + 0xb9, 0xb0, 0x51, 0x52, 0x89, 0x3f, 0xc5, 0x85, 0xc7, 0x2f, 0xc1, 0x37, 0x27, 0x0f, 0xd6, 0x75, + 0xf3, 0x7f, 0xc3, 0x87, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdb, 0x60, 0x4f, 0x69, 0x7c, 0x02, 0x00, + 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/jwt_authn/v2alpha/config.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/jwt_authn/v2alpha/config.pb.go index c2efd74f0a8c..3e7dc2fca0fa 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/jwt_authn/v2alpha/config.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/jwt_authn/v2alpha/config.pb.go @@ -157,7 +157,7 @@ func (m *JwtProvider) Reset() { *m = JwtProvider{} } func (m *JwtProvider) String() string { return proto.CompactTextString(m) } func (*JwtProvider) ProtoMessage() {} func (*JwtProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_config_a6f0e3171821b327, []int{0} + return fileDescriptor_config_460934e04afde9a5, []int{0} } func (m *JwtProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -369,7 +369,7 @@ func (m *RemoteJwks) Reset() { *m = RemoteJwks{} } func (m *RemoteJwks) String() string { return proto.CompactTextString(m) } func (*RemoteJwks) ProtoMessage() {} func (*RemoteJwks) Descriptor() ([]byte, []int) { - return fileDescriptor_config_a6f0e3171821b327, []int{1} + return fileDescriptor_config_460934e04afde9a5, []int{1} } func (m *RemoteJwks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -429,7 +429,7 @@ func (m *JwtHeader) Reset() { *m = JwtHeader{} } func (m *JwtHeader) String() string { return proto.CompactTextString(m) } func (*JwtHeader) ProtoMessage() {} func (*JwtHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_config_a6f0e3171821b327, []int{2} + return fileDescriptor_config_460934e04afde9a5, []int{2} } func (m *JwtHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -487,7 +487,7 @@ func (m *ProviderWithAudiences) Reset() { *m = ProviderWithAudiences{} } func (m *ProviderWithAudiences) String() string { return proto.CompactTextString(m) } func (*ProviderWithAudiences) ProtoMessage() {} func (*ProviderWithAudiences) Descriptor() ([]byte, []int) { - return fileDescriptor_config_a6f0e3171821b327, []int{3} + return fileDescriptor_config_460934e04afde9a5, []int{3} } func (m *ProviderWithAudiences) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -587,7 +587,7 @@ func (m *JwtRequirement) Reset() { *m = JwtRequirement{} } func (m *JwtRequirement) String() string { return proto.CompactTextString(m) } func (*JwtRequirement) ProtoMessage() {} func (*JwtRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_config_a6f0e3171821b327, []int{4} + return fileDescriptor_config_460934e04afde9a5, []int{4} } func (m *JwtRequirement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -827,7 +827,7 @@ func (m *JwtRequirementOrList) Reset() { *m = JwtRequirementOrList{} } func (m *JwtRequirementOrList) String() string { return proto.CompactTextString(m) } func (*JwtRequirementOrList) ProtoMessage() {} func (*JwtRequirementOrList) Descriptor() ([]byte, []int) { - return fileDescriptor_config_a6f0e3171821b327, []int{5} + return fileDescriptor_config_460934e04afde9a5, []int{5} } func (m *JwtRequirementOrList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -877,7 +877,7 @@ func (m *JwtRequirementAndList) Reset() { *m = JwtRequirementAndList{} } func (m *JwtRequirementAndList) String() string { return proto.CompactTextString(m) } func (*JwtRequirementAndList) ProtoMessage() {} func (*JwtRequirementAndList) Descriptor() ([]byte, []int) { - return fileDescriptor_config_a6f0e3171821b327, []int{6} + return fileDescriptor_config_460934e04afde9a5, []int{6} } func (m *JwtRequirementAndList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -957,7 +957,7 @@ func (m *RequirementRule) Reset() { *m = RequirementRule{} } func (m *RequirementRule) String() string { return proto.CompactTextString(m) } func (*RequirementRule) ProtoMessage() {} func (*RequirementRule) Descriptor() ([]byte, []int) { - return fileDescriptor_config_a6f0e3171821b327, []int{7} + return fileDescriptor_config_460934e04afde9a5, []int{7} } func (m *RequirementRule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1101,7 +1101,7 @@ func (m *JwtAuthentication) Reset() { *m = JwtAuthentication{} } func (m *JwtAuthentication) String() string { return proto.CompactTextString(m) } func (*JwtAuthentication) ProtoMessage() {} func (*JwtAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_config_a6f0e3171821b327, []int{8} + return fileDescriptor_config_460934e04afde9a5, []int{8} } func (m *JwtAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3420,70 +3420,71 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/jwt_authn/v2alpha/config.proto", fileDescriptor_config_a6f0e3171821b327) -} - -var fileDescriptor_config_a6f0e3171821b327 = []byte{ - // 972 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x4f, 0x6f, 0xe3, 0x44, - 0x14, 0xaf, 0x93, 0xa6, 0x4d, 0x9e, 0xd3, 0xee, 0xee, 0xd0, 0x76, 0x4d, 0xd9, 0x0d, 0xd9, 0x20, - 0xa4, 0x88, 0x83, 0x2d, 0x05, 0x96, 0x45, 0x8b, 0x84, 0x9a, 0x68, 0x17, 0x85, 0x68, 0x43, 0xcb, - 0x20, 0xfe, 0x5e, 0xac, 0xa9, 0x3d, 0x69, 0xa6, 0x75, 0x6c, 0x33, 0x1e, 0xc7, 0xe4, 0xca, 0x9f, - 0x0b, 0x47, 0xbe, 0x06, 0x5f, 0x00, 0x71, 0xda, 0x23, 0xdc, 0xf8, 0x08, 0xa8, 0x9c, 0xf6, 0x5b, - 0x20, 0xcf, 0x8c, 0x93, 0x66, 0x1b, 0x10, 0x59, 0x24, 0x2e, 0xd1, 0xcc, 0x7b, 0xef, 0xf7, 0x7b, - 0x33, 0xbf, 0xfc, 0xe6, 0x19, 0x1e, 0xd0, 0x70, 0x1a, 0xcd, 0x1c, 0x2f, 0x0a, 0x47, 0xec, 0xcc, - 0x19, 0xb1, 0x40, 0x50, 0xee, 0x8c, 0x85, 0x88, 0x9d, 0xf3, 0x4c, 0xb8, 0x24, 0x15, 0xe3, 0xd0, - 0x99, 0x76, 0x48, 0x10, 0x8f, 0x89, 0x2e, 0xb2, 0x63, 0x1e, 0x89, 0x08, 0xbd, 0x21, 0x81, 0xb6, - 0x8e, 0x29, 0xa0, 0x9d, 0x03, 0xed, 0x39, 0xd0, 0xd6, 0xc0, 0xc3, 0x3b, 0xaa, 0x09, 0x89, 0x99, - 0x33, 0xed, 0x38, 0x5e, 0xc4, 0xa9, 0x73, 0x4a, 0x12, 0xaa, 0x98, 0x0e, 0x9b, 0xd7, 0xb3, 0x39, - 0x8f, 0x9b, 0x72, 0xa6, 0x2b, 0x1a, 0x4b, 0x15, 0x3c, 0x4a, 0x05, 0x55, 0xbf, 0x45, 0xfe, 0x2c, - 0x8a, 0xce, 0x02, 0xea, 0xc8, 0xdd, 0x69, 0x3a, 0x72, 0xfc, 0x94, 0x13, 0xc1, 0xa2, 0x50, 0xe7, - 0x5f, 0x79, 0x3e, 0x4f, 0x27, 0xb1, 0x98, 0xfd, 0x1d, 0x38, 0xe3, 0x24, 0x8e, 0x29, 0x4f, 0x74, - 0xfe, 0xf6, 0x94, 0x04, 0xcc, 0x27, 0x82, 0x3a, 0xc5, 0x42, 0x25, 0x5a, 0xdf, 0x6d, 0x82, 0x39, - 0xc8, 0xc4, 0x09, 0x8f, 0xa6, 0xcc, 0xa7, 0x1c, 0xdd, 0x83, 0x2d, 0x96, 0x24, 0x29, 0xe5, 0x96, - 0xd1, 0x34, 0xda, 0xb5, 0x5e, 0xed, 0x97, 0x67, 0x4f, 0xcb, 0x9b, 0xbc, 0xd4, 0x34, 0xb0, 0x4e, - 0xa0, 0x3b, 0x50, 0x23, 0xa9, 0xcf, 0x68, 0xe8, 0xd1, 0xc4, 0x2a, 0x35, 0xcb, 0xed, 0x1a, 0x5e, - 0x04, 0xd0, 0x17, 0x60, 0x72, 0x3a, 0x89, 0x04, 0x75, 0xcf, 0xb3, 0x8b, 0xc4, 0x2a, 0x37, 0x8d, - 0xb6, 0xd9, 0x79, 0xdb, 0xfe, 0xf7, 0x42, 0xdb, 0x58, 0xc2, 0x07, 0xd9, 0x45, 0xd2, 0xdf, 0xc0, - 0xc0, 0xe7, 0x3b, 0xf4, 0x1e, 0x40, 0x10, 0x79, 0x24, 0x50, 0xcc, 0x9b, 0x92, 0xf9, 0xae, 0x66, - 0x26, 0x31, 0xb3, 0xa7, 0x1d, 0x3b, 0x17, 0xde, 0x7e, 0x44, 0x04, 0xf9, 0x38, 0x4a, 0xb9, 0x47, - 0xfb, 0x1b, 0xb8, 0x26, 0x21, 0x12, 0x6f, 0xc1, 0xf6, 0x28, 0xe2, 0x19, 0xe1, 0xbe, 0x55, 0x69, - 0x1a, 0xed, 0x2a, 0x2e, 0xb6, 0xe8, 0x73, 0xa8, 0x8f, 0x78, 0x34, 0x71, 0xc7, 0x94, 0xf8, 0x94, - 0x27, 0xd6, 0x56, 0xb3, 0xdc, 0x36, 0x3b, 0xf7, 0xd7, 0x39, 0xf5, 0x20, 0x13, 0x7d, 0x89, 0xc6, - 0x66, 0x4e, 0xa5, 0xd6, 0x09, 0x7a, 0x15, 0xe4, 0xd6, 0x8d, 0x09, 0x27, 0x93, 0xc4, 0xda, 0x96, - 0x72, 0x41, 0x1e, 0x3a, 0x91, 0x11, 0xf4, 0x16, 0x1c, 0xe8, 0x53, 0xb8, 0x31, 0x99, 0x05, 0x11, - 0xf1, 0xf5, 0x29, 0xac, 0x6a, 0xfe, 0x07, 0xe0, 0x3d, 0x9d, 0x3d, 0x51, 0x49, 0xc5, 0x8b, 0x6c, - 0x78, 0xa9, 0xa8, 0x66, 0xa1, 0x3b, 0xa1, 0x82, 0xf8, 0x44, 0x10, 0xab, 0x26, 0x21, 0xb7, 0x74, - 0xea, 0x83, 0x70, 0xa8, 0x13, 0xbd, 0x06, 0xec, 0xe7, 0xa2, 0xb9, 0x89, 0x94, 0xc5, 0x4d, 0x62, - 0xea, 0xb1, 0x11, 0xa3, 0x1c, 0x55, 0x7e, 0x7e, 0xf6, 0xb4, 0x6c, 0xb4, 0xbe, 0x37, 0x00, 0x16, - 0xba, 0xa3, 0xfb, 0x50, 0x2d, 0xdc, 0x2b, 0x7d, 0x60, 0x76, 0x0e, 0x57, 0xe8, 0xdc, 0x17, 0x22, - 0xfe, 0x84, 0x33, 0xbc, 0x3d, 0x56, 0x0b, 0x74, 0x04, 0xbb, 0x1e, 0xf1, 0xc6, 0xd4, 0x2d, 0xac, - 0x6b, 0x95, 0x24, 0xf8, 0x65, 0x5b, 0xd9, 0xd3, 0x2e, 0xec, 0x69, 0x3f, 0xd2, 0x05, 0x78, 0x47, - 0x02, 0x8a, 0x6d, 0x6b, 0x08, 0xb5, 0xb9, 0x90, 0xe8, 0x2e, 0x6c, 0x86, 0x64, 0x42, 0xaf, 0x3b, - 0x51, 0x86, 0xd1, 0x3d, 0xa8, 0x4f, 0x49, 0x90, 0x52, 0x37, 0xe6, 0x74, 0xc4, 0xbe, 0x96, 0xbd, - 0x6a, 0xd8, 0x94, 0xb1, 0x13, 0x19, 0x6a, 0x7d, 0x09, 0xfb, 0x85, 0xb3, 0x3f, 0x63, 0x62, 0xdc, - 0x9d, 0xbb, 0xf4, 0x35, 0xd8, 0x89, 0x75, 0xc2, 0x5d, 0xf4, 0xc0, 0xf5, 0x22, 0xf8, 0x61, 0xde, - 0xe0, 0x1f, 0x8d, 0xde, 0xfa, 0xb3, 0x0c, 0xbb, 0x83, 0x4c, 0x60, 0xfa, 0x55, 0xca, 0x38, 0x9d, - 0xd0, 0x50, 0xa0, 0xd7, 0x57, 0xb2, 0xf6, 0x37, 0x9e, 0xe3, 0x9d, 0xc1, 0xc1, 0xbc, 0x8c, 0x84, - 0xbe, 0x7b, 0xb5, 0x49, 0x2e, 0x57, 0x77, 0x1d, 0xdf, 0xad, 0xbc, 0x5f, 0x7f, 0x03, 0xef, 0x15, - 0x2d, 0xba, 0xa1, 0xbf, 0xb8, 0x37, 0x85, 0x3a, 0x57, 0x07, 0x4e, 0x5c, 0x12, 0xce, 0xf4, 0xf3, - 0x3c, 0x5a, 0xd3, 0xe8, 0x57, 0xee, 0x7c, 0xcc, 0x9f, 0xb0, 0x44, 0xf4, 0x37, 0xb0, 0x59, 0xf0, - 0x76, 0xc3, 0x19, 0x1a, 0x5d, 0x6d, 0x13, 0x04, 0xfa, 0xad, 0x76, 0x5f, 0xbc, 0x4d, 0x37, 0xf4, - 0xaf, 0xf5, 0x09, 0x02, 0x74, 0x0c, 0xb7, 0x49, 0x10, 0x44, 0x99, 0x3b, 0x61, 0x49, 0xc2, 0xc2, - 0x33, 0x37, 0xe2, 0xee, 0x88, 0xb0, 0x80, 0xaa, 0x17, 0x6e, 0x76, 0x0e, 0xae, 0x39, 0xef, 0x71, - 0x3e, 0x35, 0x73, 0x7d, 0x24, 0x70, 0xa8, 0x70, 0xc7, 0xfc, 0x7d, 0x89, 0xea, 0xdd, 0x80, 0x9d, - 0xf9, 0xc1, 0xc5, 0x2c, 0xa6, 0xad, 0x6f, 0x0c, 0xd8, 0x5b, 0x75, 0x63, 0x74, 0x3e, 0xbf, 0x62, - 0x1e, 0x4c, 0x2c, 0x43, 0x8e, 0x8c, 0x87, 0x2f, 0x7e, 0xc5, 0x1e, 0xe4, 0x06, 0xaf, 0xfc, 0x68, - 0x94, 0xaa, 0x25, 0xbc, 0xc4, 0xdd, 0xfa, 0xd6, 0x80, 0xfd, 0x95, 0x7a, 0xfc, 0xaf, 0xa7, 0xf8, - 0xc9, 0x80, 0x1b, 0x57, 0x2a, 0x71, 0x1a, 0x50, 0x74, 0x04, 0x95, 0x09, 0x11, 0xde, 0x58, 0x4f, - 0x89, 0xc6, 0xf2, 0x94, 0x50, 0x9f, 0x37, 0x9c, 0xff, 0x0e, 0xf3, 0x2a, 0x4d, 0xfe, 0x83, 0x51, - 0xba, 0x69, 0x60, 0x05, 0x44, 0x9f, 0x42, 0xb5, 0x50, 0x5c, 0xdb, 0xff, 0x3f, 0x9c, 0x1e, 0xcf, - 0xb9, 0x5a, 0xbf, 0x95, 0xe0, 0xd6, 0x20, 0x13, 0xdd, 0x54, 0x8c, 0x69, 0x28, 0x98, 0x27, 0xe7, - 0x0b, 0x3a, 0x87, 0x5a, 0xf1, 0x2e, 0x0a, 0xb1, 0x9e, 0xac, 0xd9, 0x6e, 0x99, 0x71, 0xfe, 0xfe, - 0x92, 0xc7, 0xa1, 0xe0, 0x33, 0xbc, 0xa0, 0x47, 0x1f, 0x41, 0x85, 0xa7, 0x81, 0x1e, 0x1d, 0x66, - 0xe7, 0xdd, 0xf5, 0xbe, 0x81, 0x4b, 0x3a, 0x63, 0xc5, 0x74, 0x98, 0xc2, 0xee, 0x72, 0x3f, 0x74, - 0x13, 0xca, 0x17, 0x74, 0xa6, 0xc7, 0x57, 0xbe, 0x44, 0x43, 0xa8, 0xc8, 0x11, 0xa8, 0xd5, 0x7c, - 0xb0, 0xe6, 0xf5, 0x0a, 0x7e, 0xac, 0x58, 0x1e, 0x96, 0xde, 0x31, 0x7a, 0xf5, 0x5f, 0x2f, 0x1b, - 0xc6, 0xef, 0x97, 0x0d, 0xe3, 0x8f, 0xcb, 0x86, 0x71, 0xba, 0x25, 0xdf, 0xd2, 0x9b, 0x7f, 0x05, - 0x00, 0x00, 0xff, 0xff, 0xb1, 0x71, 0x9c, 0x6c, 0x76, 0x09, 0x00, 0x00, + proto.RegisterFile("envoy/config/filter/http/jwt_authn/v2alpha/config.proto", fileDescriptor_config_460934e04afde9a5) +} + +var fileDescriptor_config_460934e04afde9a5 = []byte{ + // 985 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0xda, 0x71, 0x13, 0xbf, 0x4d, 0xd2, 0x76, 0x48, 0xd2, 0x25, 0xb4, 0xc6, 0x35, 0x42, + 0x8a, 0x38, 0xec, 0x4a, 0x86, 0xd2, 0xaa, 0x48, 0x28, 0xb6, 0x5a, 0x64, 0xac, 0x9a, 0x98, 0x41, + 0xfc, 0xbd, 0xac, 0x26, 0xbb, 0xe3, 0x78, 0x92, 0xf5, 0xce, 0x32, 0x3b, 0xeb, 0xed, 0x5e, 0xf9, + 0x73, 0xe1, 0xc8, 0xd7, 0xe0, 0x0b, 0x20, 0x4e, 0x3d, 0xc2, 0x8d, 0x8f, 0x80, 0xc2, 0xa9, 0xdf, + 0x02, 0xed, 0xec, 0xac, 0x1d, 0x37, 0x06, 0xe1, 0x22, 0x71, 0xb1, 0x66, 0xde, 0x7b, 0xbf, 0xdf, + 0x9b, 0xf9, 0xf9, 0x37, 0x6f, 0xe1, 0x3e, 0x0d, 0xa7, 0x3c, 0x73, 0x3c, 0x1e, 0x8e, 0xd8, 0xa9, + 0x33, 0x62, 0x81, 0xa4, 0xc2, 0x19, 0x4b, 0x19, 0x39, 0x67, 0xa9, 0x74, 0x49, 0x22, 0xc7, 0xa1, + 0x33, 0x6d, 0x93, 0x20, 0x1a, 0x13, 0x5d, 0x64, 0x47, 0x82, 0x4b, 0x8e, 0xde, 0x52, 0x40, 0x5b, + 0xc7, 0x0a, 0xa0, 0x9d, 0x03, 0xed, 0x19, 0xd0, 0xd6, 0xc0, 0x83, 0xdb, 0x45, 0x13, 0x12, 0x31, + 0x67, 0xda, 0x76, 0x3c, 0x2e, 0xa8, 0x73, 0x42, 0x62, 0x5a, 0x30, 0x1d, 0x34, 0xaf, 0x66, 0x73, + 0x1e, 0x37, 0x11, 0x4c, 0x57, 0x34, 0x16, 0x2a, 0x04, 0x4f, 0x24, 0x2d, 0x7e, 0xcb, 0xfc, 0x29, + 0xe7, 0xa7, 0x01, 0x75, 0xd4, 0xee, 0x24, 0x19, 0x39, 0x7e, 0x22, 0x88, 0x64, 0x3c, 0xd4, 0xf9, + 0xd7, 0x5e, 0xcc, 0xd3, 0x49, 0x24, 0xb3, 0xbf, 0x03, 0xa7, 0x82, 0x44, 0x11, 0x15, 0xb1, 0xce, + 0xdf, 0x9a, 0x92, 0x80, 0xf9, 0x44, 0x52, 0xa7, 0x5c, 0x14, 0x89, 0xd6, 0x77, 0xeb, 0x60, 0xf6, + 0x53, 0x39, 0x14, 0x7c, 0xca, 0x7c, 0x2a, 0xd0, 0x5d, 0xb8, 0xc6, 0xe2, 0x38, 0xa1, 0xc2, 0x32, + 0x9a, 0xc6, 0x61, 0xbd, 0x5b, 0xff, 0xe5, 0xf9, 0xb3, 0xea, 0xba, 0xa8, 0x34, 0x0d, 0xac, 0x13, + 0xe8, 0x36, 0xd4, 0x49, 0xe2, 0x33, 0x1a, 0x7a, 0x34, 0xb6, 0x2a, 0xcd, 0xea, 0x61, 0x1d, 0xcf, + 0x03, 0xe8, 0x4b, 0x30, 0x05, 0x9d, 0x70, 0x49, 0xdd, 0xb3, 0xf4, 0x3c, 0xb6, 0xaa, 0x4d, 0xe3, + 0xd0, 0x6c, 0xbf, 0x6b, 0xff, 0x7b, 0xa1, 0x6d, 0xac, 0xe0, 0xfd, 0xf4, 0x3c, 0xee, 0xad, 0x61, + 0x10, 0xb3, 0x1d, 0x7a, 0x1f, 0x20, 0xe0, 0x1e, 0x09, 0x0a, 0xe6, 0x75, 0xc5, 0x7c, 0x47, 0x33, + 0x93, 0x88, 0xd9, 0xd3, 0xb6, 0x9d, 0x0b, 0x6f, 0x3f, 0x22, 0x92, 0x7c, 0xc2, 0x13, 0xe1, 0xd1, + 0xde, 0x1a, 0xae, 0x2b, 0x88, 0xc2, 0x5b, 0xb0, 0x31, 0xe2, 0x22, 0x25, 0xc2, 0xb7, 0x6a, 0x4d, + 0xe3, 0x70, 0x13, 0x97, 0x5b, 0xf4, 0x05, 0x6c, 0x8d, 0x04, 0x9f, 0xb8, 0x63, 0x4a, 0x7c, 0x2a, + 0x62, 0xeb, 0x5a, 0xb3, 0x7a, 0x68, 0xb6, 0xef, 0xad, 0x72, 0xea, 0x7e, 0x2a, 0x7b, 0x0a, 0x8d, + 0xcd, 0x9c, 0xaa, 0x58, 0xc7, 0xe8, 0x75, 0x50, 0x5b, 0x37, 0x22, 0x82, 0x4c, 0x62, 0x6b, 0x43, + 0xc9, 0x05, 0x79, 0x68, 0xa8, 0x22, 0xe8, 0x1d, 0xd8, 0xd7, 0xa7, 0x70, 0x23, 0x92, 0x05, 0x9c, + 0xf8, 0xfa, 0x14, 0xd6, 0x66, 0xfe, 0x07, 0xe0, 0x5d, 0x9d, 0x1d, 0x16, 0xc9, 0x82, 0x17, 0xd9, + 0xf0, 0x4a, 0x59, 0xcd, 0x42, 0x77, 0x42, 0x25, 0xf1, 0x89, 0x24, 0x56, 0x5d, 0x41, 0x6e, 0xea, + 0xd4, 0x87, 0xe1, 0x40, 0x27, 0xba, 0x0d, 0xd8, 0xcb, 0x45, 0x73, 0x63, 0x25, 0x8b, 0x1b, 0x47, + 0xd4, 0x63, 0x23, 0x46, 0x05, 0xaa, 0xfd, 0xfc, 0xfc, 0x59, 0xd5, 0x68, 0x7d, 0x6f, 0x00, 0xcc, + 0x75, 0x47, 0xf7, 0x60, 0xb3, 0x74, 0xaf, 0xf2, 0x81, 0xd9, 0x3e, 0x58, 0xa2, 0x73, 0x4f, 0xca, + 0xe8, 0x53, 0xc1, 0xf0, 0xc6, 0xb8, 0x58, 0xa0, 0x23, 0xd8, 0xf1, 0x88, 0x37, 0xa6, 0x6e, 0x69, + 0x5d, 0xab, 0xa2, 0xc0, 0xaf, 0xda, 0x85, 0x3d, 0xed, 0xd2, 0x9e, 0xf6, 0x23, 0x5d, 0x80, 0xb7, + 0x15, 0xa0, 0xdc, 0xb6, 0x06, 0x50, 0x9f, 0x09, 0x89, 0xee, 0xc0, 0x7a, 0x48, 0x26, 0xf4, 0xaa, + 0x13, 0x55, 0x18, 0xdd, 0x85, 0xad, 0x29, 0x09, 0x12, 0xea, 0x46, 0x82, 0x8e, 0xd8, 0x53, 0xd5, + 0xab, 0x8e, 0x4d, 0x15, 0x1b, 0xaa, 0x50, 0xeb, 0x2b, 0xd8, 0x2b, 0x9d, 0xfd, 0x39, 0x93, 0xe3, + 0xce, 0xcc, 0xa5, 0x6f, 0xc0, 0x76, 0xa4, 0x13, 0xee, 0xbc, 0x07, 0xde, 0x2a, 0x83, 0x1f, 0xe5, + 0x0d, 0xfe, 0xd1, 0xe8, 0xad, 0x3f, 0xab, 0xb0, 0xd3, 0x4f, 0x25, 0xa6, 0x5f, 0x27, 0x4c, 0xd0, + 0x09, 0x0d, 0x25, 0x7a, 0x73, 0x29, 0x6b, 0x6f, 0xed, 0x05, 0xde, 0x0c, 0xf6, 0x67, 0x65, 0x24, + 0xf4, 0xdd, 0xcb, 0x4d, 0x72, 0xb9, 0x3a, 0xab, 0xf8, 0x6e, 0xe9, 0xfd, 0x7a, 0x6b, 0x78, 0xb7, + 0x6c, 0xd1, 0x09, 0xfd, 0xf9, 0xbd, 0x29, 0x6c, 0x89, 0xe2, 0xc0, 0xb1, 0x4b, 0xc2, 0x4c, 0x3f, + 0xcf, 0xa3, 0x15, 0x8d, 0x7e, 0xe9, 0xce, 0xc7, 0xe2, 0x09, 0x8b, 0x65, 0x6f, 0x0d, 0x9b, 0x25, + 0x6f, 0x27, 0xcc, 0xd0, 0xe8, 0x72, 0x9b, 0x20, 0xd0, 0x6f, 0xb5, 0xf3, 0xf2, 0x6d, 0x3a, 0xa1, + 0x7f, 0xa5, 0x4f, 0x10, 0xa0, 0x63, 0xb8, 0x45, 0x82, 0x80, 0xa7, 0xee, 0x84, 0xc5, 0x31, 0x0b, + 0x4f, 0x5d, 0x2e, 0xdc, 0x11, 0x61, 0x01, 0x2d, 0x5e, 0xb8, 0xd9, 0xde, 0xbf, 0xe2, 0xbc, 0xc7, + 0xf9, 0xd4, 0xcc, 0xf5, 0x51, 0xc0, 0x41, 0x81, 0x3b, 0x16, 0x1f, 0x28, 0x54, 0xf7, 0x3a, 0x6c, + 0xcf, 0x0e, 0x2e, 0xb3, 0x88, 0xb6, 0xbe, 0x31, 0x60, 0x77, 0xd9, 0x8d, 0xd1, 0xd9, 0xec, 0x8a, + 0x79, 0x30, 0xb6, 0x0c, 0x35, 0x32, 0x1e, 0xbe, 0xfc, 0x15, 0xbb, 0x90, 0x1b, 0xbc, 0xf6, 0xa3, + 0x51, 0xd9, 0xac, 0xe0, 0x05, 0xee, 0xd6, 0xb7, 0x06, 0xec, 0x2d, 0xd5, 0xe3, 0x7f, 0x3d, 0xc5, + 0x4f, 0x06, 0x5c, 0xbf, 0x54, 0x89, 0x93, 0x80, 0xa2, 0x23, 0xa8, 0x4d, 0x88, 0xf4, 0xc6, 0x7a, + 0x4a, 0x34, 0x16, 0xa7, 0x44, 0xf1, 0x79, 0xc3, 0xf9, 0xef, 0x20, 0xaf, 0xd2, 0xe4, 0x3f, 0x18, + 0x95, 0x1b, 0x06, 0x2e, 0x80, 0xe8, 0x33, 0xd8, 0x2c, 0x15, 0xd7, 0xf6, 0xff, 0x0f, 0xa7, 0xc7, + 0x33, 0xae, 0xd6, 0x6f, 0x15, 0xb8, 0xd9, 0x4f, 0x65, 0x27, 0x91, 0x63, 0x1a, 0x4a, 0xe6, 0xa9, + 0xf9, 0x82, 0xce, 0xa0, 0x5e, 0xbe, 0x8b, 0x52, 0xac, 0x27, 0x2b, 0xb6, 0x5b, 0x64, 0x9c, 0xbd, + 0xbf, 0xf8, 0x71, 0x28, 0x45, 0x86, 0xe7, 0xf4, 0xe8, 0x63, 0xa8, 0x89, 0x24, 0xd0, 0xa3, 0xc3, + 0x6c, 0xbf, 0xb7, 0xda, 0x37, 0x70, 0x41, 0x67, 0x5c, 0x30, 0x1d, 0x24, 0xb0, 0xb3, 0xd8, 0x0f, + 0xdd, 0x80, 0xea, 0x39, 0xcd, 0xf4, 0xf8, 0xca, 0x97, 0x68, 0x00, 0x35, 0x35, 0x02, 0xb5, 0x9a, + 0xf7, 0x57, 0xbc, 0x5e, 0xc9, 0x8f, 0x0b, 0x96, 0x87, 0x95, 0x07, 0x46, 0xb7, 0xf7, 0xeb, 0x45, + 0xc3, 0xf8, 0xfd, 0xa2, 0x61, 0xfc, 0x71, 0xd1, 0x30, 0xe0, 0x01, 0xe3, 0x05, 0x67, 0x24, 0xf8, + 0xd3, 0x6c, 0x05, 0xfa, 0xa1, 0x71, 0x72, 0x4d, 0xbd, 0xc3, 0xb7, 0xff, 0x0a, 0x00, 0x00, 0xff, + 0xff, 0x21, 0x63, 0x39, 0x1d, 0xb2, 0x09, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/lua/v2/lua.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/lua/v2/lua.pb.go index 2fed499507c3..469285dd0f5d 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/lua/v2/lua.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/lua/v2/lua.pb.go @@ -36,7 +36,7 @@ func (m *Lua) Reset() { *m = Lua{} } func (m *Lua) String() string { return proto.CompactTextString(m) } func (*Lua) ProtoMessage() {} func (*Lua) Descriptor() ([]byte, []int) { - return fileDescriptor_lua_d440a831cdbd0d7e, []int{0} + return fileDescriptor_lua_5784e9266841da64, []int{0} } func (m *Lua) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -326,11 +326,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/lua/v2/lua.proto", fileDescriptor_lua_d440a831cdbd0d7e) + proto.RegisterFile("envoy/config/filter/http/lua/v2/lua.proto", fileDescriptor_lua_5784e9266841da64) } -var fileDescriptor_lua_d440a831cdbd0d7e = []byte{ - // 169 bytes of a gzipped FileDescriptorProto +var fileDescriptor_lua_5784e9266841da64 = []byte{ + // 186 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4c, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2, 0xcf, 0x28, 0x29, 0x29, 0xd0, 0xcf, 0x29, 0x4d, 0xd4, 0x2f, 0x33, 0x02, 0x51, 0x7a, 0x05, 0x45, @@ -339,7 +339,8 @@ var fileDescriptor_lua_d440a831cdbd0d7e = []byte{ 0x30, 0x06, 0x44, 0xa7, 0x92, 0x21, 0x17, 0xb3, 0x4f, 0x69, 0xa2, 0x90, 0x16, 0x17, 0x77, 0x66, 0x5e, 0x4e, 0x66, 0x5e, 0x6a, 0x7c, 0x72, 0x7e, 0x4a, 0xaa, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xa7, 0x13, 0xe7, 0xae, 0x97, 0x07, 0x98, 0x59, 0x8a, 0x98, 0x14, 0x18, 0x83, 0xb8, 0x20, 0xb2, 0xce, - 0xf9, 0x29, 0xa9, 0x4e, 0x02, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, - 0x1c, 0x63, 0x14, 0x53, 0x99, 0x51, 0x12, 0x1b, 0xd8, 0x2c, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xb5, 0xc7, 0xd7, 0x9f, 0xb2, 0x00, 0x00, 0x00, + 0xf9, 0x29, 0xa9, 0x4e, 0x8e, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, + 0x1c, 0x23, 0x97, 0x6e, 0x66, 0xbe, 0x1e, 0xd8, 0xf6, 0x82, 0xa2, 0xfc, 0x8a, 0x4a, 0x3d, 0x02, + 0x0e, 0x09, 0x60, 0x8c, 0x62, 0x2a, 0x33, 0x4a, 0x62, 0x03, 0x5b, 0x6e, 0x0c, 0x08, 0x00, 0x00, + 0xff, 0xff, 0x9c, 0xdc, 0x76, 0x3f, 0xe3, 0x00, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/rate_limit/v2/rate_limit.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/rate_limit/v2/rate_limit.pb.go index 68f33209623a..99b1e40c83e8 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/rate_limit/v2/rate_limit.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/rate_limit/v2/rate_limit.pb.go @@ -73,7 +73,7 @@ func (m *RateLimit) Reset() { *m = RateLimit{} } func (m *RateLimit) String() string { return proto.CompactTextString(m) } func (*RateLimit) ProtoMessage() {} func (*RateLimit) Descriptor() ([]byte, []int) { - return fileDescriptor_rate_limit_7112b13c581a9c70, []int{0} + return fileDescriptor_rate_limit_f3dbab89a6bbcf05, []int{0} } func (m *RateLimit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -631,35 +631,36 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/rate_limit/v2/rate_limit.proto", fileDescriptor_rate_limit_7112b13c581a9c70) + proto.RegisterFile("envoy/config/filter/http/rate_limit/v2/rate_limit.proto", fileDescriptor_rate_limit_f3dbab89a6bbcf05) } -var fileDescriptor_rate_limit_7112b13c581a9c70 = []byte{ - // 413 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x51, 0xbf, 0x6e, 0x13, 0x31, - 0x18, 0x97, 0x93, 0x34, 0x25, 0x2e, 0x88, 0x62, 0x21, 0x61, 0x3a, 0x5c, 0xaf, 0x45, 0x42, 0x51, - 0x07, 0x5b, 0x1c, 0x03, 0x62, 0x24, 0x94, 0x05, 0xc1, 0x62, 0x98, 0x58, 0x2c, 0x37, 0xfe, 0x72, - 0xb5, 0x74, 0x39, 0x07, 0xdb, 0x77, 0xe2, 0x5e, 0x80, 0x67, 0xe0, 0x59, 0x98, 0x18, 0x19, 0x79, - 0x03, 0x50, 0x36, 0xde, 0x02, 0xdd, 0x9d, 0xaf, 0x69, 0xd8, 0x3e, 0xff, 0xfe, 0xd9, 0xdf, 0xcf, - 0xf8, 0x05, 0x94, 0xb5, 0x6d, 0xf8, 0xd2, 0x96, 0x2b, 0x93, 0xf3, 0x95, 0x29, 0x02, 0x38, 0x7e, - 0x1d, 0xc2, 0x86, 0x3b, 0x15, 0x40, 0x16, 0x66, 0x6d, 0x02, 0xaf, 0xb3, 0x5b, 0x27, 0xb6, 0x71, - 0x36, 0x58, 0xf2, 0xb4, 0x33, 0xb2, 0xde, 0xc8, 0x7a, 0x23, 0x6b, 0x8d, 0xec, 0x96, 0xb4, 0xce, - 0x4e, 0x9e, 0xec, 0x5d, 0xd0, 0x72, 0xbb, 0xcc, 0xc2, 0xf7, 0x61, 0x27, 0x49, 0x6e, 0x6d, 0x5e, - 0x00, 0xef, 0x4e, 0x57, 0xd5, 0x8a, 0xeb, 0xca, 0xa9, 0x60, 0x6c, 0x19, 0xf9, 0x47, 0xb5, 0x2a, - 0x8c, 0x56, 0x01, 0xf8, 0x30, 0x44, 0xe2, 0x61, 0x6e, 0x73, 0xdb, 0x8d, 0xbc, 0x9d, 0x7a, 0xf4, - 0xfc, 0xeb, 0x18, 0xcf, 0x84, 0x0a, 0xf0, 0xae, 0xbd, 0x89, 0x9c, 0xe1, 0xa9, 0xb6, 0x6b, 0x65, - 0x4a, 0x8a, 0x52, 0x34, 0x9f, 0x2d, 0x66, 0xdf, 0xff, 0xfe, 0x18, 0x4f, 0xdc, 0x28, 0x45, 0x22, - 0x12, 0xe4, 0x14, 0x1f, 0xf8, 0xa0, 0x72, 0xa0, 0xa3, 0x14, 0xcd, 0xef, 0x45, 0xc5, 0xc5, 0x88, - 0x62, 0xd1, 0xe3, 0xe4, 0x0c, 0xdf, 0x75, 0xf0, 0xb9, 0x02, 0x1f, 0x64, 0x68, 0x36, 0x40, 0xc7, - 0x6d, 0x92, 0x38, 0x8a, 0xd8, 0xc7, 0x66, 0x03, 0xe4, 0x25, 0x3e, 0x0c, 0x66, 0x0d, 0xb6, 0x0a, - 0x74, 0x92, 0xa2, 0xf9, 0x51, 0xf6, 0x98, 0xf5, 0x5b, 0xb1, 0x61, 0x2b, 0x76, 0x19, 0xb7, 0x5a, - 0x4c, 0xbe, 0xfd, 0x3e, 0x45, 0x62, 0xd0, 0x93, 0x0b, 0xfc, 0x60, 0xa5, 0x4c, 0x51, 0x39, 0x90, - 0x6b, 0xab, 0x41, 0x6a, 0x28, 0x1b, 0x7a, 0x90, 0xa2, 0xf9, 0x1d, 0x71, 0x3f, 0x12, 0xef, 0xad, - 0x86, 0x4b, 0x28, 0x1b, 0xf2, 0x16, 0x9f, 0xef, 0x0a, 0x06, 0x2d, 0x95, 0x97, 0x0e, 0xbc, 0xad, - 0xdc, 0x12, 0x24, 0x7c, 0xb9, 0x56, 0x95, 0x0f, 0xa0, 0xe9, 0xb4, 0x33, 0x27, 0x6e, 0x28, 0x01, - 0xf4, 0x2b, 0x2f, 0xa2, 0xec, 0xcd, 0xa0, 0x22, 0x12, 0x93, 0x5d, 0x96, 0xf4, 0xe0, 0x6a, 0xb3, - 0x04, 0x7a, 0xd8, 0xbd, 0xfe, 0x19, 0xdb, 0xfb, 0xe0, 0x9b, 0x8f, 0x63, 0x75, 0xc6, 0x6e, 0xba, - 0xfd, 0xd0, 0x5b, 0x5e, 0x77, 0x1a, 0x71, 0xec, 0xfe, 0xc3, 0x17, 0xc7, 0x3f, 0xb7, 0x09, 0xfa, - 0xb5, 0x4d, 0xd0, 0x9f, 0x6d, 0x82, 0x3e, 0x8d, 0xea, 0xec, 0x6a, 0xda, 0x95, 0xf1, 0xfc, 0x5f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x3b, 0x86, 0x58, 0x3e, 0x78, 0x02, 0x00, 0x00, +var fileDescriptor_rate_limit_f3dbab89a6bbcf05 = []byte{ + // 430 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcf, 0x6e, 0xd3, 0x30, + 0x18, 0x97, 0xdb, 0xae, 0xa3, 0x1e, 0x08, 0xb0, 0x90, 0x08, 0x3b, 0x64, 0xd9, 0x90, 0x50, 0xb5, + 0x83, 0x2d, 0x02, 0x12, 0xe2, 0x48, 0x19, 0x12, 0x42, 0x20, 0xa1, 0xc0, 0x89, 0x8b, 0xe5, 0xd5, + 0x5f, 0x33, 0x4b, 0x69, 0xbe, 0xe0, 0x38, 0xd1, 0xf2, 0x02, 0x3c, 0x03, 0xcf, 0xc2, 0x89, 0x23, + 0x47, 0xde, 0x00, 0xd4, 0x1b, 0x6f, 0x81, 0x92, 0x38, 0xeb, 0xca, 0x89, 0xdb, 0xe7, 0xdf, 0x3f, + 0xe7, 0xfb, 0x39, 0xf4, 0x19, 0xe4, 0x35, 0x36, 0x62, 0x89, 0xf9, 0xca, 0xa4, 0x62, 0x65, 0x32, + 0x07, 0x56, 0x5c, 0x38, 0x57, 0x08, 0xab, 0x1c, 0xc8, 0xcc, 0xac, 0x8d, 0x13, 0x75, 0x7c, 0xed, + 0xc4, 0x0b, 0x8b, 0x0e, 0xd9, 0xa3, 0xce, 0xc8, 0x7b, 0x23, 0xef, 0x8d, 0xbc, 0x35, 0xf2, 0x6b, + 0xd2, 0x3a, 0x3e, 0x7c, 0xb8, 0x73, 0x41, 0xcb, 0x6d, 0x33, 0xb3, 0xb2, 0x0f, 0x3b, 0x0c, 0x53, + 0xc4, 0x34, 0x03, 0xd1, 0x9d, 0xce, 0xab, 0x95, 0xd0, 0x95, 0x55, 0xce, 0x60, 0xee, 0xf9, 0xfb, + 0xb5, 0xca, 0x8c, 0x56, 0x0e, 0xc4, 0x30, 0x78, 0xe2, 0x5e, 0x8a, 0x29, 0x76, 0xa3, 0x68, 0xa7, + 0x1e, 0x3d, 0xf9, 0x32, 0xa6, 0xb3, 0x44, 0x39, 0x78, 0xdb, 0xde, 0xc4, 0x8e, 0xe9, 0x54, 0xe3, + 0x5a, 0x99, 0x3c, 0x20, 0x11, 0x99, 0xcf, 0x16, 0xb3, 0x6f, 0x7f, 0xbe, 0x8f, 0x27, 0x76, 0x14, + 0x91, 0xc4, 0x13, 0xec, 0x88, 0xee, 0x95, 0x4e, 0xa5, 0x10, 0x8c, 0x22, 0x32, 0xbf, 0xe5, 0x15, + 0xa7, 0xa3, 0x80, 0x26, 0x3d, 0xce, 0x8e, 0xe9, 0x4d, 0x0b, 0x9f, 0x2b, 0x28, 0x9d, 0x74, 0x4d, + 0x01, 0xc1, 0xb8, 0x4d, 0x4a, 0x0e, 0x3c, 0xf6, 0xb1, 0x29, 0x80, 0x3d, 0xa7, 0xfb, 0xce, 0xac, + 0x01, 0x2b, 0x17, 0x4c, 0x22, 0x32, 0x3f, 0x88, 0x1f, 0xf0, 0x7e, 0x2b, 0x3e, 0x6c, 0xc5, 0xcf, + 0xfc, 0x56, 0x8b, 0xc9, 0xd7, 0x5f, 0x47, 0x24, 0x19, 0xf4, 0xec, 0x94, 0xde, 0x5d, 0x29, 0x93, + 0x55, 0x16, 0xe4, 0x1a, 0x35, 0x48, 0x0d, 0x79, 0x13, 0xec, 0x45, 0x64, 0x7e, 0x23, 0xb9, 0xed, + 0x89, 0x77, 0xa8, 0xe1, 0x0c, 0xf2, 0x86, 0xbd, 0xa1, 0x27, 0xdb, 0x82, 0x41, 0x4b, 0x55, 0x4a, + 0x0b, 0x25, 0x56, 0x76, 0x09, 0x12, 0x2e, 0x2f, 0x54, 0x55, 0x3a, 0xd0, 0xc1, 0xb4, 0x33, 0x87, + 0x76, 0x28, 0x01, 0xf4, 0x8b, 0x32, 0xf1, 0xb2, 0x57, 0x83, 0x8a, 0x49, 0xca, 0xb6, 0x59, 0xb2, + 0x04, 0x5b, 0x9b, 0x25, 0x04, 0xfb, 0xdd, 0xd7, 0x3f, 0xe6, 0x3b, 0x0f, 0x7c, 0xf5, 0x70, 0xbc, + 0x8e, 0xf9, 0x55, 0xb7, 0x1f, 0x7a, 0xcb, 0xcb, 0x4e, 0x93, 0xdc, 0xb1, 0xff, 0xe0, 0x8b, 0xd7, + 0x3f, 0x36, 0x21, 0xf9, 0xb9, 0x09, 0xc9, 0xef, 0x4d, 0x48, 0xe8, 0x53, 0x83, 0x7d, 0x68, 0x61, + 0xf1, 0xb2, 0xe1, 0xff, 0xf7, 0x03, 0xbd, 0x27, 0x9f, 0x46, 0x75, 0x7c, 0x3e, 0xed, 0x4a, 0x7c, + 0xf2, 0x37, 0x00, 0x00, 0xff, 0xff, 0xa5, 0x9e, 0x33, 0x6b, 0xb0, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/rbac/v2/rbac.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/rbac/v2/rbac.pb.go index 672183c74006..b6d431e813a8 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/rbac/v2/rbac.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/rbac/v2/rbac.pb.go @@ -41,7 +41,7 @@ func (m *RBAC) Reset() { *m = RBAC{} } func (m *RBAC) String() string { return proto.CompactTextString(m) } func (*RBAC) ProtoMessage() {} func (*RBAC) Descriptor() ([]byte, []int) { - return fileDescriptor_rbac_1ed01f9721ca3f08, []int{0} + return fileDescriptor_rbac_da48957dcb6c4c47, []int{0} } func (m *RBAC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -97,7 +97,7 @@ func (m *RBACPerRoute) Reset() { *m = RBACPerRoute{} } func (m *RBACPerRoute) String() string { return proto.CompactTextString(m) } func (*RBACPerRoute) ProtoMessage() {} func (*RBACPerRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_rbac_1ed01f9721ca3f08, []int{1} + return fileDescriptor_rbac_da48957dcb6c4c47, []int{1} } func (m *RBACPerRoute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -574,25 +574,26 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/rbac/v2/rbac.proto", fileDescriptor_rbac_1ed01f9721ca3f08) + proto.RegisterFile("envoy/config/filter/http/rbac/v2/rbac.proto", fileDescriptor_rbac_da48957dcb6c4c47) } -var fileDescriptor_rbac_1ed01f9721ca3f08 = []byte{ - // 256 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4e, 0xcd, 0x2b, 0xcb, - 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2, - 0xcf, 0x28, 0x29, 0x29, 0xd0, 0x2f, 0x4a, 0x4a, 0x4c, 0xd6, 0x2f, 0x33, 0x02, 0xd3, 0x7a, 0x05, - 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x0a, 0x60, 0xc5, 0x7a, 0x10, 0xc5, 0x7a, 0x10, 0xc5, 0x7a, 0x20, - 0xc5, 0x7a, 0x60, 0x45, 0x65, 0x46, 0x52, 0x2a, 0x28, 0xc6, 0x41, 0x8d, 0x48, 0xcc, 0x29, 0xc8, - 0x48, 0x44, 0x32, 0x47, 0x4a, 0xbc, 0x2c, 0x31, 0x27, 0x33, 0x25, 0xb1, 0x24, 0x55, 0x1f, 0xc6, - 0x80, 0x4a, 0x88, 0xa4, 0xe7, 0xa7, 0xe7, 0x83, 0x99, 0xfa, 0x20, 0x16, 0x44, 0x54, 0xa9, 0x91, - 0x91, 0x8b, 0x25, 0xc8, 0xc9, 0xd1, 0x59, 0xc8, 0x94, 0x8b, 0xb5, 0xa8, 0x34, 0x27, 0xb5, 0x58, - 0x82, 0x51, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x5e, 0x0f, 0xc5, 0x3d, 0x50, 0x37, 0x80, 0x6d, 0xd3, - 0x03, 0xa9, 0x0f, 0x82, 0xa8, 0x16, 0x72, 0xe2, 0xe2, 0x29, 0xce, 0x48, 0x4c, 0xc9, 0x2f, 0x8f, - 0x87, 0xe8, 0x66, 0x22, 0x4e, 0x37, 0x37, 0x44, 0x53, 0x10, 0x48, 0x8f, 0x52, 0x14, 0x17, 0x0f, - 0x48, 0x30, 0x20, 0xb5, 0x28, 0x28, 0xbf, 0xb4, 0x24, 0x55, 0xc8, 0x8a, 0x8b, 0x05, 0xa4, 0x03, - 0x6a, 0x96, 0x9a, 0x1e, 0xa1, 0x90, 0x81, 0x18, 0x09, 0xd6, 0xe3, 0xc5, 0xc2, 0xc1, 0x28, 0xc0, - 0x14, 0xc4, 0x91, 0x92, 0x59, 0x9c, 0x98, 0x94, 0x93, 0x9a, 0xe2, 0x24, 0x70, 0xe2, 0x91, 0x1c, - 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x46, 0x31, 0x95, 0x19, 0x25, 0xb1, 0x81, - 0x3d, 0x6e, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x88, 0x0d, 0x12, 0x94, 0x9e, 0x01, 0x00, 0x00, +var fileDescriptor_rbac_da48957dcb6c4c47 = []byte{ + // 271 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x41, 0x4b, 0xc3, 0x30, + 0x14, 0xc7, 0xc9, 0xa8, 0x32, 0xb2, 0x1d, 0xa4, 0x08, 0xca, 0x0e, 0x75, 0x0c, 0x11, 0x41, 0x78, + 0x81, 0x8a, 0x17, 0x6f, 0xd6, 0x9b, 0xa7, 0x91, 0xe3, 0x2e, 0x92, 0xae, 0x59, 0x1b, 0x08, 0x7b, + 0x25, 0xcd, 0xa2, 0x3b, 0xfa, 0xed, 0x3c, 0xfa, 0x11, 0xa4, 0x9f, 0x44, 0x92, 0x54, 0x70, 0xa7, + 0x79, 0xea, 0x9f, 0xd7, 0xdf, 0xff, 0x97, 0xc7, 0xa3, 0x77, 0x72, 0xeb, 0x70, 0xcf, 0xd6, 0xb8, + 0xdd, 0xa8, 0x9a, 0x6d, 0x94, 0xb6, 0xd2, 0xb0, 0xc6, 0xda, 0x96, 0x99, 0x52, 0xac, 0x99, 0xcb, + 0xc3, 0x17, 0x5a, 0x83, 0x16, 0xd3, 0x79, 0x80, 0x21, 0xc2, 0x10, 0x61, 0xf0, 0x30, 0x04, 0xc8, + 0xe5, 0xb3, 0xeb, 0x03, 0xdd, 0xa0, 0x10, 0xba, 0x6d, 0xc4, 0x1f, 0xcf, 0xec, 0xc2, 0x09, 0xad, + 0x2a, 0x61, 0x25, 0xfb, 0x0d, 0xc3, 0x8f, 0xf3, 0x1a, 0x6b, 0x0c, 0x91, 0xf9, 0x14, 0xa7, 0x8b, + 0x0f, 0x42, 0x13, 0x5e, 0x3c, 0x3d, 0xa7, 0x0f, 0xf4, 0xc4, 0xec, 0xb4, 0xec, 0x2e, 0xc9, 0x9c, + 0xdc, 0x4e, 0xf2, 0x2b, 0x38, 0xd8, 0x67, 0xd8, 0x21, 0xbc, 0x06, 0x9e, 0xe7, 0x91, 0x4e, 0x0b, + 0x3a, 0xed, 0x1a, 0x51, 0xe1, 0xdb, 0x6b, 0x6c, 0x8f, 0xfe, 0xd7, 0x9e, 0xc4, 0x12, 0xf7, 0x9d, + 0xc5, 0x8a, 0x4e, 0xfd, 0x70, 0x29, 0x0d, 0xc7, 0x9d, 0x95, 0xe9, 0x23, 0x4d, 0x7c, 0x63, 0x70, + 0xdd, 0xc0, 0xb1, 0xcb, 0x44, 0x65, 0xe8, 0xbc, 0x24, 0x63, 0x72, 0x36, 0xe2, 0xe3, 0x4a, 0x75, + 0xa2, 0xd4, 0xb2, 0x2a, 0x8a, 0xcf, 0x3e, 0x23, 0x5f, 0x7d, 0x46, 0xbe, 0xfb, 0x8c, 0x50, 0x50, + 0x18, 0x6d, 0xad, 0xc1, 0xf7, 0xfd, 0x51, 0xf1, 0x92, 0xac, 0x46, 0x2e, 0x2f, 0x4f, 0xc3, 0xa9, + 0xee, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x92, 0x41, 0x9c, 0xd7, 0xd0, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/router/v2/router.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/router/v2/router.pb.go index b0ed43fee05d..2c2f67d597dd 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/router/v2/router.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/router/v2/router.pb.go @@ -50,7 +50,7 @@ func (m *Router) Reset() { *m = Router{} } func (m *Router) String() string { return proto.CompactTextString(m) } func (*Router) ProtoMessage() {} func (*Router) Descriptor() ([]byte, []int) { - return fileDescriptor_router_d2a1bd378dea8e6b, []int{0} + return fileDescriptor_router_822295bdbc4788d1, []int{0} } func (m *Router) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -484,29 +484,30 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/router/v2/router.proto", fileDescriptor_router_d2a1bd378dea8e6b) + proto.RegisterFile("envoy/config/filter/http/router/v2/router.proto", fileDescriptor_router_822295bdbc4788d1) } -var fileDescriptor_router_d2a1bd378dea8e6b = []byte{ - // 311 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x41, 0x4b, 0xc3, 0x30, - 0x14, 0xc7, 0xc9, 0x26, 0x43, 0xba, 0x29, 0xa3, 0x88, 0x94, 0x1d, 0xca, 0xd8, 0xa9, 0x20, 0x24, - 0x52, 0xbd, 0x8b, 0x13, 0xc1, 0xc3, 0xf0, 0xd0, 0x81, 0x07, 0x2f, 0x25, 0xeb, 0xb2, 0xac, 0x90, - 0xf5, 0x85, 0xbc, 0xb4, 0xb2, 0x6f, 0xe8, 0xd1, 0x8f, 0x20, 0xfb, 0x16, 0xde, 0xa4, 0xc9, 0xaa, - 0x97, 0xdd, 0xde, 0x7b, 0xff, 0xf7, 0xfb, 0x85, 0x97, 0x80, 0x89, 0xaa, 0x81, 0x3d, 0x2b, 0xa0, - 0xda, 0x94, 0x92, 0x6d, 0x4a, 0x65, 0x85, 0x61, 0x5b, 0x6b, 0x35, 0x33, 0x50, 0xb7, 0x75, 0x93, - 0x1e, 0x2b, 0xaa, 0x0d, 0x58, 0x08, 0x67, 0x0e, 0xa0, 0x1e, 0xa0, 0x1e, 0xa0, 0x2d, 0x40, 0x8f, - 0x6b, 0x4d, 0x3a, 0xb9, 0x3d, 0x25, 0xe5, 0x45, 0x21, 0x10, 0x15, 0xc8, 0x56, 0xf9, 0xd7, 0x78, - 0xeb, 0x24, 0x96, 0x00, 0x52, 0x09, 0xe6, 0xba, 0x55, 0xbd, 0x61, 0x1f, 0x86, 0x6b, 0x2d, 0x0c, - 0xfa, 0x7c, 0xf6, 0x43, 0x82, 0x41, 0xe6, 0xfc, 0xe1, 0x43, 0x70, 0xb1, 0xde, 0x57, 0x7c, 0x57, - 0x16, 0x39, 0x5a, 0x6e, 0x31, 0x22, 0x53, 0x92, 0x0c, 0xd3, 0x09, 0xf5, 0x0a, 0xda, 0x29, 0xe8, - 0x1c, 0x40, 0xbd, 0x71, 0x55, 0x8b, 0x6c, 0x74, 0x04, 0x96, 0xed, 0x7e, 0x98, 0x04, 0x63, 0xb4, - 0xdc, 0xd8, 0xbc, 0xd8, 0x96, 0x6a, 0x9d, 0xa3, 0xe6, 0x55, 0xd4, 0x9b, 0x92, 0xe4, 0x3c, 0xbb, - 0x74, 0xf3, 0xa7, 0x76, 0xbc, 0xd4, 0xbc, 0x0a, 0x5f, 0x83, 0x51, 0xad, 0xd1, 0x1a, 0xc1, 0x77, - 0xb9, 0x02, 0x19, 0xf5, 0xa7, 0xfd, 0x64, 0x98, 0xde, 0xd0, 0x53, 0x5f, 0xf0, 0x7f, 0x51, 0x93, - 0xd2, 0x47, 0xd7, 0x2c, 0x40, 0x66, 0xc3, 0x4e, 0xb0, 0x00, 0x19, 0xde, 0x07, 0xd7, 0x58, 0x6b, - 0x6d, 0x04, 0x62, 0xee, 0x1c, 0xf9, 0x56, 0xf0, 0xb5, 0x30, 0x18, 0x9d, 0xb9, 0xf7, 0xaf, 0xba, - 0xf4, 0xb9, 0x0d, 0x5f, 0x7c, 0x36, 0x1f, 0x7f, 0x1e, 0x62, 0xf2, 0x75, 0x88, 0xc9, 0xf7, 0x21, - 0x26, 0xef, 0xbd, 0x26, 0x5d, 0x0d, 0xdc, 0x8d, 0x77, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7d, - 0x03, 0x0e, 0xd6, 0xbd, 0x01, 0x00, 0x00, +var fileDescriptor_router_822295bdbc4788d1 = []byte{ + // 326 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x41, 0x4b, 0xc3, 0x30, + 0x14, 0xc7, 0xc9, 0x26, 0x43, 0xb2, 0x29, 0x52, 0x44, 0xca, 0x0e, 0x65, 0xec, 0x54, 0x10, 0x92, + 0x51, 0xbd, 0x8b, 0x53, 0xc1, 0xc3, 0x10, 0xe9, 0xc0, 0x83, 0x97, 0x92, 0x75, 0x59, 0x56, 0xc8, + 0xfa, 0x42, 0x92, 0x56, 0xf7, 0x0d, 0x3d, 0xfa, 0x11, 0x64, 0xdf, 0xc2, 0x9b, 0x34, 0x59, 0xf5, + 0x32, 0xf0, 0xf6, 0xfe, 0xef, 0xff, 0xfe, 0xbf, 0x47, 0x5e, 0x30, 0xe5, 0x65, 0x0d, 0x5b, 0x9a, + 0x43, 0xb9, 0x2a, 0x04, 0x5d, 0x15, 0xd2, 0x72, 0x4d, 0xd7, 0xd6, 0x2a, 0xaa, 0xa1, 0x6a, 0xea, + 0x3a, 0xd9, 0x57, 0x44, 0x69, 0xb0, 0x10, 0x8c, 0x5d, 0x80, 0xf8, 0x00, 0xf1, 0x01, 0xd2, 0x04, + 0xc8, 0x7e, 0xac, 0x4e, 0x86, 0x93, 0x43, 0x50, 0x96, 0xe7, 0xdc, 0x18, 0x09, 0xa2, 0x41, 0xfe, + 0x0a, 0x4f, 0x1d, 0x46, 0x02, 0x40, 0x48, 0x4e, 0x9d, 0x5a, 0x54, 0x2b, 0xfa, 0xa6, 0x99, 0x52, + 0x5c, 0x1b, 0xef, 0x8f, 0xbf, 0x11, 0xee, 0xa5, 0x8e, 0x1f, 0xdc, 0xe0, 0x93, 0xe5, 0xb6, 0x64, + 0x9b, 0x22, 0xcf, 0x8c, 0x65, 0xd6, 0x84, 0x68, 0x84, 0xe2, 0x7e, 0x32, 0x24, 0x1e, 0x41, 0x5a, + 0x04, 0x99, 0x02, 0xc8, 0x17, 0x26, 0x2b, 0x9e, 0x0e, 0xf6, 0x81, 0x79, 0x33, 0x1f, 0xc4, 0xf8, + 0xcc, 0x58, 0xa6, 0x6d, 0x96, 0xaf, 0x0b, 0xb9, 0xcc, 0x8c, 0x62, 0x65, 0xd8, 0x19, 0xa1, 0xf8, + 0x38, 0x3d, 0x75, 0xfd, 0xbb, 0xa6, 0x3d, 0x57, 0xac, 0x0c, 0x9e, 0xf0, 0xa0, 0x52, 0xc6, 0x6a, + 0xce, 0x36, 0x99, 0x04, 0x11, 0x76, 0x47, 0xdd, 0xb8, 0x9f, 0x5c, 0x92, 0x43, 0x27, 0xf8, 0x7b, + 0x51, 0x9d, 0x90, 0x5b, 0x27, 0x66, 0x20, 0xd2, 0x7e, 0x0b, 0x98, 0x81, 0x08, 0xae, 0xf1, 0x85, + 0xa9, 0x94, 0xd2, 0xdc, 0x98, 0xcc, 0x31, 0xb2, 0x35, 0x67, 0x4b, 0xae, 0x4d, 0x78, 0xe4, 0xf6, + 0x9f, 0xb7, 0xee, 0x43, 0x63, 0x3e, 0x7a, 0x6f, 0x7a, 0xff, 0xb1, 0x8b, 0xd0, 0xe7, 0x2e, 0x42, + 0x5f, 0xbb, 0x08, 0xe1, 0x49, 0x01, 0x7e, 0xbf, 0xd2, 0xf0, 0xbe, 0x25, 0xff, 0xff, 0xc6, 0x33, + 0x7a, 0xed, 0xd4, 0xc9, 0xa2, 0xe7, 0xee, 0x72, 0xf5, 0x13, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xf5, + 0x46, 0x07, 0xf1, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/squash/v2/squash.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/squash/v2/squash.pb.go index f7a8f0b9bf15..7ba717dce962 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/squash/v2/squash.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/squash/v2/squash.pb.go @@ -69,7 +69,7 @@ func (m *Squash) Reset() { *m = Squash{} } func (m *Squash) String() string { return proto.CompactTextString(m) } func (*Squash) ProtoMessage() {} func (*Squash) Descriptor() ([]byte, []int) { - return fileDescriptor_squash_1ba86d7e66db497e, []int{0} + return fileDescriptor_squash_d26906a5c9c688ea, []int{0} } func (m *Squash) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -575,31 +575,32 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/squash/v2/squash.proto", fileDescriptor_squash_1ba86d7e66db497e) + proto.RegisterFile("envoy/config/filter/http/squash/v2/squash.proto", fileDescriptor_squash_d26906a5c9c688ea) } -var fileDescriptor_squash_1ba86d7e66db497e = []byte{ - // 338 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x4f, 0x4e, 0x32, 0x31, - 0x1c, 0x86, 0xd3, 0x81, 0x8f, 0x2f, 0xd4, 0xc4, 0x3f, 0x95, 0xc8, 0x48, 0xcc, 0x48, 0x70, 0xc3, - 0xaa, 0x4d, 0xc6, 0x1b, 0x10, 0x17, 0xac, 0x0c, 0x01, 0xdc, 0xb8, 0x21, 0x65, 0x28, 0xc3, 0x24, - 0x65, 0x3a, 0x74, 0x7e, 0x9d, 0xc4, 0x9b, 0x78, 0x16, 0x57, 0x2e, 0x5d, 0x7a, 0x03, 0x0d, 0x2b, - 0xbd, 0x85, 0xa1, 0x53, 0x02, 0xd1, 0x0d, 0xbb, 0x37, 0x7d, 0xfb, 0x3c, 0x7d, 0x53, 0xcc, 0x44, - 0x5a, 0xa8, 0x27, 0x16, 0xa9, 0x74, 0x9e, 0xc4, 0x6c, 0x9e, 0x48, 0x10, 0x9a, 0x2d, 0x00, 0x32, - 0x96, 0xaf, 0x0c, 0xcf, 0x17, 0xac, 0x08, 0x5d, 0xa2, 0x99, 0x56, 0xa0, 0x48, 0xc7, 0x02, 0xb4, - 0x04, 0x68, 0x09, 0xd0, 0x0d, 0x40, 0xdd, 0xb5, 0x22, 0x6c, 0x05, 0xb1, 0x52, 0xb1, 0x14, 0xcc, - 0x12, 0x53, 0x33, 0x67, 0x33, 0xa3, 0x39, 0x24, 0x2a, 0x2d, 0x1d, 0xad, 0xab, 0xdf, 0x7d, 0x0e, - 0xda, 0x44, 0xe0, 0xda, 0x66, 0xc1, 0x65, 0x32, 0xe3, 0x20, 0xd8, 0x36, 0xb8, 0xa2, 0x11, 0xab, - 0x58, 0xd9, 0xc8, 0x36, 0xa9, 0x3c, 0xed, 0x7c, 0x79, 0xb8, 0x36, 0xb2, 0x4f, 0x93, 0x1b, 0xfc, - 0x3f, 0x92, 0x26, 0x07, 0xa1, 0x7d, 0xd4, 0x46, 0xdd, 0x7a, 0xaf, 0xfe, 0xf2, 0xfd, 0x5a, 0xa9, - 0x6a, 0xaf, 0x8d, 0x86, 0xdb, 0x86, 0xf4, 0xf1, 0x39, 0x07, 0xe0, 0xd1, 0x62, 0x29, 0x52, 0x98, - 0x80, 0x58, 0x66, 0x92, 0x83, 0xf0, 0xbd, 0x36, 0xea, 0x1e, 0x85, 0x4d, 0x5a, 0x4e, 0xa3, 0xdb, - 0x69, 0x74, 0x64, 0xa7, 0x0d, 0xc9, 0x8e, 0x19, 0x3b, 0x84, 0xf4, 0xf1, 0x89, 0x16, 0x2b, 0x23, - 0x72, 0x98, 0x40, 0xb2, 0x14, 0xca, 0x80, 0x5f, 0xb1, 0x96, 0xcb, 0x3f, 0x96, 0x3b, 0xf7, 0x01, - 0xbd, 0xea, 0xf3, 0xc7, 0x35, 0x1a, 0x1e, 0x3b, 0x6e, 0x5c, 0x62, 0xe4, 0x1e, 0x93, 0xfd, 0x4d, - 0x4e, 0x56, 0x3d, 0x4c, 0x76, 0xb6, 0x37, 0xcd, 0xf9, 0x1e, 0xf0, 0xc5, 0x9e, 0x2f, 0x53, 0x52, - 0x4e, 0x32, 0xa1, 0x13, 0x35, 0xf3, 0xff, 0x1d, 0xe6, 0x6c, 0xec, 0xf0, 0x81, 0x92, 0x72, 0x60, - 0xe1, 0xde, 0xe9, 0xdb, 0x3a, 0x40, 0xef, 0xeb, 0x00, 0x7d, 0xae, 0x03, 0xf4, 0xe8, 0x15, 0xe1, - 0xb4, 0x66, 0x05, 0xb7, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xe3, 0x62, 0x89, 0x47, 0x02, +var fileDescriptor_squash_d26906a5c9c688ea = []byte{ + // 354 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x4e, 0xf2, 0x40, + 0x18, 0x86, 0x33, 0x85, 0x9f, 0x3f, 0x8c, 0x89, 0xc6, 0x4a, 0xa4, 0x12, 0x53, 0x09, 0x6e, 0x58, + 0xcd, 0x98, 0x7a, 0x03, 0xc2, 0x82, 0x95, 0x21, 0x80, 0x1b, 0x37, 0xa4, 0x94, 0xa1, 0x34, 0x19, + 0xfa, 0x95, 0xe9, 0xd7, 0x46, 0x6e, 0xe2, 0x59, 0x5c, 0xb9, 0x74, 0xe9, 0x0d, 0x34, 0xac, 0xf4, + 0x16, 0x86, 0xe9, 0x10, 0x88, 0x2e, 0x64, 0xf7, 0xa6, 0x6f, 0x9f, 0x67, 0xde, 0x4c, 0x86, 0x72, + 0x11, 0xe7, 0xb0, 0xe2, 0x01, 0xc4, 0xb3, 0x28, 0xe4, 0xb3, 0x48, 0xa2, 0x50, 0x7c, 0x8e, 0x98, + 0xf0, 0x74, 0x99, 0xf9, 0xe9, 0x9c, 0xe7, 0x9e, 0x49, 0x2c, 0x51, 0x80, 0x60, 0xb7, 0x34, 0xc0, + 0x0a, 0x80, 0x15, 0x00, 0xdb, 0x00, 0xcc, 0xfc, 0x96, 0x7b, 0x0d, 0x37, 0x04, 0x08, 0xa5, 0xe0, + 0x9a, 0x98, 0x64, 0x33, 0x3e, 0xcd, 0x94, 0x8f, 0x11, 0xc4, 0x85, 0xa3, 0x71, 0xf9, 0xb3, 0x4f, + 0x51, 0x65, 0x01, 0x9a, 0xb6, 0x9e, 0xfb, 0x32, 0x9a, 0xfa, 0x28, 0xf8, 0x36, 0x98, 0xa2, 0x16, + 0x42, 0x08, 0x3a, 0xf2, 0x4d, 0x2a, 0xbe, 0xb6, 0x3e, 0x2d, 0x5a, 0x19, 0xea, 0xa3, 0xed, 0x6b, + 0xfa, 0x3f, 0x90, 0x59, 0x8a, 0x42, 0x39, 0xa4, 0x49, 0xda, 0xd5, 0x4e, 0xf5, 0xf9, 0xeb, 0xa5, + 0x54, 0x56, 0x56, 0x93, 0x0c, 0xb6, 0x8d, 0xdd, 0xa3, 0x67, 0x3e, 0xa2, 0x1f, 0xcc, 0x17, 0x22, + 0xc6, 0x31, 0x8a, 0x45, 0x22, 0x7d, 0x14, 0x8e, 0xd5, 0x24, 0xed, 0x23, 0xaf, 0xce, 0x8a, 0x69, + 0x6c, 0x3b, 0x8d, 0x0d, 0xf5, 0xb4, 0x81, 0xbd, 0x63, 0x46, 0x06, 0xb1, 0x7b, 0xf4, 0x44, 0x89, + 0x65, 0x26, 0x52, 0x1c, 0x63, 0xb4, 0x10, 0x90, 0xa1, 0x53, 0xd2, 0x96, 0x8b, 0x5f, 0x96, 0xae, + 0xb9, 0x80, 0x4e, 0xf9, 0xe9, 0xfd, 0x8a, 0x0c, 0x8e, 0x0d, 0x37, 0x2a, 0x30, 0xfb, 0x8e, 0xda, + 0xfb, 0x9b, 0x8c, 0xac, 0x7c, 0x98, 0xec, 0x74, 0x6f, 0x9a, 0xf1, 0xdd, 0xd3, 0xf3, 0x3d, 0x5f, + 0x02, 0x52, 0x8e, 0x13, 0xa1, 0x22, 0x98, 0x3a, 0xff, 0x0e, 0x73, 0xd6, 0x76, 0x78, 0x1f, 0xa4, + 0xec, 0x6b, 0xb8, 0xd3, 0x7d, 0x5d, 0xbb, 0xe4, 0x6d, 0xed, 0x92, 0x8f, 0xb5, 0x4b, 0xe8, 0x4d, + 0x04, 0x4c, 0x3f, 0x86, 0x44, 0xc1, 0xe3, 0x8a, 0xfd, 0xfd, 0x2e, 0xfa, 0xe4, 0xc1, 0xca, 0xbd, + 0x49, 0x45, 0x1f, 0x7a, 0xfb, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x37, 0xe1, 0x50, 0x1b, 0x7b, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/transcoder/v2/transcoder.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/transcoder/v2/transcoder.pb.go index c0d0898ec385..f9d889b43c95 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/transcoder/v2/transcoder.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/http/transcoder/v2/transcoder.pb.go @@ -75,7 +75,7 @@ func (m *GrpcJsonTranscoder) Reset() { *m = GrpcJsonTranscoder{} } func (m *GrpcJsonTranscoder) String() string { return proto.CompactTextString(m) } func (*GrpcJsonTranscoder) ProtoMessage() {} func (*GrpcJsonTranscoder) Descriptor() ([]byte, []int) { - return fileDescriptor_transcoder_06dd640878bc4dc0, []int{0} + return fileDescriptor_transcoder_07004c00c48edf58, []int{0} } func (m *GrpcJsonTranscoder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -261,7 +261,7 @@ func (m *GrpcJsonTranscoder_PrintOptions) Reset() { *m = GrpcJsonTransco func (m *GrpcJsonTranscoder_PrintOptions) String() string { return proto.CompactTextString(m) } func (*GrpcJsonTranscoder_PrintOptions) ProtoMessage() {} func (*GrpcJsonTranscoder_PrintOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_transcoder_06dd640878bc4dc0, []int{0, 0} + return fileDescriptor_transcoder_07004c00c48edf58, []int{0, 0} } func (m *GrpcJsonTranscoder_PrintOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1039,41 +1039,42 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/http/transcoder/v2/transcoder.proto", fileDescriptor_transcoder_06dd640878bc4dc0) + proto.RegisterFile("envoy/config/filter/http/transcoder/v2/transcoder.proto", fileDescriptor_transcoder_07004c00c48edf58) } -var fileDescriptor_transcoder_06dd640878bc4dc0 = []byte{ - // 500 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x41, 0x6b, 0x13, 0x41, - 0x18, 0x86, 0x3b, 0x89, 0x29, 0xdb, 0x31, 0xad, 0x65, 0x90, 0x66, 0x0d, 0x1a, 0x82, 0x60, 0x09, - 0x08, 0xbb, 0x10, 0x0f, 0x8a, 0x1e, 0xa4, 0x41, 0x6d, 0xeb, 0x41, 0xe3, 0x20, 0x08, 0x5e, 0x86, - 0xe9, 0xee, 0x97, 0x64, 0x20, 0x3b, 0x33, 0x9d, 0x99, 0x6c, 0xc9, 0xdf, 0xd0, 0x3f, 0x23, 0x9e, - 0x7a, 0xf4, 0xe8, 0x4f, 0x90, 0xdc, 0x7a, 0xf4, 0x1f, 0xc8, 0xcc, 0x36, 0x61, 0xad, 0x17, 0x6f, - 0x99, 0xbc, 0xcf, 0xfb, 0x7e, 0xfb, 0x7d, 0x2f, 0x7e, 0x0a, 0xb2, 0x54, 0xcb, 0x34, 0x53, 0x72, - 0x22, 0xa6, 0xe9, 0x44, 0xcc, 0x1d, 0x98, 0x74, 0xe6, 0x9c, 0x4e, 0x9d, 0xe1, 0xd2, 0x66, 0x2a, - 0x07, 0x93, 0x96, 0xc3, 0xda, 0x2b, 0xd1, 0x46, 0x39, 0x45, 0x0e, 0x83, 0x31, 0xa9, 0x8c, 0x49, - 0x65, 0x4c, 0xbc, 0x31, 0xa9, 0xa1, 0xe5, 0xb0, 0xdb, 0x29, 0xf9, 0x5c, 0xe4, 0xdc, 0x41, 0xba, - 0xfe, 0x51, 0x05, 0x3c, 0xfc, 0xda, 0xc2, 0xe4, 0xd8, 0xe8, 0xec, 0xad, 0x55, 0xf2, 0xe3, 0xc6, - 0x42, 0x1e, 0xe3, 0xfd, 0xa0, 0xb3, 0x1c, 0x6c, 0x66, 0x84, 0x76, 0xca, 0xc4, 0xa8, 0x8f, 0x06, - 0x3b, 0x27, 0x5b, 0xf4, 0x4e, 0x50, 0x5e, 0x6d, 0x04, 0x72, 0x88, 0x23, 0x0b, 0xa6, 0x14, 0x19, - 0xd8, 0xb8, 0xd1, 0x6f, 0x0e, 0x76, 0x46, 0xf8, 0xfb, 0xd5, 0x65, 0xb3, 0xf5, 0x05, 0x35, 0x22, - 0x44, 0x37, 0x1a, 0x99, 0xe3, 0x5d, 0x6d, 0x84, 0x74, 0x4c, 0x69, 0x27, 0x94, 0xb4, 0x71, 0xb3, - 0x8f, 0x06, 0xb7, 0x87, 0xc7, 0xc9, 0xff, 0x2d, 0x91, 0xfc, 0xfb, 0x9d, 0xc9, 0xd8, 0xe7, 0xbd, - 0xaf, 0xe2, 0x68, 0x5b, 0xd7, 0x5e, 0x64, 0x88, 0xef, 0xde, 0x5c, 0x81, 0x9d, 0x09, 0x19, 0xdf, - 0xea, 0xa3, 0x41, 0xfb, 0x64, 0x8b, 0x92, 0x1b, 0x6b, 0x8c, 0x84, 0x24, 0x2f, 0xf1, 0xfd, 0x82, - 0xbb, 0x6c, 0xc6, 0x84, 0xcc, 0x54, 0x21, 0xe4, 0x94, 0x19, 0x38, 0x5f, 0x80, 0x75, 0xcc, 0xa8, - 0x85, 0x83, 0xb8, 0xd5, 0x47, 0x83, 0x88, 0xde, 0x0b, 0xcc, 0xe9, 0x35, 0x42, 0x2b, 0x82, 0x7a, - 0x80, 0x3c, 0xc3, 0xb1, 0x98, 0x4a, 0x65, 0x20, 0x67, 0xe7, 0x0b, 0x30, 0x4b, 0xa6, 0xb9, 0xe1, - 0x05, 0x38, 0x30, 0x36, 0xde, 0xf6, 0xa7, 0xa1, 0x07, 0xd7, 0xfa, 0x07, 0x2f, 0x8f, 0x37, 0x6a, - 0xf7, 0x37, 0xc2, 0xed, 0xfa, 0x36, 0xe4, 0x11, 0xde, 0xe3, 0x79, 0xce, 0x2e, 0x66, 0xc2, 0x81, - 0xd5, 0x3c, 0x83, 0x50, 0x40, 0x44, 0x77, 0x79, 0x9e, 0x7f, 0xda, 0xfc, 0x49, 0x8e, 0xf0, 0x03, - 0x3e, 0xbf, 0xe0, 0x4b, 0xcb, 0xaa, 0xdb, 0x6a, 0x23, 0x0a, 0xe1, 0x44, 0x09, 0x6c, 0x22, 0x60, - 0x9e, 0xfb, 0x46, 0xbc, 0xab, 0x5b, 0x41, 0x61, 0xc2, 0x78, 0x8d, 0xbc, 0x09, 0x04, 0x79, 0x8e, - 0xbb, 0x7f, 0x45, 0x80, 0x5c, 0x14, 0x96, 0x71, 0xcb, 0x84, 0x74, 0x55, 0x49, 0x11, 0x3d, 0xa8, - 0xf9, 0x5f, 0x7b, 0xfd, 0xc8, 0x9e, 0x4a, 0x67, 0xc9, 0x0b, 0xdc, 0xd5, 0x06, 0x7c, 0xc5, 0xc0, - 0xaa, 0x73, 0x87, 0xb1, 0x4c, 0xf2, 0x02, 0x6c, 0xb8, 0x75, 0x44, 0x3b, 0x6b, 0x62, 0xec, 0x81, - 0x30, 0xf4, 0x9d, 0x97, 0x47, 0x1d, 0xbc, 0x57, 0x2b, 0xc7, 0x82, 0x23, 0xad, 0x6f, 0x57, 0x97, - 0x4d, 0x34, 0xda, 0xff, 0xb1, 0xea, 0xa1, 0x9f, 0xab, 0x1e, 0xfa, 0xb5, 0xea, 0xa1, 0xcf, 0x8d, - 0x72, 0x78, 0xb6, 0x1d, 0xc2, 0x9f, 0xfc, 0x09, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x2f, 0x9c, 0x7e, - 0x2a, 0x03, 0x00, 0x00, +var fileDescriptor_transcoder_07004c00c48edf58 = []byte{ + // 515 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x6b, 0x13, 0x41, + 0x14, 0xc7, 0x3b, 0x8d, 0x29, 0xdb, 0xb1, 0xad, 0x32, 0x48, 0xb3, 0x06, 0x0d, 0x41, 0xb0, 0x04, + 0x84, 0x5d, 0x88, 0x82, 0xa2, 0x07, 0x69, 0x50, 0x9b, 0x7a, 0xd0, 0x38, 0x08, 0x82, 0x97, 0x61, + 0xba, 0xfb, 0x92, 0x0c, 0x64, 0x67, 0xa6, 0x33, 0x93, 0xad, 0xf9, 0x1a, 0xfa, 0x65, 0xc4, 0x53, + 0x8f, 0x1e, 0xfd, 0x08, 0x92, 0x5b, 0x8f, 0x7e, 0x03, 0x99, 0xd9, 0x26, 0xac, 0xf5, 0xd2, 0xdb, + 0xce, 0xfe, 0x7f, 0xff, 0xf7, 0xe6, 0xbd, 0xff, 0xe0, 0xa7, 0x20, 0x4b, 0xb5, 0x48, 0x33, 0x25, + 0xc7, 0x62, 0x92, 0x8e, 0xc5, 0xcc, 0x81, 0x49, 0xa7, 0xce, 0xe9, 0xd4, 0x19, 0x2e, 0x6d, 0xa6, + 0x72, 0x30, 0x69, 0xd9, 0xaf, 0x9d, 0x12, 0x6d, 0x94, 0x53, 0xe4, 0x20, 0x18, 0x93, 0xca, 0x98, + 0x54, 0xc6, 0xc4, 0x1b, 0x93, 0x1a, 0x5a, 0xf6, 0xdb, 0xad, 0x92, 0xcf, 0x44, 0xce, 0x1d, 0xa4, + 0xab, 0x8f, 0xaa, 0xc0, 0x83, 0x6f, 0x4d, 0x4c, 0x8e, 0x8c, 0xce, 0xde, 0x5a, 0x25, 0x3f, 0xae, + 0x2d, 0xe4, 0x11, 0xbe, 0x1d, 0x74, 0x96, 0x83, 0xcd, 0x8c, 0xd0, 0x4e, 0x99, 0x18, 0x75, 0x51, + 0x6f, 0x7b, 0xb8, 0x41, 0x6f, 0x05, 0xe5, 0xd5, 0x5a, 0x20, 0x07, 0x38, 0xb2, 0x60, 0x4a, 0x91, + 0x81, 0x8d, 0x37, 0xbb, 0x8d, 0xde, 0xf6, 0x00, 0xff, 0xb8, 0x38, 0x6f, 0x34, 0xbf, 0xa2, 0xcd, + 0x08, 0xd1, 0xb5, 0x46, 0x66, 0x78, 0x57, 0x1b, 0x21, 0x1d, 0x53, 0xda, 0x09, 0x25, 0x6d, 0xdc, + 0xe8, 0xa2, 0xde, 0xcd, 0xfe, 0x51, 0x72, 0xbd, 0x21, 0x92, 0xff, 0xef, 0x99, 0x8c, 0x7c, 0xbd, + 0xf7, 0x55, 0x39, 0xba, 0xa3, 0x6b, 0x27, 0xd2, 0xc7, 0x77, 0xae, 0x8e, 0xc0, 0x4e, 0x84, 0x8c, + 0x6f, 0x74, 0x51, 0x6f, 0x67, 0xb8, 0x41, 0xc9, 0x95, 0x31, 0x06, 0x42, 0x92, 0x97, 0xf8, 0x5e, + 0xc1, 0x5d, 0x36, 0x65, 0x42, 0x66, 0xaa, 0x10, 0x72, 0xc2, 0x0c, 0x9c, 0xce, 0xc1, 0x3a, 0x66, + 0xd4, 0xdc, 0x41, 0xdc, 0xec, 0xa2, 0x5e, 0x44, 0xef, 0x06, 0xe6, 0xf8, 0x12, 0xa1, 0x15, 0x41, + 0x3d, 0x40, 0x9e, 0xe1, 0x58, 0x4c, 0xa4, 0x32, 0x90, 0xb3, 0xd3, 0x39, 0x98, 0x05, 0xd3, 0xdc, + 0xf0, 0x02, 0x1c, 0x18, 0x1b, 0x6f, 0xf9, 0xd5, 0xd0, 0xfd, 0x4b, 0xfd, 0x83, 0x97, 0x47, 0x6b, + 0xb5, 0xfd, 0x07, 0xe1, 0x9d, 0xfa, 0x34, 0xe4, 0x21, 0xde, 0xe3, 0x79, 0xce, 0xce, 0xa6, 0xc2, + 0x81, 0xd5, 0x3c, 0x83, 0x10, 0x40, 0x44, 0x77, 0x79, 0x9e, 0x7f, 0x5a, 0xff, 0x24, 0x87, 0xf8, + 0x3e, 0x9f, 0x9d, 0xf1, 0x85, 0x65, 0xd5, 0x6e, 0xb5, 0x11, 0x85, 0x70, 0xa2, 0x04, 0x36, 0x16, + 0x30, 0xcb, 0x7d, 0x22, 0xde, 0xd5, 0xae, 0xa0, 0xd0, 0x61, 0xb4, 0x42, 0xde, 0x04, 0x82, 0x3c, + 0xc7, 0xed, 0x7f, 0x4a, 0x80, 0x9c, 0x17, 0x96, 0x71, 0xcb, 0x84, 0x74, 0x55, 0x48, 0x11, 0xdd, + 0xaf, 0xf9, 0x5f, 0x7b, 0xfd, 0xd0, 0x1e, 0x4b, 0x67, 0xc9, 0x0b, 0xdc, 0xd6, 0x06, 0x7c, 0xc4, + 0xc0, 0xaa, 0x75, 0x87, 0xb6, 0x4c, 0xf2, 0x02, 0x6c, 0xd8, 0x75, 0x44, 0x5b, 0x2b, 0x62, 0xe4, + 0x81, 0xd0, 0xf4, 0x9d, 0x97, 0x07, 0x2d, 0xbc, 0x57, 0x0b, 0xc7, 0x82, 0x23, 0xcd, 0xef, 0x17, + 0xe7, 0x0d, 0x34, 0x18, 0xfe, 0x5c, 0x76, 0xd0, 0xaf, 0x65, 0x07, 0xfd, 0x5e, 0x76, 0x10, 0x7e, + 0x22, 0x54, 0xf5, 0x44, 0xb4, 0x51, 0x5f, 0x16, 0xd7, 0x7c, 0x2d, 0x23, 0xf4, 0x79, 0xb3, 0xec, + 0x9f, 0x6c, 0x85, 0x4b, 0x3d, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x22, 0xb7, 0xee, 0x24, 0x62, + 0x03, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/listener/original_src/v2alpha1/original_src.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/listener/original_src/v2alpha1/original_src.pb.go new file mode 100644 index 000000000000..b16e0a64e588 --- /dev/null +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/listener/original_src/v2alpha1/original_src.pb.go @@ -0,0 +1,381 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: envoy/config/filter/listener/original_src/v2alpha1/original_src.proto + +package v2alpha1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/lyft/protoc-gen-validate/validate" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +// The Original Src filter binds upstream connections to the original source address determined +// for the connection. This address could come from something like the Proxy Protocol filter, or it +// could come from trusted http headers. +type OriginalSrc struct { + // Whether to bind the port to the one used in the original downstream connection. + // [#not-implemented-warn:] + BindPort bool `protobuf:"varint,1,opt,name=bind_port,json=bindPort,proto3" json:"bind_port,omitempty"` + // set the SO_MARK option on the upstream connection's socket. Used to ensure that non-local + // addresses may be routed back through envoy when binding to the original source address. + // [#not-implemented-warn:] + Mark uint32 `protobuf:"varint,2,opt,name=mark,proto3" json:"mark,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OriginalSrc) Reset() { *m = OriginalSrc{} } +func (m *OriginalSrc) String() string { return proto.CompactTextString(m) } +func (*OriginalSrc) ProtoMessage() {} +func (*OriginalSrc) Descriptor() ([]byte, []int) { + return fileDescriptor_original_src_c0965da55b890770, []int{0} +} +func (m *OriginalSrc) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OriginalSrc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_OriginalSrc.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *OriginalSrc) XXX_Merge(src proto.Message) { + xxx_messageInfo_OriginalSrc.Merge(dst, src) +} +func (m *OriginalSrc) XXX_Size() int { + return m.Size() +} +func (m *OriginalSrc) XXX_DiscardUnknown() { + xxx_messageInfo_OriginalSrc.DiscardUnknown(m) +} + +var xxx_messageInfo_OriginalSrc proto.InternalMessageInfo + +func (m *OriginalSrc) GetBindPort() bool { + if m != nil { + return m.BindPort + } + return false +} + +func (m *OriginalSrc) GetMark() uint32 { + if m != nil { + return m.Mark + } + return 0 +} + +func init() { + proto.RegisterType((*OriginalSrc)(nil), "envoy.config.filter.listener.original_src.v2alpha1.OriginalSrc") +} +func (m *OriginalSrc) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OriginalSrc) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.BindPort { + dAtA[i] = 0x8 + i++ + if m.BindPort { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if m.Mark != 0 { + dAtA[i] = 0x10 + i++ + i = encodeVarintOriginalSrc(dAtA, i, uint64(m.Mark)) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeVarintOriginalSrc(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *OriginalSrc) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BindPort { + n += 2 + } + if m.Mark != 0 { + n += 1 + sovOriginalSrc(uint64(m.Mark)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovOriginalSrc(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozOriginalSrc(x uint64) (n int) { + return sovOriginalSrc(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *OriginalSrc) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOriginalSrc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OriginalSrc: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OriginalSrc: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BindPort", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOriginalSrc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.BindPort = bool(v != 0) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mark", wireType) + } + m.Mark = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOriginalSrc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Mark |= (uint32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipOriginalSrc(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthOriginalSrc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipOriginalSrc(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowOriginalSrc + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowOriginalSrc + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowOriginalSrc + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthOriginalSrc + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowOriginalSrc + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipOriginalSrc(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthOriginalSrc = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowOriginalSrc = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("envoy/config/filter/listener/original_src/v2alpha1/original_src.proto", fileDescriptor_original_src_c0965da55b890770) +} + +var fileDescriptor_original_src_c0965da55b890770 = []byte{ + // 213 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x4d, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2, + 0xcf, 0xc9, 0x2c, 0x2e, 0x49, 0xcd, 0x4b, 0x2d, 0xd2, 0xcf, 0x2f, 0xca, 0x4c, 0xcf, 0xcc, 0x4b, + 0xcc, 0x89, 0x2f, 0x2e, 0x4a, 0xd6, 0x2f, 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0x44, 0x11, + 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x32, 0x02, 0x1b, 0xa3, 0x07, 0x31, 0x46, 0x0f, 0x62, + 0x8c, 0x1e, 0xcc, 0x18, 0x3d, 0x14, 0x0d, 0x30, 0x63, 0xa4, 0xc4, 0xcb, 0x12, 0x73, 0x32, 0x53, + 0x12, 0x4b, 0x52, 0xf5, 0x61, 0x0c, 0x88, 0x61, 0x4a, 0x76, 0x5c, 0xdc, 0xfe, 0x50, 0x1d, 0xc1, + 0x45, 0xc9, 0x42, 0xd2, 0x5c, 0x9c, 0x49, 0x99, 0x79, 0x29, 0xf1, 0x05, 0xf9, 0x45, 0x25, 0x12, + 0x8c, 0x0a, 0x8c, 0x1a, 0x1c, 0x41, 0x1c, 0x20, 0x81, 0x80, 0xfc, 0xa2, 0x12, 0x21, 0x21, 0x2e, + 0x96, 0xdc, 0xc4, 0xa2, 0x6c, 0x09, 0x26, 0x05, 0x46, 0x0d, 0xde, 0x20, 0x30, 0xdb, 0x29, 0xea, + 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0xe4, 0x72, 0xc8, 0xcc, + 0xd7, 0x03, 0xbb, 0xae, 0xa0, 0x28, 0xbf, 0xa2, 0x52, 0x8f, 0x74, 0x87, 0x06, 0x30, 0x46, 0x71, + 0xc0, 0xd8, 0x49, 0x6c, 0x60, 0x27, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x58, 0x44, 0x8e, + 0x6b, 0x38, 0x01, 0x00, 0x00, +} diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/listener/original_src/v2alpha1/original_src.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/listener/original_src/v2alpha1/original_src.pb.validate.go new file mode 100644 index 000000000000..089aeb5d0e16 --- /dev/null +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/listener/original_src/v2alpha1/original_src.pb.validate.go @@ -0,0 +1,81 @@ +// Code generated by protoc-gen-validate +// source: envoy/config/filter/listener/original_src/v2alpha1/original_src.proto +// DO NOT EDIT!!! + +package v2alpha1 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/gogo/protobuf/types" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = types.DynamicAny{} +) + +// Validate checks the field values on OriginalSrc with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *OriginalSrc) Validate() error { + if m == nil { + return nil + } + + // no validation rules for BindPort + + // no validation rules for Mark + + return nil +} + +// OriginalSrcValidationError is the validation error returned by +// OriginalSrc.Validate if the designated constraints aren't met. +type OriginalSrcValidationError struct { + Field string + Reason string + Cause error + Key bool +} + +// Error satisfies the builtin error interface +func (e OriginalSrcValidationError) Error() string { + cause := "" + if e.Cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.Cause) + } + + key := "" + if e.Key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOriginalSrc.%s: %s%s", + key, + e.Field, + e.Reason, + cause) +} + +var _ error = OriginalSrcValidationError{} diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/client_ssl_auth/v2/client_ssl_auth.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/client_ssl_auth/v2/client_ssl_auth.pb.go index 762619613b15..ed5b2ee0bb49 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/client_ssl_auth/v2/client_ssl_auth.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/client_ssl_auth/v2/client_ssl_auth.pb.go @@ -56,7 +56,7 @@ func (m *ClientSSLAuth) Reset() { *m = ClientSSLAuth{} } func (m *ClientSSLAuth) String() string { return proto.CompactTextString(m) } func (*ClientSSLAuth) ProtoMessage() {} func (*ClientSSLAuth) Descriptor() ([]byte, []int) { - return fileDescriptor_client_ssl_auth_4986a886d9153439, []int{0} + return fileDescriptor_client_ssl_auth_81898ed783199d03, []int{0} } func (m *ClientSSLAuth) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -502,32 +502,33 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/client_ssl_auth/v2/client_ssl_auth.proto", fileDescriptor_client_ssl_auth_4986a886d9153439) + proto.RegisterFile("envoy/config/filter/network/client_ssl_auth/v2/client_ssl_auth.proto", fileDescriptor_client_ssl_auth_81898ed783199d03) } -var fileDescriptor_client_ssl_auth_4986a886d9153439 = []byte{ - // 366 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x90, 0xcf, 0x6a, 0xe3, 0x30, - 0x10, 0xc6, 0x51, 0x12, 0x16, 0x62, 0x6f, 0x96, 0x60, 0x16, 0xd6, 0x1b, 0x16, 0xc7, 0xec, 0x29, - 0xec, 0x41, 0x02, 0xe7, 0x05, 0x36, 0x89, 0x8f, 0x39, 0x14, 0xe7, 0x50, 0xe8, 0x45, 0x28, 0xb1, - 0x6c, 0x0f, 0x15, 0x96, 0x90, 0x64, 0xa7, 0x79, 0x93, 0x3e, 0x4b, 0x4f, 0x3d, 0xf6, 0xd8, 0x37, - 0x68, 0xc9, 0xad, 0x6f, 0xd0, 0x63, 0xf1, 0x9f, 0x5c, 0x72, 0x1b, 0xe9, 0x9b, 0xef, 0x37, 0xf3, - 0x8d, 0x13, 0xf3, 0xb2, 0x96, 0x27, 0x72, 0x90, 0x65, 0x06, 0x39, 0xc9, 0x40, 0x58, 0xae, 0x49, - 0xc9, 0xed, 0x51, 0xea, 0x7b, 0x72, 0x10, 0xc0, 0x4b, 0x4b, 0x8d, 0x11, 0x94, 0x55, 0xb6, 0x20, - 0x75, 0x74, 0xfd, 0x85, 0x95, 0x96, 0x56, 0x7a, 0xb8, 0xa5, 0xe0, 0x8e, 0x82, 0x3b, 0x0a, 0xee, - 0x29, 0xf8, 0xda, 0x52, 0x47, 0xb3, 0x79, 0x37, 0x95, 0x29, 0x68, 0x99, 0x52, 0x73, 0xc2, 0xd2, - 0x54, 0x73, 0x63, 0x3a, 0xe0, 0x2c, 0xc8, 0xa5, 0xcc, 0x05, 0x27, 0xed, 0x6b, 0x5f, 0x65, 0x24, - 0xad, 0x34, 0xb3, 0x20, 0xcb, 0x5e, 0xff, 0x55, 0x33, 0x01, 0x29, 0xb3, 0x9c, 0x5c, 0x8a, 0x5e, - 0xf8, 0x99, 0xcb, 0x5c, 0xb6, 0x25, 0x69, 0xaa, 0xee, 0xf7, 0xef, 0x27, 0x72, 0x26, 0x9b, 0x76, - 0x8d, 0xdd, 0x6e, 0xbb, 0xaa, 0x6c, 0xe1, 0x2d, 0x9d, 0x69, 0xb3, 0x0c, 0x65, 0x0a, 0xe8, 0x41, - 0x54, 0xc6, 0x72, 0xed, 0xa3, 0x10, 0x2d, 0xc6, 0xeb, 0xf1, 0xd3, 0xc7, 0xf3, 0x70, 0xa4, 0x07, - 0x21, 0x4a, 0x7e, 0x34, 0x2d, 0x2b, 0x05, 0x9b, 0xae, 0xc1, 0xfb, 0xe7, 0xb8, 0xc6, 0x32, 0x4b, - 0x95, 0xe6, 0x19, 0x3c, 0xf8, 0x83, 0xeb, 0x7e, 0xa7, 0x51, 0x6f, 0x5a, 0xd1, 0x8b, 0x9d, 0x89, - 0xe6, 0x99, 0xe6, 0xa6, 0xa0, 0x29, 0x17, 0xec, 0xe4, 0x0f, 0x43, 0xb4, 0x70, 0xa3, 0xdf, 0xb8, - 0x4b, 0x86, 0x2f, 0xc9, 0x70, 0xdc, 0x27, 0x5b, 0x8f, 0x1e, 0xdf, 0xe6, 0x28, 0xf9, 0xde, 0xbb, - 0xe2, 0xc6, 0xe4, 0xfd, 0x77, 0x26, 0xa0, 0xe8, 0xb1, 0x00, 0xcb, 0xa9, 0x00, 0x63, 0xfd, 0x51, - 0x38, 0x5c, 0xb8, 0xd1, 0x9f, 0xfe, 0xe0, 0x4c, 0x01, 0xae, 0x23, 0xdc, 0x1c, 0x10, 0x6f, 0x20, - 0xd5, 0x09, 0x2b, 0x73, 0x9e, 0xb8, 0xa0, 0x6e, 0x1b, 0xc7, 0x16, 0x8c, 0x5d, 0x4f, 0x5f, 0xce, - 0x01, 0x7a, 0x3d, 0x07, 0xe8, 0xfd, 0x1c, 0xa0, 0xbb, 0x41, 0x1d, 0xed, 0xbf, 0xb5, 0xa3, 0x97, - 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x49, 0xe3, 0x8a, 0x3f, 0xfb, 0x01, 0x00, 0x00, +var fileDescriptor_client_ssl_auth_81898ed783199d03 = []byte{ + // 379 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xb1, 0xae, 0xd3, 0x30, + 0x14, 0x86, 0xe5, 0xb6, 0x42, 0xba, 0x0e, 0x45, 0x28, 0x42, 0x22, 0x5c, 0xa1, 0xdc, 0x88, 0xa9, + 0x62, 0xb0, 0xa5, 0x74, 0x65, 0xa0, 0x6d, 0xc6, 0x0e, 0x55, 0x3a, 0x20, 0xb1, 0x58, 0x6e, 0xe3, + 0x24, 0x47, 0x58, 0xb1, 0x65, 0x3b, 0x69, 0xfb, 0x26, 0x3c, 0x0b, 0x13, 0x23, 0x23, 0x6f, 0x00, + 0xea, 0xc6, 0x1b, 0x30, 0xa2, 0xc4, 0xe9, 0xd2, 0x8d, 0xed, 0xe4, 0xfc, 0xe7, 0xff, 0x72, 0xfe, + 0x63, 0x9c, 0x89, 0xa6, 0x53, 0x17, 0x7a, 0x54, 0x4d, 0x09, 0x15, 0x2d, 0x41, 0x3a, 0x61, 0x68, + 0x23, 0xdc, 0x49, 0x99, 0x2f, 0xf4, 0x28, 0x41, 0x34, 0x8e, 0x59, 0x2b, 0x19, 0x6f, 0x5d, 0x4d, + 0xbb, 0xf4, 0xbe, 0x45, 0xb4, 0x51, 0x4e, 0x85, 0x64, 0xa0, 0x10, 0x4f, 0x21, 0x9e, 0x42, 0x46, + 0x0a, 0xb9, 0xb7, 0x74, 0xe9, 0xe3, 0x93, 0xff, 0x2b, 0xd7, 0x30, 0x30, 0x95, 0x11, 0x94, 0x17, + 0x85, 0x11, 0xd6, 0x7a, 0xe0, 0x63, 0x5c, 0x29, 0x55, 0x49, 0x41, 0x87, 0xaf, 0x43, 0x5b, 0xd2, + 0xa2, 0x35, 0xdc, 0x81, 0x6a, 0x46, 0xfd, 0x75, 0xc7, 0x25, 0x14, 0xdc, 0x09, 0x7a, 0x2b, 0x46, + 0xe1, 0x55, 0xa5, 0x2a, 0x35, 0x94, 0xb4, 0xaf, 0x7c, 0xf7, 0xdd, 0x5f, 0x84, 0xe7, 0x9b, 0x61, + 0x8d, 0xfd, 0x7e, 0xbb, 0x6a, 0x5d, 0x1d, 0x2e, 0xf1, 0xcb, 0x7e, 0x19, 0xc6, 0x35, 0xb0, 0xa3, + 0x6c, 0xad, 0x13, 0x26, 0x42, 0x09, 0x5a, 0x3c, 0xac, 0x1f, 0xbe, 0xfd, 0xf9, 0x3e, 0x9d, 0x99, + 0x49, 0x82, 0xf2, 0x17, 0xfd, 0xc8, 0x4a, 0xc3, 0xc6, 0x0f, 0x84, 0xef, 0x71, 0x60, 0x1d, 0x77, + 0x4c, 0x1b, 0x51, 0xc2, 0x39, 0x9a, 0xdc, 0xcf, 0xe3, 0x5e, 0xdd, 0x0d, 0x62, 0x98, 0xe1, 0xb9, + 0x11, 0xa5, 0x11, 0xb6, 0x66, 0x85, 0x90, 0xfc, 0x12, 0x4d, 0x13, 0xb4, 0x08, 0xd2, 0x37, 0xc4, + 0x27, 0x23, 0xb7, 0x64, 0x24, 0x1b, 0x93, 0xad, 0x67, 0x5f, 0x7f, 0x3d, 0xa1, 0xfc, 0xf9, 0xe8, + 0xca, 0x7a, 0x53, 0xf8, 0x11, 0xcf, 0x41, 0xb3, 0x53, 0x0d, 0x4e, 0x30, 0x09, 0xd6, 0x45, 0xb3, + 0x64, 0xba, 0x08, 0xd2, 0xb7, 0xe3, 0xc1, 0xb9, 0x06, 0xd2, 0xa5, 0xa4, 0x3f, 0x20, 0xd9, 0x40, + 0x61, 0x72, 0xde, 0x54, 0x22, 0x0f, 0x40, 0x7f, 0xea, 0x1d, 0x5b, 0xb0, 0x6e, 0xbd, 0xfb, 0x71, + 0x8d, 0xd1, 0xcf, 0x6b, 0x8c, 0x7e, 0x5f, 0x63, 0x84, 0x3f, 0x80, 0xf2, 0x56, 0x6d, 0xd4, 0xf9, + 0xf2, 0x9f, 0xcf, 0xb6, 0x43, 0x9f, 0x27, 0x5d, 0x7a, 0x78, 0x36, 0xac, 0xbe, 0xfc, 0x17, 0x00, + 0x00, 0xff, 0xff, 0xbd, 0x70, 0xa6, 0x1a, 0x3b, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/dubbo_proxy/v2alpha1/dubbo_proxy.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/dubbo_proxy/v2alpha1/dubbo_proxy.pb.go index 1890deaba33b..d158eba73854 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/dubbo_proxy/v2alpha1/dubbo_proxy.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/dubbo_proxy/v2alpha1/dubbo_proxy.pb.go @@ -39,7 +39,7 @@ func (x DubboProxy_ProtocolType) String() string { return proto.EnumName(DubboProxy_ProtocolType_name, int32(x)) } func (DubboProxy_ProtocolType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_dubbo_proxy_90d444f7a8aea9cc, []int{0, 0} + return fileDescriptor_dubbo_proxy_c9662de6ed4738cb, []int{0, 0} } // Configure the serialization protocol used. @@ -60,7 +60,7 @@ func (x DubboProxy_SerializationType) String() string { return proto.EnumName(DubboProxy_SerializationType_name, int32(x)) } func (DubboProxy_SerializationType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_dubbo_proxy_90d444f7a8aea9cc, []int{0, 1} + return fileDescriptor_dubbo_proxy_c9662de6ed4738cb, []int{0, 1} } type DubboProxy struct { @@ -77,7 +77,7 @@ func (m *DubboProxy) Reset() { *m = DubboProxy{} } func (m *DubboProxy) String() string { return proto.CompactTextString(m) } func (*DubboProxy) ProtoMessage() {} func (*DubboProxy) Descriptor() ([]byte, []int) { - return fileDescriptor_dubbo_proxy_90d444f7a8aea9cc, []int{0} + return fileDescriptor_dubbo_proxy_c9662de6ed4738cb, []int{0} } func (m *DubboProxy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -437,29 +437,30 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/dubbo_proxy/v2alpha1/dubbo_proxy.proto", fileDescriptor_dubbo_proxy_90d444f7a8aea9cc) + proto.RegisterFile("envoy/config/filter/network/dubbo_proxy/v2alpha1/dubbo_proxy.proto", fileDescriptor_dubbo_proxy_c9662de6ed4738cb) } -var fileDescriptor_dubbo_proxy_90d444f7a8aea9cc = []byte{ - // 316 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x8f, 0xb1, 0x4e, 0x02, 0x31, - 0x1c, 0x87, 0xe9, 0x21, 0x46, 0xfe, 0xa2, 0x39, 0xba, 0x88, 0x0e, 0x04, 0x99, 0x88, 0x43, 0x1b, - 0xcf, 0xf8, 0x02, 0x17, 0x07, 0x27, 0x43, 0xc0, 0xc9, 0x85, 0x14, 0x28, 0xda, 0x78, 0x69, 0x9b, - 0xb6, 0x9e, 0x9c, 0x8b, 0x89, 0x93, 0x93, 0x0f, 0xe4, 0xe4, 0xe8, 0xe8, 0x23, 0x18, 0x36, 0xdf, - 0xc2, 0x5c, 0x0f, 0xe2, 0x45, 0x36, 0xdd, 0x9a, 0x7e, 0xf9, 0x7d, 0xfd, 0x0a, 0x31, 0x97, 0xa9, - 0xca, 0xe8, 0x44, 0xc9, 0x99, 0xb8, 0xa6, 0x33, 0x91, 0x38, 0x6e, 0xa8, 0xe4, 0xee, 0x5e, 0x99, - 0x5b, 0x3a, 0xbd, 0x1b, 0x8f, 0xd5, 0x48, 0x1b, 0x35, 0xcf, 0x68, 0x1a, 0xb1, 0x44, 0xdf, 0xb0, - 0xe3, 0xf2, 0x25, 0xd1, 0x46, 0x39, 0x85, 0x4f, 0xbd, 0x83, 0xf0, 0xb9, 0xe3, 0xd2, 0x0a, 0x25, - 0x2d, 0x29, 0x3c, 0x96, 0x2c, 0x45, 0xa4, 0xbc, 0x59, 0x89, 0x0e, 0xf6, 0x52, 0x96, 0x88, 0x29, - 0x73, 0x9c, 0xae, 0x0e, 0x85, 0xaf, 0xfb, 0x5c, 0x05, 0x38, 0xcb, 0x17, 0xfd, 0x7c, 0x80, 0x8f, - 0x60, 0xdb, 0x3a, 0xe6, 0x46, 0xda, 0xf0, 0x99, 0x98, 0xb7, 0x50, 0x07, 0xf5, 0xea, 0x71, 0xfd, - 0xf5, 0xeb, 0xad, 0xba, 0x61, 0x82, 0x0e, 0x1a, 0x40, 0x4e, 0xfb, 0x1e, 0xe2, 0x47, 0xd8, 0xf1, - 0x8e, 0x89, 0x4a, 0x46, 0x2e, 0xd3, 0xbc, 0x15, 0x74, 0x50, 0x6f, 0x37, 0xba, 0x20, 0x7f, 0x4a, - 0x24, 0x3f, 0x15, 0xa4, 0xbf, 0xd4, 0x5e, 0x66, 0x9a, 0xc7, 0x90, 0xbf, 0x5e, 0x7b, 0x42, 0x41, - 0x88, 0x06, 0x0d, 0x5d, 0x22, 0xf8, 0x05, 0x01, 0xb6, 0xdc, 0x08, 0x96, 0x88, 0x07, 0xe6, 0x84, - 0x92, 0x45, 0x46, 0xd5, 0x67, 0x0c, 0xff, 0x9f, 0x31, 0x2c, 0xbb, 0xd7, 0x5a, 0x9a, 0xf6, 0x37, - 0xee, 0xee, 0x43, 0xa3, 0x9c, 0x8e, 0xeb, 0x50, 0xf3, 0xba, 0xb0, 0xd2, 0x3d, 0x84, 0xe6, 0x9a, - 0x0e, 0x37, 0x60, 0xeb, 0x9c, 0x5b, 0x2b, 0x98, 0x8c, 0xc2, 0x4a, 0x1c, 0xbe, 0x2f, 0xda, 0xe8, - 0x63, 0xd1, 0x46, 0x9f, 0x8b, 0x36, 0xba, 0x0a, 0xd2, 0x68, 0xbc, 0xe9, 0xbf, 0x7b, 0xf2, 0x1d, - 0x00, 0x00, 0xff, 0xff, 0xcf, 0x2c, 0x8c, 0x17, 0x39, 0x02, 0x00, 0x00, +var fileDescriptor_dubbo_proxy_c9662de6ed4738cb = []byte{ + // 331 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x90, 0x31, 0x4f, 0x32, 0x31, + 0x1c, 0xc6, 0xe9, 0xf1, 0xf2, 0x46, 0xfe, 0xa2, 0x81, 0x2e, 0xa2, 0x03, 0x41, 0x26, 0xe2, 0xd0, + 0x8b, 0x67, 0xfc, 0x02, 0xa7, 0x83, 0x93, 0xb9, 0x80, 0x89, 0x89, 0x0b, 0x29, 0x50, 0xb4, 0xf1, + 0xd2, 0x36, 0x6d, 0x3d, 0x39, 0x17, 0x13, 0x27, 0x27, 0x3f, 0x90, 0x93, 0xa3, 0xa3, 0x1f, 0xc1, + 0xdc, 0xe6, 0xb7, 0x30, 0xd7, 0x83, 0x78, 0x91, 0x0d, 0xb7, 0xa6, 0x4f, 0x9e, 0x5f, 0x7f, 0x4f, + 0x21, 0x64, 0x22, 0x91, 0xa9, 0x3f, 0x91, 0x62, 0xc6, 0xaf, 0xfd, 0x19, 0x8f, 0x2d, 0xd3, 0xbe, + 0x60, 0xf6, 0x5e, 0xea, 0x5b, 0x7f, 0x7a, 0x37, 0x1e, 0xcb, 0x91, 0xd2, 0x72, 0x9e, 0xfa, 0x49, + 0x40, 0x63, 0x75, 0x43, 0x0f, 0xcb, 0x97, 0x44, 0x69, 0x69, 0x25, 0x3e, 0x76, 0x0c, 0xc2, 0xe6, + 0x96, 0x09, 0xc3, 0xa5, 0x30, 0xa4, 0xe0, 0x18, 0xb2, 0x00, 0x91, 0x72, 0x67, 0x09, 0xda, 0xdb, + 0x49, 0x68, 0xcc, 0xa7, 0xd4, 0x32, 0x7f, 0x79, 0x28, 0x78, 0xbd, 0xe7, 0x2a, 0xc0, 0x69, 0xde, + 0x88, 0xf2, 0x02, 0x3e, 0x80, 0x4d, 0x63, 0xa9, 0x1d, 0x29, 0xcd, 0x66, 0x7c, 0xde, 0x46, 0x5d, + 0xd4, 0xaf, 0x87, 0xf5, 0xd7, 0xaf, 0xb7, 0xea, 0x3f, 0xed, 0x75, 0xd1, 0x00, 0xf2, 0x34, 0x72, + 0x21, 0x7e, 0x84, 0x2d, 0xc7, 0x98, 0xc8, 0x78, 0x64, 0x53, 0xc5, 0xda, 0x5e, 0x17, 0xf5, 0xb7, + 0x83, 0x73, 0xb2, 0x96, 0x22, 0xf9, 0xb1, 0x20, 0xd1, 0x02, 0x7b, 0x91, 0x2a, 0x16, 0x42, 0xfe, + 0x7a, 0xed, 0x09, 0x79, 0x4d, 0x34, 0x68, 0xa8, 0x52, 0x82, 0x5f, 0x10, 0x60, 0xc3, 0x34, 0xa7, + 0x31, 0x7f, 0xa0, 0x96, 0x4b, 0x51, 0x68, 0x54, 0x9d, 0xc6, 0xf0, 0xef, 0x1a, 0xc3, 0x32, 0x7b, + 0xc5, 0xa5, 0x65, 0x7e, 0xc7, 0xbd, 0x5d, 0x68, 0x94, 0xd5, 0x71, 0x1d, 0x6a, 0x0e, 0xd7, 0xac, + 0xf4, 0xf6, 0xa1, 0xb5, 0x82, 0xc3, 0x0d, 0xd8, 0x38, 0x63, 0xc6, 0x70, 0x2a, 0x82, 0x66, 0x25, + 0xbc, 0x7c, 0xcf, 0x3a, 0xe8, 0x23, 0xeb, 0xa0, 0xcf, 0xac, 0x83, 0xe0, 0x84, 0xcb, 0x62, 0x41, + 0xe1, 0xb7, 0xd6, 0x98, 0x08, 0x5d, 0x79, 0x49, 0x30, 0xfe, 0xef, 0x7e, 0xed, 0xe8, 0x3b, 0x00, + 0x00, 0xff, 0xff, 0x26, 0x02, 0x89, 0x02, 0x80, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.go index e69a04398176..98785b8edc7e 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.go @@ -46,7 +46,7 @@ func (m *ExtAuthz) Reset() { *m = ExtAuthz{} } func (m *ExtAuthz) String() string { return proto.CompactTextString(m) } func (*ExtAuthz) ProtoMessage() {} func (*ExtAuthz) Descriptor() ([]byte, []int) { - return fileDescriptor_ext_authz_394b94005bfc751a, []int{0} + return fileDescriptor_ext_authz_9b91fbc3b30d1404, []int{0} } func (m *ExtAuthz) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -430,27 +430,28 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/ext_authz/v2/ext_authz.proto", fileDescriptor_ext_authz_394b94005bfc751a) + proto.RegisterFile("envoy/config/filter/network/ext_authz/v2/ext_authz.proto", fileDescriptor_ext_authz_9b91fbc3b30d1404) } -var fileDescriptor_ext_authz_394b94005bfc751a = []byte{ - // 283 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x8f, 0x31, 0x4b, 0xc4, 0x30, - 0x14, 0xc7, 0x49, 0x4f, 0xe4, 0x2e, 0x75, 0x38, 0xba, 0x58, 0x6e, 0x28, 0x45, 0x1c, 0x8a, 0x48, - 0x02, 0x75, 0x71, 0xed, 0x81, 0x38, 0x09, 0x52, 0x37, 0x97, 0x12, 0xdb, 0xd7, 0x1a, 0xac, 0x4d, - 0xc8, 0xe5, 0x72, 0xd5, 0x2f, 0xe4, 0x77, 0x70, 0x72, 0x74, 0xf4, 0x23, 0x48, 0x37, 0xbf, 0x85, - 0xa4, 0x39, 0xa9, 0x5b, 0x5e, 0x7e, 0xef, 0xf7, 0x7f, 0xef, 0xe1, 0x4b, 0xe8, 0x8c, 0x78, 0xa1, - 0xa5, 0xe8, 0x6a, 0xde, 0xd0, 0x9a, 0xb7, 0x1a, 0x14, 0xed, 0x40, 0xef, 0x84, 0x7a, 0xa2, 0xd0, - 0xeb, 0x82, 0x6d, 0xf5, 0xe3, 0x2b, 0x35, 0xe9, 0x54, 0x10, 0xa9, 0x84, 0x16, 0x41, 0x32, 0x9a, - 0xc4, 0x99, 0xc4, 0x99, 0x64, 0x6f, 0x92, 0xa9, 0xd9, 0xa4, 0xab, 0x53, 0x37, 0x83, 0x49, 0x6e, - 0x73, 0x4a, 0xa1, 0x80, 0x36, 0x4a, 0x96, 0xc5, 0x06, 0x94, 0xe1, 0x25, 0xb8, 0xbc, 0xd5, 0xb1, - 0x61, 0x2d, 0xaf, 0x98, 0x06, 0xfa, 0xf7, 0x70, 0xe0, 0xe4, 0x0d, 0xe1, 0xf9, 0x55, 0xaf, 0x33, - 0x1b, 0x17, 0x9c, 0x61, 0x7f, 0xa3, 0x99, 0x2e, 0xa4, 0x82, 0x9a, 0xf7, 0x21, 0x8a, 0x51, 0xb2, - 0x58, 0x2f, 0xde, 0x7f, 0x3e, 0x66, 0x07, 0xca, 0x8b, 0x51, 0x8e, 0x2d, 0xbd, 0x1d, 0x61, 0x90, - 0xe1, 0xa3, 0xff, 0x73, 0x42, 0x2f, 0x46, 0x89, 0x9f, 0x46, 0xc4, 0x2d, 0xce, 0x24, 0x27, 0x26, - 0x25, 0x76, 0x1d, 0x72, 0xad, 0x64, 0x79, 0xe7, 0xba, 0x72, 0xbf, 0x99, 0x8a, 0xe0, 0x1c, 0x07, - 0x35, 0xe3, 0xed, 0x56, 0x41, 0xf1, 0x2c, 0x2a, 0x28, 0x58, 0xdb, 0x8a, 0x5d, 0x38, 0x8b, 0x51, - 0x32, 0xcf, 0x97, 0x7b, 0x72, 0x23, 0x2a, 0xc8, 0xec, 0xff, 0x7a, 0xf9, 0x39, 0x44, 0xe8, 0x6b, - 0x88, 0xd0, 0xf7, 0x10, 0xa1, 0x7b, 0xcf, 0xa4, 0x0f, 0x87, 0xe3, 0x09, 0x17, 0xbf, 0x01, 0x00, - 0x00, 0xff, 0xff, 0xe2, 0x7f, 0x73, 0x37, 0x67, 0x01, 0x00, 0x00, +var fileDescriptor_ext_authz_9b91fbc3b30d1404 = []byte{ + // 299 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xb1, 0x4a, 0xc4, 0x30, + 0x1c, 0xc6, 0x49, 0x4f, 0xe4, 0x2e, 0x75, 0x90, 0x2e, 0x96, 0x1b, 0x4a, 0x11, 0x87, 0x22, 0x92, + 0x40, 0x05, 0x71, 0xed, 0x81, 0x08, 0x82, 0x70, 0xd4, 0xcd, 0xa5, 0xc4, 0xf6, 0xdf, 0x1a, 0xac, + 0x4d, 0xc8, 0xe5, 0x72, 0x3d, 0x5f, 0xc8, 0x77, 0x70, 0x72, 0x74, 0xf4, 0x11, 0xa4, 0x9b, 0x6f, + 0x21, 0x6d, 0x4e, 0xea, 0xe8, 0x96, 0x7f, 0xbe, 0xff, 0xef, 0xfb, 0xbe, 0x04, 0x5f, 0x42, 0x63, + 0xc4, 0x96, 0xe6, 0xa2, 0x29, 0x79, 0x45, 0x4b, 0x5e, 0x6b, 0x50, 0xb4, 0x01, 0xbd, 0x11, 0xea, + 0x89, 0x42, 0xab, 0x33, 0xb6, 0xd6, 0x8f, 0x2f, 0xd4, 0xc4, 0xe3, 0x40, 0xa4, 0x12, 0x5a, 0x78, + 0xd1, 0x40, 0x12, 0x4b, 0x12, 0x4b, 0x92, 0x1d, 0x49, 0xc6, 0x65, 0x13, 0xcf, 0x4f, 0x6c, 0x06, + 0x93, 0xbc, 0xf7, 0xc9, 0x85, 0x02, 0x5a, 0x29, 0x99, 0x67, 0x2b, 0x50, 0x86, 0xe7, 0x60, 0xfd, + 0xe6, 0x47, 0x86, 0xd5, 0xbc, 0x60, 0x1a, 0xe8, 0xef, 0xc1, 0x0a, 0xc7, 0xaf, 0x08, 0x4f, 0xaf, + 0x5a, 0x9d, 0xf4, 0x76, 0xde, 0x29, 0x76, 0x57, 0x9a, 0xe9, 0x4c, 0x2a, 0x28, 0x79, 0xeb, 0xa3, + 0x10, 0x45, 0xb3, 0xc5, 0xec, 0xed, 0xfb, 0x7d, 0xb2, 0xa7, 0x9c, 0x10, 0xa5, 0xb8, 0x57, 0x97, + 0x83, 0xe8, 0x25, 0xf8, 0xe0, 0x6f, 0x8e, 0xef, 0x84, 0x28, 0x72, 0xe3, 0x80, 0xd8, 0xe2, 0x4c, + 0x72, 0x62, 0x62, 0xd2, 0xd7, 0x21, 0xd7, 0x4a, 0xe6, 0x77, 0x76, 0x2b, 0x75, 0xab, 0x71, 0xf0, + 0xce, 0xb0, 0x57, 0x32, 0x5e, 0xaf, 0x15, 0x64, 0xcf, 0xa2, 0x80, 0x8c, 0xd5, 0xb5, 0xd8, 0xf8, + 0x93, 0x10, 0x45, 0xd3, 0xf4, 0x70, 0xa7, 0xdc, 0x8a, 0x02, 0x92, 0xfe, 0x7e, 0x71, 0xf3, 0xd1, + 0x05, 0xe8, 0xb3, 0x0b, 0xd0, 0x57, 0x17, 0x20, 0x7c, 0xc1, 0x85, 0x8d, 0x92, 0x4a, 0xb4, 0x5b, + 0xf2, 0xdf, 0xef, 0x5a, 0xa2, 0x7b, 0xc7, 0xc4, 0x0f, 0xfb, 0xc3, 0xe3, 0xcf, 0x7f, 0x02, 0x00, + 0x00, 0xff, 0xff, 0x82, 0x00, 0xd2, 0x51, 0xa1, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.go index 8dd692e56219..c172f1e0bc63 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.go @@ -64,7 +64,7 @@ func (x HttpConnectionManager_CodecType) String() string { return proto.EnumName(HttpConnectionManager_CodecType_name, int32(x)) } func (HttpConnectionManager_CodecType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_http_connection_manager_5b6e0c870c48634b, []int{0, 0} + return fileDescriptor_http_connection_manager_911052550b5d3bdd, []int{0, 0} } // How to handle the :ref:`config_http_conn_man_headers_x-forwarded-client-cert` (XFCC) HTTP @@ -107,7 +107,7 @@ func (x HttpConnectionManager_ForwardClientCertDetails) String() string { return proto.EnumName(HttpConnectionManager_ForwardClientCertDetails_name, int32(x)) } func (HttpConnectionManager_ForwardClientCertDetails) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_http_connection_manager_5b6e0c870c48634b, []int{0, 1} + return fileDescriptor_http_connection_manager_911052550b5d3bdd, []int{0, 1} } type HttpConnectionManager_Tracing_OperationName int32 @@ -132,7 +132,7 @@ func (x HttpConnectionManager_Tracing_OperationName) String() string { return proto.EnumName(HttpConnectionManager_Tracing_OperationName_name, int32(x)) } func (HttpConnectionManager_Tracing_OperationName) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_http_connection_manager_5b6e0c870c48634b, []int{0, 0, 0} + return fileDescriptor_http_connection_manager_911052550b5d3bdd, []int{0, 0, 0} } // [#comment:next free field: 29] @@ -319,7 +319,7 @@ func (m *HttpConnectionManager) Reset() { *m = HttpConnectionManager{} } func (m *HttpConnectionManager) String() string { return proto.CompactTextString(m) } func (*HttpConnectionManager) ProtoMessage() {} func (*HttpConnectionManager) Descriptor() ([]byte, []int) { - return fileDescriptor_http_connection_manager_5b6e0c870c48634b, []int{0} + return fileDescriptor_http_connection_manager_911052550b5d3bdd, []int{0} } func (m *HttpConnectionManager) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -680,7 +680,7 @@ func (m *HttpConnectionManager_Tracing) Reset() { *m = HttpConnectionMan func (m *HttpConnectionManager_Tracing) String() string { return proto.CompactTextString(m) } func (*HttpConnectionManager_Tracing) ProtoMessage() {} func (*HttpConnectionManager_Tracing) Descriptor() ([]byte, []int) { - return fileDescriptor_http_connection_manager_5b6e0c870c48634b, []int{0, 0} + return fileDescriptor_http_connection_manager_911052550b5d3bdd, []int{0, 0} } func (m *HttpConnectionManager_Tracing) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -760,7 +760,7 @@ func (m *HttpConnectionManager_InternalAddressConfig) String() string { } func (*HttpConnectionManager_InternalAddressConfig) ProtoMessage() {} func (*HttpConnectionManager_InternalAddressConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_http_connection_manager_5b6e0c870c48634b, []int{0, 1} + return fileDescriptor_http_connection_manager_911052550b5d3bdd, []int{0, 1} } func (m *HttpConnectionManager_InternalAddressConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -822,7 +822,7 @@ func (m *HttpConnectionManager_SetCurrentClientCertDetails) String() string { } func (*HttpConnectionManager_SetCurrentClientCertDetails) ProtoMessage() {} func (*HttpConnectionManager_SetCurrentClientCertDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_http_connection_manager_5b6e0c870c48634b, []int{0, 2} + return fileDescriptor_http_connection_manager_911052550b5d3bdd, []int{0, 2} } func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -915,7 +915,7 @@ func (m *HttpConnectionManager_UpgradeConfig) Reset() { *m = HttpConnect func (m *HttpConnectionManager_UpgradeConfig) String() string { return proto.CompactTextString(m) } func (*HttpConnectionManager_UpgradeConfig) ProtoMessage() {} func (*HttpConnectionManager_UpgradeConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_http_connection_manager_5b6e0c870c48634b, []int{0, 3} + return fileDescriptor_http_connection_manager_911052550b5d3bdd, []int{0, 3} } func (m *HttpConnectionManager_UpgradeConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -982,7 +982,7 @@ func (m *Rds) Reset() { *m = Rds{} } func (m *Rds) String() string { return proto.CompactTextString(m) } func (*Rds) ProtoMessage() {} func (*Rds) Descriptor() ([]byte, []int) { - return fileDescriptor_http_connection_manager_5b6e0c870c48634b, []int{1} + return fileDescriptor_http_connection_manager_911052550b5d3bdd, []int{1} } func (m *Rds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1062,7 +1062,7 @@ func (m *HttpFilter) Reset() { *m = HttpFilter{} } func (m *HttpFilter) String() string { return proto.CompactTextString(m) } func (*HttpFilter) ProtoMessage() {} func (*HttpFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_http_connection_manager_5b6e0c870c48634b, []int{2} + return fileDescriptor_http_connection_manager_911052550b5d3bdd, []int{2} } func (m *HttpFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3968,115 +3968,116 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto", fileDescriptor_http_connection_manager_5b6e0c870c48634b) + proto.RegisterFile("envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto", fileDescriptor_http_connection_manager_911052550b5d3bdd) } -var fileDescriptor_http_connection_manager_5b6e0c870c48634b = []byte{ - // 1690 bytes of a gzipped FileDescriptorProto +var fileDescriptor_http_connection_manager_911052550b5d3bdd = []byte{ + // 1706 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x6f, 0x23, 0x49, - 0x15, 0x4f, 0xdb, 0x9e, 0x89, 0xf3, 0xec, 0x24, 0x9d, 0x4a, 0x32, 0xe9, 0x71, 0x96, 0xc4, 0x44, - 0x02, 0xa2, 0x05, 0xd9, 0x89, 0x19, 0x06, 0xf1, 0x21, 0x84, 0x9d, 0x64, 0x70, 0x46, 0xb3, 0x49, - 0xd4, 0xf6, 0x30, 0xec, 0x2e, 0xab, 0x52, 0xa5, 0xbb, 0xec, 0x34, 0x63, 0x77, 0x35, 0x55, 0xd5, - 0x9e, 0xe4, 0x84, 0xb4, 0xe2, 0x80, 0xb8, 0xc1, 0x01, 0x21, 0x71, 0xe4, 0x0e, 0xe2, 0x86, 0x38, - 0xed, 0x09, 0xf6, 0x84, 0xf8, 0x0b, 0x00, 0xcd, 0x6d, 0xff, 0x0b, 0x54, 0x1f, 0xed, 0xc4, 0xf9, - 0x9a, 0xd1, 0x92, 0xbd, 0x55, 0xbf, 0xf7, 0x7e, 0xbf, 0xf7, 0x51, 0xaf, 0x5f, 0x55, 0x41, 0x97, - 0xc6, 0x23, 0x76, 0x56, 0x0f, 0x58, 0xdc, 0x8b, 0xfa, 0xf5, 0x5e, 0x34, 0x90, 0x94, 0xd7, 0x63, - 0x2a, 0x5f, 0x31, 0xfe, 0xb2, 0x7e, 0x22, 0x65, 0x82, 0x03, 0x16, 0xc7, 0x34, 0x90, 0x11, 0x8b, - 0xf1, 0x90, 0xc4, 0xa4, 0x4f, 0x79, 0x7d, 0xd4, 0xb8, 0x49, 0x55, 0x4b, 0x38, 0x93, 0x0c, 0x3d, - 0xd6, 0xac, 0x35, 0xc3, 0x5a, 0x33, 0xac, 0x35, 0xcb, 0x5a, 0xbb, 0x09, 0x3a, 0x6a, 0x54, 0xbe, - 0x62, 0xa2, 0x21, 0x49, 0xa4, 0x7c, 0x04, 0x8c, 0x53, 0x1b, 0x19, 0x16, 0x2c, 0xe5, 0x01, 0x35, - 0xf4, 0x95, 0xea, 0x55, 0x33, 0xad, 0x08, 0xd8, 0xc0, 0x5a, 0x3c, 0x98, 0xb0, 0xe0, 0xa1, 0xb0, - 0xf2, 0xad, 0xeb, 0xd2, 0x25, 0x41, 0x40, 0x85, 0x18, 0xb0, 0xbe, 0xb2, 0x1d, 0x7f, 0x58, 0x84, - 0x67, 0x10, 0xf2, 0x2c, 0xa1, 0xf5, 0x84, 0xf2, 0x80, 0xc6, 0xd2, 0x6a, 0x1e, 0xf6, 0x19, 0xeb, - 0x0f, 0xac, 0xeb, 0xe3, 0xb4, 0x57, 0x27, 0xf1, 0x99, 0x55, 0xad, 0x5d, 0x56, 0x85, 0x29, 0x27, - 0x2a, 0x59, 0xab, 0x7f, 0xe7, 0xb2, 0x5e, 0x48, 0x9e, 0x06, 0xf2, 0x26, 0xf4, 0x2b, 0x4e, 0x92, - 0x84, 0xf2, 0x2c, 0x89, 0x95, 0x11, 0x19, 0x44, 0x21, 0x91, 0xb4, 0x9e, 0x2d, 0xac, 0x62, 0xa9, - 0xcf, 0xfa, 0x4c, 0x2f, 0xeb, 0x6a, 0x65, 0xa4, 0x1b, 0xff, 0x5c, 0x85, 0xe5, 0xb6, 0x94, 0xc9, - 0xce, 0xb8, 0xe4, 0xef, 0x99, 0x8a, 0xa3, 0x8f, 0x1d, 0x80, 0x80, 0x85, 0x34, 0xc0, 0x2a, 0x3d, - 0xcf, 0xa9, 0x3a, 0x9b, 0x73, 0x8d, 0x17, 0xb5, 0xcf, 0xb7, 0x79, 0xb5, 0x6b, 0x7d, 0xd4, 0x76, - 0x14, 0x7f, 0xf7, 0x2c, 0xa1, 0x2d, 0xf8, 0xdb, 0x67, 0x9f, 0xe4, 0xef, 0x7d, 0xec, 0xe4, 0x5c, - 0xc7, 0x9f, 0x09, 0x32, 0x31, 0x7a, 0x17, 0x4a, 0x42, 0x12, 0x89, 0x13, 0x4e, 0x7b, 0xd1, 0xa9, - 0x97, 0xab, 0x3a, 0x9b, 0x33, 0xad, 0x19, 0x65, 0x5b, 0xe0, 0xb9, 0xaa, 0xe3, 0x83, 0xd2, 0x1e, - 0x69, 0x25, 0x3a, 0x84, 0x3c, 0x0f, 0x85, 0x97, 0xaf, 0x3a, 0x9b, 0xa5, 0xc6, 0xf7, 0x3e, 0x6f, - 0xa0, 0x7e, 0x28, 0xda, 0x53, 0xbe, 0x62, 0x42, 0x7b, 0x50, 0xe6, 0x2c, 0x95, 0x14, 0x1b, 0x12, - 0xaf, 0xa0, 0x99, 0xab, 0x96, 0x99, 0x24, 0x91, 0xb6, 0x57, 0x16, 0x3b, 0xda, 0xc0, 0x6e, 0x63, - 0x7b, 0xca, 0x2f, 0xf1, 0x73, 0x29, 0xa2, 0x50, 0xd6, 0xfe, 0x4c, 0x0c, 0xc2, 0xbb, 0x57, 0xcd, - 0x6f, 0x96, 0x1a, 0xad, 0xff, 0xa7, 0x92, 0x4f, 0xb4, 0xb5, 0x5f, 0x3a, 0x19, 0xaf, 0x05, 0xfa, - 0x21, 0xcc, 0x91, 0x30, 0xc4, 0xa9, 0xa0, 0x1c, 0x93, 0x3e, 0x8d, 0xa5, 0x77, 0x5f, 0xc7, 0x5b, - 0xa9, 0x99, 0x8e, 0xa9, 0x65, 0x1d, 0x53, 0x6b, 0x31, 0x36, 0xf8, 0x31, 0x19, 0xa4, 0xd4, 0x2f, - 0x93, 0x30, 0x7c, 0x2e, 0x28, 0x6f, 0x2a, 0x7b, 0xc4, 0x60, 0x5a, 0x72, 0x12, 0x44, 0x71, 0xdf, - 0x9b, 0xd6, 0xd0, 0xe7, 0x77, 0xbb, 0xdb, 0x5d, 0x43, 0xee, 0x67, 0x5e, 0xd0, 0x87, 0xb0, 0xac, - 0x49, 0xb2, 0xff, 0x13, 0xb3, 0x44, 0xd9, 0x0b, 0xaf, 0xa8, 0xdd, 0x7f, 0x6d, 0xb2, 0xd2, 0xea, - 0x57, 0xd6, 0xcc, 0xdb, 0x47, 0xd6, 0xfe, 0xd0, 0x98, 0xfb, 0x8b, 0x8a, 0xe5, 0x92, 0x10, 0x7d, - 0x04, 0x0f, 0x94, 0xb8, 0x71, 0x95, 0x7d, 0xe6, 0x56, 0xf6, 0xc6, 0x65, 0xf6, 0xa5, 0x93, 0x6b, - 0xa4, 0x68, 0x1d, 0x4a, 0x82, 0xf2, 0x11, 0xe5, 0x38, 0x26, 0x43, 0xea, 0x81, 0xea, 0x4c, 0x1f, - 0x8c, 0xe8, 0x80, 0x0c, 0x29, 0x6a, 0x41, 0x39, 0x0a, 0x07, 0x14, 0xcb, 0x68, 0x48, 0x59, 0x2a, - 0xbd, 0x92, 0xf6, 0xfa, 0xf0, 0xca, 0x6e, 0xec, 0xda, 0xb6, 0x69, 0x15, 0x7e, 0xff, 0x9f, 0x75, - 0xc7, 0x2f, 0x29, 0x50, 0xd7, 0x60, 0xd0, 0x2e, 0xcc, 0x86, 0x9c, 0x44, 0xf1, 0x98, 0xa4, 0xfc, - 0x76, 0x24, 0x65, 0x8d, 0xca, 0x58, 0x9e, 0x02, 0x98, 0xc1, 0x85, 0x07, 0xac, 0xef, 0xcd, 0xea, - 0xf6, 0xfb, 0xfa, 0xb5, 0x5b, 0x7b, 0x3e, 0xdf, 0x46, 0x8d, 0x5a, 0x53, 0x7f, 0x3c, 0x63, 0x7d, - 0x7f, 0x86, 0x64, 0x4b, 0xd4, 0x06, 0x94, 0x0a, 0x8a, 0x39, 0x1d, 0x32, 0x49, 0x31, 0x09, 0x43, - 0x4e, 0x85, 0xf0, 0xe6, 0xde, 0xd8, 0x69, 0x6e, 0x2a, 0xa8, 0xaf, 0x41, 0x4d, 0x83, 0x41, 0x4f, - 0x61, 0xb1, 0x4f, 0x63, 0xca, 0x89, 0x54, 0x74, 0x3f, 0x4f, 0xa9, 0x90, 0x38, 0x0a, 0xbd, 0xf9, - 0x37, 0x52, 0x2d, 0x64, 0x30, 0xdf, 0xa0, 0xf6, 0x43, 0xf4, 0x17, 0x07, 0x56, 0x7b, 0x8c, 0xbf, - 0x22, 0x3c, 0xc4, 0xc1, 0x20, 0xa2, 0xb1, 0xc4, 0x01, 0xe5, 0x12, 0x87, 0x54, 0x92, 0x68, 0x20, - 0x3c, 0x57, 0x0f, 0xaf, 0xde, 0xdd, 0xb6, 0xf3, 0x13, 0xe3, 0x70, 0x47, 0xfb, 0xdb, 0xa1, 0x5c, - 0xee, 0x1a, 0x6f, 0x13, 0xb3, 0xcc, 0xeb, 0xdd, 0x60, 0x85, 0xfe, 0xec, 0xc0, 0xba, 0xa0, 0x12, - 0x07, 0x29, 0xe7, 0x3a, 0xe0, 0x6b, 0xe2, 0x5e, 0xd0, 0xc5, 0x88, 0xee, 0x36, 0xee, 0x0e, 0x95, - 0x3b, 0xc6, 0xe7, 0x95, 0xa0, 0xfc, 0x55, 0x71, 0xb3, 0x12, 0x7d, 0x03, 0x50, 0xc2, 0xd9, 0xe9, - 0x19, 0xde, 0xde, 0xda, 0x52, 0x1e, 0x65, 0x14, 0xa7, 0xd4, 0x43, 0x55, 0x67, 0xb3, 0xe8, 0xbb, - 0x5a, 0xb3, 0xbd, 0xb5, 0xb5, 0x63, 0xe5, 0xa8, 0x0e, 0x4b, 0xa7, 0xbd, 0x1e, 0x8e, 0xd3, 0x21, - 0x96, 0x3c, 0x15, 0x92, 0x86, 0xf8, 0x84, 0x25, 0xc2, 0x5b, 0xac, 0x3a, 0x9b, 0xb3, 0xfe, 0xc2, - 0x69, 0xaf, 0x77, 0x90, 0x0e, 0xbb, 0x46, 0xd3, 0x66, 0x89, 0x40, 0x14, 0xb6, 0x39, 0x4d, 0x38, - 0x15, 0xaa, 0x0c, 0x51, 0x32, 0x7a, 0x74, 0xa9, 0xcb, 0x30, 0x11, 0x46, 0x3c, 0x54, 0x07, 0x5e, - 0xa8, 0xd6, 0x8f, 0xbd, 0x25, 0xed, 0xfd, 0xdd, 0x31, 0x70, 0x3f, 0x19, 0x3d, 0x9a, 0xe8, 0xb3, - 0xa6, 0x50, 0xa2, 0xf7, 0x34, 0x64, 0x3f, 0x19, 0x3d, 0x46, 0x5f, 0x85, 0x79, 0xf1, 0x32, 0x4a, - 0xb0, 0x0a, 0x4e, 0x49, 0xe3, 0xd0, 0x5b, 0xd6, 0x24, 0xb3, 0x4a, 0xfc, 0x93, 0x5e, 0xaf, 0xa9, - 0x85, 0xc8, 0x85, 0xfc, 0x28, 0x22, 0xde, 0x03, 0xfd, 0x63, 0xab, 0x25, 0xfa, 0xa5, 0x03, 0xf3, - 0x69, 0xd2, 0xe7, 0x24, 0xcc, 0x8e, 0x04, 0xe1, 0xad, 0xe8, 0xbf, 0xe9, 0xc3, 0xbb, 0xdd, 0xa1, - 0xe7, 0xc6, 0x89, 0x39, 0x3f, 0xfc, 0xb9, 0xf4, 0xe2, 0xa7, 0x40, 0x87, 0xb0, 0x28, 0x24, 0xa7, - 0x64, 0x88, 0x27, 0xe6, 0x8b, 0xf7, 0x76, 0xa3, 0x61, 0xc1, 0x60, 0xf7, 0x2f, 0x4c, 0x99, 0x3f, - 0x38, 0xb0, 0x12, 0xc5, 0x92, 0xf2, 0x98, 0x0c, 0xc6, 0xc5, 0xb6, 0x67, 0xde, 0x43, 0xcd, 0x1a, - 0xdc, 0x6d, 0x7e, 0xfb, 0xd6, 0x99, 0xdd, 0x22, 0x9b, 0xe7, 0x72, 0x74, 0x9d, 0x18, 0x75, 0x60, - 0x39, 0xa4, 0x03, 0x72, 0x46, 0xd5, 0xaf, 0xcd, 0xc4, 0x79, 0xc2, 0x95, 0xb7, 0x4b, 0x78, 0xd1, - 0xa2, 0x77, 0x14, 0x38, 0x4b, 0xf9, 0x23, 0x58, 0x3d, 0x4e, 0xfb, 0xbd, 0xe8, 0x14, 0x73, 0x3a, - 0xa2, 0x5c, 0x50, 0x4c, 0x63, 0x75, 0xeb, 0xc0, 0x8c, 0x87, 0x94, 0x7b, 0xab, 0x6f, 0x1a, 0x42, - 0xad, 0x9c, 0xe7, 0xf8, 0x9e, 0xa1, 0xf0, 0x0d, 0xc3, 0x9e, 0x26, 0x38, 0x54, 0x78, 0xd4, 0x86, - 0xf9, 0x6c, 0xa4, 0x65, 0xd1, 0xbe, 0xf3, 0x76, 0xd1, 0xce, 0x59, 0x9c, 0x0d, 0xb4, 0xf2, 0x8f, - 0x3c, 0x4c, 0xdb, 0x73, 0x13, 0xfd, 0xce, 0x81, 0x39, 0x96, 0x50, 0x63, 0x6f, 0x8e, 0x1d, 0x73, - 0x2b, 0x0b, 0xbe, 0x90, 0x73, 0xba, 0x76, 0x98, 0xf9, 0x52, 0xe7, 0xd9, 0xc4, 0x54, 0x9b, 0x65, - 0x17, 0x55, 0xe8, 0xdb, 0xe0, 0x65, 0xe9, 0x9e, 0x50, 0x12, 0x52, 0x2e, 0x70, 0x8f, 0x71, 0x2c, - 0x49, 0x5f, 0x78, 0xb9, 0x6a, 0x7e, 0x73, 0xc6, 0x5f, 0xb6, 0xfa, 0xb6, 0x51, 0x3f, 0x61, 0xbc, - 0x4b, 0xfa, 0x02, 0x7d, 0x1f, 0xe6, 0xed, 0xd8, 0x13, 0x64, 0x98, 0x0c, 0xd4, 0xcd, 0xc3, 0x5c, - 0xdf, 0x16, 0x6d, 0x46, 0xea, 0xea, 0x59, 0x3b, 0x32, 0x37, 0x6b, 0x7f, 0xce, 0xd8, 0x76, 0xac, - 0xa9, 0x42, 0x73, 0x12, 0x87, 0x6c, 0x78, 0x8e, 0x2e, 0xdc, 0x82, 0x36, 0xb6, 0x63, 0xf4, 0x0f, - 0xc0, 0x65, 0x23, 0xca, 0xc9, 0x60, 0x70, 0x0e, 0xbf, 0x77, 0x33, 0x7c, 0xde, 0x1a, 0x67, 0xf8, - 0x8d, 0x1a, 0xcc, 0x4e, 0x14, 0x08, 0x95, 0x60, 0x7a, 0xff, 0xe0, 0x47, 0xfe, 0x5e, 0xa7, 0xe3, - 0x4e, 0x21, 0x80, 0xfb, 0x7b, 0x66, 0xed, 0x54, 0x0a, 0xbf, 0xfa, 0xe3, 0xda, 0x54, 0xe5, 0xbb, - 0xb0, 0x7c, 0x6d, 0xdf, 0xa3, 0x2f, 0x43, 0x39, 0x8d, 0xa3, 0x53, 0x2c, 0x58, 0xf0, 0x92, 0x4a, - 0xa1, 0xf7, 0xb4, 0xe8, 0x97, 0x94, 0xac, 0x63, 0x44, 0x95, 0xdf, 0x38, 0xb0, 0x7a, 0xcb, 0xd8, - 0x46, 0x8f, 0x60, 0x5a, 0xa4, 0xc7, 0x3f, 0xa3, 0x81, 0xd4, 0xe8, 0xdb, 0xcf, 0xcf, 0xcc, 0x14, - 0x21, 0x28, 0xa8, 0xd3, 0x46, 0x97, 0xbc, 0xe8, 0xeb, 0xb5, 0x9a, 0x7a, 0x61, 0x2c, 0x74, 0x1d, - 0x8b, 0xbe, 0x5a, 0x2a, 0x49, 0xca, 0x23, 0x5d, 0x9a, 0xa2, 0xaf, 0x96, 0x4f, 0x0b, 0xc5, 0x9c, - 0x9b, 0xaf, 0xfc, 0xdd, 0x81, 0xd9, 0x89, 0x41, 0xa5, 0x13, 0xb1, 0xe3, 0x71, 0xfc, 0x64, 0x98, - 0xf1, 0x4b, 0x56, 0xa6, 0xef, 0xf3, 0x3f, 0x85, 0xe9, 0xec, 0x1a, 0x9c, 0xbb, 0xb3, 0x6b, 0x70, - 0x46, 0xa9, 0xca, 0x40, 0x63, 0x72, 0x3c, 0xa0, 0xa1, 0x6d, 0xa3, 0x5b, 0xcb, 0x60, 0x4d, 0x37, - 0xb6, 0x61, 0x66, 0xfc, 0x0e, 0x41, 0x45, 0x28, 0x34, 0x9f, 0x77, 0x0f, 0xdd, 0x29, 0x34, 0x03, - 0xf7, 0xda, 0xdd, 0xee, 0xd1, 0xb6, 0xeb, 0x64, 0xcb, 0x86, 0x9b, 0x33, 0x7b, 0xb9, 0xf1, 0x0b, - 0xf0, 0x6e, 0x3a, 0xfd, 0x51, 0x19, 0x8a, 0x9d, 0xe6, 0xc1, 0x7e, 0x77, 0xff, 0x83, 0x3d, 0x77, - 0x0a, 0xb9, 0x50, 0x7e, 0x72, 0xe8, 0xbf, 0x68, 0xfa, 0xbb, 0xf8, 0xf0, 0xe0, 0xd9, 0xfb, 0xae, - 0x83, 0x10, 0xcc, 0x35, 0x8f, 0x8e, 0xf6, 0x0e, 0x76, 0xb1, 0x55, 0xb8, 0x39, 0x65, 0x95, 0x61, - 0x70, 0x67, 0xaf, 0xeb, 0xe6, 0xd1, 0x0a, 0x2c, 0x36, 0x9f, 0xbd, 0x68, 0xbe, 0xdf, 0xc1, 0x13, - 0xf0, 0x82, 0x09, 0xa0, 0xe5, 0xc1, 0xbc, 0x79, 0x9a, 0x88, 0x84, 0x06, 0x51, 0x2f, 0xa2, 0x1c, - 0xdd, 0xfb, 0xeb, 0x67, 0x9f, 0xe4, 0x9d, 0x8d, 0xdf, 0x3a, 0x90, 0xf7, 0x43, 0x81, 0xba, 0x30, - 0x3b, 0xf1, 0x3a, 0xb6, 0x8d, 0xb1, 0x7e, 0xcd, 0xad, 0xd7, 0x6c, 0x5f, 0x47, 0x9b, 0xb5, 0xe6, - 0x3e, 0xfd, 0xf7, 0xfa, 0x94, 0xfe, 0xd5, 0x7f, 0xad, 0x7f, 0xf5, 0x72, 0x70, 0x41, 0x8b, 0xbe, - 0x05, 0x0b, 0x17, 0x9f, 0x44, 0x66, 0x08, 0x5d, 0x79, 0x95, 0xcd, 0x5f, 0x78, 0xfe, 0xa8, 0x5f, - 0x63, 0xe3, 0x4f, 0x0e, 0xc0, 0xf9, 0x86, 0xa1, 0x2f, 0x41, 0x61, 0x3c, 0xbd, 0x26, 0x80, 0x5a, - 0x8c, 0xb6, 0xe1, 0xbe, 0x3d, 0x7d, 0x72, 0x3a, 0xe6, 0x95, 0x2b, 0xbb, 0xd8, 0xd1, 0x2f, 0xe2, - 0xf6, 0x94, 0x6f, 0x0d, 0xd1, 0x77, 0xa0, 0xac, 0x5a, 0x2e, 0x9c, 0x7c, 0xaa, 0x2d, 0x5d, 0x01, - 0x36, 0xe3, 0x33, 0xf5, 0x3c, 0xd3, 0xb6, 0x26, 0xbe, 0xd6, 0x2c, 0x94, 0x6c, 0x32, 0x4a, 0xfa, - 0xb4, 0x50, 0xcc, 0xbb, 0x85, 0x96, 0xfb, 0xe9, 0xeb, 0x35, 0xe7, 0x5f, 0xaf, 0xd7, 0x9c, 0xff, - 0xbe, 0x5e, 0x73, 0x3e, 0xc8, 0x8d, 0x1a, 0xc7, 0xf7, 0x35, 0xc7, 0x37, 0xff, 0x17, 0x00, 0x00, - 0xff, 0xff, 0xab, 0xb6, 0xe6, 0x73, 0x14, 0x11, 0x00, 0x00, + 0x15, 0x4f, 0xdb, 0xce, 0xc4, 0x79, 0x76, 0x1c, 0xa7, 0x92, 0x4c, 0x7a, 0x9c, 0x25, 0x31, 0x91, + 0x80, 0x68, 0x41, 0x76, 0x62, 0x66, 0x07, 0xf1, 0x21, 0x84, 0x9d, 0x64, 0x70, 0x46, 0xb3, 0x49, + 0xd4, 0xf6, 0x30, 0xfb, 0xc1, 0xaa, 0x54, 0xe9, 0x2e, 0x3b, 0xcd, 0xd8, 0x5d, 0x4d, 0x55, 0xb5, + 0x27, 0x39, 0x21, 0xad, 0x38, 0x20, 0x6e, 0x70, 0x40, 0x48, 0x1c, 0xf9, 0x03, 0x10, 0x9c, 0x10, + 0xa7, 0x3d, 0xc1, 0x9e, 0x10, 0x7f, 0x01, 0xa0, 0xb9, 0xed, 0x7f, 0x81, 0xea, 0xa3, 0x9d, 0x38, + 0x5f, 0x33, 0x1a, 0xb2, 0xb7, 0xea, 0xf7, 0xde, 0xef, 0xf7, 0x3e, 0xea, 0xf5, 0xab, 0x2a, 0xe8, + 0xd2, 0x68, 0xc4, 0xce, 0xea, 0x3e, 0x8b, 0x7a, 0x61, 0xbf, 0xde, 0x0b, 0x07, 0x92, 0xf2, 0x7a, + 0x44, 0xe5, 0x4b, 0xc6, 0x5f, 0xd4, 0x4f, 0xa4, 0x8c, 0xb1, 0xcf, 0xa2, 0x88, 0xfa, 0x32, 0x64, + 0x11, 0x1e, 0x92, 0x88, 0xf4, 0x29, 0xaf, 0x8f, 0x1a, 0x37, 0xa9, 0x6a, 0x31, 0x67, 0x92, 0xa1, + 0x47, 0x9a, 0xb5, 0x66, 0x58, 0x6b, 0x86, 0xb5, 0x66, 0x59, 0x6b, 0x37, 0x41, 0x47, 0x8d, 0xca, + 0xd7, 0x4c, 0x34, 0x24, 0x0e, 0x95, 0x0f, 0x9f, 0x71, 0x6a, 0x23, 0xc3, 0x82, 0x25, 0xdc, 0xa7, + 0x86, 0xbe, 0x52, 0xbd, 0x6a, 0xa6, 0x15, 0x3e, 0x1b, 0x58, 0x8b, 0xfb, 0x13, 0x16, 0x3c, 0x10, + 0x56, 0xbe, 0x75, 0x5d, 0xba, 0xc4, 0xf7, 0xa9, 0x10, 0x03, 0xd6, 0x57, 0xb6, 0xe3, 0x0f, 0x8b, + 0x70, 0x0d, 0x42, 0x9e, 0xc5, 0xb4, 0x1e, 0x53, 0xee, 0xd3, 0x48, 0x5a, 0xcd, 0x83, 0x3e, 0x63, + 0xfd, 0x81, 0x75, 0x7d, 0x9c, 0xf4, 0xea, 0x24, 0x3a, 0xb3, 0xaa, 0xb5, 0xcb, 0xaa, 0x20, 0xe1, + 0x44, 0x25, 0x6b, 0xf5, 0xef, 0x5c, 0xd6, 0x0b, 0xc9, 0x13, 0x5f, 0xde, 0x84, 0x7e, 0xc9, 0x49, + 0x1c, 0x53, 0x9e, 0x26, 0xb1, 0x32, 0x22, 0x83, 0x30, 0x20, 0x92, 0xd6, 0xd3, 0x85, 0x55, 0x2c, + 0xf5, 0x59, 0x9f, 0xe9, 0x65, 0x5d, 0xad, 0x8c, 0x74, 0xe3, 0x9f, 0xab, 0xb0, 0xdc, 0x96, 0x32, + 0xde, 0x19, 0x97, 0xfc, 0x7d, 0x53, 0x71, 0xf4, 0xa9, 0x03, 0xe0, 0xb3, 0x80, 0xfa, 0x58, 0xa5, + 0xe7, 0x3a, 0x55, 0x67, 0xb3, 0xd4, 0x78, 0x5e, 0x7b, 0xbb, 0xcd, 0xab, 0x5d, 0xeb, 0xa3, 0xb6, + 0xa3, 0xf8, 0xbb, 0x67, 0x31, 0x6d, 0xc1, 0xdf, 0xbe, 0xf8, 0x2c, 0x3b, 0xfd, 0xa9, 0x93, 0x29, + 0x3b, 0xde, 0xac, 0x9f, 0x8a, 0xd1, 0xbb, 0x50, 0x10, 0x92, 0x48, 0x1c, 0x73, 0xda, 0x0b, 0x4f, + 0xdd, 0x4c, 0xd5, 0xd9, 0x9c, 0x6d, 0xcd, 0x2a, 0xdb, 0x1c, 0xcf, 0x54, 0x1d, 0x0f, 0x94, 0xf6, + 0x48, 0x2b, 0xd1, 0x21, 0x64, 0x79, 0x20, 0xdc, 0x6c, 0xd5, 0xd9, 0x2c, 0x34, 0xbe, 0xff, 0xb6, + 0x81, 0x7a, 0x81, 0x68, 0x4f, 0x79, 0x8a, 0x09, 0xed, 0x41, 0x91, 0xb3, 0x44, 0x52, 0x6c, 0x48, + 0xdc, 0x9c, 0x66, 0xae, 0x5a, 0x66, 0x12, 0x87, 0xda, 0x5e, 0x59, 0xec, 0x68, 0x03, 0xbb, 0x8d, + 0xed, 0x29, 0xaf, 0xc0, 0xcf, 0xa5, 0x88, 0x42, 0x51, 0xfb, 0x33, 0x31, 0x08, 0x77, 0xba, 0x9a, + 0xdd, 0x2c, 0x34, 0x5a, 0xff, 0x4f, 0x25, 0x1f, 0x6b, 0x6b, 0xaf, 0x70, 0x32, 0x5e, 0x0b, 0xf4, + 0x23, 0x28, 0x91, 0x20, 0xc0, 0x89, 0xa0, 0x1c, 0x93, 0x3e, 0x8d, 0xa4, 0x7b, 0x4f, 0xc7, 0x5b, + 0xa9, 0x99, 0x8e, 0xa9, 0xa5, 0x1d, 0x53, 0x6b, 0x31, 0x36, 0xf8, 0x09, 0x19, 0x24, 0xd4, 0x2b, + 0x92, 0x20, 0x78, 0x26, 0x28, 0x6f, 0x2a, 0x7b, 0xc4, 0x60, 0x46, 0x72, 0xe2, 0x87, 0x51, 0xdf, + 0x9d, 0xd1, 0xd0, 0x67, 0x77, 0xbb, 0xdb, 0x5d, 0x43, 0xee, 0xa5, 0x5e, 0xd0, 0xc7, 0xb0, 0xac, + 0x49, 0xd2, 0xff, 0x13, 0xb3, 0x58, 0xd9, 0x0b, 0x37, 0xaf, 0xdd, 0x7f, 0x63, 0xb2, 0xd2, 0xea, + 0x57, 0xd6, 0xcc, 0xdb, 0x47, 0xd6, 0xfe, 0xd0, 0x98, 0x7b, 0x8b, 0x8a, 0xe5, 0x92, 0x10, 0x7d, + 0x02, 0xf7, 0x95, 0xb8, 0x71, 0x95, 0x7d, 0xf6, 0x56, 0xf6, 0xc6, 0x65, 0xf6, 0xa5, 0x93, 0x6b, + 0xa4, 0x68, 0x1d, 0x0a, 0x82, 0xf2, 0x11, 0xe5, 0x38, 0x22, 0x43, 0xea, 0x82, 0xea, 0x4c, 0x0f, + 0x8c, 0xe8, 0x80, 0x0c, 0x29, 0x6a, 0x41, 0x31, 0x0c, 0x06, 0x14, 0xcb, 0x70, 0x48, 0x59, 0x22, + 0xdd, 0x82, 0xf6, 0xfa, 0xe0, 0xca, 0x6e, 0xec, 0xda, 0xb6, 0x69, 0xe5, 0x7e, 0xff, 0x9f, 0x75, + 0xc7, 0x2b, 0x28, 0x50, 0xd7, 0x60, 0xd0, 0x2e, 0xcc, 0x05, 0x9c, 0x84, 0xd1, 0x98, 0xa4, 0xf8, + 0x66, 0x24, 0x45, 0x8d, 0x4a, 0x59, 0x9e, 0x00, 0x98, 0xc1, 0x85, 0x07, 0xac, 0xef, 0xce, 0xe9, + 0xf6, 0xfb, 0xe6, 0xb5, 0x5b, 0x7b, 0x3e, 0xdf, 0x46, 0x8d, 0x5a, 0x53, 0x7f, 0x3c, 0x65, 0x7d, + 0x6f, 0x96, 0xa4, 0x4b, 0xd4, 0x06, 0x94, 0x08, 0x8a, 0x39, 0x1d, 0x32, 0x49, 0x31, 0x09, 0x02, + 0x4e, 0x85, 0x70, 0x4b, 0xaf, 0xed, 0xb4, 0x72, 0x22, 0xa8, 0xa7, 0x41, 0x4d, 0x83, 0x41, 0x4f, + 0x60, 0xb1, 0x4f, 0x23, 0xca, 0x89, 0x54, 0x74, 0x3f, 0x4f, 0xa8, 0x90, 0x38, 0x0c, 0xdc, 0xf9, + 0xd7, 0x52, 0x2d, 0xa4, 0x30, 0xcf, 0xa0, 0xf6, 0x03, 0xf4, 0x67, 0x07, 0x56, 0x7b, 0x8c, 0xbf, + 0x24, 0x3c, 0xc0, 0xfe, 0x20, 0xa4, 0x91, 0xc4, 0x3e, 0xe5, 0x12, 0x07, 0x54, 0x92, 0x70, 0x20, + 0xdc, 0xb2, 0x1e, 0x5e, 0xbd, 0xbb, 0x6d, 0xe7, 0xc7, 0xc6, 0xe1, 0x8e, 0xf6, 0xb7, 0x43, 0xb9, + 0xdc, 0x35, 0xde, 0x26, 0x66, 0x99, 0xdb, 0xbb, 0xc1, 0x0a, 0xfd, 0xc9, 0x81, 0x75, 0x41, 0x25, + 0xf6, 0x13, 0xce, 0x75, 0xc0, 0xd7, 0xc4, 0xbd, 0xa0, 0x8b, 0x11, 0xde, 0x6d, 0xdc, 0x1d, 0x2a, + 0x77, 0x8c, 0xcf, 0x2b, 0x41, 0x79, 0xab, 0xe2, 0x66, 0x25, 0xfa, 0x16, 0xa0, 0x98, 0xb3, 0xd3, + 0x33, 0xbc, 0xbd, 0xb5, 0xa5, 0x3c, 0xca, 0x30, 0x4a, 0xa8, 0x8b, 0xaa, 0xce, 0x66, 0xde, 0x2b, + 0x6b, 0xcd, 0xf6, 0xd6, 0xd6, 0x8e, 0x95, 0xa3, 0x3a, 0x2c, 0x9d, 0xf6, 0x7a, 0x38, 0x4a, 0x86, + 0x58, 0xf2, 0x44, 0x48, 0x1a, 0xe0, 0x13, 0x16, 0x0b, 0x77, 0xb1, 0xea, 0x6c, 0xce, 0x79, 0x0b, + 0xa7, 0xbd, 0xde, 0x41, 0x32, 0xec, 0x1a, 0x4d, 0x9b, 0xc5, 0x02, 0x51, 0xd8, 0xe6, 0x34, 0xe6, + 0x54, 0xa8, 0x32, 0x84, 0xf1, 0xe8, 0xe1, 0xa5, 0x2e, 0xc3, 0x44, 0x18, 0xf1, 0x50, 0x1d, 0x78, + 0x81, 0x5a, 0x3f, 0x72, 0x97, 0xb4, 0xf7, 0x77, 0xc7, 0xc0, 0xfd, 0x78, 0xf4, 0x70, 0xa2, 0xcf, + 0x9a, 0x42, 0x89, 0xde, 0xd7, 0x90, 0xfd, 0x78, 0xf4, 0x08, 0x7d, 0x1d, 0xe6, 0xc5, 0x8b, 0x30, + 0xc6, 0x2a, 0x38, 0x25, 0x8d, 0x02, 0x77, 0x59, 0x93, 0xcc, 0x29, 0xf1, 0x07, 0xbd, 0x5e, 0x53, + 0x0b, 0x51, 0x19, 0xb2, 0xa3, 0x90, 0xb8, 0xf7, 0xf5, 0x8f, 0xad, 0x96, 0xe8, 0x97, 0x0e, 0xcc, + 0x27, 0x71, 0x9f, 0x93, 0x20, 0x3d, 0x12, 0x84, 0xbb, 0xa2, 0xff, 0xa6, 0x8f, 0xef, 0x76, 0x87, + 0x9e, 0x19, 0x27, 0xe6, 0xfc, 0xf0, 0x4a, 0xc9, 0xc5, 0x4f, 0x81, 0x0e, 0x61, 0x51, 0x48, 0x4e, + 0xc9, 0x10, 0x4f, 0xcc, 0x17, 0xf7, 0xcd, 0x46, 0xc3, 0x82, 0xc1, 0xee, 0x5f, 0x98, 0x32, 0x7f, + 0x70, 0x60, 0x25, 0x8c, 0x24, 0xe5, 0x11, 0x19, 0x8c, 0x8b, 0x6d, 0xcf, 0xbc, 0x07, 0x9a, 0xd5, + 0xbf, 0xdb, 0xfc, 0xf6, 0xad, 0x33, 0xbb, 0x45, 0x36, 0xcf, 0xe5, 0xf0, 0x3a, 0x31, 0xea, 0xc0, + 0x72, 0x40, 0x07, 0xe4, 0x8c, 0xaa, 0x5f, 0x9b, 0x89, 0xf3, 0x84, 0x2b, 0x6f, 0x96, 0xf0, 0xa2, + 0x45, 0xef, 0x28, 0x70, 0x9a, 0xf2, 0x27, 0xb0, 0x7a, 0x9c, 0xf4, 0x7b, 0xe1, 0x29, 0xe6, 0x74, + 0x44, 0xb9, 0xa0, 0x98, 0x46, 0xea, 0xd6, 0x81, 0x19, 0x0f, 0x28, 0x77, 0x57, 0x5f, 0x37, 0x84, + 0x5a, 0x19, 0xd7, 0xf1, 0x5c, 0x43, 0xe1, 0x19, 0x86, 0x3d, 0x4d, 0x70, 0xa8, 0xf0, 0xa8, 0x0d, + 0xf3, 0xe9, 0x48, 0x4b, 0xa3, 0x7d, 0xe7, 0xcd, 0xa2, 0x2d, 0x59, 0x9c, 0x0d, 0xb4, 0xf2, 0x8f, + 0x2c, 0xcc, 0xd8, 0x73, 0x13, 0xfd, 0xce, 0x81, 0x12, 0x8b, 0xa9, 0xb1, 0x37, 0xc7, 0x8e, 0xb9, + 0x95, 0xf9, 0x5f, 0xca, 0x39, 0x5d, 0x3b, 0x4c, 0x7d, 0xa9, 0xf3, 0x6c, 0x62, 0xaa, 0xcd, 0xb1, + 0x8b, 0x2a, 0xf4, 0x1d, 0x70, 0xd3, 0x74, 0x4f, 0x28, 0x09, 0x28, 0x17, 0xb8, 0xc7, 0x38, 0x96, + 0xa4, 0x2f, 0xdc, 0x4c, 0x35, 0xbb, 0x39, 0xeb, 0x2d, 0x5b, 0x7d, 0xdb, 0xa8, 0x1f, 0x33, 0xde, + 0x25, 0x7d, 0x81, 0x7e, 0x00, 0xf3, 0x76, 0xec, 0x09, 0x32, 0x8c, 0x07, 0xea, 0xe6, 0x61, 0xae, + 0x6f, 0x8b, 0x36, 0x23, 0x75, 0xf5, 0xac, 0x1d, 0x99, 0x9b, 0xb5, 0x57, 0x32, 0xb6, 0x1d, 0x6b, + 0xaa, 0xd0, 0x9c, 0x44, 0x01, 0x1b, 0x9e, 0xa3, 0x73, 0xb7, 0xa0, 0x8d, 0xed, 0x18, 0xfd, 0x43, + 0x28, 0xb3, 0x11, 0xe5, 0x64, 0x30, 0x38, 0x87, 0x4f, 0xdf, 0x0c, 0x9f, 0xb7, 0xc6, 0x29, 0x7e, + 0xa3, 0x06, 0x73, 0x13, 0x05, 0x42, 0x05, 0x98, 0xd9, 0x3f, 0xf8, 0xb1, 0xb7, 0xd7, 0xe9, 0x94, + 0xa7, 0x10, 0xc0, 0xbd, 0x3d, 0xb3, 0x76, 0x2a, 0xb9, 0x5f, 0xfd, 0x71, 0x6d, 0xaa, 0xf2, 0x3d, + 0x58, 0xbe, 0xb6, 0xef, 0xd1, 0x57, 0xa1, 0x98, 0x44, 0xe1, 0x29, 0x16, 0xcc, 0x7f, 0x41, 0xa5, + 0xd0, 0x7b, 0x9a, 0xf7, 0x0a, 0x4a, 0xd6, 0x31, 0xa2, 0xca, 0x6f, 0x1c, 0x58, 0xbd, 0x65, 0x6c, + 0xa3, 0x87, 0x30, 0x23, 0x92, 0xe3, 0x9f, 0x51, 0x5f, 0x6a, 0xf4, 0xed, 0xe7, 0x67, 0x6a, 0x8a, + 0x10, 0xe4, 0xd4, 0x69, 0xa3, 0x4b, 0x9e, 0xf7, 0xf4, 0x5a, 0x4d, 0xbd, 0x20, 0x12, 0xba, 0x8e, + 0x79, 0x4f, 0x2d, 0x95, 0x24, 0xe1, 0xa1, 0x2e, 0x4d, 0xde, 0x53, 0xcb, 0x27, 0xb9, 0x7c, 0xa6, + 0x9c, 0xad, 0xfc, 0xdd, 0x81, 0xb9, 0x89, 0x41, 0xa5, 0x13, 0xb1, 0xe3, 0x71, 0xfc, 0x64, 0x98, + 0xf5, 0x0a, 0x56, 0xa6, 0xef, 0xf3, 0x3f, 0x85, 0x99, 0xf4, 0x1a, 0x9c, 0xb9, 0xb3, 0x6b, 0x70, + 0x4a, 0xa9, 0xca, 0x40, 0x23, 0x72, 0x3c, 0xa0, 0x81, 0x6d, 0xa3, 0x5b, 0xcb, 0x60, 0x4d, 0x37, + 0xb6, 0x61, 0x76, 0xfc, 0x0e, 0x41, 0x79, 0xc8, 0x35, 0x9f, 0x75, 0x0f, 0xcb, 0x53, 0x68, 0x16, + 0xa6, 0xdb, 0xdd, 0xee, 0xd1, 0x76, 0xd9, 0x49, 0x97, 0x8d, 0x72, 0xc6, 0xec, 0xe5, 0xc6, 0x2f, + 0xc0, 0xbd, 0xe9, 0xf4, 0x47, 0x45, 0xc8, 0x77, 0x9a, 0x07, 0xfb, 0xdd, 0xfd, 0x8f, 0xf6, 0xca, + 0x53, 0xa8, 0x0c, 0xc5, 0xc7, 0x87, 0xde, 0xf3, 0xa6, 0xb7, 0x8b, 0x0f, 0x0f, 0x9e, 0x7e, 0x58, + 0x76, 0x10, 0x82, 0x52, 0xf3, 0xe8, 0x68, 0xef, 0x60, 0x17, 0x5b, 0x45, 0x39, 0xa3, 0xac, 0x52, + 0x0c, 0xee, 0xec, 0x75, 0xcb, 0x59, 0xb4, 0x02, 0x8b, 0xcd, 0xa7, 0xcf, 0x9b, 0x1f, 0x76, 0xf0, + 0x04, 0x3c, 0x67, 0x02, 0x68, 0xb9, 0x30, 0x6f, 0x9e, 0x26, 0x22, 0xa6, 0x7e, 0xd8, 0x0b, 0x29, + 0x47, 0xd3, 0x7f, 0xfd, 0xe2, 0xb3, 0xac, 0xb3, 0xf1, 0x5b, 0x07, 0xb2, 0x5e, 0x20, 0x50, 0x17, + 0xe6, 0x26, 0x5e, 0xc7, 0xb6, 0x31, 0xd6, 0xaf, 0xb9, 0xf5, 0x9a, 0xed, 0xeb, 0x68, 0xb3, 0x56, + 0xe9, 0xf3, 0x7f, 0xaf, 0x4f, 0xe9, 0x5f, 0xfd, 0xd7, 0xfa, 0x57, 0x2f, 0xfa, 0x17, 0xb4, 0xe8, + 0x3d, 0x58, 0xb8, 0xf8, 0x24, 0x32, 0x43, 0xe8, 0xca, 0xab, 0x6c, 0xfe, 0xc2, 0xf3, 0x47, 0xfd, + 0x1a, 0x1b, 0x7f, 0x71, 0x00, 0xce, 0x37, 0x0c, 0x7d, 0x05, 0x72, 0xe3, 0xe9, 0x35, 0x01, 0xd4, + 0x62, 0xf4, 0x1e, 0xdc, 0xb3, 0xa7, 0x4f, 0x46, 0xc7, 0xbc, 0x72, 0x65, 0x17, 0x3b, 0xfa, 0x45, + 0xac, 0x86, 0x70, 0x7b, 0xca, 0xb3, 0xc6, 0xe8, 0xbb, 0x50, 0x54, 0x6d, 0x17, 0x4c, 0x3e, 0xd7, + 0x96, 0xae, 0x80, 0x9b, 0xd1, 0x99, 0x7a, 0xa2, 0x69, 0x5b, 0x13, 0x63, 0x6b, 0x0e, 0x0a, 0x36, + 0x21, 0x25, 0x7d, 0x92, 0xcb, 0x67, 0xcb, 0xb9, 0xd6, 0x07, 0x9f, 0xbf, 0x5a, 0x73, 0xfe, 0xf5, + 0x6a, 0xcd, 0xf9, 0xef, 0xab, 0x35, 0x07, 0x76, 0x43, 0x66, 0x4a, 0xa7, 0x2f, 0x3a, 0x6f, 0xd9, + 0xb5, 0x47, 0xce, 0x47, 0x99, 0x51, 0xe3, 0xf8, 0x9e, 0x8e, 0xe5, 0xdb, 0xff, 0x0b, 0x00, 0x00, + 0xff, 0xff, 0xeb, 0xea, 0x36, 0x16, 0x60, 0x11, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mongo_proxy/v2/mongo_proxy.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mongo_proxy/v2/mongo_proxy.pb.go index 4def4a87a64b..81fb028cfa68 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mongo_proxy/v2/mongo_proxy.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mongo_proxy/v2/mongo_proxy.pb.go @@ -47,7 +47,7 @@ func (m *MongoProxy) Reset() { *m = MongoProxy{} } func (m *MongoProxy) String() string { return proto.CompactTextString(m) } func (*MongoProxy) ProtoMessage() {} func (*MongoProxy) Descriptor() ([]byte, []int) { - return fileDescriptor_mongo_proxy_c181d629f222aba8, []int{0} + return fileDescriptor_mongo_proxy_c8e636eeda6ddb83, []int{0} } func (m *MongoProxy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -477,28 +477,29 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/mongo_proxy/v2/mongo_proxy.proto", fileDescriptor_mongo_proxy_c181d629f222aba8) + proto.RegisterFile("envoy/config/filter/network/mongo_proxy/v2/mongo_proxy.proto", fileDescriptor_mongo_proxy_c8e636eeda6ddb83) } -var fileDescriptor_mongo_proxy_c181d629f222aba8 = []byte{ - // 292 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x8f, 0x31, 0x4b, 0xc4, 0x30, - 0x18, 0x86, 0xc9, 0xdd, 0x29, 0x36, 0xb7, 0x48, 0x45, 0x2c, 0x07, 0x96, 0xe2, 0x54, 0x6e, 0x48, - 0x20, 0xae, 0xe2, 0x70, 0x1c, 0x4e, 0x1e, 0x1c, 0x1d, 0x5d, 0x4a, 0x6c, 0xd3, 0x12, 0x6c, 0x9b, - 0x92, 0x7e, 0xc6, 0xeb, 0x5f, 0x73, 0x72, 0x14, 0x5c, 0xfc, 0x09, 0xd2, 0xcd, 0x7f, 0x21, 0x69, - 0x4e, 0xb8, 0xe1, 0xb6, 0x2f, 0x79, 0xde, 0xe7, 0x4d, 0x3e, 0x7c, 0x27, 0x1a, 0xa3, 0x7a, 0x9a, - 0xa9, 0xa6, 0x90, 0x25, 0x2d, 0x64, 0x05, 0x42, 0xd3, 0x46, 0xc0, 0x9b, 0xd2, 0x2f, 0xb4, 0x56, - 0x4d, 0xa9, 0xd2, 0x56, 0xab, 0x5d, 0x4f, 0x0d, 0x3b, 0x3c, 0x92, 0x56, 0x2b, 0x50, 0xfe, 0x72, - 0xb4, 0x89, 0xb3, 0x89, 0xb3, 0xc9, 0xde, 0x26, 0x87, 0x71, 0xc3, 0x16, 0xf1, 0xb1, 0x97, 0x0a, - 0xfe, 0x5a, 0x81, 0xed, 0x1e, 0x07, 0xd7, 0xba, 0xb8, 0x32, 0xbc, 0x92, 0x39, 0x07, 0x41, 0xff, - 0x07, 0x07, 0x6e, 0xbe, 0x10, 0xc6, 0x1b, 0xdb, 0xba, 0xb5, 0xa5, 0xfe, 0x12, 0xcf, 0x3b, 0xe0, - 0x90, 0xb6, 0x5a, 0x14, 0x72, 0x17, 0xa0, 0x08, 0xc5, 0xde, 0xca, 0x7b, 0xff, 0xfd, 0x98, 0xce, - 0xf4, 0x24, 0x42, 0x09, 0xb6, 0x74, 0x3b, 0x42, 0xff, 0x1a, 0x63, 0x9e, 0x65, 0xa2, 0xeb, 0xd2, - 0x4a, 0x95, 0xc1, 0xc4, 0x46, 0x13, 0xcf, 0xdd, 0x3c, 0xaa, 0xd2, 0xbf, 0xc7, 0x27, 0xb9, 0xa8, - 0x78, 0x1f, 0x4c, 0x23, 0x14, 0xcf, 0x59, 0x4c, 0x8e, 0x2d, 0xe6, 0xfe, 0x68, 0x18, 0x79, 0xb0, - 0xc3, 0xda, 0xe6, 0x13, 0xa7, 0xf9, 0x0c, 0x5f, 0x8a, 0x5a, 0x42, 0x9a, 0xf7, 0x0d, 0xaf, 0x65, - 0x96, 0xd6, 0x02, 0x78, 0xce, 0x81, 0x07, 0xb3, 0x08, 0xc5, 0x67, 0xc9, 0x85, 0x85, 0x6b, 0xc7, - 0x36, 0x7b, 0xb4, 0x3a, 0xff, 0x1c, 0x42, 0xf4, 0x3d, 0x84, 0xe8, 0x67, 0x08, 0xd1, 0xd3, 0xc4, - 0xb0, 0xe7, 0xd3, 0x71, 0xcd, 0xdb, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xda, 0x13, 0x09, 0xf8, - 0x95, 0x01, 0x00, 0x00, +var fileDescriptor_mongo_proxy_c8e636eeda6ddb83 = []byte{ + // 306 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x31, 0x4b, 0xc4, 0x30, + 0x1c, 0xc5, 0xc9, 0xdd, 0x29, 0x5e, 0x6e, 0xab, 0x88, 0xe5, 0xc0, 0xa3, 0x38, 0x95, 0x1b, 0x12, + 0x88, 0x8b, 0x83, 0x38, 0x1c, 0x87, 0xd3, 0x1d, 0x94, 0x8e, 0x2e, 0x25, 0xb6, 0x69, 0x09, 0xb6, + 0xfd, 0x97, 0x34, 0xc6, 0xeb, 0x57, 0x73, 0x72, 0x14, 0x5c, 0xfc, 0x08, 0xd2, 0xcd, 0x6f, 0x21, + 0x69, 0x4e, 0xb8, 0xe1, 0x06, 0xb7, 0x7f, 0xf2, 0x7b, 0xef, 0xfd, 0x93, 0x87, 0xef, 0x44, 0x6d, + 0xa0, 0xa3, 0x29, 0xd4, 0xb9, 0x2c, 0x68, 0x2e, 0x4b, 0x2d, 0x14, 0xad, 0x85, 0x7e, 0x05, 0xf5, + 0x4c, 0x2b, 0xa8, 0x0b, 0x48, 0x1a, 0x05, 0xbb, 0x8e, 0x1a, 0x76, 0x78, 0x24, 0x8d, 0x02, 0x0d, + 0xde, 0x72, 0x70, 0x13, 0xe7, 0x26, 0xce, 0x4d, 0xf6, 0x6e, 0x72, 0x28, 0x37, 0x6c, 0x1e, 0x1e, + 0xdb, 0x94, 0xf3, 0x97, 0x52, 0xdb, 0xec, 0x61, 0x70, 0xa9, 0xf3, 0x4b, 0xc3, 0x4b, 0x99, 0x71, + 0x2d, 0xe8, 0xdf, 0xe0, 0xc0, 0xf5, 0x27, 0xc2, 0x78, 0x6b, 0x53, 0x23, 0x1b, 0xea, 0x2d, 0xf1, + 0xac, 0xd5, 0x5c, 0x27, 0x8d, 0x12, 0xb9, 0xdc, 0xf9, 0x28, 0x40, 0xe1, 0x74, 0x35, 0x7d, 0xfb, + 0x79, 0x1f, 0x4f, 0xd4, 0x28, 0x40, 0x31, 0xb6, 0x34, 0x1a, 0xa0, 0x77, 0x85, 0x31, 0x4f, 0x53, + 0xd1, 0xb6, 0x49, 0x09, 0x85, 0x3f, 0xb2, 0xd2, 0x78, 0xea, 0x6e, 0x36, 0x50, 0x78, 0xf7, 0xf8, + 0x24, 0x13, 0x25, 0xef, 0xfc, 0x71, 0x80, 0xc2, 0x19, 0x0b, 0xc9, 0xb1, 0x8f, 0xb9, 0x37, 0x1a, + 0x46, 0x1e, 0xec, 0xb0, 0xb6, 0xfa, 0xd8, 0xd9, 0x3c, 0x86, 0x2f, 0x44, 0x25, 0x75, 0x92, 0x75, + 0x35, 0xaf, 0x64, 0x9a, 0x54, 0x42, 0xf3, 0x8c, 0x6b, 0xee, 0x4f, 0x02, 0x14, 0x9e, 0xc5, 0xe7, + 0x16, 0xae, 0x1d, 0xdb, 0xee, 0xd1, 0x6a, 0xf3, 0xd1, 0x2f, 0xd0, 0x57, 0xbf, 0x40, 0xdf, 0xfd, + 0x02, 0xe1, 0x5b, 0x09, 0x6e, 0xa9, 0x2b, 0xec, 0xff, 0xc5, 0x46, 0xe8, 0x71, 0x64, 0xd8, 0xd3, + 0xe9, 0x50, 0xd1, 0xcd, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8b, 0x75, 0x11, 0x80, 0xd1, 0x01, + 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.pb.go new file mode 100644 index 000000000000..e4bb7fd7ae76 --- /dev/null +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.pb.go @@ -0,0 +1,398 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.proto + +package v1alpha1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/lyft/protoc-gen-validate/validate" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +// [#protodoc-title: MySQL proxy] +// MySQL Proxy :ref:`configuration overview `. +type MySQLProxy struct { + // The human readable prefix to use when emitting :ref:`statistics + // `. + StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"` + // [#not-implemented-hide:] The optional path to use for writing MySQL access logs. + // If the access log field is empty, access logs will not be written. + AccessLog string `protobuf:"bytes,2,opt,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MySQLProxy) Reset() { *m = MySQLProxy{} } +func (m *MySQLProxy) String() string { return proto.CompactTextString(m) } +func (*MySQLProxy) ProtoMessage() {} +func (*MySQLProxy) Descriptor() ([]byte, []int) { + return fileDescriptor_mysql_proxy_ea6ac70602b155ef, []int{0} +} +func (m *MySQLProxy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MySQLProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MySQLProxy.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *MySQLProxy) XXX_Merge(src proto.Message) { + xxx_messageInfo_MySQLProxy.Merge(dst, src) +} +func (m *MySQLProxy) XXX_Size() int { + return m.Size() +} +func (m *MySQLProxy) XXX_DiscardUnknown() { + xxx_messageInfo_MySQLProxy.DiscardUnknown(m) +} + +var xxx_messageInfo_MySQLProxy proto.InternalMessageInfo + +func (m *MySQLProxy) GetStatPrefix() string { + if m != nil { + return m.StatPrefix + } + return "" +} + +func (m *MySQLProxy) GetAccessLog() string { + if m != nil { + return m.AccessLog + } + return "" +} + +func init() { + proto.RegisterType((*MySQLProxy)(nil), "envoy.config.filter.network.mysql_proxy.v1alpha1.MySQLProxy") +} +func (m *MySQLProxy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MySQLProxy) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.StatPrefix) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintMysqlProxy(dAtA, i, uint64(len(m.StatPrefix))) + i += copy(dAtA[i:], m.StatPrefix) + } + if len(m.AccessLog) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintMysqlProxy(dAtA, i, uint64(len(m.AccessLog))) + i += copy(dAtA[i:], m.AccessLog) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeVarintMysqlProxy(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *MySQLProxy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.StatPrefix) + if l > 0 { + n += 1 + l + sovMysqlProxy(uint64(l)) + } + l = len(m.AccessLog) + if l > 0 { + n += 1 + l + sovMysqlProxy(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovMysqlProxy(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozMysqlProxy(x uint64) (n int) { + return sovMysqlProxy(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MySQLProxy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMysqlProxy + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MySQLProxy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MySQLProxy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StatPrefix", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMysqlProxy + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMysqlProxy + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StatPrefix = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessLog", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMysqlProxy + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMysqlProxy + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AccessLog = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipMysqlProxy(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthMysqlProxy + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipMysqlProxy(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMysqlProxy + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMysqlProxy + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMysqlProxy + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthMysqlProxy + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMysqlProxy + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipMysqlProxy(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthMysqlProxy = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowMysqlProxy = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.proto", fileDescriptor_mysql_proxy_ea6ac70602b155ef) +} + +var fileDescriptor_mysql_proxy_ea6ac70602b155ef = []byte{ + // 230 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x4a, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2, + 0xcf, 0x4b, 0x2d, 0x29, 0xcf, 0x2f, 0xca, 0xd6, 0xcf, 0xad, 0x2c, 0x2e, 0xcc, 0x89, 0x2f, 0x28, + 0xca, 0xaf, 0xa8, 0xd4, 0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0x44, 0x16, 0xd4, 0x2b, + 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x32, 0x00, 0x9b, 0xa1, 0x07, 0x31, 0x43, 0x0f, 0x62, 0x86, 0x1e, + 0xd4, 0x0c, 0x3d, 0x64, 0xe5, 0x30, 0x33, 0xa4, 0xc4, 0xcb, 0x12, 0x73, 0x32, 0x53, 0x12, 0x4b, + 0x52, 0xf5, 0x61, 0x0c, 0x88, 0x51, 0x4a, 0xe1, 0x5c, 0x5c, 0xbe, 0x95, 0xc1, 0x81, 0x3e, 0x01, + 0x20, 0xf5, 0x42, 0x5a, 0x5c, 0xdc, 0xc5, 0x25, 0x89, 0x25, 0xf1, 0x05, 0x45, 0xa9, 0x69, 0x99, + 0x15, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x4e, 0x9c, 0xbb, 0x5e, 0x1e, 0x60, 0x66, 0x29, 0x62, + 0x52, 0x60, 0x0c, 0xe2, 0x02, 0xc9, 0x06, 0x80, 0x25, 0x85, 0x64, 0xb9, 0xb8, 0x12, 0x93, 0x93, + 0x53, 0x8b, 0x8b, 0xe3, 0x73, 0xf2, 0xd3, 0x25, 0x98, 0x40, 0x4a, 0x83, 0x38, 0x21, 0x22, 0x3e, + 0xf9, 0xe9, 0x4e, 0x11, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, + 0x23, 0x97, 0x5d, 0x66, 0xbe, 0x1e, 0xd8, 0xd1, 0x10, 0x77, 0x91, 0xea, 0xfe, 0x00, 0xc6, 0x28, + 0x0e, 0x18, 0x3b, 0x89, 0x0d, 0xec, 0x72, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x99, + 0x1a, 0xb1, 0x4a, 0x01, 0x00, 0x00, +} diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.pb.validate.go new file mode 100644 index 000000000000..306c6c8e63c0 --- /dev/null +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.pb.validate.go @@ -0,0 +1,85 @@ +// Code generated by protoc-gen-validate +// source: envoy/config/filter/network/mysql_proxy/v1alpha1/mysql_proxy.proto +// DO NOT EDIT!!! + +package v1alpha1 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/gogo/protobuf/types" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = types.DynamicAny{} +) + +// Validate checks the field values on MySQLProxy with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *MySQLProxy) Validate() error { + if m == nil { + return nil + } + + if len(m.GetStatPrefix()) < 1 { + return MySQLProxyValidationError{ + Field: "StatPrefix", + Reason: "value length must be at least 1 bytes", + } + } + + // no validation rules for AccessLog + + return nil +} + +// MySQLProxyValidationError is the validation error returned by +// MySQLProxy.Validate if the designated constraints aren't met. +type MySQLProxyValidationError struct { + Field string + Reason string + Cause error + Key bool +} + +// Error satisfies the builtin error interface +func (e MySQLProxyValidationError) Error() string { + cause := "" + if e.Cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.Cause) + } + + key := "" + if e.Key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMySQLProxy.%s: %s%s", + key, + e.Field, + e.Reason, + cause) +} + +var _ error = MySQLProxyValidationError{} diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/rate_limit/v2/rate_limit.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/rate_limit/v2/rate_limit.pb.go index e5c55c934174..6b807db9316f 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/rate_limit/v2/rate_limit.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/rate_limit/v2/rate_limit.pb.go @@ -60,7 +60,7 @@ func (m *RateLimit) Reset() { *m = RateLimit{} } func (m *RateLimit) String() string { return proto.CompactTextString(m) } func (*RateLimit) ProtoMessage() {} func (*RateLimit) Descriptor() ([]byte, []int) { - return fileDescriptor_rate_limit_2ae29e2b9f4c0f4c, []int{0} + return fileDescriptor_rate_limit_75a078a1b4a188a4, []int{0} } func (m *RateLimit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -600,35 +600,36 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/rate_limit/v2/rate_limit.proto", fileDescriptor_rate_limit_2ae29e2b9f4c0f4c) + proto.RegisterFile("envoy/config/filter/network/rate_limit/v2/rate_limit.proto", fileDescriptor_rate_limit_75a078a1b4a188a4) } -var fileDescriptor_rate_limit_2ae29e2b9f4c0f4c = []byte{ - // 410 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x52, 0xcf, 0x8e, 0x94, 0x30, - 0x18, 0x4f, 0x99, 0xd9, 0x71, 0xa7, 0x1c, 0x5c, 0x1b, 0x13, 0x71, 0x0f, 0x88, 0x9a, 0x18, 0x5c, - 0x93, 0x36, 0xe2, 0x49, 0x8f, 0x38, 0x47, 0x4d, 0x0c, 0x9e, 0xf4, 0x42, 0xba, 0xc3, 0x07, 0x69, - 0x04, 0x4a, 0x4a, 0xa9, 0xce, 0x6b, 0x78, 0xf2, 0x59, 0x3c, 0x79, 0xf4, 0xe8, 0x1b, 0x68, 0xe6, - 0xe6, 0x43, 0x98, 0x18, 0x28, 0x0c, 0xb3, 0x73, 0xfb, 0xb5, 0xbf, 0x3f, 0x5f, 0xbf, 0x1f, 0xe0, - 0x57, 0x50, 0x1b, 0xb9, 0x63, 0x5b, 0x59, 0xe7, 0xa2, 0x60, 0xb9, 0x28, 0x35, 0x28, 0x56, 0x83, - 0xfe, 0x2c, 0xd5, 0x27, 0xa6, 0xb8, 0x86, 0xb4, 0x14, 0x95, 0xd0, 0xcc, 0x44, 0x47, 0x27, 0xda, - 0x28, 0xa9, 0x25, 0x79, 0x3a, 0x78, 0xa9, 0xf5, 0x52, 0xeb, 0xa5, 0xa3, 0x97, 0x1e, 0xa9, 0x4d, - 0x74, 0xf9, 0xc4, 0x8e, 0xe1, 0x8d, 0x98, 0x92, 0x6c, 0xec, 0x01, 0xd9, 0xc8, 0xcb, 0xc7, 0x37, - 0x9e, 0x33, 0xeb, 0x7a, 0x53, 0xd9, 0x8e, 0x22, 0xbf, 0x90, 0xb2, 0x28, 0x81, 0x0d, 0xa7, 0xeb, - 0x2e, 0x67, 0x59, 0xa7, 0xb8, 0x16, 0xb2, 0x1e, 0xf9, 0x7b, 0x86, 0x97, 0x22, 0xe3, 0x1a, 0xd8, - 0x04, 0x46, 0xe2, 0x6e, 0x21, 0x0b, 0x39, 0x40, 0xd6, 0x23, 0x7b, 0xfb, 0xe8, 0x9f, 0x83, 0xd7, - 0x09, 0xd7, 0xf0, 0xa6, 0x9f, 0x44, 0xae, 0xb0, 0xdb, 0x6a, 0xae, 0xd3, 0x46, 0x41, 0x2e, 0xbe, - 0x78, 0x28, 0x40, 0xe1, 0x3a, 0x5e, 0x7f, 0xff, 0xfb, 0x63, 0xb1, 0x54, 0x4e, 0x80, 0x12, 0xdc, - 0xb3, 0xef, 0x06, 0x92, 0x3c, 0xc4, 0xab, 0x4c, 0x56, 0x5c, 0xd4, 0x9e, 0x73, 0x2a, 0x1b, 0x09, - 0xf2, 0x01, 0xbb, 0x19, 0xb4, 0x5b, 0x25, 0x1a, 0x2d, 0x55, 0xeb, 0x2d, 0x82, 0x45, 0xe8, 0x46, - 0xcf, 0xa8, 0x6d, 0x8e, 0x37, 0x82, 0x9a, 0x88, 0xce, 0x25, 0x1c, 0x9e, 0xb1, 0x39, 0x78, 0x62, - 0xdc, 0x87, 0x9e, 0x7d, 0x45, 0xce, 0x39, 0x4a, 0x8e, 0xb3, 0xc8, 0x4b, 0x7c, 0x4b, 0x8b, 0x0a, - 0x64, 0xa7, 0xbd, 0x65, 0x80, 0x42, 0x37, 0xba, 0x4f, 0x6d, 0x31, 0x74, 0x2a, 0x86, 0x6e, 0xc6, - 0x62, 0xe2, 0xe5, 0xb7, 0xdf, 0x0f, 0x50, 0x32, 0xe9, 0xc9, 0x15, 0xbe, 0x93, 0x73, 0x51, 0x76, - 0x0a, 0xd2, 0x4a, 0x66, 0x90, 0x66, 0x50, 0xef, 0xbc, 0xb3, 0x00, 0x85, 0xe7, 0xc9, 0xed, 0x91, - 0x78, 0x2b, 0x33, 0xd8, 0x40, 0xbd, 0x23, 0x29, 0x26, 0xf3, 0xb7, 0x4c, 0x5b, 0x50, 0x46, 0x6c, - 0xc1, 0x5b, 0x0d, 0x13, 0x9f, 0xd3, 0x1b, 0xbf, 0xc0, 0xbc, 0x88, 0x89, 0xe6, 0x5d, 0xde, 0x5b, - 0xcb, 0xeb, 0x41, 0x93, 0x5c, 0xa8, 0x93, 0xfb, 0xf8, 0xe2, 0xe7, 0xde, 0x47, 0xbf, 0xf6, 0x3e, - 0xfa, 0xb3, 0xf7, 0xd1, 0x47, 0xc7, 0x44, 0xd7, 0xab, 0x61, 0x81, 0x17, 0xff, 0x03, 0x00, 0x00, - 0xff, 0xff, 0x53, 0x89, 0x60, 0xa9, 0x9d, 0x02, 0x00, 0x00, +var fileDescriptor_rate_limit_75a078a1b4a188a4 = []byte{ + // 427 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x3f, 0x8f, 0xd3, 0x30, + 0x14, 0x97, 0xd3, 0x5e, 0xb9, 0xba, 0x03, 0x60, 0x21, 0x11, 0x6e, 0x28, 0x01, 0x24, 0x54, 0x0e, + 0xc9, 0x16, 0x61, 0x40, 0x30, 0x96, 0x6e, 0x80, 0x74, 0x0a, 0x13, 0x2c, 0x91, 0xaf, 0x79, 0x89, + 0x2c, 0xd2, 0xbc, 0xc8, 0x71, 0xcd, 0xe5, 0x6b, 0x30, 0xf1, 0x59, 0x98, 0x18, 0x19, 0xf9, 0x06, + 0xa0, 0x6e, 0x7c, 0x08, 0x24, 0x94, 0x38, 0x69, 0x7a, 0x9d, 0xd8, 0x9e, 0xfd, 0xfb, 0xf3, 0xfc, + 0x7e, 0x7e, 0xf4, 0x15, 0x14, 0x16, 0x6b, 0xb1, 0xc6, 0x22, 0x55, 0x99, 0x48, 0x55, 0x6e, 0x40, + 0x8b, 0x02, 0xcc, 0x67, 0xd4, 0x9f, 0x84, 0x96, 0x06, 0xe2, 0x5c, 0x6d, 0x94, 0x11, 0x36, 0x3c, + 0x38, 0xf1, 0x52, 0xa3, 0x41, 0xf6, 0xa4, 0xd5, 0x72, 0xa7, 0xe5, 0x4e, 0xcb, 0x3b, 0x2d, 0x3f, + 0x60, 0xdb, 0xf0, 0xec, 0xb1, 0x6b, 0x23, 0x4b, 0xd5, 0x3b, 0x39, 0xdb, 0x7d, 0xe5, 0x2c, 0xcf, + 0x1e, 0x5d, 0x7b, 0xce, 0xc0, 0x6b, 0x44, 0x79, 0xd5, 0x91, 0xe6, 0x19, 0x62, 0x96, 0x83, 0x68, + 0x4f, 0x97, 0xdb, 0x54, 0x24, 0x5b, 0x2d, 0x8d, 0xc2, 0xa2, 0xc3, 0xef, 0x5a, 0x99, 0xab, 0x44, + 0x1a, 0x10, 0x7d, 0xd1, 0x01, 0x77, 0x32, 0xcc, 0xb0, 0x2d, 0x45, 0x53, 0xb9, 0xdb, 0x87, 0x7f, + 0x3d, 0x3a, 0x8d, 0xa4, 0x81, 0xb7, 0x4d, 0x27, 0x76, 0x4e, 0x67, 0x95, 0x91, 0x26, 0x2e, 0x35, + 0xa4, 0xea, 0xca, 0x27, 0x01, 0x59, 0x4c, 0x97, 0xd3, 0x6f, 0x7f, 0xbe, 0x8f, 0xc6, 0xda, 0x0b, + 0x48, 0x44, 0x1b, 0xf4, 0xa2, 0x05, 0xd9, 0x03, 0x3a, 0x49, 0x70, 0x23, 0x55, 0xe1, 0x7b, 0xc7, + 0xb4, 0x0e, 0x60, 0x1f, 0xe8, 0x2c, 0x81, 0x6a, 0xad, 0x55, 0x69, 0x50, 0x57, 0xfe, 0x28, 0x18, + 0x2d, 0x66, 0xe1, 0x53, 0xee, 0x92, 0x93, 0xa5, 0xe2, 0x36, 0xe4, 0x43, 0x08, 0xfb, 0x67, 0xac, + 0xf6, 0x9a, 0x25, 0x6d, 0x4c, 0x4f, 0xbe, 0x10, 0xef, 0x94, 0x44, 0x87, 0x5e, 0xec, 0x25, 0xbd, + 0x61, 0xd4, 0x06, 0x70, 0x6b, 0xfc, 0x71, 0x40, 0x16, 0xb3, 0xf0, 0x1e, 0x77, 0xc1, 0xf0, 0x3e, + 0x18, 0xbe, 0xea, 0x82, 0x59, 0x8e, 0xbf, 0xfe, 0xba, 0x4f, 0xa2, 0x9e, 0xcf, 0xce, 0xe9, 0xed, + 0x54, 0xaa, 0x7c, 0xab, 0x21, 0xde, 0x60, 0x02, 0x71, 0x02, 0x45, 0xed, 0x9f, 0x04, 0x64, 0x71, + 0x1a, 0xdd, 0xec, 0x80, 0x77, 0x98, 0xc0, 0x0a, 0x8a, 0x9a, 0xc5, 0x94, 0x0d, 0x7f, 0x19, 0x57, + 0xa0, 0xad, 0x5a, 0x83, 0x3f, 0x69, 0x3b, 0x3e, 0xe3, 0xd7, 0x56, 0x60, 0x18, 0xc4, 0x86, 0xc3, + 0x2c, 0xef, 0x9d, 0xe4, 0x75, 0xcb, 0x89, 0x6e, 0xe9, 0xa3, 0xfb, 0xe5, 0x9b, 0x1f, 0xbb, 0x39, + 0xf9, 0xb9, 0x9b, 0x93, 0xdf, 0xbb, 0x39, 0xa1, 0x2f, 0x14, 0x3a, 0xd3, 0x52, 0xe3, 0x55, 0xcd, + 0xff, 0x7b, 0xc5, 0x2e, 0xc8, 0x47, 0xcf, 0x86, 0x97, 0x93, 0x76, 0xf6, 0xe7, 0xff, 0x02, 0x00, + 0x00, 0xff, 0xff, 0x6a, 0x0e, 0x23, 0x69, 0xd8, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/rbac/v2/rbac.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/rbac/v2/rbac.pb.go index dad00d3a7fb8..8b921a69d03f 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/rbac/v2/rbac.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/rbac/v2/rbac.pb.go @@ -48,7 +48,7 @@ func (x RBAC_EnforcementType) String() string { return proto.EnumName(RBAC_EnforcementType_name, int32(x)) } func (RBAC_EnforcementType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_rbac_4b235298fee4cc58, []int{0, 0} + return fileDescriptor_rbac_74e666a589c79b1b, []int{0, 0} } // RBAC network filter config. @@ -80,7 +80,7 @@ func (m *RBAC) Reset() { *m = RBAC{} } func (m *RBAC) String() string { return proto.CompactTextString(m) } func (*RBAC) ProtoMessage() {} func (*RBAC) Descriptor() ([]byte, []int) { - return fileDescriptor_rbac_4b235298fee4cc58, []int{0} + return fileDescriptor_rbac_74e666a589c79b1b, []int{0} } func (m *RBAC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -513,31 +513,32 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/rbac/v2/rbac.proto", fileDescriptor_rbac_4b235298fee4cc58) + proto.RegisterFile("envoy/config/filter/network/rbac/v2/rbac.proto", fileDescriptor_rbac_74e666a589c79b1b) } -var fileDescriptor_rbac_4b235298fee4cc58 = []byte{ - // 347 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x31, 0x4f, 0xfa, 0x40, - 0x18, 0xc6, 0xff, 0x57, 0xf8, 0x9b, 0x70, 0x18, 0x68, 0x1a, 0xa3, 0x84, 0x01, 0x1b, 0x74, 0x20, - 0x0e, 0x77, 0x49, 0x8d, 0x83, 0x83, 0x83, 0x25, 0x35, 0x61, 0xb0, 0x35, 0xa5, 0x0c, 0xba, 0x5c, - 0x0e, 0xb8, 0x42, 0x63, 0xed, 0x35, 0xc7, 0x59, 0xe4, 0xab, 0x39, 0x39, 0x3a, 0x1a, 0x3f, 0x81, - 0x61, 0xf3, 0x5b, 0x18, 0xae, 0x35, 0x5a, 0x27, 0xa6, 0x7b, 0x72, 0xcf, 0xef, 0x79, 0xde, 0x37, - 0x2f, 0x44, 0x2c, 0xc9, 0xf8, 0x0a, 0x4f, 0x78, 0x12, 0x46, 0x33, 0x1c, 0x46, 0xb1, 0x64, 0x02, - 0x27, 0x4c, 0x2e, 0xb9, 0xb8, 0xc7, 0x62, 0x4c, 0x27, 0x38, 0xb3, 0xd4, 0x8b, 0x52, 0xc1, 0x25, - 0x37, 0x8e, 0x14, 0x8f, 0x72, 0x1e, 0xe5, 0x3c, 0x2a, 0x78, 0xa4, 0xb8, 0xcc, 0x6a, 0x1f, 0x97, - 0x4a, 0x8b, 0x16, 0x1a, 0xa7, 0x73, 0xfa, 0xab, 0xaa, 0x7d, 0x90, 0xd1, 0x38, 0x9a, 0x52, 0xc9, - 0xf0, 0xb7, 0x28, 0x8c, 0xbd, 0x19, 0x9f, 0x71, 0x25, 0xf1, 0x46, 0xe5, 0xbf, 0xdd, 0x77, 0x0d, - 0x56, 0x7d, 0xfb, 0xb2, 0x6f, 0x9c, 0xc1, 0xff, 0xe2, 0x31, 0x66, 0x8b, 0x16, 0x30, 0x41, 0xaf, - 0x6e, 0x1d, 0xa2, 0xd2, 0x4a, 0xc5, 0x0e, 0x6a, 0x1a, 0xda, 0xf0, 0x7e, 0x4e, 0x1b, 0x36, 0xdc, - 0x5d, 0xcc, 0xe9, 0x94, 0x2f, 0x49, 0x9e, 0xd6, 0xb6, 0x4b, 0xd7, 0xf3, 0x90, 0xaf, 0x3a, 0x4e, - 0x60, 0x7d, 0x21, 0xa9, 0x24, 0xa9, 0x60, 0x61, 0xf4, 0xd4, 0xaa, 0x98, 0xa0, 0x57, 0xb3, 0x6b, - 0xcf, 0x9f, 0x2f, 0x95, 0xaa, 0xd0, 0x4c, 0xe0, 0xc3, 0x8d, 0x7b, 0xa3, 0x4c, 0x63, 0x0a, 0x75, - 0x96, 0x84, 0x5c, 0x4c, 0xd8, 0x03, 0x4b, 0x24, 0x91, 0xab, 0x94, 0xb5, 0xaa, 0x26, 0xe8, 0x35, - 0xac, 0x73, 0xb4, 0xc5, 0x11, 0xd5, 0x74, 0xe4, 0xfc, 0x34, 0x04, 0xab, 0x94, 0xf9, 0x4d, 0x56, - 0xfe, 0xe8, 0x5e, 0xc0, 0xe6, 0x1f, 0xc6, 0x68, 0xc3, 0x7d, 0xcf, 0x75, 0x48, 0x30, 0xb8, 0x76, - 0x88, 0xe7, 0x92, 0xab, 0x81, 0x3f, 0x0c, 0x88, 0x7d, 0x1b, 0x38, 0xfa, 0x3f, 0xa3, 0x01, 0x61, - 0xdf, 0x73, 0x83, 0x81, 0x3b, 0xf2, 0x46, 0x43, 0x1d, 0xd8, 0xfa, 0xeb, 0xba, 0x03, 0xde, 0xd6, - 0x1d, 0xf0, 0xb1, 0xee, 0x80, 0x3b, 0x2d, 0xb3, 0xc6, 0x3b, 0xea, 0xda, 0xa7, 0x5f, 0x01, 0x00, - 0x00, 0xff, 0xff, 0xda, 0xe1, 0x48, 0x5b, 0x19, 0x02, 0x00, 0x00, +var fileDescriptor_rbac_74e666a589c79b1b = []byte{ + // 361 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x31, 0x4f, 0xf2, 0x40, + 0x1c, 0xc6, 0xdf, 0x2b, 0xbc, 0x6f, 0xc2, 0xf1, 0x06, 0x48, 0x63, 0x94, 0x30, 0x60, 0x83, 0x0e, + 0xc4, 0xe1, 0x1a, 0x6b, 0x1c, 0x1c, 0x1c, 0x2c, 0xa9, 0x09, 0x83, 0x2d, 0x29, 0x65, 0xd0, 0xe5, + 0x72, 0xc0, 0x15, 0x1a, 0x6b, 0xaf, 0x39, 0xce, 0x42, 0xbf, 0x9a, 0x93, 0xa3, 0xa3, 0xf1, 0x13, + 0x18, 0x36, 0xbf, 0x85, 0xe1, 0xae, 0x46, 0x71, 0x62, 0xea, 0x3f, 0xff, 0xe7, 0xf7, 0x3c, 0xff, + 0x27, 0x3d, 0x88, 0x68, 0x92, 0xb1, 0xdc, 0x9c, 0xb0, 0x24, 0x8c, 0x66, 0x66, 0x18, 0xc5, 0x82, + 0x72, 0x33, 0xa1, 0x62, 0xc9, 0xf8, 0xbd, 0xc9, 0xc7, 0x64, 0x62, 0x66, 0x96, 0xfc, 0xa2, 0x94, + 0x33, 0xc1, 0xf4, 0x23, 0xc9, 0x23, 0xc5, 0x23, 0xc5, 0xa3, 0x82, 0x47, 0x92, 0xcb, 0xac, 0xd6, + 0xf1, 0x56, 0x68, 0x91, 0x42, 0xe2, 0x74, 0x4e, 0x7e, 0x44, 0xb5, 0x0e, 0x32, 0x12, 0x47, 0x53, + 0x22, 0xa8, 0xf9, 0x35, 0x14, 0xc2, 0xde, 0x8c, 0xcd, 0x98, 0x1c, 0xcd, 0xcd, 0xa4, 0xb6, 0x9d, + 0x37, 0x0d, 0x96, 0x7d, 0xfb, 0xaa, 0xa7, 0x9f, 0xc3, 0xbf, 0xfc, 0x31, 0xa6, 0x8b, 0x26, 0x30, + 0x40, 0xb7, 0x6a, 0x1d, 0xa2, 0xad, 0x4a, 0x45, 0x07, 0x79, 0x0d, 0x6d, 0x78, 0x5f, 0xd1, 0xba, + 0x0d, 0xff, 0x2f, 0xe6, 0x64, 0xca, 0x96, 0x58, 0xb9, 0xb5, 0xdd, 0xdc, 0x55, 0x65, 0xf2, 0x65, + 0xc6, 0x09, 0xac, 0x2e, 0x04, 0x11, 0x38, 0xe5, 0x34, 0x8c, 0x56, 0xcd, 0x92, 0x01, 0xba, 0x15, + 0xbb, 0xf2, 0xf4, 0xf1, 0x5c, 0x2a, 0x73, 0xcd, 0x00, 0x3e, 0xdc, 0xa8, 0x03, 0x29, 0xea, 0x53, + 0xd8, 0xa0, 0x49, 0xc8, 0xf8, 0x84, 0x3e, 0xd0, 0x44, 0x60, 0x91, 0xa7, 0xb4, 0x59, 0x36, 0x40, + 0xb7, 0x66, 0x5d, 0xa0, 0x1d, 0x7e, 0xa2, 0xbc, 0x8e, 0x9c, 0xef, 0x84, 0x20, 0x4f, 0xa9, 0x5f, + 0xa7, 0xdb, 0x8b, 0xce, 0x25, 0xac, 0xff, 0x62, 0xf4, 0x16, 0xdc, 0xf7, 0x5c, 0x07, 0x07, 0xfd, + 0x1b, 0x07, 0x7b, 0x2e, 0xbe, 0xee, 0xfb, 0xc3, 0x00, 0xdb, 0xb7, 0x81, 0xd3, 0xf8, 0xa3, 0xd7, + 0x20, 0xec, 0x79, 0x6e, 0xd0, 0x77, 0x47, 0xde, 0x68, 0xd8, 0x00, 0xb6, 0xf3, 0xb2, 0x6e, 0x83, + 0xd7, 0x75, 0x1b, 0xbc, 0xaf, 0xdb, 0x00, 0x9e, 0x46, 0x4c, 0x55, 0x4b, 0x39, 0x5b, 0xe5, 0xbb, + 0xb4, 0x1c, 0x80, 0x3b, 0x2d, 0xb3, 0xc6, 0xff, 0xe4, 0x13, 0x9d, 0x7d, 0x06, 0x00, 0x00, 0xff, + 0xff, 0x95, 0x69, 0x59, 0xae, 0x4e, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/redis_proxy/v2/redis_proxy.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/redis_proxy/v2/redis_proxy.pb.go index 30f9e9be4636..d1559c297a9c 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/redis_proxy/v2/redis_proxy.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/redis_proxy/v2/redis_proxy.pb.go @@ -46,7 +46,7 @@ func (m *RedisProxy) Reset() { *m = RedisProxy{} } func (m *RedisProxy) String() string { return proto.CompactTextString(m) } func (*RedisProxy) ProtoMessage() {} func (*RedisProxy) Descriptor() ([]byte, []int) { - return fileDescriptor_redis_proxy_62aa41f73e6dd919, []int{0} + return fileDescriptor_redis_proxy_b5ef6bade3e8fafa, []int{0} } func (m *RedisProxy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -114,7 +114,7 @@ func (m *RedisProxy_ConnPoolSettings) Reset() { *m = RedisProxy_ConnPool func (m *RedisProxy_ConnPoolSettings) String() string { return proto.CompactTextString(m) } func (*RedisProxy_ConnPoolSettings) ProtoMessage() {} func (*RedisProxy_ConnPoolSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_redis_proxy_62aa41f73e6dd919, []int{0, 0} + return fileDescriptor_redis_proxy_b5ef6bade3e8fafa, []int{0, 0} } func (m *RedisProxy_ConnPoolSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -622,31 +622,31 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/redis_proxy/v2/redis_proxy.proto", fileDescriptor_redis_proxy_62aa41f73e6dd919) + proto.RegisterFile("envoy/config/filter/network/redis_proxy/v2/redis_proxy.proto", fileDescriptor_redis_proxy_b5ef6bade3e8fafa) } -var fileDescriptor_redis_proxy_62aa41f73e6dd919 = []byte{ - // 339 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xc1, 0x4a, 0xf3, 0x40, - 0x14, 0x85, 0x99, 0xf4, 0xff, 0xb5, 0x9d, 0x82, 0x94, 0x20, 0x58, 0xbb, 0x88, 0x45, 0x37, 0xa5, - 0x8b, 0x19, 0x88, 0x5b, 0x57, 0x51, 0xd0, 0x65, 0x89, 0xae, 0x44, 0x28, 0x69, 0x3b, 0x09, 0x83, - 0x71, 0x6e, 0x98, 0xdc, 0xc4, 0xf6, 0x15, 0x7c, 0x02, 0x9f, 0x41, 0x7c, 0x02, 0x57, 0x2e, 0x5d, - 0xfa, 0x06, 0x4a, 0x77, 0xbe, 0x85, 0x64, 0x26, 0xd5, 0xd2, 0x95, 0xbb, 0x9b, 0x9c, 0xfb, 0x9d, - 0x33, 0xf7, 0xd0, 0x13, 0xa1, 0x4a, 0x58, 0xf0, 0x29, 0xa8, 0x58, 0x26, 0x3c, 0x96, 0x29, 0x0a, - 0xcd, 0x95, 0xc0, 0x7b, 0xd0, 0xb7, 0x5c, 0x8b, 0x99, 0xcc, 0xc7, 0x99, 0x86, 0xf9, 0x82, 0x97, - 0xfe, 0xfa, 0x27, 0xcb, 0x34, 0x20, 0xb8, 0x43, 0x43, 0x33, 0x4b, 0x33, 0x4b, 0xb3, 0x9a, 0x66, - 0xeb, 0xeb, 0xa5, 0xdf, 0xf3, 0x12, 0x80, 0x24, 0x15, 0xdc, 0x90, 0x93, 0x22, 0xe6, 0xb3, 0x42, - 0x47, 0x28, 0x41, 0x59, 0xaf, 0xde, 0x5e, 0x19, 0xa5, 0x72, 0x16, 0xa1, 0xe0, 0xab, 0xa1, 0x16, - 0x76, 0x13, 0x48, 0xc0, 0x8c, 0xbc, 0x9a, 0xec, 0xdf, 0xc3, 0x67, 0x87, 0xd2, 0xb0, 0x4a, 0x18, - 0x55, 0x01, 0xee, 0x90, 0xb6, 0x73, 0x8c, 0x70, 0x9c, 0x69, 0x11, 0xcb, 0x79, 0x97, 0xf4, 0xc9, - 0xa0, 0x15, 0xb4, 0x5e, 0xbe, 0x5e, 0x1b, 0xff, 0xb4, 0xd3, 0x27, 0x21, 0xad, 0xd4, 0x91, 0x11, - 0xdd, 0x23, 0xba, 0x3d, 0x4d, 0x8b, 0x1c, 0x85, 0xee, 0x3a, 0x9b, 0x7b, 0x2b, 0xc5, 0x05, 0xda, - 0xcc, 0x05, 0xa2, 0x54, 0x49, 0xde, 0x6d, 0xf4, 0xc9, 0xa0, 0xed, 0x9f, 0xb3, 0xbf, 0x5f, 0xcb, - 0x7e, 0x9f, 0xc6, 0x4e, 0x41, 0xa9, 0x11, 0x40, 0x7a, 0x59, 0xdb, 0x05, 0xb4, 0x8a, 0xfb, 0xff, - 0x40, 0x9c, 0x0e, 0x09, 0x7f, 0x42, 0x7a, 0x37, 0xb4, 0xb3, 0xb9, 0xe9, 0x5e, 0x50, 0x0a, 0xd9, - 0x18, 0xe5, 0x9d, 0x80, 0x02, 0xcd, 0x51, 0x6d, 0x7f, 0x9f, 0xd9, 0x22, 0xd9, 0xaa, 0x48, 0x76, - 0x56, 0x17, 0x19, 0xec, 0x3c, 0x7e, 0x1c, 0x10, 0x63, 0xfe, 0x44, 0x9c, 0x26, 0x09, 0x5b, 0x90, - 0x5d, 0x59, 0x36, 0xe8, 0xbc, 0x2d, 0x3d, 0xf2, 0xbe, 0xf4, 0xc8, 0xe7, 0xd2, 0x23, 0xd7, 0x4e, - 0xe9, 0x4f, 0xb6, 0x0c, 0x7f, 0xfc, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xeb, 0x5e, 0xf1, 0xe0, 0x02, - 0x02, 0x00, 0x00, +var fileDescriptor_redis_proxy_b5ef6bade3e8fafa = []byte{ + // 352 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x3f, 0x4e, 0xc3, 0x30, + 0x14, 0xc6, 0xe5, 0x94, 0x3f, 0xad, 0x2b, 0xa1, 0x2a, 0x42, 0xa2, 0x74, 0x08, 0x15, 0x2c, 0x55, + 0x07, 0x5b, 0x0a, 0x0b, 0x03, 0x53, 0x40, 0x82, 0x81, 0x21, 0x0a, 0x4c, 0x08, 0xa9, 0x4a, 0x5b, + 0x27, 0xb2, 0x08, 0x7e, 0x91, 0xe3, 0x84, 0xf6, 0x0a, 0x9c, 0x80, 0x33, 0x20, 0x4e, 0xc0, 0xc4, + 0xc8, 0xc8, 0x0d, 0x40, 0xdd, 0xb8, 0x05, 0x8a, 0x9d, 0x40, 0xd5, 0xa9, 0xdb, 0xb3, 0xbf, 0xf7, + 0x7b, 0xdf, 0xfb, 0x1e, 0x3e, 0x65, 0xa2, 0x80, 0x39, 0x9d, 0x80, 0x88, 0x78, 0x4c, 0x23, 0x9e, + 0x28, 0x26, 0xa9, 0x60, 0xea, 0x11, 0xe4, 0x3d, 0x95, 0x6c, 0xca, 0xb3, 0x51, 0x2a, 0x61, 0x36, + 0xa7, 0x85, 0xbb, 0xfc, 0x24, 0xa9, 0x04, 0x05, 0xf6, 0x50, 0xd3, 0xc4, 0xd0, 0xc4, 0xd0, 0xa4, + 0xa2, 0xc9, 0x72, 0x7b, 0xe1, 0xf6, 0x9c, 0x18, 0x20, 0x4e, 0x18, 0xd5, 0xe4, 0x38, 0x8f, 0xe8, + 0x34, 0x97, 0xa1, 0xe2, 0x20, 0xcc, 0xac, 0xde, 0x5e, 0x11, 0x26, 0x7c, 0x1a, 0x2a, 0x46, 0xeb, + 0xa2, 0x12, 0x76, 0x63, 0x88, 0x41, 0x97, 0xb4, 0xac, 0xcc, 0xef, 0xe1, 0xab, 0x85, 0x71, 0x50, + 0x3a, 0xf8, 0xa5, 0x81, 0x3d, 0xc4, 0xed, 0x4c, 0x85, 0x6a, 0x94, 0x4a, 0x16, 0xf1, 0x59, 0x17, + 0xf5, 0xd1, 0xa0, 0xe5, 0xb5, 0xde, 0x7e, 0xde, 0x1b, 0x1b, 0xd2, 0xea, 0xa3, 0x00, 0x97, 0xaa, + 0xaf, 0x45, 0xfb, 0x08, 0x6f, 0x4f, 0x92, 0x3c, 0x53, 0x4c, 0x76, 0xad, 0xd5, 0xbe, 0x5a, 0xb1, + 0x01, 0x37, 0x33, 0xa6, 0x14, 0x17, 0x71, 0xd6, 0x6d, 0xf4, 0xd1, 0xa0, 0xed, 0x5e, 0x90, 0xf5, + 0xd3, 0x92, 0xff, 0xd5, 0xc8, 0x19, 0x08, 0xe1, 0x03, 0x24, 0xd7, 0xd5, 0x38, 0x0f, 0x97, 0x76, + 0x9b, 0x4f, 0xc8, 0xea, 0xa0, 0xe0, 0xcf, 0xa4, 0x77, 0x87, 0x3b, 0xab, 0x9d, 0xf6, 0x25, 0xc6, + 0x90, 0x8e, 0x14, 0x7f, 0x60, 0x90, 0x2b, 0x1d, 0xaa, 0xed, 0xee, 0x13, 0x73, 0x48, 0x52, 0x1f, + 0x92, 0x9c, 0x57, 0x87, 0xf4, 0x76, 0x9e, 0xbf, 0x0e, 0x90, 0x1e, 0xfe, 0x82, 0xac, 0x26, 0x0a, + 0x5a, 0x90, 0xde, 0x18, 0xd6, 0xbb, 0xfa, 0x58, 0x38, 0xe8, 0x73, 0xe1, 0xa0, 0xef, 0x85, 0x83, + 0xf0, 0x09, 0x07, 0x13, 0xc6, 0xec, 0xbb, 0x7e, 0x2e, 0x1f, 0xdd, 0x5a, 0x85, 0x3b, 0xde, 0xd2, + 0xde, 0xc7, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x15, 0xfe, 0xe9, 0xf7, 0x3e, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.go index bda5b88befff..02b5f2f381d4 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.go @@ -81,7 +81,7 @@ func (m *TcpProxy) Reset() { *m = TcpProxy{} } func (m *TcpProxy) String() string { return proto.CompactTextString(m) } func (*TcpProxy) ProtoMessage() {} func (*TcpProxy) Descriptor() ([]byte, []int) { - return fileDescriptor_tcp_proxy_283d7398dbcb3c5e, []int{0} + return fileDescriptor_tcp_proxy_83b9d4b0b35d8b8f, []int{0} } func (m *TcpProxy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -290,7 +290,7 @@ func (m *TcpProxy_DeprecatedV1) Reset() { *m = TcpProxy_DeprecatedV1{} } func (m *TcpProxy_DeprecatedV1) String() string { return proto.CompactTextString(m) } func (*TcpProxy_DeprecatedV1) ProtoMessage() {} func (*TcpProxy_DeprecatedV1) Descriptor() ([]byte, []int) { - return fileDescriptor_tcp_proxy_283d7398dbcb3c5e, []int{0, 0} + return fileDescriptor_tcp_proxy_83b9d4b0b35d8b8f, []int{0, 0} } func (m *TcpProxy_DeprecatedV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -375,7 +375,7 @@ func (m *TcpProxy_DeprecatedV1_TCPRoute) Reset() { *m = TcpProxy_Depreca func (m *TcpProxy_DeprecatedV1_TCPRoute) String() string { return proto.CompactTextString(m) } func (*TcpProxy_DeprecatedV1_TCPRoute) ProtoMessage() {} func (*TcpProxy_DeprecatedV1_TCPRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_tcp_proxy_283d7398dbcb3c5e, []int{0, 0, 0} + return fileDescriptor_tcp_proxy_83b9d4b0b35d8b8f, []int{0, 0, 0} } func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -454,7 +454,7 @@ func (m *TcpProxy_WeightedCluster) Reset() { *m = TcpProxy_WeightedClust func (m *TcpProxy_WeightedCluster) String() string { return proto.CompactTextString(m) } func (*TcpProxy_WeightedCluster) ProtoMessage() {} func (*TcpProxy_WeightedCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_tcp_proxy_283d7398dbcb3c5e, []int{0, 1} + return fileDescriptor_tcp_proxy_83b9d4b0b35d8b8f, []int{0, 1} } func (m *TcpProxy_WeightedCluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -508,7 +508,7 @@ func (m *TcpProxy_WeightedCluster_ClusterWeight) Reset() { func (m *TcpProxy_WeightedCluster_ClusterWeight) String() string { return proto.CompactTextString(m) } func (*TcpProxy_WeightedCluster_ClusterWeight) ProtoMessage() {} func (*TcpProxy_WeightedCluster_ClusterWeight) Descriptor() ([]byte, []int) { - return fileDescriptor_tcp_proxy_283d7398dbcb3c5e, []int{0, 1, 0} + return fileDescriptor_tcp_proxy_83b9d4b0b35d8b8f, []int{0, 1, 0} } func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1970,59 +1970,60 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.proto", fileDescriptor_tcp_proxy_283d7398dbcb3c5e) -} - -var fileDescriptor_tcp_proxy_283d7398dbcb3c5e = []byte{ - // 800 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x41, 0x6f, 0xdb, 0x36, - 0x14, 0x0e, 0xe5, 0x24, 0xb5, 0xe9, 0xa4, 0x4b, 0xd8, 0x16, 0xd5, 0xb4, 0x2c, 0x4d, 0xb7, 0x8b, - 0x91, 0x02, 0xd4, 0xea, 0x5e, 0x76, 0x1b, 0xaa, 0xf4, 0x90, 0x0c, 0x09, 0xe0, 0x0a, 0x59, 0x87, - 0xed, 0x22, 0x30, 0x12, 0xad, 0x10, 0x93, 0x44, 0x8e, 0xa4, 0x6c, 0xf7, 0x5f, 0x6c, 0x3b, 0x0d, - 0xfb, 0x09, 0xfb, 0x05, 0xc3, 0x4e, 0x3d, 0xee, 0xb8, 0x5f, 0xb0, 0x0d, 0xb9, 0xf5, 0x5f, 0x0c, - 0xa2, 0x28, 0x5b, 0x9e, 0x3d, 0xb4, 0x68, 0x4f, 0x26, 0xdf, 0x7b, 0xdf, 0xf7, 0x89, 0xef, 0x7b, - 0xcf, 0xf0, 0x73, 0x5a, 0x4c, 0xf8, 0x4b, 0x3f, 0xe6, 0xc5, 0x98, 0xa5, 0xfe, 0x98, 0x65, 0x9a, - 0x4a, 0xbf, 0xa0, 0x7a, 0xca, 0xe5, 0x77, 0xbe, 0x8e, 0x45, 0x24, 0x24, 0x9f, 0xbd, 0xf4, 0x27, - 0xc3, 0xc5, 0x05, 0x0b, 0xc9, 0x35, 0x47, 0x03, 0x83, 0xc4, 0x35, 0x12, 0xd7, 0x48, 0x6c, 0x91, - 0x78, 0x51, 0x3c, 0x19, 0x7a, 0x9f, 0xad, 0xd3, 0x20, 0x71, 0x4c, 0x95, 0xca, 0x78, 0x5a, 0x71, - 0xcf, 0x2f, 0x35, 0xb7, 0xf7, 0xa0, 0x46, 0x10, 0xc1, 0xaa, 0x6c, 0xcc, 0x25, 0xf5, 0x49, 0x92, - 0x48, 0xaa, 0x94, 0x2d, 0x38, 0x58, 0x2d, 0xb8, 0x22, 0x8a, 0xda, 0xec, 0x61, 0xca, 0x79, 0x9a, - 0x51, 0xdf, 0xdc, 0xae, 0xca, 0xb1, 0x9f, 0x94, 0x92, 0x68, 0xc6, 0x8b, 0xff, 0xcb, 0x4f, 0x25, - 0x11, 0x82, 0xca, 0x86, 0xfd, 0xfe, 0x84, 0x64, 0x2c, 0x21, 0x9a, 0xfa, 0xcd, 0xc1, 0x26, 0xee, - 0xa6, 0x3c, 0xe5, 0xe6, 0xe8, 0x57, 0xa7, 0x3a, 0xfa, 0xc9, 0x2f, 0x7d, 0xd8, 0xbd, 0x8c, 0xc5, - 0xa8, 0x7a, 0x2f, 0x3a, 0x86, 0x7d, 0xa5, 0x89, 0x8e, 0x84, 0xa4, 0x63, 0x36, 0x73, 0xc1, 0x11, - 0x18, 0xf4, 0x82, 0xde, 0xef, 0xaf, 0x5f, 0x75, 0x36, 0xa5, 0x73, 0x04, 0x42, 0x58, 0x65, 0x47, - 0x26, 0x89, 0x3c, 0x78, 0x2b, 0xce, 0x4a, 0xa5, 0xa9, 0x74, 0x9d, 0xaa, 0xee, 0x74, 0x23, 0x6c, - 0x02, 0xe8, 0x39, 0xbc, 0x9f, 0xf0, 0x69, 0xa1, 0xb4, 0xa4, 0x24, 0x8f, 0x58, 0x92, 0xd1, 0x48, - 0xb3, 0x9c, 0xf2, 0x52, 0xbb, 0x9d, 0x23, 0x30, 0xe8, 0x0f, 0x3f, 0xc4, 0xf5, 0x2b, 0x70, 0xf3, - 0x0a, 0xfc, 0xcc, 0xbe, 0x32, 0xbc, 0xb7, 0x40, 0x9e, 0x25, 0x19, 0xbd, 0xac, 0x71, 0xe8, 0x02, - 0xde, 0x2b, 0xc5, 0x3a, 0xc2, 0xcd, 0x37, 0x11, 0xde, 0x69, 0x70, 0x6d, 0xba, 0x2f, 0x21, 0xac, - 0x7d, 0x8b, 0x32, 0x9e, 0xba, 0x5b, 0x47, 0x9d, 0x41, 0x7f, 0xf8, 0x08, 0xaf, 0x9b, 0x8a, 0x85, - 0xbd, 0x93, 0x21, 0x7e, 0x6a, 0x2e, 0xe7, 0x3c, 0x0d, 0x7b, 0xa4, 0x39, 0xa2, 0x6b, 0xb8, 0x9b, - 0x50, 0x21, 0x69, 0x4c, 0x34, 0x4d, 0xa2, 0xc9, 0x63, 0x77, 0xdb, 0x7c, 0xd2, 0x17, 0xf8, 0x6d, - 0x87, 0x0c, 0x37, 0x06, 0xe0, 0x67, 0x73, 0x9e, 0x17, 0x8f, 0x03, 0xc7, 0x05, 0xe1, 0x4e, 0xd2, - 0x8a, 0xa0, 0x6f, 0xe0, 0xdd, 0x9c, 0xcc, 0xa2, 0x98, 0x17, 0x05, 0x8d, 0x75, 0x44, 0xb4, 0xa6, - 0xb9, 0xd0, 0xca, 0xbd, 0x65, 0x04, 0x0f, 0x56, 0x7a, 0xf0, 0xd5, 0x59, 0xa1, 0x9f, 0x0c, 0x5f, - 0x90, 0xac, 0xa4, 0xd6, 0xc6, 0x63, 0x67, 0x00, 0x42, 0x94, 0x93, 0xd9, 0x49, 0xcd, 0xf1, 0xd4, - 0x52, 0xa0, 0x73, 0xb8, 0xb3, 0xd4, 0xd6, 0xee, 0x1b, 0xda, 0x1a, 0xdc, 0xfe, 0xf9, 0xef, 0x07, - 0xa0, 0xe2, 0xdc, 0xfa, 0x15, 0x38, 0xc7, 0x1b, 0x61, 0x9f, 0xb5, 0xda, 0x1b, 0xc0, 0xdb, 0x39, - 0xd5, 0x24, 0x21, 0x9a, 0x44, 0x39, 0xd1, 0xf1, 0xb5, 0xdb, 0x33, 0x7c, 0x1f, 0xd9, 0x9e, 0x10, - 0xc1, 0xaa, 0x77, 0x57, 0xb3, 0x8f, 0x2f, 0x6c, 0x61, 0xb8, 0xdb, 0x40, 0x2e, 0x2a, 0x04, 0xfa, - 0x1e, 0xee, 0x4f, 0x29, 0x4b, 0xaf, 0xab, 0xa6, 0xda, 0xc1, 0x52, 0x2e, 0x34, 0x34, 0xc1, 0x3b, - 0xb4, 0xf6, 0x6b, 0xcb, 0x75, 0x52, 0x53, 0x9d, 0x6e, 0x84, 0x7b, 0xd3, 0xe5, 0x90, 0xf2, 0x7e, - 0xe8, 0xc0, 0x9d, 0xb6, 0x05, 0x28, 0x83, 0xdb, 0x92, 0x97, 0x9a, 0x2a, 0x17, 0x98, 0x11, 0x39, - 0x7d, 0x4f, 0x4f, 0xf1, 0xe5, 0xc9, 0x28, 0xac, 0x08, 0x03, 0x68, 0x5a, 0xf7, 0x13, 0x70, 0xba, - 0x20, 0xb4, 0x1a, 0xde, 0x8f, 0x0e, 0xec, 0x36, 0x05, 0xe8, 0xd3, 0xc5, 0x7e, 0xad, 0xec, 0xe1, - 0x7c, 0xd1, 0xce, 0xe1, 0x9d, 0x84, 0x2a, 0xcd, 0x0a, 0xe3, 0x49, 0xc4, 0x44, 0x94, 0x31, 0xa5, - 0x5d, 0xc7, 0x7c, 0xec, 0xc1, 0x9a, 0x66, 0x9f, 0xb0, 0x44, 0x86, 0xa4, 0x48, 0x69, 0xb8, 0xdf, - 0x02, 0x9e, 0x89, 0x73, 0xa6, 0x34, 0x7a, 0x04, 0xdb, 0xc1, 0x48, 0x70, 0xa9, 0x95, 0x59, 0xd8, - 0x5e, 0xb8, 0xd7, 0x4a, 0x8c, 0xaa, 0x78, 0x65, 0xb1, 0xe2, 0xa5, 0x8c, 0xe9, 0x5c, 0x75, 0xf3, - 0x2d, 0x54, 0x77, 0x6a, 0x8c, 0x15, 0x7c, 0x08, 0xed, 0xdd, 0x6a, 0x6d, 0x19, 0xad, 0x7e, 0x1d, - 0x33, 0x32, 0xde, 0x5f, 0x00, 0x7e, 0xf0, 0x1f, 0xeb, 0xd0, 0x0c, 0x76, 0xe7, 0x03, 0x51, 0xfb, - 0x32, 0x7a, 0xff, 0x81, 0xc0, 0xf6, 0xb7, 0x0e, 0x2f, 0xf9, 0x33, 0x57, 0xf3, 0x9e, 0xc3, 0xdd, - 0xa5, 0x32, 0xf4, 0x31, 0xdc, 0x2c, 0x48, 0x4e, 0x57, 0x2d, 0x32, 0x61, 0xf4, 0x10, 0x6e, 0xd7, - 0x43, 0x66, 0xfe, 0x23, 0x77, 0xdb, 0x4b, 0x68, 0x13, 0x81, 0x07, 0xf7, 0x2d, 0x7d, 0xa4, 0x04, - 0x8d, 0xd9, 0x98, 0x51, 0x89, 0xb6, 0x7e, 0x7b, 0xfd, 0xaa, 0x03, 0x82, 0xbd, 0x3f, 0x6e, 0x0e, - 0xc1, 0x9f, 0x37, 0x87, 0xe0, 0x9f, 0x9b, 0x43, 0xf0, 0xad, 0x33, 0x19, 0x5e, 0x6d, 0x9b, 0x45, - 0x7c, 0xf2, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x83, 0x28, 0x41, 0xfb, 0x06, 0x00, 0x00, + proto.RegisterFile("envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.proto", fileDescriptor_tcp_proxy_83b9d4b0b35d8b8f) +} + +var fileDescriptor_tcp_proxy_83b9d4b0b35d8b8f = []byte{ + // 812 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4f, 0x6f, 0xdc, 0x44, + 0x14, 0xcf, 0x78, 0x93, 0x74, 0x77, 0x36, 0x29, 0xcd, 0xb4, 0x55, 0xcd, 0x12, 0xd2, 0x14, 0x2e, + 0xab, 0x54, 0x1a, 0xd3, 0xad, 0x84, 0xb8, 0xa1, 0x3a, 0x3d, 0x24, 0x55, 0x22, 0x6d, 0xad, 0x50, + 0x04, 0x17, 0x6b, 0x62, 0xcf, 0x3a, 0x23, 0x6c, 0xcf, 0x30, 0x33, 0xde, 0xdd, 0x7e, 0x0b, 0xe0, + 0x84, 0xf8, 0x08, 0x7c, 0x02, 0xc4, 0xa9, 0x47, 0x8e, 0x7c, 0x02, 0x40, 0xb9, 0xf5, 0x5b, 0x20, + 0xcf, 0x8c, 0x77, 0x1d, 0x12, 0xd4, 0xa8, 0x39, 0xed, 0xbc, 0x3f, 0xbf, 0xdf, 0xf3, 0x7b, 0xbf, + 0xf7, 0x16, 0x7e, 0x41, 0xcb, 0x29, 0x7f, 0x1d, 0x24, 0xbc, 0x9c, 0xb0, 0x2c, 0x98, 0xb0, 0x5c, + 0x53, 0x19, 0x94, 0x54, 0xcf, 0xb8, 0xfc, 0x2e, 0xd0, 0x89, 0x88, 0x85, 0xe4, 0xf3, 0xd7, 0xc1, + 0x74, 0xb4, 0x34, 0xb0, 0x90, 0x5c, 0x73, 0x34, 0x34, 0x48, 0x6c, 0x91, 0xd8, 0x22, 0xb1, 0x43, + 0xe2, 0x65, 0xf2, 0x74, 0x34, 0xf8, 0xec, 0xaa, 0x1a, 0x24, 0x49, 0xa8, 0x52, 0x39, 0xcf, 0x6a, + 0xee, 0x85, 0x61, 0xb9, 0x07, 0x0f, 0x2d, 0x82, 0x08, 0x56, 0x47, 0x13, 0x2e, 0x69, 0x40, 0xd2, + 0x54, 0x52, 0xa5, 0x5c, 0xc2, 0xf6, 0xe5, 0x84, 0x53, 0xa2, 0xa8, 0x8b, 0xee, 0x64, 0x9c, 0x67, + 0x39, 0x0d, 0x8c, 0x75, 0x5a, 0x4d, 0x82, 0xb4, 0x92, 0x44, 0x33, 0x5e, 0xfe, 0x5f, 0x7c, 0x26, + 0x89, 0x10, 0x54, 0x36, 0xec, 0x0f, 0xa6, 0x24, 0x67, 0x29, 0xd1, 0x34, 0x68, 0x1e, 0x2e, 0x70, + 0x2f, 0xe3, 0x19, 0x37, 0xcf, 0xa0, 0x7e, 0x59, 0xef, 0x27, 0xbf, 0xf4, 0x61, 0xf7, 0x24, 0x11, + 0xe3, 0xba, 0x5f, 0xb4, 0x07, 0xfb, 0x4a, 0x13, 0x1d, 0x0b, 0x49, 0x27, 0x6c, 0xee, 0x83, 0x5d, + 0x30, 0xec, 0x85, 0xbd, 0xdf, 0xdf, 0xbe, 0xe9, 0xac, 0x4a, 0x6f, 0x17, 0x44, 0xb0, 0x8e, 0x8e, + 0x4d, 0x10, 0x0d, 0xe0, 0xad, 0x24, 0xaf, 0x94, 0xa6, 0xd2, 0xf7, 0xea, 0xbc, 0x83, 0x95, 0xa8, + 0x71, 0xa0, 0x97, 0xf0, 0x41, 0xca, 0x67, 0xa5, 0xd2, 0x92, 0x92, 0x22, 0x66, 0x69, 0x4e, 0x63, + 0xcd, 0x0a, 0xca, 0x2b, 0xed, 0x77, 0x76, 0xc1, 0xb0, 0x3f, 0xfa, 0x10, 0xdb, 0x2e, 0x70, 0xd3, + 0x05, 0x7e, 0xee, 0xba, 0x8c, 0xee, 0x2f, 0x91, 0x87, 0x69, 0x4e, 0x4f, 0x2c, 0x0e, 0x1d, 0xc3, + 0xfb, 0x95, 0xb8, 0x8a, 0x70, 0xf5, 0x5d, 0x84, 0x77, 0x1b, 0x5c, 0x9b, 0xee, 0x05, 0x84, 0x56, + 0xb7, 0x38, 0xe7, 0x99, 0xbf, 0xb6, 0xdb, 0x19, 0xf6, 0x47, 0x8f, 0xf1, 0x55, 0x5b, 0xb1, 0x94, + 0x77, 0x3a, 0xc2, 0xcf, 0x8c, 0x71, 0xc4, 0xb3, 0xa8, 0x47, 0x9a, 0x27, 0x3a, 0x83, 0x9b, 0x29, + 0x15, 0x92, 0x26, 0x44, 0xd3, 0x34, 0x9e, 0x3e, 0xf1, 0xd7, 0xcd, 0x27, 0x7d, 0x89, 0xaf, 0xbb, + 0x64, 0xb8, 0x11, 0x00, 0x3f, 0x5f, 0xf0, 0xbc, 0x7a, 0x12, 0x7a, 0x3e, 0x88, 0x36, 0xd2, 0x96, + 0x07, 0x7d, 0x03, 0xef, 0x15, 0x64, 0x1e, 0x27, 0xbc, 0x2c, 0x69, 0xa2, 0x63, 0xa2, 0x35, 0x2d, + 0x84, 0x56, 0xfe, 0x2d, 0x53, 0x70, 0xfb, 0xd2, 0x0c, 0xbe, 0x3a, 0x2c, 0xf5, 0xd3, 0xd1, 0x2b, + 0x92, 0x57, 0xd4, 0xc9, 0xb8, 0xe7, 0x0d, 0x41, 0x84, 0x0a, 0x32, 0xdf, 0xb7, 0x1c, 0xcf, 0x1c, + 0x05, 0x3a, 0x82, 0x1b, 0x17, 0xc6, 0xda, 0x7d, 0xc7, 0x58, 0xc3, 0xdb, 0x3f, 0xff, 0xfd, 0x10, + 0xd4, 0x9c, 0x6b, 0xbf, 0x02, 0x6f, 0x6f, 0x25, 0xea, 0xb3, 0xd6, 0x78, 0x43, 0x78, 0xbb, 0xa0, + 0x9a, 0xa4, 0x44, 0x93, 0xb8, 0x20, 0x3a, 0x39, 0xf3, 0x7b, 0x86, 0xef, 0x23, 0x37, 0x13, 0x22, + 0x58, 0xdd, 0x77, 0xbd, 0xfb, 0xf8, 0xd8, 0x25, 0x46, 0x9b, 0x0d, 0xe4, 0xb8, 0x46, 0xa0, 0xef, + 0xe1, 0xd6, 0x8c, 0xb2, 0xec, 0xac, 0x1e, 0xaa, 0x5b, 0x2c, 0xe5, 0x43, 0x43, 0x13, 0xbe, 0xc7, + 0x68, 0xbf, 0x76, 0x5c, 0xfb, 0x96, 0xea, 0x60, 0x25, 0xba, 0x33, 0xbb, 0xe8, 0x52, 0x83, 0x1f, + 0x3a, 0x70, 0xa3, 0x2d, 0x01, 0xca, 0xe1, 0xba, 0xe4, 0x95, 0xa6, 0xca, 0x07, 0x66, 0x45, 0x0e, + 0x6e, 0xa8, 0x29, 0x3e, 0xd9, 0x1f, 0x47, 0x35, 0x61, 0x08, 0xcd, 0xe8, 0x7e, 0x02, 0x5e, 0x17, + 0x44, 0xae, 0xc6, 0xe0, 0x47, 0x0f, 0x76, 0x9b, 0x04, 0xf4, 0xe9, 0xf2, 0xbe, 0x2e, 0xdd, 0xe1, + 0xe2, 0xd0, 0x8e, 0xe0, 0xdd, 0x94, 0x2a, 0xcd, 0x4a, 0xa3, 0x49, 0xcc, 0x44, 0x9c, 0x33, 0xa5, + 0x7d, 0xcf, 0x7c, 0xec, 0xf6, 0x15, 0xc3, 0xde, 0x67, 0xa9, 0x8c, 0x48, 0x99, 0xd1, 0x68, 0xab, + 0x05, 0x3c, 0x14, 0x47, 0x4c, 0x69, 0xf4, 0x18, 0xb6, 0x9d, 0xb1, 0xe0, 0x52, 0x2b, 0x73, 0xb0, + 0xbd, 0xe8, 0x4e, 0x2b, 0x30, 0xae, 0xfd, 0xb5, 0xc4, 0x8a, 0x57, 0x32, 0xa1, 0x8b, 0xaa, 0xab, + 0xd7, 0xa8, 0xba, 0x61, 0x31, 0xae, 0xe0, 0x23, 0xe8, 0x6c, 0x57, 0x6b, 0xcd, 0xd4, 0xea, 0x5b, + 0x9f, 0x29, 0x33, 0xf8, 0x0b, 0xc0, 0x0f, 0xfe, 0x23, 0x1d, 0x9a, 0xc3, 0xee, 0x62, 0x21, 0xac, + 0x2e, 0xe3, 0x9b, 0x2f, 0x04, 0x76, 0xbf, 0xd6, 0x7d, 0x41, 0x9f, 0x45, 0xb5, 0xc1, 0x4b, 0xb8, + 0x79, 0x21, 0x0d, 0x7d, 0x0c, 0x57, 0x4b, 0x52, 0xd0, 0xcb, 0x12, 0x19, 0x37, 0x7a, 0x04, 0xd7, + 0xed, 0x92, 0x99, 0xff, 0xc8, 0xcd, 0xf6, 0x11, 0xba, 0x40, 0x38, 0x80, 0x5b, 0x8e, 0x3e, 0x56, + 0x82, 0x26, 0x6c, 0xc2, 0xa8, 0x44, 0x6b, 0xbf, 0xbd, 0x7d, 0xd3, 0x01, 0xe1, 0x8b, 0x3f, 0xce, + 0x77, 0xc0, 0x9f, 0xe7, 0x3b, 0xe0, 0x9f, 0xf3, 0x1d, 0x00, 0x3f, 0x67, 0xdc, 0xb6, 0x69, 0x7b, + 0xb9, 0x6e, 0xc7, 0x63, 0xf0, 0xad, 0x37, 0x1d, 0x9d, 0xae, 0x9b, 0x13, 0x7e, 0xfa, 0x6f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x12, 0xfd, 0x1d, 0x8d, 0x35, 0x07, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/thrift_proxy/v2alpha1/route.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/thrift_proxy/v2alpha1/route.pb.go index 873b7fd500fe..633842b00d39 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/thrift_proxy/v2alpha1/route.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/thrift_proxy/v2alpha1/route.pb.go @@ -41,7 +41,7 @@ func (m *RouteConfiguration) Reset() { *m = RouteConfiguration{} } func (m *RouteConfiguration) String() string { return proto.CompactTextString(m) } func (*RouteConfiguration) ProtoMessage() {} func (*RouteConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_route_122fb0d5e1726767, []int{0} + return fileDescriptor_route_067539a37f66717f, []int{0} } func (m *RouteConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -99,7 +99,7 @@ func (m *Route) Reset() { *m = Route{} } func (m *Route) String() string { return proto.CompactTextString(m) } func (*Route) ProtoMessage() {} func (*Route) Descriptor() ([]byte, []int) { - return fileDescriptor_route_122fb0d5e1726767, []int{1} + return fileDescriptor_route_067539a37f66717f, []int{1} } func (m *Route) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -176,7 +176,7 @@ func (m *RouteMatch) Reset() { *m = RouteMatch{} } func (m *RouteMatch) String() string { return proto.CompactTextString(m) } func (*RouteMatch) ProtoMessage() {} func (*RouteMatch) Descriptor() ([]byte, []int) { - return fileDescriptor_route_122fb0d5e1726767, []int{2} + return fileDescriptor_route_067539a37f66717f, []int{2} } func (m *RouteMatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -348,7 +348,7 @@ func (m *RouteAction) Reset() { *m = RouteAction{} } func (m *RouteAction) String() string { return proto.CompactTextString(m) } func (*RouteAction) ProtoMessage() {} func (*RouteAction) Descriptor() ([]byte, []int) { - return fileDescriptor_route_122fb0d5e1726767, []int{3} + return fileDescriptor_route_067539a37f66717f, []int{3} } func (m *RouteAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -513,7 +513,7 @@ func (m *WeightedCluster) Reset() { *m = WeightedCluster{} } func (m *WeightedCluster) String() string { return proto.CompactTextString(m) } func (*WeightedCluster) ProtoMessage() {} func (*WeightedCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_route_122fb0d5e1726767, []int{4} + return fileDescriptor_route_067539a37f66717f, []int{4} } func (m *WeightedCluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -572,7 +572,7 @@ func (m *WeightedCluster_ClusterWeight) Reset() { *m = WeightedCluster_C func (m *WeightedCluster_ClusterWeight) String() string { return proto.CompactTextString(m) } func (*WeightedCluster_ClusterWeight) ProtoMessage() {} func (*WeightedCluster_ClusterWeight) Descriptor() ([]byte, []int) { - return fileDescriptor_route_122fb0d5e1726767, []int{4, 0} + return fileDescriptor_route_067539a37f66717f, []int{4, 0} } func (m *WeightedCluster_ClusterWeight) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2009,51 +2009,52 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/thrift_proxy/v2alpha1/route.proto", fileDescriptor_route_122fb0d5e1726767) -} - -var fileDescriptor_route_122fb0d5e1726767 = []byte{ - // 661 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x6e, 0x13, 0x3d, - 0x14, 0x8d, 0x27, 0x3f, 0x6d, 0x9d, 0xaf, 0x7f, 0xd6, 0x27, 0x88, 0x42, 0x1b, 0xd2, 0x20, 0xa4, - 0x88, 0x85, 0x47, 0x9d, 0x6e, 0x90, 0x50, 0x8b, 0x98, 0x6e, 0x82, 0x44, 0x11, 0xb2, 0x44, 0x91, - 0xd8, 0x44, 0xee, 0xc4, 0x49, 0x2c, 0x26, 0xe3, 0xc1, 0xe3, 0x4c, 0xda, 0x1d, 0x6b, 0x96, 0xbc, - 0x0a, 0x1b, 0xc4, 0xaa, 0x88, 0x05, 0x5d, 0x22, 0x1e, 0x00, 0xa1, 0xee, 0xfa, 0x16, 0x68, 0x6c, - 0x4f, 0x9b, 0x50, 0x36, 0x04, 0x56, 0x73, 0xe7, 0xfa, 0x9e, 0x7b, 0x7c, 0xce, 0xb5, 0x0d, 0x77, - 0x59, 0x94, 0x8a, 0x13, 0x37, 0x10, 0x51, 0x9f, 0x0f, 0xdc, 0x3e, 0x0f, 0x15, 0x93, 0x6e, 0xc4, - 0xd4, 0x44, 0xc8, 0x57, 0xae, 0x1a, 0x4a, 0xde, 0x57, 0xdd, 0x58, 0x8a, 0xe3, 0x13, 0x37, 0xf5, - 0x68, 0x18, 0x0f, 0xe9, 0xb6, 0x2b, 0xc5, 0x58, 0x31, 0x1c, 0x4b, 0xa1, 0x04, 0xda, 0xd6, 0x70, - 0x6c, 0xe0, 0xd8, 0xc0, 0xb1, 0x85, 0xe3, 0x69, 0x38, 0xce, 0xe1, 0xf5, 0x0d, 0xc3, 0x48, 0x63, - 0xee, 0xa6, 0x9e, 0x1b, 0x08, 0xc9, 0xdc, 0x23, 0x9a, 0xd8, 0x86, 0xf5, 0xc6, 0xcc, 0xaa, 0xa6, - 0x9a, 0x26, 0xac, 0x37, 0x06, 0x42, 0x0c, 0x42, 0xe6, 0xea, 0xbf, 0xa3, 0x71, 0xdf, 0x9d, 0x48, - 0x1a, 0xc7, 0x4c, 0x26, 0x76, 0xfd, 0x66, 0x4a, 0x43, 0xde, 0xa3, 0x8a, 0xb9, 0x79, 0x60, 0x17, - 0xfe, 0x1f, 0x88, 0x81, 0xd0, 0xa1, 0x9b, 0x45, 0x26, 0xdb, 0x7a, 0x03, 0x20, 0x22, 0x59, 0xfb, - 0x7d, 0xad, 0x60, 0x2c, 0xa9, 0xe2, 0x22, 0x42, 0x08, 0x96, 0x22, 0x3a, 0x62, 0x35, 0xd0, 0x04, - 0xed, 0x25, 0xa2, 0x63, 0x74, 0x08, 0x2b, 0x7a, 0x23, 0x49, 0xcd, 0x69, 0x16, 0xdb, 0x55, 0xef, - 0x3e, 0xfe, 0x63, 0xed, 0x58, 0x53, 0xf9, 0xa5, 0xb3, 0xef, 0xb7, 0x0b, 0xc4, 0x76, 0x6b, 0x7d, - 0x03, 0xb0, 0xac, 0xf3, 0x28, 0x80, 0xe5, 0x11, 0x55, 0xc1, 0x50, 0xd3, 0x56, 0xbd, 0xdd, 0x79, - 0x09, 0x0e, 0xb2, 0x26, 0xfe, 0x4a, 0xc6, 0xf2, 0xf1, 0xe2, 0xb4, 0x58, 0x7e, 0x0b, 0x9c, 0x35, - 0x40, 0x4c, 0x6f, 0xd4, 0x83, 0x65, 0x4d, 0x5c, 0x73, 0x34, 0xc9, 0xde, 0xbc, 0x24, 0x8f, 0x82, - 0xcc, 0xa9, 0xeb, 0x2c, 0xba, 0x79, 0xeb, 0x33, 0x80, 0xf0, 0x6a, 0x2f, 0x68, 0x0b, 0x56, 0x47, - 0x4c, 0x0d, 0x45, 0xaf, 0x7b, 0x65, 0x6b, 0xa7, 0x40, 0xa0, 0x49, 0x3e, 0xcd, 0xec, 0xbd, 0x03, - 0xff, 0x4b, 0x98, 0x4c, 0x79, 0xc0, 0x4c, 0x8d, 0x63, 0x6b, 0xaa, 0x36, 0xab, 0x8b, 0x6e, 0xc0, - 0x0a, 0x8f, 0x52, 0x26, 0x55, 0xad, 0xd8, 0x04, 0xed, 0x45, 0x62, 0xff, 0xd0, 0x03, 0xb8, 0x30, - 0x64, 0xb4, 0xc7, 0x64, 0x52, 0x2b, 0xe9, 0xe1, 0x6c, 0x59, 0x59, 0x34, 0xe6, 0x38, 0xf5, 0xb0, - 0x39, 0x41, 0x1d, 0x5d, 0xa2, 0x77, 0xc4, 0x24, 0xc9, 0x11, 0x7e, 0x0d, 0xae, 0x6a, 0x6b, 0xba, - 0x49, 0xcc, 0x02, 0xde, 0xe7, 0x4c, 0xa2, 0xf2, 0x87, 0x8b, 0xd3, 0x22, 0x68, 0x7d, 0x71, 0x60, - 0x75, 0x4a, 0x2c, 0xba, 0x0b, 0x17, 0x82, 0x70, 0x9c, 0x28, 0x26, 0x8d, 0x04, 0x7f, 0x29, 0x53, - 0x5e, 0x92, 0x4e, 0x13, 0x74, 0x0a, 0x24, 0x5f, 0x43, 0xaf, 0xe1, 0xfa, 0x84, 0xf1, 0xc1, 0x50, - 0xb1, 0x5e, 0xd7, 0xe6, 0x12, 0x6b, 0xb7, 0x3f, 0x87, 0xdd, 0x2f, 0x6c, 0xaf, 0x7d, 0xd3, 0xaa, - 0x53, 0x20, 0x6b, 0x93, 0xd9, 0x54, 0x82, 0x7c, 0xb8, 0x32, 0x62, 0x8a, 0xf6, 0xa8, 0xa2, 0x5d, - 0x73, 0x86, 0x8a, 0x9a, 0xef, 0xd6, 0xac, 0x0f, 0xd9, 0x6d, 0xc3, 0x07, 0xb6, 0x90, 0x2c, 0xe7, - 0x10, 0x33, 0xa4, 0x3d, 0x58, 0x95, 0x54, 0xb1, 0x6e, 0xc8, 0x47, 0x5c, 0xe5, 0x46, 0x6e, 0xfe, - 0xce, 0x48, 0x42, 0x15, 0x7b, 0x92, 0x55, 0x11, 0x28, 0xf3, 0x30, 0xf1, 0xeb, 0x70, 0xdd, 0xaa, - 0xbd, 0xee, 0xe4, 0x27, 0x07, 0xae, 0xfe, 0xa2, 0x03, 0x1d, 0xc3, 0xc5, 0x4b, 0x77, 0x80, 0x26, - 0x7b, 0xf6, 0xf7, 0xee, 0x60, 0xfb, 0x35, 0x69, 0x1f, 0xea, 0xa3, 0xf9, 0x0e, 0x38, 0x8b, 0x80, - 0x5c, 0xb2, 0xd5, 0xdf, 0x03, 0xb8, 0x3c, 0x53, 0x87, 0x36, 0xa7, 0x2f, 0xfc, 0xd4, 0x58, 0xed, - 0xdd, 0x7f, 0x08, 0x2b, 0xc6, 0x72, 0x3b, 0xc6, 0x0d, 0x6c, 0x9e, 0x21, 0x9c, 0x3f, 0x43, 0xf8, - 0xf9, 0xe3, 0x48, 0xed, 0x78, 0x87, 0x34, 0x1c, 0x33, 0x0b, 0xbf, 0xe7, 0xb4, 0x01, 0xb1, 0xb0, - 0x7f, 0x31, 0x1f, 0x7f, 0xed, 0xec, 0xbc, 0x01, 0xbe, 0x9e, 0x37, 0xc0, 0x8f, 0xf3, 0x06, 0x78, - 0xe9, 0xa4, 0xde, 0x51, 0x45, 0xd3, 0xef, 0xfc, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x73, 0x90, 0xeb, - 0x4a, 0xc5, 0x05, 0x00, 0x00, + proto.RegisterFile("envoy/config/filter/network/thrift_proxy/v2alpha1/route.proto", fileDescriptor_route_067539a37f66717f) +} + +var fileDescriptor_route_067539a37f66717f = []byte{ + // 674 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4d, 0x6f, 0x13, 0x3b, + 0x14, 0x8d, 0x27, 0x1f, 0x6d, 0x6f, 0x5e, 0xbf, 0xac, 0xa7, 0xf7, 0xa2, 0xbc, 0x36, 0x2f, 0x0d, + 0x42, 0x8a, 0x58, 0x78, 0xd4, 0x74, 0x83, 0x84, 0xda, 0x8a, 0xe9, 0x26, 0x48, 0x14, 0x55, 0x83, + 0x28, 0x12, 0x9b, 0xc8, 0x9d, 0x38, 0x89, 0x45, 0x32, 0x1e, 0x3c, 0xce, 0xa4, 0xdd, 0xb1, 0x66, + 0xc9, 0x5f, 0x61, 0x83, 0x58, 0x15, 0xb1, 0xa0, 0x4b, 0xc4, 0x0f, 0x40, 0xa8, 0xbb, 0xfe, 0x0b, + 0x34, 0xb6, 0xa7, 0x4d, 0x28, 0x9b, 0x16, 0x56, 0x73, 0xe7, 0xfa, 0x9e, 0x7b, 0x7c, 0xce, 0xb5, + 0x0d, 0xdb, 0x2c, 0x4c, 0xc4, 0x89, 0x1b, 0x88, 0xb0, 0xc7, 0xfb, 0x6e, 0x8f, 0x0f, 0x15, 0x93, + 0x6e, 0xc8, 0xd4, 0x44, 0xc8, 0x97, 0xae, 0x1a, 0x48, 0xde, 0x53, 0x9d, 0x48, 0x8a, 0xe3, 0x13, + 0x37, 0x69, 0xd1, 0x61, 0x34, 0xa0, 0x9b, 0xae, 0x14, 0x63, 0xc5, 0x48, 0x24, 0x85, 0x12, 0x78, + 0x53, 0xc3, 0x89, 0x81, 0x13, 0x03, 0x27, 0x16, 0x4e, 0xa6, 0xe1, 0x24, 0x83, 0x57, 0xd7, 0x0c, + 0x23, 0x8d, 0xb8, 0x9b, 0xb4, 0xdc, 0x40, 0x48, 0xe6, 0x1e, 0xd1, 0xd8, 0x36, 0xac, 0xd6, 0x66, + 0x56, 0x35, 0xd5, 0x34, 0x61, 0xb5, 0xd6, 0x17, 0xa2, 0x3f, 0x64, 0xae, 0xfe, 0x3b, 0x1a, 0xf7, + 0xdc, 0x89, 0xa4, 0x51, 0xc4, 0x64, 0x6c, 0xd7, 0xff, 0x4d, 0xe8, 0x90, 0x77, 0xa9, 0x62, 0x6e, + 0x16, 0xd8, 0x85, 0xbf, 0xfb, 0xa2, 0x2f, 0x74, 0xe8, 0xa6, 0x91, 0xc9, 0x36, 0x5e, 0x23, 0xc0, + 0x7e, 0xda, 0x7e, 0x4f, 0x2b, 0x18, 0x4b, 0xaa, 0xb8, 0x08, 0x31, 0x86, 0x42, 0x48, 0x47, 0xac, + 0x82, 0xea, 0xa8, 0xb9, 0xe0, 0xeb, 0x18, 0x1f, 0x42, 0x49, 0x6f, 0x24, 0xae, 0x38, 0xf5, 0x7c, + 0xb3, 0xdc, 0xba, 0x4f, 0x6e, 0xac, 0x9d, 0x68, 0x2a, 0xaf, 0x70, 0xf6, 0xed, 0xff, 0x9c, 0x6f, + 0xbb, 0x35, 0xbe, 0x22, 0x28, 0xea, 0x3c, 0x0e, 0xa0, 0x38, 0xa2, 0x2a, 0x18, 0x68, 0xda, 0x72, + 0x6b, 0xfb, 0xb6, 0x04, 0xfb, 0x69, 0x13, 0x6f, 0x29, 0x65, 0xf9, 0x70, 0x71, 0x9a, 0x2f, 0xbe, + 0x41, 0xce, 0x0a, 0xf2, 0x4d, 0x6f, 0xdc, 0x85, 0xa2, 0x26, 0xae, 0x38, 0x9a, 0x64, 0xe7, 0xb6, + 0x24, 0x0f, 0x83, 0xd4, 0xa9, 0xeb, 0x2c, 0xba, 0x79, 0xe3, 0x13, 0x02, 0xb8, 0xda, 0x0b, 0xde, + 0x80, 0xf2, 0x88, 0xa9, 0x81, 0xe8, 0x76, 0xae, 0x6c, 0x6d, 0xe7, 0x7c, 0x30, 0xc9, 0x27, 0xa9, + 0xbd, 0x77, 0xe0, 0xaf, 0x98, 0xc9, 0x84, 0x07, 0xcc, 0xd4, 0x38, 0xb6, 0xa6, 0x6c, 0xb3, 0xba, + 0xe8, 0x1f, 0x28, 0xf1, 0x30, 0x61, 0x52, 0x55, 0xf2, 0x75, 0xd4, 0x9c, 0xf7, 0xed, 0x1f, 0x7e, + 0x00, 0x73, 0x03, 0x46, 0xbb, 0x4c, 0xc6, 0x95, 0x82, 0x1e, 0xce, 0x86, 0x95, 0x45, 0x23, 0x4e, + 0x92, 0x16, 0x31, 0x27, 0xa8, 0xad, 0x4b, 0xf4, 0x8e, 0x98, 0xf4, 0x33, 0x84, 0x57, 0x81, 0x65, + 0x6d, 0x4d, 0x27, 0x8e, 0x58, 0xc0, 0x7b, 0x9c, 0x49, 0x5c, 0x7c, 0x7f, 0x71, 0x9a, 0x47, 0x8d, + 0xcf, 0x0e, 0x94, 0xa7, 0xc4, 0xe2, 0xbb, 0x30, 0x17, 0x0c, 0xc7, 0xb1, 0x62, 0xd2, 0x48, 0xf0, + 0x16, 0x52, 0xe5, 0x05, 0xe9, 0xd4, 0x51, 0x3b, 0xe7, 0x67, 0x6b, 0xf8, 0x15, 0xac, 0x4e, 0x18, + 0xef, 0x0f, 0x14, 0xeb, 0x76, 0x6c, 0x2e, 0xb6, 0x76, 0x7b, 0xb7, 0xb0, 0xfb, 0xb9, 0xed, 0xb5, + 0x67, 0x5a, 0xb5, 0x73, 0xfe, 0xca, 0x64, 0x36, 0x15, 0x63, 0x0f, 0x96, 0x46, 0x4c, 0xd1, 0x2e, + 0x55, 0xb4, 0x63, 0xce, 0x50, 0x5e, 0xf3, 0xfd, 0x37, 0xeb, 0x43, 0x7a, 0xdb, 0xc8, 0xbe, 0x2d, + 0xf4, 0x17, 0x33, 0x88, 0x19, 0xd2, 0x0e, 0x94, 0x25, 0x55, 0xac, 0x33, 0xe4, 0x23, 0xae, 0x32, + 0x23, 0xd7, 0x7f, 0x65, 0xa4, 0x4f, 0x15, 0x7b, 0x9c, 0x56, 0xf9, 0x20, 0xb3, 0x30, 0xf6, 0xaa, + 0xb0, 0x6a, 0xd5, 0x5e, 0x77, 0xf2, 0xa3, 0x03, 0xcb, 0x3f, 0xe9, 0xc0, 0xc7, 0x30, 0x7f, 0xe9, + 0x0e, 0xd2, 0x64, 0x07, 0xbf, 0xef, 0x0e, 0xb1, 0x5f, 0x93, 0xf6, 0x40, 0x1f, 0xcd, 0xb7, 0xc8, + 0x99, 0x47, 0xfe, 0x25, 0x5b, 0xf5, 0x1d, 0x82, 0xc5, 0x99, 0x3a, 0xbc, 0x3e, 0x7d, 0xe1, 0xa7, + 0xc6, 0x6a, 0xef, 0xfe, 0x2e, 0x94, 0x8c, 0xe5, 0x76, 0x8c, 0x6b, 0xc4, 0x3c, 0x43, 0x24, 0x7b, + 0x86, 0xc8, 0xb3, 0x47, 0xa1, 0xda, 0x6a, 0x1d, 0xd2, 0xe1, 0x98, 0x59, 0xf8, 0x3d, 0xa7, 0x89, + 0x7c, 0x0b, 0xfb, 0x13, 0xf3, 0xf1, 0x9e, 0x9e, 0x9d, 0xd7, 0xd0, 0x97, 0xf3, 0x1a, 0xfa, 0x7e, + 0x5e, 0x43, 0xb0, 0xcb, 0x85, 0xc1, 0x1a, 0x3f, 0x6e, 0x6c, 0xdc, 0x01, 0x7a, 0xe1, 0x24, 0xad, + 0xa3, 0x92, 0x56, 0xb0, 0xf5, 0x23, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x43, 0x0e, 0x18, 0x08, 0x06, + 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/thrift_proxy/v2alpha1/thrift_proxy.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/thrift_proxy/v2alpha1/thrift_proxy.pb.go index e124595b7d9c..39f32007e3e7 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/thrift_proxy/v2alpha1/thrift_proxy.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/thrift_proxy/v2alpha1/thrift_proxy.pb.go @@ -56,7 +56,7 @@ func (x TransportType) String() string { return proto.EnumName(TransportType_name, int32(x)) } func (TransportType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_thrift_proxy_3375db5f87c43dda, []int{0} + return fileDescriptor_thrift_proxy_a3bbf1bca77491c8, []int{0} } // Thrift Protocol types supported by Envoy. @@ -97,7 +97,7 @@ func (x ProtocolType) String() string { return proto.EnumName(ProtocolType_name, int32(x)) } func (ProtocolType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_thrift_proxy_3375db5f87c43dda, []int{1} + return fileDescriptor_thrift_proxy_a3bbf1bca77491c8, []int{1} } // [#comment:next free field: 6] @@ -126,7 +126,7 @@ func (m *ThriftProxy) Reset() { *m = ThriftProxy{} } func (m *ThriftProxy) String() string { return proto.CompactTextString(m) } func (*ThriftProxy) ProtoMessage() {} func (*ThriftProxy) Descriptor() ([]byte, []int) { - return fileDescriptor_thrift_proxy_3375db5f87c43dda, []int{0} + return fileDescriptor_thrift_proxy_a3bbf1bca77491c8, []int{0} } func (m *ThriftProxy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -216,7 +216,7 @@ func (m *ThriftFilter) Reset() { *m = ThriftFilter{} } func (m *ThriftFilter) String() string { return proto.CompactTextString(m) } func (*ThriftFilter) ProtoMessage() {} func (*ThriftFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_thrift_proxy_3375db5f87c43dda, []int{1} + return fileDescriptor_thrift_proxy_a3bbf1bca77491c8, []int{1} } func (m *ThriftFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -387,7 +387,7 @@ func (m *ThriftProtocolOptions) Reset() { *m = ThriftProtocolOptions{} } func (m *ThriftProtocolOptions) String() string { return proto.CompactTextString(m) } func (*ThriftProtocolOptions) ProtoMessage() {} func (*ThriftProtocolOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_thrift_proxy_3375db5f87c43dda, []int{2} + return fileDescriptor_thrift_proxy_a3bbf1bca77491c8, []int{2} } func (m *ThriftProtocolOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1225,46 +1225,47 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/network/thrift_proxy/v2alpha1/thrift_proxy.proto", fileDescriptor_thrift_proxy_3375db5f87c43dda) + proto.RegisterFile("envoy/config/filter/network/thrift_proxy/v2alpha1/thrift_proxy.proto", fileDescriptor_thrift_proxy_a3bbf1bca77491c8) } -var fileDescriptor_thrift_proxy_3375db5f87c43dda = []byte{ - // 590 bytes of a gzipped FileDescriptorProto +var fileDescriptor_thrift_proxy_a3bbf1bca77491c8 = []byte{ + // 605 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x92, 0xcd, 0x6e, 0xd3, 0x40, - 0x10, 0xc7, 0xb3, 0x76, 0x5a, 0xda, 0x71, 0x12, 0x99, 0x55, 0x51, 0x43, 0x04, 0x51, 0xd4, 0x53, - 0xd4, 0x83, 0xad, 0x86, 0x13, 0x07, 0x04, 0x4e, 0x9a, 0xaa, 0x95, 0xda, 0xda, 0xda, 0xba, 0xe2, - 0x43, 0x42, 0x91, 0x9b, 0xda, 0x8e, 0x21, 0x78, 0xad, 0xf5, 0x26, 0x34, 0x57, 0x4e, 0xbc, 0x07, - 0x37, 0x1e, 0x81, 0x13, 0x47, 0x8e, 0x3c, 0x42, 0x95, 0x1b, 0x12, 0x0f, 0x81, 0xbc, 0xeb, 0xb4, - 0x09, 0x39, 0x35, 0x12, 0xdc, 0x76, 0x66, 0x76, 0x7e, 0xff, 0xf9, 0x82, 0x7d, 0x3f, 0x1e, 0xd3, - 0x89, 0xd9, 0xa7, 0x71, 0x10, 0x85, 0x66, 0x10, 0x0d, 0xb9, 0xcf, 0xcc, 0xd8, 0xe7, 0x1f, 0x29, - 0x7b, 0x6f, 0xf2, 0x01, 0x8b, 0x02, 0xde, 0x4b, 0x18, 0xbd, 0x9a, 0x98, 0xe3, 0x96, 0x37, 0x4c, - 0x06, 0xde, 0xde, 0x82, 0xd7, 0x48, 0x18, 0xe5, 0x14, 0xef, 0x09, 0x8a, 0x21, 0x29, 0x86, 0xa4, - 0x18, 0x39, 0xc5, 0x58, 0xf8, 0x3f, 0xa3, 0xd4, 0x9e, 0xdd, 0x5d, 0x98, 0xd1, 0x11, 0xf7, 0xa5, - 0x62, 0xed, 0x61, 0x48, 0x69, 0x38, 0xf4, 0x4d, 0x61, 0x5d, 0x8c, 0x02, 0xd3, 0x8b, 0xf3, 0x62, - 0x6a, 0x8f, 0xfe, 0x0e, 0xa5, 0x9c, 0x8d, 0xfa, 0x3c, 0x8f, 0x6e, 0x8f, 0xbd, 0x61, 0x74, 0xe9, - 0x71, 0xdf, 0x9c, 0x3d, 0xf2, 0xc0, 0x56, 0x48, 0x43, 0x2a, 0x9e, 0x66, 0xf6, 0x92, 0xde, 0x9d, - 0x6b, 0x15, 0x34, 0x57, 0x54, 0xe3, 0x64, 0xc5, 0xe0, 0x5d, 0xd0, 0x52, 0xee, 0x65, 0xa5, 0xf9, - 0x41, 0x74, 0x55, 0x45, 0x0d, 0xd4, 0xdc, 0x6c, 0x6f, 0x7e, 0xfb, 0xf5, 0x5d, 0x2d, 0x32, 0xa5, - 0x81, 0x08, 0x64, 0x51, 0x47, 0x04, 0xf1, 0x3b, 0xd8, 0xe4, 0xcc, 0x8b, 0xd3, 0x84, 0x32, 0x5e, - 0x55, 0x1a, 0xa8, 0x59, 0x69, 0xbd, 0x30, 0xee, 0x3c, 0x29, 0xc3, 0x9d, 0x31, 0xdc, 0x49, 0xe2, - 0xb7, 0x21, 0xd3, 0x5a, 0xfb, 0x84, 0x14, 0x1d, 0x91, 0x5b, 0x3c, 0x0e, 0x61, 0x43, 0x14, 0xdc, - 0xa7, 0xc3, 0xaa, 0x2a, 0xa4, 0x9e, 0xaf, 0x20, 0xe5, 0xe4, 0x88, 0x25, 0xa5, 0x1b, 0x38, 0x1e, - 0x40, 0x49, 0xec, 0xa1, 0x27, 0xb9, 0xd5, 0x62, 0x03, 0x35, 0xb5, 0x56, 0x77, 0x05, 0x31, 0x92, - 0x61, 0x3a, 0x22, 0x61, 0xc4, 0x3c, 0x1e, 0xd1, 0x98, 0x68, 0xec, 0xd6, 0x87, 0x03, 0xa8, 0xe4, - 0x89, 0x12, 0x97, 0x56, 0xd7, 0x1a, 0x6a, 0x53, 0x5b, 0xa9, 0x31, 0xb9, 0xc2, 0x03, 0xf1, 0x95, - 0x94, 0xf9, 0x9c, 0x95, 0xee, 0x7c, 0x45, 0x50, 0x9a, 0x8f, 0xe3, 0xc7, 0x50, 0x8c, 0xbd, 0x0f, - 0xfe, 0xf2, 0x72, 0x85, 0x1b, 0xef, 0xc1, 0x7a, 0xde, 0xbb, 0x22, 0x7a, 0xdf, 0x36, 0xe4, 0xc1, - 0x19, 0xb3, 0x83, 0x33, 0xce, 0xc4, 0xc1, 0x1d, 0x16, 0x48, 0xfe, 0x11, 0x3f, 0x85, 0x12, 0x9f, - 0x24, 0xfe, 0xe5, 0x6c, 0x68, 0xaa, 0x48, 0xdc, 0x5a, 0x4a, 0xb4, 0xe2, 0xc9, 0x61, 0x81, 0x68, - 0xe2, 0xaf, 0x9c, 0x42, 0xbb, 0x0c, 0x9a, 0x4c, 0xea, 0x65, 0xde, 0x9d, 0xdf, 0x08, 0x1e, 0xdc, - 0xdc, 0xa3, 0xd8, 0x88, 0x9d, 0x64, 0xa3, 0x4b, 0x17, 0xaf, 0x0d, 0xfd, 0xbf, 0x6b, 0x53, 0xfe, - 0xe1, 0xb5, 0xed, 0xda, 0x50, 0x5e, 0x28, 0x08, 0x63, 0xa8, 0x58, 0xe7, 0xae, 0xdd, 0x73, 0x89, - 0x75, 0x7a, 0xe6, 0xd8, 0xc4, 0xd5, 0x0b, 0x18, 0x60, 0xfd, 0x80, 0x58, 0x27, 0xdd, 0x7d, 0x1d, - 0xe1, 0x12, 0x6c, 0x9c, 0x9f, 0xe6, 0x96, 0x92, 0x45, 0x0e, 0xbb, 0xd6, 0x7e, 0x97, 0xe8, 0x6a, - 0xad, 0xf8, 0xf9, 0x4b, 0xbd, 0xb0, 0xfb, 0x16, 0x4a, 0xf3, 0xb2, 0xf8, 0x3e, 0x94, 0x05, 0xcf, - 0x21, 0xb6, 0x6b, 0x77, 0xec, 0x63, 0x89, 0x6b, 0x1f, 0x9d, 0x5a, 0xe4, 0xb5, 0x8e, 0x70, 0x05, - 0xe0, 0xd8, 0x7a, 0xd5, 0xcb, 0x6d, 0x05, 0x6b, 0x70, 0xaf, 0x63, 0x9f, 0x38, 0x56, 0xc7, 0xd5, - 0xd5, 0xcc, 0x70, 0x5f, 0x1e, 0xb9, 0x6e, 0x97, 0xe8, 0x45, 0x89, 0x6f, 0xeb, 0x3f, 0xa6, 0x75, - 0xf4, 0x73, 0x5a, 0x47, 0xd7, 0xd3, 0x3a, 0x7a, 0xa3, 0x8c, 0x5b, 0x17, 0xeb, 0xa2, 0x97, 0x27, - 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xfc, 0xb1, 0xbc, 0x69, 0x05, 0x00, 0x00, + 0x10, 0xc7, 0xb3, 0x76, 0x5a, 0xda, 0x71, 0x12, 0x99, 0x55, 0x51, 0x4d, 0x04, 0x51, 0xd4, 0x53, + 0xd4, 0x83, 0xad, 0x06, 0x71, 0xe0, 0x80, 0x8a, 0x9d, 0xa6, 0x6a, 0xa5, 0xb6, 0xb6, 0xb6, 0xae, + 0xf8, 0x90, 0x50, 0xe4, 0xb6, 0xb6, 0x6b, 0x08, 0x5e, 0x6b, 0xbd, 0x09, 0xcd, 0x95, 0x13, 0xef, + 0xc1, 0x9d, 0x07, 0xe0, 0xc4, 0x91, 0x23, 0x8f, 0x50, 0xf5, 0x86, 0xc4, 0x43, 0x20, 0xef, 0x3a, + 0x6d, 0x43, 0x4f, 0x8d, 0x04, 0xb7, 0x9d, 0x99, 0x9d, 0xdf, 0x7f, 0xbe, 0x60, 0x2b, 0x4c, 0xc7, + 0x74, 0x62, 0x9d, 0xd0, 0x34, 0x4a, 0x62, 0x2b, 0x4a, 0x86, 0x3c, 0x64, 0x56, 0x1a, 0xf2, 0x8f, + 0x94, 0xbd, 0xb7, 0xf8, 0x19, 0x4b, 0x22, 0x3e, 0xc8, 0x18, 0x3d, 0x9f, 0x58, 0xe3, 0x6e, 0x30, + 0xcc, 0xce, 0x82, 0x8d, 0x19, 0xaf, 0x99, 0x31, 0xca, 0x29, 0xde, 0x10, 0x14, 0x53, 0x52, 0x4c, + 0x49, 0x31, 0x4b, 0x8a, 0x39, 0xf3, 0x7f, 0x4a, 0x69, 0x3e, 0xbf, 0xbb, 0x30, 0xa3, 0x23, 0x1e, + 0x4a, 0xc5, 0xe6, 0xc3, 0x98, 0xd2, 0x78, 0x18, 0x5a, 0xc2, 0x3a, 0x1e, 0x45, 0x56, 0x90, 0x96, + 0xc5, 0x34, 0x1f, 0xfd, 0x1d, 0xca, 0x39, 0x1b, 0x9d, 0xf0, 0x32, 0xba, 0x3a, 0x0e, 0x86, 0xc9, + 0x69, 0xc0, 0x43, 0x6b, 0xfa, 0x28, 0x03, 0x2b, 0x31, 0x8d, 0xa9, 0x78, 0x5a, 0xc5, 0x4b, 0x7a, + 0xd7, 0x2e, 0x54, 0xd0, 0x7c, 0x51, 0x8d, 0x57, 0x14, 0x83, 0xd7, 0x41, 0xcb, 0x79, 0x50, 0x94, + 0x16, 0x46, 0xc9, 0xb9, 0x81, 0xda, 0xa8, 0xb3, 0xec, 0x2c, 0x7f, 0xfb, 0xf5, 0x5d, 0xad, 0x32, + 0xa5, 0x8d, 0x08, 0x14, 0x51, 0x4f, 0x04, 0xf1, 0x3b, 0x58, 0xe6, 0x2c, 0x48, 0xf3, 0x8c, 0x32, + 0x6e, 0x28, 0x6d, 0xd4, 0x69, 0x74, 0x5f, 0x98, 0x77, 0x9e, 0x94, 0xe9, 0x4f, 0x19, 0xfe, 0x24, + 0x0b, 0x1d, 0x28, 0xb4, 0x16, 0x3e, 0x21, 0x45, 0x47, 0xe4, 0x1a, 0x8f, 0x63, 0x58, 0x12, 0x05, + 0x9f, 0xd0, 0xa1, 0xa1, 0x0a, 0xa9, 0xcd, 0x39, 0xa4, 0xbc, 0x12, 0x71, 0x4b, 0xe9, 0x0a, 0x8e, + 0xcf, 0xa0, 0x26, 0xf6, 0x30, 0x90, 0x5c, 0xa3, 0xda, 0x46, 0x1d, 0xad, 0xdb, 0x9f, 0x43, 0x8c, + 0x14, 0x98, 0x9e, 0x48, 0x18, 0xb1, 0x80, 0x27, 0x34, 0x25, 0x1a, 0xbb, 0xf6, 0xe1, 0x08, 0x1a, + 0x65, 0xa2, 0xc4, 0xe5, 0xc6, 0x42, 0x5b, 0xed, 0x68, 0x73, 0x35, 0x26, 0x57, 0xb8, 0x2d, 0xbe, + 0x92, 0x3a, 0xbf, 0x61, 0xe5, 0x6b, 0x5f, 0x11, 0xd4, 0x6e, 0xc6, 0xf1, 0x63, 0xa8, 0xa6, 0xc1, + 0x87, 0xf0, 0xf6, 0x72, 0x85, 0x1b, 0x3f, 0x85, 0xc5, 0xb2, 0x77, 0x45, 0xf4, 0xbe, 0x6a, 0xca, + 0x83, 0x33, 0xa7, 0x07, 0x67, 0x1e, 0x8a, 0x83, 0x73, 0x14, 0x03, 0xed, 0x54, 0x48, 0xf9, 0x19, + 0x3f, 0x83, 0x1a, 0x9f, 0x64, 0xe1, 0xe9, 0x74, 0x70, 0xaa, 0x48, 0x5e, 0xb9, 0x95, 0x6c, 0xa7, + 0x93, 0x9d, 0x0a, 0xd1, 0xc4, 0x5f, 0x39, 0x09, 0xa7, 0x0e, 0x9a, 0x4c, 0x1a, 0x14, 0xde, 0xb5, + 0xdf, 0x08, 0x1e, 0x5c, 0xdd, 0xa4, 0xd8, 0x8a, 0x9b, 0x15, 0xe3, 0xcb, 0x67, 0x2f, 0x0e, 0xfd, + 0xbf, 0x8b, 0x53, 0xfe, 0xe1, 0xc5, 0xad, 0xbb, 0x50, 0x9f, 0x29, 0x08, 0x63, 0x68, 0xd8, 0x47, + 0xbe, 0x3b, 0xf0, 0x89, 0x7d, 0x70, 0xe8, 0xb9, 0xc4, 0xd7, 0x2b, 0x18, 0x60, 0x71, 0x9b, 0xd8, + 0xfb, 0xfd, 0x2d, 0x1d, 0xe1, 0x1a, 0x2c, 0x1d, 0x1d, 0x94, 0x96, 0x52, 0x44, 0x76, 0xfa, 0xf6, + 0x56, 0x9f, 0xe8, 0x6a, 0xb3, 0xfa, 0xf9, 0x4b, 0xab, 0xb2, 0xfe, 0x16, 0x6a, 0x37, 0x65, 0xf1, + 0x7d, 0xa8, 0x0b, 0x9e, 0x47, 0x5c, 0xdf, 0xed, 0xb9, 0x7b, 0x12, 0xe7, 0xec, 0x1e, 0xd8, 0xe4, + 0xb5, 0x8e, 0x70, 0x03, 0x60, 0xcf, 0x7e, 0x35, 0x28, 0x6d, 0x05, 0x6b, 0x70, 0xaf, 0xe7, 0xee, + 0x7b, 0x76, 0xcf, 0xd7, 0xd5, 0xc2, 0xf0, 0x5f, 0xee, 0xfa, 0x7e, 0x9f, 0xe8, 0x55, 0x89, 0x77, + 0x0e, 0x7f, 0x5c, 0xb6, 0xd0, 0xcf, 0xcb, 0x16, 0xba, 0xb8, 0x6c, 0x21, 0xd8, 0x4c, 0xa8, 0x1c, + 0x8b, 0x6c, 0xfc, 0xce, 0x13, 0xf2, 0xd0, 0x1b, 0x65, 0xdc, 0x3d, 0x5e, 0x14, 0xe3, 0x78, 0xf2, + 0x27, 0x00, 0x00, 0xff, 0xff, 0x08, 0x13, 0x52, 0x6d, 0xb0, 0x05, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/thrift/rate_limit/v2alpha1/rate_limit.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/thrift/rate_limit/v2alpha1/rate_limit.pb.go index e37ec699350f..16c1d5a27a03 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/thrift/rate_limit/v2alpha1/rate_limit.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/thrift/rate_limit/v2alpha1/rate_limit.pb.go @@ -66,7 +66,7 @@ func (m *RateLimit) Reset() { *m = RateLimit{} } func (m *RateLimit) String() string { return proto.CompactTextString(m) } func (*RateLimit) ProtoMessage() {} func (*RateLimit) Descriptor() ([]byte, []int) { - return fileDescriptor_rate_limit_108da52d60ccd154, []int{0} + return fileDescriptor_rate_limit_480a6362638cfba4, []int{0} } func (m *RateLimit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -538,32 +538,33 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/thrift/rate_limit/v2alpha1/rate_limit.proto", fileDescriptor_rate_limit_108da52d60ccd154) + proto.RegisterFile("envoy/config/filter/thrift/rate_limit/v2alpha1/rate_limit.proto", fileDescriptor_rate_limit_480a6362638cfba4) } -var fileDescriptor_rate_limit_108da52d60ccd154 = []byte{ - // 356 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x51, 0xbd, 0x4e, 0xf3, 0x30, - 0x14, 0x95, 0xd3, 0x9f, 0xaf, 0xf5, 0x27, 0x04, 0x44, 0x08, 0x42, 0x87, 0x34, 0xc0, 0x12, 0x75, - 0xb0, 0xd5, 0x32, 0x31, 0x21, 0x95, 0x8e, 0xb0, 0x84, 0x8d, 0x25, 0x72, 0x9b, 0x9b, 0xd4, 0x92, - 0x13, 0x57, 0xae, 0x13, 0xa9, 0x4f, 0x02, 0xcf, 0xc2, 0xc4, 0xc8, 0xc8, 0x1b, 0x80, 0xba, 0xf1, - 0x16, 0xa8, 0x71, 0x52, 0x5a, 0xb6, 0x9b, 0x73, 0x4e, 0xce, 0xb9, 0xf7, 0x18, 0xdf, 0x42, 0x56, - 0xc8, 0x15, 0x9d, 0xc9, 0x2c, 0xe6, 0x09, 0x8d, 0xb9, 0xd0, 0xa0, 0xa8, 0x9e, 0x2b, 0x1e, 0x6b, - 0xaa, 0x98, 0x86, 0x50, 0xf0, 0x94, 0x6b, 0x5a, 0x8c, 0x98, 0x58, 0xcc, 0xd9, 0x70, 0x07, 0x23, - 0x0b, 0x25, 0xb5, 0xb4, 0x49, 0x69, 0x40, 0x8c, 0x01, 0x31, 0x06, 0xc4, 0x18, 0x90, 0x1d, 0x71, - 0x6d, 0xd0, 0xbb, 0xda, 0x0b, 0xdc, 0x28, 0xea, 0x04, 0xaa, 0xc4, 0xd2, 0x98, 0xf6, 0xdc, 0x44, - 0xca, 0x44, 0x00, 0x2d, 0xbf, 0xa6, 0x79, 0x4c, 0xa3, 0x5c, 0x31, 0xcd, 0x65, 0x56, 0xf1, 0x67, - 0x05, 0x13, 0x3c, 0x62, 0x1a, 0x68, 0x3d, 0x54, 0xc4, 0x49, 0x22, 0x13, 0x59, 0x8e, 0x74, 0x33, - 0x19, 0xf4, 0xf2, 0xd9, 0xc2, 0xdd, 0x80, 0x69, 0xb8, 0xdf, 0x24, 0xd9, 0x17, 0xb8, 0x1d, 0xc9, - 0x94, 0xf1, 0xcc, 0x41, 0x1e, 0xf2, 0xbb, 0xe3, 0xee, 0xeb, 0xf7, 0x5b, 0xa3, 0xa9, 0x2c, 0x0f, - 0x05, 0x15, 0x61, 0xf7, 0x71, 0x6b, 0xa9, 0x59, 0x02, 0x8e, 0xe5, 0x21, 0xff, 0xa0, 0x52, 0x0c, - 0x2c, 0x07, 0x07, 0x06, 0xb7, 0x6f, 0xf0, 0x3f, 0xcd, 0x53, 0x90, 0xb9, 0x76, 0x1a, 0x1e, 0xf2, - 0xff, 0x8f, 0xce, 0x89, 0x59, 0x99, 0xd4, 0x2b, 0x93, 0x49, 0xb5, 0xf2, 0xb8, 0xf9, 0xf2, 0xd9, - 0x47, 0x41, 0xad, 0xb7, 0x07, 0xf8, 0x38, 0x66, 0x5c, 0xe4, 0x0a, 0xc2, 0x54, 0x46, 0x10, 0x46, - 0x90, 0xad, 0x9c, 0xa6, 0x87, 0xfc, 0x4e, 0x70, 0x58, 0x11, 0x0f, 0x32, 0x82, 0x09, 0x64, 0x2b, - 0x3b, 0xc4, 0xf6, 0x6f, 0x87, 0xe1, 0x12, 0x54, 0xc1, 0x67, 0xe0, 0xb4, 0xca, 0xc4, 0xe1, 0x7e, - 0xf3, 0xdb, 0x26, 0x49, 0x31, 0x22, 0xdb, 0x63, 0x1f, 0xcd, 0x2f, 0x77, 0xa5, 0x26, 0x38, 0x52, - 0x7f, 0xf0, 0xf1, 0xe9, 0xfb, 0xda, 0x45, 0x1f, 0x6b, 0x17, 0x7d, 0xad, 0x5d, 0xf4, 0xd4, 0xa9, - 0x5f, 0x69, 0xda, 0x2e, 0xcf, 0xb8, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x60, 0x91, 0xc8, - 0x1f, 0x02, 0x00, 0x00, +var fileDescriptor_rate_limit_480a6362638cfba4 = []byte{ + // 374 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x51, 0x4f, 0x4b, 0xeb, 0x40, + 0x1c, 0x64, 0xd3, 0x3f, 0xaf, 0xdd, 0xc7, 0xe3, 0xbd, 0x17, 0x04, 0x63, 0x0f, 0x69, 0xd4, 0x4b, + 0xe8, 0x61, 0x97, 0xd6, 0x93, 0x20, 0x08, 0xb5, 0x47, 0x05, 0x89, 0xe0, 0xc1, 0x4b, 0xd8, 0x36, + 0x9b, 0x74, 0x21, 0xc9, 0xaf, 0x6c, 0x37, 0xc1, 0x7c, 0x12, 0xfd, 0x2c, 0x9e, 0x3c, 0x7a, 0xf4, + 0x1b, 0x28, 0xbd, 0xf9, 0x2d, 0xa4, 0xd9, 0xa4, 0xb6, 0xde, 0xbc, 0x4d, 0x66, 0x26, 0x33, 0xbf, + 0x4c, 0xf0, 0x39, 0x4f, 0x73, 0x28, 0xe8, 0x0c, 0xd2, 0x50, 0x44, 0x34, 0x14, 0xb1, 0xe2, 0x92, + 0xaa, 0xb9, 0x14, 0xa1, 0xa2, 0x92, 0x29, 0xee, 0xc7, 0x22, 0x11, 0x8a, 0xe6, 0x23, 0x16, 0x2f, + 0xe6, 0x6c, 0xb8, 0xc5, 0x91, 0x85, 0x04, 0x05, 0x26, 0x29, 0x03, 0x88, 0x0e, 0x20, 0x3a, 0x80, + 0xe8, 0x00, 0xb2, 0x65, 0xae, 0x03, 0x7a, 0xc7, 0x3b, 0x85, 0x6b, 0x47, 0xdd, 0x40, 0x65, 0xbc, + 0xd4, 0xa1, 0x3d, 0x3b, 0x02, 0x88, 0x62, 0x4e, 0xcb, 0xa7, 0x69, 0x16, 0xd2, 0x20, 0x93, 0x4c, + 0x09, 0x48, 0x2b, 0x7d, 0x3f, 0x67, 0xb1, 0x08, 0x98, 0xe2, 0xb4, 0x06, 0x95, 0xb0, 0x17, 0x41, + 0x04, 0x25, 0xa4, 0x6b, 0xa4, 0xd9, 0xa3, 0x07, 0x03, 0x77, 0x3d, 0xa6, 0xf8, 0xe5, 0xba, 0xc9, + 0x3c, 0xc4, 0xed, 0x00, 0x12, 0x26, 0x52, 0x0b, 0x39, 0xc8, 0xed, 0x8e, 0xbb, 0x4f, 0x1f, 0xcf, + 0x8d, 0xa6, 0x34, 0x1c, 0xe4, 0x55, 0x82, 0xd9, 0xc7, 0xad, 0xa5, 0x62, 0x11, 0xb7, 0x0c, 0x07, + 0xb9, 0x7f, 0x2a, 0xc7, 0xc0, 0xb0, 0xb0, 0xa7, 0x79, 0xf3, 0x14, 0xff, 0x52, 0x22, 0xe1, 0x90, + 0x29, 0xab, 0xe1, 0x20, 0xf7, 0xf7, 0xe8, 0x80, 0xe8, 0x93, 0x49, 0x7d, 0x32, 0x99, 0x54, 0x27, + 0x8f, 0x9b, 0x8f, 0x6f, 0x7d, 0xe4, 0xd5, 0x7e, 0x73, 0x80, 0xff, 0x87, 0x4c, 0xc4, 0x99, 0xe4, + 0x7e, 0x02, 0x01, 0xf7, 0x03, 0x9e, 0x16, 0x56, 0xd3, 0x41, 0x6e, 0xc7, 0xfb, 0x5b, 0x09, 0x57, + 0x10, 0xf0, 0x09, 0x4f, 0x0b, 0xd3, 0xc7, 0xe6, 0xd7, 0x86, 0xfe, 0x92, 0xcb, 0x5c, 0xcc, 0xb8, + 0xd5, 0x2a, 0x1b, 0x87, 0xbb, 0xcb, 0x6f, 0x96, 0x24, 0xf9, 0x88, 0x6c, 0x3e, 0xf6, 0x46, 0xbf, + 0x72, 0x51, 0x7a, 0xbc, 0x7f, 0xf2, 0x1b, 0x3f, 0xbe, 0x7d, 0x59, 0xd9, 0xe8, 0x75, 0x65, 0xa3, + 0xf7, 0x95, 0x8d, 0xf0, 0x99, 0x00, 0x1d, 0xba, 0x90, 0x70, 0x5f, 0xfc, 0xf0, 0xcf, 0x5e, 0xa3, + 0xbb, 0x4e, 0x8d, 0xa7, 0xed, 0x72, 0x86, 0x93, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x34, + 0x1d, 0x73, 0x5f, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/thrift/router/v2alpha1/router.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/thrift/router/v2alpha1/router.pb.go index 977836617a6e..b6d09108eab8 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/thrift/router/v2alpha1/router.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/thrift/router/v2alpha1/router.pb.go @@ -30,7 +30,7 @@ func (m *Router) Reset() { *m = Router{} } func (m *Router) String() string { return proto.CompactTextString(m) } func (*Router) ProtoMessage() {} func (*Router) Descriptor() ([]byte, []int) { - return fileDescriptor_router_2646378d5ce3d0bb, []int{0} + return fileDescriptor_router_7f9b16b45f368a9b, []int{0} } func (m *Router) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -274,17 +274,18 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/filter/thrift/router/v2alpha1/router.proto", fileDescriptor_router_2646378d5ce3d0bb) + proto.RegisterFile("envoy/config/filter/thrift/router/v2alpha1/router.proto", fileDescriptor_router_7f9b16b45f368a9b) } -var fileDescriptor_router_2646378d5ce3d0bb = []byte{ - // 122 bytes of a gzipped FileDescriptorProto +var fileDescriptor_router_7f9b16b45f368a9b = []byte{ + // 140 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0xcb, 0xcc, 0x29, 0x49, 0x2d, 0xd2, 0x2f, 0xc9, 0x28, 0xca, 0x4c, 0x2b, 0xd1, 0x2f, 0xca, 0x2f, 0x05, 0xf1, 0xca, 0x8c, 0x12, 0x73, 0x0a, 0x32, 0x12, 0x0d, 0xa1, 0x7c, 0xbd, 0x82, 0xa2, 0xfc, 0x92, 0x7c, 0x21, 0x2d, 0xb0, 0x46, 0x3d, 0x88, 0x46, 0x3d, 0x88, 0x46, 0x3d, 0x88, 0x46, 0x3d, 0xa8, 0x42, 0x98, 0x46, 0x25, 0x0e, - 0x2e, 0xb6, 0x20, 0xb0, 0x90, 0x93, 0xd8, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, - 0x78, 0x24, 0xc7, 0x18, 0xc5, 0x01, 0x53, 0x91, 0xc4, 0x06, 0x36, 0xd4, 0x18, 0x10, 0x00, 0x00, - 0xff, 0xff, 0x7e, 0x28, 0x3d, 0x1e, 0x8f, 0x00, 0x00, 0x00, + 0x2e, 0xb6, 0x20, 0xb0, 0x90, 0x53, 0xd0, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, + 0x78, 0x24, 0xc7, 0xc8, 0x65, 0x91, 0x99, 0xaf, 0x07, 0x36, 0xa6, 0xa0, 0x28, 0xbf, 0xa2, 0x52, + 0x8f, 0x78, 0x13, 0x03, 0x18, 0xa3, 0x38, 0x60, 0xec, 0x24, 0x36, 0xb0, 0x83, 0x8c, 0x01, 0x01, + 0x00, 0x00, 0xff, 0xff, 0xd7, 0x58, 0xb4, 0xf1, 0xcb, 0x00, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/grpc_credential/v2alpha/file_based_metadata.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/grpc_credential/v2alpha/file_based_metadata.pb.go index ec80900e5825..3302e8eca87c 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/grpc_credential/v2alpha/file_based_metadata.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/grpc_credential/v2alpha/file_based_metadata.pb.go @@ -40,7 +40,7 @@ func (m *FileBasedMetadataConfig) Reset() { *m = FileBasedMetadataConfig func (m *FileBasedMetadataConfig) String() string { return proto.CompactTextString(m) } func (*FileBasedMetadataConfig) ProtoMessage() {} func (*FileBasedMetadataConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_file_based_metadata_41f4c87ca9993d15, []int{0} + return fileDescriptor_file_based_metadata_56976b90d366cd91, []int{0} } func (m *FileBasedMetadataConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -430,25 +430,26 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/grpc_credential/v2alpha/file_based_metadata.proto", fileDescriptor_file_based_metadata_41f4c87ca9993d15) + proto.RegisterFile("envoy/config/grpc_credential/v2alpha/file_based_metadata.proto", fileDescriptor_file_based_metadata_56976b90d366cd91) } -var fileDescriptor_file_based_metadata_41f4c87ca9993d15 = []byte{ - // 255 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x8f, 0xc1, 0x4a, 0xc3, 0x30, - 0x18, 0xc7, 0x89, 0x82, 0xb2, 0x4c, 0x2f, 0x05, 0xb1, 0x88, 0x2b, 0x43, 0x3d, 0xec, 0x94, 0x40, - 0xbd, 0xef, 0x30, 0xc5, 0x8b, 0x08, 0x32, 0x6f, 0x5e, 0xc2, 0xb7, 0xf4, 0xeb, 0x16, 0xac, 0x4d, - 0xf8, 0x16, 0x8b, 0x7d, 0x18, 0xdf, 0xc7, 0xa3, 0x8f, 0x20, 0x7d, 0x12, 0x49, 0xd2, 0x93, 0xd7, - 0x5f, 0xf2, 0xfb, 0xfd, 0x13, 0xbe, 0xc4, 0xb6, 0xb3, 0xbd, 0xd4, 0xb6, 0xad, 0xcd, 0x56, 0x6e, - 0xc9, 0x69, 0xa5, 0x09, 0x2b, 0x6c, 0xbd, 0x81, 0x46, 0x76, 0x25, 0x34, 0x6e, 0x07, 0xb2, 0x36, - 0x0d, 0xaa, 0x0d, 0xec, 0xb1, 0x52, 0xef, 0xe8, 0xa1, 0x02, 0x0f, 0xc2, 0x91, 0xf5, 0x36, 0xbb, - 0x89, 0xbe, 0x48, 0xbe, 0xf8, 0xe7, 0x8b, 0xd1, 0xbf, 0xb8, 0x4c, 0x2b, 0xe0, 0x8c, 0xec, 0x4a, - 0xa9, 0x2d, 0xa1, 0x0c, 0xb5, 0xd4, 0xb8, 0xfa, 0x62, 0xfc, 0xfc, 0xc1, 0x34, 0xb8, 0x0a, 0x03, - 0x4f, 0x63, 0xff, 0x2e, 0x16, 0xb3, 0x25, 0x9f, 0xee, 0x51, 0x13, 0x7a, 0x15, 0x60, 0xce, 0xe6, - 0x6c, 0x31, 0x2d, 0x67, 0x22, 0xad, 0x82, 0x33, 0xa2, 0x2b, 0x45, 0xe8, 0x89, 0x7b, 0xf0, 0xf0, - 0x62, 0x3f, 0x48, 0xe3, 0x9a, 0x27, 0x23, 0x90, 0x6c, 0xc6, 0xf9, 0x0e, 0xa1, 0x42, 0x52, 0x6f, - 0xd8, 0xe7, 0x07, 0x73, 0xb6, 0x98, 0xac, 0x27, 0x89, 0x3c, 0x62, 0x9f, 0x5d, 0xf3, 0xd3, 0xf1, - 0xd8, 0x11, 0xd6, 0xe6, 0x33, 0x3f, 0x8c, 0x37, 0x4e, 0x12, 0x7c, 0x8e, 0x6c, 0x75, 0xf6, 0x3d, - 0x14, 0xec, 0x67, 0x28, 0xd8, 0xef, 0x50, 0xb0, 0xd7, 0xe3, 0xf1, 0x53, 0x9b, 0xa3, 0xf8, 0xfa, - 0xdb, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0x04, 0x51, 0x11, 0x43, 0x01, 0x00, 0x00, +var fileDescriptor_file_based_metadata_56976b90d366cd91 = []byte{ + // 268 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x8f, 0x31, 0x4e, 0xc3, 0x30, + 0x14, 0x86, 0x65, 0x90, 0x40, 0x75, 0x61, 0xc9, 0x42, 0x84, 0x68, 0x54, 0x01, 0x43, 0x27, 0x5b, + 0x32, 0x7b, 0x87, 0x82, 0x58, 0x2a, 0xa4, 0xaa, 0x6c, 0x2c, 0xd6, 0xab, 0xf3, 0xd2, 0x5a, 0x84, + 0xd8, 0x72, 0x4d, 0xd4, 0x1c, 0x86, 0xfb, 0x30, 0x72, 0x04, 0x94, 0x93, 0x20, 0xdb, 0x99, 0x98, + 0xba, 0x45, 0x5f, 0xfc, 0x7d, 0xbf, 0x1e, 0x9d, 0x63, 0xd3, 0x9a, 0x8e, 0x2b, 0xd3, 0x54, 0x7a, + 0xcb, 0xb7, 0xce, 0x2a, 0xa9, 0x1c, 0x96, 0xd8, 0x78, 0x0d, 0x35, 0x6f, 0x05, 0xd4, 0x76, 0x07, + 0xbc, 0xd2, 0x35, 0xca, 0x0d, 0xec, 0xb1, 0x94, 0x1f, 0xe8, 0xa1, 0x04, 0x0f, 0xcc, 0x3a, 0xe3, + 0x4d, 0x76, 0x1f, 0x7d, 0x96, 0x7c, 0xf6, 0xcf, 0x67, 0x83, 0x7f, 0x7d, 0x93, 0x56, 0xc0, 0x6a, + 0xde, 0x0a, 0xae, 0x8c, 0x43, 0x1e, 0x6a, 0xa9, 0x71, 0xfb, 0x45, 0xe8, 0xd5, 0xb3, 0xae, 0x71, + 0x11, 0x06, 0x5e, 0x86, 0xfe, 0x63, 0x2c, 0x66, 0x73, 0x3a, 0xde, 0xa3, 0x72, 0xe8, 0x65, 0x80, + 0x39, 0x99, 0x92, 0xd9, 0x58, 0x4c, 0x58, 0x5a, 0x05, 0xab, 0x59, 0x2b, 0x58, 0xe8, 0xb1, 0x27, + 0xf0, 0xf0, 0x6a, 0x3e, 0x9d, 0xc2, 0x35, 0x4d, 0x46, 0x20, 0xd9, 0x84, 0xd2, 0x1d, 0x42, 0x89, + 0x4e, 0xbe, 0x63, 0x97, 0x9f, 0x4c, 0xc9, 0x6c, 0xb4, 0x1e, 0x25, 0xb2, 0xc4, 0x2e, 0xbb, 0xa3, + 0x97, 0xc3, 0x6f, 0xeb, 0xb0, 0xd2, 0x87, 0xfc, 0x34, 0xbe, 0xb8, 0x48, 0x70, 0x15, 0xd9, 0x62, + 0xf9, 0xdd, 0x17, 0xe4, 0xa7, 0x2f, 0xc8, 0x6f, 0x5f, 0x10, 0x2a, 0xb4, 0x49, 0xf3, 0xd6, 0x99, + 0x43, 0xc7, 0x8e, 0xb9, 0x7f, 0x45, 0xde, 0xce, 0x87, 0xcf, 0xcd, 0x59, 0xbc, 0xf9, 0xe1, 0x2f, + 0x00, 0x00, 0xff, 0xff, 0xc6, 0x2e, 0x39, 0xe0, 0x79, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/health_checker/redis/v2/redis.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/health_checker/redis/v2/redis.pb.go index 65a8b5b59fb1..af9a4a8f9164 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/health_checker/redis/v2/redis.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/health_checker/redis/v2/redis.pb.go @@ -35,7 +35,7 @@ func (m *Redis) Reset() { *m = Redis{} } func (m *Redis) String() string { return proto.CompactTextString(m) } func (*Redis) ProtoMessage() {} func (*Redis) Descriptor() ([]byte, []int) { - return fileDescriptor_redis_c80c6fe2b0b6079c, []int{0} + return fileDescriptor_redis_8f6b3e0675f5a094, []int{0} } func (m *Redis) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -325,18 +325,19 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/health_checker/redis/v2/redis.proto", fileDescriptor_redis_c80c6fe2b0b6079c) + proto.RegisterFile("envoy/config/health_checker/redis/v2/redis.proto", fileDescriptor_redis_8f6b3e0675f5a094) } -var fileDescriptor_redis_c80c6fe2b0b6079c = []byte{ - // 131 bytes of a gzipped FileDescriptorProto +var fileDescriptor_redis_8f6b3e0675f5a094 = []byte{ + // 149 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x48, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0xcf, 0x48, 0x4d, 0xcc, 0x29, 0xc9, 0x88, 0x4f, 0xce, 0x48, 0x4d, 0xce, 0x4e, 0x2d, 0xd2, 0x2f, 0x4a, 0x4d, 0xc9, 0x2c, 0xd6, 0x2f, 0x33, 0x82, 0x30, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x54, 0xc0, 0x3a, 0xf4, 0x20, 0x3a, 0xf4, 0x50, 0x75, 0xe8, 0x41, 0x14, 0x96, 0x19, 0x29, 0x49, 0x72, 0xb1, 0x06, 0x81, 0xd8, 0x42, 0x02, - 0x5c, 0xcc, 0xd9, 0xa9, 0x95, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x20, 0xa6, 0x93, 0xc0, - 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x18, 0xc5, 0x54, 0x66, - 0x94, 0xc4, 0x06, 0x36, 0xd9, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x4b, 0xc6, 0xa8, 0x38, 0x8d, - 0x00, 0x00, 0x00, + 0x5c, 0xcc, 0xd9, 0xa9, 0x95, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x20, 0xa6, 0x93, 0xdb, + 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0xc8, 0x65, 0x94, 0x99, + 0xaf, 0x07, 0x36, 0xb1, 0xa0, 0x28, 0xbf, 0xa2, 0x52, 0x8f, 0x18, 0xc3, 0x03, 0x18, 0xa3, 0x98, + 0xca, 0x8c, 0x92, 0xd8, 0xc0, 0xee, 0x31, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xde, 0x5e, 0x82, + 0x94, 0xc3, 0x00, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/metrics/v2/metrics_service.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/metrics/v2/metrics_service.pb.go index acd661d753dd..d454d92a2e5c 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/metrics/v2/metrics_service.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/metrics/v2/metrics_service.pb.go @@ -37,7 +37,7 @@ func (m *MetricsServiceConfig) Reset() { *m = MetricsServiceConfig{} } func (m *MetricsServiceConfig) String() string { return proto.CompactTextString(m) } func (*MetricsServiceConfig) ProtoMessage() {} func (*MetricsServiceConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_service_a1c7105ce3f555d5, []int{0} + return fileDescriptor_metrics_service_3df08ca9d36172cc, []int{0} } func (m *MetricsServiceConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -335,11 +335,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/metrics/v2/metrics_service.proto", fileDescriptor_metrics_service_a1c7105ce3f555d5) + proto.RegisterFile("envoy/config/metrics/v2/metrics_service.proto", fileDescriptor_metrics_service_3df08ca9d36172cc) } -var fileDescriptor_metrics_service_a1c7105ce3f555d5 = []byte{ - // 196 bytes of a gzipped FileDescriptorProto +var fileDescriptor_metrics_service_3df08ca9d36172cc = []byte{ + // 213 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4d, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0xcf, 0x4d, 0x2d, 0x29, 0xca, 0x4c, 0x2e, 0xd6, 0x2f, 0x33, 0x82, 0x31, 0xe3, 0x8b, 0x53, 0x8b, 0xca, 0x32, 0x93, 0x53, 0xf5, 0x0a, 0x8a, @@ -350,7 +350,8 @@ var fileDescriptor_metrics_service_a1c7105ce3f555d5 = []byte{ 0x08, 0xf9, 0x72, 0xf1, 0x20, 0x1b, 0x23, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xa7, 0x07, 0x71, 0x46, 0x62, 0x41, 0xa6, 0x5e, 0x99, 0x91, 0x1e, 0xc8, 0x36, 0x3d, 0xf7, 0xa2, 0x82, 0x64, 0xa8, 0x5e, 0x27, 0xae, 0x5d, 0x2f, 0x0f, 0x30, 0xb3, 0x76, 0x31, 0x32, 0x09, 0x30, 0x06, 0x71, - 0xa7, 0x23, 0x49, 0xf0, 0x9c, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, - 0x8c, 0x49, 0x6c, 0x60, 0xbb, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x60, 0x7d, 0x9d, 0xae, - 0x04, 0x01, 0x00, 0x00, + 0xa7, 0x23, 0x49, 0x98, 0x9e, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, + 0x8c, 0x5c, 0xaa, 0x99, 0xf9, 0x10, 0x83, 0x0a, 0x8a, 0xf2, 0x2b, 0x2a, 0xf5, 0x70, 0x78, 0x2d, + 0x80, 0x31, 0x89, 0x0d, 0xec, 0x48, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x1a, 0x4b, + 0x42, 0x2d, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/metrics/v2/stats.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/metrics/v2/stats.pb.go index d3651ab9b18f..b36556c3cfaa 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/metrics/v2/stats.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/metrics/v2/stats.pb.go @@ -52,7 +52,7 @@ func (m *StatsSink) Reset() { *m = StatsSink{} } func (m *StatsSink) String() string { return proto.CompactTextString(m) } func (*StatsSink) ProtoMessage() {} func (*StatsSink) Descriptor() ([]byte, []int) { - return fileDescriptor_stats_d5223edc756ef1e0, []int{0} + return fileDescriptor_stats_a312ed381585874d, []int{0} } func (m *StatsSink) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -235,7 +235,7 @@ func (m *StatsConfig) Reset() { *m = StatsConfig{} } func (m *StatsConfig) String() string { return proto.CompactTextString(m) } func (*StatsConfig) ProtoMessage() {} func (*StatsConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_stats_d5223edc756ef1e0, []int{1} + return fileDescriptor_stats_a312ed381585874d, []int{1} } func (m *StatsConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -301,7 +301,7 @@ func (m *StatsMatcher) Reset() { *m = StatsMatcher{} } func (m *StatsMatcher) String() string { return proto.CompactTextString(m) } func (*StatsMatcher) ProtoMessage() {} func (*StatsMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_stats_d5223edc756ef1e0, []int{2} + return fileDescriptor_stats_a312ed381585874d, []int{2} } func (m *StatsMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -502,7 +502,7 @@ func (m *TagSpecifier) Reset() { *m = TagSpecifier{} } func (m *TagSpecifier) String() string { return proto.CompactTextString(m) } func (*TagSpecifier) ProtoMessage() {} func (*TagSpecifier) Descriptor() ([]byte, []int) { - return fileDescriptor_stats_d5223edc756ef1e0, []int{3} + return fileDescriptor_stats_a312ed381585874d, []int{3} } func (m *TagSpecifier) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -684,7 +684,7 @@ func (m *StatsdSink) Reset() { *m = StatsdSink{} } func (m *StatsdSink) String() string { return proto.CompactTextString(m) } func (*StatsdSink) ProtoMessage() {} func (*StatsdSink) Descriptor() ([]byte, []int) { - return fileDescriptor_stats_d5223edc756ef1e0, []int{4} + return fileDescriptor_stats_a312ed381585874d, []int{4} } func (m *StatsdSink) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -848,7 +848,7 @@ func (m *DogStatsdSink) Reset() { *m = DogStatsdSink{} } func (m *DogStatsdSink) String() string { return proto.CompactTextString(m) } func (*DogStatsdSink) ProtoMessage() {} func (*DogStatsdSink) Descriptor() ([]byte, []int) { - return fileDescriptor_stats_d5223edc756ef1e0, []int{5} + return fileDescriptor_stats_a312ed381585874d, []int{5} } func (m *DogStatsdSink) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -996,7 +996,7 @@ func (m *HystrixSink) Reset() { *m = HystrixSink{} } func (m *HystrixSink) String() string { return proto.CompactTextString(m) } func (*HystrixSink) ProtoMessage() {} func (*HystrixSink) Descriptor() ([]byte, []int) { - return fileDescriptor_stats_d5223edc756ef1e0, []int{6} + return fileDescriptor_stats_a312ed381585874d, []int{6} } func (m *HystrixSink) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2664,53 +2664,54 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/metrics/v2/stats.proto", fileDescriptor_stats_d5223edc756ef1e0) -} - -var fileDescriptor_stats_d5223edc756ef1e0 = []byte{ - // 699 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x6e, 0xd3, 0x4c, - 0x14, 0x8d, 0xe3, 0xfe, 0xf9, 0x3a, 0xa9, 0xf2, 0x59, 0x55, 0xff, 0xf4, 0x91, 0x16, 0x23, 0xa4, - 0x88, 0x85, 0x2d, 0x82, 0x84, 0xc4, 0x32, 0x6e, 0x17, 0x56, 0x81, 0x2e, 0x9c, 0x8a, 0x05, 0x1b, - 0x6b, 0x6a, 0x4f, 0xcc, 0x50, 0xc7, 0xb6, 0x66, 0xc6, 0x21, 0x59, 0x20, 0xb1, 0xe0, 0x31, 0xd8, - 0xf1, 0x12, 0x88, 0x55, 0x97, 0x2c, 0x79, 0x04, 0xd4, 0x0d, 0xaa, 0xc4, 0x43, 0xa0, 0xf9, 0x49, - 0x15, 0x5a, 0x65, 0x81, 0xc4, 0x2e, 0x9e, 0x73, 0xce, 0xbd, 0xe7, 0xdc, 0x3b, 0x13, 0x78, 0x80, - 0x8b, 0x49, 0x39, 0xf3, 0x93, 0xb2, 0x18, 0x91, 0xcc, 0x1f, 0x63, 0x4e, 0x49, 0xc2, 0xfc, 0x49, - 0xdf, 0x67, 0x1c, 0x71, 0xe6, 0x55, 0xb4, 0xe4, 0xa5, 0xb3, 0x23, 0x49, 0x9e, 0x22, 0x79, 0x9a, - 0xe4, 0x4d, 0xfa, 0xfb, 0x07, 0x4a, 0x8d, 0x2a, 0x22, 0x24, 0x49, 0x49, 0xb1, 0x8f, 0xd2, 0x94, - 0x62, 0xa6, 0x95, 0x73, 0x02, 0x9f, 0x55, 0xd8, 0x1f, 0x23, 0x9e, 0xbc, 0xc1, 0xd4, 0x67, 0x9c, - 0x92, 0x22, 0xd3, 0x84, 0xbd, 0xac, 0x2c, 0xb3, 0x1c, 0xfb, 0xf2, 0xeb, 0xbc, 0x1e, 0xf9, 0xa8, - 0x98, 0x69, 0xe8, 0xff, 0xdb, 0x10, 0xe3, 0xb4, 0x4e, 0xb8, 0x46, 0xbb, 0xb7, 0xd1, 0x77, 0x14, - 0x55, 0x15, 0xa6, 0xf3, 0xce, 0x3b, 0x13, 0x94, 0x93, 0x14, 0x71, 0xec, 0xcf, 0x7f, 0x28, 0xc0, - 0xfd, 0x64, 0x80, 0x35, 0x14, 0xe1, 0x86, 0xa4, 0xb8, 0x70, 0x1c, 0x58, 0x29, 0xd0, 0x18, 0xef, - 0x1a, 0x87, 0x46, 0xcf, 0x8a, 0xe4, 0x6f, 0xe7, 0x31, 0xac, 0xa9, 0xa8, 0xbb, 0xcd, 0x43, 0xa3, - 0x67, 0xf7, 0x77, 0x3c, 0xd5, 0xcb, 0x9b, 0xf7, 0xf2, 0x86, 0xd2, 0x49, 0xd8, 0x88, 0x34, 0xd1, - 0x79, 0x06, 0x2d, 0x91, 0x31, 0x8d, 0xb5, 0xd0, 0x94, 0xc2, 0xad, 0x3b, 0xc2, 0x41, 0x31, 0x0b, - 0x1b, 0x91, 0x2d, 0xb9, 0x47, 0x92, 0x1a, 0xb4, 0xc1, 0x56, 0xa2, 0x58, 0x9c, 0xba, 0xbf, 0x0c, - 0xb0, 0xa5, 0x3d, 0x05, 0x3b, 0xc7, 0x00, 0x72, 0x15, 0x31, 0x47, 0x19, 0xdb, 0x35, 0x0e, 0xcd, - 0x9e, 0xdd, 0x7f, 0xe8, 0x2d, 0x59, 0x88, 0x77, 0x86, 0xb2, 0x61, 0x85, 0x13, 0x32, 0x22, 0x98, - 0x46, 0x96, 0x14, 0x9e, 0xa1, 0x8c, 0x39, 0xcf, 0x61, 0xab, 0x66, 0x38, 0x46, 0x79, 0x1e, 0xa7, - 0x78, 0x84, 0xea, 0x9c, 0xab, 0x7a, 0x2a, 0xe0, 0xfe, 0x1d, 0x9f, 0x41, 0x59, 0xe6, 0xaf, 0x50, - 0x5e, 0xe3, 0xe8, 0xbf, 0x9a, 0xe1, 0x41, 0x9e, 0x1f, 0x2b, 0x95, 0x2c, 0x76, 0x02, 0x6d, 0x65, - 0x49, 0x6f, 0x54, 0xa7, 0x5d, 0xee, 0x4a, 0xe6, 0x79, 0xa9, 0xc8, 0x51, 0x8b, 0x2d, 0x7c, 0xb9, - 0x3f, 0x0d, 0x68, 0x2d, 0xc2, 0xce, 0x01, 0x00, 0xc5, 0x6f, 0x71, 0xc2, 0x85, 0x59, 0xb9, 0x96, - 0x8d, 0xb0, 0x11, 0x59, 0xea, 0x6c, 0x90, 0xe7, 0xce, 0x29, 0x6c, 0xe2, 0x69, 0x92, 0xd7, 0x8c, - 0x94, 0x45, 0x9c, 0x13, 0xc6, 0x75, 0x88, 0x79, 0x7b, 0x31, 0x45, 0x4f, 0x3b, 0xf3, 0x5e, 0x10, - 0xc6, 0x87, 0xf2, 0xbe, 0xe9, 0xfa, 0x61, 0x23, 0x6a, 0xdf, 0xc8, 0x05, 0x2a, 0xea, 0x91, 0xe2, - 0x8f, 0x7a, 0xe6, 0x5f, 0xd6, 0xbb, 0x91, 0x0b, 0x34, 0xd8, 0xbe, 0x35, 0x1d, 0x67, 0xf5, 0xcb, - 0xf5, 0xa5, 0x69, 0xb8, 0xef, 0xa1, 0xb5, 0xb8, 0x1d, 0x67, 0x0f, 0x36, 0x38, 0xca, 0xe2, 0x85, - 0xdb, 0xb7, 0xce, 0x51, 0x76, 0x2a, 0x2e, 0xa0, 0x0b, 0xab, 0x14, 0x67, 0x78, 0x2a, 0x93, 0x59, - 0x01, 0x7c, 0xbd, 0xbe, 0x34, 0x57, 0xa9, 0xd9, 0xfb, 0x20, 0x46, 0xa1, 0x20, 0xe7, 0x3e, 0xd8, - 0x23, 0x32, 0xc5, 0x69, 0x3c, 0x11, 0x6b, 0x92, 0x9e, 0xad, 0xb0, 0x11, 0x81, 0x3c, 0x94, 0xab, - 0x0b, 0x6c, 0xb0, 0x44, 0x07, 0x49, 0x70, 0x3f, 0x1b, 0x00, 0x72, 0xd0, 0xa9, 0xbc, 0xf7, 0x4f, - 0x61, 0x5d, 0xbf, 0x54, 0xd9, 0x5c, 0xdc, 0x01, 0x15, 0x17, 0x55, 0x44, 0xac, 0x4c, 0xbc, 0x65, - 0x6f, 0xa0, 0x18, 0x61, 0x23, 0x9a, 0x93, 0x9d, 0x47, 0xd0, 0xe1, 0x49, 0x15, 0x8b, 0xc0, 0x1c, - 0x53, 0xe5, 0xbe, 0xa9, 0x7b, 0x6f, 0xf2, 0xa4, 0x3a, 0x52, 0x80, 0x8c, 0xb1, 0x0d, 0x6b, 0x15, - 0xc5, 0x23, 0x32, 0x55, 0xee, 0x22, 0xfd, 0x15, 0xec, 0x41, 0x47, 0x4e, 0x28, 0x8d, 0xd9, 0xcd, - 0x34, 0xf4, 0x90, 0x3e, 0x1a, 0xd0, 0x3e, 0x2e, 0xb3, 0x7f, 0x60, 0x74, 0x59, 0xf3, 0x7b, 0xb0, - 0x95, 0x96, 0x59, 0xbc, 0xc4, 0xc0, 0xc9, 0xca, 0x46, 0xb3, 0x63, 0xba, 0x1e, 0xd8, 0xe1, 0x4c, - 0xfc, 0x4f, 0x4d, 0xa5, 0x87, 0x03, 0xb0, 0x8b, 0x7a, 0x1c, 0x9f, 0xd7, 0xc9, 0x05, 0xe6, 0xca, - 0x87, 0x19, 0x41, 0x51, 0x8f, 0x03, 0x75, 0x12, 0x74, 0xbe, 0x5d, 0x75, 0x8d, 0xef, 0x57, 0x5d, - 0xe3, 0xc7, 0x55, 0xd7, 0x78, 0xdd, 0x9c, 0xf4, 0xcf, 0xd7, 0xe4, 0x53, 0x7a, 0xf2, 0x3b, 0x00, - 0x00, 0xff, 0xff, 0xee, 0x21, 0x59, 0xdb, 0x60, 0x05, 0x00, 0x00, + proto.RegisterFile("envoy/config/metrics/v2/stats.proto", fileDescriptor_stats_a312ed381585874d) +} + +var fileDescriptor_stats_a312ed381585874d = []byte{ + // 716 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4d, 0x6b, 0x13, 0x41, + 0x18, 0xce, 0x64, 0xfb, 0x95, 0x77, 0x93, 0x52, 0x97, 0xd2, 0xa6, 0x45, 0xd3, 0x1a, 0x29, 0x04, + 0x0f, 0xbb, 0x10, 0x51, 0xe8, 0x31, 0xdb, 0x1e, 0x42, 0xd5, 0x22, 0x9b, 0xe2, 0xc1, 0xcb, 0x32, + 0xdd, 0x9d, 0xac, 0x63, 0x37, 0xbb, 0xcb, 0xcc, 0x6c, 0x4c, 0x0e, 0x82, 0x07, 0x7f, 0x88, 0xe0, + 0x9f, 0x10, 0x4f, 0x3d, 0x7a, 0xf4, 0x27, 0x48, 0x2f, 0x52, 0xf0, 0x47, 0xc8, 0x7c, 0xa4, 0xc4, + 0x96, 0x1c, 0x04, 0x6f, 0xd9, 0x79, 0x9e, 0xe7, 0x7d, 0x9f, 0xe7, 0x7d, 0x67, 0x02, 0x8f, 0x48, + 0x36, 0xce, 0xa7, 0x5e, 0x94, 0x67, 0x43, 0x9a, 0x78, 0x23, 0x22, 0x18, 0x8d, 0xb8, 0x37, 0xee, + 0x7a, 0x5c, 0x60, 0xc1, 0xdd, 0x82, 0xe5, 0x22, 0x77, 0xb6, 0x15, 0xc9, 0xd5, 0x24, 0xd7, 0x90, + 0xdc, 0x71, 0x77, 0x77, 0x4f, 0xab, 0x71, 0x41, 0xa5, 0x24, 0xca, 0x19, 0xf1, 0x70, 0x1c, 0x33, + 0xc2, 0x8d, 0x72, 0x46, 0x10, 0xd3, 0x82, 0x78, 0x23, 0x2c, 0xa2, 0xb7, 0x84, 0x79, 0x5c, 0x30, + 0x9a, 0x25, 0x86, 0xb0, 0x93, 0xe4, 0x79, 0x92, 0x12, 0x4f, 0x7d, 0x9d, 0x97, 0x43, 0x0f, 0x67, + 0x53, 0x03, 0xdd, 0xbf, 0x0d, 0x71, 0xc1, 0xca, 0x48, 0x18, 0xb4, 0x75, 0x1b, 0x7d, 0xcf, 0x70, + 0x51, 0x10, 0x36, 0xeb, 0xbc, 0x3d, 0xc6, 0x29, 0x8d, 0xb1, 0x20, 0xde, 0xec, 0x87, 0x06, 0xda, + 0x9f, 0x11, 0xd4, 0x06, 0x32, 0xdc, 0x80, 0x66, 0x17, 0x8e, 0x03, 0x4b, 0x19, 0x1e, 0x91, 0x26, + 0xda, 0x47, 0x9d, 0x5a, 0xa0, 0x7e, 0x3b, 0x4f, 0x61, 0x45, 0x47, 0x6d, 0x56, 0xf7, 0x51, 0xc7, + 0xee, 0x6e, 0xbb, 0xba, 0x97, 0x3b, 0xeb, 0xe5, 0x0e, 0x94, 0x13, 0xbf, 0xda, 0x44, 0xfd, 0x4a, + 0x60, 0xc8, 0xce, 0x21, 0xd4, 0x65, 0xce, 0x38, 0x34, 0x62, 0x4b, 0x89, 0x37, 0xef, 0x88, 0x7b, + 0xd9, 0xb4, 0x5f, 0x09, 0x6c, 0xc5, 0x3d, 0x52, 0x54, 0xbf, 0x01, 0xb6, 0x16, 0x85, 0xf2, 0xb4, + 0xfd, 0x1b, 0x81, 0xad, 0x2c, 0x6a, 0xd8, 0x39, 0x06, 0x50, 0xeb, 0x08, 0x05, 0x4e, 0x78, 0x13, + 0xed, 0x5b, 0x1d, 0xbb, 0x7b, 0xe0, 0x2e, 0x58, 0x8a, 0x7b, 0x86, 0x93, 0x41, 0x41, 0x22, 0x3a, + 0xa4, 0x84, 0x05, 0x35, 0x25, 0x3c, 0xc3, 0x09, 0x77, 0x9e, 0xc3, 0x66, 0xc9, 0x49, 0x88, 0xd3, + 0x34, 0x8c, 0xc9, 0x10, 0x97, 0xa9, 0xd0, 0xf5, 0x74, 0xc8, 0xdd, 0x3b, 0x3e, 0xfd, 0x3c, 0x4f, + 0x5f, 0xe3, 0xb4, 0x24, 0xc1, 0xbd, 0x92, 0x93, 0x5e, 0x9a, 0x1e, 0x6b, 0x95, 0x2a, 0x76, 0x02, + 0x0d, 0x6d, 0xc9, 0x6c, 0xd5, 0xa4, 0x5d, 0xec, 0x4a, 0xe5, 0x79, 0xa9, 0xc9, 0x41, 0x9d, 0xcf, + 0x7d, 0xb5, 0x7f, 0x21, 0xa8, 0xcf, 0xc3, 0xce, 0x1e, 0x00, 0x23, 0xef, 0x48, 0x24, 0xa4, 0x59, + 0xb5, 0x9a, 0xb5, 0x7e, 0x25, 0xa8, 0xe9, 0xb3, 0x5e, 0x9a, 0x3a, 0xa7, 0xb0, 0x4e, 0x26, 0x51, + 0x5a, 0x72, 0x9a, 0x67, 0x61, 0x4a, 0xb9, 0x30, 0x21, 0x66, 0xed, 0xe5, 0x14, 0x5d, 0xe3, 0xcc, + 0x7d, 0x41, 0xb9, 0x18, 0xa8, 0x3b, 0x67, 0xea, 0xf7, 0x2b, 0x41, 0xe3, 0x46, 0x2e, 0x51, 0x59, + 0x8f, 0x66, 0x7f, 0xd5, 0xb3, 0xfe, 0xb1, 0xde, 0x8d, 0x5c, 0xa2, 0xfe, 0xd6, 0xad, 0xe9, 0x38, + 0xcb, 0x5f, 0xaf, 0x2f, 0x2d, 0xd4, 0xfe, 0x00, 0xf5, 0xf9, 0xed, 0x38, 0x3b, 0xb0, 0x26, 0x70, + 0x12, 0xce, 0xdd, 0xc0, 0x55, 0x81, 0x93, 0x53, 0x79, 0x09, 0xdb, 0xb0, 0xcc, 0x48, 0x42, 0x26, + 0x2a, 0x59, 0xcd, 0x87, 0x6f, 0xd7, 0x97, 0xd6, 0x32, 0xb3, 0x3a, 0x1f, 0xe5, 0x28, 0x34, 0xe4, + 0x3c, 0x04, 0x7b, 0x48, 0x27, 0x24, 0x0e, 0xc7, 0x72, 0x4d, 0xca, 0x73, 0xad, 0x5f, 0x09, 0x40, + 0x1d, 0xaa, 0xd5, 0xf9, 0x36, 0xd4, 0x64, 0x07, 0x45, 0x68, 0x7f, 0x41, 0x00, 0x6a, 0xd0, 0xb1, + 0xba, 0xfb, 0xcf, 0x60, 0xd5, 0xbc, 0x56, 0xd5, 0x5c, 0xde, 0x01, 0x1d, 0x17, 0x17, 0x54, 0xae, + 0x4c, 0xbe, 0x67, 0xb7, 0xa7, 0x19, 0xfd, 0x4a, 0x30, 0x23, 0x3b, 0x8f, 0x61, 0x43, 0x44, 0x45, + 0x28, 0x03, 0x0b, 0xc2, 0xb4, 0xfb, 0xaa, 0xe9, 0xbd, 0x2e, 0xa2, 0xe2, 0x48, 0x03, 0x2a, 0xc6, + 0x16, 0xac, 0x14, 0x8c, 0x0c, 0xe9, 0x44, 0xbb, 0x0b, 0xcc, 0x97, 0xbf, 0x03, 0x1b, 0x6a, 0x42, + 0x71, 0xc8, 0x6f, 0xa6, 0x61, 0x86, 0xf4, 0x09, 0x41, 0xe3, 0x38, 0x4f, 0xfe, 0x83, 0xd1, 0x45, + 0xcd, 0x1f, 0xc0, 0x66, 0x9c, 0x27, 0xe1, 0x02, 0x03, 0x27, 0x4b, 0x6b, 0xd5, 0x0d, 0xab, 0xed, + 0x82, 0xdd, 0x9f, 0xca, 0xff, 0xaa, 0x89, 0xf2, 0xb0, 0x07, 0x76, 0x56, 0x8e, 0xc2, 0xf3, 0x32, + 0xba, 0x20, 0x42, 0xfb, 0xb0, 0x02, 0xc8, 0xca, 0x91, 0xaf, 0x4f, 0xfc, 0xc3, 0xef, 0x57, 0x2d, + 0xf4, 0xe3, 0xaa, 0x85, 0x7e, 0x5e, 0xb5, 0x10, 0x1c, 0xd0, 0x5c, 0x7b, 0x2c, 0x58, 0x3e, 0x99, + 0x2e, 0x7a, 0x15, 0xaf, 0xd0, 0x9b, 0xea, 0xb8, 0x7b, 0xbe, 0xa2, 0xde, 0xdc, 0x93, 0x3f, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x5d, 0xf7, 0x11, 0xb9, 0x8d, 0x05, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/overload/v2alpha/overload.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/overload/v2alpha/overload.pb.go index 6fa0deb0600c..219ff1726555 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/overload/v2alpha/overload.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/overload/v2alpha/overload.pb.go @@ -48,7 +48,7 @@ func (m *ResourceMonitor) Reset() { *m = ResourceMonitor{} } func (m *ResourceMonitor) String() string { return proto.CompactTextString(m) } func (*ResourceMonitor) ProtoMessage() {} func (*ResourceMonitor) Descriptor() ([]byte, []int) { - return fileDescriptor_overload_05a46ddd552e37f6, []int{0} + return fileDescriptor_overload_a35da656a73be880, []int{0} } func (m *ResourceMonitor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -208,7 +208,7 @@ func (m *ThresholdTrigger) Reset() { *m = ThresholdTrigger{} } func (m *ThresholdTrigger) String() string { return proto.CompactTextString(m) } func (*ThresholdTrigger) ProtoMessage() {} func (*ThresholdTrigger) Descriptor() ([]byte, []int) { - return fileDescriptor_overload_05a46ddd552e37f6, []int{1} + return fileDescriptor_overload_a35da656a73be880, []int{1} } func (m *ThresholdTrigger) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -259,7 +259,7 @@ func (m *Trigger) Reset() { *m = Trigger{} } func (m *Trigger) String() string { return proto.CompactTextString(m) } func (*Trigger) ProtoMessage() {} func (*Trigger) Descriptor() ([]byte, []int) { - return fileDescriptor_overload_05a46ddd552e37f6, []int{2} + return fileDescriptor_overload_a35da656a73be880, []int{2} } func (m *Trigger) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -394,7 +394,7 @@ func (m *OverloadAction) Reset() { *m = OverloadAction{} } func (m *OverloadAction) String() string { return proto.CompactTextString(m) } func (*OverloadAction) ProtoMessage() {} func (*OverloadAction) Descriptor() ([]byte, []int) { - return fileDescriptor_overload_05a46ddd552e37f6, []int{3} + return fileDescriptor_overload_a35da656a73be880, []int{3} } func (m *OverloadAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -453,7 +453,7 @@ func (m *OverloadManager) Reset() { *m = OverloadManager{} } func (m *OverloadManager) String() string { return proto.CompactTextString(m) } func (*OverloadManager) ProtoMessage() {} func (*OverloadManager) Descriptor() ([]byte, []int) { - return fileDescriptor_overload_05a46ddd552e37f6, []int{4} + return fileDescriptor_overload_a35da656a73be880, []int{4} } func (m *OverloadManager) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1583,41 +1583,42 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/overload/v2alpha/overload.proto", fileDescriptor_overload_05a46ddd552e37f6) + proto.RegisterFile("envoy/config/overload/v2alpha/overload.proto", fileDescriptor_overload_a35da656a73be880) } -var fileDescriptor_overload_05a46ddd552e37f6 = []byte{ - // 499 bytes of a gzipped FileDescriptorProto +var fileDescriptor_overload_a35da656a73be880 = []byte{ + // 515 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x6f, 0xd3, 0x40, - 0x14, 0xcf, 0xd9, 0x4d, 0xd3, 0x9c, 0x29, 0x09, 0xa7, 0x42, 0x93, 0x8a, 0x46, 0x91, 0x07, 0x14, - 0x24, 0xb0, 0x45, 0x98, 0x98, 0x50, 0xdd, 0x4a, 0x84, 0xa1, 0x54, 0x3a, 0x3a, 0xb1, 0x58, 0xd7, - 0xf8, 0xe2, 0x58, 0x72, 0xef, 0xa2, 0xf3, 0xd9, 0x52, 0x26, 0x66, 0x46, 0xf8, 0x1e, 0xec, 0x88, - 0xa9, 0x23, 0x23, 0x1f, 0x01, 0x65, 0xeb, 0xc6, 0x47, 0x40, 0xbe, 0x3b, 0x07, 0x25, 0x95, 0x6a, - 0x4f, 0xd6, 0xfb, 0xfd, 0x79, 0xbf, 0x7b, 0xef, 0xc1, 0x17, 0x94, 0x15, 0x7c, 0xe9, 0x4f, 0x39, - 0x9b, 0x25, 0xb1, 0xcf, 0x0b, 0x2a, 0x52, 0x4e, 0x22, 0xbf, 0x18, 0x93, 0x74, 0x31, 0x27, 0xeb, - 0x82, 0xb7, 0x10, 0x5c, 0x72, 0x74, 0xac, 0xd8, 0x9e, 0x66, 0x7b, 0x6b, 0xd0, 0xb0, 0x8f, 0xfa, - 0x31, 0xe7, 0x71, 0x4a, 0x7d, 0x45, 0xbe, 0xca, 0x67, 0x3e, 0x61, 0x4b, 0xad, 0x3c, 0x1a, 0x6c, - 0x43, 0x51, 0x2e, 0x88, 0x4c, 0x38, 0x33, 0xf8, 0xd3, 0x6d, 0x3c, 0x93, 0x22, 0x9f, 0x4a, 0x83, - 0x1e, 0x16, 0x24, 0x4d, 0x22, 0x22, 0xa9, 0x5f, 0xfd, 0x68, 0xc0, 0xfd, 0x0e, 0x60, 0x07, 0xd3, - 0x8c, 0xe7, 0x62, 0x4a, 0xcf, 0x39, 0x4b, 0x24, 0x17, 0xe8, 0x18, 0xee, 0x30, 0x72, 0x4d, 0x7b, - 0x60, 0x08, 0x46, 0xed, 0xa0, 0xfd, 0xf3, 0xf6, 0xc6, 0xde, 0x11, 0xd6, 0x10, 0x60, 0x55, 0x46, - 0xaf, 0xe0, 0xae, 0xce, 0xdf, 0xb3, 0x86, 0x60, 0xe4, 0x8c, 0x0f, 0x3d, 0xdd, 0xda, 0xab, 0x5a, - 0x7b, 0x1f, 0x55, 0xeb, 0x49, 0x03, 0x1b, 0x22, 0x7a, 0x03, 0x1f, 0xc8, 0xe5, 0x82, 0x46, 0xa1, - 0x11, 0xda, 0x4a, 0x78, 0x70, 0x47, 0x78, 0xc2, 0x96, 0x93, 0x06, 0x76, 0x14, 0xf7, 0x54, 0x51, - 0x83, 0x7d, 0xe8, 0x68, 0x51, 0x58, 0x56, 0xdd, 0x53, 0xd8, 0xbd, 0x9c, 0x0b, 0x9a, 0xcd, 0x79, - 0x1a, 0x5d, 0x8a, 0x24, 0x8e, 0xa9, 0x40, 0x3e, 0x6c, 0x16, 0x24, 0xcd, 0x75, 0x60, 0x10, 0xf4, - 0xcb, 0xc0, 0x07, 0x08, 0xf5, 0x1b, 0xea, 0xfb, 0xfb, 0xf6, 0x79, 0xc3, 0x7c, 0x58, 0xf3, 0xdc, - 0xaf, 0x00, 0xb6, 0x2a, 0x71, 0xcd, 0x63, 0x2f, 0x60, 0x5b, 0x56, 0xfd, 0xcc, 0x7b, 0x7d, 0xef, - 0xde, 0x25, 0x7a, 0xdb, 0xf9, 0x26, 0x0d, 0xfc, 0xdf, 0x23, 0x78, 0x02, 0xf7, 0xa5, 0xae, 0x87, - 0x9c, 0x51, 0x3e, 0x43, 0xcd, 0x1f, 0xb7, 0x37, 0x36, 0x70, 0x3f, 0xc3, 0x87, 0x17, 0xc6, 0xe9, - 0x64, 0x5a, 0xee, 0xb5, 0x2e, 0xd9, 0x07, 0xb8, 0x67, 0x8c, 0xb2, 0x9e, 0x35, 0xb4, 0x47, 0xce, - 0xf8, 0x59, 0x5d, 0x30, 0x4d, 0x0f, 0x60, 0x69, 0xd5, 0xfc, 0x06, 0xac, 0x3d, 0x80, 0xd7, 0x1e, - 0xee, 0x17, 0x0b, 0x76, 0xaa, 0x04, 0xe7, 0x84, 0x91, 0x72, 0x38, 0x67, 0xb0, 0x2b, 0xe8, 0xac, - 0x8c, 0x1e, 0x26, 0x4c, 0x52, 0x51, 0x90, 0x54, 0xc5, 0x71, 0xc6, 0xfd, 0x3b, 0xbb, 0x3b, 0x33, - 0xf7, 0x88, 0x3b, 0x46, 0xf2, 0xde, 0x28, 0x50, 0x0c, 0x1f, 0x09, 0x73, 0x62, 0xe1, 0xb5, 0xbe, - 0xb1, 0x2a, 0xb2, 0x57, 0x13, 0x79, 0xeb, 0x34, 0x37, 0xa2, 0x77, 0xc5, 0x26, 0x98, 0xa1, 0x77, - 0xb0, 0x45, 0xd4, 0xec, 0xb2, 0x9e, 0xad, 0xec, 0x5f, 0xd6, 0xd8, 0x6f, 0x4e, 0x1c, 0x57, 0xea, - 0xe0, 0xf1, 0xaf, 0xd5, 0x00, 0xfc, 0x5e, 0x0d, 0xc0, 0x9f, 0xd5, 0x00, 0x7c, 0x6a, 0x19, 0xfa, - 0xd5, 0xae, 0x7a, 0xec, 0xeb, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x75, 0x6d, 0xbe, 0xa5, 0xf4, - 0x03, 0x00, 0x00, + 0x14, 0xcf, 0x39, 0x4d, 0xd3, 0x9c, 0x29, 0x09, 0xa7, 0x8a, 0x3a, 0x15, 0x8d, 0x22, 0x0f, 0x28, + 0x08, 0xb0, 0xa5, 0x20, 0x06, 0x26, 0x54, 0x37, 0x12, 0x61, 0x28, 0x45, 0xa6, 0x13, 0x8b, 0x75, + 0x8d, 0x2f, 0x8e, 0x25, 0xf7, 0x2e, 0x3a, 0x9f, 0x2d, 0x3c, 0x31, 0x33, 0xc2, 0x37, 0x61, 0x43, + 0x4c, 0x1d, 0x19, 0xf9, 0x08, 0x28, 0x5b, 0x37, 0x3e, 0x02, 0xf2, 0xdd, 0x39, 0x28, 0xa9, 0x54, + 0xdf, 0x74, 0x7a, 0xbf, 0x3f, 0xef, 0x77, 0xef, 0x1e, 0x7c, 0x46, 0x68, 0xce, 0x0a, 0x77, 0xc6, + 0xe8, 0x3c, 0x8e, 0x5c, 0x96, 0x13, 0x9e, 0x30, 0x1c, 0xba, 0xf9, 0x18, 0x27, 0xcb, 0x05, 0x5e, + 0x17, 0x9c, 0x25, 0x67, 0x82, 0xa1, 0x63, 0xc9, 0x76, 0x14, 0xdb, 0x59, 0x83, 0x9a, 0x7d, 0xd4, + 0x8f, 0x18, 0x8b, 0x12, 0xe2, 0x4a, 0xf2, 0x65, 0x36, 0x77, 0x31, 0x2d, 0x94, 0xf2, 0x68, 0xb0, + 0x0d, 0x85, 0x19, 0xc7, 0x22, 0x66, 0x54, 0xe3, 0x8f, 0xb6, 0xf1, 0x54, 0xf0, 0x6c, 0x26, 0x34, + 0x7a, 0x98, 0xe3, 0x24, 0x0e, 0xb1, 0x20, 0x6e, 0x75, 0x51, 0x80, 0xfd, 0x1d, 0xc0, 0xae, 0x4f, + 0x52, 0x96, 0xf1, 0x19, 0x39, 0x63, 0x34, 0x16, 0x8c, 0xa3, 0x63, 0xb8, 0x43, 0xf1, 0x15, 0xb1, + 0xc0, 0x10, 0x8c, 0x3a, 0x5e, 0xe7, 0xe7, 0xcd, 0x75, 0x73, 0x87, 0x1b, 0x43, 0xe0, 0xcb, 0x32, + 0x7a, 0x09, 0x77, 0x55, 0x7e, 0xcb, 0x18, 0x82, 0x91, 0x39, 0x3e, 0x74, 0x54, 0x6b, 0xa7, 0x6a, + 0xed, 0x7c, 0x90, 0xad, 0x3d, 0xc3, 0x02, 0xd3, 0x86, 0xaf, 0xc9, 0xe8, 0x15, 0xbc, 0x27, 0x8a, + 0x25, 0x09, 0x03, 0x2d, 0x6e, 0x4a, 0xf1, 0xc1, 0x2d, 0xf1, 0x09, 0x2d, 0xa6, 0x0d, 0xdf, 0x94, + 0xdc, 0x53, 0x49, 0xf5, 0xf6, 0xa1, 0xa9, 0x44, 0x41, 0x59, 0xb5, 0x4f, 0x61, 0xef, 0x62, 0xc1, + 0x49, 0xba, 0x60, 0x49, 0x78, 0xc1, 0xe3, 0x28, 0x22, 0x1c, 0xb9, 0xb0, 0x95, 0xe3, 0x24, 0x53, + 0xa1, 0x81, 0xd7, 0x2f, 0x43, 0x1f, 0x20, 0xd4, 0x6f, 0xc8, 0xf3, 0xf7, 0xf5, 0x93, 0x86, 0x3e, + 0xbe, 0xe2, 0xd9, 0x5f, 0x01, 0x6c, 0x57, 0xe2, 0x9a, 0x07, 0x9f, 0xc3, 0x8e, 0xa8, 0xfa, 0xe9, + 0x37, 0xbb, 0xce, 0x9d, 0x1f, 0xe9, 0x6c, 0xe7, 0x9b, 0x36, 0xfc, 0xff, 0x1e, 0xde, 0x43, 0xb8, + 0x2f, 0x54, 0x3d, 0x60, 0x94, 0xb0, 0x39, 0x6a, 0xfd, 0xb8, 0xb9, 0x6e, 0x02, 0xfb, 0x33, 0xbc, + 0x7f, 0xae, 0x9d, 0x4e, 0x66, 0xe5, 0xdf, 0xd6, 0x25, 0x7b, 0x07, 0xf7, 0xb4, 0x51, 0x6a, 0x19, + 0xc3, 0xe6, 0xc8, 0x1c, 0x3f, 0xae, 0x0b, 0xa6, 0xe8, 0x1e, 0x2c, 0xad, 0x5a, 0xdf, 0x80, 0xb1, + 0x07, 0xfc, 0xb5, 0x87, 0xfd, 0xc5, 0x80, 0xdd, 0x2a, 0xc1, 0x19, 0xa6, 0xb8, 0x1c, 0xce, 0x04, + 0xf6, 0x38, 0x99, 0x97, 0xd1, 0x83, 0x98, 0x0a, 0xc2, 0x73, 0x9c, 0xc8, 0x38, 0xe6, 0xb8, 0x7f, + 0xeb, 0xef, 0x26, 0x7a, 0x27, 0xfd, 0xae, 0x96, 0xbc, 0xd5, 0x0a, 0x14, 0xc1, 0x07, 0x5c, 0xaf, + 0x59, 0x70, 0xa5, 0xf6, 0xac, 0x8a, 0xec, 0xd4, 0x44, 0xde, 0x5a, 0xcf, 0x8d, 0xe8, 0x3d, 0xbe, + 0x09, 0xa6, 0xe8, 0x0d, 0x6c, 0x63, 0x39, 0xbb, 0xd4, 0x6a, 0x4a, 0xfb, 0xe7, 0x35, 0xf6, 0x9b, + 0x13, 0xf7, 0x2b, 0xb5, 0x37, 0xf9, 0xb5, 0x1a, 0x80, 0xdf, 0xab, 0x01, 0xf8, 0xb3, 0x1a, 0x00, + 0xf8, 0x34, 0x66, 0xca, 0x67, 0xc9, 0xd9, 0xa7, 0xe2, 0x6e, 0xcb, 0xf7, 0xe0, 0x63, 0x5b, 0x5f, + 0x2f, 0x77, 0xe5, 0x6c, 0x5e, 0xfc, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x9f, 0x05, 0x94, 0x09, 0x27, + 0x04, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/ratelimit/v2/rls.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/ratelimit/v2/rls.pb.go index 71a82347d028..13d745dce1c1 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/ratelimit/v2/rls.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/ratelimit/v2/rls.pb.go @@ -37,7 +37,7 @@ func (m *RateLimitServiceConfig) Reset() { *m = RateLimitServiceConfig{} func (m *RateLimitServiceConfig) String() string { return proto.CompactTextString(m) } func (*RateLimitServiceConfig) ProtoMessage() {} func (*RateLimitServiceConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_rls_49ef7d0c0ed5079b, []int{0} + return fileDescriptor_rls_dd8bef512061eea4, []int{0} } func (m *RateLimitServiceConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -335,11 +335,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/ratelimit/v2/rls.proto", fileDescriptor_rls_49ef7d0c0ed5079b) + proto.RegisterFile("envoy/config/ratelimit/v2/rls.proto", fileDescriptor_rls_dd8bef512061eea4) } -var fileDescriptor_rls_49ef7d0c0ed5079b = []byte{ - // 221 bytes of a gzipped FileDescriptorProto +var fileDescriptor_rls_dd8bef512061eea4 = []byte{ + // 238 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4e, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x4a, 0x2c, 0x49, 0xcd, 0xc9, 0xcc, 0xcd, 0x2c, 0xd1, 0x2f, 0x33, 0xd2, 0x2f, 0xca, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, @@ -351,7 +351,8 @@ var fileDescriptor_rls_49ef7d0c0ed5079b = []byte{ 0x49, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x4e, 0x0f, 0xe2, 0x94, 0xc4, 0x82, 0x4c, 0xbd, 0x32, 0x23, 0x3d, 0x90, 0x7d, 0x7a, 0xee, 0x45, 0x05, 0xc9, 0x50, 0xbd, 0x4e, 0x5c, 0xbb, 0x5e, 0x1e, 0x60, 0x66, 0xed, 0x62, 0x64, 0x12, 0x60, 0x0c, 0xe2, 0x4e, 0x47, 0x48, 0x78, 0xb1, 0x70, 0x30, 0x0a, - 0x30, 0x79, 0xb1, 0x70, 0x30, 0x0b, 0xb0, 0x38, 0x09, 0x9c, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, - 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x51, 0x4c, 0x65, 0x46, 0x49, 0x6c, 0x60, 0xd7, 0x18, 0x03, - 0x02, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x8e, 0xac, 0xee, 0x0e, 0x01, 0x00, 0x00, + 0x30, 0x79, 0xb1, 0x70, 0x30, 0x0b, 0xb0, 0x38, 0x59, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, + 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x5c, 0xea, 0x99, 0xf9, 0x10, 0x43, 0x0b, 0x8a, 0xf2, 0x2b, + 0x2a, 0xf5, 0x70, 0x7a, 0x35, 0x80, 0x31, 0x8a, 0xa9, 0xcc, 0x28, 0x89, 0x0d, 0xec, 0x70, 0x63, + 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4b, 0x70, 0x61, 0xc3, 0x39, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/rbac/v2alpha/rbac.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/rbac/v2alpha/rbac.pb.go index 09d0d9f4c522..583721e35857 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/rbac/v2alpha/rbac.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/rbac/v2alpha/rbac.pb.go @@ -49,7 +49,7 @@ func (x RBAC_Action) String() string { return proto.EnumName(RBAC_Action_name, int32(x)) } func (RBAC_Action) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_rbac_6ea35024e7e60c07, []int{0, 0} + return fileDescriptor_rbac_71b6685ec5c5ebac, []int{0, 0} } // Role Based Access Control (RBAC) provides service-level and method-level access control for a @@ -108,7 +108,7 @@ func (m *RBAC) Reset() { *m = RBAC{} } func (m *RBAC) String() string { return proto.CompactTextString(m) } func (*RBAC) ProtoMessage() {} func (*RBAC) Descriptor() ([]byte, []int) { - return fileDescriptor_rbac_6ea35024e7e60c07, []int{0} + return fileDescriptor_rbac_71b6685ec5c5ebac, []int{0} } func (m *RBAC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -172,7 +172,7 @@ func (m *Policy) Reset() { *m = Policy{} } func (m *Policy) String() string { return proto.CompactTextString(m) } func (*Policy) ProtoMessage() {} func (*Policy) Descriptor() ([]byte, []int) { - return fileDescriptor_rbac_6ea35024e7e60c07, []int{1} + return fileDescriptor_rbac_71b6685ec5c5ebac, []int{1} } func (m *Policy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -237,7 +237,7 @@ func (m *Permission) Reset() { *m = Permission{} } func (m *Permission) String() string { return proto.CompactTextString(m) } func (*Permission) ProtoMessage() {} func (*Permission) Descriptor() ([]byte, []int) { - return fileDescriptor_rbac_6ea35024e7e60c07, []int{2} + return fileDescriptor_rbac_71b6685ec5c5ebac, []int{2} } func (m *Permission) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -594,7 +594,7 @@ func (m *Permission_Set) Reset() { *m = Permission_Set{} } func (m *Permission_Set) String() string { return proto.CompactTextString(m) } func (*Permission_Set) ProtoMessage() {} func (*Permission_Set) Descriptor() ([]byte, []int) { - return fileDescriptor_rbac_6ea35024e7e60c07, []int{2, 0} + return fileDescriptor_rbac_71b6685ec5c5ebac, []int{2, 0} } func (m *Permission_Set) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -651,7 +651,7 @@ func (m *Principal) Reset() { *m = Principal{} } func (m *Principal) String() string { return proto.CompactTextString(m) } func (*Principal) ProtoMessage() {} func (*Principal) Descriptor() ([]byte, []int) { - return fileDescriptor_rbac_6ea35024e7e60c07, []int{3} + return fileDescriptor_rbac_71b6685ec5c5ebac, []int{3} } func (m *Principal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -983,7 +983,7 @@ func (m *Principal_Set) Reset() { *m = Principal_Set{} } func (m *Principal_Set) String() string { return proto.CompactTextString(m) } func (*Principal_Set) ProtoMessage() {} func (*Principal_Set) Descriptor() ([]byte, []int) { - return fileDescriptor_rbac_6ea35024e7e60c07, []int{3, 0} + return fileDescriptor_rbac_71b6685ec5c5ebac, []int{3, 0} } func (m *Principal_Set) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1033,7 +1033,7 @@ func (m *Principal_Authenticated) Reset() { *m = Principal_Authenticated func (m *Principal_Authenticated) String() string { return proto.CompactTextString(m) } func (*Principal_Authenticated) ProtoMessage() {} func (*Principal_Authenticated) Descriptor() ([]byte, []int) { - return fileDescriptor_rbac_6ea35024e7e60c07, []int{3, 1} + return fileDescriptor_rbac_71b6685ec5c5ebac, []int{3, 1} } func (m *Principal_Authenticated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3182,62 +3182,63 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/rbac/v2alpha/rbac.proto", fileDescriptor_rbac_6ea35024e7e60c07) + proto.RegisterFile("envoy/config/rbac/v2alpha/rbac.proto", fileDescriptor_rbac_71b6685ec5c5ebac) } -var fileDescriptor_rbac_6ea35024e7e60c07 = []byte{ - // 847 bytes of a gzipped FileDescriptorProto +var fileDescriptor_rbac_71b6685ec5c5ebac = []byte{ + // 859 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x41, 0x8f, 0x1b, 0x35, - 0x18, 0xcd, 0xcc, 0x64, 0x66, 0x27, 0xdf, 0x2a, 0x4b, 0xe4, 0xaa, 0x62, 0x88, 0xe8, 0x92, 0x86, - 0x82, 0x02, 0x12, 0x33, 0x52, 0x38, 0x50, 0x51, 0x81, 0x94, 0x59, 0x16, 0x12, 0xd4, 0x2e, 0xab, - 0xc9, 0xa1, 0xa2, 0x07, 0x56, 0xee, 0xd8, 0xdd, 0x35, 0x24, 0xf6, 0xe0, 0x71, 0x22, 0xe5, 0x5f, - 0x20, 0xfe, 0x08, 0x57, 0xd4, 0x53, 0x8f, 0x1c, 0xe1, 0x1f, 0xa0, 0xbd, 0xf5, 0x57, 0x14, 0xd9, - 0x9e, 0x64, 0x33, 0x07, 0xb6, 0xd9, 0xaa, 0x97, 0xc8, 0x89, 0xdf, 0x7b, 0xdf, 0xe7, 0xcf, 0xef, - 0x39, 0x70, 0x8f, 0xf2, 0xa5, 0x58, 0x25, 0xb9, 0xe0, 0xcf, 0xd8, 0x79, 0x22, 0x9f, 0xe2, 0x3c, - 0x59, 0x0e, 0xf1, 0xac, 0xb8, 0xc0, 0xe6, 0x4b, 0x5c, 0x48, 0xa1, 0x04, 0x7a, 0xcf, 0xa0, 0x62, - 0x8b, 0x8a, 0xcd, 0x46, 0x85, 0xea, 0xbe, 0xbb, 0xc4, 0x33, 0x46, 0xb0, 0xa2, 0xc9, 0x7a, 0x61, - 0x39, 0xdd, 0x0f, 0xac, 0x32, 0x2e, 0x58, 0xb2, 0x1c, 0x26, 0xb9, 0x90, 0x34, 0xc1, 0x84, 0x48, - 0x5a, 0x96, 0x15, 0xe0, 0xb0, 0x06, 0x90, 0x62, 0xa1, 0xa8, 0xfd, 0xac, 0xf6, 0xef, 0xda, 0x7d, - 0xb5, 0x2a, 0x68, 0x32, 0xc7, 0x2a, 0xbf, 0xa0, 0x32, 0x99, 0x53, 0x85, 0x09, 0x56, 0xb8, 0x5e, - 0xa3, 0x06, 0x29, 0x95, 0x64, 0xfc, 0xdc, 0x02, 0xfa, 0xbf, 0xb9, 0xd0, 0xcc, 0xd2, 0xd1, 0x11, - 0xfa, 0x1a, 0x02, 0x9c, 0x2b, 0x26, 0x78, 0xe4, 0xf4, 0x9c, 0xc1, 0xc1, 0xf0, 0xe3, 0xf8, 0x7f, - 0x8f, 0x14, 0x6b, 0x42, 0x3c, 0x32, 0xe8, 0xac, 0x62, 0xa1, 0x09, 0x84, 0x85, 0x98, 0xb1, 0x9c, - 0xd1, 0x32, 0x72, 0x7b, 0xde, 0x60, 0x7f, 0xf8, 0xd9, 0xeb, 0x14, 0x4e, 0x2b, 0xfc, 0x31, 0x57, - 0x72, 0x95, 0x6d, 0xe8, 0xdd, 0x9f, 0xa0, 0x5d, 0xdb, 0x42, 0x1d, 0xf0, 0x7e, 0xa1, 0x2b, 0xd3, - 0x58, 0x2b, 0xd3, 0x4b, 0xf4, 0x05, 0xf8, 0x4b, 0x3c, 0x5b, 0xd0, 0xc8, 0xed, 0x39, 0x83, 0xfd, - 0xe1, 0xdd, 0x6b, 0x4a, 0x19, 0xa9, 0x55, 0x66, 0xf1, 0x5f, 0xba, 0xf7, 0x9d, 0xfe, 0x1d, 0x08, - 0x6c, 0xf3, 0xa8, 0x05, 0xfe, 0xe8, 0xe1, 0xc3, 0x1f, 0x1e, 0x77, 0x1a, 0x28, 0x84, 0xe6, 0x37, - 0xc7, 0x27, 0x3f, 0x76, 0x9c, 0xfe, 0x1f, 0x0e, 0x04, 0x96, 0x84, 0xa6, 0xb0, 0x5f, 0x50, 0x39, - 0x67, 0x65, 0xc9, 0x04, 0x2f, 0x23, 0xc7, 0x9c, 0xeb, 0xa3, 0xeb, 0x8a, 0x6d, 0xd0, 0x29, 0x3c, - 0x7f, 0xf9, 0xc2, 0xf3, 0x7f, 0x77, 0xdc, 0xd0, 0xc9, 0xb6, 0x55, 0xd0, 0x29, 0x40, 0x21, 0x19, - 0xcf, 0x59, 0x81, 0x67, 0xeb, 0x59, 0xdd, 0xbb, 0x4e, 0x73, 0x0d, 0xae, 0x49, 0x6e, 0x69, 0xf4, - 0x9f, 0xfb, 0x00, 0x57, 0x95, 0xd1, 0x18, 0x5a, 0x98, 0x93, 0x33, 0xb9, 0x98, 0xd1, 0xd2, 0x0c, - 0x6d, 0x7f, 0xf8, 0xc9, 0x4e, 0x3d, 0xc7, 0x53, 0xaa, 0xc6, 0x8d, 0x2c, 0xc4, 0x9c, 0x64, 0x9a, - 0x8c, 0xbe, 0x85, 0x50, 0xc8, 0x4a, 0xc8, 0xbd, 0xb9, 0xd0, 0x9e, 0x90, 0x56, 0xe7, 0x0e, 0x78, - 0x98, 0xaf, 0x22, 0xaf, 0xe7, 0x0c, 0xc2, 0xb4, 0xa5, 0x4f, 0xd1, 0xfc, 0xd9, 0x0d, 0x9d, 0x71, - 0x23, 0xd3, 0xbf, 0xa3, 0x07, 0x10, 0x5c, 0x50, 0x4c, 0xa8, 0x8c, 0x9a, 0xb5, 0xeb, 0xc4, 0x05, - 0x8b, 0x97, 0xc3, 0xd8, 0x7a, 0x7e, 0x6c, 0x10, 0x8f, 0xac, 0x89, 0xc7, 0x8d, 0xac, 0xa2, 0xa0, - 0x63, 0x38, 0x20, 0xb4, 0x54, 0x8c, 0x63, 0x7d, 0xa5, 0x67, 0xac, 0x88, 0x7c, 0x23, 0xf2, 0x7e, - 0x5d, 0x44, 0xe7, 0x2b, 0x3e, 0x62, 0x44, 0x66, 0x98, 0x9f, 0xd3, 0x71, 0x23, 0x6b, 0x6f, 0xb1, - 0x26, 0x05, 0xba, 0x0f, 0x9d, 0x6d, 0x99, 0x42, 0x48, 0x15, 0x05, 0x3d, 0x67, 0xd0, 0x4e, 0xf7, - 0x75, 0xbf, 0xc1, 0xa7, 0xcd, 0xe8, 0xd5, 0x2b, 0x6f, 0xdc, 0xc8, 0xde, 0xd9, 0x82, 0x9d, 0x0a, - 0xa9, 0xd0, 0x08, 0xc2, 0x75, 0xea, 0xa2, 0x3d, 0x53, 0xfa, 0xc3, 0xaa, 0xb4, 0x8e, 0x5d, 0x5c, - 0xc5, 0x2e, 0x7e, 0x54, 0x61, 0xae, 0x4e, 0xb0, 0xa1, 0xa1, 0x14, 0x42, 0x2e, 0x94, 0x19, 0x74, - 0x14, 0x1a, 0x89, 0xdd, 0x4c, 0xa6, 0x67, 0xcc, 0x85, 0xd2, 0x43, 0x46, 0x8f, 0xe1, 0xb6, 0xa4, - 0xbf, 0x2e, 0x68, 0xa9, 0x28, 0x39, 0x2b, 0xa9, 0x5c, 0x52, 0x79, 0xc6, 0xf1, 0x9c, 0x46, 0xad, - 0xda, 0x4c, 0x6b, 0x3d, 0x4d, 0xcd, 0x53, 0x70, 0xd5, 0xd1, 0xad, 0x8d, 0xc2, 0xd4, 0x08, 0x9c, - 0xe0, 0x39, 0xed, 0x9e, 0x80, 0x37, 0xa5, 0x0a, 0x7d, 0x07, 0xfe, 0xda, 0x51, 0x6f, 0x98, 0x02, - 0xcb, 0x4f, 0xdb, 0xd0, 0xd4, 0x0b, 0xe4, 0xff, 0xf9, 0xf2, 0x85, 0xe7, 0xf4, 0xff, 0xf1, 0xa1, - 0xb5, 0xb1, 0x38, 0x3a, 0x82, 0x3d, 0xed, 0x5d, 0x46, 0xd6, 0xce, 0x1d, 0xec, 0x92, 0x8c, 0xca, - 0x6f, 0x01, 0xe6, 0x64, 0x42, 0x4a, 0x34, 0x82, 0x40, 0x48, 0xa3, 0xe1, 0xde, 0x58, 0xc3, 0x17, - 0x52, 0x4b, 0xbc, 0xc6, 0xb1, 0x4f, 0xa0, 0x8d, 0x17, 0xea, 0x82, 0x72, 0xc5, 0x72, 0xac, 0x28, - 0xa9, 0x8c, 0x3b, 0xdc, 0xa9, 0xd0, 0x68, 0x9b, 0xa9, 0x9d, 0x58, 0x93, 0x42, 0x0f, 0xa0, 0x55, - 0x8a, 0x85, 0xcc, 0xe9, 0xee, 0x5e, 0x0e, 0x2d, 0x61, 0x52, 0x6c, 0x45, 0x29, 0xb8, 0x79, 0x94, - 0xde, 0x82, 0x93, 0xbf, 0x82, 0x40, 0x3b, 0x99, 0x91, 0xca, 0xc7, 0x3b, 0x3d, 0x6c, 0x7a, 0xec, - 0x5c, 0xa8, 0x09, 0xe9, 0x4e, 0xac, 0xd7, 0x52, 0xf0, 0xac, 0x03, 0xde, 0xec, 0x6d, 0xd4, 0xe4, - 0x2e, 0x85, 0x76, 0x6d, 0xd0, 0x68, 0x0c, 0x07, 0x9b, 0x37, 0xd3, 0x26, 0xc3, 0xdd, 0x31, 0x19, - 0x59, 0x7b, 0x43, 0xd4, 0x89, 0xf8, 0xbe, 0x19, 0x3a, 0x1d, 0x37, 0x6b, 0x6a, 0x8d, 0xf4, 0x16, - 0x00, 0x23, 0xba, 0xc8, 0x33, 0x46, 0x65, 0xe5, 0xe9, 0xf4, 0xf6, 0x5f, 0x97, 0x87, 0xce, 0xdf, - 0x97, 0x87, 0xce, 0xbf, 0x97, 0x87, 0xce, 0x93, 0xbd, 0xaa, 0xdb, 0xa7, 0x81, 0xf9, 0xcf, 0xfd, - 0xfc, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6e, 0xe9, 0x09, 0x0d, 0x54, 0x08, 0x00, 0x00, + 0x18, 0x8d, 0x27, 0x99, 0xd9, 0xc9, 0x17, 0x65, 0x89, 0x5c, 0x21, 0x86, 0x88, 0x2e, 0x69, 0x28, + 0x10, 0x90, 0x98, 0x91, 0xc2, 0x81, 0x8a, 0x0a, 0x44, 0x66, 0x59, 0x48, 0x50, 0xbb, 0xac, 0x26, + 0x87, 0x8a, 0x1e, 0x58, 0xb9, 0x33, 0xee, 0xae, 0x21, 0xb1, 0x07, 0x8f, 0x13, 0x91, 0x7f, 0x81, + 0xf8, 0x23, 0x5c, 0x51, 0x4f, 0x3d, 0x72, 0x84, 0x7f, 0x80, 0xf6, 0xd6, 0x5f, 0x51, 0x64, 0x7b, + 0x92, 0xcd, 0x1c, 0xba, 0xcd, 0xae, 0xb8, 0x44, 0x4e, 0xfc, 0xde, 0xfb, 0x3e, 0x7f, 0x7e, 0xcf, + 0x81, 0xbb, 0x94, 0x2f, 0xc5, 0x2a, 0x4a, 0x05, 0x7f, 0xca, 0xce, 0x22, 0xf9, 0x84, 0xa4, 0xd1, + 0x72, 0x48, 0x66, 0xf9, 0x39, 0x31, 0x5f, 0xc2, 0x5c, 0x0a, 0x25, 0xf0, 0xdb, 0x06, 0x15, 0x5a, + 0x54, 0x68, 0x36, 0x4a, 0x54, 0xf7, 0xad, 0x25, 0x99, 0xb1, 0x8c, 0x28, 0x1a, 0xad, 0x17, 0x96, + 0xd3, 0x7d, 0xd7, 0x2a, 0x93, 0x9c, 0x45, 0xcb, 0x61, 0x94, 0x0a, 0x49, 0x23, 0x92, 0x65, 0x92, + 0x16, 0x45, 0x09, 0x38, 0xa8, 0x00, 0xa4, 0x58, 0x28, 0x6a, 0x3f, 0xcb, 0xfd, 0x3b, 0x76, 0x5f, + 0xad, 0x72, 0x1a, 0xcd, 0x89, 0x4a, 0xcf, 0xa9, 0x8c, 0xe6, 0x54, 0x91, 0x8c, 0x28, 0x52, 0xad, + 0x51, 0x81, 0x14, 0x4a, 0x32, 0x7e, 0x66, 0x01, 0xfd, 0xdf, 0x1c, 0x68, 0x24, 0xf1, 0xe8, 0x10, + 0x7f, 0x09, 0x1e, 0x49, 0x15, 0x13, 0x3c, 0x40, 0x3d, 0x34, 0xd8, 0x1f, 0x7e, 0x10, 0xbe, 0xf2, + 0x48, 0xa1, 0x26, 0x84, 0x23, 0x83, 0x4e, 0x4a, 0x16, 0x9e, 0x80, 0x9f, 0x8b, 0x19, 0x4b, 0x19, + 0x2d, 0x02, 0xa7, 0x57, 0x1f, 0xb4, 0x86, 0x9f, 0xbc, 0x4e, 0xe1, 0xa4, 0xc4, 0x1f, 0x71, 0x25, + 0x57, 0xc9, 0x86, 0xde, 0xfd, 0x11, 0xda, 0x95, 0x2d, 0xdc, 0x81, 0xfa, 0xcf, 0x74, 0x65, 0x1a, + 0x6b, 0x26, 0x7a, 0x89, 0x3f, 0x03, 0x77, 0x49, 0x66, 0x0b, 0x1a, 0x38, 0x3d, 0x34, 0x68, 0x0d, + 0xef, 0x5c, 0x51, 0xca, 0x48, 0xad, 0x12, 0x8b, 0xff, 0xdc, 0xb9, 0x87, 0xfa, 0xb7, 0xc1, 0xb3, + 0xcd, 0xe3, 0x26, 0xb8, 0xa3, 0x07, 0x0f, 0xbe, 0x7f, 0xd4, 0xa9, 0x61, 0x1f, 0x1a, 0x5f, 0x1f, + 0x1d, 0xff, 0xd0, 0x41, 0xfd, 0x3f, 0x10, 0x78, 0x96, 0x84, 0xa7, 0xd0, 0xca, 0xa9, 0x9c, 0xb3, + 0xa2, 0x60, 0x82, 0x17, 0x01, 0x32, 0xe7, 0x7a, 0xff, 0xaa, 0x62, 0x1b, 0x74, 0x0c, 0xcf, 0x5e, + 0x3c, 0xaf, 0xbb, 0xbf, 0x23, 0xc7, 0x47, 0xc9, 0xb6, 0x0a, 0x3e, 0x01, 0xc8, 0x25, 0xe3, 0x29, + 0xcb, 0xc9, 0x6c, 0x3d, 0xab, 0xbb, 0x57, 0x69, 0xae, 0xc1, 0x15, 0xc9, 0x2d, 0x8d, 0xfe, 0x33, + 0x17, 0xe0, 0xb2, 0x32, 0x1e, 0x43, 0x93, 0xf0, 0xec, 0x54, 0x2e, 0x66, 0xb4, 0x30, 0x43, 0x6b, + 0x0d, 0x3f, 0xda, 0xa9, 0xe7, 0x70, 0x4a, 0xd5, 0xb8, 0x96, 0xf8, 0x84, 0x67, 0x89, 0x26, 0xe3, + 0x6f, 0xc0, 0x17, 0xb2, 0x14, 0x72, 0xae, 0x2f, 0xb4, 0x27, 0xa4, 0xd5, 0xb9, 0x0d, 0x75, 0xc2, + 0x57, 0x41, 0xbd, 0x87, 0x06, 0x7e, 0xdc, 0xd4, 0xa7, 0x68, 0xfc, 0xe4, 0xf8, 0x68, 0x5c, 0x4b, + 0xf4, 0xef, 0xf8, 0x3e, 0x78, 0xe7, 0x94, 0x64, 0x54, 0x06, 0x8d, 0xca, 0x75, 0x92, 0x9c, 0x85, + 0xcb, 0x61, 0x68, 0x3d, 0x3f, 0x36, 0x88, 0x87, 0xd6, 0xc4, 0xe3, 0x5a, 0x52, 0x52, 0xf0, 0x11, + 0xec, 0x67, 0xb4, 0x50, 0x8c, 0x13, 0x7d, 0xa5, 0xa7, 0x2c, 0x0f, 0x5c, 0x23, 0xf2, 0x4e, 0x55, + 0x44, 0xe7, 0x2b, 0x3c, 0x64, 0x99, 0x4c, 0x08, 0x3f, 0xa3, 0xe3, 0x5a, 0xd2, 0xde, 0x62, 0x4d, + 0x72, 0x7c, 0x0f, 0x3a, 0xdb, 0x32, 0xb9, 0x90, 0x2a, 0xf0, 0x7a, 0x68, 0xd0, 0x8e, 0x5b, 0xba, + 0x5f, 0xef, 0xe3, 0x46, 0xf0, 0xf2, 0x65, 0x7d, 0x5c, 0x4b, 0xde, 0xd8, 0x82, 0x9d, 0x08, 0xa9, + 0xf0, 0x08, 0xfc, 0x75, 0xea, 0x82, 0x3d, 0x53, 0xfa, 0xbd, 0xb2, 0xb4, 0x8e, 0x5d, 0x58, 0xc6, + 0x2e, 0x7c, 0x58, 0x62, 0x2e, 0x4f, 0xb0, 0xa1, 0xe1, 0x18, 0x7c, 0x2e, 0x94, 0x19, 0x74, 0xe0, + 0x1b, 0x89, 0xdd, 0x4c, 0xa6, 0x67, 0xcc, 0x85, 0xd2, 0x43, 0xc6, 0x8f, 0xe0, 0x4d, 0x49, 0x7f, + 0x59, 0xd0, 0x42, 0xd1, 0xec, 0xb4, 0xa0, 0x72, 0x49, 0xe5, 0x29, 0x27, 0x73, 0x1a, 0x34, 0x2b, + 0x33, 0xad, 0xf4, 0x34, 0x35, 0x4f, 0xc1, 0x65, 0x47, 0xb7, 0x36, 0x0a, 0x53, 0x23, 0x70, 0x4c, + 0xe6, 0xb4, 0x7b, 0x0c, 0xf5, 0x29, 0x55, 0xf8, 0x5b, 0x70, 0xd7, 0x8e, 0xba, 0x61, 0x0a, 0x2c, + 0x3f, 0x6e, 0x43, 0x43, 0x2f, 0xb0, 0xfb, 0xe7, 0x8b, 0xe7, 0x75, 0xd4, 0xff, 0xc7, 0x85, 0xe6, + 0xc6, 0xe2, 0xf8, 0x10, 0xf6, 0xb4, 0x77, 0x59, 0xb6, 0x76, 0xee, 0x60, 0x97, 0x64, 0x94, 0x7e, + 0xf3, 0x08, 0xcf, 0x26, 0x59, 0x81, 0x47, 0xe0, 0x09, 0x69, 0x34, 0x9c, 0x6b, 0x6b, 0xb8, 0x42, + 0x6a, 0x89, 0xd7, 0x38, 0xf6, 0x31, 0xb4, 0xc9, 0x42, 0x9d, 0x53, 0xae, 0x58, 0x4a, 0x14, 0xcd, + 0x4a, 0xe3, 0x0e, 0x77, 0x2a, 0x34, 0xda, 0x66, 0x6a, 0x27, 0x56, 0xa4, 0xf0, 0x7d, 0x68, 0x16, + 0x62, 0x21, 0x53, 0xba, 0xbb, 0x97, 0x7d, 0x4b, 0x98, 0xe4, 0x5b, 0x51, 0xf2, 0xae, 0x1f, 0xa5, + 0xff, 0xc1, 0xc9, 0x5f, 0x80, 0xa7, 0x9d, 0xcc, 0xb2, 0xd2, 0xc7, 0x3b, 0x3d, 0x6c, 0x7a, 0xec, + 0x5c, 0xa8, 0x49, 0xd6, 0x9d, 0x58, 0xaf, 0xc5, 0x50, 0xb7, 0x0e, 0xb8, 0xd9, 0xdb, 0xa8, 0xc9, + 0x5d, 0x0a, 0xed, 0xca, 0xa0, 0xf1, 0x18, 0xf6, 0x37, 0x6f, 0xa6, 0x4d, 0x86, 0xb3, 0x63, 0x32, + 0x92, 0xf6, 0x86, 0xa8, 0x13, 0xf1, 0x5d, 0xc3, 0x47, 0x1d, 0x27, 0x69, 0x68, 0x8d, 0xf8, 0x16, + 0x00, 0xcb, 0x74, 0x91, 0xa7, 0x8c, 0xca, 0xd2, 0xd3, 0xf1, 0x57, 0x7f, 0x5d, 0x1c, 0xa0, 0xbf, + 0x2f, 0x0e, 0xd0, 0xbf, 0x17, 0x07, 0x08, 0x3e, 0x64, 0xc2, 0x96, 0xc8, 0xa5, 0xf8, 0x75, 0xf5, + 0xea, 0xd3, 0x9c, 0xa0, 0xc7, 0x7b, 0xe5, 0xf2, 0x89, 0x67, 0xfe, 0x9e, 0x3f, 0xfd, 0x2f, 0x00, + 0x00, 0xff, 0xff, 0x45, 0xd9, 0xfb, 0x29, 0x7f, 0x08, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap.pb.go index a293ca35e0a0..182dcfb5e75e 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap.pb.go @@ -34,7 +34,7 @@ func (m *FixedHeapConfig) Reset() { *m = FixedHeapConfig{} } func (m *FixedHeapConfig) String() string { return proto.CompactTextString(m) } func (*FixedHeapConfig) ProtoMessage() {} func (*FixedHeapConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_fixed_heap_de9752cd546c58fc, []int{0} + return fileDescriptor_fixed_heap_3aca32e049ba634d, []int{0} } func (m *FixedHeapConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -312,11 +312,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap.proto", fileDescriptor_fixed_heap_de9752cd546c58fc) + proto.RegisterFile("envoy/config/resource_monitor/fixed_heap/v2alpha/fixed_heap.proto", fileDescriptor_fixed_heap_3aca32e049ba634d) } -var fileDescriptor_fixed_heap_de9752cd546c58fc = []byte{ - // 176 bytes of a gzipped FileDescriptorProto +var fileDescriptor_fixed_heap_3aca32e049ba634d = []byte{ + // 193 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x4c, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0x8d, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xd2, 0x4f, 0xcb, 0xac, 0x48, 0x4d, 0x89, @@ -325,7 +325,9 @@ var fileDescriptor_fixed_heap_de9752cd546c58fc = []byte{ 0x24, 0xf5, 0x50, 0x23, 0x94, 0x1c, 0xb8, 0xf8, 0xdd, 0x40, 0xa2, 0x1e, 0xa9, 0x89, 0x05, 0xce, 0x60, 0x6d, 0x42, 0xba, 0x5c, 0xc2, 0xb9, 0x89, 0x15, 0x60, 0x65, 0xf1, 0xc5, 0x99, 0x55, 0xa9, 0xf1, 0x49, 0x95, 0x25, 0xa9, 0xc5, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x2c, 0x41, 0x02, 0xb9, 0x89, - 0x15, 0x20, 0xb5, 0xc1, 0x99, 0x55, 0xa9, 0x4e, 0x20, 0x71, 0x27, 0xd1, 0x13, 0x8f, 0xe4, 0x18, - 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x31, 0x8a, 0x1d, 0x6a, 0x70, 0x12, 0x1b, 0xd8, - 0x45, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x59, 0x6c, 0xd3, 0xd6, 0x00, 0x00, 0x00, + 0x15, 0x20, 0xb5, 0xc1, 0x99, 0x55, 0xa9, 0x4e, 0x20, 0x71, 0xa7, 0xf0, 0x13, 0x8f, 0xe4, 0x18, + 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x91, 0xcb, 0x2e, 0x33, 0x5f, 0x0f, 0xec, 0x88, + 0x82, 0xa2, 0xfc, 0x8a, 0x4a, 0x3d, 0x52, 0xdd, 0x13, 0xc0, 0x18, 0xc5, 0x0e, 0x65, 0x26, 0xb1, + 0x81, 0xfd, 0x64, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x9b, 0x1f, 0xbc, 0x18, 0x01, 0x00, + 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource.pb.go index c1698b116ffd..57c696de3025 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource.pb.go @@ -36,7 +36,7 @@ func (m *InjectedResourceConfig) Reset() { *m = InjectedResourceConfig{} func (m *InjectedResourceConfig) String() string { return proto.CompactTextString(m) } func (*InjectedResourceConfig) ProtoMessage() {} func (*InjectedResourceConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_injected_resource_32b4575db21f602f, []int{0} + return fileDescriptor_injected_resource_b65950ce413b1add, []int{0} } func (m *InjectedResourceConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -326,11 +326,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource.proto", fileDescriptor_injected_resource_32b4575db21f602f) + proto.RegisterFile("envoy/config/resource_monitor/injected_resource/v2alpha/injected_resource.proto", fileDescriptor_injected_resource_b65950ce413b1add) } -var fileDescriptor_injected_resource_32b4575db21f602f = []byte{ - // 183 bytes of a gzipped FileDescriptorProto +var fileDescriptor_injected_resource_b65950ce413b1add = []byte{ + // 201 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xf2, 0x4f, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0x8d, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xd2, 0xcf, 0xcc, 0xcb, 0x4a, 0x4d, 0x2e, @@ -340,7 +340,8 @@ var fileDescriptor_injected_resource_32b4575db21f602f = []byte{ 0x30, 0x06, 0xc4, 0x44, 0x25, 0x7b, 0x2e, 0x31, 0x4f, 0xa8, 0xae, 0x20, 0xa8, 0x26, 0x67, 0xb0, 0xe9, 0x42, 0xaa, 0x5c, 0x1c, 0x69, 0x99, 0x39, 0xa9, 0x79, 0x89, 0xb9, 0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x4e, 0x9c, 0xbb, 0x5e, 0x1e, 0x60, 0x66, 0x29, 0x62, 0x52, 0x60, 0x0c, 0x82, - 0x4b, 0x39, 0x89, 0x9e, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, - 0x51, 0xec, 0x50, 0x0b, 0x93, 0xd8, 0xc0, 0xc6, 0x1b, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x3c, - 0xd7, 0xed, 0xff, 0x03, 0x01, 0x00, 0x00, + 0x4b, 0x39, 0xc5, 0x9d, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, + 0x5c, 0xae, 0x99, 0xf9, 0x7a, 0x60, 0x37, 0x16, 0x14, 0xe5, 0x57, 0x54, 0xea, 0x91, 0xe9, 0xdc, + 0x00, 0xc6, 0x28, 0x76, 0x28, 0x33, 0x89, 0x0d, 0xec, 0x4e, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x74, 0x6d, 0x6e, 0xf5, 0x4c, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/retry/previous_priorities/previous_priorities_config.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/retry/previous_priorities/previous_priorities_config.pb.go index 8f2583e27b49..eb56d6581d1e 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/retry/previous_priorities/previous_priorities_config.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/retry/previous_priorities/previous_priorities_config.pb.go @@ -64,7 +64,7 @@ func (m *PreviousPrioritiesConfig) Reset() { *m = PreviousPrioritiesConf func (m *PreviousPrioritiesConfig) String() string { return proto.CompactTextString(m) } func (*PreviousPrioritiesConfig) ProtoMessage() {} func (*PreviousPrioritiesConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_previous_priorities_config_54b0aa245cc083a9, []int{0} + return fileDescriptor_previous_priorities_config_ddcea3a62a26d9f1, []int{0} } func (m *PreviousPrioritiesConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -342,11 +342,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/retry/previous_priorities/previous_priorities_config.proto", fileDescriptor_previous_priorities_config_54b0aa245cc083a9) + proto.RegisterFile("envoy/config/retry/previous_priorities/previous_priorities_config.proto", fileDescriptor_previous_priorities_config_ddcea3a62a26d9f1) } -var fileDescriptor_previous_priorities_config_54b0aa245cc083a9 = []byte{ - // 153 bytes of a gzipped FileDescriptorProto +var fileDescriptor_previous_priorities_config_ddcea3a62a26d9f1 = []byte{ + // 171 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x4f, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x4a, 0x2d, 0x29, 0xaa, 0xd4, 0x2f, 0x28, 0x4a, 0x2d, 0xcb, 0xcc, 0x2f, 0x2d, 0x8e, 0x2f, 0x28, 0xca, 0xcc, 0x2f, 0xca, 0x2c, 0xc9, @@ -354,7 +354,8 @@ var fileDescriptor_previous_priorities_config_54b0aa245cc083a9 = []byte{ 0x36, 0x48, 0x0f, 0x2a, 0x06, 0x36, 0x48, 0x0f, 0x8b, 0x26, 0x25, 0x57, 0x2e, 0x89, 0x00, 0xa8, 0x70, 0x00, 0x5c, 0xd4, 0x19, 0xac, 0x4b, 0x48, 0x93, 0x4b, 0xa0, 0xb4, 0x20, 0x25, 0xb1, 0x24, 0x35, 0x3e, 0xad, 0x28, 0xb5, 0xb0, 0x34, 0x35, 0x2f, 0xb9, 0x52, 0x82, 0x51, 0x81, 0x51, 0x83, - 0x35, 0x88, 0x1f, 0x22, 0xee, 0x06, 0x13, 0x76, 0xe2, 0x39, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, - 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x93, 0xd8, 0xc0, 0x6e, 0x30, 0x06, 0x04, 0x00, 0x00, 0xff, - 0xff, 0x6f, 0x78, 0x99, 0x64, 0xce, 0x00, 0x00, 0x00, + 0x35, 0x88, 0x1f, 0x22, 0xee, 0x06, 0x13, 0x76, 0x72, 0x39, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, + 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0xb9, 0x4c, 0x32, 0xf3, 0xf5, 0xc0, 0xf6, 0x17, 0x14, 0xe5, + 0x57, 0x54, 0xea, 0x11, 0xe7, 0x94, 0x00, 0xc6, 0x24, 0x36, 0xb0, 0xdb, 0x8d, 0x01, 0x01, 0x00, + 0x00, 0xff, 0xff, 0x89, 0x79, 0xc0, 0x68, 0x06, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.go index a81866b73c6d..d7437cabd540 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.go @@ -40,7 +40,7 @@ func (m *Tracing) Reset() { *m = Tracing{} } func (m *Tracing) String() string { return proto.CompactTextString(m) } func (*Tracing) ProtoMessage() {} func (*Tracing) Descriptor() ([]byte, []int) { - return fileDescriptor_trace_187d8e19c658fee8, []int{0} + return fileDescriptor_trace_f87cc89dbeac19b6, []int{0} } func (m *Tracing) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -106,7 +106,7 @@ func (m *Tracing_Http) Reset() { *m = Tracing_Http{} } func (m *Tracing_Http) String() string { return proto.CompactTextString(m) } func (*Tracing_Http) ProtoMessage() {} func (*Tracing_Http) Descriptor() ([]byte, []int) { - return fileDescriptor_trace_187d8e19c658fee8, []int{0, 0} + return fileDescriptor_trace_f87cc89dbeac19b6, []int{0, 0} } func (m *Tracing_Http) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -269,7 +269,7 @@ func (m *LightstepConfig) Reset() { *m = LightstepConfig{} } func (m *LightstepConfig) String() string { return proto.CompactTextString(m) } func (*LightstepConfig) ProtoMessage() {} func (*LightstepConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_trace_187d8e19c658fee8, []int{1} + return fileDescriptor_trace_f87cc89dbeac19b6, []int{1} } func (m *LightstepConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -336,7 +336,7 @@ func (m *ZipkinConfig) Reset() { *m = ZipkinConfig{} } func (m *ZipkinConfig) String() string { return proto.CompactTextString(m) } func (*ZipkinConfig) ProtoMessage() {} func (*ZipkinConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_trace_187d8e19c658fee8, []int{2} + return fileDescriptor_trace_f87cc89dbeac19b6, []int{2} } func (m *ZipkinConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -412,7 +412,7 @@ func (m *DynamicOtConfig) Reset() { *m = DynamicOtConfig{} } func (m *DynamicOtConfig) String() string { return proto.CompactTextString(m) } func (*DynamicOtConfig) ProtoMessage() {} func (*DynamicOtConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_trace_187d8e19c658fee8, []int{3} + return fileDescriptor_trace_f87cc89dbeac19b6, []int{3} } func (m *DynamicOtConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -470,7 +470,7 @@ func (m *DatadogConfig) Reset() { *m = DatadogConfig{} } func (m *DatadogConfig) String() string { return proto.CompactTextString(m) } func (*DatadogConfig) ProtoMessage() {} func (*DatadogConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_trace_187d8e19c658fee8, []int{4} + return fileDescriptor_trace_f87cc89dbeac19b6, []int{4} } func (m *DatadogConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -526,7 +526,7 @@ func (m *TraceServiceConfig) Reset() { *m = TraceServiceConfig{} } func (m *TraceServiceConfig) String() string { return proto.CompactTextString(m) } func (*TraceServiceConfig) ProtoMessage() {} func (*TraceServiceConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_trace_187d8e19c658fee8, []int{5} + return fileDescriptor_trace_f87cc89dbeac19b6, []int{5} } func (m *TraceServiceConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1946,46 +1946,47 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/trace/v2/trace.proto", fileDescriptor_trace_187d8e19c658fee8) + proto.RegisterFile("envoy/config/trace/v2/trace.proto", fileDescriptor_trace_f87cc89dbeac19b6) } -var fileDescriptor_trace_187d8e19c658fee8 = []byte{ - // 585 bytes of a gzipped FileDescriptorProto +var fileDescriptor_trace_f87cc89dbeac19b6 = []byte{ + // 601 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xcd, 0x6e, 0x13, 0x3d, - 0x14, 0xad, 0xd3, 0x7c, 0xed, 0x57, 0x27, 0x55, 0x1a, 0x03, 0x6a, 0x88, 0x20, 0x2a, 0x53, 0x84, - 0x58, 0xa0, 0x19, 0x35, 0x08, 0x28, 0x4b, 0xd2, 0x02, 0x01, 0xf1, 0x23, 0x4d, 0x2a, 0x16, 0xdd, - 0x8c, 0x1c, 0x8f, 0x33, 0xb1, 0x3a, 0xb1, 0x2d, 0x8f, 0x33, 0x30, 0x3b, 0xd6, 0x3c, 0x06, 0x8f, - 0xc1, 0x8a, 0x25, 0x4b, 0x1e, 0x01, 0x65, 0x83, 0xd8, 0xf3, 0x00, 0x68, 0x6c, 0x87, 0x96, 0x0e, - 0x0b, 0xa4, 0xee, 0xec, 0x7b, 0xce, 0xf1, 0xbd, 0xf7, 0xcc, 0xbd, 0x03, 0x6f, 0x50, 0x9e, 0x8b, - 0x22, 0x20, 0x82, 0x4f, 0x58, 0x12, 0x68, 0x85, 0x09, 0x0d, 0xf2, 0xbe, 0x3d, 0xf8, 0x52, 0x09, - 0x2d, 0xd0, 0x15, 0x43, 0xf1, 0x2d, 0xc5, 0xb7, 0x48, 0xde, 0xef, 0xde, 0xb4, 0x4a, 0x2c, 0x59, - 0x29, 0x20, 0x42, 0xd1, 0x20, 0x51, 0x92, 0x44, 0x19, 0x55, 0x39, 0x5b, 0x8a, 0xbb, 0x57, 0x13, - 0x21, 0x92, 0x94, 0x06, 0xe6, 0x36, 0x9e, 0x4f, 0x02, 0xcc, 0x0b, 0x07, 0x5d, 0x3b, 0x0f, 0x65, - 0x5a, 0xcd, 0x89, 0x76, 0x68, 0xef, 0x3c, 0xfa, 0x56, 0x61, 0x29, 0xa9, 0xca, 0x1c, 0xbe, 0x9d, - 0xe3, 0x94, 0xc5, 0x58, 0xd3, 0x60, 0x79, 0xb0, 0x80, 0xf7, 0x1d, 0xc0, 0xf5, 0x23, 0x85, 0x09, - 0xe3, 0x09, 0x7a, 0x00, 0xeb, 0x53, 0xad, 0x65, 0x07, 0xec, 0x80, 0xdb, 0x8d, 0xfe, 0xae, 0xff, - 0xd7, 0x4e, 0x7c, 0xc7, 0xf6, 0x87, 0x5a, 0xcb, 0xd0, 0x08, 0xba, 0x1f, 0x01, 0xac, 0x97, 0x57, - 0x74, 0x1d, 0xd6, 0x39, 0x9e, 0x51, 0xf3, 0xc2, 0xc6, 0x60, 0xe3, 0xd3, 0x8f, 0xcf, 0xab, 0x75, - 0x55, 0xdb, 0x01, 0xa1, 0x09, 0xa3, 0x3d, 0xb8, 0x66, 0x5f, 0xeb, 0xd4, 0x4c, 0x8a, 0x6d, 0xdf, - 0x96, 0xed, 0x2f, 0xcb, 0xf6, 0x47, 0xa6, 0xa9, 0xe1, 0x4a, 0xe8, 0x88, 0xe8, 0x21, 0x6c, 0xea, - 0x42, 0xd2, 0x38, 0x72, 0xc2, 0x55, 0x23, 0xbc, 0x5c, 0x11, 0x3e, 0xe2, 0xc5, 0x70, 0x25, 0x6c, - 0x18, 0xee, 0x81, 0xa1, 0x0e, 0x36, 0x61, 0xc3, 0x8a, 0xa2, 0x32, 0xea, 0xbd, 0x07, 0xb0, 0xf5, - 0x82, 0x25, 0x53, 0x9d, 0x69, 0x2a, 0x2d, 0x05, 0xdd, 0x87, 0x6d, 0x22, 0xd2, 0x94, 0x12, 0x2d, - 0x54, 0x44, 0xd2, 0x79, 0xa6, 0xa9, 0xaa, 0x16, 0xbf, 0xf5, 0x9b, 0x73, 0x60, 0x29, 0xe8, 0x1e, - 0x6c, 0x63, 0x42, 0x68, 0x96, 0x45, 0x5a, 0x9c, 0x50, 0x1e, 0x4d, 0x58, 0x4a, 0x4d, 0x4f, 0x7f, - 0xe8, 0x5a, 0x96, 0x73, 0x54, 0x52, 0x9e, 0xb0, 0x94, 0x7a, 0x3f, 0x01, 0x6c, 0x1e, 0x33, 0x79, - 0xc2, 0xf8, 0x05, 0xf3, 0xef, 0x43, 0x74, 0xaa, 0xa3, 0x3c, 0x96, 0x82, 0x71, 0x5d, 0x2d, 0xe0, - 0xf4, 0xf1, 0xc7, 0x8e, 0x83, 0x6e, 0xc1, 0x96, 0xf9, 0x92, 0x11, 0x8b, 0xa3, 0xbd, 0xfe, 0xfe, - 0x98, 0x69, 0x63, 0xe9, 0xff, 0xe1, 0xa6, 0x09, 0x3f, 0x8b, 0x6d, 0x10, 0x3d, 0x87, 0x97, 0xb2, - 0x29, 0x56, 0x34, 0x8e, 0x32, 0x89, 0x79, 0xe9, 0xbe, 0xa6, 0xef, 0x74, 0xa7, 0x6e, 0xec, 0xef, - 0x56, 0xec, 0x1f, 0x08, 0x91, 0xbe, 0xc1, 0xe9, 0x9c, 0x86, 0x6d, 0x2b, 0x1b, 0x49, 0x5c, 0x36, - 0x59, 0x8a, 0xbc, 0x04, 0xb6, 0x0e, 0x0b, 0x8e, 0x67, 0x8c, 0xbc, 0xd6, 0xae, 0xf1, 0x5d, 0xb8, - 0x9e, 0xb2, 0xb1, 0xc2, 0xaa, 0xa8, 0xb6, 0xbb, 0x44, 0x50, 0xf0, 0x8f, 0xe3, 0xb2, 0x1c, 0x16, - 0x6f, 0x0e, 0x37, 0x0f, 0xb1, 0xc6, 0xb1, 0x48, 0x2e, 0xe8, 0xef, 0x1d, 0xd8, 0x74, 0x8b, 0x19, - 0x99, 0x79, 0xae, 0x38, 0xdb, 0x70, 0xf0, 0x2b, 0x3c, 0xa3, 0x1e, 0x81, 0xa8, 0x5c, 0x0a, 0x3a, - 0xb2, 0x31, 0x97, 0xfb, 0x25, 0x6c, 0x9e, 0xdd, 0x70, 0xb7, 0x55, 0x3d, 0xb7, 0x55, 0x58, 0xb2, - 0x72, 0x99, 0xca, 0x1f, 0x81, 0xff, 0x54, 0x49, 0xe2, 0xb4, 0x03, 0x58, 0xe6, 0xf8, 0xef, 0x03, - 0xa8, 0x6d, 0x81, 0xb0, 0x91, 0x9c, 0x01, 0xb6, 0xbe, 0x2c, 0x7a, 0xe0, 0xeb, 0xa2, 0x07, 0xbe, - 0x2d, 0x7a, 0xe0, 0xb8, 0x96, 0xf7, 0xc7, 0x6b, 0xc6, 0x86, 0xbb, 0xbf, 0x02, 0x00, 0x00, 0xff, - 0xff, 0x52, 0x7f, 0x27, 0xce, 0x95, 0x04, 0x00, 0x00, + 0x14, 0xad, 0xd3, 0x7c, 0xed, 0x57, 0x27, 0x55, 0x5a, 0x03, 0x6a, 0x88, 0x20, 0x2a, 0x53, 0x84, + 0x58, 0xa0, 0x19, 0x11, 0x54, 0x5a, 0x96, 0xa4, 0x05, 0x0a, 0xe2, 0x4f, 0x93, 0x8a, 0x45, 0x37, + 0x23, 0xc7, 0xe3, 0x4c, 0xac, 0x4e, 0x6c, 0xcb, 0xe3, 0x0c, 0x9d, 0x1d, 0x6b, 0x1e, 0x84, 0x87, + 0x60, 0xc5, 0x92, 0x25, 0x8f, 0x80, 0xb2, 0x43, 0x6c, 0x79, 0x00, 0x34, 0xb6, 0x43, 0x4b, 0xa7, + 0x0b, 0xa4, 0xee, 0xc6, 0xf7, 0x9c, 0x73, 0xaf, 0xef, 0x89, 0x4f, 0xe0, 0x2d, 0xca, 0x73, 0x51, + 0x04, 0x44, 0xf0, 0x11, 0x4b, 0x02, 0xad, 0x30, 0xa1, 0x41, 0xde, 0xb3, 0x1f, 0xbe, 0x54, 0x42, + 0x0b, 0x74, 0xcd, 0x50, 0x7c, 0x4b, 0xf1, 0x2d, 0x92, 0xf7, 0x3a, 0xb7, 0xad, 0x12, 0x4b, 0x56, + 0x0a, 0x88, 0x50, 0x34, 0x48, 0x94, 0x24, 0x51, 0x46, 0x55, 0xce, 0xe6, 0xe2, 0xce, 0xf5, 0x44, + 0x88, 0x24, 0xa5, 0x81, 0x39, 0x0d, 0xa7, 0xa3, 0x00, 0xf3, 0xc2, 0x41, 0x37, 0xce, 0x43, 0x99, + 0x56, 0x53, 0xa2, 0x1d, 0xda, 0x3d, 0x8f, 0xbe, 0x57, 0x58, 0x4a, 0xaa, 0x32, 0x87, 0x6f, 0xe4, + 0x38, 0x65, 0x31, 0xd6, 0x34, 0x98, 0x7f, 0x58, 0xc0, 0xfb, 0x09, 0xe0, 0xf2, 0xa1, 0xc2, 0x84, + 0xf1, 0x04, 0xed, 0xc0, 0xfa, 0x58, 0x6b, 0xd9, 0x06, 0x9b, 0xe0, 0x6e, 0xa3, 0xb7, 0xe5, 0x5f, + 0xb8, 0x89, 0xef, 0xd8, 0xfe, 0x81, 0xd6, 0x32, 0x34, 0x82, 0xce, 0x27, 0x00, 0xeb, 0xe5, 0x11, + 0xdd, 0x84, 0x75, 0x8e, 0x27, 0xd4, 0x74, 0x58, 0xe9, 0xaf, 0x7c, 0xfe, 0xf1, 0x65, 0xb1, 0xae, + 0x6a, 0x9b, 0x20, 0x34, 0x65, 0xb4, 0x0d, 0x97, 0x6c, 0xb7, 0x76, 0xcd, 0x8c, 0xd8, 0xf0, 0xed, + 0xb5, 0xfd, 0xf9, 0xb5, 0xfd, 0x81, 0x59, 0xaa, 0x5f, 0x6b, 0x83, 0x83, 0x85, 0xd0, 0x91, 0xd1, + 0x23, 0xd8, 0xd4, 0x85, 0xa4, 0x71, 0xe4, 0xc4, 0x8b, 0x46, 0x7c, 0xb5, 0x22, 0x7e, 0xcc, 0x8b, + 0x83, 0x85, 0xb0, 0x61, 0xb8, 0x7b, 0x86, 0xda, 0x5f, 0x85, 0x0d, 0x2b, 0x8a, 0xca, 0xaa, 0xf7, + 0x01, 0xc0, 0xd6, 0x4b, 0x96, 0x8c, 0x75, 0xa6, 0xa9, 0xb4, 0x14, 0xf4, 0x10, 0xae, 0x13, 0x91, + 0xa6, 0x94, 0x68, 0xa1, 0x22, 0x92, 0x4e, 0x33, 0x4d, 0x55, 0x75, 0x81, 0xb5, 0x3f, 0x9c, 0x3d, + 0x4b, 0x41, 0xdb, 0x70, 0x1d, 0x13, 0x42, 0xb3, 0x2c, 0xd2, 0xe2, 0x98, 0xf2, 0x68, 0xc4, 0x52, + 0x6a, 0xf6, 0xfa, 0x4b, 0xd7, 0xb2, 0x9c, 0xc3, 0x92, 0xf2, 0x94, 0xa5, 0xd4, 0xfb, 0x05, 0x60, + 0xf3, 0x88, 0xc9, 0x63, 0xc6, 0x2f, 0x39, 0x7f, 0x17, 0xa2, 0x53, 0x1d, 0xe5, 0xb1, 0x14, 0x8c, + 0xeb, 0xea, 0x05, 0x4e, 0x9b, 0x3f, 0x71, 0x1c, 0x74, 0x07, 0xb6, 0xcc, 0xaf, 0x19, 0xb1, 0x38, + 0xba, 0xdf, 0xdb, 0x1d, 0x32, 0x6d, 0x2c, 0xfd, 0x3f, 0x5c, 0x35, 0xe5, 0xe7, 0xb1, 0x2d, 0xa2, + 0x17, 0xf0, 0x4a, 0x36, 0xc6, 0x8a, 0xc6, 0x51, 0x26, 0x31, 0x2f, 0xdd, 0xd7, 0xf4, 0x44, 0xb7, + 0xeb, 0xc6, 0xfe, 0x4e, 0xc5, 0xfe, 0xbe, 0x10, 0xe9, 0x3b, 0x9c, 0x4e, 0x69, 0xb8, 0x6e, 0x65, + 0x03, 0x89, 0xcb, 0x25, 0x4b, 0x91, 0x97, 0xc0, 0xd6, 0x7e, 0xc1, 0xf1, 0x84, 0x91, 0x37, 0xda, + 0x2d, 0xbe, 0x05, 0x97, 0x53, 0x36, 0x54, 0x58, 0x15, 0xd5, 0x75, 0xe7, 0x08, 0x0a, 0xfe, 0xf1, + 0xc9, 0xcc, 0x1f, 0x8b, 0x37, 0x85, 0xab, 0xfb, 0x58, 0xe3, 0x58, 0x24, 0x97, 0xf4, 0xf7, 0x1e, + 0x6c, 0xba, 0x70, 0x46, 0xe6, 0x4d, 0x57, 0x9c, 0x6d, 0x38, 0xf8, 0x35, 0x9e, 0x50, 0x8f, 0x40, + 0x54, 0x06, 0x83, 0x0e, 0x6c, 0xcd, 0xcd, 0x7e, 0x05, 0x9b, 0x67, 0x53, 0xee, 0x92, 0xd5, 0x75, + 0xc9, 0xc2, 0x92, 0x95, 0x81, 0x2a, 0xff, 0x0c, 0xfc, 0x67, 0x4a, 0x12, 0xa7, 0xed, 0xc3, 0x72, + 0xc6, 0x7f, 0x1f, 0x41, 0x6d, 0x0d, 0x84, 0x8d, 0xe4, 0x0c, 0xb0, 0xf3, 0x75, 0xd6, 0x05, 0xdf, + 0x66, 0x5d, 0xf0, 0x7d, 0xd6, 0x05, 0x70, 0x8b, 0x09, 0xdb, 0x48, 0x2a, 0x71, 0x52, 0x5c, 0x9c, + 0xd6, 0xb7, 0xe0, 0xa8, 0x96, 0xf7, 0x86, 0x4b, 0xc6, 0xad, 0x07, 0xbf, 0x03, 0x00, 0x00, 0xff, + 0xff, 0x4e, 0xc2, 0x4c, 0x2f, 0xc0, 0x04, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/transport_socket/alts/v2alpha/alts.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/transport_socket/alts/v2alpha/alts.pb.go index a5f1dccfd717..b42ec5753663 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/transport_socket/alts/v2alpha/alts.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/transport_socket/alts/v2alpha/alts.pb.go @@ -39,7 +39,7 @@ func (m *Alts) Reset() { *m = Alts{} } func (m *Alts) String() string { return proto.CompactTextString(m) } func (*Alts) ProtoMessage() {} func (*Alts) Descriptor() ([]byte, []int) { - return fileDescriptor_alts_71af6698b5273eb9, []int{0} + return fileDescriptor_alts_f806609b1c3cdb2e, []int{0} } func (m *Alts) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -386,11 +386,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/transport_socket/alts/v2alpha/alts.proto", fileDescriptor_alts_71af6698b5273eb9) + proto.RegisterFile("envoy/config/transport_socket/alts/v2alpha/alts.proto", fileDescriptor_alts_f806609b1c3cdb2e) } -var fileDescriptor_alts_71af6698b5273eb9 = []byte{ - // 216 bytes of a gzipped FileDescriptorProto +var fileDescriptor_alts_f806609b1c3cdb2e = []byte{ + // 234 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4d, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2f, 0x29, 0x4a, 0xcc, 0x2b, 0x2e, 0xc8, 0x2f, 0x2a, 0x89, 0x2f, 0xce, 0x4f, 0xce, 0x4e, 0x2d, 0xd1, 0x4f, 0xcc, 0x29, 0x29, 0xd6, 0x2f, @@ -402,7 +402,8 @@ var fileDescriptor_alts_71af6698b5273eb9 = []byte{ 0x9d, 0x38, 0x77, 0xbd, 0x3c, 0xc0, 0xcc, 0x52, 0xc4, 0xa4, 0xc0, 0x18, 0x24, 0x88, 0x50, 0x14, 0x0c, 0x51, 0x23, 0x64, 0xc4, 0x25, 0x5a, 0x90, 0x8a, 0xd0, 0x13, 0x9f, 0x98, 0x9c, 0x9c, 0x5f, 0x9a, 0x57, 0x52, 0x2c, 0xc1, 0xa4, 0xc0, 0xac, 0xc1, 0x19, 0x24, 0x0c, 0x92, 0x84, 0xaa, 0x75, - 0x84, 0x4a, 0x39, 0x09, 0x9c, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, - 0x8c, 0x51, 0x4c, 0x65, 0x46, 0x49, 0x6c, 0x60, 0xe7, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, - 0xcd, 0xbb, 0xeb, 0xaf, 0x0c, 0x01, 0x00, 0x00, + 0x84, 0x4a, 0x39, 0xf9, 0x9c, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, + 0x8c, 0x5c, 0x16, 0x99, 0xf9, 0x7a, 0x60, 0xbf, 0x14, 0x14, 0xe5, 0x57, 0x54, 0xea, 0x11, 0xef, + 0xad, 0x00, 0xc6, 0x28, 0xa6, 0x32, 0xa3, 0x24, 0x36, 0xb0, 0x57, 0x8c, 0x01, 0x01, 0x00, 0x00, + 0xff, 0xff, 0xf3, 0x69, 0xc8, 0x05, 0x48, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/transport_socket/capture/v2alpha/capture.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/transport_socket/capture/v2alpha/capture.pb.go index 5bb00b33f30f..ec98de964922 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/config/transport_socket/capture/v2alpha/capture.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/config/transport_socket/capture/v2alpha/capture.pb.go @@ -46,7 +46,7 @@ func (x FileSink_Format) String() string { return proto.EnumName(FileSink_Format_name, int32(x)) } func (FileSink_Format) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_capture_910b340f585e95f6, []int{0, 0} + return fileDescriptor_capture_3f921e91c3cec6c2, []int{0, 0} } // File sink. @@ -71,7 +71,7 @@ func (m *FileSink) Reset() { *m = FileSink{} } func (m *FileSink) String() string { return proto.CompactTextString(m) } func (*FileSink) ProtoMessage() {} func (*FileSink) Descriptor() ([]byte, []int) { - return fileDescriptor_capture_910b340f585e95f6, []int{0} + return fileDescriptor_capture_3f921e91c3cec6c2, []int{0} } func (m *FileSink) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -131,7 +131,7 @@ func (m *Capture) Reset() { *m = Capture{} } func (m *Capture) String() string { return proto.CompactTextString(m) } func (*Capture) ProtoMessage() {} func (*Capture) Descriptor() ([]byte, []int) { - return fileDescriptor_capture_910b340f585e95f6, []int{1} + return fileDescriptor_capture_3f921e91c3cec6c2, []int{1} } func (m *Capture) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -731,30 +731,31 @@ var ( ) func init() { - proto.RegisterFile("envoy/config/transport_socket/capture/v2alpha/capture.proto", fileDescriptor_capture_910b340f585e95f6) -} - -var fileDescriptor_capture_910b340f585e95f6 = []byte{ - // 328 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0x41, 0x4b, 0xc3, 0x30, - 0x18, 0x86, 0x97, 0x1d, 0xe6, 0xf6, 0x4d, 0xb7, 0xd2, 0xd3, 0x10, 0x99, 0xa3, 0xa7, 0x21, 0x98, - 0x40, 0x3c, 0x78, 0x10, 0x04, 0x27, 0x0e, 0x3d, 0xe8, 0x46, 0x57, 0x86, 0x7a, 0x29, 0x59, 0x49, - 0x5d, 0x58, 0x6d, 0x42, 0x1a, 0x8b, 0xfe, 0x2a, 0x7f, 0x83, 0x37, 0x8f, 0xfe, 0x04, 0xd9, 0x2f, - 0x91, 0xa5, 0xed, 0xc1, 0xdd, 0xf4, 0x98, 0x97, 0xf7, 0x7d, 0xbe, 0x37, 0xdf, 0x07, 0x67, 0x3c, - 0xcd, 0xe5, 0x1b, 0x89, 0x64, 0x1a, 0x8b, 0x27, 0x62, 0x34, 0x4b, 0x33, 0x25, 0xb5, 0x09, 0x33, - 0x19, 0xad, 0xb8, 0x21, 0x11, 0x53, 0xe6, 0x45, 0x73, 0x92, 0x53, 0x96, 0xa8, 0x25, 0xab, 0xde, - 0x58, 0x69, 0x69, 0xa4, 0x7b, 0x6c, 0xc3, 0xb8, 0x08, 0xe3, 0xed, 0x30, 0xae, 0xcc, 0x65, 0x78, - 0xff, 0xa0, 0x98, 0xc5, 0x94, 0x20, 0x39, 0x25, 0x91, 0xd4, 0x9c, 0x2c, 0x58, 0x56, 0xc2, 0xbc, - 0x77, 0x04, 0xcd, 0xb1, 0x48, 0xf8, 0x4c, 0xa4, 0x2b, 0xf7, 0x10, 0xda, 0x8a, 0x99, 0x65, 0xa8, - 0x34, 0x8f, 0xc5, 0x6b, 0x0f, 0x0d, 0xd0, 0xb0, 0xe5, 0xc3, 0x46, 0x9a, 0x5a, 0xc5, 0x9d, 0x43, - 0x23, 0x96, 0xfa, 0x99, 0x99, 0x5e, 0x7d, 0x80, 0x86, 0x1d, 0x7a, 0x8e, 0xff, 0xd4, 0x05, 0x57, - 0x93, 0xf0, 0xd8, 0x52, 0xfc, 0x92, 0xe6, 0x1d, 0x41, 0xa3, 0x50, 0x5c, 0x07, 0x76, 0xa7, 0xfe, - 0x24, 0x98, 0x84, 0xa3, 0x9b, 0xbb, 0x0b, 0xff, 0xc1, 0xa9, 0xb9, 0x1d, 0x80, 0x42, 0x09, 0xae, - 0xee, 0x03, 0x07, 0x79, 0x1f, 0x08, 0x76, 0x2e, 0x0b, 0xae, 0x3b, 0x87, 0x56, 0x2c, 0x12, 0x1e, - 0x66, 0x22, 0x5d, 0xd9, 0xba, 0x6d, 0x7a, 0xfa, 0xcf, 0x4a, 0xd7, 0x35, 0xbf, 0x19, 0x57, 0x8b, - 0xb8, 0x05, 0x67, 0x3b, 0x68, 0x7f, 0xdc, 0xa6, 0x5e, 0x89, 0x67, 0x4a, 0xe0, 0x9c, 0xe2, 0xcd, - 0x3a, 0x71, 0x50, 0x59, 0x67, 0xd6, 0xe9, 0x77, 0xcd, 0x6f, 0x61, 0xd4, 0x85, 0xbd, 0x4d, 0xc3, - 0x30, 0xe3, 0x09, 0x8f, 0x8c, 0xd4, 0x23, 0xe7, 0x73, 0xdd, 0x47, 0x5f, 0xeb, 0x3e, 0xfa, 0x5e, - 0xf7, 0xd1, 0x63, 0x3d, 0xa7, 0x8b, 0x86, 0x3d, 0xc7, 0xc9, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xf7, 0xc5, 0xf0, 0xf4, 0x1a, 0x02, 0x00, 0x00, + proto.RegisterFile("envoy/config/transport_socket/capture/v2alpha/capture.proto", fileDescriptor_capture_3f921e91c3cec6c2) +} + +var fileDescriptor_capture_3f921e91c3cec6c2 = []byte{ + // 340 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0x41, 0x4f, 0xc2, 0x30, + 0x18, 0x86, 0x29, 0x07, 0x84, 0x0f, 0x85, 0x65, 0x27, 0x62, 0x0c, 0x92, 0x9d, 0x88, 0x89, 0x5d, + 0x52, 0x0f, 0x1e, 0x48, 0x4c, 0xc4, 0x48, 0xf4, 0xa0, 0x90, 0xb1, 0x10, 0xf5, 0xb2, 0x94, 0xa5, + 0x93, 0x86, 0xb9, 0x36, 0x5d, 0x5d, 0xe0, 0x57, 0xf9, 0x1b, 0xbc, 0x79, 0xf4, 0x27, 0x18, 0x7e, + 0x89, 0xa1, 0xdb, 0x0e, 0x72, 0xc3, 0x63, 0xdf, 0xbc, 0xef, 0xf3, 0xbd, 0xfd, 0x3e, 0x18, 0xb0, + 0x24, 0x13, 0x6b, 0x37, 0x14, 0x49, 0xc4, 0x5f, 0x5d, 0xad, 0x68, 0x92, 0x4a, 0xa1, 0x74, 0x90, + 0x8a, 0x70, 0xc9, 0xb4, 0x1b, 0x52, 0xa9, 0xdf, 0x15, 0x73, 0x33, 0x42, 0x63, 0xb9, 0xa0, 0xe5, + 0x1b, 0x4b, 0x25, 0xb4, 0xb0, 0xcf, 0x4d, 0x18, 0xe7, 0x61, 0xbc, 0x1b, 0xc6, 0xa5, 0xb9, 0x08, + 0x1f, 0x9f, 0xe4, 0xb3, 0xa8, 0xe4, 0x6e, 0x46, 0xdc, 0x50, 0x28, 0xe6, 0xce, 0x69, 0x5a, 0xc0, + 0x9c, 0x0f, 0x04, 0xf5, 0x11, 0x8f, 0xd9, 0x94, 0x27, 0x4b, 0xfb, 0x14, 0x9a, 0x92, 0xea, 0x45, + 0x20, 0x15, 0x8b, 0xf8, 0xaa, 0x83, 0x7a, 0xa8, 0xdf, 0xf0, 0x60, 0x2b, 0x4d, 0x8c, 0x62, 0xcf, + 0xa0, 0x16, 0x09, 0xf5, 0x46, 0x75, 0xa7, 0xda, 0x43, 0xfd, 0x16, 0xb9, 0xc2, 0x7b, 0x75, 0xc1, + 0xe5, 0x24, 0x3c, 0x32, 0x14, 0xaf, 0xa0, 0x39, 0x67, 0x50, 0xcb, 0x15, 0xdb, 0x82, 0xc3, 0x89, + 0x37, 0xf6, 0xc7, 0xc1, 0xf0, 0xfe, 0xf1, 0xda, 0x7b, 0xb6, 0x2a, 0x76, 0x0b, 0x20, 0x57, 0xfc, + 0xdb, 0x27, 0xdf, 0x42, 0xce, 0x27, 0x82, 0x83, 0x9b, 0x9c, 0x6b, 0xcf, 0xa0, 0x11, 0xf1, 0x98, + 0x05, 0x29, 0x4f, 0x96, 0xa6, 0x6e, 0x93, 0x5c, 0xfe, 0xb3, 0xd2, 0x5d, 0xc5, 0xab, 0x47, 0xe5, + 0x22, 0x1e, 0xc0, 0xda, 0x0d, 0x9a, 0x1f, 0x37, 0x89, 0x53, 0xe0, 0xa9, 0xe4, 0x38, 0x23, 0x78, + 0xbb, 0x4e, 0xec, 0x97, 0xd6, 0xa9, 0x71, 0x7a, 0x6d, 0xfd, 0x57, 0x18, 0xb6, 0xe1, 0x68, 0xdb, + 0x30, 0x48, 0x59, 0xcc, 0x42, 0x2d, 0xd4, 0x70, 0xfc, 0xb5, 0xe9, 0xa2, 0xef, 0x4d, 0x17, 0xfd, + 0x6c, 0xba, 0x08, 0x06, 0x5c, 0xe4, 0x54, 0xa9, 0xc4, 0x6a, 0xbd, 0x5f, 0xff, 0x09, 0x7a, 0xa9, + 0x66, 0x64, 0x5e, 0x33, 0xd7, 0xbc, 0xf8, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xc7, 0xf7, 0xfd, + 0x59, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/data/accesslog/v2/accesslog.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/data/accesslog/v2/accesslog.pb.go index 4cb6b32d06f0..a611cc7a937c 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/data/accesslog/v2/accesslog.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/data/accesslog/v2/accesslog.pb.go @@ -57,7 +57,7 @@ func (x HTTPAccessLogEntry_HTTPVersion) String() string { return proto.EnumName(HTTPAccessLogEntry_HTTPVersion_name, int32(x)) } func (HTTPAccessLogEntry_HTTPVersion) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{1, 0} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{1, 0} } // Reasons why the request was unauthorized @@ -82,7 +82,7 @@ func (x ResponseFlags_Unauthorized_Reason) String() string { return proto.EnumName(ResponseFlags_Unauthorized_Reason_name, int32(x)) } func (ResponseFlags_Unauthorized_Reason) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{3, 0, 0} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{3, 0, 0} } type TLSProperties_TLSVersion int32 @@ -114,7 +114,7 @@ func (x TLSProperties_TLSVersion) String() string { return proto.EnumName(TLSProperties_TLSVersion_name, int32(x)) } func (TLSProperties_TLSVersion) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{4, 0} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{4, 0} } // [#not-implemented-hide:] @@ -130,7 +130,7 @@ func (m *TCPAccessLogEntry) Reset() { *m = TCPAccessLogEntry{} } func (m *TCPAccessLogEntry) String() string { return proto.CompactTextString(m) } func (*TCPAccessLogEntry) ProtoMessage() {} func (*TCPAccessLogEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{0} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{0} } func (m *TCPAccessLogEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -183,7 +183,7 @@ func (m *HTTPAccessLogEntry) Reset() { *m = HTTPAccessLogEntry{} } func (m *HTTPAccessLogEntry) String() string { return proto.CompactTextString(m) } func (*HTTPAccessLogEntry) ProtoMessage() {} func (*HTTPAccessLogEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{1} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{1} } func (m *HTTPAccessLogEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -316,7 +316,7 @@ func (m *AccessLogCommon) Reset() { *m = AccessLogCommon{} } func (m *AccessLogCommon) String() string { return proto.CompactTextString(m) } func (*AccessLogCommon) ProtoMessage() {} func (*AccessLogCommon) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{2} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{2} } func (m *AccessLogCommon) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -492,21 +492,22 @@ type ResponseFlags struct { RateLimited bool `protobuf:"varint,12,opt,name=rate_limited,json=rateLimited,proto3" json:"rate_limited,omitempty"` // Indicates if the request was deemed unauthorized and the reason for it. UnauthorizedDetails *ResponseFlags_Unauthorized `protobuf:"bytes,13,opt,name=unauthorized_details,json=unauthorizedDetails,proto3" json:"unauthorized_details,omitempty"` - // [#not-implemented-hide:] Hide from docs. // Indicates that the request was rejected because there was an error in rate limit service. RateLimitServiceError bool `protobuf:"varint,14,opt,name=rate_limit_service_error,json=rateLimitServiceError,proto3" json:"rate_limit_service_error,omitempty"` // Indicates the stream was reset due to a downstream connection termination. - DownstreamConnectionTermination bool `protobuf:"varint,15,opt,name=downstream_connection_termination,json=downstreamConnectionTermination,proto3" json:"downstream_connection_termination,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + DownstreamConnectionTermination bool `protobuf:"varint,15,opt,name=downstream_connection_termination,json=downstreamConnectionTermination,proto3" json:"downstream_connection_termination,omitempty"` + // Indicates that the upstream retry limit was exceeded, resulting in a downstream error. + UpstreamRetryLimitExceeded bool `protobuf:"varint,16,opt,name=upstream_retry_limit_exceeded,json=upstreamRetryLimitExceeded,proto3" json:"upstream_retry_limit_exceeded,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ResponseFlags) Reset() { *m = ResponseFlags{} } func (m *ResponseFlags) String() string { return proto.CompactTextString(m) } func (*ResponseFlags) ProtoMessage() {} func (*ResponseFlags) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{3} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{3} } func (m *ResponseFlags) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -640,6 +641,13 @@ func (m *ResponseFlags) GetDownstreamConnectionTermination() bool { return false } +func (m *ResponseFlags) GetUpstreamRetryLimitExceeded() bool { + if m != nil { + return m.UpstreamRetryLimitExceeded + } + return false +} + type ResponseFlags_Unauthorized struct { Reason ResponseFlags_Unauthorized_Reason `protobuf:"varint,1,opt,name=reason,proto3,enum=envoy.data.accesslog.v2.ResponseFlags_Unauthorized_Reason" json:"reason,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -651,7 +659,7 @@ func (m *ResponseFlags_Unauthorized) Reset() { *m = ResponseFlags_Unauth func (m *ResponseFlags_Unauthorized) String() string { return proto.CompactTextString(m) } func (*ResponseFlags_Unauthorized) ProtoMessage() {} func (*ResponseFlags_Unauthorized) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{3, 0} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{3, 0} } func (m *ResponseFlags_Unauthorized) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -709,7 +717,7 @@ func (m *TLSProperties) Reset() { *m = TLSProperties{} } func (m *TLSProperties) String() string { return proto.CompactTextString(m) } func (*TLSProperties) ProtoMessage() {} func (*TLSProperties) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{4} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{4} } func (m *TLSProperties) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -808,7 +816,7 @@ func (m *HTTPRequestProperties) Reset() { *m = HTTPRequestProperties{} } func (m *HTTPRequestProperties) String() string { return proto.CompactTextString(m) } func (*HTTPRequestProperties) ProtoMessage() {} func (*HTTPRequestProperties) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{5} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{5} } func (m *HTTPRequestProperties) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -954,7 +962,7 @@ func (m *HTTPResponseProperties) Reset() { *m = HTTPResponseProperties{} func (m *HTTPResponseProperties) String() string { return proto.CompactTextString(m) } func (*HTTPResponseProperties) ProtoMessage() {} func (*HTTPResponseProperties) Descriptor() ([]byte, []int) { - return fileDescriptor_accesslog_dc70fcc103e37c98, []int{6} + return fileDescriptor_accesslog_1d024156bcfb04dc, []int{6} } func (m *HTTPResponseProperties) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1473,6 +1481,18 @@ func (m *ResponseFlags) MarshalTo(dAtA []byte) (int, error) { } i++ } + if m.UpstreamRetryLimitExceeded { + dAtA[i] = 0x80 + i++ + dAtA[i] = 0x1 + i++ + if m.UpstreamRetryLimitExceeded { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -1916,6 +1936,9 @@ func (m *ResponseFlags) Size() (n int) { if m.DownstreamConnectionTermination { n += 2 } + if m.UpstreamRetryLimitExceeded { + n += 3 + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -3257,6 +3280,26 @@ func (m *ResponseFlags) Unmarshal(dAtA []byte) error { } } m.DownstreamConnectionTermination = bool(v != 0) + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UpstreamRetryLimitExceeded", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAccesslog + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.UpstreamRetryLimitExceeded = bool(v != 0) default: iNdEx = preIndex skippy, err := skipAccesslog(dAtA[iNdEx:]) @@ -4436,118 +4479,121 @@ var ( ) func init() { - proto.RegisterFile("envoy/data/accesslog/v2/accesslog.proto", fileDescriptor_accesslog_dc70fcc103e37c98) -} - -var fileDescriptor_accesslog_dc70fcc103e37c98 = []byte{ - // 1742 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4f, 0x53, 0x1b, 0xc9, - 0x15, 0x5f, 0x81, 0xc0, 0xd2, 0x93, 0x80, 0xa1, 0x11, 0x30, 0x60, 0x1b, 0xb0, 0xf2, 0x8f, 0x54, - 0x52, 0xd2, 0x5a, 0x4e, 0xc5, 0x5b, 0x7b, 0xc8, 0x16, 0x08, 0x11, 0xd8, 0x60, 0x43, 0xb5, 0x04, - 0xc9, 0x6d, 0xd2, 0x68, 0x5a, 0xd2, 0xac, 0x47, 0xd3, 0x4a, 0x77, 0x4b, 0x5e, 0xe5, 0x53, 0xf8, - 0x94, 0x4a, 0xe5, 0x43, 0x24, 0x55, 0x39, 0xe6, 0x94, 0x63, 0x8e, 0xf9, 0x04, 0x49, 0xca, 0xb7, - 0xdc, 0xf2, 0x11, 0x52, 0xfd, 0x67, 0x66, 0x24, 0x10, 0x06, 0xfb, 0xb0, 0x3a, 0x75, 0xbf, 0x3f, - 0xbf, 0xf7, 0xa7, 0xdf, 0x7b, 0x7a, 0x03, 0x3f, 0xa2, 0xd1, 0x88, 0x8d, 0xab, 0x3e, 0x91, 0xa4, - 0x4a, 0xda, 0x6d, 0x2a, 0x44, 0xc8, 0xba, 0xd5, 0x51, 0x2d, 0xbd, 0x54, 0x06, 0x9c, 0x49, 0x86, - 0x36, 0xb5, 0x60, 0x45, 0x09, 0x56, 0x52, 0xde, 0xa8, 0xb6, 0xbd, 0x6b, 0x10, 0xc8, 0x20, 0x50, - 0x6a, 0x6d, 0xc6, 0x69, 0x95, 0xf8, 0x3e, 0xa7, 0x42, 0x18, 0xcd, 0xed, 0x27, 0xb7, 0x05, 0xae, - 0x89, 0xa0, 0x96, 0xbb, 0xd3, 0x65, 0xac, 0x1b, 0xd2, 0xaa, 0xbe, 0x5d, 0x0f, 0x3b, 0x55, 0x7f, - 0xc8, 0x89, 0x0c, 0x58, 0x64, 0xf9, 0xbb, 0x37, 0xf9, 0x32, 0xe8, 0x53, 0x21, 0x49, 0x7f, 0x70, - 0x17, 0xc0, 0x5b, 0x4e, 0x06, 0x03, 0xca, 0x63, 0xf3, 0xa5, 0x2e, 0xeb, 0x32, 0x7d, 0xac, 0xaa, - 0x93, 0xa5, 0x6e, 0x8e, 0x48, 0x18, 0xf8, 0x44, 0xd2, 0x6a, 0x7c, 0x30, 0x8c, 0xf2, 0x37, 0xb0, - 0xda, 0xaa, 0x5f, 0x1c, 0xe8, 0x08, 0xcf, 0x58, 0xb7, 0x11, 0x49, 0x3e, 0x46, 0x97, 0xb0, 0xda, - 0x66, 0xfd, 0x3e, 0x8b, 0xbc, 0x01, 0x67, 0x03, 0xca, 0x65, 0x40, 0x85, 0x9b, 0xd9, 0xcb, 0xec, - 0x17, 0x6a, 0xfb, 0x95, 0x3b, 0x12, 0x53, 0x49, 0x30, 0xea, 0x5a, 0x15, 0x3b, 0x06, 0xe2, 0x22, - 0x41, 0x28, 0xff, 0x75, 0x1e, 0xd0, 0x49, 0xab, 0xf5, 0xdd, 0x58, 0x43, 0xd7, 0xe0, 0xe8, 0x10, - 0xdb, 0x2c, 0xf4, 0x46, 0x94, 0x8b, 0x80, 0x45, 0xee, 0xdc, 0x5e, 0x66, 0x7f, 0xb9, 0xf6, 0xf2, - 0x4e, 0xd4, 0xdb, 0xde, 0x69, 0xd2, 0x95, 0x51, 0xc7, 0x2b, 0x31, 0xa0, 0x25, 0xa0, 0x13, 0x78, - 0xc4, 0xe9, 0xef, 0x86, 0x54, 0x48, 0x77, 0x5e, 0x3b, 0x5c, 0xf9, 0x20, 0x34, 0x36, 0xb2, 0xa9, - 0x93, 0x38, 0x56, 0x47, 0xbf, 0x82, 0x1c, 0xa7, 0x62, 0xc0, 0x22, 0x41, 0xdd, 0xac, 0x86, 0xaa, - 0xde, 0x03, 0x65, 0x84, 0x27, 0xb0, 0x12, 0x80, 0xf2, 0xd7, 0x50, 0x98, 0x70, 0x1b, 0xb9, 0x50, - 0xba, 0xc0, 0xe7, 0xad, 0xf3, 0xfa, 0xf9, 0x99, 0x77, 0xf9, 0xba, 0x79, 0xd1, 0xa8, 0x9f, 0x1e, - 0x9f, 0x36, 0x8e, 0x9c, 0xcf, 0x10, 0xc0, 0xa2, 0x12, 0x7c, 0xfe, 0xb9, 0x93, 0x49, 0xce, 0xcf, - 0x9d, 0x39, 0x94, 0x87, 0x05, 0x75, 0xae, 0x39, 0xf3, 0xe5, 0x3f, 0x14, 0x60, 0xe5, 0x46, 0xb2, - 0xd1, 0x01, 0x14, 0x04, 0xe9, 0x0f, 0x42, 0xea, 0x71, 0x22, 0xa9, 0x7e, 0xab, 0xcc, 0xe1, 0xde, - 0xdf, 0xfe, 0xfb, 0xf7, 0xf9, 0x02, 0xca, 0x3f, 0xfb, 0xcc, 0xfe, 0xec, 0x7d, 0xcb, 0xdc, 0xfe, - 0xf7, 0x15, 0x06, 0xa3, 0x84, 0x89, 0xa4, 0xe8, 0x0a, 0xb6, 0x7c, 0xf6, 0x36, 0x12, 0x92, 0x53, - 0xd2, 0xf7, 0x38, 0xed, 0x33, 0x49, 0x3d, 0xdb, 0x48, 0xfa, 0x99, 0x0a, 0xb5, 0x6d, 0x9b, 0x00, - 0x32, 0x08, 0x54, 0xd4, 0xaa, 0x93, 0x2a, 0x07, 0x46, 0x02, 0x6f, 0xa6, 0xca, 0x58, 0xeb, 0x5a, - 0x06, 0x6a, 0x81, 0x3b, 0x81, 0x1b, 0xb2, 0x36, 0x09, 0x13, 0xd8, 0xf9, 0x7b, 0x61, 0x37, 0x52, - 0xdd, 0x33, 0xa5, 0x1a, 0xa3, 0xbe, 0x82, 0x65, 0x19, 0x8a, 0xc9, 0xfa, 0x34, 0x6f, 0xf4, 0xc3, - 0x3b, 0xdf, 0xa8, 0x75, 0xd6, 0x9c, 0x78, 0x9a, 0x25, 0x19, 0x8a, 0x89, 0xd2, 0xfc, 0x0a, 0x40, - 0x48, 0xc2, 0xa5, 0xa7, 0x9a, 0xdb, 0x5d, 0xb0, 0x6e, 0x99, 0xc6, 0xae, 0xc4, 0x8d, 0x5d, 0x69, - 0xc5, 0x9d, 0x7f, 0x98, 0x7d, 0xf7, 0xef, 0xdd, 0x0c, 0xce, 0x6b, 0x1d, 0x45, 0x45, 0xe7, 0x50, - 0x52, 0xaa, 0x9e, 0x64, 0x5e, 0x48, 0x84, 0xf4, 0xf8, 0xb7, 0xde, 0xf5, 0x58, 0x52, 0x77, 0x51, - 0x43, 0x6d, 0xdd, 0x82, 0x3a, 0xb2, 0x43, 0xe6, 0x30, 0xfb, 0x47, 0x85, 0xe4, 0x28, 0xe5, 0x16, - 0x3b, 0x23, 0x42, 0xe2, 0x6f, 0x0f, 0xc7, 0x92, 0xa2, 0x6b, 0xd8, 0x89, 0x01, 0x3b, 0x01, 0x17, - 0xd2, 0x1b, 0x0e, 0x6c, 0x0a, 0xa5, 0x85, 0x7e, 0xf4, 0x30, 0xe8, 0x2d, 0x03, 0x7d, 0xac, 0x40, - 0x2e, 0x2d, 0x46, 0xcb, 0xd8, 0xf8, 0x2d, 0x3c, 0x9d, 0x72, 0xfa, 0x96, 0x89, 0xdc, 0xc3, 0x4c, - 0xb8, 0xa9, 0xf7, 0x37, 0x2c, 0xdc, 0x1d, 0x45, 0x9c, 0xa0, 0xfc, 0xa7, 0x47, 0x81, 0xef, 0x89, - 0x22, 0x36, 0x01, 0x9f, 0x1c, 0x85, 0xb5, 0xd0, 0x81, 0xbd, 0xe9, 0x28, 0x26, 0x0a, 0x3a, 0x4e, - 0x55, 0xe1, 0x61, 0x46, 0x1e, 0x4f, 0xc4, 0x71, 0x94, 0xa0, 0xd8, 0x6c, 0xf9, 0xb0, 0x3b, 0x15, - 0xc9, 0x0c, 0x33, 0xc5, 0x87, 0x99, 0xd9, 0x4e, 0x63, 0xb9, 0x65, 0x05, 0xc3, 0x66, 0x9a, 0xa2, - 0xe9, 0x36, 0x5f, 0xba, 0xb7, 0x1f, 0xd7, 0x63, 0xd5, 0xe9, 0x26, 0xbf, 0x80, 0x8d, 0x04, 0x73, - 0xba, 0xc5, 0x97, 0xef, 0x85, 0x2c, 0xc5, 0x9a, 0x53, 0x0d, 0xfe, 0x63, 0x70, 0x12, 0xc4, 0x76, - 0x38, 0x14, 0x92, 0x72, 0x77, 0x65, 0x2f, 0xb3, 0x9f, 0xc7, 0x2b, 0x31, 0xbd, 0x6e, 0xc8, 0x6a, - 0x16, 0xc4, 0x83, 0xd6, 0xeb, 0x84, 0xa4, 0x2b, 0x5c, 0xe7, 0x9e, 0x59, 0x10, 0xcf, 0xea, 0x63, - 0x25, 0x8d, 0x97, 0xf8, 0xe4, 0x15, 0xbd, 0x84, 0x5c, 0x9f, 0x4a, 0xa2, 0xb4, 0xdc, 0x55, 0x0d, - 0xf4, 0x78, 0x86, 0xf7, 0xaf, 0xac, 0x08, 0x4e, 0x84, 0xcb, 0xff, 0x7a, 0x04, 0x4b, 0x53, 0xc8, - 0xe8, 0x0b, 0x70, 0x3b, 0x24, 0x08, 0xa9, 0x6f, 0x93, 0xd2, 0xa3, 0x24, 0x94, 0xbd, 0x76, 0x8f, - 0xb6, 0xdf, 0xe8, 0x19, 0x9d, 0xc3, 0x1b, 0x86, 0xaf, 0x43, 0x3f, 0x49, 0xb9, 0xa8, 0x02, 0x6b, - 0x11, 0xb3, 0xf2, 0xe3, 0xa4, 0xa4, 0xf5, 0x1c, 0xce, 0xe1, 0xd5, 0x88, 0x19, 0xd9, 0x71, 0x5c, - 0xa8, 0xca, 0xd2, 0xc4, 0xa3, 0xea, 0x7f, 0x30, 0x3d, 0xcb, 0xd8, 0xd0, 0xfc, 0x11, 0xe6, 0xf0, - 0x46, 0xfa, 0x72, 0x9a, 0xdd, 0x32, 0x5c, 0xb4, 0x0b, 0x05, 0xe3, 0x1c, 0xa7, 0x82, 0x4a, 0x3d, - 0x46, 0x73, 0x18, 0x34, 0x09, 0x2b, 0x0a, 0xaa, 0xc1, 0xfa, 0xcd, 0x7a, 0x31, 0xa2, 0x0b, 0x5a, - 0x74, 0x6d, 0xba, 0x22, 0x8c, 0xce, 0x2f, 0xe0, 0x71, 0xfa, 0x7a, 0x2c, 0x8a, 0x68, 0x5b, 0x15, - 0xa7, 0xa7, 0x82, 0x1d, 0x72, 0x33, 0x15, 0x73, 0x78, 0x2b, 0x79, 0xc8, 0x44, 0xe2, 0xd8, 0x08, - 0xa0, 0x63, 0xd8, 0x9d, 0xa5, 0x2f, 0x29, 0xef, 0x07, 0x91, 0x2e, 0x74, 0x3d, 0xfe, 0x72, 0xf8, - 0xe9, 0x6d, 0x8c, 0x56, 0x2a, 0x84, 0x7e, 0x02, 0xab, 0x09, 0x0e, 0x1b, 0x51, 0xde, 0x09, 0xd9, - 0x5b, 0x3d, 0xd5, 0x72, 0x38, 0x29, 0xaf, 0x73, 0x4b, 0x47, 0xdf, 0x87, 0xe5, 0x88, 0x79, 0x9c, - 0x0d, 0x25, 0xf5, 0x3a, 0x6c, 0x18, 0xf9, 0x7a, 0x38, 0xe5, 0x70, 0x31, 0x62, 0x58, 0x11, 0x8f, - 0x15, 0x0d, 0xfd, 0x00, 0x96, 0x7d, 0x1a, 0x92, 0xb1, 0x17, 0x44, 0xdf, 0xd0, 0xb6, 0xa4, 0xbe, - 0x9e, 0x2f, 0x39, 0xbc, 0xa4, 0xa9, 0xa7, 0x96, 0xa8, 0xc4, 0x3a, 0x64, 0x18, 0xca, 0x54, 0xac, - 0x60, 0xc4, 0x34, 0x35, 0x11, 0x7b, 0x06, 0x45, 0xf5, 0x8f, 0xed, 0x85, 0x41, 0x3f, 0x50, 0x42, - 0x45, 0x2d, 0x54, 0x50, 0xb4, 0x33, 0x43, 0x42, 0x1d, 0x28, 0x0d, 0x23, 0x32, 0x94, 0x3d, 0xc6, - 0x83, 0xdf, 0x53, 0xdf, 0xf3, 0xa9, 0x24, 0x41, 0x18, 0x37, 0xeb, 0x8b, 0x87, 0x15, 0x79, 0xe5, - 0x72, 0x02, 0x02, 0xaf, 0x4d, 0x02, 0x1e, 0x19, 0x3c, 0xf4, 0x12, 0xdc, 0xd4, 0x15, 0x4f, 0x50, - 0x3e, 0x0a, 0xda, 0xd4, 0xa3, 0x9c, 0x33, 0xae, 0xbb, 0x38, 0x87, 0xd7, 0x13, 0xb7, 0x9a, 0x86, - 0xdb, 0x50, 0x4c, 0xf4, 0x35, 0x3c, 0x9b, 0x98, 0x54, 0x77, 0x3c, 0xd7, 0x8a, 0x46, 0xd8, 0x4d, - 0x05, 0x67, 0x3e, 0xd8, 0xf6, 0x9f, 0x32, 0x50, 0x9c, 0x74, 0x15, 0x61, 0x58, 0xe4, 0x94, 0x08, - 0x16, 0xe9, 0x86, 0x59, 0xae, 0x7d, 0xf9, 0x09, 0xf1, 0x56, 0xb0, 0x46, 0xc0, 0x16, 0xa9, 0xfc, - 0x73, 0x58, 0x34, 0x14, 0xb4, 0x01, 0x08, 0x37, 0x0e, 0x9a, 0xe7, 0xaf, 0x6f, 0xac, 0x61, 0x25, - 0x70, 0x1a, 0xbf, 0x69, 0x35, 0xf0, 0xeb, 0x83, 0x33, 0xaf, 0xd9, 0xc0, 0x57, 0xa7, 0xf5, 0x86, - 0x93, 0x29, 0xff, 0x79, 0x0e, 0x96, 0xa6, 0xd6, 0x08, 0x84, 0xa1, 0xa0, 0xd6, 0x90, 0x78, 0x9b, - 0x35, 0x2e, 0x3e, 0x7f, 0xd8, 0x0e, 0xa2, 0x6e, 0xf1, 0x1e, 0x0b, 0x32, 0x14, 0xf1, 0x72, 0x78, - 0x0c, 0x8e, 0xc2, 0x6c, 0x07, 0x83, 0x1e, 0xe5, 0x9e, 0x18, 0x06, 0x92, 0xda, 0xfd, 0xeb, 0xc9, - 0xad, 0xb1, 0x7f, 0x79, 0x1a, 0xc9, 0x17, 0xb5, 0x2b, 0x12, 0x0e, 0x29, 0x56, 0x0b, 0x51, 0x5d, - 0x2b, 0x35, 0x95, 0x0e, 0xda, 0x37, 0x38, 0x22, 0x0a, 0xbc, 0x1e, 0x13, 0x32, 0x22, 0x7d, 0xaa, - 0x47, 0x41, 0x5e, 0x4b, 0x36, 0xa3, 0xe0, 0xc4, 0x52, 0xcb, 0xbf, 0x06, 0x48, 0x7d, 0x41, 0x9b, - 0xb0, 0x76, 0xd5, 0xc0, 0xcd, 0xd3, 0x5b, 0x49, 0xc9, 0xc3, 0x42, 0xeb, 0xac, 0x39, 0x7a, 0xee, - 0x64, 0x50, 0x01, 0x1e, 0xe9, 0xa3, 0xa7, 0x76, 0xd3, 0xe4, 0x52, 0x73, 0xe6, 0xd3, 0xcb, 0x0b, - 0x27, 0x5b, 0x7e, 0xb7, 0x00, 0xeb, 0x33, 0xd7, 0x6c, 0xf4, 0x4b, 0x35, 0xb3, 0xcd, 0x98, 0xea, - 0x53, 0xd9, 0x63, 0xbe, 0xcd, 0xdd, 0xde, 0x8c, 0x51, 0x6b, 0xb5, 0x5f, 0x69, 0x39, 0x35, 0xad, - 0x27, 0xae, 0x68, 0x03, 0x16, 0x45, 0xbb, 0x47, 0xfb, 0x26, 0x47, 0x79, 0x6c, 0x6f, 0xe8, 0x09, - 0xe4, 0x6d, 0x01, 0xc8, 0xb1, 0x0d, 0x3b, 0x25, 0xa0, 0xcf, 0x21, 0x3b, 0x60, 0x5c, 0xda, 0xa5, - 0xf1, 0xc3, 0x79, 0xd5, 0x92, 0x08, 0x41, 0x76, 0x40, 0x64, 0x4f, 0x0f, 0xbd, 0x3c, 0xd6, 0x67, - 0xf4, 0x14, 0x60, 0x28, 0x28, 0xf7, 0x48, 0x97, 0x46, 0x52, 0x0f, 0xb5, 0x3c, 0xce, 0x2b, 0xca, - 0x81, 0x22, 0x20, 0x57, 0x7d, 0x8b, 0x74, 0x28, 0xa7, 0x5c, 0x0f, 0xab, 0x3c, 0x8e, 0xaf, 0xe8, - 0x7b, 0xb0, 0xd4, 0x61, 0xfc, 0x2d, 0xe1, 0x3e, 0xf5, 0xbd, 0x0e, 0xe3, 0x7a, 0x24, 0xe5, 0x71, - 0x31, 0x21, 0x1e, 0x33, 0xae, 0xd0, 0xe3, 0x14, 0x05, 0x66, 0x14, 0xe5, 0x71, 0xde, 0x52, 0x4e, - 0x7d, 0x85, 0xc1, 0x78, 0xd0, 0x0d, 0x22, 0x12, 0x7a, 0xda, 0x33, 0x30, 0x18, 0x31, 0xf1, 0x42, - 0x79, 0x58, 0x83, 0xf5, 0x18, 0xa3, 0x47, 0x89, 0x4f, 0xb9, 0xd0, 0x6b, 0x84, 0xd0, 0xc3, 0x28, - 0x8b, 0xd7, 0x2c, 0xf3, 0xc4, 0xf0, 0xd4, 0x7a, 0x20, 0xd0, 0x4f, 0x01, 0xc5, 0x3a, 0xd7, 0xcc, - 0x1f, 0x5b, 0x85, 0xa2, 0x56, 0x70, 0x2c, 0xe7, 0x90, 0xf9, 0x63, 0x23, 0xfd, 0x06, 0x56, 0x6e, - 0x58, 0x70, 0x97, 0xf6, 0xe6, 0xf7, 0x0b, 0xb5, 0xc3, 0x8f, 0xfb, 0xf0, 0x8a, 0x5f, 0xd9, 0xba, - 0xa2, 0x3f, 0xf5, 0xf0, 0xf2, 0xb4, 0x7f, 0xdb, 0x07, 0xb0, 0x36, 0x43, 0x0c, 0x39, 0x30, 0xff, - 0x86, 0x8e, 0x75, 0x05, 0xe5, 0xb1, 0x3a, 0xa2, 0x12, 0x2c, 0x8c, 0xd4, 0xe3, 0xd9, 0xa2, 0x30, - 0x97, 0x2f, 0xe7, 0xbe, 0xc8, 0x94, 0xff, 0x92, 0x85, 0x8d, 0xd9, 0x9f, 0x6b, 0xe8, 0x00, 0x92, - 0x4d, 0xc0, 0x6b, 0x33, 0x9f, 0xda, 0x4f, 0xde, 0x0f, 0x57, 0x47, 0x31, 0x56, 0xa9, 0x33, 0x9f, - 0xa2, 0x9f, 0xc1, 0x46, 0x02, 0x31, 0x9d, 0xf0, 0x39, 0x9d, 0xbf, 0x52, 0xcc, 0x9d, 0xca, 0x78, - 0x05, 0xd6, 0x12, 0xad, 0x89, 0x94, 0xcf, 0x6b, 0x95, 0xd5, 0x98, 0x95, 0xe6, 0x9c, 0x81, 0x73, - 0xd3, 0x8a, 0x9b, 0xd5, 0x49, 0x3f, 0xfa, 0xc8, 0x4f, 0xd4, 0x64, 0x68, 0x4e, 0xa5, 0x7d, 0xe5, - 0x86, 0x97, 0x88, 0x43, 0xe2, 0x85, 0x27, 0xb9, 0xda, 0x58, 0xb8, 0x70, 0x17, 0xb4, 0xc5, 0xc6, - 0xa7, 0x5a, 0x6c, 0x59, 0x1c, 0x63, 0x32, 0x09, 0x28, 0x26, 0x6f, 0x1f, 0x42, 0x69, 0x96, 0x73, - 0x1f, 0xf3, 0xd8, 0xdb, 0x75, 0x58, 0x9f, 0x69, 0xee, 0x63, 0x40, 0x0e, 0x8b, 0xff, 0x78, 0xbf, - 0x93, 0xf9, 0xe7, 0xfb, 0x9d, 0xcc, 0x7f, 0xde, 0xef, 0x64, 0xae, 0x17, 0x75, 0x15, 0xbc, 0xf8, - 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x5a, 0xd2, 0x24, 0xb8, 0x12, 0x00, 0x00, + proto.RegisterFile("envoy/data/accesslog/v2/accesslog.proto", fileDescriptor_accesslog_1d024156bcfb04dc) +} + +var fileDescriptor_accesslog_1d024156bcfb04dc = []byte{ + // 1786 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4b, 0x73, 0x1b, 0x4b, + 0xf5, 0xbf, 0xb2, 0x64, 0x47, 0x3a, 0xf2, 0x63, 0xdc, 0x96, 0xed, 0xb1, 0x92, 0xd8, 0x8e, 0xfe, + 0xff, 0x0b, 0xa6, 0xa0, 0xa4, 0x1b, 0x05, 0xc8, 0xad, 0xbb, 0xe0, 0x96, 0x2c, 0xcb, 0xd8, 0x17, + 0x27, 0x76, 0xb5, 0x64, 0xc3, 0x6e, 0x68, 0x6b, 0x5a, 0xd2, 0xdc, 0x8c, 0xa6, 0x45, 0x4f, 0x4b, + 0x89, 0xf8, 0x14, 0x77, 0x45, 0x51, 0xec, 0xf8, 0x02, 0x50, 0xc5, 0x92, 0x15, 0x4b, 0x96, 0x7c, + 0x03, 0xa8, 0xec, 0xd8, 0xf1, 0x11, 0xa8, 0x7e, 0xcc, 0x43, 0xb6, 0x1c, 0x3b, 0x59, 0xa0, 0x55, + 0xf7, 0x79, 0xfc, 0xce, 0xa3, 0xcf, 0x39, 0x3a, 0x03, 0xdf, 0xa7, 0xc1, 0x84, 0x4d, 0x6b, 0x2e, + 0x11, 0xa4, 0x46, 0xba, 0x5d, 0x1a, 0x86, 0x3e, 0xeb, 0xd7, 0x26, 0xf5, 0xe4, 0x52, 0x1d, 0x71, + 0x26, 0x18, 0xda, 0x56, 0x82, 0x55, 0x29, 0x58, 0x4d, 0x78, 0x93, 0x7a, 0x79, 0x4f, 0x23, 0x90, + 0x91, 0x27, 0xd5, 0xba, 0x8c, 0xd3, 0x1a, 0x71, 0x5d, 0x4e, 0xc3, 0x50, 0x6b, 0x96, 0x9f, 0xdc, + 0x16, 0xb8, 0x26, 0x21, 0x35, 0xdc, 0xdd, 0x3e, 0x63, 0x7d, 0x9f, 0xd6, 0xd4, 0xed, 0x7a, 0xdc, + 0xab, 0xb9, 0x63, 0x4e, 0x84, 0xc7, 0x02, 0xc3, 0xdf, 0xbb, 0xc9, 0x17, 0xde, 0x90, 0x86, 0x82, + 0x0c, 0x47, 0x77, 0x01, 0xbc, 0xe5, 0x64, 0x34, 0xa2, 0x3c, 0x32, 0x5f, 0xea, 0xb3, 0x3e, 0x53, + 0xc7, 0x9a, 0x3c, 0x19, 0xea, 0xf6, 0x84, 0xf8, 0x9e, 0x4b, 0x04, 0xad, 0x45, 0x07, 0xcd, 0xa8, + 0x7c, 0x0b, 0xeb, 0x9d, 0xe6, 0x45, 0x43, 0x45, 0x78, 0xc6, 0xfa, 0xad, 0x40, 0xf0, 0x29, 0xba, + 0x84, 0xf5, 0x2e, 0x1b, 0x0e, 0x59, 0xe0, 0x8c, 0x38, 0x1b, 0x51, 0x2e, 0x3c, 0x1a, 0xda, 0x99, + 0xfd, 0xcc, 0x41, 0xb1, 0x7e, 0x50, 0xbd, 0x23, 0x31, 0xd5, 0x18, 0xa3, 0xa9, 0x54, 0xb1, 0xa5, + 0x21, 0x2e, 0x62, 0x84, 0xca, 0x5f, 0xb2, 0x80, 0x4e, 0x3a, 0x9d, 0xff, 0x8d, 0x35, 0x74, 0x0d, + 0x96, 0x0a, 0xb1, 0xcb, 0x7c, 0x67, 0x42, 0x79, 0xe8, 0xb1, 0xc0, 0x5e, 0xd8, 0xcf, 0x1c, 0xac, + 0xd6, 0x5f, 0xde, 0x89, 0x7a, 0xdb, 0x3b, 0x45, 0xba, 0xd2, 0xea, 0x78, 0x2d, 0x02, 0x34, 0x04, + 0x74, 0x02, 0x8f, 0x38, 0xfd, 0xcd, 0x98, 0x86, 0xc2, 0xce, 0x2a, 0x87, 0xab, 0x1f, 0x84, 0xc6, + 0x5a, 0x36, 0x71, 0x12, 0x47, 0xea, 0xe8, 0x17, 0x90, 0xe7, 0x34, 0x1c, 0xb1, 0x20, 0xa4, 0x76, + 0x4e, 0x41, 0xd5, 0xee, 0x81, 0xd2, 0xc2, 0x29, 0xac, 0x18, 0xa0, 0xf2, 0x0d, 0x14, 0x53, 0x6e, + 0x23, 0x1b, 0x4a, 0x17, 0xf8, 0xbc, 0x73, 0xde, 0x3c, 0x3f, 0x73, 0x2e, 0x5f, 0xb7, 0x2f, 0x5a, + 0xcd, 0xd3, 0xe3, 0xd3, 0xd6, 0x91, 0xf5, 0x19, 0x02, 0x58, 0x92, 0x82, 0xcf, 0xbf, 0xb0, 0x32, + 0xf1, 0xf9, 0xb9, 0xb5, 0x80, 0x0a, 0xb0, 0x28, 0xcf, 0x75, 0x2b, 0x5b, 0xf9, 0x5d, 0x11, 0xd6, + 0x6e, 0x24, 0x1b, 0x35, 0xa0, 0x18, 0x92, 0xe1, 0xc8, 0xa7, 0x0e, 0x27, 0x82, 0xaa, 0xb7, 0xca, + 0x1c, 0xee, 0xff, 0xf5, 0xdf, 0x7f, 0xcb, 0x16, 0x51, 0xe1, 0xd9, 0x67, 0xe6, 0x67, 0xee, 0x3b, + 0xfa, 0xf6, 0x9f, 0xaf, 0x31, 0x68, 0x25, 0x4c, 0x04, 0x45, 0x57, 0xb0, 0xe3, 0xb2, 0xb7, 0x41, + 0x28, 0x38, 0x25, 0x43, 0x87, 0xd3, 0x21, 0x13, 0xd4, 0x31, 0x8d, 0xa4, 0x9e, 0xa9, 0x58, 0x2f, + 0x9b, 0x04, 0x90, 0x91, 0x27, 0xa3, 0x96, 0x9d, 0x54, 0x6d, 0x68, 0x09, 0xbc, 0x9d, 0x28, 0x63, + 0xa5, 0x6b, 0x18, 0xa8, 0x03, 0x76, 0x0a, 0xd7, 0x67, 0x5d, 0xe2, 0xc7, 0xb0, 0xd9, 0x7b, 0x61, + 0xb7, 0x12, 0xdd, 0x33, 0xa9, 0x1a, 0xa1, 0xbe, 0x82, 0x55, 0xe1, 0x87, 0xe9, 0xfa, 0xd4, 0x6f, + 0xf4, 0xbd, 0x3b, 0xdf, 0xa8, 0x73, 0xd6, 0x4e, 0x3d, 0xcd, 0x8a, 0xf0, 0xc3, 0x54, 0x69, 0x7e, + 0x0d, 0x10, 0x0a, 0xc2, 0x85, 0x23, 0x9b, 0xdb, 0x5e, 0x34, 0x6e, 0xe9, 0xc6, 0xae, 0x46, 0x8d, + 0x5d, 0xed, 0x44, 0x9d, 0x7f, 0x98, 0xfb, 0xee, 0x9f, 0x7b, 0x19, 0x5c, 0x50, 0x3a, 0x92, 0x8a, + 0xce, 0xa1, 0x24, 0x55, 0x1d, 0xc1, 0x1c, 0x9f, 0x84, 0xc2, 0xe1, 0xef, 0x9c, 0xeb, 0xa9, 0xa0, + 0xf6, 0x92, 0x82, 0xda, 0xb9, 0x05, 0x75, 0x64, 0x86, 0xcc, 0x61, 0xee, 0xf7, 0x12, 0xc9, 0x92, + 0xca, 0x1d, 0x76, 0x46, 0x42, 0x81, 0xdf, 0x1d, 0x4e, 0x05, 0x45, 0xd7, 0xb0, 0x1b, 0x01, 0xf6, + 0x3c, 0x1e, 0x0a, 0x67, 0x3c, 0x32, 0x29, 0x14, 0x06, 0xfa, 0xd1, 0xc3, 0xa0, 0x77, 0x34, 0xf4, + 0xb1, 0x04, 0xb9, 0x34, 0x18, 0x1d, 0x6d, 0xe3, 0xd7, 0xf0, 0x74, 0xc6, 0xe9, 0x5b, 0x26, 0xf2, + 0x0f, 0x33, 0x61, 0x27, 0xde, 0xdf, 0xb0, 0x70, 0x77, 0x14, 0x51, 0x82, 0x0a, 0x9f, 0x1e, 0x05, + 0xbe, 0x27, 0x8a, 0xc8, 0x04, 0x7c, 0x72, 0x14, 0xc6, 0x42, 0x0f, 0xf6, 0x67, 0xa3, 0x48, 0x15, + 0x74, 0x94, 0xaa, 0xe2, 0xc3, 0x8c, 0x3c, 0x4e, 0xc5, 0x71, 0x14, 0xa3, 0x98, 0x6c, 0xb9, 0xb0, + 0x37, 0x13, 0xc9, 0x1c, 0x33, 0xcb, 0x0f, 0x33, 0x53, 0x4e, 0x62, 0xb9, 0x65, 0x05, 0xc3, 0x76, + 0x92, 0xa2, 0xd9, 0x36, 0x5f, 0xb9, 0xb7, 0x1f, 0x37, 0x23, 0xd5, 0xd9, 0x26, 0xbf, 0x80, 0xad, + 0x18, 0x73, 0xb6, 0xc5, 0x57, 0xef, 0x85, 0x2c, 0x45, 0x9a, 0x33, 0x0d, 0xfe, 0x03, 0xb0, 0x62, + 0xc4, 0xae, 0x3f, 0x0e, 0x05, 0xe5, 0xf6, 0xda, 0x7e, 0xe6, 0xa0, 0x80, 0xd7, 0x22, 0x7a, 0x53, + 0x93, 0xe5, 0x2c, 0x88, 0x06, 0xad, 0xd3, 0xf3, 0x49, 0x3f, 0xb4, 0xad, 0x7b, 0x66, 0x41, 0x34, + 0xab, 0x8f, 0xa5, 0x34, 0x5e, 0xe1, 0xe9, 0x2b, 0x7a, 0x09, 0xf9, 0x21, 0x15, 0x44, 0x6a, 0xd9, + 0xeb, 0x0a, 0xe8, 0xf1, 0x1c, 0xef, 0x5f, 0x19, 0x11, 0x1c, 0x0b, 0x57, 0xfe, 0x98, 0x87, 0x95, + 0x19, 0x64, 0xf4, 0x25, 0xd8, 0x3d, 0xe2, 0xf9, 0xd4, 0x35, 0x49, 0x19, 0x50, 0xe2, 0x8b, 0x41, + 0x77, 0x40, 0xbb, 0x6f, 0xd4, 0x8c, 0xce, 0xe3, 0x2d, 0xcd, 0x57, 0xa1, 0x9f, 0x24, 0x5c, 0x54, + 0x85, 0x8d, 0x80, 0x19, 0xf9, 0x69, 0x5c, 0xd2, 0x6a, 0x0e, 0xe7, 0xf1, 0x7a, 0xc0, 0xb4, 0xec, + 0x34, 0x2a, 0x54, 0x69, 0x29, 0xf5, 0xa8, 0xea, 0x1f, 0x4c, 0xcd, 0x32, 0x36, 0xd6, 0x7f, 0x84, + 0x79, 0xbc, 0x95, 0xbc, 0x9c, 0x62, 0x77, 0x34, 0x17, 0xed, 0x41, 0x51, 0x3b, 0xc7, 0x69, 0x48, + 0x85, 0x1a, 0xa3, 0x79, 0x0c, 0x8a, 0x84, 0x25, 0x05, 0xd5, 0x61, 0xf3, 0x66, 0xbd, 0x68, 0xd1, + 0x45, 0x25, 0xba, 0x31, 0x5b, 0x11, 0x5a, 0xe7, 0x67, 0xf0, 0x38, 0x79, 0x3d, 0x16, 0x04, 0xb4, + 0x2b, 0x8b, 0xd3, 0x91, 0xc1, 0x8e, 0xb9, 0x9e, 0x8a, 0x79, 0xbc, 0x13, 0x3f, 0x64, 0x2c, 0x71, + 0xac, 0x05, 0xd0, 0x31, 0xec, 0xcd, 0xd3, 0x17, 0x94, 0x0f, 0xbd, 0x40, 0x15, 0xba, 0x1a, 0x7f, + 0x79, 0xfc, 0xf4, 0x36, 0x46, 0x27, 0x11, 0x42, 0x3f, 0x84, 0xf5, 0x18, 0x87, 0x4d, 0x28, 0xef, + 0xf9, 0xec, 0xad, 0x9a, 0x6a, 0x79, 0x1c, 0x97, 0xd7, 0xb9, 0xa1, 0xa3, 0xff, 0x87, 0xd5, 0x80, + 0x39, 0x9c, 0x8d, 0x05, 0x75, 0x7a, 0x6c, 0x1c, 0xb8, 0x6a, 0x38, 0xe5, 0xf1, 0x72, 0xc0, 0xb0, + 0x24, 0x1e, 0x4b, 0x1a, 0xfa, 0x1c, 0x56, 0x5d, 0xea, 0x93, 0xa9, 0xe3, 0x05, 0xdf, 0xd2, 0xae, + 0xa0, 0xae, 0x9a, 0x2f, 0x79, 0xbc, 0xa2, 0xa8, 0xa7, 0x86, 0x28, 0xc5, 0x7a, 0x64, 0xec, 0x8b, + 0x44, 0xac, 0xa8, 0xc5, 0x14, 0x35, 0x16, 0x7b, 0x06, 0xcb, 0xf2, 0x1f, 0xdb, 0xf1, 0xbd, 0xa1, + 0x27, 0x85, 0x96, 0x95, 0x50, 0x51, 0xd2, 0xce, 0x34, 0x09, 0xf5, 0xa0, 0x34, 0x0e, 0xc8, 0x58, + 0x0c, 0x18, 0xf7, 0x7e, 0x4b, 0x5d, 0xc7, 0xa5, 0x82, 0x78, 0x7e, 0xd4, 0xac, 0x2f, 0x1e, 0x56, + 0xe4, 0xd5, 0xcb, 0x14, 0x04, 0xde, 0x48, 0x03, 0x1e, 0x69, 0x3c, 0xf4, 0x12, 0xec, 0xc4, 0x15, + 0x27, 0xa4, 0x7c, 0xe2, 0x75, 0xa9, 0x43, 0x39, 0x67, 0x5c, 0x75, 0x71, 0x1e, 0x6f, 0xc6, 0x6e, + 0xb5, 0x35, 0xb7, 0x25, 0x99, 0xe8, 0x1b, 0x78, 0x96, 0x9a, 0x54, 0x77, 0x3c, 0xd7, 0x9a, 0x42, + 0xd8, 0x4b, 0x04, 0xe7, 0x3f, 0x58, 0x03, 0x9e, 0xa6, 0x8a, 0x4d, 0xf0, 0xa9, 0x71, 0x87, 0xbe, + 0xeb, 0x52, 0xea, 0x52, 0x57, 0xb5, 0x76, 0x1e, 0x97, 0x93, 0xa2, 0x13, 0x7c, 0xaa, 0x5c, 0x6a, + 0x19, 0x89, 0xf2, 0x1f, 0x32, 0xb0, 0x9c, 0x8e, 0x16, 0x61, 0x58, 0xe2, 0x94, 0x84, 0x2c, 0x50, + 0x3d, 0xb7, 0x5a, 0xff, 0xea, 0x13, 0x52, 0x56, 0xc5, 0x0a, 0x01, 0x1b, 0xa4, 0xca, 0x4f, 0x61, + 0x49, 0x53, 0xd0, 0x16, 0x20, 0xdc, 0x6a, 0xb4, 0xcf, 0x5f, 0xdf, 0xd8, 0xe4, 0x4a, 0x60, 0xb5, + 0x7e, 0xd5, 0x69, 0xe1, 0xd7, 0x8d, 0x33, 0xa7, 0xdd, 0xc2, 0x57, 0xa7, 0xcd, 0x96, 0x95, 0xa9, + 0xfc, 0x69, 0x01, 0x56, 0x66, 0x36, 0x11, 0x84, 0xa1, 0x28, 0x37, 0x99, 0x68, 0x21, 0xd6, 0x2e, + 0x3e, 0x7f, 0xd8, 0x1a, 0x23, 0x6f, 0xd1, 0x2a, 0x0c, 0xc2, 0x0f, 0xa3, 0xfd, 0xf2, 0x18, 0x2c, + 0x89, 0xd9, 0xf5, 0x46, 0x03, 0xca, 0x9d, 0x70, 0xec, 0x09, 0x6a, 0x56, 0xb8, 0x27, 0xb7, 0xfe, + 0x39, 0x2e, 0x4f, 0x03, 0xf1, 0xa2, 0x7e, 0x45, 0xfc, 0x31, 0xc5, 0x72, 0xa7, 0x6a, 0x2a, 0xa5, + 0xb6, 0xd4, 0x41, 0x07, 0x1a, 0x27, 0x0c, 0x3c, 0x67, 0xc0, 0x42, 0x11, 0x90, 0x21, 0x55, 0xd3, + 0xa4, 0xa0, 0x24, 0xdb, 0x81, 0x77, 0x62, 0xa8, 0x95, 0x5f, 0x02, 0x24, 0xbe, 0xa0, 0x6d, 0xd8, + 0xb8, 0x6a, 0xe1, 0xf6, 0xe9, 0xad, 0xa4, 0x14, 0x60, 0xb1, 0x73, 0xd6, 0x9e, 0x3c, 0xb7, 0x32, + 0xa8, 0x08, 0x8f, 0xd4, 0xd1, 0x91, 0xeb, 0x6d, 0x7c, 0xa9, 0x5b, 0xd9, 0xe4, 0xf2, 0xc2, 0xca, + 0x55, 0xbe, 0x5b, 0x84, 0xcd, 0xb9, 0x9b, 0x3a, 0xfa, 0xb9, 0x1c, 0xfb, 0x7a, 0xd2, 0x0d, 0xa9, + 0x18, 0x30, 0xd7, 0xe4, 0x6e, 0x7f, 0xce, 0xb4, 0x36, 0xda, 0xaf, 0x94, 0x9c, 0x1c, 0xf8, 0xa9, + 0x2b, 0xda, 0x82, 0xa5, 0xb0, 0x3b, 0xa0, 0x43, 0x9d, 0xa3, 0x02, 0x36, 0x37, 0xf4, 0x04, 0x0a, + 0xa6, 0x00, 0xc4, 0xd4, 0x84, 0x9d, 0x10, 0xd0, 0x17, 0x90, 0x1b, 0x31, 0x2e, 0xcc, 0xde, 0xf9, + 0xe1, 0xbc, 0x2a, 0x49, 0x84, 0x20, 0x37, 0x22, 0x62, 0xa0, 0xe6, 0x66, 0x01, 0xab, 0x33, 0x7a, + 0x0a, 0x30, 0x0e, 0x29, 0x77, 0x48, 0x9f, 0x06, 0x42, 0xcd, 0xc5, 0x02, 0x2e, 0x48, 0x4a, 0x43, + 0x12, 0x90, 0x2d, 0x3f, 0x67, 0x7a, 0x94, 0x53, 0xae, 0xe6, 0x5d, 0x01, 0x47, 0x57, 0xf4, 0x7f, + 0xb0, 0xd2, 0x63, 0xfc, 0x2d, 0xe1, 0x2e, 0x75, 0x9d, 0x1e, 0xe3, 0x6a, 0xaa, 0x15, 0xf0, 0x72, + 0x4c, 0x3c, 0x66, 0x5c, 0xa2, 0x47, 0x29, 0xf2, 0xf4, 0x34, 0x2b, 0xe0, 0x82, 0xa1, 0x9c, 0xba, + 0x12, 0x83, 0x71, 0xaf, 0xef, 0x05, 0xc4, 0x77, 0x94, 0x67, 0xa0, 0x31, 0x22, 0xe2, 0x85, 0xf4, + 0xb0, 0x0e, 0x9b, 0x11, 0xc6, 0x80, 0x12, 0x97, 0xf2, 0x50, 0x6d, 0x22, 0xa1, 0x9a, 0x67, 0x39, + 0xbc, 0x61, 0x98, 0x27, 0x9a, 0x27, 0x37, 0x8c, 0x10, 0xfd, 0x08, 0x50, 0xa4, 0x73, 0xcd, 0xdc, + 0xa9, 0x51, 0x58, 0x56, 0x0a, 0x96, 0xe1, 0x1c, 0x32, 0x77, 0xaa, 0xa5, 0xdf, 0xc0, 0xda, 0x0d, + 0x0b, 0xf6, 0xca, 0x7e, 0xf6, 0xa0, 0x58, 0x3f, 0xfc, 0xb8, 0x6f, 0xb7, 0xe8, 0x95, 0x8d, 0x2b, + 0xea, 0x6b, 0x11, 0xaf, 0xce, 0xfa, 0x57, 0x6e, 0xc0, 0xc6, 0x1c, 0x31, 0x64, 0x41, 0xf6, 0x0d, + 0x9d, 0xaa, 0x0a, 0x2a, 0x60, 0x79, 0x44, 0x25, 0x58, 0x9c, 0xc8, 0xc7, 0x33, 0x45, 0xa1, 0x2f, + 0x5f, 0x2d, 0x7c, 0x99, 0xa9, 0xfc, 0x39, 0x07, 0x5b, 0xf3, 0xbf, 0xf8, 0x50, 0x03, 0xe2, 0x65, + 0xc2, 0xe9, 0x32, 0x97, 0x9a, 0xaf, 0xe6, 0x0f, 0x57, 0xc7, 0x72, 0xa4, 0xd2, 0x64, 0x2e, 0x45, + 0x3f, 0x86, 0xad, 0x18, 0x62, 0x36, 0xe1, 0x0b, 0x2a, 0x7f, 0xa5, 0x88, 0x3b, 0x93, 0xf1, 0x2a, + 0x6c, 0xc4, 0x5a, 0xa9, 0x94, 0x67, 0x95, 0xca, 0x7a, 0xc4, 0x4a, 0x72, 0xce, 0xc0, 0xba, 0x69, + 0xc5, 0xce, 0xa9, 0xa4, 0x1f, 0x7d, 0xe4, 0x57, 0x6e, 0x3c, 0x34, 0x67, 0xd2, 0xbe, 0x76, 0xc3, + 0x4b, 0xc4, 0x21, 0xf6, 0xc2, 0x11, 0x5c, 0x2e, 0x3d, 0x3c, 0xb4, 0x17, 0x95, 0xc5, 0xd6, 0xa7, + 0x5a, 0xec, 0x18, 0x1c, 0x6d, 0x32, 0x0e, 0x28, 0x22, 0x97, 0x0f, 0xa1, 0x34, 0xcf, 0xb9, 0x8f, + 0x79, 0xec, 0x72, 0x13, 0x36, 0xe7, 0x9a, 0xfb, 0x18, 0x90, 0xc3, 0x9f, 0xfc, 0xfd, 0xfd, 0x6e, + 0xe6, 0x1f, 0xef, 0x77, 0x33, 0xff, 0x7a, 0xbf, 0x9b, 0x81, 0xcf, 0x3d, 0xa6, 0x23, 0x1e, 0x71, + 0xf6, 0x6e, 0x7a, 0x57, 0xf0, 0x17, 0x99, 0xeb, 0x25, 0x55, 0x2e, 0x2f, 0xfe, 0x1b, 0x00, 0x00, + 0xff, 0xff, 0xa9, 0x7f, 0xac, 0xe0, 0x24, 0x13, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/data/accesslog/v2/accesslog.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/data/accesslog/v2/accesslog.pb.validate.go index cc36b0379d19..f323e189444f 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/data/accesslog/v2/accesslog.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/data/accesslog/v2/accesslog.pb.validate.go @@ -407,6 +407,8 @@ func (m *ResponseFlags) Validate() error { // no validation rules for DownstreamConnectionTermination + // no validation rules for UpstreamRetryLimitExceeded + return nil } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/data/core/v2alpha/health_check_event.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/data/core/v2alpha/health_check_event.pb.go index bbee65d4eeda..b628aae09abd 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/data/core/v2alpha/health_check_event.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/data/core/v2alpha/health_check_event.pb.go @@ -54,7 +54,7 @@ func (x HealthCheckFailureType) String() string { return proto.EnumName(HealthCheckFailureType_name, int32(x)) } func (HealthCheckFailureType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_health_check_event_d539efed59161f4a, []int{0} + return fileDescriptor_health_check_event_84ee3363a7e1b25a, []int{0} } type HealthCheckerType int32 @@ -83,7 +83,7 @@ func (x HealthCheckerType) String() string { return proto.EnumName(HealthCheckerType_name, int32(x)) } func (HealthCheckerType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_health_check_event_d539efed59161f4a, []int{1} + return fileDescriptor_health_check_event_84ee3363a7e1b25a, []int{1} } type HealthCheckEvent struct { @@ -94,6 +94,8 @@ type HealthCheckEvent struct { // *HealthCheckEvent_EjectUnhealthyEvent // *HealthCheckEvent_AddHealthyEvent // *HealthCheckEvent_HealthCheckFailureEvent + // *HealthCheckEvent_DegradedHealthyHost + // *HealthCheckEvent_NoLongerDegradedHost Event isHealthCheckEvent_Event `protobuf_oneof:"event"` // Timestamp for event. Timestamp *time.Time `protobuf:"bytes,6,opt,name=timestamp,proto3,stdtime" json:"timestamp,omitempty"` @@ -106,7 +108,7 @@ func (m *HealthCheckEvent) Reset() { *m = HealthCheckEvent{} } func (m *HealthCheckEvent) String() string { return proto.CompactTextString(m) } func (*HealthCheckEvent) ProtoMessage() {} func (*HealthCheckEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_event_d539efed59161f4a, []int{0} + return fileDescriptor_health_check_event_84ee3363a7e1b25a, []int{0} } func (m *HealthCheckEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -151,10 +153,18 @@ type HealthCheckEvent_AddHealthyEvent struct { type HealthCheckEvent_HealthCheckFailureEvent struct { HealthCheckFailureEvent *HealthCheckFailure `protobuf:"bytes,7,opt,name=health_check_failure_event,json=healthCheckFailureEvent,proto3,oneof"` } +type HealthCheckEvent_DegradedHealthyHost struct { + DegradedHealthyHost *DegradedHealthyHost `protobuf:"bytes,8,opt,name=degraded_healthy_host,json=degradedHealthyHost,proto3,oneof"` +} +type HealthCheckEvent_NoLongerDegradedHost struct { + NoLongerDegradedHost *NoLongerDegradedHost `protobuf:"bytes,9,opt,name=no_longer_degraded_host,json=noLongerDegradedHost,proto3,oneof"` +} func (*HealthCheckEvent_EjectUnhealthyEvent) isHealthCheckEvent_Event() {} func (*HealthCheckEvent_AddHealthyEvent) isHealthCheckEvent_Event() {} func (*HealthCheckEvent_HealthCheckFailureEvent) isHealthCheckEvent_Event() {} +func (*HealthCheckEvent_DegradedHealthyHost) isHealthCheckEvent_Event() {} +func (*HealthCheckEvent_NoLongerDegradedHost) isHealthCheckEvent_Event() {} func (m *HealthCheckEvent) GetEvent() isHealthCheckEvent_Event { if m != nil { @@ -205,6 +215,20 @@ func (m *HealthCheckEvent) GetHealthCheckFailureEvent() *HealthCheckFailure { return nil } +func (m *HealthCheckEvent) GetDegradedHealthyHost() *DegradedHealthyHost { + if x, ok := m.GetEvent().(*HealthCheckEvent_DegradedHealthyHost); ok { + return x.DegradedHealthyHost + } + return nil +} + +func (m *HealthCheckEvent) GetNoLongerDegradedHost() *NoLongerDegradedHost { + if x, ok := m.GetEvent().(*HealthCheckEvent_NoLongerDegradedHost); ok { + return x.NoLongerDegradedHost + } + return nil +} + func (m *HealthCheckEvent) GetTimestamp() *time.Time { if m != nil { return m.Timestamp @@ -218,6 +242,8 @@ func (*HealthCheckEvent) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buff (*HealthCheckEvent_EjectUnhealthyEvent)(nil), (*HealthCheckEvent_AddHealthyEvent)(nil), (*HealthCheckEvent_HealthCheckFailureEvent)(nil), + (*HealthCheckEvent_DegradedHealthyHost)(nil), + (*HealthCheckEvent_NoLongerDegradedHost)(nil), } } @@ -240,6 +266,16 @@ func _HealthCheckEvent_OneofMarshaler(msg proto.Message, b *proto.Buffer) error if err := b.EncodeMessage(x.HealthCheckFailureEvent); err != nil { return err } + case *HealthCheckEvent_DegradedHealthyHost: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DegradedHealthyHost); err != nil { + return err + } + case *HealthCheckEvent_NoLongerDegradedHost: + _ = b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.NoLongerDegradedHost); err != nil { + return err + } case nil: default: return fmt.Errorf("HealthCheckEvent.Event has unexpected type %T", x) @@ -274,6 +310,22 @@ func _HealthCheckEvent_OneofUnmarshaler(msg proto.Message, tag, wire int, b *pro err := b.DecodeMessage(msg) m.Event = &HealthCheckEvent_HealthCheckFailureEvent{msg} return true, err + case 8: // event.degraded_healthy_host + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DegradedHealthyHost) + err := b.DecodeMessage(msg) + m.Event = &HealthCheckEvent_DegradedHealthyHost{msg} + return true, err + case 9: // event.no_longer_degraded_host + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(NoLongerDegradedHost) + err := b.DecodeMessage(msg) + m.Event = &HealthCheckEvent_NoLongerDegradedHost{msg} + return true, err default: return false, nil } @@ -298,6 +350,16 @@ func _HealthCheckEvent_OneofSizer(msg proto.Message) (n int) { n += 1 // tag and wire n += proto.SizeVarint(uint64(s)) n += s + case *HealthCheckEvent_DegradedHealthyHost: + s := proto.Size(x.DegradedHealthyHost) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s + case *HealthCheckEvent_NoLongerDegradedHost: + s := proto.Size(x.NoLongerDegradedHost) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s case nil: default: panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) @@ -317,7 +379,7 @@ func (m *HealthCheckEjectUnhealthy) Reset() { *m = HealthCheckEjectUnhea func (m *HealthCheckEjectUnhealthy) String() string { return proto.CompactTextString(m) } func (*HealthCheckEjectUnhealthy) ProtoMessage() {} func (*HealthCheckEjectUnhealthy) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_event_d539efed59161f4a, []int{1} + return fileDescriptor_health_check_event_84ee3363a7e1b25a, []int{1} } func (m *HealthCheckEjectUnhealthy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -367,7 +429,7 @@ func (m *HealthCheckAddHealthy) Reset() { *m = HealthCheckAddHealthy{} } func (m *HealthCheckAddHealthy) String() string { return proto.CompactTextString(m) } func (*HealthCheckAddHealthy) ProtoMessage() {} func (*HealthCheckAddHealthy) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_event_d539efed59161f4a, []int{2} + return fileDescriptor_health_check_event_84ee3363a7e1b25a, []int{2} } func (m *HealthCheckAddHealthy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -417,7 +479,7 @@ func (m *HealthCheckFailure) Reset() { *m = HealthCheckFailure{} } func (m *HealthCheckFailure) String() string { return proto.CompactTextString(m) } func (*HealthCheckFailure) ProtoMessage() {} func (*HealthCheckFailure) Descriptor() ([]byte, []int) { - return fileDescriptor_health_check_event_d539efed59161f4a, []int{3} + return fileDescriptor_health_check_event_84ee3363a7e1b25a, []int{3} } func (m *HealthCheckFailure) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -460,11 +522,91 @@ func (m *HealthCheckFailure) GetFirstCheck() bool { return false } +type DegradedHealthyHost struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DegradedHealthyHost) Reset() { *m = DegradedHealthyHost{} } +func (m *DegradedHealthyHost) String() string { return proto.CompactTextString(m) } +func (*DegradedHealthyHost) ProtoMessage() {} +func (*DegradedHealthyHost) Descriptor() ([]byte, []int) { + return fileDescriptor_health_check_event_84ee3363a7e1b25a, []int{4} +} +func (m *DegradedHealthyHost) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DegradedHealthyHost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DegradedHealthyHost.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *DegradedHealthyHost) XXX_Merge(src proto.Message) { + xxx_messageInfo_DegradedHealthyHost.Merge(dst, src) +} +func (m *DegradedHealthyHost) XXX_Size() int { + return m.Size() +} +func (m *DegradedHealthyHost) XXX_DiscardUnknown() { + xxx_messageInfo_DegradedHealthyHost.DiscardUnknown(m) +} + +var xxx_messageInfo_DegradedHealthyHost proto.InternalMessageInfo + +type NoLongerDegradedHost struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NoLongerDegradedHost) Reset() { *m = NoLongerDegradedHost{} } +func (m *NoLongerDegradedHost) String() string { return proto.CompactTextString(m) } +func (*NoLongerDegradedHost) ProtoMessage() {} +func (*NoLongerDegradedHost) Descriptor() ([]byte, []int) { + return fileDescriptor_health_check_event_84ee3363a7e1b25a, []int{5} +} +func (m *NoLongerDegradedHost) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NoLongerDegradedHost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_NoLongerDegradedHost.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *NoLongerDegradedHost) XXX_Merge(src proto.Message) { + xxx_messageInfo_NoLongerDegradedHost.Merge(dst, src) +} +func (m *NoLongerDegradedHost) XXX_Size() int { + return m.Size() +} +func (m *NoLongerDegradedHost) XXX_DiscardUnknown() { + xxx_messageInfo_NoLongerDegradedHost.DiscardUnknown(m) +} + +var xxx_messageInfo_NoLongerDegradedHost proto.InternalMessageInfo + func init() { proto.RegisterType((*HealthCheckEvent)(nil), "envoy.data.core.v2alpha.HealthCheckEvent") proto.RegisterType((*HealthCheckEjectUnhealthy)(nil), "envoy.data.core.v2alpha.HealthCheckEjectUnhealthy") proto.RegisterType((*HealthCheckAddHealthy)(nil), "envoy.data.core.v2alpha.HealthCheckAddHealthy") proto.RegisterType((*HealthCheckFailure)(nil), "envoy.data.core.v2alpha.HealthCheckFailure") + proto.RegisterType((*DegradedHealthyHost)(nil), "envoy.data.core.v2alpha.DegradedHealthyHost") + proto.RegisterType((*NoLongerDegradedHost)(nil), "envoy.data.core.v2alpha.NoLongerDegradedHost") proto.RegisterEnum("envoy.data.core.v2alpha.HealthCheckFailureType", HealthCheckFailureType_name, HealthCheckFailureType_value) proto.RegisterEnum("envoy.data.core.v2alpha.HealthCheckerType", HealthCheckerType_name, HealthCheckerType_value) } @@ -589,6 +731,54 @@ func (this *HealthCheckEvent_HealthCheckFailureEvent) Equal(that interface{}) bo } return true } +func (this *HealthCheckEvent_DegradedHealthyHost) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*HealthCheckEvent_DegradedHealthyHost) + if !ok { + that2, ok := that.(HealthCheckEvent_DegradedHealthyHost) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.DegradedHealthyHost.Equal(that1.DegradedHealthyHost) { + return false + } + return true +} +func (this *HealthCheckEvent_NoLongerDegradedHost) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*HealthCheckEvent_NoLongerDegradedHost) + if !ok { + that2, ok := that.(HealthCheckEvent_NoLongerDegradedHost) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.NoLongerDegradedHost.Equal(that1.NoLongerDegradedHost) { + return false + } + return true +} func (this *HealthCheckEjectUnhealthy) Equal(that interface{}) bool { if that == nil { return this == nil @@ -673,6 +863,54 @@ func (this *HealthCheckFailure) Equal(that interface{}) bool { } return true } +func (this *DegradedHealthyHost) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*DegradedHealthyHost) + if !ok { + that2, ok := that.(DegradedHealthyHost) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *NoLongerDegradedHost) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*NoLongerDegradedHost) + if !ok { + that2, ok := that.(NoLongerDegradedHost) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} func (m *HealthCheckEvent) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -774,6 +1012,34 @@ func (m *HealthCheckEvent_HealthCheckFailureEvent) MarshalTo(dAtA []byte) (int, } return i, nil } +func (m *HealthCheckEvent_DegradedHealthyHost) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.DegradedHealthyHost != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintHealthCheckEvent(dAtA, i, uint64(m.DegradedHealthyHost.Size())) + n7, err := m.DegradedHealthyHost.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n7 + } + return i, nil +} +func (m *HealthCheckEvent_NoLongerDegradedHost) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.NoLongerDegradedHost != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintHealthCheckEvent(dAtA, i, uint64(m.NoLongerDegradedHost.Size())) + n8, err := m.NoLongerDegradedHost.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n8 + } + return i, nil +} func (m *HealthCheckEjectUnhealthy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -867,6 +1133,48 @@ func (m *HealthCheckFailure) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *DegradedHealthyHost) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DegradedHealthyHost) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *NoLongerDegradedHost) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NoLongerDegradedHost) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + func encodeVarintHealthCheckEvent(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) @@ -942,6 +1250,30 @@ func (m *HealthCheckEvent_HealthCheckFailureEvent) Size() (n int) { } return n } +func (m *HealthCheckEvent_DegradedHealthyHost) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.DegradedHealthyHost != nil { + l = m.DegradedHealthyHost.Size() + n += 1 + l + sovHealthCheckEvent(uint64(l)) + } + return n +} +func (m *HealthCheckEvent_NoLongerDegradedHost) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NoLongerDegradedHost != nil { + l = m.NoLongerDegradedHost.Size() + n += 1 + l + sovHealthCheckEvent(uint64(l)) + } + return n +} func (m *HealthCheckEjectUnhealthy) Size() (n int) { if m == nil { return 0 @@ -990,6 +1322,30 @@ func (m *HealthCheckFailure) Size() (n int) { return n } +func (m *DegradedHealthyHost) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *NoLongerDegradedHost) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func sovHealthCheckEvent(x uint64) (n int) { for { n++ @@ -1242,6 +1598,70 @@ func (m *HealthCheckEvent) Unmarshal(dAtA []byte) error { } m.Event = &HealthCheckEvent_HealthCheckFailureEvent{v} iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DegradedHealthyHost", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHealthCheckEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHealthCheckEvent + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &DegradedHealthyHost{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Event = &HealthCheckEvent_DegradedHealthyHost{v} + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NoLongerDegradedHost", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHealthCheckEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHealthCheckEvent + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &NoLongerDegradedHost{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Event = &HealthCheckEvent_NoLongerDegradedHost{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipHealthCheckEvent(dAtA[iNdEx:]) @@ -1495,6 +1915,108 @@ func (m *HealthCheckFailure) Unmarshal(dAtA []byte) error { } return nil } +func (m *DegradedHealthyHost) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHealthCheckEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DegradedHealthyHost: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DegradedHealthyHost: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipHealthCheckEvent(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthHealthCheckEvent + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NoLongerDegradedHost) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHealthCheckEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NoLongerDegradedHost: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NoLongerDegradedHost: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipHealthCheckEvent(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthHealthCheckEvent + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipHealthCheckEvent(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 @@ -1601,47 +2123,52 @@ var ( ) func init() { - proto.RegisterFile("envoy/data/core/v2alpha/health_check_event.proto", fileDescriptor_health_check_event_d539efed59161f4a) -} - -var fileDescriptor_health_check_event_d539efed59161f4a = []byte{ - // 593 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x53, 0x4d, 0x6e, 0xd3, 0x40, - 0x14, 0xce, 0x38, 0x4e, 0xdb, 0xbc, 0x54, 0xc5, 0x9d, 0x52, 0x1a, 0xb2, 0x48, 0xa2, 0xac, 0xaa, - 0x82, 0x6c, 0x64, 0x36, 0x48, 0x48, 0x95, 0x92, 0x10, 0x48, 0x85, 0x54, 0x22, 0xd7, 0xc0, 0x06, - 0x61, 0x4d, 0xe3, 0x49, 0xec, 0xe2, 0xc4, 0x96, 0x3d, 0xb1, 0x14, 0xb1, 0xe3, 0x04, 0x6c, 0xb8, - 0x03, 0x47, 0x40, 0xac, 0xba, 0x64, 0xc9, 0x01, 0x90, 0x40, 0xd9, 0xf5, 0x16, 0xc8, 0x33, 0x4e, - 0x9a, 0x9f, 0x56, 0x0a, 0x0b, 0x76, 0xef, 0xef, 0xfb, 0xf1, 0x9b, 0x67, 0x78, 0x44, 0x87, 0xb1, - 0x3f, 0xd6, 0x6c, 0xc2, 0x88, 0xd6, 0xf5, 0x43, 0xaa, 0xc5, 0x3a, 0xf1, 0x02, 0x87, 0x68, 0x0e, - 0x25, 0x1e, 0x73, 0xac, 0xae, 0x43, 0xbb, 0x1f, 0x2c, 0x1a, 0xd3, 0x21, 0x53, 0x83, 0xd0, 0x67, - 0x3e, 0x3e, 0xe0, 0x08, 0x35, 0x41, 0xa8, 0x09, 0x42, 0x4d, 0x11, 0xa5, 0x8a, 0xa0, 0x22, 0x81, - 0xab, 0xc5, 0xba, 0x20, 0x23, 0xb6, 0x1d, 0xd2, 0x28, 0x12, 0xc8, 0x52, 0xa5, 0xef, 0xfb, 0x7d, - 0x8f, 0x6a, 0x3c, 0x3b, 0x1f, 0xf5, 0x34, 0xe6, 0x0e, 0x68, 0xc4, 0xc8, 0x20, 0x48, 0x07, 0x0e, - 0x62, 0xe2, 0xb9, 0x36, 0x61, 0x54, 0x9b, 0x06, 0x69, 0xe3, 0x6e, 0xdf, 0xef, 0xfb, 0x3c, 0xd4, - 0x92, 0x48, 0x54, 0x6b, 0xbf, 0x64, 0x50, 0xda, 0xdc, 0x66, 0x33, 0x71, 0xd9, 0x4a, 0x4c, 0xe2, - 0x1e, 0xec, 0xcd, 0x5b, 0xa7, 0xa1, 0xc5, 0xc6, 0x01, 0x2d, 0xa2, 0x2a, 0x3a, 0xdc, 0xd1, 0x8f, - 0xd4, 0x5b, 0xcc, 0xab, 0x73, 0x3c, 0x34, 0x34, 0xc7, 0x01, 0x6d, 0xc0, 0xf7, 0xab, 0xcb, 0x6c, - 0xee, 0x13, 0x92, 0x14, 0x64, 0xec, 0x3a, 0xcb, 0x6d, 0xac, 0x82, 0xec, 0xf8, 0x11, 0x2b, 0x4a, - 0x55, 0x74, 0x58, 0xd0, 0x4b, 0x29, 0x31, 0x09, 0x5c, 0x35, 0xd6, 0x05, 0x75, 0x5d, 0x7c, 0xbc, - 0xc1, 0xe7, 0xf0, 0x43, 0xd8, 0xee, 0x7a, 0xa3, 0x88, 0xd1, 0xd0, 0x1a, 0x92, 0x01, 0x2d, 0x66, - 0xab, 0xe8, 0x30, 0xdf, 0xc8, 0x27, 0x22, 0x72, 0x28, 0x55, 0x91, 0x51, 0x48, 0xdb, 0xa7, 0x64, - 0x40, 0xb1, 0x03, 0xfb, 0xf4, 0x82, 0x76, 0x99, 0x35, 0x1a, 0x0a, 0xe9, 0xb1, 0x78, 0x83, 0xa2, - 0xcc, 0xe5, 0xf4, 0x75, 0xbe, 0xa3, 0x95, 0x10, 0xbc, 0x9e, 0xe2, 0xdb, 0x19, 0x63, 0x8f, 0x2e, - 0x54, 0xc4, 0xbe, 0xde, 0xc1, 0x2e, 0xb1, 0x6d, 0x6b, 0x51, 0x25, 0xc7, 0x55, 0xd4, 0x75, 0x54, - 0xea, 0xb6, 0xdd, 0x9e, 0x29, 0xdc, 0x21, 0xb3, 0x4c, 0xb0, 0x1f, 0x43, 0x7e, 0xf6, 0xc8, 0xc5, - 0x8d, 0x74, 0x55, 0xe2, 0x0c, 0xd4, 0xe9, 0x19, 0xa8, 0xe6, 0x74, 0xa2, 0x21, 0x7f, 0xfe, 0x5d, - 0x41, 0xc6, 0x35, 0x04, 0x5f, 0x40, 0x69, 0xe1, 0x10, 0x7b, 0xc4, 0xf5, 0x46, 0x21, 0x4d, 0x6d, - 0x6e, 0x72, 0xc2, 0x07, 0xeb, 0xd8, 0x7c, 0x2e, 0x80, 0xed, 0x8c, 0x71, 0xe0, 0xac, 0x54, 0xb9, - 0xd7, 0xc6, 0x0e, 0xe4, 0x38, 0x2d, 0xce, 0x7d, 0xbb, 0xba, 0xcc, 0xa2, 0xda, 0x47, 0xb8, 0x7f, - 0xeb, 0x36, 0xf1, 0x7b, 0xd8, 0x9e, 0x7a, 0x99, 0xbb, 0x2f, 0xed, 0x1f, 0xac, 0xac, 0x1c, 0x59, - 0xa1, 0x77, 0xdd, 0xa8, 0x3d, 0x81, 0xfd, 0x1b, 0x97, 0x8c, 0x2b, 0x50, 0xe8, 0xb9, 0x61, 0xc4, - 0xc4, 0x42, 0xb8, 0xee, 0x96, 0x01, 0xbc, 0xc4, 0x47, 0x6b, 0x5f, 0x10, 0xe0, 0x55, 0xb5, 0xff, - 0x6d, 0x78, 0xd9, 0x97, 0xb4, 0xec, 0xeb, 0xe8, 0x18, 0xee, 0xdd, 0xcc, 0x89, 0x01, 0x36, 0xea, - 0x4d, 0xf3, 0xe4, 0x4d, 0x4b, 0xc9, 0xe0, 0x02, 0x6c, 0x76, 0xea, 0x67, 0x67, 0x49, 0x82, 0x92, - 0xe4, 0xb4, 0x65, 0xbe, 0x7d, 0x65, 0xbc, 0x54, 0xa4, 0xa3, 0xa7, 0xb0, 0xbb, 0xf2, 0x93, 0xe2, - 0x2d, 0x90, 0xdb, 0xa6, 0xd9, 0x51, 0x32, 0x78, 0x13, 0xb2, 0x66, 0xb3, 0xa3, 0xa0, 0xa4, 0xf4, - 0xc2, 0xe8, 0x34, 0x15, 0x09, 0xe7, 0x21, 0x67, 0xb4, 0x9e, 0x9d, 0x9c, 0x29, 0xd9, 0x86, 0xf2, - 0x75, 0x52, 0x46, 0x3f, 0x26, 0x65, 0xf4, 0x73, 0x52, 0x46, 0x7f, 0x26, 0x65, 0x74, 0xbe, 0xc1, - 0xcf, 0xef, 0xf1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x91, 0x15, 0x21, 0x23, 0x01, 0x05, 0x00, - 0x00, + proto.RegisterFile("envoy/data/core/v2alpha/health_check_event.proto", fileDescriptor_health_check_event_84ee3363a7e1b25a) +} + +var fileDescriptor_health_check_event_84ee3363a7e1b25a = []byte{ + // 684 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x54, 0xcb, 0x6e, 0xd3, 0x4c, + 0x14, 0xce, 0xe4, 0xd6, 0xe6, 0xa4, 0xea, 0xef, 0x4e, 0x9b, 0x26, 0x7f, 0x16, 0x49, 0x14, 0x09, + 0xa9, 0x2a, 0xc5, 0x46, 0x61, 0x03, 0x42, 0xaa, 0x94, 0xa4, 0x81, 0x54, 0xa0, 0x12, 0xb9, 0x06, + 0x36, 0x08, 0x6b, 0x1a, 0x4f, 0x62, 0x17, 0xc7, 0x63, 0xd9, 0x4e, 0x44, 0xc4, 0x8e, 0x27, 0x60, + 0xc3, 0x3b, 0xf4, 0x11, 0x10, 0xab, 0x2e, 0x59, 0xf2, 0x06, 0xa0, 0xec, 0xfa, 0x16, 0xc8, 0x33, + 0x4e, 0xd2, 0x36, 0x89, 0x54, 0x16, 0xec, 0x66, 0xce, 0xcc, 0x77, 0xf1, 0x77, 0xce, 0x18, 0x1e, + 0x52, 0x67, 0xc4, 0xc6, 0x8a, 0x41, 0x02, 0xa2, 0x74, 0x99, 0x47, 0x95, 0x51, 0x8d, 0xd8, 0xae, + 0x49, 0x14, 0x93, 0x12, 0x3b, 0x30, 0xf5, 0xae, 0x49, 0xbb, 0x1f, 0x74, 0x3a, 0xa2, 0x4e, 0x20, + 0xbb, 0x1e, 0x0b, 0x18, 0xce, 0x73, 0x84, 0x1c, 0x22, 0xe4, 0x10, 0x21, 0x47, 0x88, 0x62, 0x59, + 0x50, 0x11, 0xd7, 0x52, 0x46, 0x35, 0x41, 0x46, 0x0c, 0xc3, 0xa3, 0xbe, 0x2f, 0x90, 0xc5, 0x72, + 0x9f, 0xb1, 0xbe, 0x4d, 0x15, 0xbe, 0x3b, 0x1b, 0xf6, 0x94, 0xc0, 0x1a, 0x50, 0x3f, 0x20, 0x03, + 0x37, 0xba, 0x90, 0x1f, 0x11, 0xdb, 0x32, 0x48, 0x40, 0x95, 0xe9, 0x22, 0x3a, 0xd8, 0xe9, 0xb3, + 0x3e, 0xe3, 0x4b, 0x25, 0x5c, 0x89, 0x6a, 0xf5, 0x22, 0x0d, 0x52, 0x9b, 0xdb, 0x6c, 0x86, 0x2e, + 0x5b, 0xa1, 0x49, 0xdc, 0x83, 0xed, 0xeb, 0xd6, 0xa9, 0xa7, 0x07, 0x63, 0x97, 0x16, 0x50, 0x05, + 0xed, 0x6d, 0xd6, 0xf6, 0xe5, 0x15, 0xe6, 0xe5, 0x6b, 0x3c, 0xd4, 0xd3, 0xc6, 0x2e, 0x6d, 0xc0, + 0xf7, 0xab, 0xcb, 0x44, 0xea, 0x33, 0x8a, 0x4b, 0x48, 0xdd, 0x32, 0x6f, 0x1f, 0x63, 0x19, 0x92, + 0x26, 0xf3, 0x83, 0x42, 0xbc, 0x82, 0xf6, 0xb2, 0xb5, 0x62, 0x44, 0x4c, 0x5c, 0x4b, 0x1e, 0xd5, + 0x04, 0x75, 0x5d, 0x7c, 0xbc, 0xca, 0xef, 0xe1, 0x03, 0xd8, 0xe8, 0xda, 0x43, 0x3f, 0xa0, 0x9e, + 0xee, 0x90, 0x01, 0x2d, 0x24, 0x2a, 0x68, 0x2f, 0xd3, 0xc8, 0x84, 0x22, 0x49, 0x2f, 0x5e, 0x41, + 0x6a, 0x36, 0x3a, 0x3e, 0x21, 0x03, 0x8a, 0x4d, 0xc8, 0xd1, 0x73, 0xda, 0x0d, 0xf4, 0xa1, 0x23, + 0xa4, 0xc7, 0xa2, 0x07, 0x85, 0x24, 0x97, 0xab, 0xdd, 0xe5, 0x3b, 0x5a, 0x21, 0xc1, 0xeb, 0x29, + 0xbe, 0x1d, 0x53, 0xb7, 0xe9, 0x8d, 0x8a, 0xc8, 0xeb, 0x1d, 0x6c, 0x11, 0xc3, 0xd0, 0x6f, 0xaa, + 0xa4, 0xb8, 0x8a, 0x7c, 0x17, 0x95, 0xba, 0x61, 0xb4, 0x67, 0x0a, 0xff, 0x91, 0xd9, 0x4e, 0xb0, + 0x1f, 0x42, 0x66, 0xd6, 0xe4, 0x42, 0x3a, 0x8a, 0x4a, 0x8c, 0x81, 0x3c, 0x1d, 0x03, 0x59, 0x9b, + 0xde, 0x68, 0x24, 0xbf, 0xfc, 0x2a, 0x23, 0x75, 0x0e, 0xc1, 0xe7, 0x50, 0xbc, 0x31, 0x88, 0x3d, + 0x62, 0xd9, 0x43, 0x8f, 0x46, 0x36, 0xd7, 0x38, 0xe1, 0xfd, 0xbb, 0xd8, 0x7c, 0x26, 0x80, 0xed, + 0x98, 0x9a, 0x37, 0x17, 0xaa, 0xc2, 0xeb, 0x19, 0xe4, 0x0c, 0xda, 0xf7, 0x88, 0x41, 0xe7, 0x71, + 0xf0, 0x16, 0xaf, 0x73, 0x99, 0x83, 0x95, 0x32, 0x47, 0x11, 0x6a, 0x9a, 0x03, 0xf3, 0x83, 0x30, + 0x6d, 0x63, 0xb1, 0x8c, 0x7b, 0x90, 0x77, 0x98, 0x6e, 0x33, 0xa7, 0x4f, 0x3d, 0x7d, 0xae, 0x16, + 0xaa, 0x64, 0xb8, 0xca, 0x83, 0x95, 0x2a, 0x27, 0xec, 0x25, 0x87, 0xcd, 0xd4, 0x84, 0xcc, 0x8e, + 0xb3, 0xa4, 0xde, 0xd8, 0x84, 0x14, 0x8f, 0x08, 0xa7, 0xbe, 0x5d, 0x5d, 0x26, 0x50, 0xf5, 0x13, + 0xfc, 0xbf, 0x72, 0x32, 0xf0, 0x7b, 0xd8, 0x98, 0xe6, 0x7a, 0xed, 0xad, 0x28, 0x7f, 0x11, 0xeb, + 0xc2, 0x83, 0xc9, 0xf6, 0xe6, 0x07, 0xd5, 0xc7, 0x90, 0x5b, 0x3a, 0x30, 0xb8, 0x0c, 0xd9, 0x9e, + 0xe5, 0xf9, 0x81, 0x68, 0x2e, 0xd7, 0x5d, 0x57, 0x81, 0x97, 0xf8, 0xd5, 0xea, 0x57, 0x04, 0x78, + 0x51, 0xed, 0x5f, 0x1b, 0xbe, 0xed, 0x2b, 0xbe, 0xe0, 0x2b, 0x07, 0xdb, 0x4b, 0x9a, 0x5e, 0xdd, + 0x85, 0x9d, 0x65, 0x5d, 0xda, 0x3f, 0x84, 0xdd, 0xe5, 0x16, 0x30, 0x40, 0xba, 0xde, 0xd4, 0x8e, + 0xdf, 0xb4, 0xa4, 0x18, 0xce, 0xc2, 0x5a, 0xa7, 0x7e, 0x7a, 0x1a, 0x6e, 0x50, 0xb8, 0x39, 0x69, + 0x69, 0x6f, 0x5f, 0xa9, 0x2f, 0xa4, 0xf8, 0xfe, 0x53, 0xd8, 0x5a, 0xf8, 0x3f, 0xe1, 0x75, 0x48, + 0xb6, 0x35, 0xad, 0x23, 0xc5, 0xf0, 0x1a, 0x24, 0xb4, 0x66, 0x47, 0x42, 0x61, 0xe9, 0xb9, 0xda, + 0x69, 0x4a, 0x71, 0x9c, 0x81, 0x94, 0xda, 0x3a, 0x3a, 0x3e, 0x95, 0x12, 0x8d, 0x27, 0x17, 0x93, + 0x12, 0xfa, 0x31, 0x29, 0xa1, 0x9f, 0x93, 0x12, 0xfa, 0x3d, 0x29, 0x21, 0xb8, 0x67, 0x31, 0x11, + 0x95, 0xeb, 0xb1, 0x8f, 0xe3, 0x55, 0xa9, 0x75, 0xd0, 0x59, 0x9a, 0x3f, 0xd1, 0x47, 0x7f, 0x02, + 0x00, 0x00, 0xff, 0xff, 0x97, 0x2b, 0x47, 0x30, 0x25, 0x06, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/data/core/v2alpha/health_check_event.pb.validate.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/data/core/v2alpha/health_check_event.pb.validate.go index a50d99b66bae..1aa5296895fe 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/data/core/v2alpha/health_check_event.pb.validate.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/data/core/v2alpha/health_check_event.pb.validate.go @@ -114,6 +114,30 @@ func (m *HealthCheckEvent) Validate() error { } } + case *HealthCheckEvent_DegradedHealthyHost: + + if v, ok := interface{}(m.GetDegradedHealthyHost()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckEventValidationError{ + Field: "DegradedHealthyHost", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + + case *HealthCheckEvent_NoLongerDegradedHost: + + if v, ok := interface{}(m.GetNoLongerDegradedHost()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckEventValidationError{ + Field: "NoLongerDegradedHost", + Reason: "embedded message failed validation", + Cause: err, + } + } + } + default: return HealthCheckEventValidationError{ Field: "Event", @@ -299,3 +323,87 @@ func (e HealthCheckFailureValidationError) Error() string { } var _ error = HealthCheckFailureValidationError{} + +// Validate checks the field values on DegradedHealthyHost with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *DegradedHealthyHost) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// DegradedHealthyHostValidationError is the validation error returned by +// DegradedHealthyHost.Validate if the designated constraints aren't met. +type DegradedHealthyHostValidationError struct { + Field string + Reason string + Cause error + Key bool +} + +// Error satisfies the builtin error interface +func (e DegradedHealthyHostValidationError) Error() string { + cause := "" + if e.Cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.Cause) + } + + key := "" + if e.Key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDegradedHealthyHost.%s: %s%s", + key, + e.Field, + e.Reason, + cause) +} + +var _ error = DegradedHealthyHostValidationError{} + +// Validate checks the field values on NoLongerDegradedHost with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *NoLongerDegradedHost) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// NoLongerDegradedHostValidationError is the validation error returned by +// NoLongerDegradedHost.Validate if the designated constraints aren't met. +type NoLongerDegradedHostValidationError struct { + Field string + Reason string + Cause error + Key bool +} + +// Error satisfies the builtin error interface +func (e NoLongerDegradedHostValidationError) Error() string { + cause := "" + if e.Cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.Cause) + } + + key := "" + if e.Key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNoLongerDegradedHost.%s: %s%s", + key, + e.Field, + e.Reason, + cause) +} + +var _ error = NoLongerDegradedHostValidationError{} diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/data/tap/v2alpha/capture.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/data/tap/v2alpha/capture.pb.go index fabeda4c11e6..a71ea74d0364 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/data/tap/v2alpha/capture.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/data/tap/v2alpha/capture.pb.go @@ -40,7 +40,7 @@ func (m *Connection) Reset() { *m = Connection{} } func (m *Connection) String() string { return proto.CompactTextString(m) } func (*Connection) ProtoMessage() {} func (*Connection) Descriptor() ([]byte, []int) { - return fileDescriptor_capture_581d45ac99e3ae35, []int{0} + return fileDescriptor_capture_1046b3775cd1326a, []int{0} } func (m *Connection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -109,7 +109,7 @@ func (m *Event) Reset() { *m = Event{} } func (m *Event) String() string { return proto.CompactTextString(m) } func (*Event) ProtoMessage() {} func (*Event) Descriptor() ([]byte, []int) { - return fileDescriptor_capture_581d45ac99e3ae35, []int{1} + return fileDescriptor_capture_1046b3775cd1326a, []int{1} } func (m *Event) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -269,7 +269,7 @@ func (m *Event_Read) Reset() { *m = Event_Read{} } func (m *Event_Read) String() string { return proto.CompactTextString(m) } func (*Event_Read) ProtoMessage() {} func (*Event_Read) Descriptor() ([]byte, []int) { - return fileDescriptor_capture_581d45ac99e3ae35, []int{1, 0} + return fileDescriptor_capture_1046b3775cd1326a, []int{1, 0} } func (m *Event_Read) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -320,7 +320,7 @@ func (m *Event_Write) Reset() { *m = Event_Write{} } func (m *Event_Write) String() string { return proto.CompactTextString(m) } func (*Event_Write) ProtoMessage() {} func (*Event_Write) Descriptor() ([]byte, []int) { - return fileDescriptor_capture_581d45ac99e3ae35, []int{1, 1} + return fileDescriptor_capture_1046b3775cd1326a, []int{1, 1} } func (m *Event_Write) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -380,7 +380,7 @@ func (m *Trace) Reset() { *m = Trace{} } func (m *Trace) String() string { return proto.CompactTextString(m) } func (*Trace) ProtoMessage() {} func (*Trace) Descriptor() ([]byte, []int) { - return fileDescriptor_capture_581d45ac99e3ae35, []int{2} + return fileDescriptor_capture_1046b3775cd1326a, []int{2} } func (m *Trace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1483,35 +1483,36 @@ var ( ) func init() { - proto.RegisterFile("envoy/data/tap/v2alpha/capture.proto", fileDescriptor_capture_581d45ac99e3ae35) + proto.RegisterFile("envoy/data/tap/v2alpha/capture.proto", fileDescriptor_capture_1046b3775cd1326a) } -var fileDescriptor_capture_581d45ac99e3ae35 = []byte{ - // 413 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xcf, 0x6a, 0x14, 0x41, - 0x10, 0xc6, 0xd3, 0x93, 0xdd, 0x60, 0x2a, 0xc9, 0x12, 0xfa, 0x20, 0x61, 0x20, 0x9b, 0xb0, 0x7a, - 0xd8, 0x53, 0x37, 0x8c, 0x08, 0x41, 0x0f, 0x92, 0x15, 0x21, 0xe7, 0x36, 0x20, 0x78, 0x59, 0x2a, - 0xd3, 0x65, 0x1c, 0x98, 0x9d, 0x6e, 0x7a, 0x3a, 0x23, 0x5e, 0x7d, 0x12, 0xf1, 0x69, 0x3c, 0xfa, - 0x08, 0xb2, 0x4f, 0x22, 0xfd, 0x27, 0x1b, 0x0f, 0x71, 0xbd, 0x4d, 0x4d, 0xff, 0xbe, 0xaf, 0xbe, - 0xaa, 0x82, 0xe7, 0xd4, 0x0d, 0xe6, 0xab, 0xd4, 0xe8, 0x51, 0x7a, 0xb4, 0x72, 0xa8, 0xb0, 0xb5, - 0x9f, 0x51, 0xd6, 0x68, 0xfd, 0x9d, 0x23, 0x61, 0x9d, 0xf1, 0x86, 0x3f, 0x8d, 0x94, 0x08, 0x94, - 0xf0, 0x68, 0x45, 0xa6, 0xca, 0xb3, 0xa4, 0x46, 0xdb, 0xc8, 0xa1, 0x92, 0xb5, 0x71, 0x24, 0x51, - 0x6b, 0x47, 0x7d, 0x9f, 0x84, 0xe5, 0xd9, 0xad, 0x31, 0xb7, 0x2d, 0xc9, 0x58, 0xdd, 0xdc, 0x7d, - 0x92, 0xbe, 0x59, 0x51, 0xef, 0x71, 0x65, 0x13, 0x30, 0xfb, 0xce, 0x00, 0xde, 0x9a, 0xae, 0xa3, - 0xda, 0x37, 0xa6, 0xe3, 0x13, 0x28, 0x1a, 0x7d, 0xc2, 0xce, 0xd9, 0x7c, 0xa4, 0x8a, 0x46, 0xf3, - 0x37, 0x70, 0xd4, 0x9a, 0x1a, 0xdb, 0x65, 0xb6, 0x3d, 0x29, 0xce, 0xd9, 0xfc, 0xa0, 0x2a, 0x45, - 0x0a, 0x84, 0xb6, 0x11, 0x43, 0x25, 0x42, 0x63, 0x71, 0x99, 0x08, 0x75, 0x18, 0x05, 0xb9, 0xe2, - 0x97, 0x30, 0x71, 0xb4, 0x32, 0x9e, 0x36, 0x0e, 0xbb, 0xff, 0x75, 0x38, 0x4a, 0x8a, 0x5c, 0xce, - 0x7e, 0x14, 0x30, 0x7e, 0x37, 0x50, 0xe7, 0xf9, 0x05, 0xec, 0x6f, 0xf2, 0xc7, 0x90, 0xc1, 0x27, - 0x4d, 0x28, 0xee, 0x27, 0x14, 0xd7, 0xf7, 0x84, 0x7a, 0x80, 0xf9, 0x05, 0x8c, 0x1c, 0xa1, 0xce, - 0xf1, 0x67, 0xe2, 0xf1, 0x7d, 0x8a, 0xd8, 0x46, 0x28, 0x42, 0x7d, 0xb5, 0xa3, 0xa2, 0x82, 0xbf, - 0x86, 0xf1, 0x17, 0xd7, 0x78, 0xca, 0xb9, 0x9f, 0x6d, 0x97, 0x7e, 0x08, 0xe8, 0xd5, 0x8e, 0x4a, - 0x9a, 0xb2, 0x84, 0x51, 0x30, 0xe3, 0x1c, 0x46, 0x41, 0x10, 0x33, 0x1f, 0xaa, 0xf8, 0x5d, 0xbe, - 0x82, 0x71, 0xa4, 0x1f, 0x7b, 0xe4, 0xa7, 0x00, 0xd4, 0xe9, 0x65, 0xef, 0x1d, 0xe1, 0x2a, 0xa6, - 0x7e, 0xa2, 0xf6, 0xa9, 0xd3, 0xef, 0xe3, 0x8f, 0xc5, 0x31, 0x4c, 0x28, 0xf4, 0x5b, 0xf6, 0xd4, - 0x52, 0xed, 0x8d, 0x9b, 0x7d, 0x63, 0x30, 0xbe, 0x76, 0x58, 0x13, 0x5f, 0x00, 0xd4, 0x9b, 0x83, - 0xe6, 0x2d, 0xfd, 0x73, 0xe0, 0x87, 0xd3, 0xab, 0xbf, 0x54, 0xfc, 0x25, 0xec, 0x45, 0xff, 0x70, - 0xef, 0xdd, 0xf9, 0x41, 0x75, 0xba, 0x75, 0x6a, 0x95, 0xe1, 0xc5, 0xf1, 0xcf, 0xf5, 0x94, 0xfd, - 0x5a, 0x4f, 0xd9, 0xef, 0xf5, 0x94, 0x7d, 0x2c, 0x86, 0xea, 0x66, 0x2f, 0x9e, 0xe5, 0xc5, 0x9f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x15, 0x47, 0x26, 0xfe, 0xe7, 0x02, 0x00, 0x00, +var fileDescriptor_capture_1046b3775cd1326a = []byte{ + // 426 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xc1, 0x6a, 0x14, 0x41, + 0x10, 0x86, 0xd3, 0x93, 0xdd, 0x60, 0x2a, 0xc9, 0x22, 0x7d, 0x90, 0x30, 0x90, 0x4d, 0x58, 0x73, + 0xd8, 0x53, 0x37, 0x8c, 0x08, 0x8b, 0x1e, 0x24, 0x2b, 0x42, 0x8e, 0xd2, 0x06, 0x04, 0x2f, 0x4b, + 0x65, 0xba, 0x8c, 0x03, 0x33, 0xd3, 0x4d, 0x4f, 0x67, 0x34, 0x57, 0x9f, 0x44, 0x7c, 0x1a, 0x8f, + 0x3e, 0x82, 0xec, 0x93, 0xc8, 0x74, 0x77, 0x36, 0x1e, 0x92, 0x78, 0x9b, 0x9a, 0xfe, 0xbf, 0xbf, + 0xfe, 0xaa, 0x82, 0x53, 0x6a, 0x7b, 0x73, 0x23, 0x35, 0x7a, 0x94, 0x1e, 0xad, 0xec, 0x0b, 0xac, + 0xed, 0x17, 0x94, 0x25, 0x5a, 0x7f, 0xed, 0x48, 0x58, 0x67, 0xbc, 0xe1, 0xcf, 0x82, 0x4a, 0x0c, + 0x2a, 0xe1, 0xd1, 0x8a, 0xa4, 0xca, 0x8f, 0x23, 0x8d, 0xb6, 0x92, 0x7d, 0x21, 0x4b, 0xe3, 0x48, + 0xa2, 0xd6, 0x8e, 0xba, 0x2e, 0x82, 0xf9, 0xf1, 0x95, 0x31, 0x57, 0x35, 0xc9, 0x50, 0x5d, 0x5e, + 0x7f, 0x96, 0xbe, 0x6a, 0xa8, 0xf3, 0xd8, 0xd8, 0x28, 0x98, 0xfd, 0x60, 0x00, 0x6f, 0x4d, 0xdb, + 0x52, 0xe9, 0x2b, 0xd3, 0xf2, 0x09, 0x64, 0x95, 0x3e, 0x64, 0x27, 0x6c, 0x3e, 0x52, 0x59, 0xa5, + 0xf9, 0x1b, 0x38, 0xa8, 0x4d, 0x89, 0xf5, 0x2a, 0xd9, 0x1e, 0x66, 0x27, 0x6c, 0xbe, 0x57, 0xe4, + 0x22, 0x06, 0x42, 0x5b, 0x89, 0xbe, 0x10, 0x43, 0x63, 0x71, 0x16, 0x15, 0x6a, 0x3f, 0x00, 0xa9, + 0xe2, 0x67, 0x30, 0x71, 0xd4, 0x18, 0x4f, 0x1b, 0x87, 0xed, 0xff, 0x3a, 0x1c, 0x44, 0x22, 0x95, + 0xb3, 0x9f, 0x19, 0x8c, 0xdf, 0xf5, 0xd4, 0x7a, 0xbe, 0x80, 0xdd, 0x4d, 0xfe, 0x10, 0x72, 0xf0, + 0x89, 0x13, 0x8a, 0xdb, 0x09, 0xc5, 0xc5, 0xad, 0x42, 0xdd, 0x89, 0xf9, 0x02, 0x46, 0x8e, 0x50, + 0xa7, 0xf8, 0x33, 0x71, 0xff, 0x3e, 0x45, 0x68, 0x23, 0x14, 0xa1, 0x3e, 0xdf, 0x52, 0x81, 0xe0, + 0xaf, 0x61, 0xfc, 0xd5, 0x55, 0x9e, 0x52, 0xee, 0xe7, 0x8f, 0xa3, 0x1f, 0x07, 0xe9, 0xf9, 0x96, + 0x8a, 0x4c, 0x9e, 0xc3, 0x68, 0x30, 0xe3, 0x1c, 0x46, 0x03, 0x10, 0x32, 0xef, 0xab, 0xf0, 0x9d, + 0xbf, 0x82, 0x71, 0x50, 0xdf, 0xf7, 0xc8, 0x8f, 0x00, 0xa8, 0xd5, 0xab, 0xce, 0x3b, 0xc2, 0x26, + 0xa4, 0x7e, 0xa2, 0x76, 0xa9, 0xd5, 0x1f, 0xc2, 0x8f, 0xe5, 0x53, 0x98, 0xd0, 0xd0, 0x6f, 0xd5, + 0x51, 0x4d, 0xa5, 0x37, 0x6e, 0xf6, 0x9d, 0xc1, 0xf8, 0xc2, 0x61, 0x49, 0x7c, 0x09, 0x50, 0x6e, + 0x0e, 0x9a, 0xb6, 0xf4, 0xe0, 0xc0, 0x77, 0xa7, 0x57, 0xff, 0x50, 0xfc, 0x25, 0xec, 0x04, 0xff, + 0xe1, 0xde, 0xdb, 0xf3, 0xbd, 0xe2, 0xe8, 0xd1, 0xa9, 0x55, 0x12, 0x2f, 0x17, 0xbf, 0xd6, 0x53, + 0xf6, 0x7b, 0x3d, 0x65, 0x7f, 0xd6, 0x53, 0x06, 0xa7, 0x95, 0x89, 0x98, 0x75, 0xe6, 0xdb, 0xcd, + 0x03, 0x0e, 0xef, 0xd9, 0xa7, 0xac, 0x2f, 0x2e, 0x77, 0xc2, 0xf9, 0x5e, 0xfc, 0x0d, 0x00, 0x00, + 0xff, 0xff, 0x9b, 0x6c, 0x40, 0x21, 0x0f, 0x03, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/accesslog/v2/als.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/accesslog/v2/als.pb.go index 3d7013c88425..be25978e4021 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/accesslog/v2/als.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/accesslog/v2/als.pb.go @@ -39,7 +39,7 @@ func (m *StreamAccessLogsResponse) Reset() { *m = StreamAccessLogsRespon func (m *StreamAccessLogsResponse) String() string { return proto.CompactTextString(m) } func (*StreamAccessLogsResponse) ProtoMessage() {} func (*StreamAccessLogsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_als_9183bfbc66256075, []int{0} + return fileDescriptor_als_c3357646706b96f2, []int{0} } func (m *StreamAccessLogsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -90,7 +90,7 @@ func (m *StreamAccessLogsMessage) Reset() { *m = StreamAccessLogsMessage func (m *StreamAccessLogsMessage) String() string { return proto.CompactTextString(m) } func (*StreamAccessLogsMessage) ProtoMessage() {} func (*StreamAccessLogsMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_als_9183bfbc66256075, []int{1} + return fileDescriptor_als_c3357646706b96f2, []int{1} } func (m *StreamAccessLogsMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -252,7 +252,7 @@ func (m *StreamAccessLogsMessage_Identifier) Reset() { *m = StreamAccess func (m *StreamAccessLogsMessage_Identifier) String() string { return proto.CompactTextString(m) } func (*StreamAccessLogsMessage_Identifier) ProtoMessage() {} func (*StreamAccessLogsMessage_Identifier) Descriptor() ([]byte, []int) { - return fileDescriptor_als_9183bfbc66256075, []int{1, 0} + return fileDescriptor_als_c3357646706b96f2, []int{1, 0} } func (m *StreamAccessLogsMessage_Identifier) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -311,7 +311,7 @@ func (m *StreamAccessLogsMessage_HTTPAccessLogEntries) String() string { } func (*StreamAccessLogsMessage_HTTPAccessLogEntries) ProtoMessage() {} func (*StreamAccessLogsMessage_HTTPAccessLogEntries) Descriptor() ([]byte, []int) { - return fileDescriptor_als_9183bfbc66256075, []int{1, 1} + return fileDescriptor_als_c3357646706b96f2, []int{1, 1} } func (m *StreamAccessLogsMessage_HTTPAccessLogEntries) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -364,7 +364,7 @@ func (m *StreamAccessLogsMessage_TCPAccessLogEntries) String() string { } func (*StreamAccessLogsMessage_TCPAccessLogEntries) ProtoMessage() {} func (*StreamAccessLogsMessage_TCPAccessLogEntries) Descriptor() ([]byte, []int) { - return fileDescriptor_als_9183bfbc66256075, []int{1, 2} + return fileDescriptor_als_c3357646706b96f2, []int{1, 2} } func (m *StreamAccessLogsMessage_TCPAccessLogEntries) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1431,39 +1431,40 @@ var ( ) func init() { - proto.RegisterFile("envoy/service/accesslog/v2/als.proto", fileDescriptor_als_9183bfbc66256075) + proto.RegisterFile("envoy/service/accesslog/v2/als.proto", fileDescriptor_als_c3357646706b96f2) } -var fileDescriptor_als_9183bfbc66256075 = []byte{ - // 470 bytes of a gzipped FileDescriptorProto +var fileDescriptor_als_c3357646706b96f2 = []byte{ + // 483 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x41, 0x8b, 0xd3, 0x40, - 0x14, 0xc7, 0xf7, 0xa5, 0x5b, 0xb7, 0x7d, 0xbd, 0x94, 0xd9, 0x85, 0x96, 0x20, 0xa5, 0x2c, 0x0b, - 0x16, 0x85, 0x04, 0xb2, 0x82, 0x37, 0xc1, 0x8a, 0x58, 0x41, 0x17, 0x49, 0x7b, 0xf2, 0xe0, 0x32, - 0x9b, 0x3c, 0x63, 0x34, 0xcd, 0x84, 0xcc, 0x10, 0xe8, 0xd1, 0x9b, 0x78, 0xf4, 0xe0, 0x37, 0xf0, + 0x14, 0xc7, 0xf7, 0xa5, 0x5b, 0xb7, 0x7d, 0xbd, 0x94, 0x71, 0xa1, 0x25, 0x48, 0x29, 0xcb, 0x82, + 0x45, 0x21, 0x81, 0xac, 0xe0, 0x4d, 0xb1, 0x22, 0x56, 0xd0, 0x65, 0x49, 0x7b, 0xf2, 0xe0, 0x32, + 0x9b, 0x3c, 0x63, 0x34, 0xcd, 0x84, 0xcc, 0x10, 0xec, 0xd1, 0x9b, 0x78, 0xf4, 0xe0, 0x37, 0xf0, 0x3b, 0x88, 0xa7, 0x3d, 0x7a, 0xf4, 0x23, 0x48, 0x6f, 0xfb, 0x2d, 0x64, 0x26, 0xd9, 0xa8, 0xdd, - 0xe6, 0x60, 0x6f, 0x61, 0xe6, 0xfd, 0x7f, 0xbf, 0x79, 0xf3, 0x32, 0x78, 0x42, 0x69, 0x21, 0x56, - 0xae, 0xa4, 0xbc, 0x88, 0x03, 0x72, 0x79, 0x10, 0x90, 0x94, 0x89, 0x88, 0xdc, 0xc2, 0x73, 0x79, - 0x22, 0x9d, 0x2c, 0x17, 0x4a, 0x30, 0xdb, 0x54, 0x39, 0x55, 0x95, 0x53, 0x57, 0x39, 0x85, 0x67, - 0xdf, 0x2e, 0x09, 0x3c, 0x8b, 0x75, 0x26, 0x10, 0x39, 0xb9, 0x17, 0x5c, 0x52, 0x99, 0xb4, 0xef, - 0x94, 0xbb, 0x21, 0x57, 0x7c, 0x03, 0x5e, 0x33, 0xca, 0xc2, 0x41, 0xc1, 0x93, 0x38, 0xe4, 0x8a, - 0xdc, 0xeb, 0x8f, 0x72, 0xe3, 0xd8, 0xc6, 0xe1, 0x5c, 0xe5, 0xc4, 0x97, 0x8f, 0x4c, 0xe2, 0xb9, - 0x88, 0xa4, 0x4f, 0x32, 0x13, 0xa9, 0xa4, 0xe3, 0xaf, 0x6d, 0x1c, 0x6c, 0x6e, 0xbe, 0x20, 0x29, - 0x79, 0x44, 0xec, 0x35, 0x62, 0x1c, 0x52, 0xaa, 0xe2, 0x37, 0x31, 0xe5, 0x43, 0x18, 0xc3, 0xa4, - 0xe7, 0x3d, 0x74, 0x9a, 0x1b, 0x71, 0x1a, 0x40, 0xce, 0xb3, 0x9a, 0xe2, 0xff, 0x45, 0x64, 0x11, - 0x76, 0xdf, 0x2a, 0x95, 0x9d, 0x27, 0x22, 0x92, 0x43, 0xcb, 0xe0, 0x67, 0xbb, 0xe0, 0x67, 0x8b, - 0xc5, 0xcb, 0x7a, 0xf5, 0x49, 0xaa, 0xf2, 0x98, 0xe4, 0x6c, 0xcf, 0xef, 0x68, 0xb8, 0xae, 0x63, - 0x21, 0x76, 0x54, 0x50, 0x79, 0x5a, 0xc6, 0xf3, 0x74, 0x17, 0xcf, 0xe2, 0xf1, 0x36, 0xcd, 0x81, - 0x0a, 0x8c, 0xc5, 0x7e, 0x8f, 0xf8, 0xa7, 0x51, 0xf6, 0x00, 0xf7, 0x53, 0x11, 0x52, 0x75, 0x6d, - 0x83, 0xca, 0xc7, 0xb3, 0x58, 0x1b, 0xf4, 0x8c, 0x9d, 0x33, 0x11, 0xd2, 0x14, 0xbf, 0x5f, 0x5d, - 0xb6, 0xda, 0x9f, 0xc0, 0xea, 0x83, 0x6f, 0x02, 0xec, 0x04, 0x3b, 0x89, 0x88, 0xce, 0x53, 0xbe, - 0x24, 0x73, 0x29, 0xdd, 0x69, 0x57, 0xd7, 0xec, 0xe7, 0xd6, 0x18, 0xfc, 0x83, 0x44, 0x44, 0x67, - 0x7c, 0x49, 0x76, 0x82, 0x47, 0xdb, 0xda, 0x66, 0x0b, 0xec, 0xea, 0x34, 0xa5, 0x2a, 0x5f, 0x0d, - 0x61, 0xdc, 0x9a, 0xf4, 0xbc, 0x7b, 0x95, 0x5b, 0xff, 0x41, 0xff, 0x36, 0x7a, 0x83, 0xb0, 0xaa, - 0xce, 0xf3, 0x19, 0xac, 0x0e, 0xf8, 0xfa, 0x1c, 0x66, 0xd5, 0x7e, 0x87, 0x87, 0x5b, 0x9a, 0x67, - 0xf3, 0x9b, 0xb2, 0xbb, 0x8d, 0xb2, 0x4d, 0x40, 0x83, 0x6b, 0x7a, 0x84, 0xbd, 0x6b, 0xa8, 0x76, - 0xb4, 0xbf, 0x5d, 0x5d, 0xb6, 0xc0, 0xfb, 0x02, 0xd8, 0xaf, 0xe3, 0xf3, 0x72, 0x6a, 0xec, 0x03, - 0x60, 0x7f, 0x73, 0x58, 0xec, 0x74, 0x87, 0xd1, 0xda, 0xf7, 0xff, 0x27, 0x54, 0x3f, 0x9e, 0xbd, - 0x09, 0x4c, 0x0f, 0x7f, 0xac, 0x47, 0xf0, 0x73, 0x3d, 0x82, 0x5f, 0xeb, 0x11, 0xbc, 0xb2, 0x0a, - 0xef, 0x23, 0xc0, 0xc5, 0x2d, 0xf3, 0xf0, 0x4e, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x3e, - 0x77, 0x93, 0x1c, 0x04, 0x00, 0x00, + 0x56, 0xd8, 0xde, 0xc2, 0xcc, 0xfb, 0xff, 0x7e, 0xf3, 0xe6, 0x65, 0xf0, 0x90, 0xd2, 0x42, 0x2c, + 0x5c, 0x49, 0x79, 0x11, 0x07, 0xe4, 0xf2, 0x20, 0x20, 0x29, 0x13, 0x11, 0xb9, 0x85, 0xe7, 0xf2, + 0x44, 0x3a, 0x59, 0x2e, 0x94, 0x60, 0xb6, 0xa9, 0x72, 0xaa, 0x2a, 0xa7, 0xae, 0x72, 0x0a, 0xcf, + 0xbe, 0x55, 0x12, 0x78, 0x16, 0xeb, 0x4c, 0x20, 0x72, 0x72, 0xcf, 0xb8, 0xa4, 0x32, 0x69, 0xdf, + 0x2e, 0x77, 0x43, 0xae, 0xf8, 0x0a, 0xbc, 0x66, 0x94, 0x85, 0xbd, 0x82, 0x27, 0x71, 0xc8, 0x15, + 0xb9, 0x97, 0x1f, 0xe5, 0xc6, 0x81, 0x8d, 0xfd, 0xa9, 0xca, 0x89, 0xcf, 0x1f, 0x99, 0xc4, 0x73, + 0x11, 0x49, 0x9f, 0x64, 0x26, 0x52, 0x49, 0x07, 0x5f, 0x9b, 0xd8, 0x5b, 0xdd, 0x7c, 0x41, 0x52, + 0xf2, 0x88, 0xd8, 0x2b, 0xc4, 0x38, 0xa4, 0x54, 0xc5, 0xaf, 0x63, 0xca, 0xfb, 0x30, 0x84, 0x51, + 0xc7, 0x7b, 0xe0, 0x6c, 0x6e, 0xc4, 0xd9, 0x00, 0x72, 0x9e, 0xd5, 0x14, 0xff, 0x2f, 0x22, 0x8b, + 0xb0, 0xfd, 0x46, 0xa9, 0xec, 0x34, 0x11, 0x91, 0xec, 0x5b, 0x06, 0x3f, 0xd9, 0x06, 0x3f, 0x99, + 0xcd, 0x4e, 0xea, 0xd5, 0x27, 0xa9, 0xca, 0x63, 0x92, 0x93, 0x1d, 0xbf, 0xa5, 0xe1, 0xba, 0x8e, + 0x85, 0xd8, 0x52, 0x41, 0xe5, 0x69, 0x18, 0xcf, 0xd3, 0x6d, 0x3c, 0xb3, 0xc7, 0xeb, 0x34, 0x7b, + 0x2a, 0x30, 0x16, 0xfb, 0x1d, 0xe2, 0x9f, 0x46, 0xd9, 0x7d, 0xdc, 0x4d, 0x45, 0x48, 0xd5, 0xb5, + 0xf5, 0x2a, 0x1f, 0xcf, 0x62, 0x6d, 0xd0, 0x33, 0x76, 0x8e, 0x45, 0x48, 0x63, 0xfc, 0x7e, 0x71, + 0xde, 0x68, 0x7e, 0x02, 0xab, 0x0b, 0xbe, 0x09, 0xb0, 0x43, 0x6c, 0x25, 0x22, 0x3a, 0x4d, 0xf9, + 0x9c, 0xcc, 0xa5, 0xb4, 0xc7, 0x6d, 0x5d, 0xb3, 0x9b, 0x5b, 0x43, 0xf0, 0xf7, 0x12, 0x11, 0x1d, + 0xf3, 0x39, 0xd9, 0x09, 0xee, 0xaf, 0x6b, 0x9b, 0xcd, 0xb0, 0xad, 0xd3, 0x94, 0xaa, 0x7c, 0xd1, + 0x87, 0x61, 0x63, 0xd4, 0xf1, 0xee, 0x56, 0x6e, 0xfd, 0x07, 0xfd, 0xdb, 0xe8, 0x15, 0xc2, 0xa2, + 0x3a, 0xcf, 0x67, 0xb0, 0x5a, 0xe0, 0xeb, 0x73, 0x98, 0x55, 0xfb, 0x2d, 0xde, 0x5c, 0xd3, 0x3c, + 0x9b, 0x5e, 0x95, 0xdd, 0xd9, 0x28, 0x5b, 0x05, 0x6c, 0x70, 0x8d, 0xf7, 0xb1, 0x73, 0x09, 0xd5, + 0x8e, 0xe6, 0xb7, 0x8b, 0xf3, 0x06, 0x78, 0x5f, 0x00, 0xbb, 0x75, 0x7c, 0x5a, 0x4e, 0x8d, 0x7d, + 0x00, 0xec, 0xae, 0x0e, 0x8b, 0x1d, 0x6d, 0x31, 0x5a, 0xfb, 0xde, 0x75, 0x42, 0xf5, 0xe3, 0xd9, + 0x19, 0xc1, 0xf8, 0xe1, 0x8f, 0xe5, 0x00, 0x7e, 0x2e, 0x07, 0xf0, 0x6b, 0x39, 0x00, 0x1c, 0xc5, + 0xa2, 0x24, 0x65, 0xb9, 0x78, 0xbf, 0xf8, 0x0f, 0xf4, 0x04, 0x5e, 0x5a, 0x85, 0xf7, 0x11, 0xe0, + 0xec, 0x86, 0x79, 0xa4, 0x47, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x1c, 0xd1, 0xd3, 0xb7, 0x48, + 0x04, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/attribute_context.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/attribute_context.pb.go index 173b5ba5211b..8794651b360c 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/attribute_context.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/attribute_context.pb.go @@ -53,7 +53,7 @@ func (m *AttributeContext) Reset() { *m = AttributeContext{} } func (m *AttributeContext) String() string { return proto.CompactTextString(m) } func (*AttributeContext) ProtoMessage() {} func (*AttributeContext) Descriptor() ([]byte, []int) { - return fileDescriptor_attribute_context_39427310f2e1e0f8, []int{0} + return fileDescriptor_attribute_context_c59865071fb9ea30, []int{0} } func (m *AttributeContext) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -147,7 +147,7 @@ func (m *AttributeContext_Peer) Reset() { *m = AttributeContext_Peer{} } func (m *AttributeContext_Peer) String() string { return proto.CompactTextString(m) } func (*AttributeContext_Peer) ProtoMessage() {} func (*AttributeContext_Peer) Descriptor() ([]byte, []int) { - return fileDescriptor_attribute_context_39427310f2e1e0f8, []int{0, 0} + return fileDescriptor_attribute_context_c59865071fb9ea30, []int{0, 0} } func (m *AttributeContext_Peer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -219,7 +219,7 @@ func (m *AttributeContext_Request) Reset() { *m = AttributeContext_Reque func (m *AttributeContext_Request) String() string { return proto.CompactTextString(m) } func (*AttributeContext_Request) ProtoMessage() {} func (*AttributeContext_Request) Descriptor() ([]byte, []int) { - return fileDescriptor_attribute_context_39427310f2e1e0f8, []int{0, 1} + return fileDescriptor_attribute_context_c59865071fb9ea30, []int{0, 1} } func (m *AttributeContext_Request) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -301,7 +301,7 @@ func (m *AttributeContext_HttpRequest) Reset() { *m = AttributeContext_H func (m *AttributeContext_HttpRequest) String() string { return proto.CompactTextString(m) } func (*AttributeContext_HttpRequest) ProtoMessage() {} func (*AttributeContext_HttpRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_attribute_context_39427310f2e1e0f8, []int{0, 2} + return fileDescriptor_attribute_context_c59865071fb9ea30, []int{0, 2} } func (m *AttributeContext_HttpRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2001,46 +2001,47 @@ var ( ) func init() { - proto.RegisterFile("envoy/service/auth/v2alpha/attribute_context.proto", fileDescriptor_attribute_context_39427310f2e1e0f8) + proto.RegisterFile("envoy/service/auth/v2alpha/attribute_context.proto", fileDescriptor_attribute_context_c59865071fb9ea30) } -var fileDescriptor_attribute_context_39427310f2e1e0f8 = []byte{ - // 582 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xd1, 0x6e, 0xd3, 0x30, - 0x14, 0x55, 0xda, 0xae, 0x5d, 0x6f, 0x27, 0x34, 0x2c, 0x34, 0x59, 0x11, 0xda, 0x26, 0x9e, 0xf6, - 0xe4, 0x88, 0xb0, 0x87, 0x31, 0x89, 0x87, 0x31, 0x26, 0x0d, 0x69, 0x42, 0x28, 0xc0, 0xf3, 0xe4, - 0x26, 0x77, 0x8b, 0x45, 0x1a, 0x67, 0xb6, 0x13, 0xad, 0x7c, 0x00, 0xfc, 0x19, 0xe2, 0x91, 0x4f, - 0x40, 0xfb, 0x06, 0x3e, 0x00, 0xc5, 0x76, 0x4a, 0x35, 0xc1, 0x43, 0xf6, 0x54, 0x9f, 0xdb, 0x7b, - 0x8e, 0xcf, 0x3d, 0xbe, 0x81, 0x18, 0xcb, 0x46, 0x2e, 0x23, 0x8d, 0xaa, 0x11, 0x29, 0x46, 0xbc, - 0x36, 0x79, 0xd4, 0xc4, 0xbc, 0xa8, 0x72, 0x1e, 0x71, 0x63, 0x94, 0x98, 0xd7, 0x06, 0x2f, 0x53, - 0x59, 0x1a, 0xbc, 0x35, 0xac, 0x52, 0xd2, 0x48, 0x12, 0x5a, 0x0e, 0xf3, 0x1c, 0xd6, 0x72, 0x98, - 0xe7, 0x84, 0x7b, 0x4e, 0x8f, 0x57, 0x22, 0x6a, 0xe2, 0x28, 0x95, 0x0a, 0x23, 0x9e, 0x65, 0x0a, - 0xb5, 0x76, 0xe4, 0x70, 0xef, 0x5a, 0xca, 0xeb, 0x02, 0x23, 0x8b, 0xe6, 0xf5, 0x55, 0x64, 0xc4, - 0x02, 0xb5, 0xe1, 0x8b, 0xca, 0x35, 0x3c, 0xfb, 0x3e, 0x85, 0xed, 0x93, 0xee, 0xe6, 0x53, 0x77, - 0x31, 0x79, 0x0b, 0x63, 0x2d, 0x6b, 0x95, 0x22, 0x0d, 0xf6, 0x83, 0x83, 0x59, 0xfc, 0x9c, 0xfd, - 0xdf, 0x03, 0xbb, 0xcf, 0x66, 0xef, 0x11, 0x55, 0xe2, 0x05, 0xc8, 0x07, 0x98, 0x65, 0xa8, 0x8d, - 0x28, 0xb9, 0x11, 0xb2, 0xa4, 0x83, 0x87, 0xea, 0xad, 0xab, 0x90, 0x77, 0x30, 0x51, 0x78, 0x53, - 0xa3, 0x36, 0x74, 0x64, 0x05, 0x0f, 0x7b, 0x09, 0x26, 0x8e, 0x9b, 0x74, 0x22, 0x44, 0x01, 0xf1, - 0x99, 0x5f, 0xe2, 0xad, 0xc1, 0x52, 0x0b, 0x59, 0x6a, 0x0a, 0xfb, 0xc3, 0x83, 0x59, 0x7c, 0xda, - 0x4b, 0xda, 0xff, 0x9e, 0xad, 0x54, 0xce, 0x4a, 0xa3, 0x96, 0xc9, 0xe3, 0xf4, 0x7e, 0x3d, 0xfc, - 0x3a, 0x80, 0x51, 0x3b, 0x19, 0x39, 0x84, 0x89, 0x7f, 0x33, 0x9f, 0x76, 0xe8, 0x6f, 0xe4, 0x95, - 0x60, 0x4d, 0xcc, 0xda, 0x57, 0x65, 0x27, 0xae, 0x23, 0xe9, 0x5a, 0x09, 0x85, 0x89, 0x77, 0x64, - 0x33, 0x9d, 0x26, 0x1d, 0x24, 0x9f, 0x60, 0x5c, 0xf0, 0x39, 0x16, 0x9a, 0x0e, 0xed, 0x00, 0xaf, - 0x7a, 0x87, 0xcd, 0x2e, 0x2c, 0xdf, 0x59, 0xf7, 0x62, 0xe4, 0x29, 0x4c, 0x2b, 0x25, 0xca, 0x54, - 0x54, 0xbc, 0xb0, 0xa9, 0x4f, 0x93, 0xbf, 0x85, 0xf0, 0x25, 0xcc, 0xd6, 0x48, 0x64, 0x1b, 0x86, - 0x9f, 0x71, 0x69, 0xe7, 0x99, 0x26, 0xed, 0x91, 0x3c, 0x81, 0x8d, 0x86, 0x17, 0x75, 0xe7, 0xd6, - 0x81, 0xe3, 0xc1, 0x51, 0x10, 0x7e, 0x0b, 0x60, 0xe2, 0x5f, 0x84, 0x30, 0x18, 0xb5, 0x0b, 0xba, - 0x0a, 0xc2, 0x6d, 0x2f, 0xeb, 0xb6, 0x97, 0x7d, 0xec, 0xb6, 0x37, 0xb1, 0x7d, 0xe4, 0x02, 0x46, - 0xb9, 0x31, 0x95, 0x5f, 0xab, 0xa3, 0x5e, 0x93, 0x9e, 0x1b, 0x53, 0x75, 0x9b, 0x60, 0x55, 0xc2, - 0xdf, 0x03, 0x98, 0xad, 0x55, 0xc9, 0x23, 0x18, 0x88, 0xcc, 0x0f, 0x31, 0x10, 0x19, 0xd9, 0x81, - 0xf1, 0x02, 0x4d, 0x2e, 0x33, 0x3f, 0x84, 0x47, 0xe4, 0x12, 0x26, 0x39, 0xf2, 0x0c, 0x55, 0x17, - 0xf9, 0xd9, 0x43, 0x8d, 0xb0, 0x73, 0xa7, 0xe3, 0xa2, 0xef, 0x54, 0x09, 0x81, 0x51, 0xc5, 0x4d, - 0xee, 0x63, 0xb7, 0xe7, 0xb6, 0x96, 0x4b, 0x6d, 0xe8, 0x86, 0xab, 0xb5, 0xe7, 0xd6, 0xa0, 0x4e, - 0x73, 0x5c, 0x20, 0x1d, 0x3b, 0x83, 0x0e, 0xb5, 0xe1, 0xdf, 0xd4, 0xa8, 0x96, 0x74, 0xe2, 0xc2, - 0xb7, 0x80, 0x84, 0xb0, 0x79, 0xa5, 0xf8, 0xf5, 0x02, 0x4b, 0x43, 0x37, 0xed, 0x1f, 0x2b, 0xdc, - 0xaa, 0x6b, 0xf1, 0x05, 0xe9, 0x74, 0x3f, 0x38, 0x18, 0x26, 0xf6, 0xdc, 0xf6, 0xdb, 0x87, 0x48, - 0x65, 0x41, 0xc1, 0xf5, 0x77, 0x38, 0x3c, 0x86, 0xad, 0x75, 0xeb, 0xbd, 0x16, 0xe0, 0x0d, 0xec, - 0xfc, 0xfb, 0xb3, 0xe9, 0xa3, 0xf2, 0x7a, 0xeb, 0xc7, 0xdd, 0x6e, 0xf0, 0xf3, 0x6e, 0x37, 0xf8, - 0x75, 0xb7, 0x1b, 0xcc, 0xc7, 0xd6, 0xd9, 0x8b, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa2, 0xf7, - 0xdf, 0x99, 0x71, 0x05, 0x00, 0x00, +var fileDescriptor_attribute_context_c59865071fb9ea30 = []byte{ + // 597 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xc1, 0x6a, 0xdb, 0x4c, + 0x10, 0x46, 0xb6, 0x63, 0xc7, 0xe3, 0x9f, 0x9f, 0x74, 0x29, 0x61, 0x11, 0x25, 0x09, 0x3d, 0xf9, + 0xb4, 0xa2, 0x6a, 0x0e, 0x69, 0xa0, 0x87, 0x34, 0x0d, 0xa4, 0x10, 0x4a, 0x50, 0xdb, 0x73, 0x58, + 0x4b, 0x93, 0x68, 0xa9, 0xac, 0x55, 0x76, 0x57, 0x22, 0xee, 0x03, 0xb4, 0x6f, 0x56, 0x7a, 0xec, + 0x23, 0x94, 0x3c, 0x43, 0x1f, 0xa0, 0x68, 0x77, 0x95, 0x9a, 0xd0, 0x16, 0x94, 0x93, 0x67, 0xc6, + 0xf3, 0x7d, 0xfb, 0xcd, 0x37, 0x23, 0x88, 0xb1, 0x6c, 0xe4, 0x2a, 0xd2, 0xa8, 0x1a, 0x91, 0x62, + 0xc4, 0x6b, 0x93, 0x47, 0x4d, 0xcc, 0x8b, 0x2a, 0xe7, 0x11, 0x37, 0x46, 0x89, 0x45, 0x6d, 0xf0, + 0x22, 0x95, 0xa5, 0xc1, 0x1b, 0xc3, 0x2a, 0x25, 0x8d, 0x24, 0xa1, 0xc5, 0x30, 0x8f, 0x61, 0x2d, + 0x86, 0x79, 0x4c, 0xb8, 0xeb, 0xf8, 0x78, 0x25, 0xa2, 0x26, 0x8e, 0x52, 0xa9, 0x30, 0xe2, 0x59, + 0xa6, 0x50, 0x6b, 0x07, 0x0e, 0x77, 0xaf, 0xa4, 0xbc, 0x2a, 0x30, 0xb2, 0xd9, 0xa2, 0xbe, 0x8c, + 0x8c, 0x58, 0xa2, 0x36, 0x7c, 0x59, 0xb9, 0x86, 0xa7, 0x5f, 0xa7, 0xb0, 0x75, 0xd4, 0xbd, 0x7c, + 0xec, 0x1e, 0x26, 0x6f, 0x60, 0xac, 0x65, 0xad, 0x52, 0xa4, 0xc1, 0x5e, 0x30, 0x9f, 0xc5, 0xcf, + 0xd8, 0xdf, 0x35, 0xb0, 0xfb, 0x68, 0x76, 0x8e, 0xa8, 0x12, 0x4f, 0x40, 0xde, 0xc1, 0x2c, 0x43, + 0x6d, 0x44, 0xc9, 0x8d, 0x90, 0x25, 0x1d, 0x3c, 0x94, 0x6f, 0x9d, 0x85, 0xbc, 0x85, 0x89, 0xc2, + 0xeb, 0x1a, 0xb5, 0xa1, 0x23, 0x4b, 0xb8, 0xdf, 0x8b, 0x30, 0x71, 0xd8, 0xa4, 0x23, 0x21, 0x0a, + 0x88, 0xf7, 0xfc, 0x02, 0x6f, 0x0c, 0x96, 0x5a, 0xc8, 0x52, 0x53, 0xd8, 0x1b, 0xce, 0x67, 0xf1, + 0x71, 0x2f, 0x6a, 0xff, 0x7b, 0x72, 0xc7, 0x72, 0x52, 0x1a, 0xb5, 0x4a, 0x1e, 0xa5, 0xf7, 0xeb, + 0xe1, 0xe7, 0x01, 0x8c, 0xda, 0xc9, 0xc8, 0x3e, 0x4c, 0xfc, 0xce, 0xbc, 0xdb, 0xa1, 0x7f, 0x91, + 0x57, 0x82, 0x35, 0x31, 0x6b, 0xb7, 0xca, 0x8e, 0x5c, 0x47, 0xd2, 0xb5, 0x12, 0x0a, 0x13, 0xaf, + 0xc8, 0x7a, 0x3a, 0x4d, 0xba, 0x94, 0x7c, 0x80, 0x71, 0xc1, 0x17, 0x58, 0x68, 0x3a, 0xb4, 0x03, + 0xbc, 0xec, 0x6d, 0x36, 0x3b, 0xb3, 0x78, 0x27, 0xdd, 0x93, 0x91, 0x27, 0x30, 0xad, 0x94, 0x28, + 0x53, 0x51, 0xf1, 0xc2, 0xba, 0x3e, 0x4d, 0x7e, 0x17, 0xc2, 0x17, 0x30, 0x5b, 0x03, 0x91, 0x2d, + 0x18, 0x7e, 0xc4, 0x95, 0x9d, 0x67, 0x9a, 0xb4, 0x21, 0x79, 0x0c, 0x1b, 0x0d, 0x2f, 0xea, 0x4e, + 0xad, 0x4b, 0x0e, 0x07, 0x07, 0x41, 0xf8, 0x25, 0x80, 0x89, 0xdf, 0x08, 0x61, 0x30, 0x6a, 0x0f, + 0xf4, 0xce, 0x08, 0x77, 0xbd, 0xac, 0xbb, 0x5e, 0xf6, 0xbe, 0xbb, 0xde, 0xc4, 0xf6, 0x91, 0x33, + 0x18, 0xe5, 0xc6, 0x54, 0xfe, 0xac, 0x0e, 0x7a, 0x4d, 0x7a, 0x6a, 0x4c, 0xd5, 0x5d, 0x82, 0x65, + 0x09, 0x7f, 0x0e, 0x60, 0xb6, 0x56, 0x25, 0xff, 0xc3, 0x40, 0x64, 0x7e, 0x88, 0x81, 0xc8, 0xc8, + 0x36, 0x8c, 0x97, 0x68, 0x72, 0x99, 0xf9, 0x21, 0x7c, 0x46, 0x2e, 0x60, 0x92, 0x23, 0xcf, 0x50, + 0x75, 0x96, 0x9f, 0x3c, 0x54, 0x08, 0x3b, 0x75, 0x3c, 0xce, 0xfa, 0x8e, 0x95, 0x10, 0x18, 0x55, + 0xdc, 0xe4, 0xde, 0x76, 0x1b, 0xb7, 0xb5, 0x5c, 0x6a, 0x43, 0x37, 0x5c, 0xad, 0x8d, 0x5b, 0x81, + 0x3a, 0xcd, 0x71, 0x89, 0x74, 0xec, 0x04, 0xba, 0xac, 0x35, 0xff, 0xba, 0x46, 0xb5, 0xa2, 0x13, + 0x67, 0xbe, 0x4d, 0x48, 0x08, 0x9b, 0x97, 0x8a, 0x5f, 0x2d, 0xb1, 0x34, 0x74, 0xd3, 0xfe, 0x71, + 0x97, 0xb7, 0xec, 0x5a, 0x7c, 0x42, 0x3a, 0xdd, 0x0b, 0xe6, 0xc3, 0xc4, 0xc6, 0x6d, 0xbf, 0x5d, + 0x44, 0x2a, 0x0b, 0x0a, 0xae, 0xbf, 0xcb, 0xc3, 0x43, 0xf8, 0x6f, 0x5d, 0x7a, 0xaf, 0x03, 0x78, + 0x0d, 0xdb, 0x7f, 0xfe, 0x6c, 0xfa, 0xb0, 0xbc, 0x3a, 0xf8, 0x76, 0xbb, 0x13, 0x7c, 0xbf, 0xdd, + 0x09, 0x7e, 0xdc, 0xee, 0x04, 0x30, 0x17, 0xd2, 0xed, 0xa0, 0x52, 0xf2, 0x66, 0xf5, 0x8f, 0x75, + 0x9c, 0x07, 0x8b, 0xb1, 0x9d, 0xe2, 0xf9, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x5d, 0x63, + 0x28, 0x9d, 0x05, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.go index 20291a04244e..f4b51b65687b 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.go @@ -41,7 +41,7 @@ func (m *CheckRequest) Reset() { *m = CheckRequest{} } func (m *CheckRequest) String() string { return proto.CompactTextString(m) } func (*CheckRequest) ProtoMessage() {} func (*CheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_external_auth_7e3585ac8c9f8573, []int{0} + return fileDescriptor_external_auth_c995eaa8b3e403b9, []int{0} } func (m *CheckRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -97,7 +97,7 @@ func (m *DeniedHttpResponse) Reset() { *m = DeniedHttpResponse{} } func (m *DeniedHttpResponse) String() string { return proto.CompactTextString(m) } func (*DeniedHttpResponse) ProtoMessage() {} func (*DeniedHttpResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_external_auth_7e3585ac8c9f8573, []int{1} + return fileDescriptor_external_auth_c995eaa8b3e403b9, []int{1} } func (m *DeniedHttpResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -165,7 +165,7 @@ func (m *OkHttpResponse) Reset() { *m = OkHttpResponse{} } func (m *OkHttpResponse) String() string { return proto.CompactTextString(m) } func (*OkHttpResponse) ProtoMessage() {} func (*OkHttpResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_external_auth_7e3585ac8c9f8573, []int{2} + return fileDescriptor_external_auth_c995eaa8b3e403b9, []int{2} } func (m *OkHttpResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -222,7 +222,7 @@ func (m *CheckResponse) Reset() { *m = CheckResponse{} } func (m *CheckResponse) String() string { return proto.CompactTextString(m) } func (*CheckResponse) ProtoMessage() {} func (*CheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_external_auth_7e3585ac8c9f8573, []int{3} + return fileDescriptor_external_auth_c995eaa8b3e403b9, []int{3} } func (m *CheckResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1321,39 +1321,40 @@ var ( ) func init() { - proto.RegisterFile("envoy/service/auth/v2alpha/external_auth.proto", fileDescriptor_external_auth_7e3585ac8c9f8573) -} - -var fileDescriptor_external_auth_7e3585ac8c9f8573 = []byte{ - // 477 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x52, 0x41, 0x6b, 0x13, 0x41, - 0x18, 0xed, 0x24, 0xb6, 0xc5, 0x89, 0x69, 0x65, 0x0e, 0x76, 0x09, 0x12, 0x42, 0xf0, 0x10, 0x8b, - 0xcc, 0xc0, 0x7a, 0xf3, 0x20, 0xb4, 0xf5, 0x90, 0x83, 0x52, 0x59, 0x41, 0x50, 0x0a, 0x61, 0xb2, - 0xfb, 0xd1, 0x5d, 0xb2, 0xee, 0x8c, 0x33, 0xdf, 0x2e, 0x8d, 0xbf, 0x40, 0xfc, 0x1d, 0xfe, 0x0a, - 0x4f, 0x1e, 0x3d, 0xfa, 0x13, 0x24, 0x37, 0xff, 0x80, 0x67, 0xd9, 0xd9, 0xd9, 0xd8, 0x28, 0x06, - 0xc1, 0xdb, 0xb2, 0xdf, 0x7b, 0xef, 0x7b, 0xef, 0xcd, 0x47, 0x39, 0x14, 0x95, 0x5a, 0x0a, 0x0b, - 0xa6, 0xca, 0x62, 0x10, 0xb2, 0xc4, 0x54, 0x54, 0xa1, 0xcc, 0x75, 0x2a, 0x05, 0x5c, 0x21, 0x98, - 0x42, 0xe6, 0xb3, 0xfa, 0x2f, 0xd7, 0x46, 0xa1, 0x62, 0x03, 0x87, 0xe7, 0x1e, 0xcf, 0xdd, 0xc4, - 0xe3, 0x07, 0x77, 0x1b, 0x2d, 0xa9, 0x33, 0x51, 0x85, 0x22, 0x56, 0x06, 0xc4, 0x5c, 0x5a, 0x68, - 0x98, 0xed, 0x14, 0x97, 0x1a, 0x44, 0x8a, 0xa8, 0x67, 0x16, 0x25, 0x96, 0xd6, 0x4f, 0xc3, 0x2d, - 0x3e, 0x24, 0xa2, 0xc9, 0xe6, 0x25, 0xc2, 0x2c, 0x56, 0x05, 0xc2, 0x15, 0x7a, 0xce, 0xd1, 0xa5, - 0x52, 0x97, 0x39, 0x08, 0xa3, 0x63, 0xb1, 0x21, 0x76, 0x54, 0xc9, 0x3c, 0x4b, 0x24, 0x82, 0x68, - 0x3f, 0x9a, 0xc1, 0xf8, 0x82, 0xde, 0x3a, 0x4b, 0x21, 0x5e, 0x44, 0xf0, 0xb6, 0x04, 0x8b, 0xec, - 0x29, 0xa5, 0x6b, 0x71, 0x1b, 0x90, 0x11, 0x99, 0xf4, 0xc2, 0x07, 0xfc, 0xef, 0x11, 0xf9, 0x49, - 0x8b, 0x3e, 0x6b, 0x9c, 0x44, 0xd7, 0xf8, 0xe3, 0x8f, 0x84, 0xb2, 0x27, 0x50, 0x64, 0x90, 0x4c, - 0x11, 0x75, 0x04, 0x56, 0xab, 0xc2, 0x02, 0x7b, 0x44, 0xf7, 0x1a, 0x77, 0x7e, 0xc1, 0x1d, 0xbf, - 0xa0, 0x6e, 0x82, 0xd7, 0xc8, 0x17, 0x6e, 0x7a, 0x4a, 0x3f, 0x7d, 0xff, 0xdc, 0xdd, 0xfd, 0x40, - 0x3a, 0xb7, 0x49, 0xe4, 0x19, 0xec, 0x31, 0xdd, 0x4f, 0x41, 0x26, 0x60, 0x6c, 0xd0, 0x19, 0x75, - 0x27, 0xbd, 0xf0, 0x9e, 0x27, 0x4b, 0x9d, 0xf1, 0x2a, 0xe4, 0x75, 0xc9, 0x7c, 0xea, 0x10, 0x2f, - 0x65, 0x5e, 0xc2, 0xb9, 0xc6, 0x4c, 0x15, 0x51, 0x4b, 0x62, 0x8c, 0xde, 0x98, 0xab, 0x64, 0x19, - 0x74, 0x47, 0x64, 0x72, 0x33, 0x72, 0xdf, 0xe3, 0xe7, 0xf4, 0xe0, 0x7c, 0xb1, 0xe1, 0xf0, 0x3f, - 0xb7, 0x8c, 0x7f, 0x10, 0xda, 0xf7, 0xbd, 0x7a, 0xc5, 0xe3, 0xdf, 0x32, 0x33, 0xde, 0xbc, 0x15, - 0x37, 0x3a, 0xe6, 0x4d, 0xde, 0x75, 0xc6, 0x57, 0xf4, 0x30, 0x71, 0xad, 0xcd, 0x8c, 0xa7, 0x07, - 0x1d, 0x47, 0xe2, 0xdb, 0x5e, 0xe2, 0xcf, 0xa2, 0xa7, 0x3b, 0xd1, 0x41, 0x23, 0xb4, 0xb6, 0xf1, - 0x8c, 0xf6, 0xd4, 0xe2, 0x97, 0x6c, 0xd7, 0xc9, 0x1e, 0x6f, 0x93, 0xdd, 0x6c, 0x66, 0xba, 0x13, - 0x51, 0xb5, 0x4e, 0x75, 0x7a, 0x48, 0xfb, 0xee, 0x72, 0x5b, 0xc1, 0xf0, 0x0d, 0xed, 0x9f, 0x94, - 0x98, 0x2a, 0x93, 0xbd, 0x93, 0x75, 0x25, 0xec, 0x82, 0xee, 0xba, 0x22, 0xd8, 0x64, 0xdb, 0x92, - 0xeb, 0x37, 0x38, 0xb8, 0xff, 0x0f, 0x48, 0xbf, 0x3f, 0xf8, 0xb2, 0x1a, 0x92, 0xaf, 0xab, 0x21, - 0xf9, 0xb6, 0x1a, 0x92, 0xd7, 0xfb, 0x1e, 0xf4, 0x9e, 0x90, 0xf9, 0x9e, 0xbb, 0xef, 0x87, 0x3f, - 0x03, 0x00, 0x00, 0xff, 0xff, 0x26, 0xea, 0x51, 0xbb, 0xcf, 0x03, 0x00, 0x00, + proto.RegisterFile("envoy/service/auth/v2alpha/external_auth.proto", fileDescriptor_external_auth_c995eaa8b3e403b9) +} + +var fileDescriptor_external_auth_c995eaa8b3e403b9 = []byte{ + // 491 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x93, 0x4f, 0x8b, 0xd3, 0x40, + 0x18, 0xc6, 0x77, 0x5a, 0x77, 0x17, 0xa7, 0x76, 0x57, 0xe6, 0xe0, 0x96, 0x22, 0xa5, 0x14, 0x0f, + 0x71, 0x91, 0x19, 0x88, 0x37, 0x0f, 0xc2, 0xfe, 0x39, 0xf4, 0xa0, 0xec, 0x12, 0x41, 0x50, 0x16, + 0xca, 0x34, 0x79, 0xd9, 0x84, 0xc6, 0xcc, 0x38, 0x79, 0x13, 0x5a, 0x3f, 0x81, 0xf8, 0x39, 0xfc, + 0x14, 0x9e, 0x3c, 0x7a, 0xf4, 0x23, 0x48, 0x6f, 0x7e, 0x01, 0xcf, 0x92, 0xc9, 0xa4, 0x6e, 0x15, + 0x83, 0xe0, 0x6d, 0xc8, 0xfb, 0x3c, 0xbf, 0xf7, 0x7d, 0x9f, 0x99, 0x50, 0x0e, 0x59, 0xa9, 0x56, + 0x22, 0x07, 0x53, 0x26, 0x21, 0x08, 0x59, 0x60, 0x2c, 0x4a, 0x5f, 0xa6, 0x3a, 0x96, 0x02, 0x96, + 0x08, 0x26, 0x93, 0xe9, 0xac, 0xfa, 0xca, 0xb5, 0x51, 0xa8, 0xd8, 0xd0, 0xea, 0xb9, 0xd3, 0x73, + 0x5b, 0x71, 0xfa, 0xe1, 0xfd, 0x9a, 0x25, 0x75, 0x22, 0x4a, 0x5f, 0x84, 0xca, 0x80, 0x98, 0xcb, + 0x1c, 0x6a, 0x67, 0x53, 0xc5, 0x95, 0x06, 0x11, 0x23, 0xea, 0x59, 0x8e, 0x12, 0x8b, 0xdc, 0x55, + 0xfd, 0x96, 0x39, 0x24, 0xa2, 0x49, 0xe6, 0x05, 0xc2, 0x2c, 0x54, 0x19, 0xc2, 0x12, 0x9d, 0xe7, + 0xe8, 0x5a, 0xa9, 0xeb, 0x14, 0x84, 0xd1, 0xa1, 0xd8, 0x82, 0x1d, 0x95, 0x32, 0x4d, 0x22, 0x89, + 0x20, 0x9a, 0x43, 0x5d, 0x98, 0x5c, 0xd1, 0x3b, 0x67, 0x31, 0x84, 0x8b, 0x00, 0xde, 0x16, 0x90, + 0x23, 0x7b, 0x46, 0xe9, 0x06, 0x9e, 0x0f, 0xc8, 0x98, 0x78, 0x3d, 0xff, 0x11, 0xff, 0xfb, 0x8a, + 0xfc, 0xa4, 0x51, 0x9f, 0xd5, 0x93, 0x04, 0x37, 0xfc, 0x93, 0x8f, 0x84, 0xb2, 0x73, 0xc8, 0x12, + 0x88, 0xa6, 0x88, 0x3a, 0x80, 0x5c, 0xab, 0x2c, 0x07, 0xf6, 0x84, 0xee, 0xd5, 0xd3, 0xb9, 0x06, + 0xf7, 0x5c, 0x83, 0x2a, 0x09, 0x5e, 0x29, 0x5f, 0xd8, 0xea, 0x29, 0xfd, 0xf4, 0xfd, 0x73, 0x77, + 0xf7, 0x03, 0xe9, 0xdc, 0x25, 0x81, 0x73, 0xb0, 0xa7, 0x74, 0x3f, 0x06, 0x19, 0x81, 0xc9, 0x07, + 0x9d, 0x71, 0xd7, 0xeb, 0xf9, 0x0f, 0x9c, 0x59, 0xea, 0x84, 0x97, 0x3e, 0xaf, 0x42, 0xe6, 0x53, + 0xab, 0x78, 0x29, 0xd3, 0x02, 0x2e, 0x34, 0x26, 0x2a, 0x0b, 0x1a, 0x13, 0x63, 0xf4, 0xd6, 0x5c, + 0x45, 0xab, 0x41, 0x77, 0x4c, 0xbc, 0xdb, 0x81, 0x3d, 0x4f, 0x2e, 0xe9, 0xc1, 0xc5, 0x62, 0x6b, + 0xc2, 0xff, 0xec, 0x32, 0xf9, 0x41, 0x68, 0xdf, 0xe5, 0xea, 0x88, 0xc7, 0xbf, 0xed, 0xcc, 0x78, + 0x7d, 0x57, 0xdc, 0xe8, 0x90, 0xd7, 0xfb, 0x6e, 0x76, 0x7c, 0x45, 0x0f, 0x23, 0x9b, 0xda, 0xcc, + 0x38, 0xfb, 0xa0, 0x63, 0x4d, 0xbc, 0xed, 0x26, 0xfe, 0x0c, 0x7a, 0xba, 0x13, 0x1c, 0xd4, 0xa0, + 0xcd, 0x18, 0xcf, 0x69, 0x4f, 0x2d, 0x7e, 0x61, 0xbb, 0x16, 0x7b, 0xdc, 0x86, 0xdd, 0x4e, 0x66, + 0xba, 0x13, 0x50, 0xb5, 0xd9, 0xea, 0xf4, 0x90, 0xf6, 0xed, 0xcb, 0x6d, 0x80, 0xfe, 0x1b, 0xda, + 0x3f, 0x29, 0x30, 0x56, 0x26, 0x79, 0x27, 0xab, 0x48, 0xd8, 0x15, 0xdd, 0xb5, 0x41, 0x30, 0xaf, + 0xad, 0xc9, 0xcd, 0x37, 0x38, 0x7c, 0xf8, 0x0f, 0x4a, 0xd7, 0xff, 0xfc, 0xcb, 0x7a, 0x44, 0xbe, + 0xae, 0x47, 0xe4, 0xdb, 0x7a, 0x44, 0xa8, 0x97, 0xa8, 0xda, 0xaa, 0x8d, 0x5a, 0xae, 0x5a, 0x28, + 0x97, 0xe4, 0xf5, 0xbe, 0x3b, 0xbe, 0x27, 0x64, 0xbe, 0x67, 0xff, 0x85, 0xc7, 0x3f, 0x03, 0x00, + 0x00, 0xff, 0xff, 0xc3, 0xaf, 0xb4, 0xe0, 0xfb, 0x03, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.go index c6602f6e52ea..7521f4181d47 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.go @@ -38,7 +38,7 @@ func (m *AdsDummy) Reset() { *m = AdsDummy{} } func (m *AdsDummy) String() string { return proto.CompactTextString(m) } func (*AdsDummy) ProtoMessage() {} func (*AdsDummy) Descriptor() ([]byte, []int) { - return fileDescriptor_ads_ef11d70d8d973287, []int{0} + return fileDescriptor_ads_a1a0b7cd3fcc9aef, []int{0} } func (m *AdsDummy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -454,24 +454,25 @@ var ( ) func init() { - proto.RegisterFile("envoy/service/discovery/v2/ads.proto", fileDescriptor_ads_ef11d70d8d973287) -} - -var fileDescriptor_ads_ef11d70d8d973287 = []byte{ - // 237 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0xd0, 0xbd, 0x4a, 0x04, 0x31, - 0x14, 0x05, 0x60, 0xaf, 0x85, 0x48, 0xca, 0xb1, 0x72, 0x90, 0x08, 0x8b, 0x85, 0x5a, 0x64, 0x24, - 0x3e, 0xc1, 0xca, 0x36, 0xb6, 0xbb, 0x9d, 0x5d, 0x36, 0xb9, 0x0c, 0x01, 0xf3, 0x63, 0x6e, 0x26, - 0x30, 0x85, 0xbd, 0x8f, 0x66, 0xe9, 0x23, 0xc8, 0xbc, 0x88, 0xe2, 0x8c, 0xee, 0xae, 0xa8, 0x60, - 0x7d, 0xbf, 0x73, 0x4e, 0x08, 0x3b, 0x43, 0x5f, 0x42, 0xdf, 0x10, 0xa6, 0x62, 0x35, 0x36, 0xc6, - 0x92, 0x0e, 0x05, 0x53, 0xdf, 0x14, 0xd9, 0x28, 0x43, 0x22, 0xa6, 0x90, 0x43, 0x55, 0x8f, 0x4a, - 0x7c, 0x2a, 0xb1, 0x51, 0xa2, 0xc8, 0xfa, 0x64, 0x6a, 0x50, 0xd1, 0x7e, 0x64, 0xb6, 0xa7, 0x31, - 0x39, 0x63, 0xec, 0x70, 0x6e, 0x68, 0xd1, 0x39, 0xd7, 0xcb, 0x37, 0x60, 0xf5, 0xbc, 0x6d, 0x13, - 0xb6, 0x2a, 0xa3, 0x59, 0x7c, 0xc9, 0xd5, 0xd4, 0x5a, 0xad, 0xd9, 0xf1, 0x2a, 0x27, 0x54, 0x6e, - 0x6b, 0x96, 0x48, 0xa1, 0x4b, 0x1a, 0xa9, 0xe2, 0x62, 0x7a, 0x82, 0x8a, 0x56, 0x14, 0x29, 0x36, - 0xe1, 0x25, 0x3e, 0x74, 0x48, 0xb9, 0x3e, 0xfd, 0xf3, 0x4e, 0x31, 0x78, 0xc2, 0xd9, 0xde, 0x39, - 0x5c, 0x41, 0xf5, 0xc8, 0xf8, 0xad, 0xd7, 0x09, 0x1d, 0xfa, 0xac, 0xee, 0x7f, 0x1b, 0xba, 0xf8, - 0x5e, 0xb4, 0xa3, 0x7f, 0x6c, 0x5e, 0xfe, 0x87, 0xee, 0xce, 0xdf, 0x1c, 0x3d, 0x0f, 0x1c, 0x5e, - 0x06, 0x0e, 0xaf, 0x03, 0x87, 0xbb, 0xfd, 0x22, 0x9f, 0x00, 0xd6, 0x07, 0xe3, 0x4f, 0x5d, 0xbf, - 0x07, 0x00, 0x00, 0xff, 0xff, 0x9b, 0xe6, 0x5f, 0x1d, 0x8b, 0x01, 0x00, 0x00, + proto.RegisterFile("envoy/service/discovery/v2/ads.proto", fileDescriptor_ads_a1a0b7cd3fcc9aef) +} + +var fileDescriptor_ads_a1a0b7cd3fcc9aef = []byte{ + // 251 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xb1, 0x4a, 0xc4, 0x40, + 0x10, 0x86, 0x1d, 0x0b, 0x91, 0x2d, 0xd3, 0x19, 0x64, 0x85, 0xc3, 0xe2, 0xb4, 0xd8, 0xc8, 0xfa, + 0x00, 0x72, 0x72, 0x8d, 0x9d, 0xdc, 0x75, 0x76, 0x7b, 0xc9, 0x10, 0x16, 0x4c, 0x76, 0x9d, 0xd9, + 0x2c, 0xa6, 0xb0, 0xf7, 0xd1, 0x2c, 0x7d, 0x04, 0xc9, 0x8b, 0x28, 0x66, 0xf5, 0xee, 0x44, 0x0f, + 0xac, 0xe7, 0xfb, 0xbf, 0x7f, 0xf8, 0xc5, 0x29, 0xb6, 0xd1, 0xf5, 0x05, 0x23, 0x45, 0x5b, 0x62, + 0x51, 0x59, 0x2e, 0x5d, 0x44, 0xea, 0x8b, 0xa8, 0x0b, 0x53, 0xb1, 0xf2, 0xe4, 0x82, 0xcb, 0xf2, + 0x91, 0x52, 0x5f, 0x94, 0x5a, 0x53, 0x2a, 0xea, 0xfc, 0x38, 0x19, 0x8c, 0xb7, 0x9f, 0x99, 0xcd, + 0x69, 0x4c, 0x4e, 0x84, 0x38, 0x9c, 0x55, 0x3c, 0xef, 0x9a, 0xa6, 0xd7, 0xef, 0x20, 0xf2, 0x59, + 0x5d, 0x13, 0xd6, 0x26, 0x60, 0x35, 0xff, 0x26, 0x97, 0xc9, 0x9a, 0xad, 0xc4, 0xd1, 0x32, 0x10, + 0x9a, 0x66, 0xc3, 0x2c, 0x90, 0x5d, 0x47, 0x25, 0x72, 0x26, 0x55, 0x7a, 0xc1, 0x78, 0xab, 0xa2, + 0x56, 0xeb, 0xf0, 0x02, 0x1f, 0x3a, 0xe4, 0x90, 0x9f, 0xec, 0xbc, 0xb3, 0x77, 0x2d, 0xe3, 0x64, + 0x6f, 0x0a, 0x17, 0x90, 0x3d, 0x09, 0x79, 0xd3, 0x96, 0x84, 0x0d, 0xb6, 0xc1, 0xdc, 0xff, 0x55, + 0x74, 0xf6, 0x53, 0xb4, 0x45, 0xff, 0xea, 0x3c, 0xff, 0x0f, 0xba, 0x5d, 0x7f, 0x7d, 0xf5, 0x32, + 0x48, 0x78, 0x1d, 0x24, 0xbc, 0x0d, 0x12, 0xc4, 0xd4, 0xba, 0x64, 0xf0, 0xe4, 0x1e, 0x7b, 0xb5, + 0x7b, 0xe3, 0x5b, 0xb8, 0xdb, 0x8f, 0xfa, 0x19, 0x60, 0x75, 0x30, 0xae, 0x7a, 0xf9, 0x11, 0x00, + 0x00, 0xff, 0xff, 0x3d, 0xb8, 0x3b, 0x50, 0xb7, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.go index 9ea96d4c8dab..fb432ffce72c 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.go @@ -54,7 +54,7 @@ func (x Capability_Protocol) String() string { return proto.EnumName(Capability_Protocol_name, int32(x)) } func (Capability_Protocol) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_hds_4eb9ee1128b9fd4d, []int{0, 0} + return fileDescriptor_hds_faa1cb41ff6b4fa5, []int{0, 0} } // Defines supported protocols etc, so the management server can assign proper @@ -70,7 +70,7 @@ func (m *Capability) Reset() { *m = Capability{} } func (m *Capability) String() string { return proto.CompactTextString(m) } func (*Capability) ProtoMessage() {} func (*Capability) Descriptor() ([]byte, []int) { - return fileDescriptor_hds_4eb9ee1128b9fd4d, []int{0} + return fileDescriptor_hds_faa1cb41ff6b4fa5, []int{0} } func (m *Capability) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -118,7 +118,7 @@ func (m *HealthCheckRequest) Reset() { *m = HealthCheckRequest{} } func (m *HealthCheckRequest) String() string { return proto.CompactTextString(m) } func (*HealthCheckRequest) ProtoMessage() {} func (*HealthCheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_hds_4eb9ee1128b9fd4d, []int{1} + return fileDescriptor_hds_faa1cb41ff6b4fa5, []int{1} } func (m *HealthCheckRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -173,7 +173,7 @@ func (m *EndpointHealth) Reset() { *m = EndpointHealth{} } func (m *EndpointHealth) String() string { return proto.CompactTextString(m) } func (*EndpointHealth) ProtoMessage() {} func (*EndpointHealth) Descriptor() ([]byte, []int) { - return fileDescriptor_hds_4eb9ee1128b9fd4d, []int{2} + return fileDescriptor_hds_faa1cb41ff6b4fa5, []int{2} } func (m *EndpointHealth) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -227,7 +227,7 @@ func (m *EndpointHealthResponse) Reset() { *m = EndpointHealthResponse{} func (m *EndpointHealthResponse) String() string { return proto.CompactTextString(m) } func (*EndpointHealthResponse) ProtoMessage() {} func (*EndpointHealthResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_hds_4eb9ee1128b9fd4d, []int{3} + return fileDescriptor_hds_faa1cb41ff6b4fa5, []int{3} } func (m *EndpointHealthResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -281,7 +281,7 @@ func (m *HealthCheckRequestOrEndpointHealthResponse) String() string { } func (*HealthCheckRequestOrEndpointHealthResponse) ProtoMessage() {} func (*HealthCheckRequestOrEndpointHealthResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_hds_4eb9ee1128b9fd4d, []int{4} + return fileDescriptor_hds_faa1cb41ff6b4fa5, []int{4} } func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -435,7 +435,7 @@ func (m *LocalityEndpoints) Reset() { *m = LocalityEndpoints{} } func (m *LocalityEndpoints) String() string { return proto.CompactTextString(m) } func (*LocalityEndpoints) ProtoMessage() {} func (*LocalityEndpoints) Descriptor() ([]byte, []int) { - return fileDescriptor_hds_4eb9ee1128b9fd4d, []int{5} + return fileDescriptor_hds_faa1cb41ff6b4fa5, []int{5} } func (m *LocalityEndpoints) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -495,7 +495,7 @@ func (m *ClusterHealthCheck) Reset() { *m = ClusterHealthCheck{} } func (m *ClusterHealthCheck) String() string { return proto.CompactTextString(m) } func (*ClusterHealthCheck) ProtoMessage() {} func (*ClusterHealthCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_hds_4eb9ee1128b9fd4d, []int{6} + return fileDescriptor_hds_faa1cb41ff6b4fa5, []int{6} } func (m *ClusterHealthCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -558,7 +558,7 @@ func (m *HealthCheckSpecifier) Reset() { *m = HealthCheckSpecifier{} } func (m *HealthCheckSpecifier) String() string { return proto.CompactTextString(m) } func (*HealthCheckSpecifier) ProtoMessage() {} func (*HealthCheckSpecifier) Descriptor() ([]byte, []int) { - return fileDescriptor_hds_4eb9ee1128b9fd4d, []int{7} + return fileDescriptor_hds_faa1cb41ff6b4fa5, []int{7} } func (m *HealthCheckSpecifier) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2387,56 +2387,57 @@ var ( ) func init() { - proto.RegisterFile("envoy/service/discovery/v2/hds.proto", fileDescriptor_hds_4eb9ee1128b9fd4d) -} - -var fileDescriptor_hds_4eb9ee1128b9fd4d = []byte{ - // 746 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0x41, 0x6f, 0xd3, 0x4a, - 0x10, 0xce, 0xa6, 0x7d, 0xef, 0xa5, 0xd3, 0xbc, 0x34, 0x5d, 0x4a, 0x08, 0xa1, 0x4a, 0x8b, 0x55, - 0x50, 0x54, 0x84, 0x53, 0x05, 0x21, 0xa4, 0x22, 0x2e, 0x4d, 0x5a, 0x05, 0x09, 0x95, 0x6a, 0x53, - 0x6e, 0x48, 0x91, 0xe3, 0x6c, 0x1b, 0x0b, 0xd7, 0x6b, 0xbc, 0x9b, 0x48, 0xb9, 0x72, 0x02, 0x71, - 0x41, 0xea, 0x99, 0x1f, 0x81, 0xf8, 0x13, 0x1c, 0x91, 0xb8, 0x71, 0x42, 0x55, 0x7f, 0x08, 0xca, - 0xee, 0xda, 0x71, 0xea, 0x26, 0xb4, 0x37, 0x6e, 0xf1, 0xec, 0x37, 0x33, 0xdf, 0x37, 0xdf, 0xec, - 0x06, 0x36, 0xa8, 0x37, 0x60, 0xc3, 0x2a, 0xa7, 0xc1, 0xc0, 0xb1, 0x69, 0xb5, 0xeb, 0x70, 0x9b, - 0x0d, 0x68, 0x30, 0xac, 0x0e, 0x6a, 0xd5, 0x5e, 0x97, 0x9b, 0x7e, 0xc0, 0x04, 0xc3, 0x25, 0x89, - 0x32, 0x35, 0xca, 0x8c, 0x50, 0xe6, 0xa0, 0x56, 0x5a, 0x55, 0x15, 0x2c, 0xdf, 0x19, 0xe5, 0xd8, - 0x2c, 0xa0, 0xd5, 0x8e, 0xc5, 0xa9, 0xca, 0x2c, 0x6d, 0x24, 0x4f, 0x7b, 0xd4, 0x72, 0x45, 0xaf, - 0x6d, 0xf7, 0xa8, 0xfd, 0xe6, 0x52, 0x14, 0xf5, 0xba, 0x3e, 0x73, 0x3c, 0x11, 0xfd, 0xd0, 0xa8, - 0xd5, 0x63, 0xc6, 0x8e, 0x5d, 0x2a, 0x61, 0x96, 0xe7, 0x31, 0x61, 0x09, 0x87, 0x79, 0x9a, 0x63, - 0xa9, 0xac, 0x4f, 0xe5, 0x57, 0xa7, 0x7f, 0x54, 0xed, 0xf6, 0x03, 0x09, 0x50, 0xe7, 0xc6, 0x67, - 0x04, 0x50, 0xb7, 0x7c, 0xab, 0xe3, 0xb8, 0x8e, 0x18, 0x62, 0x0a, 0x85, 0x38, 0x91, 0xb6, 0x04, - 0xd9, 0xcc, 0xe5, 0x45, 0xb4, 0x3e, 0x57, 0xc9, 0xd5, 0xaa, 0xe6, 0x74, 0xcd, 0xe6, 0xb8, 0x8e, - 0x79, 0xa0, 0xf3, 0xc8, 0x8a, 0x2a, 0x57, 0x1f, 0x55, 0x0b, 0x83, 0xdc, 0xa8, 0x40, 0x26, 0xfc, - 0xc0, 0x19, 0x98, 0x6f, 0x1e, 0x1e, 0x1e, 0xe4, 0x53, 0xf8, 0x3f, 0x98, 0x3b, 0xac, 0x1f, 0xe4, - 0x11, 0x5e, 0x80, 0x7f, 0xc8, 0x6e, 0xe3, 0x79, 0x2b, 0x9f, 0x36, 0x3e, 0x20, 0xc0, 0xcd, 0x71, - 0x09, 0x42, 0xdf, 0xf6, 0x29, 0x17, 0xf8, 0x01, 0xcc, 0x7b, 0xac, 0x4b, 0x8b, 0x68, 0x1d, 0x55, - 0x16, 0x6b, 0xb7, 0x34, 0x2b, 0xcb, 0x77, 0x46, 0x3c, 0x46, 0xf3, 0x34, 0xf7, 0x59, 0x97, 0x12, - 0x09, 0xc2, 0x7b, 0x00, 0x76, 0x44, 0xad, 0x98, 0x96, 0x29, 0xf7, 0xaf, 0x26, 0x84, 0xc4, 0x32, - 0x8d, 0x53, 0x04, 0xb9, 0x5d, 0x3d, 0x7c, 0xc5, 0x09, 0x3f, 0x85, 0x4c, 0x68, 0x87, 0xe6, 0xb2, - 0x36, 0xc9, 0x25, 0x32, 0x2b, 0x4c, 0x24, 0x51, 0x02, 0x6e, 0xc0, 0xff, 0x7a, 0xd8, 0x5c, 0x58, - 0xa2, 0xcf, 0x25, 0xb5, 0xdc, 0xc5, 0x0a, 0x52, 0x8d, 0x6a, 0xd7, 0x92, 0x30, 0x92, 0xed, 0xc5, - 0xbe, 0x0c, 0x06, 0x85, 0x49, 0x52, 0x84, 0x72, 0x9f, 0x79, 0x9c, 0xe2, 0x57, 0x90, 0x0f, 0x7b, - 0xf1, 0xb6, 0xca, 0x91, 0x36, 0x2e, 0xd6, 0x36, 0x67, 0xa9, 0xbf, 0x50, 0x6d, 0x29, 0xaa, 0xa1, - 0x02, 0xc6, 0xa7, 0x34, 0x6c, 0x26, 0x2d, 0x79, 0x19, 0x4c, 0x61, 0xd1, 0x81, 0x95, 0x89, 0x95, - 0x0a, 0x14, 0x5e, 0x8f, 0xcb, 0x9c, 0xc5, 0x24, 0xd9, 0xa5, 0x99, 0x22, 0xb8, 0x97, 0x5c, 0x07, - 0x0f, 0x8a, 0x21, 0x4b, 0x2d, 0xb4, 0x1d, 0xe8, 0xfe, 0xda, 0xef, 0xda, 0x35, 0x14, 0xeb, 0xcc, - 0x66, 0x8a, 0x14, 0xe8, 0xa5, 0x27, 0x3b, 0x39, 0xc8, 0x6a, 0x19, 0x6d, 0x31, 0xf4, 0xa9, 0xf1, - 0x11, 0xc1, 0xf2, 0x0b, 0x66, 0x5b, 0xa3, 0x35, 0x09, 0x8b, 0x71, 0xfc, 0x04, 0x32, 0xae, 0x0e, - 0x6a, 0xb5, 0x77, 0x2e, 0xb1, 0x36, 0xcc, 0x23, 0x11, 0x18, 0x3f, 0x83, 0x85, 0x68, 0xe8, 0xc5, - 0xb4, 0x74, 0xec, 0x8f, 0x6b, 0x35, 0xce, 0x30, 0x7e, 0x22, 0xc0, 0x75, 0xb7, 0xcf, 0x05, 0x0d, - 0x62, 0x13, 0xc4, 0x77, 0x21, 0x6b, 0xab, 0x68, 0xdb, 0xb3, 0x4e, 0xd4, 0xdd, 0x59, 0x20, 0x8b, - 0x3a, 0xb6, 0x6f, 0x9d, 0x50, 0x5c, 0x8f, 0x36, 0x52, 0x7a, 0x15, 0x36, 0x2f, 0x4f, 0xdd, 0x48, - 0xe5, 0x42, 0x36, 0x66, 0x09, 0xc7, 0xaf, 0x01, 0x87, 0x4a, 0xda, 0x63, 0x19, 0x73, 0xb2, 0xd2, - 0xc3, 0x59, 0x36, 0x24, 0x26, 0x48, 0x96, 0xdd, 0x8b, 0x21, 0xe3, 0x0b, 0x82, 0x95, 0x58, 0xef, - 0x96, 0x4f, 0x6d, 0xe7, 0xc8, 0xa1, 0x01, 0xee, 0xc0, 0xcd, 0x50, 0xde, 0xa4, 0x06, 0xb5, 0xf2, - 0x33, 0x17, 0x2d, 0x39, 0x2d, 0x72, 0xc3, 0x4e, 0xc4, 0x38, 0x7e, 0x0c, 0x19, 0xc7, 0x13, 0x34, - 0x18, 0x58, 0xae, 0xde, 0xab, 0xdb, 0xa6, 0x7a, 0x60, 0xcd, 0xf0, 0x81, 0x35, 0x1b, 0xfa, 0x81, - 0x25, 0x11, 0xb4, 0x76, 0x9e, 0x86, 0x82, 0xaa, 0xd3, 0x08, 0xbb, 0xb6, 0x14, 0x0d, 0x7c, 0x8a, - 0x60, 0xb9, 0x25, 0x02, 0x6a, 0x9d, 0xc4, 0xad, 0xda, 0xbb, 0xde, 0xad, 0x98, 0x76, 0xf7, 0x4a, - 0x5b, 0x57, 0xac, 0x13, 0x4d, 0xd1, 0x48, 0x55, 0xd0, 0x16, 0xc2, 0x5f, 0x11, 0xe4, 0xf7, 0xa8, - 0xb0, 0x7b, 0x7f, 0x07, 0xa9, 0x7b, 0xef, 0x7e, 0x9c, 0x9f, 0xa6, 0xd7, 0x8c, 0xd2, 0xe8, 0x7f, - 0x30, 0x82, 0x6f, 0xc7, 0x6d, 0xde, 0x46, 0x9b, 0x3b, 0x4b, 0xdf, 0xce, 0xca, 0xe8, 0xfb, 0x59, - 0x19, 0xfd, 0x3a, 0x2b, 0xa3, 0xf7, 0x08, 0x75, 0xfe, 0x95, 0xa6, 0x3c, 0xfa, 0x1d, 0x00, 0x00, - 0xff, 0xff, 0x2d, 0x5f, 0x47, 0x93, 0xcf, 0x07, 0x00, 0x00, + proto.RegisterFile("envoy/service/discovery/v2/hds.proto", fileDescriptor_hds_faa1cb41ff6b4fa5) +} + +var fileDescriptor_hds_faa1cb41ff6b4fa5 = []byte{ + // 757 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0xc1, 0x6f, 0x12, 0x4f, + 0x14, 0x66, 0x68, 0x7f, 0x3f, 0xe9, 0x2b, 0x22, 0x1d, 0x2b, 0x22, 0x36, 0xb4, 0x6e, 0xaa, 0x21, + 0x35, 0x2e, 0x0d, 0xc6, 0x98, 0xb4, 0xf1, 0x52, 0x68, 0x83, 0x89, 0xa9, 0x64, 0xa8, 0x37, 0x13, + 0xb2, 0x2c, 0xd3, 0xb2, 0x71, 0xbb, 0xb3, 0xee, 0x0c, 0x44, 0xae, 0x9e, 0x34, 0x5e, 0x4c, 0x7a, + 0xf6, 0x8f, 0x30, 0xfe, 0x13, 0x1e, 0x4d, 0xbc, 0x79, 0x32, 0x4d, 0xff, 0x10, 0xc3, 0xcc, 0xec, + 0xb2, 0x94, 0x82, 0xed, 0xcd, 0x1b, 0xfb, 0xe6, 0x7b, 0xef, 0x7d, 0xdf, 0xfb, 0xde, 0x0c, 0xb0, + 0x4e, 0xbd, 0x3e, 0x1b, 0x94, 0x39, 0x0d, 0xfa, 0x8e, 0x4d, 0xcb, 0x1d, 0x87, 0xdb, 0xac, 0x4f, + 0x83, 0x41, 0xb9, 0x5f, 0x29, 0x77, 0x3b, 0xdc, 0xf4, 0x03, 0x26, 0x18, 0x2e, 0x48, 0x94, 0xa9, + 0x51, 0x66, 0x84, 0x32, 0xfb, 0x95, 0xc2, 0x8a, 0xaa, 0x60, 0xf9, 0xce, 0x30, 0xc7, 0x66, 0x01, + 0x2d, 0xb7, 0x2d, 0x4e, 0x55, 0x66, 0x61, 0x7d, 0xf2, 0xb4, 0x4b, 0x2d, 0x57, 0x74, 0x5b, 0x76, + 0x97, 0xda, 0x6f, 0x2e, 0x44, 0x51, 0xaf, 0xe3, 0x33, 0xc7, 0x13, 0xd1, 0x0f, 0x8d, 0x5a, 0x39, + 0x62, 0xec, 0xc8, 0xa5, 0x12, 0x66, 0x79, 0x1e, 0x13, 0x96, 0x70, 0x98, 0xa7, 0x39, 0x16, 0x8a, + 0xfa, 0x54, 0x7e, 0xb5, 0x7b, 0x87, 0xe5, 0x4e, 0x2f, 0x90, 0x00, 0x75, 0x6e, 0x7c, 0x41, 0x00, + 0x55, 0xcb, 0xb7, 0xda, 0x8e, 0xeb, 0x88, 0x01, 0xa6, 0x90, 0x8b, 0x13, 0x69, 0x49, 0x90, 0xcd, + 0x5c, 0x9e, 0x47, 0x6b, 0x73, 0xa5, 0x4c, 0xa5, 0x6c, 0x4e, 0xd7, 0x6c, 0x8e, 0xea, 0x98, 0x0d, + 0x9d, 0x47, 0x96, 0x55, 0xb9, 0xea, 0xb0, 0x5a, 0x18, 0xe4, 0x46, 0x09, 0x52, 0xe1, 0x07, 0x4e, + 0xc1, 0x7c, 0xfd, 0xe0, 0xa0, 0x91, 0x4d, 0xe0, 0x6b, 0x30, 0x77, 0x50, 0x6d, 0x64, 0x11, 0x5e, + 0x80, 0xff, 0xc8, 0x6e, 0xed, 0x79, 0x33, 0x9b, 0x34, 0x3e, 0x22, 0xc0, 0xf5, 0x51, 0x09, 0x42, + 0xdf, 0xf6, 0x28, 0x17, 0xf8, 0x21, 0xcc, 0x7b, 0xac, 0x43, 0xf3, 0x68, 0x0d, 0x95, 0x16, 0x2b, + 0xb7, 0x35, 0x2b, 0xcb, 0x77, 0x86, 0x3c, 0x86, 0xf3, 0x34, 0xf7, 0x59, 0x87, 0x12, 0x09, 0xc2, + 0x7b, 0x00, 0x76, 0x44, 0x2d, 0x9f, 0x94, 0x29, 0x0f, 0x2e, 0x27, 0x84, 0xc4, 0x32, 0x8d, 0x13, + 0x04, 0x99, 0x5d, 0x3d, 0x7c, 0xc5, 0x09, 0x6f, 0x43, 0x2a, 0xb4, 0x43, 0x73, 0x59, 0x1d, 0xe7, + 0x12, 0x99, 0x15, 0x26, 0x92, 0x28, 0x01, 0xd7, 0xe0, 0xba, 0x1e, 0x36, 0x17, 0x96, 0xe8, 0x71, + 0x49, 0x2d, 0x73, 0xbe, 0x82, 0x54, 0xa3, 0xda, 0x35, 0x25, 0x8c, 0xa4, 0xbb, 0xb1, 0x2f, 0x83, + 0x41, 0x6e, 0x9c, 0x14, 0xa1, 0xdc, 0x67, 0x1e, 0xa7, 0xf8, 0x15, 0x64, 0xc3, 0x5e, 0xbc, 0xa5, + 0x72, 0xa4, 0x8d, 0x8b, 0x95, 0x8d, 0x59, 0xea, 0xcf, 0x55, 0xbb, 0x11, 0xd5, 0x50, 0x01, 0xe3, + 0x73, 0x12, 0x36, 0x26, 0x2d, 0x79, 0x19, 0x4c, 0x61, 0xd1, 0x86, 0xe5, 0xb1, 0x95, 0x0a, 0x14, + 0x5e, 0x8f, 0xcb, 0x9c, 0xc5, 0x64, 0xb2, 0x4b, 0x3d, 0x41, 0x70, 0x77, 0x72, 0x1d, 0x3c, 0xc8, + 0x87, 0x2c, 0xb5, 0xd0, 0x56, 0xa0, 0xfb, 0x6b, 0xbf, 0x2b, 0x57, 0x50, 0xac, 0x33, 0xeb, 0x09, + 0x92, 0xa3, 0x17, 0x9e, 0xec, 0x64, 0x20, 0xad, 0x65, 0xb4, 0xc4, 0xc0, 0xa7, 0xc6, 0x27, 0x04, + 0x4b, 0x2f, 0x98, 0x6d, 0x0d, 0xd7, 0x24, 0x2c, 0xc6, 0xf1, 0x53, 0x48, 0xb9, 0x3a, 0xa8, 0xd5, + 0xde, 0xbd, 0xc0, 0xda, 0x30, 0x8f, 0x44, 0x60, 0xfc, 0x0c, 0x16, 0xa2, 0xa1, 0xe7, 0x93, 0xd2, + 0xb1, 0xbf, 0xae, 0xd5, 0x28, 0xc3, 0xf8, 0x85, 0x00, 0x57, 0xdd, 0x1e, 0x17, 0x34, 0x88, 0x4d, + 0x10, 0xdf, 0x83, 0xb4, 0xad, 0xa2, 0x2d, 0xcf, 0x3a, 0x56, 0x77, 0x67, 0x81, 0x2c, 0xea, 0xd8, + 0xbe, 0x75, 0x4c, 0x71, 0x35, 0xda, 0x48, 0xe9, 0x55, 0xd8, 0xbc, 0x38, 0x75, 0x23, 0x95, 0x0b, + 0xe9, 0x98, 0x25, 0x1c, 0xbf, 0x06, 0x1c, 0x2a, 0x69, 0x8d, 0x64, 0xcc, 0xc9, 0x4a, 0x8f, 0x66, + 0xd9, 0x30, 0x31, 0x41, 0xb2, 0xe4, 0x9e, 0x0f, 0x19, 0x5f, 0x11, 0x2c, 0xc7, 0x7a, 0x37, 0x7d, + 0x6a, 0x3b, 0x87, 0x0e, 0x0d, 0x70, 0x1b, 0x6e, 0x85, 0xf2, 0xc6, 0x35, 0xa8, 0x95, 0x9f, 0xb9, + 0x68, 0x93, 0xd3, 0x22, 0x37, 0xed, 0x89, 0x18, 0xc7, 0x4f, 0x20, 0xe5, 0x78, 0x82, 0x06, 0x7d, + 0xcb, 0xd5, 0x7b, 0x75, 0xc7, 0x54, 0x0f, 0xac, 0x19, 0x3e, 0xb0, 0x66, 0x4d, 0x3f, 0xb0, 0x24, + 0x82, 0x56, 0xce, 0x92, 0x90, 0x53, 0x75, 0x6a, 0x61, 0xd7, 0xa6, 0xa2, 0x81, 0x4f, 0x10, 0x2c, + 0x35, 0x45, 0x40, 0xad, 0xe3, 0xb8, 0x55, 0x7b, 0x57, 0xbb, 0x15, 0xd3, 0xee, 0x5e, 0x61, 0xf3, + 0x92, 0x75, 0xa2, 0x29, 0x1a, 0x89, 0x12, 0xda, 0x44, 0xf8, 0x1b, 0x82, 0xec, 0x1e, 0x15, 0x76, + 0xf7, 0xdf, 0x20, 0x75, 0xff, 0xfd, 0xcf, 0xb3, 0x93, 0xe4, 0xaa, 0x51, 0x18, 0xfe, 0x0f, 0x46, + 0xf0, 0xad, 0xb8, 0xcd, 0x5b, 0x68, 0x63, 0x67, 0xfb, 0xfb, 0x69, 0x11, 0xfd, 0x38, 0x2d, 0xa2, + 0xdf, 0xa7, 0x45, 0x04, 0x25, 0x87, 0xa9, 0x46, 0x7e, 0xc0, 0xde, 0x0d, 0x66, 0xf4, 0x6c, 0xa0, + 0x0f, 0x08, 0xb5, 0xff, 0x97, 0x06, 0x3e, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x59, 0x34, 0x7f, + 0x7f, 0xfb, 0x07, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.go index bffee9241691..43bd7b84cb2d 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.go @@ -39,7 +39,7 @@ func (m *SdsDummy) Reset() { *m = SdsDummy{} } func (m *SdsDummy) String() string { return proto.CompactTextString(m) } func (*SdsDummy) ProtoMessage() {} func (*SdsDummy) Descriptor() ([]byte, []int) { - return fileDescriptor_sds_e7a05ba2006c8ca8, []int{0} + return fileDescriptor_sds_b4c12a2ca9e02474, []int{0} } func (m *SdsDummy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -422,24 +422,25 @@ var ( ) func init() { - proto.RegisterFile("envoy/service/discovery/v2/sds.proto", fileDescriptor_sds_e7a05ba2006c8ca8) -} - -var fileDescriptor_sds_e7a05ba2006c8ca8 = []byte{ - // 240 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x49, 0xcd, 0x2b, 0xcb, - 0xaf, 0xd4, 0x2f, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0xd5, 0x4f, 0xc9, 0x2c, 0x4e, 0xce, 0x2f, - 0x4b, 0x2d, 0xaa, 0xd4, 0x2f, 0x33, 0xd2, 0x2f, 0x4e, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, - 0x17, 0x92, 0x02, 0xab, 0xd2, 0x83, 0xaa, 0xd2, 0x83, 0xab, 0xd2, 0x2b, 0x33, 0x92, 0x92, 0x81, - 0x98, 0x90, 0x58, 0x90, 0x09, 0xd2, 0x83, 0x90, 0x02, 0xeb, 0x94, 0x92, 0x49, 0xcf, 0xcf, 0x4f, - 0xcf, 0x49, 0x05, 0x4b, 0x27, 0xe6, 0xe5, 0xe5, 0x97, 0x24, 0x96, 0x64, 0xe6, 0xe7, 0x41, 0xcd, - 0x55, 0xe2, 0xe2, 0xe2, 0x08, 0x4e, 0x29, 0x76, 0x29, 0xcd, 0xcd, 0xad, 0x34, 0x7a, 0xcc, 0xc8, - 0x25, 0x16, 0x9c, 0x9a, 0x5c, 0x94, 0x5a, 0xe2, 0x02, 0x33, 0x23, 0x18, 0x62, 0x9f, 0x50, 0x18, - 0x17, 0x6f, 0x70, 0x49, 0x51, 0x6a, 0x62, 0x2e, 0x44, 0xbe, 0x58, 0x48, 0x4e, 0x0f, 0xe2, 0xa0, - 0xc4, 0x82, 0x4c, 0xbd, 0x32, 0x23, 0x3d, 0xb8, 0x86, 0xa0, 0xd4, 0xc2, 0xd2, 0xd4, 0xe2, 0x12, - 0x29, 0x79, 0x9c, 0xf2, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x4a, 0x0c, 0x1a, 0x8c, 0x06, 0x8c, - 0x42, 0x85, 0x5c, 0x3c, 0x6e, 0xa9, 0x25, 0xc9, 0x19, 0x54, 0x33, 0x56, 0xa1, 0xe9, 0xf2, 0x93, - 0xc9, 0x4c, 0x52, 0x4a, 0xa2, 0x28, 0x41, 0x61, 0x55, 0x0c, 0x31, 0xdf, 0x8a, 0x51, 0xcb, 0x89, - 0xe7, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x4c, 0x62, 0x03, - 0x07, 0x83, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x1a, 0x8c, 0xe4, 0x44, 0x86, 0x01, 0x00, 0x00, + proto.RegisterFile("envoy/service/discovery/v2/sds.proto", fileDescriptor_sds_b4c12a2ca9e02474) +} + +var fileDescriptor_sds_b4c12a2ca9e02474 = []byte{ + // 256 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x90, 0xb1, 0x4a, 0x04, 0x31, + 0x10, 0x86, 0x8d, 0x85, 0x48, 0xd0, 0x66, 0x41, 0x8b, 0x70, 0xac, 0xb2, 0x58, 0x1c, 0x16, 0x59, + 0x59, 0x1b, 0xb9, 0x52, 0x0e, 0x6b, 0x71, 0xc1, 0x3e, 0xee, 0x0e, 0x67, 0xc0, 0xcd, 0xe4, 0x32, + 0xb9, 0xe0, 0xb6, 0xbe, 0x82, 0x2f, 0x65, 0x29, 0xf8, 0x02, 0xb2, 0xfa, 0x20, 0x62, 0x72, 0x9e, + 0x58, 0x6c, 0x67, 0xfd, 0xfd, 0xff, 0x37, 0xc3, 0xcf, 0x4f, 0xc0, 0x04, 0xec, 0x4b, 0x02, 0x17, + 0x74, 0x03, 0x65, 0xab, 0xa9, 0xc1, 0x00, 0xae, 0x2f, 0x43, 0x55, 0x52, 0x4b, 0xd2, 0x3a, 0xf4, + 0x98, 0x89, 0x98, 0x92, 0xeb, 0x94, 0xdc, 0xa4, 0x64, 0xa8, 0xc4, 0x24, 0x19, 0x94, 0xd5, 0xdf, + 0x9d, 0x5f, 0x14, 0x9b, 0x62, 0xb2, 0x40, 0x5c, 0x3c, 0x40, 0xc4, 0xca, 0x18, 0xf4, 0xca, 0x6b, + 0x34, 0x6b, 0x6f, 0xc1, 0xf9, 0x6e, 0xdd, 0xd2, 0x7c, 0xd5, 0x75, 0x7d, 0xf5, 0xc1, 0xf8, 0x61, + 0x0d, 0x8d, 0x03, 0x3f, 0xff, 0x71, 0xd4, 0xe9, 0x5e, 0x76, 0xcb, 0xf7, 0x6b, 0xef, 0x40, 0x75, + 0x89, 0x53, 0x96, 0xcb, 0xf4, 0x90, 0xb2, 0x5a, 0x86, 0x4a, 0x6e, 0x0a, 0x37, 0xb0, 0x5c, 0x01, + 0x79, 0x71, 0x34, 0xca, 0xc9, 0xa2, 0x21, 0x28, 0xb6, 0xa6, 0xec, 0x8c, 0x65, 0x4b, 0xbe, 0x77, + 0x05, 0xbe, 0xb9, 0xff, 0x37, 0xed, 0xf1, 0xd3, 0xdb, 0xe7, 0xf3, 0xb6, 0x28, 0x0e, 0xfe, 0x4c, + 0x31, 0xa3, 0xe4, 0x9f, 0xb1, 0xd3, 0xcb, 0x8b, 0x97, 0x21, 0x67, 0xaf, 0x43, 0xce, 0xde, 0x87, + 0x9c, 0xf1, 0xa9, 0xc6, 0xa4, 0xb4, 0x0e, 0x1f, 0x7b, 0x39, 0xbe, 0xf2, 0x35, 0xbb, 0xdb, 0x89, + 0x93, 0x9d, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xd3, 0xd7, 0x7c, 0x41, 0xb2, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/load_stats/v2/lrs.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/load_stats/v2/lrs.pb.go index d1f0a9b56aa4..10541f14060f 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/load_stats/v2/lrs.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/load_stats/v2/lrs.pb.go @@ -45,7 +45,7 @@ func (m *LoadStatsRequest) Reset() { *m = LoadStatsRequest{} } func (m *LoadStatsRequest) String() string { return proto.CompactTextString(m) } func (*LoadStatsRequest) ProtoMessage() {} func (*LoadStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_lrs_ba823f5676edc18c, []int{0} + return fileDescriptor_lrs_81a95979ad14db9a, []int{0} } func (m *LoadStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -114,7 +114,7 @@ func (m *LoadStatsResponse) Reset() { *m = LoadStatsResponse{} } func (m *LoadStatsResponse) String() string { return proto.CompactTextString(m) } func (*LoadStatsResponse) ProtoMessage() {} func (*LoadStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_lrs_ba823f5676edc18c, []int{1} + return fileDescriptor_lrs_81a95979ad14db9a, []int{1} } func (m *LoadStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -851,36 +851,37 @@ var ( ) func init() { - proto.RegisterFile("envoy/service/load_stats/v2/lrs.proto", fileDescriptor_lrs_ba823f5676edc18c) -} - -var fileDescriptor_lrs_ba823f5676edc18c = []byte{ - // 423 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x8b, 0xd4, 0x30, - 0x18, 0x86, 0xfd, 0x66, 0x54, 0xc6, 0xac, 0xa2, 0x46, 0x65, 0xba, 0xb3, 0x32, 0x0c, 0x23, 0x6a, - 0x41, 0x4c, 0xa4, 0xde, 0x3d, 0xac, 0x8a, 0x0a, 0x8b, 0x60, 0xe7, 0xe6, 0xa5, 0x64, 0xda, 0xcf, - 0x12, 0xa8, 0x49, 0x4d, 0xd2, 0xc0, 0xfe, 0x03, 0xbd, 0x78, 0xf0, 0xe7, 0x78, 0xf2, 0xe8, 0x49, - 0xfc, 0x09, 0x32, 0x37, 0xff, 0x85, 0xb4, 0x69, 0x77, 0xbb, 0x1e, 0xc4, 0x5b, 0xc3, 0xf7, 0xbc, - 0x5f, 0xde, 0xf7, 0x6d, 0xc8, 0x5d, 0x54, 0x5e, 0x1f, 0x73, 0x8b, 0xc6, 0xcb, 0x1c, 0x79, 0xa5, - 0x45, 0x91, 0x59, 0x27, 0x9c, 0xe5, 0x3e, 0xe1, 0x95, 0xb1, 0xac, 0x36, 0xda, 0x69, 0x7a, 0xd0, - 0x61, 0xac, 0xc7, 0xd8, 0x29, 0xc6, 0x7c, 0xb2, 0xb8, 0x1d, 0x76, 0x88, 0x5a, 0xb6, 0xa2, 0x5c, - 0x1b, 0xe4, 0x5b, 0x61, 0x31, 0x48, 0x17, 0xf7, 0xcf, 0x4c, 0x51, 0x15, 0xb5, 0x96, 0xca, 0x85, - 0x9b, 0x0c, 0xd6, 0xda, 0xb8, 0x1e, 0x5c, 0x96, 0x5a, 0x97, 0x15, 0xf2, 0xee, 0xb4, 0x6d, 0xde, - 0xf1, 0xa2, 0x31, 0xc2, 0x49, 0xad, 0xfa, 0xf9, 0xdc, 0x8b, 0x4a, 0x16, 0xc2, 0x21, 0x1f, 0x3e, - 0xc2, 0x60, 0xfd, 0x09, 0xc8, 0xb5, 0x23, 0x2d, 0x8a, 0x4d, 0x6b, 0x28, 0xc5, 0x0f, 0x0d, 0x5a, - 0x47, 0x1f, 0x90, 0xf3, 0x4a, 0x17, 0x18, 0xc1, 0x0a, 0xe2, 0xbd, 0x64, 0xce, 0x42, 0x00, 0x51, - 0x4b, 0xe6, 0x13, 0xd6, 0x7a, 0x64, 0xaf, 0x75, 0x81, 0x69, 0x07, 0xd1, 0x97, 0xe4, 0x4a, 0x5e, - 0x35, 0xd6, 0xa1, 0x09, 0xa9, 0xa2, 0xc9, 0x6a, 0x1a, 0xef, 0x25, 0x77, 0xce, 0xaa, 0x06, 0xef, - 0xec, 0x69, 0x60, 0xc3, 0x7d, 0x97, 0xf3, 0xd1, 0x69, 0xfd, 0x03, 0xc8, 0xf5, 0x91, 0x17, 0x5b, - 0x6b, 0x65, 0x91, 0xde, 0x23, 0xb3, 0x9e, 0xb2, 0x11, 0xac, 0xa6, 0xf1, 0xa5, 0x43, 0xf2, 0xf5, - 0xf7, 0xb7, 0xe9, 0x85, 0x2f, 0x30, 0x99, 0x41, 0x7a, 0x32, 0xa3, 0x6f, 0xc8, 0x7c, 0xd4, 0x8b, - 0x54, 0x65, 0x26, 0x95, 0x43, 0xe3, 0x45, 0x15, 0x4d, 0xba, 0x1c, 0xfb, 0x2c, 0x94, 0xc4, 0x86, - 0x92, 0xd8, 0xb3, 0xbe, 0xa4, 0xf4, 0x56, 0xab, 0x4c, 0x07, 0xe1, 0xab, 0x5e, 0x47, 0x9f, 0x90, - 0x83, 0xb0, 0x2d, 0x1b, 0xec, 0x67, 0xa5, 0x11, 0xaa, 0xa9, 0x84, 0x91, 0xee, 0x38, 0x9a, 0xae, - 0x20, 0x9e, 0xa5, 0xfb, 0x01, 0x79, 0xde, 0x13, 0x2f, 0x4e, 0x81, 0xe4, 0x33, 0x90, 0x9b, 0x47, - 0xe3, 0xcd, 0x9b, 0xf0, 0x06, 0xa8, 0x27, 0x57, 0x37, 0xce, 0xa0, 0x78, 0x7f, 0x12, 0x97, 0x3e, - 0x64, 0xff, 0x78, 0x26, 0xec, 0xef, 0x5f, 0xb4, 0x60, 0xff, 0x8b, 0x87, 0x16, 0xd7, 0xe7, 0x62, - 0x78, 0x04, 0x87, 0x37, 0xbe, 0xef, 0x96, 0xf0, 0x73, 0xb7, 0x84, 0x5f, 0xbb, 0x25, 0xbc, 0x9d, - 0xf8, 0xe4, 0x23, 0xc0, 0xf6, 0x62, 0xd7, 0xc7, 0xe3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5d, - 0x05, 0x44, 0x67, 0xcf, 0x02, 0x00, 0x00, + proto.RegisterFile("envoy/service/load_stats/v2/lrs.proto", fileDescriptor_lrs_81a95979ad14db9a) +} + +var fileDescriptor_lrs_81a95979ad14db9a = []byte{ + // 436 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0xaa, 0xd3, 0x40, + 0x14, 0x86, 0x3d, 0xad, 0x4a, 0x9d, 0xab, 0xa8, 0x41, 0x69, 0x6e, 0xaf, 0x94, 0x52, 0x51, 0x23, + 0xe2, 0x8c, 0xc4, 0xbd, 0xc8, 0x55, 0x51, 0xe1, 0x22, 0x9a, 0xee, 0xdc, 0x94, 0x69, 0x73, 0x2c, + 0x03, 0x71, 0x4e, 0x9c, 0x99, 0x0c, 0xf6, 0x0d, 0x74, 0xe3, 0xc2, 0xc7, 0x71, 0xe5, 0xd2, 0x95, + 0xf8, 0x08, 0xd2, 0x9d, 0x6f, 0x21, 0xcd, 0x24, 0xf7, 0xe6, 0xba, 0x28, 0xee, 0x32, 0x9c, 0xef, + 0xff, 0xe7, 0x3f, 0x7f, 0x86, 0xdd, 0x42, 0xed, 0x69, 0x2d, 0x2c, 0x1a, 0xaf, 0x96, 0x28, 0x0a, + 0x92, 0xf9, 0xdc, 0x3a, 0xe9, 0xac, 0xf0, 0xa9, 0x28, 0x8c, 0xe5, 0xa5, 0x21, 0x47, 0xd1, 0x41, + 0x8d, 0xf1, 0x06, 0xe3, 0x27, 0x18, 0xf7, 0xe9, 0xe8, 0x46, 0xf0, 0x90, 0xa5, 0xda, 0x8a, 0x96, + 0x64, 0x50, 0x2c, 0xa4, 0xc5, 0x20, 0x1d, 0xdd, 0x39, 0x35, 0x45, 0x9d, 0x97, 0xa4, 0xb4, 0x0b, + 0x37, 0x19, 0x2c, 0xc9, 0xb8, 0x06, 0x1c, 0xaf, 0x88, 0x56, 0x05, 0x8a, 0xfa, 0xb4, 0xa8, 0xde, + 0x89, 0xbc, 0x32, 0xd2, 0x29, 0xd2, 0xcd, 0x7c, 0xe8, 0x65, 0xa1, 0x72, 0xe9, 0x50, 0xb4, 0x1f, + 0x61, 0x30, 0xfd, 0x0c, 0xec, 0xca, 0x11, 0xc9, 0x7c, 0xb6, 0x0d, 0x94, 0xe1, 0x87, 0x0a, 0xad, + 0x8b, 0xee, 0xb1, 0xb3, 0x9a, 0x72, 0x8c, 0x61, 0x02, 0xc9, 0x5e, 0x3a, 0xe4, 0x61, 0x01, 0x59, + 0x2a, 0xee, 0x53, 0xbe, 0xcd, 0xc8, 0x5f, 0x51, 0x8e, 0x59, 0x0d, 0x45, 0x2f, 0xd8, 0xa5, 0x65, + 0x51, 0x59, 0x87, 0x26, 0x6c, 0x15, 0xf7, 0x26, 0xfd, 0x64, 0x2f, 0xbd, 0x79, 0x5a, 0xd5, 0x66, + 0xe7, 0x4f, 0x02, 0x1b, 0xee, 0xbb, 0xb8, 0xec, 0x9c, 0xa6, 0x3f, 0x81, 0x5d, 0xed, 0x64, 0xb1, + 0x25, 0x69, 0x8b, 0xd1, 0x6d, 0x36, 0x68, 0x28, 0x1b, 0xc3, 0xa4, 0x9f, 0x5c, 0x38, 0x64, 0xdf, + 0xfe, 0x7c, 0xef, 0x9f, 0xfb, 0x0a, 0xbd, 0x01, 0x64, 0xc7, 0xb3, 0xe8, 0x0d, 0x1b, 0x76, 0x7a, + 0x51, 0x7a, 0x35, 0x57, 0xda, 0xa1, 0xf1, 0xb2, 0x88, 0x7b, 0xf5, 0x1e, 0xfb, 0x3c, 0x94, 0xc4, + 0xdb, 0x92, 0xf8, 0xd3, 0xa6, 0xa4, 0xec, 0xfa, 0x56, 0x99, 0xb5, 0xc2, 0x97, 0x8d, 0x2e, 0x7a, + 0xc4, 0x0e, 0x82, 0xdb, 0xbc, 0x8d, 0x3f, 0x5f, 0x19, 0xa9, 0xab, 0x42, 0x1a, 0xe5, 0xd6, 0x71, + 0x7f, 0x02, 0xc9, 0x20, 0xdb, 0x0f, 0xc8, 0xb3, 0x86, 0x78, 0x7e, 0x02, 0xa4, 0x5f, 0x80, 0x5d, + 0x3b, 0xea, 0x3a, 0xcf, 0xc2, 0x1b, 0x88, 0x3c, 0xbb, 0x3c, 0x73, 0x06, 0xe5, 0xfb, 0xe3, 0x75, + 0xa3, 0xfb, 0x7c, 0xc7, 0x33, 0xe1, 0xff, 0xfe, 0xa2, 0x11, 0xff, 0x5f, 0x3c, 0xb4, 0x38, 0x3d, + 0x93, 0xc0, 0x03, 0x38, 0x7c, 0xfc, 0x63, 0x33, 0x86, 0x5f, 0x9b, 0x31, 0xfc, 0xde, 0x8c, 0x81, + 0xdd, 0x55, 0x14, 0x5c, 0x4a, 0x43, 0x1f, 0xd7, 0xbb, 0x0c, 0x5f, 0xc3, 0xdb, 0x9e, 0x4f, 0x3f, + 0x01, 0x2c, 0xce, 0xd7, 0xe5, 0x3d, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x74, 0x92, 0x35, + 0xfc, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/metrics/v2/metrics_service.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/metrics/v2/metrics_service.pb.go index 7ace21da5a02..13c2ebe58996 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/metrics/v2/metrics_service.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/metrics/v2/metrics_service.pb.go @@ -38,7 +38,7 @@ func (m *StreamMetricsResponse) Reset() { *m = StreamMetricsResponse{} } func (m *StreamMetricsResponse) String() string { return proto.CompactTextString(m) } func (*StreamMetricsResponse) ProtoMessage() {} func (*StreamMetricsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_service_b259d557d38452b1, []int{0} + return fileDescriptor_metrics_service_4ca87143eeb6a10c, []int{0} } func (m *StreamMetricsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -82,7 +82,7 @@ func (m *StreamMetricsMessage) Reset() { *m = StreamMetricsMessage{} } func (m *StreamMetricsMessage) String() string { return proto.CompactTextString(m) } func (*StreamMetricsMessage) ProtoMessage() {} func (*StreamMetricsMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_service_b259d557d38452b1, []int{1} + return fileDescriptor_metrics_service_4ca87143eeb6a10c, []int{1} } func (m *StreamMetricsMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -137,7 +137,7 @@ func (m *StreamMetricsMessage_Identifier) Reset() { *m = StreamMetricsMe func (m *StreamMetricsMessage_Identifier) String() string { return proto.CompactTextString(m) } func (*StreamMetricsMessage_Identifier) ProtoMessage() {} func (*StreamMetricsMessage_Identifier) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_service_b259d557d38452b1, []int{1, 0} + return fileDescriptor_metrics_service_4ca87143eeb6a10c, []int{1, 0} } func (m *StreamMetricsMessage_Identifier) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -812,30 +812,31 @@ var ( ) func init() { - proto.RegisterFile("envoy/service/metrics/v2/metrics_service.proto", fileDescriptor_metrics_service_b259d557d38452b1) + proto.RegisterFile("envoy/service/metrics/v2/metrics_service.proto", fileDescriptor_metrics_service_4ca87143eeb6a10c) } -var fileDescriptor_metrics_service_b259d557d38452b1 = []byte{ - // 334 bytes of a gzipped FileDescriptorProto +var fileDescriptor_metrics_service_4ca87143eeb6a10c = []byte{ + // 348 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0x31, 0x4b, 0xc3, 0x40, - 0x14, 0xc7, 0xbd, 0x54, 0x1d, 0x5e, 0xad, 0x48, 0x54, 0x5a, 0x82, 0x94, 0xd2, 0xa9, 0xd3, 0x0b, - 0xc4, 0x41, 0x5c, 0x0b, 0x2a, 0x0e, 0x75, 0x48, 0x27, 0x5d, 0xca, 0x35, 0x79, 0xea, 0x41, 0x93, - 0x0b, 0xb9, 0x33, 0xd0, 0xd1, 0x45, 0xc4, 0x8f, 0xe4, 0xe4, 0xe8, 0xe8, 0x47, 0x90, 0x6e, 0x7e, - 0x0b, 0x49, 0xee, 0x52, 0x2d, 0x28, 0xe8, 0xf6, 0x92, 0xf7, 0xff, 0xff, 0xde, 0xff, 0xdd, 0x03, - 0xa4, 0xb4, 0x90, 0x73, 0x5f, 0x51, 0x5e, 0x88, 0x88, 0xfc, 0x84, 0x74, 0x2e, 0x22, 0xe5, 0x17, - 0x41, 0x5d, 0x4e, 0x6c, 0x0b, 0xb3, 0x5c, 0x6a, 0xe9, 0x76, 0x2a, 0x3d, 0xd6, 0x3f, 0xad, 0x08, - 0x8b, 0xc0, 0x3b, 0x30, 0x24, 0x9e, 0x89, 0xd2, 0x1d, 0xc9, 0x9c, 0xfc, 0x29, 0x57, 0xd6, 0xe7, - 0xb5, 0x6a, 0xa5, 0xf9, 0x6c, 0x17, 0x7c, 0x26, 0x62, 0xae, 0xc9, 0xaf, 0x0b, 0xd3, 0xe8, 0xb7, - 0x61, 0x7f, 0xac, 0x73, 0xe2, 0xc9, 0xc8, 0xe8, 0x43, 0x52, 0x99, 0x4c, 0x15, 0xf5, 0xef, 0x1d, - 0xd8, 0x5b, 0xe9, 0x8c, 0x48, 0x29, 0x7e, 0x43, 0xee, 0x25, 0x80, 0x88, 0x29, 0xd5, 0xe2, 0x5a, - 0x50, 0xde, 0x61, 0x3d, 0x36, 0x68, 0x06, 0xc7, 0xf8, 0x5b, 0x4c, 0xfc, 0x89, 0x81, 0xe7, 0x4b, - 0x40, 0xf8, 0x0d, 0xe6, 0x9e, 0x41, 0xab, 0xe2, 0x4c, 0xac, 0xbf, 0xe3, 0xf4, 0x1a, 0x83, 0x66, - 0xd0, 0x47, 0x21, 0xcb, 0xb8, 0x09, 0xe9, 0x5b, 0xba, 0x53, 0x18, 0xcd, 0x04, 0xa5, 0x1a, 0x0d, - 0xf3, 0x94, 0x27, 0x62, 0x36, 0x0f, 0xb7, 0x2a, 0xa3, 0x1d, 0xe3, 0x9d, 0x00, 0x7c, 0x8d, 0x70, - 0x8f, 0x60, 0x3d, 0x95, 0x31, 0xd9, 0xac, 0x6d, 0x9b, 0x95, 0x67, 0xa2, 0xcc, 0x57, 0x3e, 0x1c, - 0x5e, 0xc8, 0x98, 0x86, 0xf0, 0xfc, 0xf1, 0xd2, 0xd8, 0x78, 0x62, 0xce, 0x0e, 0x0b, 0x2b, 0x43, - 0xf0, 0xc0, 0x60, 0xdb, 0x22, 0xc7, 0x66, 0x33, 0x57, 0x43, 0x6b, 0x65, 0x23, 0x17, 0xff, 0xb7, - 0xba, 0xe7, 0xff, 0x51, 0xbf, 0x3c, 0xc4, 0xda, 0x80, 0x0d, 0x77, 0x5f, 0x17, 0x5d, 0xf6, 0xb6, - 0xe8, 0xb2, 0xf7, 0x45, 0x97, 0x5d, 0x39, 0x45, 0xf0, 0xc8, 0xd8, 0x74, 0xb3, 0xba, 0xe0, 0xe1, - 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x33, 0xa2, 0xd2, 0x53, 0x02, 0x00, 0x00, + 0x14, 0xc7, 0xbd, 0x54, 0x1d, 0x5e, 0xad, 0x48, 0x50, 0x5a, 0x82, 0x94, 0xd2, 0x41, 0x3a, 0x5d, + 0x20, 0x0e, 0xe2, 0xe0, 0x52, 0x50, 0x71, 0xa8, 0x48, 0x3a, 0xe9, 0x52, 0xae, 0xc9, 0x53, 0x0f, + 0x9a, 0x5c, 0xb8, 0x3b, 0x83, 0x1d, 0x5d, 0x44, 0xfc, 0x48, 0x4e, 0x8e, 0x8e, 0x7e, 0x04, 0xe9, + 0xe6, 0xb7, 0x90, 0xe4, 0x2e, 0xd5, 0x82, 0x05, 0xdd, 0x5e, 0xf2, 0xfe, 0xff, 0xdf, 0xfb, 0xbf, + 0x7b, 0x40, 0x31, 0xcd, 0xc5, 0xd4, 0x57, 0x28, 0x73, 0x1e, 0xa1, 0x9f, 0xa0, 0x96, 0x3c, 0x52, + 0x7e, 0x1e, 0x54, 0xe5, 0xc8, 0xb6, 0x68, 0x26, 0x85, 0x16, 0x6e, 0xab, 0xd4, 0xd3, 0xea, 0xa7, + 0x15, 0xd1, 0x3c, 0xf0, 0x76, 0x0d, 0x89, 0x65, 0xbc, 0x70, 0x47, 0x42, 0xa2, 0x3f, 0x66, 0xca, + 0xfa, 0xbc, 0x46, 0xa5, 0x34, 0x9f, 0xcd, 0x9c, 0x4d, 0x78, 0xcc, 0x34, 0xfa, 0x55, 0x61, 0x1a, + 0xdd, 0x26, 0xec, 0x0c, 0xb5, 0x44, 0x96, 0x0c, 0x8c, 0x3e, 0x44, 0x95, 0x89, 0x54, 0x61, 0xf7, + 0xc1, 0x81, 0xed, 0x85, 0xce, 0x00, 0x95, 0x62, 0x37, 0xe8, 0x5e, 0x02, 0xf0, 0x18, 0x53, 0xcd, + 0xaf, 0x39, 0xca, 0x16, 0xe9, 0x90, 0x5e, 0x3d, 0x38, 0xa4, 0xcb, 0x62, 0xd2, 0xdf, 0x18, 0xf4, + 0x6c, 0x0e, 0x08, 0x7f, 0xc0, 0xdc, 0x53, 0x68, 0x94, 0x9c, 0x91, 0xf5, 0xb7, 0x9c, 0x4e, 0xad, + 0x57, 0x0f, 0xba, 0x94, 0x8b, 0x22, 0x6e, 0x82, 0xfa, 0x16, 0xef, 0x14, 0x8d, 0x26, 0x1c, 0x53, + 0x4d, 0x0d, 0xf3, 0x84, 0x25, 0x7c, 0x32, 0x0d, 0x37, 0x4a, 0xa3, 0x1d, 0xe3, 0x1d, 0x03, 0x7c, + 0x8f, 0x70, 0x0f, 0x60, 0x35, 0x15, 0x31, 0xda, 0xac, 0x4d, 0x9b, 0x95, 0x65, 0xbc, 0xc8, 0x57, + 0x3c, 0x1c, 0x3d, 0x17, 0x31, 0xf6, 0xe1, 0xe5, 0xf3, 0xb5, 0xb6, 0xf6, 0x4c, 0x9c, 0x2d, 0x12, + 0x96, 0x86, 0xe0, 0x91, 0xc0, 0xa6, 0x45, 0x0e, 0xcd, 0x66, 0xae, 0x86, 0xc6, 0xc2, 0x46, 0x2e, + 0xfd, 0xdf, 0xea, 0x9e, 0xff, 0x47, 0xfd, 0xfc, 0x10, 0x2b, 0x3d, 0xd2, 0x3f, 0x7a, 0x9b, 0xb5, + 0xc9, 0xfb, 0xac, 0x4d, 0x3e, 0x66, 0x6d, 0x02, 0x7b, 0x5c, 0x18, 0x48, 0x26, 0xc5, 0xfd, 0x74, + 0x29, 0xef, 0x82, 0x5c, 0x39, 0x79, 0xf0, 0x44, 0xc8, 0x78, 0xbd, 0xbc, 0xf5, 0xfe, 0x57, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x6d, 0xc2, 0x8c, 0x72, 0x7d, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/ratelimit/v2/rls.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/ratelimit/v2/rls.pb.go index e1bb0ac059e4..f076a390ad71 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/ratelimit/v2/rls.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/ratelimit/v2/rls.pb.go @@ -54,7 +54,7 @@ func (x RateLimitResponse_Code) String() string { return proto.EnumName(RateLimitResponse_Code_name, int32(x)) } func (RateLimitResponse_Code) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_rls_fcfbfd85039b3384, []int{1, 0} + return fileDescriptor_rls_046826f7345d334e, []int{1, 0} } type RateLimitResponse_RateLimit_Unit int32 @@ -91,7 +91,7 @@ func (x RateLimitResponse_RateLimit_Unit) String() string { return proto.EnumName(RateLimitResponse_RateLimit_Unit_name, int32(x)) } func (RateLimitResponse_RateLimit_Unit) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_rls_fcfbfd85039b3384, []int{1, 0, 0} + return fileDescriptor_rls_046826f7345d334e, []int{1, 0, 0} } // Main message for a rate limit request. The rate limit service is designed to be fully generic @@ -121,7 +121,7 @@ func (m *RateLimitRequest) Reset() { *m = RateLimitRequest{} } func (m *RateLimitRequest) String() string { return proto.CompactTextString(m) } func (*RateLimitRequest) ProtoMessage() {} func (*RateLimitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_rls_fcfbfd85039b3384, []int{0} + return fileDescriptor_rls_046826f7345d334e, []int{0} } func (m *RateLimitRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -191,7 +191,7 @@ func (m *RateLimitResponse) Reset() { *m = RateLimitResponse{} } func (m *RateLimitResponse) String() string { return proto.CompactTextString(m) } func (*RateLimitResponse) ProtoMessage() {} func (*RateLimitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_rls_fcfbfd85039b3384, []int{1} + return fileDescriptor_rls_046826f7345d334e, []int{1} } func (m *RateLimitResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -256,7 +256,7 @@ func (m *RateLimitResponse_RateLimit) Reset() { *m = RateLimitResponse_R func (m *RateLimitResponse_RateLimit) String() string { return proto.CompactTextString(m) } func (*RateLimitResponse_RateLimit) ProtoMessage() {} func (*RateLimitResponse_RateLimit) Descriptor() ([]byte, []int) { - return fileDescriptor_rls_fcfbfd85039b3384, []int{1, 0} + return fileDescriptor_rls_046826f7345d334e, []int{1, 0} } func (m *RateLimitResponse_RateLimit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -315,7 +315,7 @@ func (m *RateLimitResponse_DescriptorStatus) Reset() { *m = RateLimitRes func (m *RateLimitResponse_DescriptorStatus) String() string { return proto.CompactTextString(m) } func (*RateLimitResponse_DescriptorStatus) ProtoMessage() {} func (*RateLimitResponse_DescriptorStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_rls_fcfbfd85039b3384, []int{1, 1} + return fileDescriptor_rls_046826f7345d334e, []int{1, 1} } func (m *RateLimitResponse_DescriptorStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1307,45 +1307,46 @@ var ( ) func init() { - proto.RegisterFile("envoy/service/ratelimit/v2/rls.proto", fileDescriptor_rls_fcfbfd85039b3384) -} - -var fileDescriptor_rls_fcfbfd85039b3384 = []byte{ - // 575 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0xdf, 0x6a, 0xd4, 0x40, - 0x14, 0xc6, 0x9b, 0xdd, 0xb8, 0x6d, 0x4f, 0xfa, 0x27, 0x9d, 0x0b, 0x5d, 0x82, 0xac, 0x65, 0x11, - 0x2d, 0x56, 0x13, 0x88, 0x17, 0x7a, 0x21, 0x85, 0xda, 0x56, 0x5a, 0xda, 0xee, 0x96, 0xd9, 0x6e, - 0xc5, 0x22, 0x84, 0xe9, 0xe6, 0x60, 0x07, 0xd2, 0x24, 0xce, 0x4c, 0x02, 0xde, 0xfb, 0x14, 0x3e, - 0x91, 0xde, 0xf9, 0x02, 0x82, 0xf6, 0x49, 0x24, 0x93, 0x6c, 0x76, 0xab, 0x08, 0xae, 0xde, 0x65, - 0xce, 0x39, 0xdf, 0x6f, 0xcf, 0x77, 0xce, 0xcc, 0xc2, 0x7d, 0x8c, 0xf3, 0xe4, 0x83, 0x27, 0x51, - 0xe4, 0x7c, 0x84, 0x9e, 0x60, 0x0a, 0x23, 0x7e, 0xc5, 0x95, 0x97, 0xfb, 0x9e, 0x88, 0xa4, 0x9b, - 0x8a, 0x44, 0x25, 0xc4, 0xd1, 0x55, 0x6e, 0x55, 0xe5, 0xd6, 0x55, 0x6e, 0xee, 0x3b, 0x77, 0x4b, - 0x02, 0x4b, 0x79, 0xa1, 0x19, 0x25, 0x02, 0xbd, 0x0b, 0x26, 0xb1, 0x54, 0x3a, 0x0f, 0x6e, 0x64, - 0x27, 0xf8, 0x09, 0xa2, 0xac, 0xbb, 0x93, 0xb3, 0x88, 0x87, 0x4c, 0xa1, 0x37, 0xfe, 0x28, 0x13, - 0xdd, 0x4f, 0x06, 0xd8, 0x94, 0x29, 0x3c, 0x2a, 0x8a, 0x29, 0xbe, 0xcf, 0x50, 0x2a, 0x72, 0x1b, - 0x5a, 0x61, 0x72, 0xc5, 0x78, 0xdc, 0x36, 0xd6, 0x8d, 0x8d, 0x45, 0x5a, 0x9d, 0xc8, 0x31, 0x58, - 0x21, 0xca, 0x91, 0xe0, 0xa9, 0x4a, 0x84, 0x6c, 0x37, 0xd6, 0x9b, 0x1b, 0x96, 0xbf, 0xe9, 0x96, - 0xdd, 0xb3, 0x94, 0xbb, 0xb9, 0x3f, 0xd5, 0x7c, 0x8d, 0xdd, 0xad, 0x35, 0x74, 0x5a, 0x4f, 0xee, - 0x81, 0x75, 0xc9, 0x95, 0x0c, 0x58, 0x18, 0x62, 0x1c, 0xb6, 0x9b, 0xeb, 0xc6, 0xc6, 0x32, 0x85, - 0x22, 0xb4, 0xad, 0x23, 0xdd, 0x6f, 0xb7, 0x60, 0x6d, 0xaa, 0x39, 0x99, 0x26, 0xb1, 0x44, 0x32, - 0x84, 0xa5, 0x24, 0x47, 0xc1, 0xa2, 0x28, 0x18, 0x25, 0x21, 0xea, 0x1e, 0x57, 0x7c, 0xdf, 0xfd, - 0xf3, 0x10, 0xdd, 0xdf, 0x20, 0xee, 0x4e, 0x12, 0x22, 0xb5, 0x2a, 0x4e, 0x71, 0x20, 0xe7, 0xb0, - 0x20, 0x15, 0x53, 0x99, 0xc4, 0xb1, 0xb3, 0xad, 0xd9, 0x90, 0x13, 0x9b, 0x03, 0xcd, 0xa1, 0x35, - 0x8f, 0x3c, 0x87, 0xf9, 0x4b, 0x64, 0x21, 0x0a, 0xd9, 0x6e, 0x6a, 0x74, 0xe7, 0xe6, 0xd0, 0x8a, - 0xb5, 0xba, 0xfb, 0xba, 0xe2, 0x8c, 0x45, 0x19, 0xd2, 0x71, 0xb9, 0xf3, 0xc5, 0x80, 0xc5, 0xfa, - 0xa7, 0xc8, 0x23, 0x58, 0x13, 0xe5, 0x8e, 0x64, 0x90, 0xa2, 0x08, 0xb2, 0x98, 0x2b, 0xed, 0x7f, - 0x99, 0xae, 0x8e, 0x13, 0x27, 0x28, 0x86, 0x31, 0x57, 0xe4, 0x04, 0x4c, 0x9d, 0x6e, 0xe8, 0xf1, - 0xbc, 0x98, 0xcd, 0x4b, 0x1d, 0x71, 0x0b, 0x16, 0xd5, 0xa4, 0xee, 0x16, 0x98, 0x9a, 0x6c, 0xc1, - 0xfc, 0xb0, 0x77, 0xd8, 0xeb, 0xbf, 0xee, 0xd9, 0x73, 0x04, 0xa0, 0x35, 0xd8, 0xdb, 0xe9, 0xf7, - 0x76, 0x6d, 0xa3, 0xf8, 0x3e, 0x3e, 0xe8, 0x0d, 0x4f, 0xf7, 0xec, 0x06, 0x59, 0x00, 0x73, 0xbf, - 0x3f, 0xa4, 0x76, 0x93, 0xcc, 0x43, 0x73, 0x77, 0xfb, 0x8d, 0x6d, 0x3a, 0x3f, 0x0c, 0xb0, 0x7f, - 0x1d, 0x12, 0x79, 0x05, 0xe6, 0x7f, 0x6e, 0x51, 0xeb, 0xc9, 0x5b, 0x58, 0x1e, 0x65, 0x42, 0x60, - 0xac, 0x02, 0x2d, 0xd0, 0xbe, 0x2d, 0xff, 0xd9, 0x3f, 0xfa, 0xa6, 0x4b, 0x15, 0xad, 0x1c, 0xfc, - 0x43, 0x58, 0xd5, 0xaa, 0x40, 0x60, 0xf1, 0x12, 0x78, 0xfc, 0xae, 0xba, 0xae, 0x2b, 0x51, 0xa9, - 0xaf, 0xa2, 0xdd, 0x4d, 0x30, 0xf5, 0x6d, 0xba, 0x31, 0xa3, 0x16, 0x34, 0xfa, 0x87, 0xb6, 0x41, - 0x56, 0x00, 0xfa, 0x67, 0x7b, 0x34, 0x38, 0x3a, 0x38, 0x3e, 0x38, 0xb5, 0x1b, 0xfe, 0xc7, 0xe9, - 0xc7, 0x37, 0x28, 0x3b, 0x24, 0x29, 0xac, 0x0e, 0x2e, 0x93, 0x2c, 0x0a, 0x27, 0x6b, 0x7f, 0xfc, - 0x97, 0x26, 0xf4, 0x05, 0x70, 0x9e, 0xcc, 0x64, 0xb9, 0x3b, 0xf7, 0xd2, 0xfe, 0x7c, 0xdd, 0x31, - 0xbe, 0x5e, 0x77, 0x8c, 0xef, 0xd7, 0x1d, 0xe3, 0xbc, 0x91, 0xfb, 0x17, 0x2d, 0xfd, 0xe7, 0xf0, - 0xf4, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xea, 0x20, 0x5c, 0x25, 0xbf, 0x04, 0x00, 0x00, + proto.RegisterFile("envoy/service/ratelimit/v2/rls.proto", fileDescriptor_rls_046826f7345d334e) +} + +var fileDescriptor_rls_046826f7345d334e = []byte{ + // 588 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0xdf, 0x4e, 0x13, 0x41, + 0x14, 0xc6, 0x99, 0xb6, 0x16, 0x38, 0xe5, 0xcf, 0x32, 0x17, 0xda, 0x34, 0xa6, 0x92, 0xc6, 0x68, + 0x23, 0xba, 0x4d, 0xd6, 0x0b, 0xbd, 0x20, 0x24, 0x08, 0x18, 0x08, 0xd0, 0x92, 0x29, 0xc5, 0x48, + 0x4c, 0x36, 0x43, 0xf7, 0x44, 0x26, 0x59, 0x76, 0xd6, 0x99, 0xe9, 0x46, 0xee, 0x7d, 0x0a, 0x9f, + 0x48, 0xef, 0x7c, 0x01, 0x13, 0xe5, 0x49, 0xcc, 0xce, 0x6e, 0xb7, 0x45, 0xa3, 0x11, 0xbd, 0xdb, + 0x39, 0xe7, 0x7c, 0xbf, 0x9e, 0xef, 0x9c, 0x99, 0xc2, 0x7d, 0x8c, 0x12, 0x79, 0xd9, 0xd1, 0xa8, + 0x12, 0x31, 0xc4, 0x8e, 0xe2, 0x06, 0x43, 0x71, 0x21, 0x4c, 0x27, 0xf1, 0x3a, 0x2a, 0xd4, 0x6e, + 0xac, 0xa4, 0x91, 0xb4, 0x61, 0xab, 0xdc, 0xbc, 0xca, 0x2d, 0xaa, 0xdc, 0xc4, 0x6b, 0xdc, 0xcd, + 0x08, 0x3c, 0x16, 0xa9, 0x66, 0x28, 0x15, 0x76, 0xce, 0xb8, 0xc6, 0x4c, 0xd9, 0x78, 0x70, 0x2d, + 0x3b, 0xc1, 0x4f, 0x10, 0x59, 0xdd, 0x9d, 0x84, 0x87, 0x22, 0xe0, 0x06, 0x3b, 0xe3, 0x8f, 0x2c, + 0xd1, 0xfa, 0x48, 0xc0, 0x61, 0xdc, 0xe0, 0x41, 0x5a, 0xcc, 0xf0, 0xdd, 0x08, 0xb5, 0xa1, 0xb7, + 0xa1, 0x1a, 0xc8, 0x0b, 0x2e, 0xa2, 0x3a, 0x59, 0x25, 0xed, 0x79, 0x96, 0x9f, 0xe8, 0x21, 0xd4, + 0x02, 0xd4, 0x43, 0x25, 0x62, 0x23, 0x95, 0xae, 0x97, 0x56, 0xcb, 0xed, 0x9a, 0xb7, 0xe6, 0x66, + 0xdd, 0xf3, 0x58, 0xb8, 0x89, 0x37, 0xd5, 0x7c, 0x81, 0xdd, 0x2e, 0x34, 0x6c, 0x5a, 0x4f, 0xef, + 0x41, 0xed, 0x5c, 0x18, 0xed, 0xf3, 0x20, 0xc0, 0x28, 0xa8, 0x97, 0x57, 0x49, 0x7b, 0x91, 0x41, + 0x1a, 0xda, 0xb4, 0x91, 0xd6, 0xd7, 0x5b, 0xb0, 0x32, 0xd5, 0x9c, 0x8e, 0x65, 0xa4, 0x91, 0x0e, + 0x60, 0x41, 0x26, 0xa8, 0x78, 0x18, 0xfa, 0x43, 0x19, 0xa0, 0xed, 0x71, 0xc9, 0xf3, 0xdc, 0xdf, + 0x0f, 0xd1, 0xfd, 0x05, 0xe2, 0x6e, 0xc9, 0x00, 0x59, 0x2d, 0xe7, 0xa4, 0x07, 0x7a, 0x0a, 0x73, + 0xda, 0x70, 0x33, 0xd2, 0x38, 0x76, 0xb6, 0x71, 0x33, 0xe4, 0xc4, 0x66, 0xdf, 0x72, 0x58, 0xc1, + 0xa3, 0xcf, 0x61, 0xf6, 0x1c, 0x79, 0x80, 0x4a, 0xd7, 0xcb, 0x16, 0xdd, 0xbc, 0x3e, 0xb4, 0x74, + 0xad, 0xee, 0xae, 0xad, 0x38, 0xe1, 0xe1, 0x08, 0xd9, 0xb8, 0xbc, 0xf1, 0x99, 0xc0, 0x7c, 0xf1, + 0x53, 0xf4, 0x11, 0xac, 0xa8, 0x6c, 0x47, 0xda, 0x8f, 0x51, 0xf9, 0xa3, 0x48, 0x18, 0xeb, 0x7f, + 0x91, 0x2d, 0x8f, 0x13, 0x47, 0xa8, 0x06, 0x91, 0x30, 0xf4, 0x08, 0x2a, 0x36, 0x5d, 0xb2, 0xe3, + 0x59, 0xbf, 0x99, 0x97, 0x22, 0xe2, 0xa6, 0x2c, 0x66, 0x49, 0xad, 0x0d, 0xa8, 0x58, 0x72, 0x0d, + 0x66, 0x07, 0xdd, 0xfd, 0x6e, 0xef, 0x55, 0xd7, 0x99, 0xa1, 0x00, 0xd5, 0xfe, 0xce, 0x56, 0xaf, + 0xbb, 0xed, 0x90, 0xf4, 0xfb, 0x70, 0xaf, 0x3b, 0x38, 0xde, 0x71, 0x4a, 0x74, 0x0e, 0x2a, 0xbb, + 0xbd, 0x01, 0x73, 0xca, 0x74, 0x16, 0xca, 0xdb, 0x9b, 0xaf, 0x9d, 0x4a, 0xe3, 0x3b, 0x01, 0xe7, + 0xe7, 0x21, 0xd1, 0x97, 0x50, 0xf9, 0xcf, 0x2d, 0x5a, 0x3d, 0x7d, 0x03, 0x8b, 0xc3, 0x91, 0x52, + 0x18, 0x19, 0xdf, 0x0a, 0xac, 0xef, 0x9a, 0xf7, 0xec, 0x1f, 0x7d, 0xb3, 0x85, 0x9c, 0x96, 0x0d, + 0xfe, 0x21, 0x2c, 0x5b, 0x95, 0xaf, 0x30, 0x7d, 0x09, 0x22, 0x7a, 0x9b, 0x5f, 0xd7, 0xa5, 0x30, + 0xd3, 0xe7, 0xd1, 0xd6, 0x1a, 0x54, 0xec, 0x6d, 0xba, 0x36, 0xa3, 0x2a, 0x94, 0x7a, 0xfb, 0x0e, + 0xa1, 0x4b, 0x00, 0xbd, 0x93, 0x1d, 0xe6, 0x1f, 0xec, 0x1d, 0xee, 0x1d, 0x3b, 0x25, 0xef, 0xc3, + 0xf4, 0xe3, 0xeb, 0x67, 0x1d, 0xd2, 0x18, 0x96, 0xfb, 0xe7, 0x72, 0x14, 0x06, 0x93, 0xb5, 0x3f, + 0xfe, 0x4b, 0x13, 0xf6, 0x02, 0x34, 0x9e, 0xdc, 0xc8, 0x72, 0x6b, 0xe6, 0xc5, 0xfa, 0xa7, 0xab, + 0x26, 0xf9, 0x72, 0xd5, 0x24, 0xdf, 0xae, 0x9a, 0x04, 0xda, 0x42, 0x66, 0x80, 0x58, 0xc9, 0xf7, + 0x97, 0x7f, 0x60, 0x1d, 0x91, 0xd3, 0x52, 0xe2, 0x9d, 0x55, 0xed, 0x1f, 0xc9, 0xd3, 0x1f, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x64, 0xf7, 0x8c, 0x81, 0xeb, 0x04, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/trace/v2/trace_service.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/trace/v2/trace_service.pb.go index 25a33ae359fa..bc9509786ad1 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/service/trace/v2/trace_service.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/service/trace/v2/trace_service.pb.go @@ -9,7 +9,7 @@ import math "math" import core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" import _ "github.com/gogo/googleapis/google/api" import _ "github.com/lyft/protoc-gen-validate/validate" -import trace "istio.io/gogo-genproto/opencensus/proto/trace" +import v1 "istio.io/gogo-genproto/opencensus/proto/trace/v1" import ( context "golang.org/x/net/context" @@ -39,7 +39,7 @@ func (m *StreamTracesResponse) Reset() { *m = StreamTracesResponse{} } func (m *StreamTracesResponse) String() string { return proto.CompactTextString(m) } func (*StreamTracesResponse) ProtoMessage() {} func (*StreamTracesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_trace_service_c80c2655d7a074f9, []int{0} + return fileDescriptor_trace_service_6543323ac11d60d2, []int{0} } func (m *StreamTracesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -74,17 +74,17 @@ type StreamTracesMessage struct { // on the stream. Identifier *StreamTracesMessage_Identifier `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"` // A list of Span entries - Spans []*trace.Span `protobuf:"bytes,2,rep,name=spans,proto3" json:"spans,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Spans []*v1.Span `protobuf:"bytes,2,rep,name=spans,proto3" json:"spans,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *StreamTracesMessage) Reset() { *m = StreamTracesMessage{} } func (m *StreamTracesMessage) String() string { return proto.CompactTextString(m) } func (*StreamTracesMessage) ProtoMessage() {} func (*StreamTracesMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_trace_service_c80c2655d7a074f9, []int{1} + return fileDescriptor_trace_service_6543323ac11d60d2, []int{1} } func (m *StreamTracesMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -120,7 +120,7 @@ func (m *StreamTracesMessage) GetIdentifier() *StreamTracesMessage_Identifier { return nil } -func (m *StreamTracesMessage) GetSpans() []*trace.Span { +func (m *StreamTracesMessage) GetSpans() []*v1.Span { if m != nil { return m.Spans } @@ -139,7 +139,7 @@ func (m *StreamTracesMessage_Identifier) Reset() { *m = StreamTracesMess func (m *StreamTracesMessage_Identifier) String() string { return proto.CompactTextString(m) } func (*StreamTracesMessage_Identifier) ProtoMessage() {} func (*StreamTracesMessage_Identifier) Descriptor() ([]byte, []int) { - return fileDescriptor_trace_service_c80c2655d7a074f9, []int{1, 0} + return fileDescriptor_trace_service_6543323ac11d60d2, []int{1, 0} } func (m *StreamTracesMessage_Identifier) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -599,7 +599,7 @@ func (m *StreamTracesMessage) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Spans = append(m.Spans, &trace.Span{}) + m.Spans = append(m.Spans, &v1.Span{}) if err := m.Spans[len(m.Spans)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -816,30 +816,32 @@ var ( ) func init() { - proto.RegisterFile("envoy/service/trace/v2/trace_service.proto", fileDescriptor_trace_service_c80c2655d7a074f9) -} - -var fileDescriptor_trace_service_c80c2655d7a074f9 = []byte{ - // 335 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0xb1, 0x4b, 0x03, 0x31, - 0x14, 0xc6, 0x4d, 0x6b, 0x1d, 0xd2, 0x0e, 0x72, 0x95, 0xb6, 0x1c, 0xa5, 0x94, 0x4e, 0x45, 0x25, - 0x07, 0x11, 0x74, 0x2f, 0x38, 0x38, 0xe8, 0x70, 0x15, 0x07, 0x17, 0x49, 0xef, 0x9e, 0x25, 0xd0, - 0xe6, 0x85, 0x4b, 0x3c, 0x70, 0x70, 0x17, 0xff, 0x24, 0x27, 0x47, 0x47, 0xff, 0x04, 0xe9, 0xa4, - 0xff, 0x85, 0xdc, 0x25, 0xad, 0x37, 0x74, 0xd0, 0x2d, 0x79, 0xef, 0xfb, 0x3e, 0x7e, 0xdf, 0xa3, - 0x87, 0xa0, 0x72, 0x7c, 0x8c, 0x0c, 0x64, 0xb9, 0x4c, 0x20, 0xb2, 0x99, 0x48, 0x20, 0xca, 0xb9, - 0x7b, 0xdc, 0xf9, 0x31, 0xd3, 0x19, 0x5a, 0x0c, 0x3a, 0xa5, 0x96, 0xad, 0x87, 0xa5, 0x84, 0xe5, - 0x3c, 0xec, 0xbb, 0x0c, 0xa1, 0x65, 0xe1, 0x4c, 0x30, 0x83, 0x68, 0x26, 0x8c, 0x77, 0x85, 0x4d, - 0xa7, 0x73, 0x9f, 0xfe, 0x1c, 0x71, 0xbe, 0x80, 0x52, 0x2b, 0x94, 0x42, 0x2b, 0xac, 0x44, 0x65, - 0xfc, 0xb6, 0x9b, 0x8b, 0x85, 0x4c, 0x85, 0x85, 0x68, 0xfd, 0x70, 0x8b, 0x51, 0x87, 0x1e, 0x4c, - 0x6d, 0x06, 0x62, 0x79, 0x5d, 0x64, 0x99, 0x18, 0x8c, 0x46, 0x65, 0x60, 0xf4, 0x45, 0x68, 0xbb, - 0xba, 0xb8, 0x04, 0x63, 0xc4, 0x1c, 0x82, 0x1b, 0x4a, 0x65, 0x0a, 0xca, 0xca, 0x7b, 0x09, 0x59, - 0x8f, 0x0c, 0xc9, 0xb8, 0xc9, 0x4f, 0xd9, 0x76, 0x7c, 0xb6, 0x25, 0x80, 0x5d, 0x6c, 0xdc, 0x71, - 0x25, 0x29, 0xe0, 0xb4, 0x61, 0xb4, 0x50, 0xa6, 0x57, 0x1b, 0xd6, 0xc7, 0x4d, 0xde, 0x67, 0xa8, - 0x41, 0x25, 0xa0, 0xcc, 0x83, 0xaf, 0xe0, 0x53, 0xa7, 0x5a, 0xa8, 0xd8, 0x49, 0xc3, 0x73, 0x4a, - 0x7f, 0xd3, 0x82, 0x33, 0xba, 0xab, 0x30, 0x05, 0xcf, 0xd4, 0xf5, 0x4c, 0x42, 0xcb, 0x82, 0xa4, - 0x38, 0x1d, 0xbb, 0xc2, 0x14, 0x26, 0xf4, 0xf5, 0xfb, 0xad, 0xde, 0x78, 0x21, 0xb5, 0x7d, 0x12, - 0x97, 0x06, 0xfe, 0x44, 0x5b, 0x25, 0xe2, 0xd4, 0xe1, 0x07, 0x4b, 0xda, 0xaa, 0x82, 0x07, 0x47, - 0xff, 0xa8, 0x17, 0x1e, 0xff, 0x45, 0xbc, 0xb9, 0xf2, 0xce, 0x98, 0x4c, 0xda, 0xef, 0xab, 0x01, - 0xf9, 0x58, 0x0d, 0xc8, 0xe7, 0x6a, 0x40, 0x6e, 0x6b, 0x39, 0x7f, 0x26, 0x64, 0xb6, 0x57, 0x76, - 0x3e, 0xf9, 0x09, 0x00, 0x00, 0xff, 0xff, 0x43, 0xf2, 0x34, 0x31, 0x45, 0x02, 0x00, 0x00, + proto.RegisterFile("envoy/service/trace/v2/trace_service.proto", fileDescriptor_trace_service_6543323ac11d60d2) +} + +var fileDescriptor_trace_service_6543323ac11d60d2 = []byte{ + // 355 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0x31, 0x4b, 0x2b, 0x41, + 0x14, 0x85, 0xdf, 0x24, 0x2f, 0xaf, 0x98, 0xa4, 0x78, 0xac, 0x92, 0x84, 0x25, 0xc4, 0x10, 0x2c, + 0x82, 0xca, 0x2c, 0xae, 0xa8, 0x85, 0x5d, 0xc0, 0xc2, 0x42, 0x91, 0x8d, 0x58, 0xd8, 0xc8, 0x64, + 0xf7, 0x1a, 0x06, 0x92, 0xb9, 0xc3, 0xcc, 0xb8, 0x98, 0xc2, 0x5e, 0xfc, 0x49, 0x56, 0x96, 0x96, + 0xfe, 0x04, 0x49, 0x27, 0xfe, 0x09, 0xd9, 0x9d, 0x4d, 0x4c, 0x11, 0x41, 0xbb, 0x99, 0x7b, 0xcf, + 0xf9, 0x38, 0xf7, 0xd0, 0x2d, 0x90, 0x29, 0x4e, 0x03, 0x03, 0x3a, 0x15, 0x31, 0x04, 0x56, 0xf3, + 0x18, 0x82, 0x34, 0x74, 0x8f, 0xeb, 0x62, 0xcc, 0x94, 0x46, 0x8b, 0x5e, 0x3d, 0xd7, 0xb2, 0xf9, + 0x30, 0x97, 0xb0, 0x34, 0xf4, 0x5b, 0x8e, 0xc1, 0x95, 0xc8, 0x9c, 0x31, 0x6a, 0x08, 0x86, 0xdc, + 0x14, 0x2e, 0xbf, 0xea, 0x74, 0xee, 0xd3, 0x1a, 0x21, 0x8e, 0xc6, 0x90, 0x6b, 0xb9, 0x94, 0x68, + 0xb9, 0x15, 0x28, 0x4d, 0xb1, 0x6d, 0xa4, 0x7c, 0x2c, 0x12, 0x6e, 0x21, 0x98, 0x3f, 0xdc, 0xa2, + 0x5b, 0xa7, 0xeb, 0x03, 0xab, 0x81, 0x4f, 0x2e, 0x32, 0x96, 0x89, 0xc0, 0x28, 0x94, 0x06, 0xba, + 0x1f, 0x84, 0xae, 0x2d, 0x2f, 0x4e, 0xc1, 0x18, 0x3e, 0x02, 0xef, 0x92, 0x52, 0x91, 0x80, 0xb4, + 0xe2, 0x46, 0x80, 0x6e, 0x92, 0x0e, 0xe9, 0x55, 0xc3, 0x03, 0xb6, 0x3a, 0x3e, 0x5b, 0x01, 0x60, + 0x27, 0x0b, 0x77, 0xb4, 0x44, 0xf2, 0xf6, 0x69, 0xc5, 0x28, 0x2e, 0x4d, 0xb3, 0xd4, 0x29, 0xf7, + 0xaa, 0xe1, 0x06, 0x43, 0x05, 0x32, 0x06, 0x69, 0x6e, 0x8b, 0x13, 0xe6, 0xd4, 0x5d, 0x36, 0x50, + 0x5c, 0x46, 0x4e, 0xed, 0x1f, 0x53, 0xfa, 0x05, 0xf4, 0x0e, 0xe9, 0x5f, 0x89, 0x09, 0x14, 0xb1, + 0x1a, 0x45, 0x2c, 0xae, 0x44, 0x16, 0x26, 0x6b, 0x8f, 0x9d, 0x61, 0x02, 0x7d, 0xfa, 0xf4, 0xfe, + 0x5c, 0xae, 0x3c, 0x92, 0xd2, 0x7f, 0x12, 0xe5, 0x86, 0xf0, 0x9e, 0xd6, 0xf2, 0x94, 0x03, 0x77, + 0x81, 0x37, 0xa1, 0xb5, 0xe5, 0xec, 0xde, 0xf6, 0x2f, 0x2e, 0xf4, 0x77, 0x7e, 0x22, 0x5e, 0x14, + 0xfd, 0xa7, 0x47, 0xfa, 0x47, 0x2f, 0xb3, 0x36, 0x79, 0x9d, 0xb5, 0xc9, 0xdb, 0xac, 0x4d, 0xe8, + 0xa6, 0x40, 0x47, 0x50, 0x1a, 0xef, 0xa6, 0xdf, 0xc0, 0xce, 0xc9, 0x55, 0x29, 0x0d, 0x1f, 0x08, + 0x19, 0xfe, 0xcb, 0xeb, 0xd9, 0xfb, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x38, 0xbb, 0x75, 0xd6, 0x70, + 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.go index 0aadd29b2d3f..957680f34d7f 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.go @@ -210,7 +210,7 @@ func (x StatusCode) String() string { return proto.EnumName(StatusCode_name, int32(x)) } func (StatusCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_http_status_6f768cb0c155571a, []int{0} + return fileDescriptor_http_status_4658f9ab7d3f03d0, []int{0} } // HTTP status. @@ -226,7 +226,7 @@ func (m *HttpStatus) Reset() { *m = HttpStatus{} } func (m *HttpStatus) String() string { return proto.CompactTextString(m) } func (*HttpStatus) ProtoMessage() {} func (*HttpStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_http_status_6f768cb0c155571a, []int{0} + return fileDescriptor_http_status_4658f9ab7d3f03d0, []int{0} } func (m *HttpStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -505,66 +505,67 @@ var ( ) func init() { - proto.RegisterFile("envoy/type/http_status.proto", fileDescriptor_http_status_6f768cb0c155571a) + proto.RegisterFile("envoy/type/http_status.proto", fileDescriptor_http_status_4658f9ab7d3f03d0) } -var fileDescriptor_http_status_6f768cb0c155571a = []byte{ - // 910 bytes of a gzipped FileDescriptorProto +var fileDescriptor_http_status_4658f9ab7d3f03d0 = []byte{ + // 923 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x54, 0x49, 0x6f, 0x1c, 0x45, - 0x14, 0x4e, 0x4f, 0xc5, 0x49, 0x5c, 0x71, 0x9c, 0x97, 0x8a, 0x13, 0x87, 0x10, 0x2c, 0x2b, 0x27, - 0xc4, 0xc1, 0x96, 0xe0, 0x0f, 0x60, 0x3b, 0x76, 0x6c, 0xe1, 0x99, 0x8c, 0xc6, 0x33, 0xb9, 0xa2, - 0x72, 0xd7, 0x9b, 0x99, 0x52, 0x7a, 0xea, 0x75, 0xaa, 0xdf, 0x8c, 0xdd, 0x1c, 0xf9, 0x05, 0xec, - 0xfb, 0x7a, 0x60, 0x11, 0x4a, 0x08, 0x08, 0xb8, 0x70, 0xe2, 0x18, 0xf6, 0xfc, 0x04, 0xe4, 0x1b, - 0x77, 0x76, 0x10, 0xa0, 0xaa, 0x59, 0x92, 0x4b, 0x6e, 0x55, 0xaf, 0xde, 0xf2, 0x2d, 0xaf, 0x5b, - 0x5e, 0x40, 0x37, 0xa0, 0x72, 0x99, 0xcb, 0x1c, 0x97, 0xbb, 0xcc, 0xf9, 0x93, 0x05, 0x6b, 0xee, - 0x17, 0x4b, 0xb9, 0x27, 0x26, 0x25, 0xe3, 0xeb, 0x52, 0x78, 0x3d, 0x3f, 0x3f, 0xd0, 0x99, 0x35, - 0x9a, 0x71, 0x79, 0x7c, 0x18, 0x26, 0x5d, 0xac, 0x49, 0xb9, 0xc9, 0x9c, 0xef, 0xc4, 0x42, 0xf5, - 0xb8, 0x3c, 0x9c, 0x92, 0xc1, 0x73, 0xc9, 0x62, 0xf2, 0xf0, 0xec, 0xa3, 0x67, 0x97, 0xee, 0x76, - 0x58, 0x1a, 0x66, 0xac, 0x91, 0xc1, 0xd5, 0xb9, 0x2f, 0x7f, 0xfe, 0x4a, 0x4c, 0x3d, 0x9d, 0x54, - 0x16, 0x0f, 0x8d, 0x4f, 0x90, 0x34, 0x62, 0xe5, 0x23, 0x5f, 0x4c, 0x4b, 0x79, 0x37, 0x55, 0x4d, - 0xcb, 0xa9, 0xf5, 0x5e, 0xce, 0x25, 0x1c, 0x52, 0x33, 0xf2, 0xd8, 0x1a, 0x39, 0xb6, 0xae, 0x8f, - 0x60, 0xd4, 0x51, 0x59, 0xb9, 0xf2, 0x04, 0xdc, 0x4e, 0xd4, 0x8c, 0x3c, 0xba, 0xe6, 0x51, 0x33, - 0x1a, 0xf8, 0x3a, 0x51, 0x27, 0xe4, 0xb1, 0x95, 0x34, 0xc5, 0x3c, 0x5c, 0xbf, 0x49, 0xd4, 0xa2, - 0x7c, 0xb0, 0x46, 0x6e, 0xa5, 0xcf, 0x5d, 0xf2, 0x96, 0x35, 0xdb, 0x01, 0x6e, 0xb9, 0x36, 0xf9, - 0x9e, 0x66, 0x4b, 0x0e, 0xbe, 0x4d, 0xd4, 0xac, 0x9c, 0xae, 0x51, 0xe8, 0x8b, 0x8e, 0xe1, 0xbb, - 0x44, 0x9d, 0x92, 0x33, 0x0d, 0x2c, 0x90, 0xc7, 0xa1, 0xef, 0x13, 0x75, 0x5a, 0xce, 0xd6, 0xb5, - 0x67, 0xab, 0xb3, 0x71, 0xf0, 0x87, 0x44, 0x81, 0x3c, 0x5e, 0xed, 0x67, 0x6c, 0x87, 0x58, 0xe1, - 0xc7, 0x44, 0xcd, 0xc9, 0x93, 0x2b, 0x99, 0x47, 0x6d, 0xca, 0x06, 0xe6, 0xe4, 0x03, 0x82, 0x3b, - 0x89, 0x3a, 0x2e, 0x8f, 0x6c, 0x55, 0x5b, 0x05, 0x1a, 0x38, 0x88, 0x29, 0xb1, 0x28, 0xcf, 0x70, - 0xad, 0x4b, 0x36, 0xc5, 0x02, 0x6e, 0x54, 0xd4, 0x19, 0x09, 0x55, 0x1a, 0xa0, 0xa9, 0xa3, 0xef, - 0x69, 0x87, 0x8e, 0xb3, 0x12, 0x6e, 0x56, 0x94, 0x94, 0x53, 0x1b, 0xd4, 0x77, 0x06, 0x3e, 0xae, - 0x04, 0x5a, 0x3b, 0x88, 0x57, 0xb8, 0x8b, 0x1e, 0x6e, 0x55, 0xc2, 0xf0, 0x1a, 0x71, 0x95, 0x8c, - 0x6d, 0x5b, 0x34, 0xf0, 0x49, 0x4c, 0x68, 0x15, 0x58, 0xf7, 0xb4, 0x5f, 0xc2, 0xa7, 0x15, 0x75, - 0x56, 0x9e, 0x6a, 0x62, 0x2f, 0x27, 0xaf, 0x7d, 0xd9, 0x40, 0x63, 0x3d, 0xa6, 0x0c, 0x9f, 0xc5, - 0xf8, 0x64, 0xca, 0x24, 0xfe, 0x79, 0x45, 0x9d, 0x94, 0x72, 0x55, 0x9b, 0x06, 0x5e, 0xef, 0x63, - 0xc1, 0xf0, 0x8c, 0x08, 0x32, 0xb4, 0x9c, 0x1e, 0xea, 0xf6, 0x14, 0x1a, 0x78, 0x56, 0x04, 0xf0, - 0x75, 0x5d, 0xf6, 0x62, 0xe5, 0xf5, 0xbe, 0xf5, 0x68, 0xe0, 0x39, 0x11, 0xf4, 0xdb, 0x20, 0xbf, - 0x6b, 0x8d, 0x41, 0x07, 0xcf, 0x8b, 0x00, 0xa4, 0x46, 0x3c, 0x04, 0xfe, 0x82, 0x88, 0xdc, 0x90, - 0xbb, 0x64, 0x6a, 0xc4, 0x2b, 0x59, 0x46, 0x7b, 0x68, 0xe0, 0x45, 0xa1, 0x94, 0x3c, 0x11, 0x02, - 0xd1, 0x29, 0xbd, 0x9b, 0x21, 0xbc, 0x24, 0x82, 0x57, 0x11, 0x7f, 0x70, 0x0b, 0x1d, 0xdb, 0x34, - 0x7a, 0x34, 0x99, 0xf5, 0xb2, 0x08, 0x46, 0x8c, 0x20, 0x36, 0x6d, 0x0f, 0xa9, 0xcf, 0xf0, 0x4a, - 0x1c, 0xb8, 0x46, 0xae, 0x9d, 0xd9, 0x94, 0xe1, 0x55, 0xa1, 0xa6, 0xe5, 0xe1, 0xcb, 0xe4, 0x10, - 0x5e, 0x8b, 0xe9, 0xdb, 0xe8, 0x3a, 0xdc, 0x9d, 0xf4, 0x78, 0x5d, 0xa8, 0x79, 0xa9, 0xea, 0x1e, - 0x53, 0x72, 0xc6, 0x86, 0xf6, 0x1b, 0xda, 0x66, 0x68, 0xe0, 0x8d, 0x31, 0xbd, 0x8c, 0xb4, 0x69, - 0x12, 0x6d, 0x6b, 0xdf, 0x41, 0x78, 0x53, 0x04, 0x61, 0x5a, 0x8d, 0xad, 0x10, 0x21, 0xd7, 0x81, - 0xb7, 0x84, 0x7a, 0x40, 0xce, 0xb5, 0x5c, 0xd1, 0xcf, 0x87, 0x0e, 0x57, 0xd1, 0x58, 0xdd, 0x2c, - 0x73, 0x84, 0xb7, 0x85, 0x3a, 0x27, 0x4f, 0x37, 0xb4, 0xeb, 0x60, 0x8d, 0x78, 0x47, 0xb3, 0x2d, - 0xda, 0x36, 0x52, 0x7b, 0x47, 0x04, 0xd9, 0xd7, 0xf7, 0x73, 0x4c, 0x59, 0xdf, 0x33, 0xf3, 0xdd, - 0x08, 0xa6, 0x6a, 0x8b, 0xa1, 0x0d, 0x38, 0x91, 0xff, 0xbd, 0xd8, 0xaa, 0xe5, 0x72, 0x4f, 0x29, - 0x16, 0x45, 0x68, 0xb2, 0xee, 0xd8, 0x72, 0x09, 0xef, 0x8b, 0xb0, 0x4f, 0xdb, 0x94, 0x5e, 0x43, - 0x03, 0x1f, 0x44, 0x75, 0x87, 0xcd, 0x2e, 0x61, 0x8e, 0xce, 0xa0, 0x4b, 0x4b, 0xf8, 0x30, 0x52, - 0x69, 0xe5, 0x1d, 0xaf, 0x0d, 0x4e, 0x98, 0x7f, 0x14, 0x91, 0xdf, 0xcb, 0x7c, 0xf2, 0x74, 0x23, - 0x16, 0x34, 0x89, 0xaa, 0xda, 0x95, 0x23, 0x0c, 0x05, 0xdc, 0x8c, 0x86, 0x8c, 0xae, 0x9b, 0xa8, - 0x0d, 0xfa, 0x0d, 0x8b, 0x99, 0x29, 0x26, 0xea, 0xdc, 0x8a, 0x30, 0xb7, 0x1c, 0xa3, 0x77, 0x3a, - 0xdb, 0x41, 0x3f, 0x40, 0xbf, 0xee, 0x3d, 0x79, 0xf8, 0x25, 0x6a, 0x5f, 0x23, 0xde, 0xea, 0xe5, - 0x19, 0x86, 0x8d, 0x41, 0x03, 0xbf, 0x8a, 0xd1, 0x96, 0x5d, 0xd6, 0x8c, 0x7b, 0xba, 0x84, 0xdf, - 0x22, 0xff, 0x50, 0x67, 0x53, 0x6c, 0x39, 0x3d, 0xd0, 0x36, 0x8b, 0x82, 0xfd, 0x1e, 0xcb, 0x47, - 0x69, 0x63, 0xa7, 0xff, 0x10, 0xea, 0x82, 0x9c, 0xdf, 0x6c, 0x36, 0xeb, 0x57, 0xd1, 0x17, 0x96, - 0x5c, 0x50, 0x79, 0x6c, 0x03, 0xfc, 0x29, 0xd4, 0x79, 0x79, 0xe6, 0xaa, 0xf6, 0x56, 0x3b, 0x5e, - 0xc9, 0x0a, 0xaa, 0x61, 0x87, 0xd8, 0x6a, 0xc6, 0x02, 0xfe, 0x1a, 0xe1, 0x2c, 0xfa, 0xed, 0xb6, - 0x4d, 0x2d, 0x3a, 0xde, 0x61, 0xf2, 0xba, 0x83, 0xf0, 0x77, 0xdc, 0xf3, 0x6d, 0xa2, 0xfc, 0x12, - 0x72, 0xb4, 0x00, 0xfe, 0x11, 0xa3, 0x8f, 0x6b, 0x7d, 0x9f, 0x83, 0xa2, 0x06, 0xfe, 0x15, 0xea, - 0xa2, 0x7c, 0xa8, 0x86, 0xbc, 0x47, 0xfe, 0xda, 0x7d, 0x76, 0xf3, 0x3f, 0xb1, 0x3a, 0x73, 0xfb, - 0x60, 0x21, 0xb9, 0x73, 0xb0, 0x90, 0xfc, 0x74, 0xb0, 0x90, 0xec, 0x1e, 0x89, 0x3f, 0xc7, 0xc7, - 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xc0, 0xfd, 0x12, 0x85, 0x61, 0x05, 0x00, 0x00, + 0x14, 0x4e, 0x4f, 0x65, 0x73, 0x25, 0x71, 0x5e, 0x2a, 0x4e, 0x6c, 0x42, 0xb0, 0xac, 0x9c, 0x22, + 0x0e, 0xb6, 0x04, 0x7f, 0x00, 0xdb, 0xb1, 0x63, 0x0b, 0xcf, 0x64, 0x34, 0x9e, 0xc9, 0x15, 0x95, + 0xbb, 0xde, 0xcc, 0x94, 0xd2, 0x53, 0xaf, 0x53, 0xfd, 0x66, 0xec, 0xe6, 0xc8, 0x2f, 0x60, 0xdf, + 0xd7, 0x03, 0x8b, 0x50, 0x42, 0x40, 0xc0, 0x85, 0x13, 0xc7, 0xb0, 0xe7, 0x27, 0x20, 0xdf, 0xb8, + 0xb3, 0x83, 0x00, 0x55, 0xcd, 0x12, 0x5f, 0xb8, 0x75, 0xbd, 0x7a, 0xcb, 0xb7, 0xbc, 0x2e, 0x79, + 0x11, 0xdd, 0x80, 0xca, 0x25, 0x2e, 0x73, 0x5c, 0xea, 0x32, 0xe7, 0x4f, 0x14, 0xac, 0xb9, 0x5f, + 0x2c, 0xe6, 0x9e, 0x98, 0x94, 0x8c, 0xb7, 0x8b, 0xe1, 0xf6, 0xc2, 0xec, 0x40, 0x67, 0xd6, 0x68, + 0xc6, 0xa5, 0xf1, 0xc7, 0x30, 0xe9, 0x52, 0x4d, 0xca, 0x0d, 0xe6, 0x7c, 0x3b, 0x16, 0xaa, 0xc7, + 0xe4, 0xe1, 0x94, 0x0c, 0xce, 0x25, 0x0b, 0xc9, 0xe5, 0xe9, 0x47, 0xce, 0x2f, 0xde, 0xef, 0xb0, + 0x38, 0xcc, 0x58, 0x25, 0x83, 0x2b, 0x33, 0x5f, 0xfc, 0xf4, 0xa5, 0x38, 0xf2, 0x54, 0x52, 0x59, + 0x38, 0x34, 0xfe, 0x82, 0xa4, 0x11, 0x2b, 0x1f, 0xfe, 0x7c, 0x4a, 0xca, 0xfb, 0xa9, 0x6a, 0x4a, + 0x1e, 0x59, 0xeb, 0xe5, 0x5c, 0xc2, 0x21, 0x75, 0x52, 0x1e, 0x5f, 0x25, 0xc7, 0xd6, 0xf5, 0x11, + 0x8c, 0x3a, 0x26, 0x2b, 0xd7, 0x1e, 0x87, 0xbb, 0x89, 0x3a, 0x29, 0x8f, 0xad, 0x7a, 0xd4, 0x8c, + 0x06, 0xbe, 0x4a, 0xd4, 0x29, 0x79, 0x7c, 0x39, 0x4d, 0x31, 0x0f, 0xc7, 0xaf, 0x13, 0xb5, 0x20, + 0x1f, 0xac, 0x91, 0x5b, 0xee, 0x73, 0x97, 0xbc, 0x65, 0xcd, 0x76, 0x80, 0x9b, 0xae, 0x4d, 0xbe, + 0xa7, 0xd9, 0x92, 0x83, 0x6f, 0x12, 0x35, 0x2d, 0xa7, 0x6a, 0x14, 0xfa, 0xa2, 0x63, 0xf8, 0x36, + 0x51, 0x67, 0xe4, 0xc9, 0x06, 0x16, 0xc8, 0xe3, 0xd0, 0x77, 0x89, 0x3a, 0x2b, 0xa7, 0xeb, 0xda, + 0xb3, 0xd5, 0xd9, 0x38, 0xf8, 0x7d, 0xa2, 0x40, 0x9e, 0xa8, 0xf6, 0x33, 0xb6, 0x43, 0xac, 0xf0, + 0x43, 0xa2, 0x66, 0xe4, 0xe9, 0xe5, 0xcc, 0xa3, 0x36, 0x65, 0x03, 0x73, 0xf2, 0x01, 0xc1, 0xbd, + 0x44, 0x9d, 0x90, 0x47, 0x37, 0xab, 0xad, 0x02, 0x0d, 0xec, 0xc7, 0x94, 0x58, 0x94, 0x67, 0xb8, + 0xda, 0x25, 0x9b, 0x62, 0x01, 0xb7, 0x2a, 0xea, 0x9c, 0x84, 0x2a, 0x0d, 0xd0, 0xd4, 0xd1, 0xf7, + 0xb4, 0x43, 0xc7, 0x59, 0x09, 0xb7, 0x2b, 0x4a, 0xca, 0x23, 0xeb, 0xd4, 0x77, 0x06, 0x3e, 0xaa, + 0x04, 0x5a, 0xdb, 0x88, 0xd7, 0xb8, 0x8b, 0x1e, 0xee, 0x54, 0xc2, 0xf0, 0x1a, 0x71, 0x95, 0x8c, + 0x6d, 0x5b, 0x34, 0xf0, 0x71, 0x4c, 0x68, 0x15, 0x58, 0xf7, 0xb4, 0x57, 0xc2, 0x27, 0x15, 0x75, + 0x5e, 0x9e, 0x69, 0x62, 0x2f, 0x27, 0xaf, 0x7d, 0xd9, 0x40, 0x63, 0x3d, 0xa6, 0x0c, 0x9f, 0xc6, + 0xf8, 0x64, 0xca, 0x24, 0xfe, 0x59, 0x45, 0x9d, 0x96, 0x72, 0x45, 0x9b, 0x06, 0xde, 0xec, 0x63, + 0xc1, 0xf0, 0xb4, 0x08, 0x32, 0xb4, 0x9c, 0x1e, 0xea, 0xf6, 0x24, 0x1a, 0x78, 0x46, 0x04, 0xf0, + 0x75, 0x5d, 0xf6, 0x62, 0xe5, 0xcd, 0xbe, 0xf5, 0x68, 0xe0, 0x59, 0x11, 0xf4, 0x5b, 0x27, 0xbf, + 0x63, 0x8d, 0x41, 0x07, 0xcf, 0x89, 0x00, 0xa4, 0x46, 0x3c, 0x04, 0xfe, 0xbc, 0x88, 0xdc, 0x90, + 0xbb, 0x64, 0x6a, 0xc4, 0xcb, 0x59, 0x46, 0xbb, 0x68, 0xe0, 0x05, 0xa1, 0x94, 0x3c, 0x15, 0x02, + 0xd1, 0x29, 0xbd, 0x93, 0x21, 0xbc, 0x28, 0x82, 0x57, 0x11, 0x7f, 0x70, 0x0b, 0x1d, 0xdb, 0x34, + 0x7a, 0x34, 0x99, 0xf5, 0x92, 0x08, 0x46, 0x8c, 0x20, 0x36, 0x6d, 0x0f, 0xa9, 0xcf, 0xf0, 0x72, + 0x1c, 0xb8, 0x4a, 0xae, 0x9d, 0xd9, 0x94, 0xe1, 0x15, 0xa1, 0xa6, 0xe4, 0xe1, 0xab, 0xe4, 0x10, + 0x5e, 0x8d, 0xe9, 0x5b, 0xe8, 0x3a, 0xdc, 0x9d, 0xf4, 0x78, 0x4d, 0xa8, 0x59, 0xa9, 0xea, 0x1e, + 0x53, 0x72, 0xc6, 0x86, 0xf6, 0xeb, 0xda, 0x66, 0x68, 0xe0, 0xf5, 0x31, 0xbd, 0x8c, 0xb4, 0x69, + 0x12, 0x6d, 0x69, 0xdf, 0x41, 0x78, 0x43, 0x04, 0x61, 0x5a, 0x8d, 0xcd, 0x10, 0x21, 0xd7, 0x81, + 0x37, 0x85, 0x7a, 0x40, 0xce, 0xb4, 0x5c, 0xd1, 0xcf, 0x87, 0x0e, 0x57, 0xd1, 0x58, 0xdd, 0x2c, + 0x73, 0x84, 0xb7, 0x84, 0x9a, 0x93, 0x67, 0x1b, 0xda, 0x75, 0xb0, 0x46, 0xbc, 0xad, 0xd9, 0x16, + 0x6d, 0x1b, 0xa9, 0xbd, 0x2d, 0x82, 0xec, 0x6b, 0x7b, 0x39, 0xa6, 0xac, 0x0f, 0xcc, 0x7c, 0x27, + 0x82, 0xa9, 0xda, 0x62, 0x68, 0x03, 0x4e, 0xe4, 0x7f, 0x37, 0xb6, 0x6a, 0xb9, 0xdc, 0x53, 0x8a, + 0x45, 0x11, 0x9a, 0xac, 0x39, 0xb6, 0x5c, 0xc2, 0x7b, 0x22, 0xec, 0xd3, 0x16, 0xa5, 0x37, 0xd0, + 0xc0, 0xfb, 0x51, 0xdd, 0x61, 0xb3, 0x2b, 0x98, 0xa3, 0x33, 0xe8, 0xd2, 0x12, 0x3e, 0x88, 0x54, + 0x5a, 0x79, 0xc7, 0x6b, 0x83, 0x13, 0xe6, 0x1f, 0x46, 0xe4, 0x07, 0x99, 0x4f, 0xae, 0x6e, 0xc5, + 0x82, 0x26, 0x51, 0x55, 0xbb, 0x72, 0x84, 0xa1, 0x80, 0xdb, 0xd1, 0x90, 0xd1, 0x71, 0x03, 0xb5, + 0x41, 0xbf, 0x6e, 0x31, 0x33, 0xc5, 0x44, 0x9d, 0x3b, 0x11, 0xe6, 0xa6, 0x63, 0xf4, 0x4e, 0x67, + 0xdb, 0xe8, 0x07, 0xe8, 0xd7, 0xbc, 0x27, 0x0f, 0x3f, 0x47, 0xed, 0x6b, 0xc4, 0x9b, 0xbd, 0x3c, + 0xc3, 0xb0, 0x31, 0x68, 0xe0, 0x17, 0x31, 0xda, 0xb2, 0xab, 0x9a, 0x71, 0x57, 0x97, 0xf0, 0x6b, + 0xe4, 0x1f, 0xea, 0x6c, 0x8a, 0x2d, 0xa7, 0x07, 0xda, 0x66, 0x51, 0xb0, 0xdf, 0x62, 0xf9, 0x28, + 0x6d, 0xec, 0xf4, 0xef, 0x42, 0x5d, 0x94, 0xb3, 0x1b, 0xcd, 0x66, 0xfd, 0x3a, 0xfa, 0xc2, 0x92, + 0x0b, 0x2a, 0x8f, 0x6d, 0x80, 0x3f, 0x84, 0xba, 0x20, 0xcf, 0x5d, 0xd7, 0xde, 0x6a, 0xc7, 0xcb, + 0x59, 0x41, 0x35, 0xec, 0x10, 0x5b, 0xcd, 0x58, 0xc0, 0x9f, 0x23, 0x9c, 0x45, 0xbf, 0xdd, 0xb6, + 0xa9, 0x45, 0xc7, 0xdb, 0x4c, 0x5e, 0x77, 0x10, 0xfe, 0x8a, 0x7b, 0xbe, 0x45, 0x94, 0x5f, 0x41, + 0x8e, 0x16, 0xc0, 0xdf, 0x62, 0xf4, 0x73, 0xad, 0xed, 0x71, 0x50, 0xd4, 0xc0, 0x3f, 0x42, 0x5d, + 0x92, 0x0f, 0xd5, 0x90, 0x77, 0xc9, 0xdf, 0xf8, 0x9f, 0xdd, 0xfc, 0x57, 0xac, 0x5c, 0xbe, 0xbb, + 0x3f, 0x9f, 0xdc, 0xdb, 0x9f, 0x4f, 0x7e, 0xdc, 0x9f, 0x4f, 0xe4, 0x9c, 0xa5, 0xe1, 0xdb, 0x97, + 0x87, 0x8d, 0x3e, 0xf0, 0x0c, 0xd6, 0x93, 0x9d, 0xa3, 0xf1, 0xe1, 0x7c, 0xf4, 0xbf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x31, 0xd9, 0x01, 0x42, 0x7d, 0x05, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.go index d62c51d16018..3b3cd515a99c 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.go @@ -95,7 +95,7 @@ func (m *MetadataMatcher) Reset() { *m = MetadataMatcher{} } func (m *MetadataMatcher) String() string { return proto.CompactTextString(m) } func (*MetadataMatcher) ProtoMessage() {} func (*MetadataMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_metadata_626784a9898ad14e, []int{0} + return fileDescriptor_metadata_1f0e62ca6a5e1ce9, []int{0} } func (m *MetadataMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -161,7 +161,7 @@ func (m *MetadataMatcher_PathSegment) Reset() { *m = MetadataMatcher_Pat func (m *MetadataMatcher_PathSegment) String() string { return proto.CompactTextString(m) } func (*MetadataMatcher_PathSegment) ProtoMessage() {} func (*MetadataMatcher_PathSegment) Descriptor() ([]byte, []int) { - return fileDescriptor_metadata_626784a9898ad14e, []int{0, 0} + return fileDescriptor_metadata_1f0e62ca6a5e1ce9, []int{0, 0} } func (m *MetadataMatcher_PathSegment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -760,11 +760,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/type/matcher/metadata.proto", fileDescriptor_metadata_626784a9898ad14e) + proto.RegisterFile("envoy/type/matcher/metadata.proto", fileDescriptor_metadata_1f0e62ca6a5e1ce9) } -var fileDescriptor_metadata_626784a9898ad14e = []byte{ - // 274 bytes of a gzipped FileDescriptorProto +var fileDescriptor_metadata_1f0e62ca6a5e1ce9 = []byte{ + // 290 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x4d, 0x2c, 0x49, 0xce, 0x48, 0x2d, 0xd2, 0xcf, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x02, @@ -779,8 +779,9 @@ var fileDescriptor_metadata_626784a9898ad14e = []byte{ 0x5e, 0x09, 0x66, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x05, 0x6c, 0x26, 0x86, 0x81, 0x14, 0x40, 0x8d, 0x83, 0x1a, 0xd1, 0xc5, 0xc8, 0x24, 0xc0, 0x18, 0x04, 0xd1, 0x2a, 0x65, 0xc7, 0xc5, 0x8d, 0x64, 0x89, 0x90, 0x2c, 0x17, 0x73, 0x76, 0x6a, 0x25, 0x86, 0x1f, 0x3c, 0x18, 0x82, 0x40, 0xe2, 0x4e, - 0x02, 0x5c, 0xec, 0xc5, 0x50, 0x95, 0xac, 0x3b, 0x5e, 0x1e, 0x60, 0x66, 0x74, 0x12, 0x3d, 0xf1, - 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0xa3, 0xd8, 0xa1, 0xd6, 0x26, - 0xb1, 0x81, 0x43, 0xca, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x57, 0x21, 0x06, 0xb9, 0x9b, 0x01, + 0x02, 0x5c, 0xec, 0xc5, 0x50, 0x95, 0xac, 0x3b, 0x5e, 0x1e, 0x60, 0x66, 0x74, 0xb2, 0x3c, 0xf1, + 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0xb9, 0x14, 0x32, 0xf3, 0x21, + 0x8e, 0x28, 0x28, 0xca, 0xaf, 0xa8, 0xc4, 0xe2, 0x9e, 0x00, 0xc6, 0x28, 0x76, 0x28, 0x33, 0x89, + 0x0d, 0x1c, 0x9a, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0xb8, 0x8b, 0xbd, 0xbf, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.go index 23a73d6a5111..d86e736ac6e0 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.go @@ -39,7 +39,7 @@ func (m *DoubleMatcher) Reset() { *m = DoubleMatcher{} } func (m *DoubleMatcher) String() string { return proto.CompactTextString(m) } func (*DoubleMatcher) ProtoMessage() {} func (*DoubleMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_number_104d0b0ec68c008b, []int{0} + return fileDescriptor_number_baa4c0f179d23d8e, []int{0} } func (m *DoubleMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -486,11 +486,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/type/matcher/number.proto", fileDescriptor_number_104d0b0ec68c008b) + proto.RegisterFile("envoy/type/matcher/number.proto", fileDescriptor_number_baa4c0f179d23d8e) } -var fileDescriptor_number_104d0b0ec68c008b = []byte{ - // 198 bytes of a gzipped FileDescriptorProto +var fileDescriptor_number_baa4c0f179d23d8e = []byte{ + // 214 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x4d, 0x2c, 0x49, 0xce, 0x48, 0x2d, 0xd2, 0xcf, 0x2b, 0xcd, 0x4d, 0x4a, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x02, 0x2b, 0xd0, @@ -501,7 +501,8 @@ var fileDescriptor_number_104d0b0ec68c008b = []byte{ 0x04, 0x92, 0xf6, 0x60, 0x08, 0x82, 0xa8, 0x13, 0x12, 0xe3, 0x62, 0x4d, 0xad, 0x48, 0x4c, 0x2e, 0x91, 0x60, 0x52, 0x60, 0xd4, 0x60, 0x04, 0x89, 0x83, 0xb9, 0x4e, 0x62, 0x5c, 0xbc, 0x60, 0x57, 0xc5, 0x17, 0x24, 0x96, 0x94, 0xa4, 0x16, 0xe5, 0x09, 0xb1, 0xee, 0x78, 0x79, 0x80, 0x99, 0xd1, - 0x49, 0xf4, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x8c, 0x62, - 0x87, 0xba, 0x3c, 0x89, 0x0d, 0xec, 0x1e, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x66, - 0x90, 0x4b, 0xf7, 0x00, 0x00, 0x00, + 0xc9, 0xf2, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0xe4, 0x52, + 0xc8, 0xcc, 0x87, 0xd8, 0x50, 0x50, 0x94, 0x5f, 0x51, 0xa9, 0x87, 0xe9, 0xa5, 0x00, 0xc6, 0x28, + 0x76, 0x28, 0x33, 0x89, 0x0d, 0xec, 0x66, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7c, 0x6f, + 0xa5, 0x30, 0x1b, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.go index dfc34b59d633..2fb39dc0c63b 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.go @@ -38,7 +38,7 @@ func (m *StringMatcher) Reset() { *m = StringMatcher{} } func (m *StringMatcher) String() string { return proto.CompactTextString(m) } func (*StringMatcher) ProtoMessage() {} func (*StringMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_string_1562c148619ef90d, []int{0} + return fileDescriptor_string_73aa0685fe622206, []int{0} } func (m *StringMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -234,7 +234,7 @@ func (m *ListStringMatcher) Reset() { *m = ListStringMatcher{} } func (m *ListStringMatcher) String() string { return proto.CompactTextString(m) } func (*ListStringMatcher) ProtoMessage() {} func (*ListStringMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_string_1562c148619ef90d, []int{1} + return fileDescriptor_string_73aa0685fe622206, []int{1} } func (m *ListStringMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -817,11 +817,11 @@ var ( ) func init() { - proto.RegisterFile("envoy/type/matcher/string.proto", fileDescriptor_string_1562c148619ef90d) + proto.RegisterFile("envoy/type/matcher/string.proto", fileDescriptor_string_73aa0685fe622206) } -var fileDescriptor_string_1562c148619ef90d = []byte{ - // 268 bytes of a gzipped FileDescriptorProto +var fileDescriptor_string_73aa0685fe622206 = []byte{ + // 283 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x4d, 0x2c, 0x49, 0xce, 0x48, 0x2d, 0xd2, 0x2f, 0x2e, 0x29, 0xca, 0xcc, 0x4b, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x02, 0x2b, 0xd0, @@ -836,7 +836,8 @@ var fileDescriptor_string_1562c148619ef90d = []byte{ 0x58, 0x52, 0x92, 0x5a, 0x94, 0x27, 0xc4, 0xba, 0xe3, 0xe5, 0x01, 0x66, 0x46, 0xa5, 0x38, 0x2e, 0x41, 0x9f, 0xcc, 0xe2, 0x12, 0x54, 0x27, 0x7b, 0x72, 0x71, 0x40, 0x95, 0x15, 0x4b, 0x30, 0x2a, 0x30, 0x6b, 0x70, 0x1b, 0x29, 0xea, 0x61, 0x06, 0x82, 0x1e, 0x8a, 0x26, 0xa8, 0xb5, 0x93, 0x18, - 0x99, 0x38, 0x18, 0x83, 0xe0, 0xda, 0x9d, 0x44, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, - 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x28, 0x76, 0xa8, 0xd6, 0x24, 0x36, 0x70, 0x68, 0x19, 0x03, 0x02, - 0x00, 0x00, 0xff, 0xff, 0xbd, 0x67, 0x37, 0x8d, 0x7d, 0x01, 0x00, 0x00, + 0x99, 0x38, 0x18, 0x83, 0xe0, 0xda, 0x9d, 0x2c, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, + 0xf1, 0xc1, 0x23, 0x39, 0x46, 0x2e, 0x85, 0xcc, 0x7c, 0x88, 0x41, 0x05, 0x45, 0xf9, 0x15, 0x95, + 0x58, 0xcc, 0x0c, 0x60, 0x8c, 0x62, 0x87, 0x32, 0x93, 0xd8, 0xc0, 0x21, 0x6a, 0x0c, 0x08, 0x00, + 0x00, 0xff, 0xff, 0xfc, 0xbd, 0x91, 0x79, 0xa1, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.go index 98010a7f5fd1..b8dc915842db 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.go @@ -43,7 +43,7 @@ func (m *ValueMatcher) Reset() { *m = ValueMatcher{} } func (m *ValueMatcher) String() string { return proto.CompactTextString(m) } func (*ValueMatcher) ProtoMessage() {} func (*ValueMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_value_83f5161a937e8bc9, []int{0} + return fileDescriptor_value_7040d27d1f9f985f, []int{0} } func (m *ValueMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -312,7 +312,7 @@ func (m *ValueMatcher_NullMatch) Reset() { *m = ValueMatcher_NullMatch{} func (m *ValueMatcher_NullMatch) String() string { return proto.CompactTextString(m) } func (*ValueMatcher_NullMatch) ProtoMessage() {} func (*ValueMatcher_NullMatch) Descriptor() ([]byte, []int) { - return fileDescriptor_value_83f5161a937e8bc9, []int{0, 0} + return fileDescriptor_value_7040d27d1f9f985f, []int{0, 0} } func (m *ValueMatcher_NullMatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -355,7 +355,7 @@ func (m *ListMatcher) Reset() { *m = ListMatcher{} } func (m *ListMatcher) String() string { return proto.CompactTextString(m) } func (*ListMatcher) ProtoMessage() {} func (*ListMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_value_83f5161a937e8bc9, []int{1} + return fileDescriptor_value_7040d27d1f9f985f, []int{1} } func (m *ListMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1245,31 +1245,32 @@ var ( ) func init() { - proto.RegisterFile("envoy/type/matcher/value.proto", fileDescriptor_value_83f5161a937e8bc9) + proto.RegisterFile("envoy/type/matcher/value.proto", fileDescriptor_value_7040d27d1f9f985f) } -var fileDescriptor_value_83f5161a937e8bc9 = []byte{ - // 349 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x4d, 0x4b, 0xc3, 0x30, - 0x18, 0xc7, 0x17, 0xe7, 0xa6, 0x7b, 0xba, 0x5d, 0x02, 0xbe, 0xb0, 0x43, 0x37, 0x07, 0xc2, 0xf0, - 0xd0, 0x82, 0x9e, 0xbc, 0xc9, 0x10, 0x19, 0xf8, 0x06, 0x13, 0x3c, 0x78, 0x99, 0xad, 0x7b, 0xa6, - 0x85, 0x2c, 0x29, 0x69, 0x3a, 0xd8, 0x57, 0xf1, 0x93, 0x78, 0xf4, 0xe8, 0xd1, 0x8f, 0x20, 0xbb, - 0xf9, 0x2d, 0xa4, 0x49, 0xea, 0x0a, 0x76, 0x78, 0x4b, 0x9e, 0xe7, 0xf7, 0xfc, 0xf2, 0x4f, 0x53, - 0x70, 0x91, 0xcf, 0xc5, 0xc2, 0x57, 0x8b, 0x18, 0xfd, 0x59, 0xa0, 0x9e, 0x5e, 0x50, 0xfa, 0xf3, - 0x80, 0xa5, 0xe8, 0xc5, 0x52, 0x28, 0x41, 0xa9, 0xee, 0x7b, 0x59, 0xdf, 0xb3, 0xfd, 0x76, 0xa7, - 0x64, 0x86, 0xa7, 0xb3, 0x10, 0xa5, 0x19, 0x2a, 0x05, 0x12, 0x25, 0x23, 0xfe, 0x6c, 0x81, 0xbd, - 0x79, 0xc0, 0xa2, 0x49, 0xa0, 0xd0, 0xcf, 0x17, 0xa6, 0xd1, 0x7b, 0xad, 0x42, 0xf3, 0x3e, 0x3b, - 0xfe, 0xda, 0x8c, 0xd1, 0x4b, 0x00, 0x9e, 0x32, 0x36, 0xd6, 0x9a, 0x7d, 0xd2, 0x25, 0x7d, 0xe7, - 0xf8, 0xc8, 0xfb, 0x1b, 0xca, 0x2b, 0x4e, 0x79, 0x37, 0x29, 0x63, 0x7a, 0x3d, 0xac, 0x8c, 0x1a, - 0x3c, 0xdf, 0xd0, 0x0b, 0x68, 0x4e, 0x44, 0x1a, 0x32, 0xb4, 0xba, 0x0d, 0xad, 0x3b, 0x28, 0xd3, - 0x9d, 0x6b, 0xce, 0xfa, 0x86, 0x95, 0x91, 0x33, 0x59, 0x15, 0x32, 0x8f, 0xb9, 0x8e, 0xf5, 0x54, - 0xd7, 0x7b, 0xee, 0x34, 0x57, 0xf0, 0x24, 0xab, 0x02, 0xed, 0x00, 0x84, 0x42, 0xe4, 0x97, 0xdb, - 0xec, 0x92, 0xfe, 0x76, 0x16, 0x38, 0xab, 0x19, 0xe0, 0x10, 0x5a, 0xb1, 0xc4, 0x04, 0xb9, 0xb2, - 0x4c, 0xcd, 0x32, 0x4d, 0x5b, 0x36, 0xd8, 0x19, 0x00, 0x8b, 0x92, 0x9c, 0xa9, 0xeb, 0x34, 0x9d, - 0xb2, 0x34, 0x57, 0x51, 0xa2, 0x56, 0x59, 0x1a, 0x2c, 0xdf, 0xb6, 0x1d, 0x68, 0xfc, 0x7e, 0xb3, - 0xc1, 0x2e, 0xb4, 0xf4, 0xc0, 0x38, 0x0e, 0x94, 0x42, 0xc9, 0x69, 0xed, 0xed, 0xfb, 0xbd, 0x4a, - 0x7a, 0x8f, 0xe0, 0x14, 0x04, 0xf4, 0x14, 0xea, 0x82, 0xe3, 0x58, 0x4c, 0xed, 0xb3, 0x74, 0xff, - 0x7b, 0x96, 0x61, 0x65, 0x54, 0x13, 0x1c, 0x6f, 0xa7, 0xeb, 0x4e, 0x18, 0xec, 0x7c, 0x2c, 0x5d, - 0xf2, 0xb9, 0x74, 0xc9, 0xd7, 0xd2, 0x25, 0x0f, 0x5b, 0x56, 0x12, 0xd6, 0xf5, 0xcf, 0x71, 0xf2, - 0x13, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x8d, 0x30, 0xf7, 0xad, 0x02, 0x00, 0x00, +var fileDescriptor_value_7040d27d1f9f985f = []byte{ + // 361 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xbf, 0x4e, 0xc3, 0x30, + 0x10, 0xc6, 0x6b, 0x4a, 0x0b, 0xbd, 0xb4, 0x8b, 0x07, 0x40, 0x1d, 0xd2, 0x50, 0x09, 0xa9, 0x62, + 0x70, 0x24, 0x98, 0xba, 0xa1, 0x0a, 0xa1, 0x4a, 0xfc, 0x55, 0x91, 0x18, 0x58, 0x4a, 0x42, 0x5d, + 0x88, 0xe4, 0xda, 0x91, 0xe3, 0x54, 0xf4, 0x55, 0x78, 0x12, 0x46, 0x46, 0x46, 0x1e, 0x01, 0x75, + 0xe3, 0x2d, 0x50, 0x6c, 0x87, 0x46, 0x22, 0x15, 0xdb, 0xf9, 0xee, 0xfb, 0x7e, 0xfe, 0x9c, 0x0b, + 0xb8, 0x94, 0xcf, 0xc5, 0xc2, 0x57, 0x8b, 0x98, 0xfa, 0xb3, 0x40, 0x3d, 0x3e, 0x53, 0xe9, 0xcf, + 0x03, 0x96, 0x52, 0x12, 0x4b, 0xa1, 0x04, 0xc6, 0x7a, 0x4e, 0xb2, 0x39, 0xb1, 0xf3, 0x76, 0xa7, + 0xc4, 0xc3, 0xd3, 0x59, 0x48, 0xa5, 0x31, 0x95, 0x0a, 0x12, 0x25, 0x23, 0xfe, 0x64, 0x05, 0xbb, + 0xf3, 0x80, 0x45, 0x93, 0x40, 0x51, 0x3f, 0x2f, 0xcc, 0xa0, 0xfb, 0x5a, 0x85, 0xe6, 0x5d, 0x76, + 0xfd, 0xa5, 0xb1, 0xe1, 0x73, 0x00, 0x9e, 0x32, 0x36, 0xd6, 0x98, 0x3d, 0xe4, 0xa1, 0x9e, 0x73, + 0x74, 0x48, 0xfe, 0x86, 0x22, 0x45, 0x17, 0xb9, 0x4a, 0x19, 0xd3, 0xf5, 0xb0, 0x32, 0x6a, 0xf0, + 0xfc, 0x80, 0xcf, 0xa0, 0x39, 0x11, 0x69, 0xc8, 0xa8, 0xc5, 0x6d, 0x68, 0xdc, 0x7e, 0x19, 0xee, + 0x54, 0xeb, 0x2c, 0x6f, 0x58, 0x19, 0x39, 0x93, 0x55, 0x23, 0xe3, 0x98, 0xe7, 0x58, 0x4e, 0x75, + 0x3d, 0xe7, 0x56, 0xeb, 0x0a, 0x9c, 0x64, 0xd5, 0xc0, 0x1d, 0x80, 0x50, 0x88, 0xfc, 0x71, 0x9b, + 0x1e, 0xea, 0x6d, 0x67, 0x81, 0xb3, 0x9e, 0x11, 0x1c, 0x40, 0x2b, 0x96, 0x34, 0xa1, 0x5c, 0x59, + 0x4d, 0xcd, 0x6a, 0x9a, 0xb6, 0x6d, 0x64, 0x27, 0x00, 0x2c, 0x4a, 0x72, 0x4d, 0x5d, 0xa7, 0xe9, + 0x94, 0xa5, 0xb9, 0x88, 0x12, 0xb5, 0xca, 0xd2, 0x60, 0xf9, 0xb1, 0xed, 0x40, 0xe3, 0xf7, 0x9b, + 0x0d, 0x76, 0xa0, 0xa5, 0x0d, 0xe3, 0x38, 0x50, 0x8a, 0x4a, 0x8e, 0x6b, 0x6f, 0xdf, 0xef, 0x55, + 0xd4, 0x7d, 0x00, 0xa7, 0x00, 0xc0, 0x7d, 0xa8, 0x0b, 0x4e, 0xc7, 0x62, 0x6a, 0xd7, 0xe2, 0xfd, + 0xb7, 0x96, 0x61, 0x65, 0x54, 0x13, 0x9c, 0x5e, 0x4f, 0xd7, 0xdd, 0x30, 0xe8, 0x7f, 0x2c, 0x5d, + 0xf4, 0xb9, 0x74, 0xd1, 0xd7, 0xd2, 0x45, 0xe0, 0x45, 0xc2, 0x20, 0x63, 0x29, 0x5e, 0x16, 0x25, + 0xf4, 0x1b, 0x74, 0xbf, 0x65, 0xcb, 0xb0, 0xae, 0x7f, 0xa0, 0xe3, 0x9f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xc3, 0x6c, 0x4f, 0x53, 0xd1, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.go index 3f7a715ce0f9..845130ab6c51 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.go @@ -59,7 +59,7 @@ func (x FractionalPercent_DenominatorType) String() string { return proto.EnumName(FractionalPercent_DenominatorType_name, int32(x)) } func (FractionalPercent_DenominatorType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_percent_53adcc8e73562d81, []int{1, 0} + return fileDescriptor_percent_dc45306d50a50a7f, []int{1, 0} } // Identifies a percentage, in the range [0.0, 100.0]. @@ -74,7 +74,7 @@ func (m *Percent) Reset() { *m = Percent{} } func (m *Percent) String() string { return proto.CompactTextString(m) } func (*Percent) ProtoMessage() {} func (*Percent) Descriptor() ([]byte, []int) { - return fileDescriptor_percent_53adcc8e73562d81, []int{0} + return fileDescriptor_percent_dc45306d50a50a7f, []int{0} } func (m *Percent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -131,7 +131,7 @@ func (m *FractionalPercent) Reset() { *m = FractionalPercent{} } func (m *FractionalPercent) String() string { return proto.CompactTextString(m) } func (*FractionalPercent) ProtoMessage() {} func (*FractionalPercent) Descriptor() ([]byte, []int) { - return fileDescriptor_percent_53adcc8e73562d81, []int{1} + return fileDescriptor_percent_dc45306d50a50a7f, []int{1} } func (m *FractionalPercent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -605,10 +605,10 @@ var ( ErrIntOverflowPercent = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("envoy/type/percent.proto", fileDescriptor_percent_53adcc8e73562d81) } +func init() { proto.RegisterFile("envoy/type/percent.proto", fileDescriptor_percent_dc45306d50a50a7f) } -var fileDescriptor_percent_53adcc8e73562d81 = []byte{ - // 283 bytes of a gzipped FileDescriptorProto +var fileDescriptor_percent_dc45306d50a50a7f = []byte{ + // 299 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x48, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x2f, 0x48, 0x2d, 0x4a, 0x4e, 0xcd, 0x2b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0xcb, 0xe8, 0x81, 0x64, 0xa4, 0xc4, 0xcb, 0x12, 0x73, @@ -624,7 +624,8 @@ var fileDescriptor_percent_53adcc8e73562d81 = []byte{ 0x80, 0x31, 0x08, 0xd9, 0x34, 0x25, 0x5b, 0x2e, 0x7e, 0x34, 0xb5, 0x42, 0xdc, 0x5c, 0xec, 0x1e, 0xa1, 0x7e, 0x2e, 0x41, 0xae, 0x2e, 0x02, 0x0c, 0x42, 0x02, 0x5c, 0x3c, 0x21, 0xae, 0x7e, 0xf1, 0x21, 0x1e, 0xfe, 0xa1, 0xc1, 0x8e, 0x7e, 0x2e, 0x02, 0x8c, 0x20, 0x69, 0x5f, 0x4f, 0x1f, 0x1f, - 0x4f, 0x7f, 0x3f, 0x01, 0x26, 0x27, 0x81, 0x15, 0x8f, 0xe4, 0x18, 0x4f, 0x3c, 0x92, 0x63, 0xbc, - 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x24, 0x36, 0x70, 0x20, 0x19, 0x03, 0x02, 0x00, - 0x00, 0xff, 0xff, 0x3f, 0x07, 0xea, 0x97, 0x7b, 0x01, 0x00, 0x00, + 0x4f, 0x7f, 0x3f, 0x01, 0x26, 0x27, 0x9d, 0x15, 0x8f, 0xe4, 0x18, 0x4f, 0x3c, 0x92, 0x63, 0xbc, + 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0x46, 0x2e, 0x89, 0xcc, 0x7c, 0x88, 0xd3, 0x0a, 0x8a, + 0xf2, 0x2b, 0x2a, 0x91, 0x5c, 0x19, 0xc0, 0x98, 0xc4, 0x06, 0x0e, 0x40, 0x63, 0x40, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x57, 0x97, 0xfd, 0xbf, 0x97, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.go b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.go index f04e9b2e09c7..3cd824d0ee86 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.go +++ b/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.go @@ -41,7 +41,7 @@ func (m *Int64Range) Reset() { *m = Int64Range{} } func (m *Int64Range) String() string { return proto.CompactTextString(m) } func (*Int64Range) ProtoMessage() {} func (*Int64Range) Descriptor() ([]byte, []int) { - return fileDescriptor_range_9717c226d88bb0a0, []int{0} + return fileDescriptor_range_5bab87ce95a03009, []int{0} } func (m *Int64Range) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -100,7 +100,7 @@ func (m *DoubleRange) Reset() { *m = DoubleRange{} } func (m *DoubleRange) String() string { return proto.CompactTextString(m) } func (*DoubleRange) ProtoMessage() {} func (*DoubleRange) Descriptor() ([]byte, []int) { - return fileDescriptor_range_9717c226d88bb0a0, []int{1} + return fileDescriptor_range_5bab87ce95a03009, []int{1} } func (m *DoubleRange) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -596,10 +596,10 @@ var ( ErrIntOverflowRange = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("envoy/type/range.proto", fileDescriptor_range_9717c226d88bb0a0) } +func init() { proto.RegisterFile("envoy/type/range.proto", fileDescriptor_range_5bab87ce95a03009) } -var fileDescriptor_range_9717c226d88bb0a0 = []byte{ - // 159 bytes of a gzipped FileDescriptorProto +var fileDescriptor_range_5bab87ce95a03009 = []byte{ + // 176 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x2f, 0x4a, 0xcc, 0x4b, 0x4f, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0x8b, 0xeb, 0x81, 0xc4, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, @@ -607,7 +607,8 @@ var fileDescriptor_range_9717c226d88bb0a0 = []byte{ 0x48, 0x97, 0x90, 0x08, 0x17, 0x6b, 0x71, 0x49, 0x62, 0x51, 0x89, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x73, 0x10, 0x84, 0x23, 0x24, 0xc0, 0xc5, 0x9c, 0x9a, 0x97, 0x22, 0xc1, 0x04, 0x16, 0x03, 0x31, 0x95, 0x4c, 0xb9, 0xb8, 0x5d, 0xf2, 0x4b, 0x93, 0x72, 0x52, 0xb1, 0x68, 0x63, 0xc4, 0xa2, 0x8d, - 0x11, 0xac, 0xcd, 0x49, 0x66, 0xc5, 0x23, 0x39, 0xc6, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, - 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x31, 0x0a, 0xe2, 0xc0, 0x78, 0x90, 0x03, 0x93, 0xd8, 0xc0, 0x2e, - 0x32, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xae, 0xd4, 0x26, 0x8b, 0xcd, 0x00, 0x00, 0x00, + 0x11, 0xac, 0xcd, 0xc9, 0x62, 0xc5, 0x23, 0x39, 0xc6, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, + 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x91, 0x4b, 0x22, 0x33, 0x5f, 0x0f, 0xec, 0xc6, 0x82, 0xa2, 0xfc, + 0x8a, 0x4a, 0x3d, 0x84, 0x73, 0x03, 0x18, 0xa3, 0x20, 0x8e, 0x8f, 0x07, 0xf1, 0x92, 0xd8, 0xc0, + 0xae, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x46, 0x33, 0xcc, 0x3a, 0xe9, 0x00, 0x00, 0x00, } diff --git a/vendor/github.com/envoyproxy/go-control-plane/glide.lock b/vendor/github.com/envoyproxy/go-control-plane/glide.lock index 4aad77c49263..e5b8f62bf62d 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/glide.lock +++ b/vendor/github.com/envoyproxy/go-control-plane/glide.lock @@ -1,8 +1,8 @@ -hash: 848ee6cec6eb07c9f25f8ba7711d34f8690ebc74b673b001c2480ecaed889069 -updated: 2019-01-03T15:13:47.274325-06:00 +hash: e84546e07298e70d632d9a327cb87af1239a8607eca3daed94901aec9e96641c +updated: 2019-01-24T08:03:52.528311785-08:00 imports: - name: github.com/envoyproxy/data-plane-api - version: 6ad6c651384df9743caf5126c4878db646b767ac + version: 392777ff3b87412810bed2bc04da6cfb5a8edc9b - name: github.com/gogo/googleapis version: 8558fb44d2f1fc223118afc694129d2c2d2924d1 subpackages: @@ -34,7 +34,7 @@ imports: subpackages: - validate - name: github.com/sirupsen/logrus - version: bcd833dfe83d3cebad139e4a29ed79cb2318bf95 + version: e1e72e9de974bd926e5c56f83753fba2df402ce5 - name: golang.org/x/crypto version: 0c41d7ab0a0ee717d4590a44bcb987dfd9e183eb subpackages: @@ -68,7 +68,7 @@ imports: - googleapis/rpc/status - opencensus - name: google.golang.org/grpc - version: df014850f6dee74ba2fc94874043a9f3f75fbfd8 + version: a02b0774206b209466313a0b525d2c738fe407eb subpackages: - balancer - balancer/base @@ -101,7 +101,7 @@ imports: - status - tap - name: istio.io/gogo-genproto - version: e7e4d094a5f0fc3c2245f37ce54ccbbd83fd4355 + version: 6d926a6e6feb2c0a1a72234b4aafa638dca29956 subpackages: - opencensus/proto/trace - prometheus diff --git a/vendor/github.com/envoyproxy/go-control-plane/glide.yaml b/vendor/github.com/envoyproxy/go-control-plane/glide.yaml index a0ba7f834eaf..22917831595c 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/glide.yaml +++ b/vendor/github.com/envoyproxy/go-control-plane/glide.yaml @@ -22,6 +22,6 @@ import: - package: istio.io/gogo-genproto - package: github.com/gogo/googleapis - package: github.com/envoyproxy/data-plane-api - version: 6ad6c651384df9743caf5126c4878db646b767ac + version: 392777ff3b87412810bed2bc04da6cfb5a8edc9b - package: github.com/sirupsen/logrus version: ^1.0.4 diff --git a/vendor/github.com/envoyproxy/go-control-plane/pkg/cache/resource.go b/vendor/github.com/envoyproxy/go-control-plane/pkg/cache/resource.go index 0554d6b4f9a2..9f3b2508ae73 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/pkg/cache/resource.go +++ b/vendor/github.com/envoyproxy/go-control-plane/pkg/cache/resource.go @@ -18,6 +18,7 @@ import ( "github.com/gogo/protobuf/proto" v2 "github.com/envoyproxy/go-control-plane/envoy/api/v2" + "github.com/envoyproxy/go-control-plane/envoy/api/v2/auth" hcm "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2" "github.com/envoyproxy/go-control-plane/pkg/util" ) @@ -35,6 +36,7 @@ const ( ClusterType = typePrefix + "Cluster" RouteType = typePrefix + "RouteConfiguration" ListenerType = typePrefix + "Listener" + SecretType = typePrefix + "auth.Secret" // AnyType is used only by ADS AnyType = "" @@ -47,6 +49,7 @@ var ( ClusterType, RouteType, ListenerType, + SecretType, } ) @@ -61,6 +64,8 @@ func GetResourceName(res Resource) string { return v.GetName() case *v2.Listener: return v.GetName() + case *auth.Secret: + return v.GetName() default: return "" } diff --git a/vendor/github.com/envoyproxy/go-control-plane/pkg/cache/snapshot.go b/vendor/github.com/envoyproxy/go-control-plane/pkg/cache/snapshot.go index da7fbbd31774..1eb860c75fc0 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/pkg/cache/snapshot.go +++ b/vendor/github.com/envoyproxy/go-control-plane/pkg/cache/snapshot.go @@ -60,6 +60,9 @@ type Snapshot struct { // Listeners are items in the LDS response payload. Listeners Resources + + // Secrets are items in the SDS response payload. + Secrets Resources } // NewSnapshot creates a snapshot from response types and a version. @@ -117,6 +120,8 @@ func (s *Snapshot) GetResources(typ string) map[string]Resource { return s.Routes.Items case ListenerType: return s.Listeners.Items + case SecretType: + return s.Secrets.Items } return nil } @@ -135,6 +140,8 @@ func (s *Snapshot) GetVersion(typ string) string { return s.Routes.Version case ListenerType: return s.Listeners.Version + case SecretType: + return s.Secrets.Version } return "" } diff --git a/vendor/github.com/envoyproxy/go-control-plane/pkg/server/gateway.go b/vendor/github.com/envoyproxy/go-control-plane/pkg/server/gateway.go index 993bd08e90c1..8499dd45ad9d 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/pkg/server/gateway.go +++ b/vendor/github.com/envoyproxy/go-control-plane/pkg/server/gateway.go @@ -50,6 +50,8 @@ func (h *HTTPGateway) ServeHTTP(resp http.ResponseWriter, req *http.Request) { typeURL = cache.ListenerType case "/v2/discovery:routes": typeURL = cache.RouteType + case "/v2/discovery:secrets": + typeURL = cache.SecretType default: http.Error(resp, "no endpoint", http.StatusNotFound) return diff --git a/vendor/github.com/envoyproxy/go-control-plane/pkg/server/server.go b/vendor/github.com/envoyproxy/go-control-plane/pkg/server/server.go index ee824c740999..88abe861e1f6 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/pkg/server/server.go +++ b/vendor/github.com/envoyproxy/go-control-plane/pkg/server/server.go @@ -39,6 +39,7 @@ type Server interface { v2.RouteDiscoveryServiceServer v2.ListenerDiscoveryServiceServer discovery.AggregatedDiscoveryServiceServer + discovery.SecretDiscoveryServiceServer // Fetch is the universal fetch method. Fetch(context.Context, *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) @@ -89,16 +90,19 @@ type watches struct { clusters chan cache.Response routes chan cache.Response listeners chan cache.Response + secrets chan cache.Response endpointCancel func() clusterCancel func() routeCancel func() listenerCancel func() + secretCancel func() endpointNonce string clusterNonce string routeNonce string listenerNonce string + secretNonce string } // Cancel all watches @@ -115,6 +119,9 @@ func (values watches) Cancel() { if values.listenerCancel != nil { values.listenerCancel() } + if values.secretCancel != nil { + values.secretCancel() + } } func createResponse(resp *cache.Response, typeURL string) (*v2.DiscoveryResponse, error) { @@ -223,6 +230,16 @@ func (s *server) process(stream stream, reqCh <-chan *v2.DiscoveryRequest, defau } values.listenerNonce = nonce + case resp, more := <-values.secrets: + if !more { + return status.Errorf(codes.Unavailable, "secrets watch failed") + } + nonce, err := send(resp, cache.SecretType) + if err != nil { + return err + } + values.secretNonce = nonce + case req, more := <-reqCh: // input stream ended or errored out if !more { @@ -270,6 +287,11 @@ func (s *server) process(stream stream, reqCh <-chan *v2.DiscoveryRequest, defau values.listenerCancel() } values.listeners, values.listenerCancel = s.cache.CreateWatch(*req) + case req.TypeUrl == cache.SecretType && (values.secretNonce == "" || values.secretNonce == nonce): + if values.secretCancel != nil { + values.secretCancel() + } + values.secrets, values.secretCancel = s.cache.CreateWatch(*req) } } } @@ -323,6 +345,10 @@ func (s *server) StreamListeners(stream v2.ListenerDiscoveryService_StreamListen return s.handler(stream, cache.ListenerType) } +func (s *server) StreamSecrets(stream discovery.SecretDiscoveryService_StreamSecretsServer) error { + return s.handler(stream, cache.SecretType) +} + // Fetch is the universal fetch method. func (s *server) Fetch(ctx context.Context, req *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) { if s.callbacks != nil { @@ -373,6 +399,14 @@ func (s *server) FetchListeners(ctx context.Context, req *v2.DiscoveryRequest) ( return s.Fetch(ctx, req) } +func (s *server) FetchSecrets(ctx context.Context, req *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) { + if req == nil { + return nil, status.Errorf(codes.Unavailable, "empty request") + } + req.TypeUrl = cache.SecretType + return s.Fetch(ctx, req) +} + func (s *server) IncrementalAggregatedResources(_ discovery.AggregatedDiscoveryService_IncrementalAggregatedResourcesServer) error { return errors.New("not implemented") } diff --git a/vendor/github.com/envoyproxy/go-control-plane/pkg/test/main/main.go b/vendor/github.com/envoyproxy/go-control-plane/pkg/test/main/main.go index fa5ea120a3e7..bc2d3480e5e8 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/pkg/test/main/main.go +++ b/vendor/github.com/envoyproxy/go-control-plane/pkg/test/main/main.go @@ -17,6 +17,7 @@ package main import ( "context" + cryptotls "crypto/tls" "flag" "fmt" "io/ioutil" @@ -51,6 +52,7 @@ var ( clusters int httpListeners int tcpListeners int + tls bool nodeID string ) @@ -70,6 +72,7 @@ func init() { flag.IntVar(&httpListeners, "http", 2, "Number of HTTP listeners (and RDS configs)") flag.IntVar(&tcpListeners, "tcp", 2, "Number of TCP pass-through listeners") flag.StringVar(&nodeID, "nodeID", "test-id", "Node ID") + flag.BoolVar(&tls, "tls", false, "Enable TLS on all listeners and use SDS for secret delivery") } // main returns code 1 if any of the batches failed to pass all requests @@ -98,6 +101,7 @@ func main() { NumClusters: clusters, NumHTTPListeners: httpListeners, NumTCPListeners: tcpListeners, + TLS: tls, } // start the xDS server @@ -164,8 +168,15 @@ func callEcho() (int, int) { go func(i int) { client := http.Client{ Timeout: 100 * time.Millisecond, + Transport: &http.Transport{ + TLSClientConfig: &cryptotls.Config{InsecureSkipVerify: true}, + }, } - req, err := client.Get(fmt.Sprintf("http://localhost:%d", basePort+uint(i))) + proto := "http" + if tls { + proto = "https" + } + req, err := client.Get(fmt.Sprintf("%s://127.0.0.1:%d", proto, basePort+uint(i))) if err != nil { ch <- err return diff --git a/vendor/github.com/envoyproxy/go-control-plane/pkg/test/resource/resource.go b/vendor/github.com/envoyproxy/go-control-plane/pkg/test/resource/resource.go index 814d296557a1..6a68512c0066 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/pkg/test/resource/resource.go +++ b/vendor/github.com/envoyproxy/go-control-plane/pkg/test/resource/resource.go @@ -20,6 +20,7 @@ import ( "time" v2 "github.com/envoyproxy/go-control-plane/envoy/api/v2" + "github.com/envoyproxy/go-control-plane/envoy/api/v2/auth" "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" "github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint" "github.com/envoyproxy/go-control-plane/envoy/api/v2/listener" @@ -59,14 +60,16 @@ func MakeEndpoint(clusterName string, port uint32) *v2.ClusterLoadAssignment { ClusterName: clusterName, Endpoints: []endpoint.LocalityLbEndpoints{{ LbEndpoints: []endpoint.LbEndpoint{{ - Endpoint: &endpoint.Endpoint{ - Address: &core.Address{ - Address: &core.Address_SocketAddress{ - SocketAddress: &core.SocketAddress{ - Protocol: core.TCP, - Address: localhost, - PortSpecifier: &core.SocketAddress_PortValue{ - PortValue: port, + HostIdentifier: &endpoint.LbEndpoint_Endpoint{ + Endpoint: &endpoint.Endpoint{ + Address: &core.Address{ + Address: &core.Address_SocketAddress{ + SocketAddress: &core.SocketAddress{ + Protocol: core.TCP, + Address: localhost, + PortSpecifier: &core.SocketAddress_PortValue{ + PortValue: port, + }, }, }, }, @@ -147,17 +150,16 @@ func MakeRoute(routeName, clusterName string) *v2.RouteConfiguration { } } -// MakeHTTPListener creates a listener using either ADS or RDS for the route. -func MakeHTTPListener(mode string, listenerName string, port uint32, route string) *v2.Listener { - // data source configuration - rdsSource := core.ConfigSource{} +// data source configuration +func configSource(mode string) *core.ConfigSource { + source := &core.ConfigSource{} switch mode { case Ads: - rdsSource.ConfigSourceSpecifier = &core.ConfigSource_Ads{ + source.ConfigSourceSpecifier = &core.ConfigSource_Ads{ Ads: &core.AggregatedConfigSource{}, } case Xds: - rdsSource.ConfigSourceSpecifier = &core.ConfigSource_ApiConfigSource{ + source.ConfigSourceSpecifier = &core.ConfigSource_ApiConfigSource{ ApiConfigSource: &core.ApiConfigSource{ ApiType: core.ApiConfigSource_GRPC, GrpcServices: []*core.GrpcService{{ @@ -168,7 +170,7 @@ func MakeHTTPListener(mode string, listenerName string, port uint32, route strin }, } case Rest: - rdsSource.ConfigSourceSpecifier = &core.ConfigSource_ApiConfigSource{ + source.ConfigSourceSpecifier = &core.ConfigSource_ApiConfigSource{ ApiConfigSource: &core.ApiConfigSource{ ApiType: core.ApiConfigSource_REST, ClusterNames: []string{XdsCluster}, @@ -176,6 +178,12 @@ func MakeHTTPListener(mode string, listenerName string, port uint32, route strin }, } } + return source +} + +// MakeHTTPListener creates a listener using either ADS or RDS for the route. +func MakeHTTPListener(mode string, listenerName string, port uint32, route string) *v2.Listener { + rdsSource := configSource(mode) // access log service configuration alsConfig := &als.HttpGrpcAccessLogConfig{ @@ -201,7 +209,7 @@ func MakeHTTPListener(mode string, listenerName string, port uint32, route strin StatPrefix: "http", RouteSpecifier: &hcm.HttpConnectionManager_Rds{ Rds: &hcm.Rds{ - ConfigSource: rdsSource, + ConfigSource: *rdsSource, RouteConfigName: route, }, }, @@ -298,6 +306,8 @@ type TestSnapshot struct { // NumTCPListeners is the total number of TCP listeners to generate. // Listeners are assigned clusters in a round-robin fashion. NumTCPListeners int + // TLS enables SDS-enabled TLS mode on all listeners + TLS bool } // Generate produces a snapshot from the parameters. @@ -322,12 +332,46 @@ func (ts TestSnapshot) Generate() cache.Snapshot { port := ts.BasePort + uint32(i) // listener name must be same since ports are shared and previous listener is drained name := fmt.Sprintf("listener-%d", port) + var listener *v2.Listener if i < ts.NumHTTPListeners { - listeners[i] = MakeHTTPListener(ts.Xds, name, port, cache.GetResourceName(routes[i])) + listener = MakeHTTPListener(ts.Xds, name, port, cache.GetResourceName(routes[i])) } else { - listeners[i] = MakeTCPListener(name, port, cache.GetResourceName(clusters[i%ts.NumClusters])) + listener = MakeTCPListener(name, port, cache.GetResourceName(clusters[i%ts.NumClusters])) + } + + if ts.TLS { + for i, chain := range listener.FilterChains { + chain.TlsContext = &auth.DownstreamTlsContext{ + CommonTlsContext: &auth.CommonTlsContext{ + TlsCertificateSdsSecretConfigs: []*auth.SdsSecretConfig{{ + Name: tlsName, + SdsConfig: configSource(ts.Xds), + }}, + ValidationContextType: &auth.CommonTlsContext_ValidationContextSdsSecretConfig{ + ValidationContextSdsSecretConfig: &auth.SdsSecretConfig{ + Name: rootName, + SdsConfig: configSource(ts.Xds), + }, + }, + }, + } + listener.FilterChains[i] = chain + } } + + listeners[i] = listener + } + + out := cache.Snapshot{ + Endpoints: cache.NewResources(ts.Version, endpoints), + Clusters: cache.NewResources(ts.Version, clusters), + Routes: cache.NewResources(ts.Version, routes), + Listeners: cache.NewResources(ts.Version, listeners), + } + + if ts.TLS { + out.Secrets = cache.NewResources(ts.Version, MakeSecrets(tlsName, rootName)) } - return cache.NewSnapshot(ts.Version, endpoints, clusters, routes, listeners) + return out } diff --git a/vendor/github.com/envoyproxy/go-control-plane/pkg/test/resource/secret.go b/vendor/github.com/envoyproxy/go-control-plane/pkg/test/resource/secret.go new file mode 100644 index 000000000000..e4812b6c75b4 --- /dev/null +++ b/vendor/github.com/envoyproxy/go-control-plane/pkg/test/resource/secret.go @@ -0,0 +1,127 @@ +// Copyright 2019 Envoyproxy Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package resource + +import ( + "github.com/envoyproxy/go-control-plane/envoy/api/v2/auth" + "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + "github.com/envoyproxy/go-control-plane/pkg/cache" +) + +const ( + tlsName = "tlssecret" + + rootName = "rootsecret" + + privateKey = `-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAsU265Ev3yVUAGds4qorN/QH0acOPO/gO7diGcfZ7QSQvjBUn +TGO00EquFyqU9ameU0X1YPUWMsATE7HEQZFV7dtiQdN7OATNMIWgAH4Rhl6zLbc0 +sh2MpxJQqakE6klZo5ZDRuXm11o8tdM9+kj2m9SlwtrflXd+jQ1afvsgvUP1FsA5 +rZfOk0+WBzWymJDEsSZELQVh6LM94Y/0x55vj0dx+jtweGpsBAbLwS9SWqk1ynKr +6K7ZYiUnfM1jTqIF4NTwfe79lfttXZZHLBjtm2UZQZWz4R1VRQP/yoFVWXUMydhg +fUsnBYoWBCPgLRDGdf6+/NmIcMOUdhAFQmd5YQIDAQABAoIBAD3bMGiVWE0VKoPa +x1o4MsUh+XMslrwFPrAb6ku4Aignx67Hcn5kCqDgbPwIDw/lrSbAMWsyFhx+hilI +y39UhPYGo7DzZvmUM0HKXJfPY63NPBWm5Ot/A6MF8L5ACUbzcCJyOeZyLqbTBHsq +x2SaL+8NsQbZ9Ubf+XacQgYq9rEQf4ZnbVBiM7Wx1qQikApkbA6Ik7d8f4ojSdgq +jbo+0JB51gspCfks0udi23WHaxW8vZO5EI+IWsiVk8Xd+TOotluvwgEjMN8ymJui +Z/Xcu45RAMgrW4jRuO8ePiIvTIvAiTTktz6pCVXiQhd3iX+GL3eL1ZbbYQnAY1/S +dENtpwECgYEAylK4je4Yf58xygkfaqGCjv99sNXGQ2GLvZQFUUen1fbWRCZN1Hot +wYXsF0M+J15ErwORAb8/E7roWcRHYJa8SjGNCBSyunCTH8LDVasKoICvdLiGfCI5 +7oweQRKUOBN9yxD3rcIIH+8TzNOoeZA5g0Wk/vzszWINTbOXnTRX30UCgYEA4Fe/ +bu4Uq6m1ZUZb7BjdOwkHrVD5WknayDECEDAaTuZBGEY71rpxjttgALbg29XJ4tpV +hjyBZF3IlBYyifSbRnlKFV3kGY604+2lOIhZKx86Crmmu+io+t3mfgq4daXXfgie +/qbWBGmin/dn3PMDhdtPCIYYLMIFfcFUiA5l1W0CgYEAnfOOmV90SM4jtLMCj+Cf +aLwViGSccCZLTimtLRNf+C7IgFPXFzZ7WkYPVunsMBfsTyXdoxuHRwP4OXx+rO2A ++ftNOy3NirgwY+9NSChMF5nfYKReebLOv2kshWjXxh+RaWNJuaFtbmDbeGEVejIa +dF1+voL+7CjMcgjvKI+gunECgYAPqTB87vPUc/lsw3ehSK8Q8vVtPOzbR7KVLQ6m +0KTVgy9iIW0F9Wf+AAR4qEuULR11z6YOw+SIfB+HbvFCPigkyEzKpw5IVnT8QFe7 +VZFb+EcV/pXMIlbBhIIVpGvyEoyziKiIwF7KWhF3N08x1mkVjBS9VJcVcMnvWHKt +OMwVFQKBgDJQ5OmU6JtN+FZb4sh6vJ1zaqr8TQ5axF+0C9p7HEgnrsbLel78H0iQ +W4TS0TMSQ8pTybUXb+u9nTh4/dfuf7vJtS2N31/68XQO1sHC/hxZg8ow2Yeq//5p +Jt/f/Fu1KusLb/sM9FurtVKuVhu2qeAFQXat0uKop76fZV56XVrh +-----END RSA PRIVATE KEY-----` + + privateChain = `-----BEGIN CERTIFICATE----- +MIIDWzCCAkOgAwIBAgIQcojbQweHMt1XQLs8eIpyqTANBgkqhkiG9w0BAQsFADBF +MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 +ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4XDTE4MDgwOTIzMDg0MloXDTE5MDgwOTIz +MDg0MlowEzERMA8GA1UEChMISnVqdSBvcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQCxTbrkS/fJVQAZ2ziqis39AfRpw487+A7t2IZx9ntBJC+MFSdM +Y7TQSq4XKpT1qZ5TRfVg9RYywBMTscRBkVXt22JB03s4BM0whaAAfhGGXrMttzSy +HYynElCpqQTqSVmjlkNG5ebXWjy10z36SPab1KXC2t+Vd36NDVp++yC9Q/UWwDmt +l86TT5YHNbKYkMSxJkQtBWHosz3hj/THnm+PR3H6O3B4amwEBsvBL1JaqTXKcqvo +rtliJSd8zWNOogXg1PB97v2V+21dlkcsGO2bZRlBlbPhHVVFA//KgVVZdQzJ2GB9 +SycFihYEI+AtEMZ1/r782Yhww5R2EAVCZ3lhAgMBAAGjeTB3MA4GA1UdDwEB/wQE +AwIFoDAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFCudfB/DxIfxp92elExpHJfN +eMliMDYGA1UdEQQvMC2GK3NwaWZmZTovL2NsdXN0ZXIubG9jYWwvbnMvZGVmYXVs +dC9zYS9zZXJ2ZXIwDQYJKoZIhvcNAQELBQADggEBAKQuLmnWXotaiA8SiV7QYWWw +aAHnlNS/HgvUmgNYort+IlhCb0a4098ncmnP0fyyuQloElEWKE/00/d9eLiocWHt +tKhftYQ6Z9DY5nNerbb3uv8fKrV91z5paFiHfXotw2e1zmtjP3Guve9agmKjhote +gcgPQ2MIfvmFDD7lGrkstDhubUwXXh4nE9bqTl6W2Jl/PIs6e/bvZtaUM/yySFbB +upmaQWrVXaWsAf5xI3PVtCQqCGOesI6YgDt3/SkiSMPsFb6dC5GKq/dVLGHw26Tw +jA25kE/wpOv0TvEAtEJ1V3GiDAODHwEt2m+IA58lZJcuj5GCqyHcKVW8KV8VVFc= +-----END CERTIFICATE-----` + + rootCert = `-----BEGIN CERTIFICATE----- +MIIDXTCCAkWgAwIBAgIJAOtgaSEVTdk7MA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQwHhcNMTgwODA5MjMwODI3WhcNMjMwODA4MjMwODI3WjBF +MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 +ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAq0+Cg1WgcmC0X7Zcw75V/FZ9zJVhZinSAozxF5g8ci/QkGt0u1hI2lFg +UYNHnWi8bhxcIHpK56WkY1D/2lFmXc32YxlFhAy+Ox1FTIqOW/VnvteUnUoe8GUw +ADBEgtcZGUrAEKO8l8mjGyIpWbUI+G7tizB+9bx2dPuVXuzP/6ZZv5i1wmWhC/vp +CgV8VaJ0qAjUAnQ25Q9GETHqYxUDOq1f7LrSCX16yhfXsqXhKtNxF370VcvZWjTM +sQPn588QvSOdLYuYYnYz+TK4ixmCvoQtnzcmnhYSt3ae7YQW8vyD5huLtXl6jiU5 +KKGm2cLdfpY2KEQKLpJQLum1TscGkQIDAQABo1AwTjAdBgNVHQ4EFgQUK518H8PE +h/Gn3Z6UTGkcl814yWIwHwYDVR0jBBgwFoAUK518H8PEh/Gn3Z6UTGkcl814yWIw +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAZ+x0ppSUYQUw6FCVFjkp +C99bX5O/jxRXoPCmsqh+NoOjvni65IKR7ilxDXLcrXaSNovopWDo4Fz7fQaR9xwk +0fIgu+JNdq72LmHlrCtjlD0Es08R+KUHWgpbHxaKq77+Ie/9w+pY3uDQz0dMy/yN +yw3pH4By0lYwKt4QzRtA9btCiLYivReV9b+3P2P5IR+BLtLXt4j8LvstoJYhagUn +L1qakOGqxFLL0P3CuulGACAH0jRRIhrREKnj3rVFGtdl4APafBn9XnJwzlwwj/GU +y5E2qAmEqYO6m1rVPeeE0kjP5rIOEH5qQKpxtJ2/gAqc0OOmbFrnbfOWGUNkWn7X +yA== +-----END CERTIFICATE-----` +) + +// MakeSecrets generates an SDS secret +func MakeSecrets(tlsName, rootName string) []cache.Resource { + return []cache.Resource{ + &auth.Secret{ + Name: tlsName, + Type: &auth.Secret_TlsCertificate{ + TlsCertificate: &auth.TlsCertificate{ + PrivateKey: &core.DataSource{ + Specifier: &core.DataSource_InlineBytes{InlineBytes: []byte(privateKey)}, + }, + CertificateChain: &core.DataSource{ + Specifier: &core.DataSource_InlineBytes{InlineBytes: []byte(privateChain)}, + }, + }, + }, + }, + &auth.Secret{ + Name: rootName, + Type: &auth.Secret_ValidationContext{ + ValidationContext: &auth.CertificateValidationContext{ + TrustedCa: &core.DataSource{ + Specifier: &core.DataSource_InlineBytes{InlineBytes: []byte(rootCert)}, + }, + }, + }, + }, + } +} diff --git a/vendor/github.com/envoyproxy/go-control-plane/pkg/test/server.go b/vendor/github.com/envoyproxy/go-control-plane/pkg/test/server.go index 597cc000de4f..920078071737 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/pkg/test/server.go +++ b/vendor/github.com/envoyproxy/go-control-plane/pkg/test/server.go @@ -112,6 +112,7 @@ func RunManagementServer(ctx context.Context, server xds.Server, port uint) { v2.RegisterClusterDiscoveryServiceServer(grpcServer, server) v2.RegisterRouteDiscoveryServiceServer(grpcServer, server) v2.RegisterListenerDiscoveryServiceServer(grpcServer, server) + discovery.RegisterSecretDiscoveryServiceServer(grpcServer, server) log.WithFields(log.Fields{"port": port}).Info("management server listening") go func() { diff --git a/vendor/github.com/envoyproxy/go-control-plane/pkg/util/wellknown.go b/vendor/github.com/envoyproxy/go-control-plane/pkg/util/wellknown.go index ea1f80ea1be2..b0627e8d1ef9 100644 --- a/vendor/github.com/envoyproxy/go-control-plane/pkg/util/wellknown.go +++ b/vendor/github.com/envoyproxy/go-control-plane/pkg/util/wellknown.go @@ -66,6 +66,8 @@ const ( ThriftProxy = "envoy.filters.network.thrift_proxy" // RedisProxy network filter RedisProxy = "envoy.redis_proxy" + // MySQLProxy network filter + MySQLProxy = "envoy.filters.network.mysql_proxy" // ExternalAuthorization network filter ExternalAuthorization = "envoy.ext_authz" ) diff --git a/vendor/github.com/google/go-cmp/cmp/cmpopts/equate.go b/vendor/github.com/google/go-cmp/cmp/cmpopts/equate.go new file mode 100644 index 000000000000..41bbddc61b22 --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/cmpopts/equate.go @@ -0,0 +1,89 @@ +// Copyright 2017, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE.md file. + +// Package cmpopts provides common options for the cmp package. +package cmpopts + +import ( + "math" + "reflect" + + "github.com/google/go-cmp/cmp" +) + +func equateAlways(_, _ interface{}) bool { return true } + +// EquateEmpty returns a Comparer option that determines all maps and slices +// with a length of zero to be equal, regardless of whether they are nil. +// +// EquateEmpty can be used in conjunction with SortSlices and SortMaps. +func EquateEmpty() cmp.Option { + return cmp.FilterValues(isEmpty, cmp.Comparer(equateAlways)) +} + +func isEmpty(x, y interface{}) bool { + vx, vy := reflect.ValueOf(x), reflect.ValueOf(y) + return (x != nil && y != nil && vx.Type() == vy.Type()) && + (vx.Kind() == reflect.Slice || vx.Kind() == reflect.Map) && + (vx.Len() == 0 && vy.Len() == 0) +} + +// EquateApprox returns a Comparer option that determines float32 or float64 +// values to be equal if they are within a relative fraction or absolute margin. +// This option is not used when either x or y is NaN or infinite. +// +// The fraction determines that the difference of two values must be within the +// smaller fraction of the two values, while the margin determines that the two +// values must be within some absolute margin. +// To express only a fraction or only a margin, use 0 for the other parameter. +// The fraction and margin must be non-negative. +// +// The mathematical expression used is equivalent to: +// |x-y| ≤ max(fraction*min(|x|, |y|), margin) +// +// EquateApprox can be used in conjunction with EquateNaNs. +func EquateApprox(fraction, margin float64) cmp.Option { + if margin < 0 || fraction < 0 || math.IsNaN(margin) || math.IsNaN(fraction) { + panic("margin or fraction must be a non-negative number") + } + a := approximator{fraction, margin} + return cmp.Options{ + cmp.FilterValues(areRealF64s, cmp.Comparer(a.compareF64)), + cmp.FilterValues(areRealF32s, cmp.Comparer(a.compareF32)), + } +} + +type approximator struct{ frac, marg float64 } + +func areRealF64s(x, y float64) bool { + return !math.IsNaN(x) && !math.IsNaN(y) && !math.IsInf(x, 0) && !math.IsInf(y, 0) +} +func areRealF32s(x, y float32) bool { + return areRealF64s(float64(x), float64(y)) +} +func (a approximator) compareF64(x, y float64) bool { + relMarg := a.frac * math.Min(math.Abs(x), math.Abs(y)) + return math.Abs(x-y) <= math.Max(a.marg, relMarg) +} +func (a approximator) compareF32(x, y float32) bool { + return a.compareF64(float64(x), float64(y)) +} + +// EquateNaNs returns a Comparer option that determines float32 and float64 +// NaN values to be equal. +// +// EquateNaNs can be used in conjunction with EquateApprox. +func EquateNaNs() cmp.Option { + return cmp.Options{ + cmp.FilterValues(areNaNsF64s, cmp.Comparer(equateAlways)), + cmp.FilterValues(areNaNsF32s, cmp.Comparer(equateAlways)), + } +} + +func areNaNsF64s(x, y float64) bool { + return math.IsNaN(x) && math.IsNaN(y) +} +func areNaNsF32s(x, y float32) bool { + return areNaNsF64s(float64(x), float64(y)) +} diff --git a/vendor/github.com/google/go-cmp/cmp/cmpopts/ignore.go b/vendor/github.com/google/go-cmp/cmp/cmpopts/ignore.go new file mode 100644 index 000000000000..e86554b92b45 --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/cmpopts/ignore.go @@ -0,0 +1,145 @@ +// Copyright 2017, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE.md file. + +package cmpopts + +import ( + "fmt" + "reflect" + "unicode" + "unicode/utf8" + + "github.com/google/go-cmp/cmp" +) + +// IgnoreFields returns an Option that ignores exported fields of the +// given names on a single struct type. +// The struct type is specified by passing in a value of that type. +// +// The name may be a dot-delimited string (e.g., "Foo.Bar") to ignore a +// specific sub-field that is embedded or nested within the parent struct. +// +// This does not handle unexported fields; use IgnoreUnexported instead. +func IgnoreFields(typ interface{}, names ...string) cmp.Option { + sf := newStructFilter(typ, names...) + return cmp.FilterPath(sf.filter, cmp.Ignore()) +} + +// IgnoreTypes returns an Option that ignores all values assignable to +// certain types, which are specified by passing in a value of each type. +func IgnoreTypes(typs ...interface{}) cmp.Option { + tf := newTypeFilter(typs...) + return cmp.FilterPath(tf.filter, cmp.Ignore()) +} + +type typeFilter []reflect.Type + +func newTypeFilter(typs ...interface{}) (tf typeFilter) { + for _, typ := range typs { + t := reflect.TypeOf(typ) + if t == nil { + // This occurs if someone tries to pass in sync.Locker(nil) + panic("cannot determine type; consider using IgnoreInterfaces") + } + tf = append(tf, t) + } + return tf +} +func (tf typeFilter) filter(p cmp.Path) bool { + if len(p) < 1 { + return false + } + t := p.Last().Type() + for _, ti := range tf { + if t.AssignableTo(ti) { + return true + } + } + return false +} + +// IgnoreInterfaces returns an Option that ignores all values or references of +// values assignable to certain interface types. These interfaces are specified +// by passing in an anonymous struct with the interface types embedded in it. +// For example, to ignore sync.Locker, pass in struct{sync.Locker}{}. +func IgnoreInterfaces(ifaces interface{}) cmp.Option { + tf := newIfaceFilter(ifaces) + return cmp.FilterPath(tf.filter, cmp.Ignore()) +} + +type ifaceFilter []reflect.Type + +func newIfaceFilter(ifaces interface{}) (tf ifaceFilter) { + t := reflect.TypeOf(ifaces) + if ifaces == nil || t.Name() != "" || t.Kind() != reflect.Struct { + panic("input must be an anonymous struct") + } + for i := 0; i < t.NumField(); i++ { + fi := t.Field(i) + switch { + case !fi.Anonymous: + panic("struct cannot have named fields") + case fi.Type.Kind() != reflect.Interface: + panic("embedded field must be an interface type") + case fi.Type.NumMethod() == 0: + // This matches everything; why would you ever want this? + panic("cannot ignore empty interface") + default: + tf = append(tf, fi.Type) + } + } + return tf +} +func (tf ifaceFilter) filter(p cmp.Path) bool { + if len(p) < 1 { + return false + } + t := p.Last().Type() + for _, ti := range tf { + if t.AssignableTo(ti) { + return true + } + if t.Kind() != reflect.Ptr && reflect.PtrTo(t).AssignableTo(ti) { + return true + } + } + return false +} + +// IgnoreUnexported returns an Option that only ignores the immediate unexported +// fields of a struct, including anonymous fields of unexported types. +// In particular, unexported fields within the struct's exported fields +// of struct types, including anonymous fields, will not be ignored unless the +// type of the field itself is also passed to IgnoreUnexported. +func IgnoreUnexported(typs ...interface{}) cmp.Option { + ux := newUnexportedFilter(typs...) + return cmp.FilterPath(ux.filter, cmp.Ignore()) +} + +type unexportedFilter struct{ m map[reflect.Type]bool } + +func newUnexportedFilter(typs ...interface{}) unexportedFilter { + ux := unexportedFilter{m: make(map[reflect.Type]bool)} + for _, typ := range typs { + t := reflect.TypeOf(typ) + if t == nil || t.Kind() != reflect.Struct { + panic(fmt.Sprintf("invalid struct type: %T", typ)) + } + ux.m[t] = true + } + return ux +} +func (xf unexportedFilter) filter(p cmp.Path) bool { + sf, ok := p.Index(-1).(cmp.StructField) + if !ok { + return false + } + return xf.m[p.Index(-2).Type()] && !isExported(sf.Name()) +} + +// isExported reports whether the identifier is exported. +func isExported(id string) bool { + r, _ := utf8.DecodeRuneInString(id) + return unicode.IsUpper(r) +} diff --git a/vendor/github.com/google/go-cmp/cmp/cmpopts/sort.go b/vendor/github.com/google/go-cmp/cmp/cmpopts/sort.go new file mode 100644 index 000000000000..da17d7469384 --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/cmpopts/sort.go @@ -0,0 +1,146 @@ +// Copyright 2017, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE.md file. + +package cmpopts + +import ( + "fmt" + "reflect" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/internal/function" +) + +// SortSlices returns a Transformer option that sorts all []V. +// The less function must be of the form "func(T, T) bool" which is used to +// sort any slice with element type V that is assignable to T. +// +// The less function must be: +// • Deterministic: less(x, y) == less(x, y) +// • Irreflexive: !less(x, x) +// • Transitive: if !less(x, y) and !less(y, z), then !less(x, z) +// +// The less function does not have to be "total". That is, if !less(x, y) and +// !less(y, x) for two elements x and y, their relative order is maintained. +// +// SortSlices can be used in conjunction with EquateEmpty. +func SortSlices(less interface{}) cmp.Option { + vf := reflect.ValueOf(less) + if !function.IsType(vf.Type(), function.Less) || vf.IsNil() { + panic(fmt.Sprintf("invalid less function: %T", less)) + } + ss := sliceSorter{vf.Type().In(0), vf} + return cmp.FilterValues(ss.filter, cmp.Transformer("Sort", ss.sort)) +} + +type sliceSorter struct { + in reflect.Type // T + fnc reflect.Value // func(T, T) bool +} + +func (ss sliceSorter) filter(x, y interface{}) bool { + vx, vy := reflect.ValueOf(x), reflect.ValueOf(y) + if !(x != nil && y != nil && vx.Type() == vy.Type()) || + !(vx.Kind() == reflect.Slice && vx.Type().Elem().AssignableTo(ss.in)) || + (vx.Len() <= 1 && vy.Len() <= 1) { + return false + } + // Check whether the slices are already sorted to avoid an infinite + // recursion cycle applying the same transform to itself. + ok1 := sliceIsSorted(x, func(i, j int) bool { return ss.less(vx, i, j) }) + ok2 := sliceIsSorted(y, func(i, j int) bool { return ss.less(vy, i, j) }) + return !ok1 || !ok2 +} +func (ss sliceSorter) sort(x interface{}) interface{} { + src := reflect.ValueOf(x) + dst := reflect.MakeSlice(src.Type(), src.Len(), src.Len()) + for i := 0; i < src.Len(); i++ { + dst.Index(i).Set(src.Index(i)) + } + sortSliceStable(dst.Interface(), func(i, j int) bool { return ss.less(dst, i, j) }) + ss.checkSort(dst) + return dst.Interface() +} +func (ss sliceSorter) checkSort(v reflect.Value) { + start := -1 // Start of a sequence of equal elements. + for i := 1; i < v.Len(); i++ { + if ss.less(v, i-1, i) { + // Check that first and last elements in v[start:i] are equal. + if start >= 0 && (ss.less(v, start, i-1) || ss.less(v, i-1, start)) { + panic(fmt.Sprintf("incomparable values detected: want equal elements: %v", v.Slice(start, i))) + } + start = -1 + } else if start == -1 { + start = i + } + } +} +func (ss sliceSorter) less(v reflect.Value, i, j int) bool { + vx, vy := v.Index(i), v.Index(j) + return ss.fnc.Call([]reflect.Value{vx, vy})[0].Bool() +} + +// SortMaps returns a Transformer option that flattens map[K]V types to be a +// sorted []struct{K, V}. The less function must be of the form +// "func(T, T) bool" which is used to sort any map with key K that is +// assignable to T. +// +// Flattening the map into a slice has the property that cmp.Equal is able to +// use Comparers on K or the K.Equal method if it exists. +// +// The less function must be: +// • Deterministic: less(x, y) == less(x, y) +// • Irreflexive: !less(x, x) +// • Transitive: if !less(x, y) and !less(y, z), then !less(x, z) +// • Total: if x != y, then either less(x, y) or less(y, x) +// +// SortMaps can be used in conjunction with EquateEmpty. +func SortMaps(less interface{}) cmp.Option { + vf := reflect.ValueOf(less) + if !function.IsType(vf.Type(), function.Less) || vf.IsNil() { + panic(fmt.Sprintf("invalid less function: %T", less)) + } + ms := mapSorter{vf.Type().In(0), vf} + return cmp.FilterValues(ms.filter, cmp.Transformer("Sort", ms.sort)) +} + +type mapSorter struct { + in reflect.Type // T + fnc reflect.Value // func(T, T) bool +} + +func (ms mapSorter) filter(x, y interface{}) bool { + vx, vy := reflect.ValueOf(x), reflect.ValueOf(y) + return (x != nil && y != nil && vx.Type() == vy.Type()) && + (vx.Kind() == reflect.Map && vx.Type().Key().AssignableTo(ms.in)) && + (vx.Len() != 0 || vy.Len() != 0) +} +func (ms mapSorter) sort(x interface{}) interface{} { + src := reflect.ValueOf(x) + outType := mapEntryType(src.Type()) + dst := reflect.MakeSlice(reflect.SliceOf(outType), src.Len(), src.Len()) + for i, k := range src.MapKeys() { + v := reflect.New(outType).Elem() + v.Field(0).Set(k) + v.Field(1).Set(src.MapIndex(k)) + dst.Index(i).Set(v) + } + sortSlice(dst.Interface(), func(i, j int) bool { return ms.less(dst, i, j) }) + ms.checkSort(dst) + return dst.Interface() +} +func (ms mapSorter) checkSort(v reflect.Value) { + for i := 1; i < v.Len(); i++ { + if !ms.less(v, i-1, i) { + panic(fmt.Sprintf("partial order detected: want %v < %v", v.Index(i-1), v.Index(i))) + } + } +} +func (ms mapSorter) less(v reflect.Value, i, j int) bool { + vx, vy := v.Index(i).Field(0), v.Index(j).Field(0) + if !hasReflectStructOf { + vx, vy = vx.Elem(), vy.Elem() + } + return ms.fnc.Call([]reflect.Value{vx, vy})[0].Bool() +} diff --git a/vendor/github.com/google/go-cmp/cmp/cmpopts/sort_go17.go b/vendor/github.com/google/go-cmp/cmp/cmpopts/sort_go17.go new file mode 100644 index 000000000000..839b88ca4020 --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/cmpopts/sort_go17.go @@ -0,0 +1,46 @@ +// Copyright 2017, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE.md file. + +// +build !go1.8 + +package cmpopts + +import ( + "reflect" + "sort" +) + +const hasReflectStructOf = false + +func mapEntryType(reflect.Type) reflect.Type { + return reflect.TypeOf(struct{ K, V interface{} }{}) +} + +func sliceIsSorted(slice interface{}, less func(i, j int) bool) bool { + return sort.IsSorted(reflectSliceSorter{reflect.ValueOf(slice), less}) +} +func sortSlice(slice interface{}, less func(i, j int) bool) { + sort.Sort(reflectSliceSorter{reflect.ValueOf(slice), less}) +} +func sortSliceStable(slice interface{}, less func(i, j int) bool) { + sort.Stable(reflectSliceSorter{reflect.ValueOf(slice), less}) +} + +type reflectSliceSorter struct { + slice reflect.Value + less func(i, j int) bool +} + +func (ss reflectSliceSorter) Len() int { + return ss.slice.Len() +} +func (ss reflectSliceSorter) Less(i, j int) bool { + return ss.less(i, j) +} +func (ss reflectSliceSorter) Swap(i, j int) { + vi := ss.slice.Index(i).Interface() + vj := ss.slice.Index(j).Interface() + ss.slice.Index(i).Set(reflect.ValueOf(vj)) + ss.slice.Index(j).Set(reflect.ValueOf(vi)) +} diff --git a/vendor/github.com/google/go-cmp/cmp/cmpopts/sort_go18.go b/vendor/github.com/google/go-cmp/cmp/cmpopts/sort_go18.go new file mode 100644 index 000000000000..8a59c0d38fdd --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/cmpopts/sort_go18.go @@ -0,0 +1,31 @@ +// Copyright 2017, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE.md file. + +// +build go1.8 + +package cmpopts + +import ( + "reflect" + "sort" +) + +const hasReflectStructOf = true + +func mapEntryType(t reflect.Type) reflect.Type { + return reflect.StructOf([]reflect.StructField{ + {Name: "K", Type: t.Key()}, + {Name: "V", Type: t.Elem()}, + }) +} + +func sliceIsSorted(slice interface{}, less func(i, j int) bool) bool { + return sort.SliceIsSorted(slice, less) +} +func sortSlice(slice interface{}, less func(i, j int) bool) { + sort.Slice(slice, less) +} +func sortSliceStable(slice interface{}, less func(i, j int) bool) { + sort.SliceStable(slice, less) +} diff --git a/vendor/github.com/google/go-cmp/cmp/cmpopts/struct_filter.go b/vendor/github.com/google/go-cmp/cmp/cmpopts/struct_filter.go new file mode 100644 index 000000000000..97f707983c04 --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/cmpopts/struct_filter.go @@ -0,0 +1,182 @@ +// Copyright 2017, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE.md file. + +package cmpopts + +import ( + "fmt" + "reflect" + "strings" + + "github.com/google/go-cmp/cmp" +) + +// filterField returns a new Option where opt is only evaluated on paths that +// include a specific exported field on a single struct type. +// The struct type is specified by passing in a value of that type. +// +// The name may be a dot-delimited string (e.g., "Foo.Bar") to select a +// specific sub-field that is embedded or nested within the parent struct. +func filterField(typ interface{}, name string, opt cmp.Option) cmp.Option { + // TODO: This is currently unexported over concerns of how helper filters + // can be composed together easily. + // TODO: Add tests for FilterField. + + sf := newStructFilter(typ, name) + return cmp.FilterPath(sf.filter, opt) +} + +type structFilter struct { + t reflect.Type // The root struct type to match on + ft fieldTree // Tree of fields to match on +} + +func newStructFilter(typ interface{}, names ...string) structFilter { + // TODO: Perhaps allow * as a special identifier to allow ignoring any + // number of path steps until the next field match? + // This could be useful when a concrete struct gets transformed into + // an anonymous struct where it is not possible to specify that by type, + // but the transformer happens to provide guarantees about the names of + // the transformed fields. + + t := reflect.TypeOf(typ) + if t == nil || t.Kind() != reflect.Struct { + panic(fmt.Sprintf("%T must be a struct", typ)) + } + var ft fieldTree + for _, name := range names { + cname, err := canonicalName(t, name) + if err != nil { + panic(fmt.Sprintf("%s: %v", strings.Join(cname, "."), err)) + } + ft.insert(cname) + } + return structFilter{t, ft} +} + +func (sf structFilter) filter(p cmp.Path) bool { + for i, ps := range p { + if ps.Type().AssignableTo(sf.t) && sf.ft.matchPrefix(p[i+1:]) { + return true + } + } + return false +} + +// fieldTree represents a set of dot-separated identifiers. +// +// For example, inserting the following selectors: +// Foo +// Foo.Bar.Baz +// Foo.Buzz +// Nuka.Cola.Quantum +// +// Results in a tree of the form: +// {sub: { +// "Foo": {ok: true, sub: { +// "Bar": {sub: { +// "Baz": {ok: true}, +// }}, +// "Buzz": {ok: true}, +// }}, +// "Nuka": {sub: { +// "Cola": {sub: { +// "Quantum": {ok: true}, +// }}, +// }}, +// }} +type fieldTree struct { + ok bool // Whether this is a specified node + sub map[string]fieldTree // The sub-tree of fields under this node +} + +// insert inserts a sequence of field accesses into the tree. +func (ft *fieldTree) insert(cname []string) { + if ft.sub == nil { + ft.sub = make(map[string]fieldTree) + } + if len(cname) == 0 { + ft.ok = true + return + } + sub := ft.sub[cname[0]] + sub.insert(cname[1:]) + ft.sub[cname[0]] = sub +} + +// matchPrefix reports whether any selector in the fieldTree matches +// the start of path p. +func (ft fieldTree) matchPrefix(p cmp.Path) bool { + for _, ps := range p { + switch ps := ps.(type) { + case cmp.StructField: + ft = ft.sub[ps.Name()] + if ft.ok { + return true + } + if len(ft.sub) == 0 { + return false + } + case cmp.Indirect: + default: + return false + } + } + return false +} + +// canonicalName returns a list of identifiers where any struct field access +// through an embedded field is expanded to include the names of the embedded +// types themselves. +// +// For example, suppose field "Foo" is not directly in the parent struct, +// but actually from an embedded struct of type "Bar". Then, the canonical name +// of "Foo" is actually "Bar.Foo". +// +// Suppose field "Foo" is not directly in the parent struct, but actually +// a field in two different embedded structs of types "Bar" and "Baz". +// Then the selector "Foo" causes a panic since it is ambiguous which one it +// refers to. The user must specify either "Bar.Foo" or "Baz.Foo". +func canonicalName(t reflect.Type, sel string) ([]string, error) { + var name string + sel = strings.TrimPrefix(sel, ".") + if sel == "" { + return nil, fmt.Errorf("name must not be empty") + } + if i := strings.IndexByte(sel, '.'); i < 0 { + name, sel = sel, "" + } else { + name, sel = sel[:i], sel[i:] + } + + // Type must be a struct or pointer to struct. + if t.Kind() == reflect.Ptr { + t = t.Elem() + } + if t.Kind() != reflect.Struct { + return nil, fmt.Errorf("%v must be a struct", t) + } + + // Find the canonical name for this current field name. + // If the field exists in an embedded struct, then it will be expanded. + if !isExported(name) { + // Disallow unexported fields: + // * To discourage people from actually touching unexported fields + // * FieldByName is buggy (https://golang.org/issue/4876) + return []string{name}, fmt.Errorf("name must be exported") + } + sf, ok := t.FieldByName(name) + if !ok { + return []string{name}, fmt.Errorf("does not exist") + } + var ss []string + for i := range sf.Index { + ss = append(ss, t.FieldByIndex(sf.Index[:i+1]).Name) + } + if sel == "" { + return ss, nil + } + ssPost, err := canonicalName(sf.Type, sel) + return append(ss, ssPost...), err +} diff --git a/vendor/google.golang.org/api/servicecontrol/v1/servicecontrol-gen.go b/vendor/google.golang.org/api/servicecontrol/v1/servicecontrol-gen.go deleted file mode 100644 index eb5788dd9505..000000000000 --- a/vendor/google.golang.org/api/servicecontrol/v1/servicecontrol-gen.go +++ /dev/null @@ -1,3303 +0,0 @@ -// Package servicecontrol provides access to the Google Service Control API. -// -// See https://cloud.google.com/service-control/ -// -// Usage example: -// -// import "google.golang.org/api/servicecontrol/v1" -// ... -// servicecontrolService, err := servicecontrol.New(oauthHttpClient) -package servicecontrol // import "google.golang.org/api/servicecontrol/v1" - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - context "golang.org/x/net/context" - ctxhttp "golang.org/x/net/context/ctxhttp" - gensupport "google.golang.org/api/gensupport" - googleapi "google.golang.org/api/googleapi" - "io" - "net/http" - "net/url" - "strconv" - "strings" -) - -// Always reference these packages, just in case the auto-generated code -// below doesn't. -var _ = bytes.NewBuffer -var _ = strconv.Itoa -var _ = fmt.Sprintf -var _ = json.NewDecoder -var _ = io.Copy -var _ = url.Parse -var _ = gensupport.MarshalJSON -var _ = googleapi.Version -var _ = errors.New -var _ = strings.Replace -var _ = context.Canceled -var _ = ctxhttp.Do - -const apiId = "servicecontrol:v1" -const apiName = "servicecontrol" -const apiVersion = "v1" -const basePath = "https://servicecontrol.googleapis.com/" - -// OAuth2 scopes used by this API. -const ( - // View and manage your data across Google Cloud Platform services - CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" - - // Manage your Google Service Control data - ServicecontrolScope = "https://www.googleapis.com/auth/servicecontrol" -) - -func New(client *http.Client) (*Service, error) { - if client == nil { - return nil, errors.New("client is nil") - } - s := &Service{client: client, BasePath: basePath} - s.Services = NewServicesService(s) - return s, nil -} - -type Service struct { - client *http.Client - BasePath string // API endpoint base URL - UserAgent string // optional additional User-Agent fragment - - Services *ServicesService -} - -func (s *Service) userAgent() string { - if s.UserAgent == "" { - return googleapi.UserAgent - } - return googleapi.UserAgent + " " + s.UserAgent -} - -func NewServicesService(s *Service) *ServicesService { - rs := &ServicesService{s: s} - return rs -} - -type ServicesService struct { - s *Service -} - -type AllocateInfo struct { - // UnusedArguments: A list of label keys that were unused by the server - // in processing the - // request. Thus, for similar requests repeated in a certain future - // time - // window, the caller can choose to ignore these labels in the - // requests - // to achieve better client-side cache hits and quota aggregation. - UnusedArguments []string `json:"unusedArguments,omitempty"` - - // ForceSendFields is a list of field names (e.g. "UnusedArguments") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "UnusedArguments") to - // include in API requests with the JSON null value. By default, fields - // with empty values are omitted from API requests. However, any field - // with an empty value appearing in NullFields will be sent to the - // server as null. It is an error if a field in this list has a - // non-empty value. This may be used to include null fields in Patch - // requests. - NullFields []string `json:"-"` -} - -func (s *AllocateInfo) MarshalJSON() ([]byte, error) { - type NoMethod AllocateInfo - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// AllocateQuotaRequest: Request message for the AllocateQuota method. -type AllocateQuotaRequest struct { - // AllocateOperation: Operation that describes the quota allocation. - AllocateOperation *QuotaOperation `json:"allocateOperation,omitempty"` - - // ServiceConfigId: Specifies which version of service configuration - // should be used to process - // the request. If unspecified or no matching version can be found, the - // latest - // one will be used. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ForceSendFields is a list of field names (e.g. "AllocateOperation") - // to unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "AllocateOperation") to - // include in API requests with the JSON null value. By default, fields - // with empty values are omitted from API requests. However, any field - // with an empty value appearing in NullFields will be sent to the - // server as null. It is an error if a field in this list has a - // non-empty value. This may be used to include null fields in Patch - // requests. - NullFields []string `json:"-"` -} - -func (s *AllocateQuotaRequest) MarshalJSON() ([]byte, error) { - type NoMethod AllocateQuotaRequest - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// AllocateQuotaResponse: Response message for the AllocateQuota method. -type AllocateQuotaResponse struct { - // AllocateErrors: Indicates the decision of the allocate. - AllocateErrors []*QuotaError `json:"allocateErrors,omitempty"` - - // AllocateInfo: WARNING: DO NOT use this field until this warning - // message is removed. - AllocateInfo *AllocateInfo `json:"allocateInfo,omitempty"` - - // OperationId: The same operation_id value used in the - // AllocateQuotaRequest. Used for - // logging and diagnostics purposes. - OperationId string `json:"operationId,omitempty"` - - // QuotaMetrics: Quota metrics to indicate the result of allocation. - // Depending on the - // request, one or more of the following metrics will be included: - // - // 1. Per quota group or per quota metric incremental usage will be - // specified - // using the following delta metric : - // "serviceruntime.googleapis.com/api/consumer/quota_used_count" - // - // 2. The quota limit reached condition will be specified using the - // following - // boolean metric : - // "serviceruntime.googleapis.com/quota/exceeded" - QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"` - - // ServiceConfigId: ID of the actual config used to process the request. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ServerResponse contains the HTTP response code and headers from the - // server. - googleapi.ServerResponse `json:"-"` - - // ForceSendFields is a list of field names (e.g. "AllocateErrors") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "AllocateErrors") to - // include in API requests with the JSON null value. By default, fields - // with empty values are omitted from API requests. However, any field - // with an empty value appearing in NullFields will be sent to the - // server as null. It is an error if a field in this list has a - // non-empty value. This may be used to include null fields in Patch - // requests. - NullFields []string `json:"-"` -} - -func (s *AllocateQuotaResponse) MarshalJSON() ([]byte, error) { - type NoMethod AllocateQuotaResponse - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// AuditLog: Common audit log format for Google Cloud Platform API -// operations. -// -// -type AuditLog struct { - // AuthenticationInfo: Authentication information. - AuthenticationInfo *AuthenticationInfo `json:"authenticationInfo,omitempty"` - - // AuthorizationInfo: Authorization information. If there are - // multiple - // resources or permissions involved, then there is - // one AuthorizationInfo element for each {resource, permission} tuple. - AuthorizationInfo []*AuthorizationInfo `json:"authorizationInfo,omitempty"` - - // Metadata: Other service-specific data about the request, response, - // and other - // information associated with the current audited event. - Metadata googleapi.RawMessage `json:"metadata,omitempty"` - - // MethodName: The name of the service method or operation. - // For API calls, this should be the name of the API method. - // For example, - // - // "google.datastore.v1.Datastore.RunQuery" - // "google.logging.v1.LoggingService.DeleteLog" - MethodName string `json:"methodName,omitempty"` - - // NumResponseItems: The number of items returned from a List or Query - // API method, - // if applicable. - NumResponseItems int64 `json:"numResponseItems,omitempty,string"` - - // Request: The operation request. This may not include all request - // parameters, - // such as those that are too large, privacy-sensitive, or - // duplicated - // elsewhere in the log record. - // It should never include user-generated data, such as file - // contents. - // When the JSON object represented here has a proto equivalent, the - // proto - // name will be indicated in the `@type` property. - Request googleapi.RawMessage `json:"request,omitempty"` - - // RequestMetadata: Metadata about the operation. - RequestMetadata *RequestMetadata `json:"requestMetadata,omitempty"` - - // ResourceName: The resource or collection that is the target of the - // operation. - // The name is a scheme-less URI, not including the API service - // name. - // For example: - // - // "shelves/SHELF_ID/books" - // "shelves/SHELF_ID/books/BOOK_ID" - ResourceName string `json:"resourceName,omitempty"` - - // Response: The operation response. This may not include all response - // elements, - // such as those that are too large, privacy-sensitive, or - // duplicated - // elsewhere in the log record. - // It should never include user-generated data, such as file - // contents. - // When the JSON object represented here has a proto equivalent, the - // proto - // name will be indicated in the `@type` property. - Response googleapi.RawMessage `json:"response,omitempty"` - - // ServiceData: Deprecated, use `metadata` field instead. - // Other service-specific data about the request, response, and - // other - // activities. - ServiceData googleapi.RawMessage `json:"serviceData,omitempty"` - - // ServiceName: The name of the API service performing the operation. - // For example, - // "datastore.googleapis.com". - ServiceName string `json:"serviceName,omitempty"` - - // Status: The status of the overall operation. - Status *Status `json:"status,omitempty"` - - // ForceSendFields is a list of field names (e.g. "AuthenticationInfo") - // to unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "AuthenticationInfo") to - // include in API requests with the JSON null value. By default, fields - // with empty values are omitted from API requests. However, any field - // with an empty value appearing in NullFields will be sent to the - // server as null. It is an error if a field in this list has a - // non-empty value. This may be used to include null fields in Patch - // requests. - NullFields []string `json:"-"` -} - -func (s *AuditLog) MarshalJSON() ([]byte, error) { - type NoMethod AuditLog - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// AuthenticationInfo: Authentication information for the operation. -type AuthenticationInfo struct { - // AuthoritySelector: The authority selector specified by the requestor, - // if any. - // It is not guaranteed that the principal was allowed to use this - // authority. - AuthoritySelector string `json:"authoritySelector,omitempty"` - - // PrincipalEmail: The email address of the authenticated user (or - // service account on behalf - // of third party principal) making the request. For privacy reasons, - // the - // principal email address is redacted for all read-only operations that - // fail - // with a "permission denied" error. - PrincipalEmail string `json:"principalEmail,omitempty"` - - // ThirdPartyPrincipal: The third party identification (if any) of the - // authenticated user making - // the request. - // When the JSON object represented here has a proto equivalent, the - // proto - // name will be indicated in the `@type` property. - ThirdPartyPrincipal googleapi.RawMessage `json:"thirdPartyPrincipal,omitempty"` - - // ForceSendFields is a list of field names (e.g. "AuthoritySelector") - // to unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "AuthoritySelector") to - // include in API requests with the JSON null value. By default, fields - // with empty values are omitted from API requests. However, any field - // with an empty value appearing in NullFields will be sent to the - // server as null. It is an error if a field in this list has a - // non-empty value. This may be used to include null fields in Patch - // requests. - NullFields []string `json:"-"` -} - -func (s *AuthenticationInfo) MarshalJSON() ([]byte, error) { - type NoMethod AuthenticationInfo - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// AuthorizationInfo: Authorization information for the operation. -type AuthorizationInfo struct { - // Granted: Whether or not authorization for `resource` and - // `permission` - // was granted. - Granted bool `json:"granted,omitempty"` - - // Permission: The required IAM permission. - Permission string `json:"permission,omitempty"` - - // Resource: The resource being accessed, as a REST-style string. For - // example: - // - // bigquery.googleapis.com/projects/PROJECTID/datasets/DATASETID - Resource string `json:"resource,omitempty"` - - // ForceSendFields is a list of field names (e.g. "Granted") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "Granted") to include in - // API requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *AuthorizationInfo) MarshalJSON() ([]byte, error) { - type NoMethod AuthorizationInfo - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// CheckError: Defines the errors to be returned -// in -// google.api.servicecontrol.v1.CheckResponse.check_errors. -type CheckError struct { - // Code: The error code. - // - // Possible values: - // "ERROR_CODE_UNSPECIFIED" - This is never used in `CheckResponse`. - // "NOT_FOUND" - The consumer's project id, network container, or - // resource container was - // not found. Same as google.rpc.Code.NOT_FOUND. - // "PERMISSION_DENIED" - The consumer doesn't have access to the - // specified resource. - // Same as google.rpc.Code.PERMISSION_DENIED. - // "RESOURCE_EXHAUSTED" - Quota check failed. Same as - // google.rpc.Code.RESOURCE_EXHAUSTED. - // "BUDGET_EXCEEDED" - Budget check failed. - // "DENIAL_OF_SERVICE_DETECTED" - The consumer's request has been - // flagged as a DoS attack. - // "LOAD_SHEDDING" - The consumer's request should be rejected in - // order to protect the service - // from being overloaded. - // "ABUSER_DETECTED" - The consumer has been flagged as an abuser. - // "SERVICE_NOT_ACTIVATED" - The consumer hasn't activated the - // service. - // "VISIBILITY_DENIED" - The consumer cannot access the service due to - // visibility configuration. - // "BILLING_DISABLED" - The consumer cannot access the service because - // billing is disabled. - // "PROJECT_DELETED" - The consumer's project has been marked as - // deleted (soft deletion). - // "PROJECT_INVALID" - The consumer's project number or id does not - // represent a valid project. - // "IP_ADDRESS_BLOCKED" - The IP address of the consumer is invalid - // for the specific consumer - // project. - // "REFERER_BLOCKED" - The referer address of the consumer request is - // invalid for the specific - // consumer project. - // "CLIENT_APP_BLOCKED" - The client application of the consumer - // request is invalid for the - // specific consumer project. - // "API_TARGET_BLOCKED" - The API targeted by this request is invalid - // for the specified consumer - // project. - // "API_KEY_INVALID" - The consumer's API key is invalid. - // "API_KEY_EXPIRED" - The consumer's API Key has expired. - // "API_KEY_NOT_FOUND" - The consumer's API Key was not found in - // config record. - // "SPATULA_HEADER_INVALID" - The consumer's spatula header is - // invalid. - // "LOAS_ROLE_INVALID" - The consumer's LOAS role is invalid. - // "NO_LOAS_PROJECT" - The consumer's LOAS role has no associated - // project. - // "LOAS_PROJECT_DISABLED" - The consumer's LOAS project is not - // `ACTIVE` in LoquatV2. - // "SECURITY_POLICY_VIOLATED" - Request is not allowed as per security - // policies defined in Org Policy. - // "INVALID_CREDENTIAL" - The credential in the request can not be - // verified. - // "NAMESPACE_LOOKUP_UNAVAILABLE" - The backend server for looking up - // project id/number is unavailable. - // "SERVICE_STATUS_UNAVAILABLE" - The backend server for checking - // service status is unavailable. - // "BILLING_STATUS_UNAVAILABLE" - The backend server for checking - // billing status is unavailable. - // "QUOTA_CHECK_UNAVAILABLE" - The backend server for checking quota - // limits is unavailable. - // "LOAS_PROJECT_LOOKUP_UNAVAILABLE" - The Spanner for looking up LOAS - // project is unavailable. - // "CLOUD_RESOURCE_MANAGER_BACKEND_UNAVAILABLE" - Cloud Resource - // Manager backend server is unavailable. - // "SECURITY_POLICY_BACKEND_UNAVAILABLE" - Backend server for - // evaluating security policy is unavailable. - Code string `json:"code,omitempty"` - - // Detail: Free-form text providing details on the error cause of the - // error. - Detail string `json:"detail,omitempty"` - - // Subject: Subject to whom this error applies. See the specific code - // enum for more - // details on this field. For example: - // - “project:” - // - “folder:” - // - “organization:” - Subject string `json:"subject,omitempty"` - - // ForceSendFields is a list of field names (e.g. "Code") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "Code") to include in API - // requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *CheckError) MarshalJSON() ([]byte, error) { - type NoMethod CheckError - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// CheckInfo: Contains additional information about the check operation. -type CheckInfo struct { - // ConsumerInfo: Consumer info of this check. - ConsumerInfo *ConsumerInfo `json:"consumerInfo,omitempty"` - - // UnusedArguments: A list of fields and label keys that are ignored by - // the server. - // The client doesn't need to send them for following requests to - // improve - // performance and allow better aggregation. - UnusedArguments []string `json:"unusedArguments,omitempty"` - - // ForceSendFields is a list of field names (e.g. "ConsumerInfo") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "ConsumerInfo") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *CheckInfo) MarshalJSON() ([]byte, error) { - type NoMethod CheckInfo - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// CheckRequest: Request message for the Check method. -type CheckRequest struct { - // Operation: The operation to be checked. - Operation *Operation `json:"operation,omitempty"` - - // RequestProjectSettings: Requests the project settings to be returned - // as part of the check response. - RequestProjectSettings bool `json:"requestProjectSettings,omitempty"` - - // ServiceConfigId: Specifies which version of service configuration - // should be used to process - // the request. - // - // If unspecified or no matching version can be found, the - // latest one will be used. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // SkipActivationCheck: Indicates if service activation check should be - // skipped for this request. - // Default behavior is to perform the check and apply relevant quota. - SkipActivationCheck bool `json:"skipActivationCheck,omitempty"` - - // ForceSendFields is a list of field names (e.g. "Operation") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "Operation") to include in - // API requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *CheckRequest) MarshalJSON() ([]byte, error) { - type NoMethod CheckRequest - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// CheckResponse: Response message for the Check method. -type CheckResponse struct { - // CheckErrors: Indicate the decision of the check. - // - // If no check errors are present, the service should process the - // operation. - // Otherwise the service should use the list of errors to determine - // the - // appropriate action. - CheckErrors []*CheckError `json:"checkErrors,omitempty"` - - // CheckInfo: Feedback data returned from the server during processing a - // Check request. - CheckInfo *CheckInfo `json:"checkInfo,omitempty"` - - // OperationId: The same operation_id value used in the - // CheckRequest. - // Used for logging and diagnostics purposes. - OperationId string `json:"operationId,omitempty"` - - // QuotaInfo: Quota information for the check request associated with - // this response. - // - QuotaInfo *QuotaInfo `json:"quotaInfo,omitempty"` - - // ServiceConfigId: The actual config id used to process the request. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ServerResponse contains the HTTP response code and headers from the - // server. - googleapi.ServerResponse `json:"-"` - - // ForceSendFields is a list of field names (e.g. "CheckErrors") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "CheckErrors") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *CheckResponse) MarshalJSON() ([]byte, error) { - type NoMethod CheckResponse - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// ConsumerInfo: `ConsumerInfo` provides information about the consumer -// project. -type ConsumerInfo struct { - // ProjectNumber: The Google cloud project number, e.g. 1234567890. A - // value of 0 indicates - // no project number is found. - ProjectNumber int64 `json:"projectNumber,omitempty,string"` - - // ForceSendFields is a list of field names (e.g. "ProjectNumber") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "ProjectNumber") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *ConsumerInfo) MarshalJSON() ([]byte, error) { - type NoMethod ConsumerInfo - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// Distribution: Distribution represents a frequency distribution of -// double-valued sample -// points. It contains the size of the population of sample points -// plus -// additional optional information: -// -// - the arithmetic mean of the samples -// - the minimum and maximum of the samples -// - the sum-squared-deviation of the samples, used to compute -// variance -// - a histogram of the values of the sample points -type Distribution struct { - // BucketCounts: The number of samples in each histogram bucket. - // `bucket_counts` are - // optional. If present, they must sum to the `count` value. - // - // The buckets are defined below in `bucket_option`. There are N - // buckets. - // `bucket_counts[0]` is the number of samples in the underflow - // bucket. - // `bucket_counts[1]` to `bucket_counts[N-1]` are the numbers of - // samples - // in each of the finite buckets. And `bucket_counts[N] is the number - // of samples in the overflow bucket. See the comments of - // `bucket_option` - // below for more details. - // - // Any suffix of trailing zeros may be omitted. - BucketCounts googleapi.Int64s `json:"bucketCounts,omitempty"` - - // Count: The total number of samples in the distribution. Must be >= 0. - Count int64 `json:"count,omitempty,string"` - - // ExplicitBuckets: Buckets with arbitrary user-provided width. - ExplicitBuckets *ExplicitBuckets `json:"explicitBuckets,omitempty"` - - // ExponentialBuckets: Buckets with exponentially growing width. - ExponentialBuckets *ExponentialBuckets `json:"exponentialBuckets,omitempty"` - - // LinearBuckets: Buckets with constant width. - LinearBuckets *LinearBuckets `json:"linearBuckets,omitempty"` - - // Maximum: The maximum of the population of values. Ignored if `count` - // is zero. - Maximum float64 `json:"maximum,omitempty"` - - // Mean: The arithmetic mean of the samples in the distribution. If - // `count` is - // zero then this field must be zero. - Mean float64 `json:"mean,omitempty"` - - // Minimum: The minimum of the population of values. Ignored if `count` - // is zero. - Minimum float64 `json:"minimum,omitempty"` - - // SumOfSquaredDeviation: The sum of squared deviations from the mean: - // Sum[i=1..count]((x_i - mean)^2) - // where each x_i is a sample values. If `count` is zero then this - // field - // must be zero, otherwise validation of the request fails. - SumOfSquaredDeviation float64 `json:"sumOfSquaredDeviation,omitempty"` - - // ForceSendFields is a list of field names (e.g. "BucketCounts") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "BucketCounts") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *Distribution) MarshalJSON() ([]byte, error) { - type NoMethod Distribution - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -func (s *Distribution) UnmarshalJSON(data []byte) error { - type NoMethod Distribution - var s1 struct { - Maximum gensupport.JSONFloat64 `json:"maximum"` - Mean gensupport.JSONFloat64 `json:"mean"` - Minimum gensupport.JSONFloat64 `json:"minimum"` - SumOfSquaredDeviation gensupport.JSONFloat64 `json:"sumOfSquaredDeviation"` - *NoMethod - } - s1.NoMethod = (*NoMethod)(s) - if err := json.Unmarshal(data, &s1); err != nil { - return err - } - s.Maximum = float64(s1.Maximum) - s.Mean = float64(s1.Mean) - s.Minimum = float64(s1.Minimum) - s.SumOfSquaredDeviation = float64(s1.SumOfSquaredDeviation) - return nil -} - -// EndReconciliationRequest: Request message for -// QuotaController.EndReconciliation. -type EndReconciliationRequest struct { - // ReconciliationOperation: Operation that describes the quota - // reconciliation. - ReconciliationOperation *QuotaOperation `json:"reconciliationOperation,omitempty"` - - // ServiceConfigId: Specifies which version of service configuration - // should be used to process - // the request. If unspecified or no matching version can be found, the - // latest - // one will be used. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ForceSendFields is a list of field names (e.g. - // "ReconciliationOperation") to unconditionally include in API - // requests. By default, fields with empty values are omitted from API - // requests. However, any non-pointer, non-interface field appearing in - // ForceSendFields will be sent to the server regardless of whether the - // field is empty or not. This may be used to include empty fields in - // Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "ReconciliationOperation") - // to include in API requests with the JSON null value. By default, - // fields with empty values are omitted from API requests. However, any - // field with an empty value appearing in NullFields will be sent to the - // server as null. It is an error if a field in this list has a - // non-empty value. This may be used to include null fields in Patch - // requests. - NullFields []string `json:"-"` -} - -func (s *EndReconciliationRequest) MarshalJSON() ([]byte, error) { - type NoMethod EndReconciliationRequest - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// EndReconciliationResponse: Response message for -// QuotaController.EndReconciliation. -type EndReconciliationResponse struct { - // OperationId: The same operation_id value used in the - // EndReconciliationRequest. Used for - // logging and diagnostics purposes. - OperationId string `json:"operationId,omitempty"` - - // QuotaMetrics: Metric values as tracked by One Platform before the - // adjustment was made. - // The following metrics will be included: - // - // 1. Per quota metric total usage will be specified using the following - // gauge - // metric: - // - // "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" - // - // - // 2. Value for each quota limit associated with the metrics will be - // specified - // using the following gauge metric: - // "serviceruntime.googleapis.com/quota/limit" - // - // 3. Delta value of the usage after the reconciliation for limits - // associated - // with the metrics will be specified using the following metric: - // "serviceruntime.googleapis.com/allocation/reconciliation_delta" - // The delta value is defined as: - // new_usage_from_client - existing_value_in_spanner. - // This metric is not defined in serviceruntime.yaml or in Cloud - // Monarch. - // This metric is meant for callers' use only. Since this metric is - // not - // defined in the monitoring backend, reporting on this metric will - // result in - // an error. - QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"` - - // ReconciliationErrors: Indicates the decision of the reconciliation - // end. - ReconciliationErrors []*QuotaError `json:"reconciliationErrors,omitempty"` - - // ServiceConfigId: ID of the actual config used to process the request. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ServerResponse contains the HTTP response code and headers from the - // server. - googleapi.ServerResponse `json:"-"` - - // ForceSendFields is a list of field names (e.g. "OperationId") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "OperationId") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *EndReconciliationResponse) MarshalJSON() ([]byte, error) { - type NoMethod EndReconciliationResponse - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// ExplicitBuckets: Describing buckets with arbitrary user-provided -// width. -type ExplicitBuckets struct { - // Bounds: 'bound' is a list of strictly increasing boundaries - // between - // buckets. Note that a list of length N-1 defines N buckets because - // of fenceposting. See comments on `bucket_options` for details. - // - // The i'th finite bucket covers the interval - // [bound[i-1], bound[i]) - // where i ranges from 1 to bound_size() - 1. Note that there are - // no - // finite buckets at all if 'bound' only contains a single element; - // in - // that special case the single bound defines the boundary between - // the - // underflow and overflow buckets. - // - // bucket number lower bound upper bound - // i == 0 (underflow) -inf bound[i] - // 0 < i < bound_size() bound[i-1] bound[i] - // i == bound_size() (overflow) bound[i-1] +inf - Bounds []float64 `json:"bounds,omitempty"` - - // ForceSendFields is a list of field names (e.g. "Bounds") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "Bounds") to include in API - // requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *ExplicitBuckets) MarshalJSON() ([]byte, error) { - type NoMethod ExplicitBuckets - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// ExponentialBuckets: Describing buckets with exponentially growing -// width. -type ExponentialBuckets struct { - // GrowthFactor: The i'th exponential bucket covers the interval - // [scale * growth_factor^(i-1), scale * growth_factor^i) - // where i ranges from 1 to num_finite_buckets inclusive. - // Must be larger than 1.0. - GrowthFactor float64 `json:"growthFactor,omitempty"` - - // NumFiniteBuckets: The number of finite buckets. With the underflow - // and overflow buckets, - // the total number of buckets is `num_finite_buckets` + 2. - // See comments on `bucket_options` for details. - NumFiniteBuckets int64 `json:"numFiniteBuckets,omitempty"` - - // Scale: The i'th exponential bucket covers the interval - // [scale * growth_factor^(i-1), scale * growth_factor^i) - // where i ranges from 1 to num_finite_buckets inclusive. - // Must be > 0. - Scale float64 `json:"scale,omitempty"` - - // ForceSendFields is a list of field names (e.g. "GrowthFactor") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "GrowthFactor") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *ExponentialBuckets) MarshalJSON() ([]byte, error) { - type NoMethod ExponentialBuckets - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -func (s *ExponentialBuckets) UnmarshalJSON(data []byte) error { - type NoMethod ExponentialBuckets - var s1 struct { - GrowthFactor gensupport.JSONFloat64 `json:"growthFactor"` - Scale gensupport.JSONFloat64 `json:"scale"` - *NoMethod - } - s1.NoMethod = (*NoMethod)(s) - if err := json.Unmarshal(data, &s1); err != nil { - return err - } - s.GrowthFactor = float64(s1.GrowthFactor) - s.Scale = float64(s1.Scale) - return nil -} - -// LinearBuckets: Describing buckets with constant width. -type LinearBuckets struct { - // NumFiniteBuckets: The number of finite buckets. With the underflow - // and overflow buckets, - // the total number of buckets is `num_finite_buckets` + 2. - // See comments on `bucket_options` for details. - NumFiniteBuckets int64 `json:"numFiniteBuckets,omitempty"` - - // Offset: The i'th linear bucket covers the interval - // [offset + (i-1) * width, offset + i * width) - // where i ranges from 1 to num_finite_buckets, inclusive. - Offset float64 `json:"offset,omitempty"` - - // Width: The i'th linear bucket covers the interval - // [offset + (i-1) * width, offset + i * width) - // where i ranges from 1 to num_finite_buckets, inclusive. - // Must be strictly positive. - Width float64 `json:"width,omitempty"` - - // ForceSendFields is a list of field names (e.g. "NumFiniteBuckets") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "NumFiniteBuckets") to - // include in API requests with the JSON null value. By default, fields - // with empty values are omitted from API requests. However, any field - // with an empty value appearing in NullFields will be sent to the - // server as null. It is an error if a field in this list has a - // non-empty value. This may be used to include null fields in Patch - // requests. - NullFields []string `json:"-"` -} - -func (s *LinearBuckets) MarshalJSON() ([]byte, error) { - type NoMethod LinearBuckets - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -func (s *LinearBuckets) UnmarshalJSON(data []byte) error { - type NoMethod LinearBuckets - var s1 struct { - Offset gensupport.JSONFloat64 `json:"offset"` - Width gensupport.JSONFloat64 `json:"width"` - *NoMethod - } - s1.NoMethod = (*NoMethod)(s) - if err := json.Unmarshal(data, &s1); err != nil { - return err - } - s.Offset = float64(s1.Offset) - s.Width = float64(s1.Width) - return nil -} - -// LogEntry: An individual log entry. -type LogEntry struct { - // InsertId: A unique ID for the log entry used for deduplication. If - // omitted, - // the implementation will generate one based on operation_id. - InsertId string `json:"insertId,omitempty"` - - // Labels: A set of user-defined (key, value) data that provides - // additional - // information about the log entry. - Labels map[string]string `json:"labels,omitempty"` - - // Name: Required. The log to which this log entry belongs. Examples: - // "syslog", - // "book_log". - Name string `json:"name,omitempty"` - - // ProtoPayload: The log entry payload, represented as a protocol buffer - // that is - // expressed as a JSON object. The only accepted type currently - // is - // AuditLog. - ProtoPayload googleapi.RawMessage `json:"protoPayload,omitempty"` - - // Severity: The severity of the log entry. The default value - // is - // `LogSeverity.DEFAULT`. - // - // Possible values: - // "DEFAULT" - (0) The log entry has no assigned severity level. - // "DEBUG" - (100) Debug or trace information. - // "INFO" - (200) Routine information, such as ongoing status or - // performance. - // "NOTICE" - (300) Normal but significant events, such as start up, - // shut down, or - // a configuration change. - // "WARNING" - (400) Warning events might cause problems. - // "ERROR" - (500) Error events are likely to cause problems. - // "CRITICAL" - (600) Critical events cause more severe problems or - // outages. - // "ALERT" - (700) A person must take an action immediately. - // "EMERGENCY" - (800) One or more systems are unusable. - Severity string `json:"severity,omitempty"` - - // StructPayload: The log entry payload, represented as a structure - // that - // is expressed as a JSON object. - StructPayload googleapi.RawMessage `json:"structPayload,omitempty"` - - // TextPayload: The log entry payload, represented as a Unicode string - // (UTF-8). - TextPayload string `json:"textPayload,omitempty"` - - // Timestamp: The time the event described by the log entry occurred. - // If - // omitted, defaults to operation start time. - Timestamp string `json:"timestamp,omitempty"` - - // ForceSendFields is a list of field names (e.g. "InsertId") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "InsertId") to include in - // API requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *LogEntry) MarshalJSON() ([]byte, error) { - type NoMethod LogEntry - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// MetricValue: Represents a single metric value. -type MetricValue struct { - // BoolValue: A boolean value. - BoolValue *bool `json:"boolValue,omitempty"` - - // DistributionValue: A distribution value. - DistributionValue *Distribution `json:"distributionValue,omitempty"` - - // DoubleValue: A double precision floating point value. - DoubleValue *float64 `json:"doubleValue,omitempty"` - - // EndTime: The end of the time period over which this metric value's - // measurement - // applies. - EndTime string `json:"endTime,omitempty"` - - // Int64Value: A signed 64-bit integer value. - Int64Value *int64 `json:"int64Value,omitempty,string"` - - // Labels: The labels describing the metric value. - // See comments on google.api.servicecontrol.v1.Operation.labels for - // the overriding relationship. - Labels map[string]string `json:"labels,omitempty"` - - // MoneyValue: A money value. - MoneyValue *Money `json:"moneyValue,omitempty"` - - // StartTime: The start of the time period over which this metric - // value's measurement - // applies. The time period has different semantics for different - // metric - // types (cumulative, delta, and gauge). See the metric - // definition - // documentation in the service configuration for details. - StartTime string `json:"startTime,omitempty"` - - // StringValue: A text string value. - StringValue *string `json:"stringValue,omitempty"` - - // ForceSendFields is a list of field names (e.g. "BoolValue") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "BoolValue") to include in - // API requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *MetricValue) MarshalJSON() ([]byte, error) { - type NoMethod MetricValue - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -func (s *MetricValue) UnmarshalJSON(data []byte) error { - type NoMethod MetricValue - var s1 struct { - DoubleValue *gensupport.JSONFloat64 `json:"doubleValue"` - *NoMethod - } - s1.NoMethod = (*NoMethod)(s) - if err := json.Unmarshal(data, &s1); err != nil { - return err - } - if s1.DoubleValue != nil { - s.DoubleValue = (*float64)(s1.DoubleValue) - } - return nil -} - -// MetricValueSet: Represents a set of metric values in the same -// metric. -// Each metric value in the set should have a unique combination of -// start time, -// end time, and label values. -type MetricValueSet struct { - // MetricName: The metric name defined in the service configuration. - MetricName string `json:"metricName,omitempty"` - - // MetricValues: The values in this metric. - MetricValues []*MetricValue `json:"metricValues,omitempty"` - - // ForceSendFields is a list of field names (e.g. "MetricName") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "MetricName") to include in - // API requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *MetricValueSet) MarshalJSON() ([]byte, error) { - type NoMethod MetricValueSet - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// Money: Represents an amount of money with its currency type. -type Money struct { - // CurrencyCode: The 3-letter currency code defined in ISO 4217. - CurrencyCode string `json:"currencyCode,omitempty"` - - // Nanos: Number of nano (10^-9) units of the amount. - // The value must be between -999,999,999 and +999,999,999 inclusive. - // If `units` is positive, `nanos` must be positive or zero. - // If `units` is zero, `nanos` can be positive, zero, or negative. - // If `units` is negative, `nanos` must be negative or zero. - // For example $-1.75 is represented as `units`=-1 and - // `nanos`=-750,000,000. - Nanos int64 `json:"nanos,omitempty"` - - // Units: The whole units of the amount. - // For example if `currencyCode` is "USD", then 1 unit is one US - // dollar. - Units int64 `json:"units,omitempty,string"` - - // ForceSendFields is a list of field names (e.g. "CurrencyCode") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "CurrencyCode") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *Money) MarshalJSON() ([]byte, error) { - type NoMethod Money - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// Operation: Represents information regarding an operation. -type Operation struct { - // ConsumerId: Identity of the consumer who is using the service. - // This field should be filled in for the operations initiated by - // a - // consumer, but not for service-initiated operations that are - // not related to a specific consumer. - // - // This can be in one of the following formats: - // project:, - // project_number:, - // api_key:. - ConsumerId string `json:"consumerId,omitempty"` - - // EndTime: End time of the operation. - // Required when the operation is used in ServiceController.Report, - // but optional when the operation is used in ServiceController.Check. - EndTime string `json:"endTime,omitempty"` - - // Importance: DO NOT USE. This is an experimental field. - // - // Possible values: - // "LOW" - The API implementation may cache and aggregate the - // data. - // The data may be lost when rare and unexpected system failures occur. - // "HIGH" - The API implementation doesn't cache and aggregate the - // data. - // If the method returns successfully, it's guaranteed that the data - // has - // been persisted in durable storage. - // "DEBUG" - In addition to the behavior described in HIGH, DEBUG - // enables - // additional validation logic that is only useful during the - // onboarding - // process. This is only available to Google internal services and - // the service must be whitelisted by chemist-dev@google.com in order - // to use this level. - Importance string `json:"importance,omitempty"` - - // Labels: Labels describing the operation. Only the following labels - // are allowed: - // - // - Labels describing monitored resources as defined in - // the service configuration. - // - Default labels of metric values. When specified, labels defined in - // the - // metric value override these default. - // - The following labels defined by Google Cloud Platform: - // - `cloud.googleapis.com/location` describing the location where - // the - // operation happened, - // - `servicecontrol.googleapis.com/user_agent` describing the user - // agent - // of the API request, - // - `servicecontrol.googleapis.com/service_agent` describing the - // service - // used to handle the API request (e.g. ESP), - // - `servicecontrol.googleapis.com/platform` describing the - // platform - // where the API is served, such as App Engine, Compute Engine, - // or - // Kubernetes Engine. - Labels map[string]string `json:"labels,omitempty"` - - // LogEntries: Represents information to be logged. - LogEntries []*LogEntry `json:"logEntries,omitempty"` - - // MetricValueSets: Represents information about this operation. Each - // MetricValueSet - // corresponds to a metric defined in the service configuration. - // The data type used in the MetricValueSet must agree with - // the data type specified in the metric definition. - // - // Within a single operation, it is not allowed to have more than - // one - // MetricValue instances that have the same metric names and - // identical - // label value combinations. If a request has such duplicated - // MetricValue - // instances, the entire request is rejected with - // an invalid argument error. - MetricValueSets []*MetricValueSet `json:"metricValueSets,omitempty"` - - // OperationId: Identity of the operation. This must be unique within - // the scope of the - // service that generated the operation. If the service calls - // Check() and Report() on the same operation, the two calls should - // carry - // the same id. - // - // UUID version 4 is recommended, though not required. - // In scenarios where an operation is computed from existing - // information - // and an idempotent id is desirable for deduplication purpose, UUID - // version 5 - // is recommended. See RFC 4122 for details. - OperationId string `json:"operationId,omitempty"` - - // OperationName: Fully qualified name of the operation. Reserved for - // future use. - OperationName string `json:"operationName,omitempty"` - - // QuotaProperties: Represents the properties needed for quota check. - // Applicable only if this - // operation is for a quota check request. If this is not specified, no - // quota - // check will be performed. - QuotaProperties *QuotaProperties `json:"quotaProperties,omitempty"` - - // ResourceContainer: DO NOT USE. This field is deprecated, use - // "resources" field instead. - // The resource name of the parent of a resource in the resource - // hierarchy. - // - // This can be in one of the following formats: - // - “projects/” - // - “folders/” - // - “organizations/” - ResourceContainer string `json:"resourceContainer,omitempty"` - - // Resources: The resources that are involved in the operation. - Resources []*ResourceInfo `json:"resources,omitempty"` - - // StartTime: Required. Start time of the operation. - StartTime string `json:"startTime,omitempty"` - - // UserLabels: User defined labels for the resource that this operation - // is associated - // with. Only a combination of 1000 user labels per consumer project - // are - // allowed. - UserLabels map[string]string `json:"userLabels,omitempty"` - - // ForceSendFields is a list of field names (e.g. "ConsumerId") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "ConsumerId") to include in - // API requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *Operation) MarshalJSON() ([]byte, error) { - type NoMethod Operation - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// QuotaError: Represents error information for QuotaOperation. -type QuotaError struct { - // Code: Error code. - // - // Possible values: - // "UNSPECIFIED" - This is never used. - // "RESOURCE_EXHAUSTED" - Quota allocation failed. - // Same as google.rpc.Code.RESOURCE_EXHAUSTED. - // "OUT_OF_RANGE" - Quota release failed. This error is ONLY returned - // on a NORMAL release. - // More formally: if a user requests a release of 10 tokens, but only - // 5 tokens were previously allocated, in a BEST_EFFORT release, this - // will - // be considered a success, 5 tokens will be released, and the result - // will - // be "Ok". If this is done in NORMAL mode, no tokens will be - // released, - // and an OUT_OF_RANGE error will be returned. - // Same as google.rpc.Code.OUT_OF_RANGE. - // "BILLING_NOT_ACTIVE" - Consumer cannot access the service because - // the service requires active - // billing. - // "PROJECT_DELETED" - Consumer's project has been marked as deleted - // (soft deletion). - // "API_KEY_INVALID" - Specified API key is invalid. - // "API_KEY_EXPIRED" - Specified API Key has expired. - // "SPATULA_HEADER_INVALID" - Consumer's spatula header is invalid. - // "LOAS_ROLE_INVALID" - The consumer's LOAS role is invalid. - // "NO_LOAS_PROJECT" - The consumer's LOAS role has no associated - // project. - // "PROJECT_STATUS_UNAVAILABLE" - The backend server for looking up - // project id/number is unavailable. - // "SERVICE_STATUS_UNAVAILABLE" - The backend server for checking - // service status is unavailable. - // "BILLING_STATUS_UNAVAILABLE" - The backend server for checking - // billing status is unavailable. - // "QUOTA_SYSTEM_UNAVAILABLE" - The backend server for checking quota - // limits is unavailable. - Code string `json:"code,omitempty"` - - // Description: Free-form text that provides details on the cause of the - // error. - Description string `json:"description,omitempty"` - - // Subject: Subject to whom this error applies. See the specific enum - // for more details - // on this field. For example, "clientip:" - // or - // "project:". - Subject string `json:"subject,omitempty"` - - // ForceSendFields is a list of field names (e.g. "Code") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "Code") to include in API - // requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *QuotaError) MarshalJSON() ([]byte, error) { - type NoMethod QuotaError - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// QuotaInfo: Contains the quota information for a quota check response. -type QuotaInfo struct { - // LimitExceeded: Quota Metrics that have exceeded quota limits. - // For QuotaGroup-based quota, this is QuotaGroup.name - // For QuotaLimit-based quota, this is QuotaLimit.name - // See: google.api.Quota - // Deprecated: Use quota_metrics to get per quota group limit exceeded - // status. - LimitExceeded []string `json:"limitExceeded,omitempty"` - - // QuotaConsumed: Map of quota group name to the actual number of tokens - // consumed. If the - // quota check was not successful, then this will not be populated due - // to no - // quota consumption. - // - // We are not merging this field with 'quota_metrics' field because of - // the - // complexity of scaling in Chemist client code base. For simplicity, we - // will - // keep this field for Castor (that scales quota usage) and - // 'quota_metrics' - // for SuperQuota (that doesn't scale quota usage). - // - QuotaConsumed map[string]int64 `json:"quotaConsumed,omitempty"` - - // QuotaMetrics: Quota metrics to indicate the usage. Depending on the - // check request, one or - // more of the following metrics will be included: - // - // 1. For rate quota, per quota group or per quota metric incremental - // usage - // will be specified using the following delta metric: - // "serviceruntime.googleapis.com/api/consumer/quota_used_count" - // - // 2. For allocation quota, per quota metric total usage will be - // specified - // using the following gauge metric: - // - // "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" - // - // - // 3. For both rate quota and allocation quota, the quota limit - // reached - // condition will be specified using the following boolean metric: - // "serviceruntime.googleapis.com/quota/exceeded" - QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"` - - // ForceSendFields is a list of field names (e.g. "LimitExceeded") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "LimitExceeded") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *QuotaInfo) MarshalJSON() ([]byte, error) { - type NoMethod QuotaInfo - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// QuotaOperation: Represents information regarding a quota operation. -type QuotaOperation struct { - // ConsumerId: Identity of the consumer for whom this quota operation is - // being performed. - // - // This can be in one of the following formats: - // project:, - // project_number:, - // api_key:. - ConsumerId string `json:"consumerId,omitempty"` - - // Labels: Labels describing the operation. - Labels map[string]string `json:"labels,omitempty"` - - // MethodName: Fully qualified name of the API method for which this - // quota operation is - // requested. This name is used for matching quota rules or metric rules - // and - // billing status rules defined in service configuration. - // - // This field should not be set if any of the following is true: - // (1) the quota operation is performed on non-API resources. - // (2) quota_metrics is set because the caller is doing quota - // override. - // - // Example of an RPC method name: - // google.example.library.v1.LibraryService.CreateShelf - MethodName string `json:"methodName,omitempty"` - - // OperationId: Identity of the operation. This is expected to be unique - // within the scope - // of the service that generated the operation, and guarantees - // idempotency in - // case of retries. - // - // UUID version 4 is recommended, though not required. In scenarios - // where an - // operation is computed from existing information and an idempotent id - // is - // desirable for deduplication purpose, UUID version 5 is recommended. - // See - // RFC 4122 for details. - OperationId string `json:"operationId,omitempty"` - - // QuotaMetrics: Represents information about this operation. Each - // MetricValueSet - // corresponds to a metric defined in the service configuration. - // The data type used in the MetricValueSet must agree with - // the data type specified in the metric definition. - // - // Within a single operation, it is not allowed to have more than - // one - // MetricValue instances that have the same metric names and - // identical - // label value combinations. If a request has such duplicated - // MetricValue - // instances, the entire request is rejected with - // an invalid argument error. - // - // This field is mutually exclusive with method_name. - QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"` - - // QuotaMode: Quota mode for this operation. - // - // Possible values: - // "UNSPECIFIED" - Guard against implicit default. Must not be used. - // "NORMAL" - For AllocateQuota request, allocates quota for the - // amount specified in - // the service configuration or specified using the quota metrics. If - // the - // amount is higher than the available quota, allocation error will - // be - // returned and no quota will be allocated. - // "BEST_EFFORT" - The operation allocates quota for the amount - // specified in the service - // configuration or specified using the quota metrics. If the amount - // is - // higher than the available quota, request does not fail but all - // available - // quota will be allocated. - // "CHECK_ONLY" - For AllocateQuota request, only checks if there is - // enough quota - // available and does not change the available quota. No lock is placed - // on - // the available quota either. - QuotaMode string `json:"quotaMode,omitempty"` - - // ForceSendFields is a list of field names (e.g. "ConsumerId") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "ConsumerId") to include in - // API requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *QuotaOperation) MarshalJSON() ([]byte, error) { - type NoMethod QuotaOperation - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// QuotaProperties: Represents the properties needed for quota -// operations. -type QuotaProperties struct { - // QuotaMode: Quota mode for this operation. - // - // Possible values: - // "ACQUIRE" - Decreases available quota by the cost specified for the - // operation. - // If cost is higher than available quota, operation fails and - // returns - // error. - // "ACQUIRE_BEST_EFFORT" - Decreases available quota by the cost - // specified for the operation. - // If cost is higher than available quota, operation does not fail - // and - // available quota goes down to zero but it returns error. - // "CHECK" - Does not change any available quota. Only checks if there - // is enough - // quota. - // No lock is placed on the checked tokens neither. - // "RELEASE" - Increases available quota by the operation cost - // specified for the - // operation. - QuotaMode string `json:"quotaMode,omitempty"` - - // ForceSendFields is a list of field names (e.g. "QuotaMode") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "QuotaMode") to include in - // API requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *QuotaProperties) MarshalJSON() ([]byte, error) { - type NoMethod QuotaProperties - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// ReleaseQuotaRequest: Request message for the ReleaseQuota method. -type ReleaseQuotaRequest struct { - // ReleaseOperation: Operation that describes the quota release. - ReleaseOperation *QuotaOperation `json:"releaseOperation,omitempty"` - - // ServiceConfigId: Specifies which version of service configuration - // should be used to process - // the request. If unspecified or no matching version can be found, the - // latest - // one will be used. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ForceSendFields is a list of field names (e.g. "ReleaseOperation") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "ReleaseOperation") to - // include in API requests with the JSON null value. By default, fields - // with empty values are omitted from API requests. However, any field - // with an empty value appearing in NullFields will be sent to the - // server as null. It is an error if a field in this list has a - // non-empty value. This may be used to include null fields in Patch - // requests. - NullFields []string `json:"-"` -} - -func (s *ReleaseQuotaRequest) MarshalJSON() ([]byte, error) { - type NoMethod ReleaseQuotaRequest - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// ReleaseQuotaResponse: Response message for the ReleaseQuota method. -type ReleaseQuotaResponse struct { - // OperationId: The same operation_id value used in the - // ReleaseQuotaRequest. Used for - // logging and diagnostics purposes. - OperationId string `json:"operationId,omitempty"` - - // QuotaMetrics: Quota metrics to indicate the result of release. - // Depending on the - // request, one or more of the following metrics will be included: - // - // 1. For rate quota, per quota group or per quota metric released - // amount - // will be specified using the following delta metric: - // "serviceruntime.googleapis.com/api/consumer/quota_refund_count" - // - // 2. For allocation quota, per quota metric total usage will be - // specified - // using the following gauge metric: - // - // "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" - // - // - // 3. For allocation quota, value for each quota limit associated - // with - // the metrics will be specified using the following gauge metric: - // "serviceruntime.googleapis.com/quota/limit" - QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"` - - // ReleaseErrors: Indicates the decision of the release. - ReleaseErrors []*QuotaError `json:"releaseErrors,omitempty"` - - // ServiceConfigId: ID of the actual config used to process the request. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ServerResponse contains the HTTP response code and headers from the - // server. - googleapi.ServerResponse `json:"-"` - - // ForceSendFields is a list of field names (e.g. "OperationId") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "OperationId") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *ReleaseQuotaResponse) MarshalJSON() ([]byte, error) { - type NoMethod ReleaseQuotaResponse - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// ReportError: Represents the processing error of one Operation in the -// request. -type ReportError struct { - // OperationId: The Operation.operation_id value from the request. - OperationId string `json:"operationId,omitempty"` - - // Status: Details of the error when processing the Operation. - Status *Status `json:"status,omitempty"` - - // ForceSendFields is a list of field names (e.g. "OperationId") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "OperationId") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *ReportError) MarshalJSON() ([]byte, error) { - type NoMethod ReportError - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// ReportInfo: Contains additional info about the report operation. -type ReportInfo struct { - // OperationId: The Operation.operation_id value from the request. - OperationId string `json:"operationId,omitempty"` - - // QuotaInfo: Quota usage info when processing the `Operation`. - QuotaInfo *QuotaInfo `json:"quotaInfo,omitempty"` - - // ForceSendFields is a list of field names (e.g. "OperationId") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "OperationId") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *ReportInfo) MarshalJSON() ([]byte, error) { - type NoMethod ReportInfo - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// ReportRequest: Request message for the Report method. -type ReportRequest struct { - // Operations: Operations to be reported. - // - // Typically the service should report one operation per - // request. - // Putting multiple operations into a single request is allowed, but - // should - // be used only when multiple operations are natually available at the - // time - // of the report. - // - // If multiple operations are in a single request, the total request - // size - // should be no larger than 1MB. See ReportResponse.report_errors - // for - // partial failure behavior. - Operations []*Operation `json:"operations,omitempty"` - - // ServiceConfigId: Specifies which version of service config should be - // used to process the - // request. - // - // If unspecified or no matching version can be found, the - // latest one will be used. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ForceSendFields is a list of field names (e.g. "Operations") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "Operations") to include in - // API requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *ReportRequest) MarshalJSON() ([]byte, error) { - type NoMethod ReportRequest - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// ReportResponse: Response message for the Report method. -type ReportResponse struct { - // ReportErrors: Partial failures, one for each `Operation` in the - // request that failed - // processing. There are three possible combinations of the RPC - // status: - // - // 1. The combination of a successful RPC status and an empty - // `report_errors` - // list indicates a complete success where all `Operations` in the - // request are processed successfully. - // 2. The combination of a successful RPC status and a non-empty - // `report_errors` list indicates a partial success where some - // `Operations` in the request succeeded. Each - // `Operation` that failed processing has a corresponding item - // in this list. - // 3. A failed RPC status indicates a general non-deterministic - // failure. - // When this happens, it's impossible to know which of the - // 'Operations' in the request succeeded or failed. - ReportErrors []*ReportError `json:"reportErrors,omitempty"` - - // ReportInfos: Quota usage for each quota release `Operation` - // request. - // - // Fully or partially failed quota release request may or may not be - // present - // in `report_quota_info`. For example, a failed quota release request - // will - // have the current quota usage info when precise quota library returns - // the - // info. A deadline exceeded quota request will not have quota usage - // info. - // - // If there is no quota release request, report_quota_info will be - // empty. - // - ReportInfos []*ReportInfo `json:"reportInfos,omitempty"` - - // ServiceConfigId: The actual config id used to process the request. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ServerResponse contains the HTTP response code and headers from the - // server. - googleapi.ServerResponse `json:"-"` - - // ForceSendFields is a list of field names (e.g. "ReportErrors") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "ReportErrors") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *ReportResponse) MarshalJSON() ([]byte, error) { - type NoMethod ReportResponse - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// RequestMetadata: Metadata about the request. -type RequestMetadata struct { - // CallerIp: The IP address of the caller. - // For caller from internet, this will be public IPv4 or IPv6 - // address. - // For caller from a Compute Engine VM with external IP address, - // this - // will be the VM's external IP address. For caller from a - // Compute - // Engine VM without external IP address, if the VM is in the - // same - // organization (or project) as the accessed resource, `caller_ip` - // will - // be the VM's internal IPv4 address, otherwise the `caller_ip` will - // be - // redacted to "gce-internal-ip". - // See https://cloud.google.com/compute/docs/vpc/ for more information. - CallerIp string `json:"callerIp,omitempty"` - - // CallerNetwork: The network of the caller. - // Set only if the network host project is part of the same GCP - // organization - // (or project) as the accessed resource. - // See https://cloud.google.com/compute/docs/vpc/ for more - // information. - // This is a scheme-less URI full resource name. For example: - // - // - // "//compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_ - // ID" - CallerNetwork string `json:"callerNetwork,omitempty"` - - // CallerSuppliedUserAgent: The user agent of the caller. - // This information is not authenticated and should be treated - // accordingly. - // For example: - // - // + `google-api-python-client/1.4.0`: - // The request was made by the Google API client for Python. - // + `Cloud SDK Command Line Tool apitools-client/1.0 gcloud/0.9.62`: - // The request was made by the Google Cloud SDK CLI (gcloud). - // + `AppEngine-Google; (+http://code.google.com/appengine; appid: - // s~my-project`: - // The request was made from the `my-project` App Engine app. - // NOLINT - CallerSuppliedUserAgent string `json:"callerSuppliedUserAgent,omitempty"` - - // ForceSendFields is a list of field names (e.g. "CallerIp") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "CallerIp") to include in - // API requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *RequestMetadata) MarshalJSON() ([]byte, error) { - type NoMethod RequestMetadata - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// ResourceInfo: Describes a resource associated with this operation. -type ResourceInfo struct { - // ResourceContainer: The identifier of the parent of this resource - // instance. - // Must be in one of the following formats: - // - “projects/” - // - “folders/” - // - “organizations/” - ResourceContainer string `json:"resourceContainer,omitempty"` - - // ResourceName: Name of the resource. This is used for auditing - // purposes. - ResourceName string `json:"resourceName,omitempty"` - - // ForceSendFields is a list of field names (e.g. "ResourceContainer") - // to unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "ResourceContainer") to - // include in API requests with the JSON null value. By default, fields - // with empty values are omitted from API requests. However, any field - // with an empty value appearing in NullFields will be sent to the - // server as null. It is an error if a field in this list has a - // non-empty value. This may be used to include null fields in Patch - // requests. - NullFields []string `json:"-"` -} - -func (s *ResourceInfo) MarshalJSON() ([]byte, error) { - type NoMethod ResourceInfo - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// StartReconciliationRequest: Request message for -// QuotaController.StartReconciliation. -type StartReconciliationRequest struct { - // ReconciliationOperation: Operation that describes the quota - // reconciliation. - ReconciliationOperation *QuotaOperation `json:"reconciliationOperation,omitempty"` - - // ServiceConfigId: Specifies which version of service configuration - // should be used to process - // the request. If unspecified or no matching version can be found, the - // latest - // one will be used. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ForceSendFields is a list of field names (e.g. - // "ReconciliationOperation") to unconditionally include in API - // requests. By default, fields with empty values are omitted from API - // requests. However, any non-pointer, non-interface field appearing in - // ForceSendFields will be sent to the server regardless of whether the - // field is empty or not. This may be used to include empty fields in - // Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "ReconciliationOperation") - // to include in API requests with the JSON null value. By default, - // fields with empty values are omitted from API requests. However, any - // field with an empty value appearing in NullFields will be sent to the - // server as null. It is an error if a field in this list has a - // non-empty value. This may be used to include null fields in Patch - // requests. - NullFields []string `json:"-"` -} - -func (s *StartReconciliationRequest) MarshalJSON() ([]byte, error) { - type NoMethod StartReconciliationRequest - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// StartReconciliationResponse: Response message for -// QuotaController.StartReconciliation. -type StartReconciliationResponse struct { - // OperationId: The same operation_id value used in the - // StartReconciliationRequest. Used - // for logging and diagnostics purposes. - OperationId string `json:"operationId,omitempty"` - - // QuotaMetrics: Metric values as tracked by One Platform before the - // start of - // reconciliation. The following metrics will be included: - // - // 1. Per quota metric total usage will be specified using the following - // gauge - // metric: - // - // "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" - // - // - // 2. Value for each quota limit associated with the metrics will be - // specified - // using the following gauge metric: - // "serviceruntime.googleapis.com/quota/limit" - QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"` - - // ReconciliationErrors: Indicates the decision of the reconciliation - // start. - ReconciliationErrors []*QuotaError `json:"reconciliationErrors,omitempty"` - - // ServiceConfigId: ID of the actual config used to process the request. - ServiceConfigId string `json:"serviceConfigId,omitempty"` - - // ServerResponse contains the HTTP response code and headers from the - // server. - googleapi.ServerResponse `json:"-"` - - // ForceSendFields is a list of field names (e.g. "OperationId") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "OperationId") to include - // in API requests with the JSON null value. By default, fields with - // empty values are omitted from API requests. However, any field with - // an empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *StartReconciliationResponse) MarshalJSON() ([]byte, error) { - type NoMethod StartReconciliationResponse - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// Status: The `Status` type defines a logical error model that is -// suitable for different -// programming environments, including REST APIs and RPC APIs. It is -// used by -// [gRPC](https://github.com/grpc). The error model is designed to -// be: -// -// - Simple to use and understand for most users -// - Flexible enough to meet unexpected needs -// -// # Overview -// -// The `Status` message contains three pieces of data: error code, error -// message, -// and error details. The error code should be an enum value -// of -// google.rpc.Code, but it may accept additional error codes if needed. -// The -// error message should be a developer-facing English message that -// helps -// developers *understand* and *resolve* the error. If a localized -// user-facing -// error message is needed, put the localized message in the error -// details or -// localize it in the client. The optional error details may contain -// arbitrary -// information about the error. There is a predefined set of error -// detail types -// in the package `google.rpc` that can be used for common error -// conditions. -// -// # Language mapping -// -// The `Status` message is the logical representation of the error -// model, but it -// is not necessarily the actual wire format. When the `Status` message -// is -// exposed in different client libraries and different wire protocols, -// it can be -// mapped differently. For example, it will likely be mapped to some -// exceptions -// in Java, but more likely mapped to some error codes in C. -// -// # Other uses -// -// The error model and the `Status` message can be used in a variety -// of -// environments, either with or without APIs, to provide a -// consistent developer experience across different -// environments. -// -// Example uses of this error model include: -// -// - Partial errors. If a service needs to return partial errors to the -// client, -// it may embed the `Status` in the normal response to indicate the -// partial -// errors. -// -// - Workflow errors. A typical workflow has multiple steps. Each step -// may -// have a `Status` message for error reporting. -// -// - Batch operations. If a client uses batch request and batch -// response, the -// `Status` message should be used directly inside batch response, -// one for -// each error sub-response. -// -// - Asynchronous operations. If an API call embeds asynchronous -// operation -// results in its response, the status of those operations should -// be -// represented directly using the `Status` message. -// -// - Logging. If some API errors are stored in logs, the message -// `Status` could -// be used directly after any stripping needed for security/privacy -// reasons. -type Status struct { - // Code: The status code, which should be an enum value of - // google.rpc.Code. - Code int64 `json:"code,omitempty"` - - // Details: A list of messages that carry the error details. There is a - // common set of - // message types for APIs to use. - Details []googleapi.RawMessage `json:"details,omitempty"` - - // Message: A developer-facing error message, which should be in - // English. Any - // user-facing error message should be localized and sent in - // the - // google.rpc.Status.details field, or localized by the client. - Message string `json:"message,omitempty"` - - // ForceSendFields is a list of field names (e.g. "Code") to - // unconditionally include in API requests. By default, fields with - // empty values are omitted from API requests. However, any non-pointer, - // non-interface field appearing in ForceSendFields will be sent to the - // server regardless of whether the field is empty or not. This may be - // used to include empty fields in Patch requests. - ForceSendFields []string `json:"-"` - - // NullFields is a list of field names (e.g. "Code") to include in API - // requests with the JSON null value. By default, fields with empty - // values are omitted from API requests. However, any field with an - // empty value appearing in NullFields will be sent to the server as - // null. It is an error if a field in this list has a non-empty value. - // This may be used to include null fields in Patch requests. - NullFields []string `json:"-"` -} - -func (s *Status) MarshalJSON() ([]byte, error) { - type NoMethod Status - raw := NoMethod(*s) - return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) -} - -// method id "servicecontrol.services.allocateQuota": - -type ServicesAllocateQuotaCall struct { - s *Service - serviceName string - allocatequotarequest *AllocateQuotaRequest - urlParams_ gensupport.URLParams - ctx_ context.Context - header_ http.Header -} - -// AllocateQuota: Attempts to allocate quota for the specified consumer. -// It should be called -// before the operation is executed. -// -// This method requires the -// `servicemanagement.services.quota` -// permission on the specified service. For more information, see -// [Cloud IAM](https://cloud.google.com/iam). -// -// **NOTE:** The client **must** fail-open on server errors -// `INTERNAL`, -// `UNKNOWN`, `DEADLINE_EXCEEDED`, and `UNAVAILABLE`. To ensure -// system -// reliability, the server may inject these errors to prohibit any -// hard -// dependency on the quota functionality. -func (r *ServicesService) AllocateQuota(serviceName string, allocatequotarequest *AllocateQuotaRequest) *ServicesAllocateQuotaCall { - c := &ServicesAllocateQuotaCall{s: r.s, urlParams_: make(gensupport.URLParams)} - c.serviceName = serviceName - c.allocatequotarequest = allocatequotarequest - return c -} - -// Fields allows partial responses to be retrieved. See -// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse -// for more information. -func (c *ServicesAllocateQuotaCall) Fields(s ...googleapi.Field) *ServicesAllocateQuotaCall { - c.urlParams_.Set("fields", googleapi.CombineFields(s)) - return c -} - -// Context sets the context to be used in this call's Do method. Any -// pending HTTP request will be aborted if the provided context is -// canceled. -func (c *ServicesAllocateQuotaCall) Context(ctx context.Context) *ServicesAllocateQuotaCall { - c.ctx_ = ctx - return c -} - -// Header returns an http.Header that can be modified by the caller to -// add HTTP headers to the request. -func (c *ServicesAllocateQuotaCall) Header() http.Header { - if c.header_ == nil { - c.header_ = make(http.Header) - } - return c.header_ -} - -func (c *ServicesAllocateQuotaCall) doRequest(alt string) (*http.Response, error) { - reqHeaders := make(http.Header) - for k, v := range c.header_ { - reqHeaders[k] = v - } - reqHeaders.Set("User-Agent", c.s.userAgent()) - var body io.Reader = nil - body, err := googleapi.WithoutDataWrapper.JSONReader(c.allocatequotarequest) - if err != nil { - return nil, err - } - reqHeaders.Set("Content-Type", "application/json") - c.urlParams_.Set("alt", alt) - urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}:allocateQuota") - urls += "?" + c.urlParams_.Encode() - req, _ := http.NewRequest("POST", urls, body) - req.Header = reqHeaders - googleapi.Expand(req.URL, map[string]string{ - "serviceName": c.serviceName, - }) - return gensupport.SendRequest(c.ctx_, c.s.client, req) -} - -// Do executes the "servicecontrol.services.allocateQuota" call. -// Exactly one of *AllocateQuotaResponse or error will be non-nil. Any -// non-2xx status code is an error. Response headers are in either -// *AllocateQuotaResponse.ServerResponse.Header or (if a response was -// returned at all) in error.(*googleapi.Error).Header. Use -// googleapi.IsNotModified to check whether the returned error was -// because http.StatusNotModified was returned. -func (c *ServicesAllocateQuotaCall) Do(opts ...googleapi.CallOption) (*AllocateQuotaResponse, error) { - gensupport.SetOptions(c.urlParams_, opts...) - res, err := c.doRequest("json") - if res != nil && res.StatusCode == http.StatusNotModified { - if res.Body != nil { - res.Body.Close() - } - return nil, &googleapi.Error{ - Code: res.StatusCode, - Header: res.Header, - } - } - if err != nil { - return nil, err - } - defer googleapi.CloseBody(res) - if err := googleapi.CheckResponse(res); err != nil { - return nil, err - } - ret := &AllocateQuotaResponse{ - ServerResponse: googleapi.ServerResponse{ - Header: res.Header, - HTTPStatusCode: res.StatusCode, - }, - } - target := &ret - if err := gensupport.DecodeResponse(target, res); err != nil { - return nil, err - } - return ret, nil - // { - // "description": "Attempts to allocate quota for the specified consumer. It should be called\nbefore the operation is executed.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Cloud IAM](https://cloud.google.com/iam).\n\n**NOTE:** The client **must** fail-open on server errors `INTERNAL`,\n`UNKNOWN`, `DEADLINE_EXCEEDED`, and `UNAVAILABLE`. To ensure system\nreliability, the server may inject these errors to prohibit any hard\ndependency on the quota functionality.", - // "flatPath": "v1/services/{serviceName}:allocateQuota", - // "httpMethod": "POST", - // "id": "servicecontrol.services.allocateQuota", - // "parameterOrder": [ - // "serviceName" - // ], - // "parameters": { - // "serviceName": { - // "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.", - // "location": "path", - // "required": true, - // "type": "string" - // } - // }, - // "path": "v1/services/{serviceName}:allocateQuota", - // "request": { - // "$ref": "AllocateQuotaRequest" - // }, - // "response": { - // "$ref": "AllocateQuotaResponse" - // }, - // "scopes": [ - // "https://www.googleapis.com/auth/cloud-platform", - // "https://www.googleapis.com/auth/servicecontrol" - // ] - // } - -} - -// method id "servicecontrol.services.check": - -type ServicesCheckCall struct { - s *Service - serviceName string - checkrequest *CheckRequest - urlParams_ gensupport.URLParams - ctx_ context.Context - header_ http.Header -} - -// Check: Checks whether an operation on a service should be allowed to -// proceed -// based on the configuration of the service and related policies. It -// must be -// called before the operation is executed. -// -// If feasible, the client should cache the check results and reuse them -// for -// 60 seconds. In case of any server errors, the client should rely on -// the -// cached results for much longer time to avoid outage. -// WARNING: There is general 60s delay for the configuration and -// policy -// propagation, therefore callers MUST NOT depend on the `Check` method -// having -// the latest policy information. -// -// NOTE: the CheckRequest has the size limit of 64KB. -// -// This method requires the `servicemanagement.services.check` -// permission -// on the specified service. For more information, see -// [Cloud IAM](https://cloud.google.com/iam). -func (r *ServicesService) Check(serviceName string, checkrequest *CheckRequest) *ServicesCheckCall { - c := &ServicesCheckCall{s: r.s, urlParams_: make(gensupport.URLParams)} - c.serviceName = serviceName - c.checkrequest = checkrequest - return c -} - -// Fields allows partial responses to be retrieved. See -// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse -// for more information. -func (c *ServicesCheckCall) Fields(s ...googleapi.Field) *ServicesCheckCall { - c.urlParams_.Set("fields", googleapi.CombineFields(s)) - return c -} - -// Context sets the context to be used in this call's Do method. Any -// pending HTTP request will be aborted if the provided context is -// canceled. -func (c *ServicesCheckCall) Context(ctx context.Context) *ServicesCheckCall { - c.ctx_ = ctx - return c -} - -// Header returns an http.Header that can be modified by the caller to -// add HTTP headers to the request. -func (c *ServicesCheckCall) Header() http.Header { - if c.header_ == nil { - c.header_ = make(http.Header) - } - return c.header_ -} - -func (c *ServicesCheckCall) doRequest(alt string) (*http.Response, error) { - reqHeaders := make(http.Header) - for k, v := range c.header_ { - reqHeaders[k] = v - } - reqHeaders.Set("User-Agent", c.s.userAgent()) - var body io.Reader = nil - body, err := googleapi.WithoutDataWrapper.JSONReader(c.checkrequest) - if err != nil { - return nil, err - } - reqHeaders.Set("Content-Type", "application/json") - c.urlParams_.Set("alt", alt) - urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}:check") - urls += "?" + c.urlParams_.Encode() - req, _ := http.NewRequest("POST", urls, body) - req.Header = reqHeaders - googleapi.Expand(req.URL, map[string]string{ - "serviceName": c.serviceName, - }) - return gensupport.SendRequest(c.ctx_, c.s.client, req) -} - -// Do executes the "servicecontrol.services.check" call. -// Exactly one of *CheckResponse or error will be non-nil. Any non-2xx -// status code is an error. Response headers are in either -// *CheckResponse.ServerResponse.Header or (if a response was returned -// at all) in error.(*googleapi.Error).Header. Use -// googleapi.IsNotModified to check whether the returned error was -// because http.StatusNotModified was returned. -func (c *ServicesCheckCall) Do(opts ...googleapi.CallOption) (*CheckResponse, error) { - gensupport.SetOptions(c.urlParams_, opts...) - res, err := c.doRequest("json") - if res != nil && res.StatusCode == http.StatusNotModified { - if res.Body != nil { - res.Body.Close() - } - return nil, &googleapi.Error{ - Code: res.StatusCode, - Header: res.Header, - } - } - if err != nil { - return nil, err - } - defer googleapi.CloseBody(res) - if err := googleapi.CheckResponse(res); err != nil { - return nil, err - } - ret := &CheckResponse{ - ServerResponse: googleapi.ServerResponse{ - Header: res.Header, - HTTPStatusCode: res.StatusCode, - }, - } - target := &ret - if err := gensupport.DecodeResponse(target, res); err != nil { - return nil, err - } - return ret, nil - // { - // "description": "Checks whether an operation on a service should be allowed to proceed\nbased on the configuration of the service and related policies. It must be\ncalled before the operation is executed.\n\nIf feasible, the client should cache the check results and reuse them for\n60 seconds. In case of any server errors, the client should rely on the\ncached results for much longer time to avoid outage.\nWARNING: There is general 60s delay for the configuration and policy\npropagation, therefore callers MUST NOT depend on the `Check` method having\nthe latest policy information.\n\nNOTE: the CheckRequest has the size limit of 64KB.\n\nThis method requires the `servicemanagement.services.check` permission\non the specified service. For more information, see\n[Cloud IAM](https://cloud.google.com/iam).", - // "flatPath": "v1/services/{serviceName}:check", - // "httpMethod": "POST", - // "id": "servicecontrol.services.check", - // "parameterOrder": [ - // "serviceName" - // ], - // "parameters": { - // "serviceName": { - // "description": "The service name as specified in its service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee\n[google.api.Service](https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service)\nfor the definition of a service name.", - // "location": "path", - // "required": true, - // "type": "string" - // } - // }, - // "path": "v1/services/{serviceName}:check", - // "request": { - // "$ref": "CheckRequest" - // }, - // "response": { - // "$ref": "CheckResponse" - // }, - // "scopes": [ - // "https://www.googleapis.com/auth/cloud-platform", - // "https://www.googleapis.com/auth/servicecontrol" - // ] - // } - -} - -// method id "servicecontrol.services.endReconciliation": - -type ServicesEndReconciliationCall struct { - s *Service - serviceName string - endreconciliationrequest *EndReconciliationRequest - urlParams_ gensupport.URLParams - ctx_ context.Context - header_ http.Header -} - -// EndReconciliation: Signals the quota controller that service ends the -// ongoing usage -// reconciliation. -// -// This method requires the -// `servicemanagement.services.quota` -// permission on the specified service. For more information, -// see -// [Google Cloud IAM](https://cloud.google.com/iam). -func (r *ServicesService) EndReconciliation(serviceName string, endreconciliationrequest *EndReconciliationRequest) *ServicesEndReconciliationCall { - c := &ServicesEndReconciliationCall{s: r.s, urlParams_: make(gensupport.URLParams)} - c.serviceName = serviceName - c.endreconciliationrequest = endreconciliationrequest - return c -} - -// Fields allows partial responses to be retrieved. See -// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse -// for more information. -func (c *ServicesEndReconciliationCall) Fields(s ...googleapi.Field) *ServicesEndReconciliationCall { - c.urlParams_.Set("fields", googleapi.CombineFields(s)) - return c -} - -// Context sets the context to be used in this call's Do method. Any -// pending HTTP request will be aborted if the provided context is -// canceled. -func (c *ServicesEndReconciliationCall) Context(ctx context.Context) *ServicesEndReconciliationCall { - c.ctx_ = ctx - return c -} - -// Header returns an http.Header that can be modified by the caller to -// add HTTP headers to the request. -func (c *ServicesEndReconciliationCall) Header() http.Header { - if c.header_ == nil { - c.header_ = make(http.Header) - } - return c.header_ -} - -func (c *ServicesEndReconciliationCall) doRequest(alt string) (*http.Response, error) { - reqHeaders := make(http.Header) - for k, v := range c.header_ { - reqHeaders[k] = v - } - reqHeaders.Set("User-Agent", c.s.userAgent()) - var body io.Reader = nil - body, err := googleapi.WithoutDataWrapper.JSONReader(c.endreconciliationrequest) - if err != nil { - return nil, err - } - reqHeaders.Set("Content-Type", "application/json") - c.urlParams_.Set("alt", alt) - urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}:endReconciliation") - urls += "?" + c.urlParams_.Encode() - req, _ := http.NewRequest("POST", urls, body) - req.Header = reqHeaders - googleapi.Expand(req.URL, map[string]string{ - "serviceName": c.serviceName, - }) - return gensupport.SendRequest(c.ctx_, c.s.client, req) -} - -// Do executes the "servicecontrol.services.endReconciliation" call. -// Exactly one of *EndReconciliationResponse or error will be non-nil. -// Any non-2xx status code is an error. Response headers are in either -// *EndReconciliationResponse.ServerResponse.Header or (if a response -// was returned at all) in error.(*googleapi.Error).Header. Use -// googleapi.IsNotModified to check whether the returned error was -// because http.StatusNotModified was returned. -func (c *ServicesEndReconciliationCall) Do(opts ...googleapi.CallOption) (*EndReconciliationResponse, error) { - gensupport.SetOptions(c.urlParams_, opts...) - res, err := c.doRequest("json") - if res != nil && res.StatusCode == http.StatusNotModified { - if res.Body != nil { - res.Body.Close() - } - return nil, &googleapi.Error{ - Code: res.StatusCode, - Header: res.Header, - } - } - if err != nil { - return nil, err - } - defer googleapi.CloseBody(res) - if err := googleapi.CheckResponse(res); err != nil { - return nil, err - } - ret := &EndReconciliationResponse{ - ServerResponse: googleapi.ServerResponse{ - Header: res.Header, - HTTPStatusCode: res.StatusCode, - }, - } - target := &ret - if err := gensupport.DecodeResponse(target, res); err != nil { - return nil, err - } - return ret, nil - // { - // "description": "Signals the quota controller that service ends the ongoing usage\nreconciliation.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).", - // "flatPath": "v1/services/{serviceName}:endReconciliation", - // "httpMethod": "POST", - // "id": "servicecontrol.services.endReconciliation", - // "parameterOrder": [ - // "serviceName" - // ], - // "parameters": { - // "serviceName": { - // "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.", - // "location": "path", - // "required": true, - // "type": "string" - // } - // }, - // "path": "v1/services/{serviceName}:endReconciliation", - // "request": { - // "$ref": "EndReconciliationRequest" - // }, - // "response": { - // "$ref": "EndReconciliationResponse" - // }, - // "scopes": [ - // "https://www.googleapis.com/auth/cloud-platform", - // "https://www.googleapis.com/auth/servicecontrol" - // ] - // } - -} - -// method id "servicecontrol.services.releaseQuota": - -type ServicesReleaseQuotaCall struct { - s *Service - serviceName string - releasequotarequest *ReleaseQuotaRequest - urlParams_ gensupport.URLParams - ctx_ context.Context - header_ http.Header -} - -// ReleaseQuota: Releases previously allocated quota done through -// AllocateQuota method. -// -// This method requires the -// `servicemanagement.services.quota` -// permission on the specified service. For more information, see -// [Cloud IAM](https://cloud.google.com/iam). -// -// -// **NOTE:** The client **must** fail-open on server errors -// `INTERNAL`, -// `UNKNOWN`, `DEADLINE_EXCEEDED`, and `UNAVAILABLE`. To ensure -// system -// reliability, the server may inject these errors to prohibit any -// hard -// dependency on the quota functionality. -func (r *ServicesService) ReleaseQuota(serviceName string, releasequotarequest *ReleaseQuotaRequest) *ServicesReleaseQuotaCall { - c := &ServicesReleaseQuotaCall{s: r.s, urlParams_: make(gensupport.URLParams)} - c.serviceName = serviceName - c.releasequotarequest = releasequotarequest - return c -} - -// Fields allows partial responses to be retrieved. See -// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse -// for more information. -func (c *ServicesReleaseQuotaCall) Fields(s ...googleapi.Field) *ServicesReleaseQuotaCall { - c.urlParams_.Set("fields", googleapi.CombineFields(s)) - return c -} - -// Context sets the context to be used in this call's Do method. Any -// pending HTTP request will be aborted if the provided context is -// canceled. -func (c *ServicesReleaseQuotaCall) Context(ctx context.Context) *ServicesReleaseQuotaCall { - c.ctx_ = ctx - return c -} - -// Header returns an http.Header that can be modified by the caller to -// add HTTP headers to the request. -func (c *ServicesReleaseQuotaCall) Header() http.Header { - if c.header_ == nil { - c.header_ = make(http.Header) - } - return c.header_ -} - -func (c *ServicesReleaseQuotaCall) doRequest(alt string) (*http.Response, error) { - reqHeaders := make(http.Header) - for k, v := range c.header_ { - reqHeaders[k] = v - } - reqHeaders.Set("User-Agent", c.s.userAgent()) - var body io.Reader = nil - body, err := googleapi.WithoutDataWrapper.JSONReader(c.releasequotarequest) - if err != nil { - return nil, err - } - reqHeaders.Set("Content-Type", "application/json") - c.urlParams_.Set("alt", alt) - urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}:releaseQuota") - urls += "?" + c.urlParams_.Encode() - req, _ := http.NewRequest("POST", urls, body) - req.Header = reqHeaders - googleapi.Expand(req.URL, map[string]string{ - "serviceName": c.serviceName, - }) - return gensupport.SendRequest(c.ctx_, c.s.client, req) -} - -// Do executes the "servicecontrol.services.releaseQuota" call. -// Exactly one of *ReleaseQuotaResponse or error will be non-nil. Any -// non-2xx status code is an error. Response headers are in either -// *ReleaseQuotaResponse.ServerResponse.Header or (if a response was -// returned at all) in error.(*googleapi.Error).Header. Use -// googleapi.IsNotModified to check whether the returned error was -// because http.StatusNotModified was returned. -func (c *ServicesReleaseQuotaCall) Do(opts ...googleapi.CallOption) (*ReleaseQuotaResponse, error) { - gensupport.SetOptions(c.urlParams_, opts...) - res, err := c.doRequest("json") - if res != nil && res.StatusCode == http.StatusNotModified { - if res.Body != nil { - res.Body.Close() - } - return nil, &googleapi.Error{ - Code: res.StatusCode, - Header: res.Header, - } - } - if err != nil { - return nil, err - } - defer googleapi.CloseBody(res) - if err := googleapi.CheckResponse(res); err != nil { - return nil, err - } - ret := &ReleaseQuotaResponse{ - ServerResponse: googleapi.ServerResponse{ - Header: res.Header, - HTTPStatusCode: res.StatusCode, - }, - } - target := &ret - if err := gensupport.DecodeResponse(target, res); err != nil { - return nil, err - } - return ret, nil - // { - // "description": "Releases previously allocated quota done through AllocateQuota method.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Cloud IAM](https://cloud.google.com/iam).\n\n\n**NOTE:** The client **must** fail-open on server errors `INTERNAL`,\n`UNKNOWN`, `DEADLINE_EXCEEDED`, and `UNAVAILABLE`. To ensure system\nreliability, the server may inject these errors to prohibit any hard\ndependency on the quota functionality.", - // "flatPath": "v1/services/{serviceName}:releaseQuota", - // "httpMethod": "POST", - // "id": "servicecontrol.services.releaseQuota", - // "parameterOrder": [ - // "serviceName" - // ], - // "parameters": { - // "serviceName": { - // "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.", - // "location": "path", - // "required": true, - // "type": "string" - // } - // }, - // "path": "v1/services/{serviceName}:releaseQuota", - // "request": { - // "$ref": "ReleaseQuotaRequest" - // }, - // "response": { - // "$ref": "ReleaseQuotaResponse" - // }, - // "scopes": [ - // "https://www.googleapis.com/auth/cloud-platform", - // "https://www.googleapis.com/auth/servicecontrol" - // ] - // } - -} - -// method id "servicecontrol.services.report": - -type ServicesReportCall struct { - s *Service - serviceName string - reportrequest *ReportRequest - urlParams_ gensupport.URLParams - ctx_ context.Context - header_ http.Header -} - -// Report: Reports operation results to Google Service Control, such as -// logs and -// metrics. It should be called after an operation is completed. -// -// If feasible, the client should aggregate reporting data for up to -// 5 -// seconds to reduce API traffic. Limiting aggregation to 5 seconds is -// to -// reduce data loss during client crashes. Clients should carefully -// choose -// the aggregation time window to avoid data loss risk more than -// 0.01% -// for business and compliance reasons. -// -// NOTE: the ReportRequest has the size limit of 1MB. -// -// This method requires the `servicemanagement.services.report` -// permission -// on the specified service. For more information, see -// [Google Cloud IAM](https://cloud.google.com/iam). -func (r *ServicesService) Report(serviceName string, reportrequest *ReportRequest) *ServicesReportCall { - c := &ServicesReportCall{s: r.s, urlParams_: make(gensupport.URLParams)} - c.serviceName = serviceName - c.reportrequest = reportrequest - return c -} - -// Fields allows partial responses to be retrieved. See -// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse -// for more information. -func (c *ServicesReportCall) Fields(s ...googleapi.Field) *ServicesReportCall { - c.urlParams_.Set("fields", googleapi.CombineFields(s)) - return c -} - -// Context sets the context to be used in this call's Do method. Any -// pending HTTP request will be aborted if the provided context is -// canceled. -func (c *ServicesReportCall) Context(ctx context.Context) *ServicesReportCall { - c.ctx_ = ctx - return c -} - -// Header returns an http.Header that can be modified by the caller to -// add HTTP headers to the request. -func (c *ServicesReportCall) Header() http.Header { - if c.header_ == nil { - c.header_ = make(http.Header) - } - return c.header_ -} - -func (c *ServicesReportCall) doRequest(alt string) (*http.Response, error) { - reqHeaders := make(http.Header) - for k, v := range c.header_ { - reqHeaders[k] = v - } - reqHeaders.Set("User-Agent", c.s.userAgent()) - var body io.Reader = nil - body, err := googleapi.WithoutDataWrapper.JSONReader(c.reportrequest) - if err != nil { - return nil, err - } - reqHeaders.Set("Content-Type", "application/json") - c.urlParams_.Set("alt", alt) - urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}:report") - urls += "?" + c.urlParams_.Encode() - req, _ := http.NewRequest("POST", urls, body) - req.Header = reqHeaders - googleapi.Expand(req.URL, map[string]string{ - "serviceName": c.serviceName, - }) - return gensupport.SendRequest(c.ctx_, c.s.client, req) -} - -// Do executes the "servicecontrol.services.report" call. -// Exactly one of *ReportResponse or error will be non-nil. Any non-2xx -// status code is an error. Response headers are in either -// *ReportResponse.ServerResponse.Header or (if a response was returned -// at all) in error.(*googleapi.Error).Header. Use -// googleapi.IsNotModified to check whether the returned error was -// because http.StatusNotModified was returned. -func (c *ServicesReportCall) Do(opts ...googleapi.CallOption) (*ReportResponse, error) { - gensupport.SetOptions(c.urlParams_, opts...) - res, err := c.doRequest("json") - if res != nil && res.StatusCode == http.StatusNotModified { - if res.Body != nil { - res.Body.Close() - } - return nil, &googleapi.Error{ - Code: res.StatusCode, - Header: res.Header, - } - } - if err != nil { - return nil, err - } - defer googleapi.CloseBody(res) - if err := googleapi.CheckResponse(res); err != nil { - return nil, err - } - ret := &ReportResponse{ - ServerResponse: googleapi.ServerResponse{ - Header: res.Header, - HTTPStatusCode: res.StatusCode, - }, - } - target := &ret - if err := gensupport.DecodeResponse(target, res); err != nil { - return nil, err - } - return ret, nil - // { - // "description": "Reports operation results to Google Service Control, such as logs and\nmetrics. It should be called after an operation is completed.\n\nIf feasible, the client should aggregate reporting data for up to 5\nseconds to reduce API traffic. Limiting aggregation to 5 seconds is to\nreduce data loss during client crashes. Clients should carefully choose\nthe aggregation time window to avoid data loss risk more than 0.01%\nfor business and compliance reasons.\n\nNOTE: the ReportRequest has the size limit of 1MB.\n\nThis method requires the `servicemanagement.services.report` permission\non the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).", - // "flatPath": "v1/services/{serviceName}:report", - // "httpMethod": "POST", - // "id": "servicecontrol.services.report", - // "parameterOrder": [ - // "serviceName" - // ], - // "parameters": { - // "serviceName": { - // "description": "The service name as specified in its service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee\n[google.api.Service](https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service)\nfor the definition of a service name.", - // "location": "path", - // "required": true, - // "type": "string" - // } - // }, - // "path": "v1/services/{serviceName}:report", - // "request": { - // "$ref": "ReportRequest" - // }, - // "response": { - // "$ref": "ReportResponse" - // }, - // "scopes": [ - // "https://www.googleapis.com/auth/cloud-platform", - // "https://www.googleapis.com/auth/servicecontrol" - // ] - // } - -} - -// method id "servicecontrol.services.startReconciliation": - -type ServicesStartReconciliationCall struct { - s *Service - serviceName string - startreconciliationrequest *StartReconciliationRequest - urlParams_ gensupport.URLParams - ctx_ context.Context - header_ http.Header -} - -// StartReconciliation: Unlike rate quota, allocation quota does not get -// refilled periodically. -// So, it is possible that the quota usage as seen by the service -// differs from -// what the One Platform considers the usage is. This is expected to -// happen -// only rarely, but over time this can accumulate. Services can -// invoke -// StartReconciliation and EndReconciliation to correct this usage -// drift, as -// described below: -// 1. Service sends StartReconciliation with a timestamp in future for -// each -// metric that needs to be reconciled. The timestamp being in future -// allows -// to account for in-flight AllocateQuota and ReleaseQuota requests -// for the -// same metric. -// 2. One Platform records this timestamp and starts tracking -// subsequent -// AllocateQuota and ReleaseQuota requests until EndReconciliation -// is -// called. -// 3. At or after the time specified in the StartReconciliation, -// service -// sends EndReconciliation with the usage that needs to be reconciled -// to. -// 4. One Platform adjusts its own record of usage for that metric to -// the -// value specified in EndReconciliation by taking in to account any -// allocation or release between StartReconciliation and -// EndReconciliation. -// -// Signals the quota controller that the service wants to perform a -// usage -// reconciliation as specified in the request. -// -// This method requires the -// `servicemanagement.services.quota` -// permission on the specified service. For more information, -// see -// [Google Cloud IAM](https://cloud.google.com/iam). -func (r *ServicesService) StartReconciliation(serviceName string, startreconciliationrequest *StartReconciliationRequest) *ServicesStartReconciliationCall { - c := &ServicesStartReconciliationCall{s: r.s, urlParams_: make(gensupport.URLParams)} - c.serviceName = serviceName - c.startreconciliationrequest = startreconciliationrequest - return c -} - -// Fields allows partial responses to be retrieved. See -// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse -// for more information. -func (c *ServicesStartReconciliationCall) Fields(s ...googleapi.Field) *ServicesStartReconciliationCall { - c.urlParams_.Set("fields", googleapi.CombineFields(s)) - return c -} - -// Context sets the context to be used in this call's Do method. Any -// pending HTTP request will be aborted if the provided context is -// canceled. -func (c *ServicesStartReconciliationCall) Context(ctx context.Context) *ServicesStartReconciliationCall { - c.ctx_ = ctx - return c -} - -// Header returns an http.Header that can be modified by the caller to -// add HTTP headers to the request. -func (c *ServicesStartReconciliationCall) Header() http.Header { - if c.header_ == nil { - c.header_ = make(http.Header) - } - return c.header_ -} - -func (c *ServicesStartReconciliationCall) doRequest(alt string) (*http.Response, error) { - reqHeaders := make(http.Header) - for k, v := range c.header_ { - reqHeaders[k] = v - } - reqHeaders.Set("User-Agent", c.s.userAgent()) - var body io.Reader = nil - body, err := googleapi.WithoutDataWrapper.JSONReader(c.startreconciliationrequest) - if err != nil { - return nil, err - } - reqHeaders.Set("Content-Type", "application/json") - c.urlParams_.Set("alt", alt) - urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}:startReconciliation") - urls += "?" + c.urlParams_.Encode() - req, _ := http.NewRequest("POST", urls, body) - req.Header = reqHeaders - googleapi.Expand(req.URL, map[string]string{ - "serviceName": c.serviceName, - }) - return gensupport.SendRequest(c.ctx_, c.s.client, req) -} - -// Do executes the "servicecontrol.services.startReconciliation" call. -// Exactly one of *StartReconciliationResponse or error will be non-nil. -// Any non-2xx status code is an error. Response headers are in either -// *StartReconciliationResponse.ServerResponse.Header or (if a response -// was returned at all) in error.(*googleapi.Error).Header. Use -// googleapi.IsNotModified to check whether the returned error was -// because http.StatusNotModified was returned. -func (c *ServicesStartReconciliationCall) Do(opts ...googleapi.CallOption) (*StartReconciliationResponse, error) { - gensupport.SetOptions(c.urlParams_, opts...) - res, err := c.doRequest("json") - if res != nil && res.StatusCode == http.StatusNotModified { - if res.Body != nil { - res.Body.Close() - } - return nil, &googleapi.Error{ - Code: res.StatusCode, - Header: res.Header, - } - } - if err != nil { - return nil, err - } - defer googleapi.CloseBody(res) - if err := googleapi.CheckResponse(res); err != nil { - return nil, err - } - ret := &StartReconciliationResponse{ - ServerResponse: googleapi.ServerResponse{ - Header: res.Header, - HTTPStatusCode: res.StatusCode, - }, - } - target := &ret - if err := gensupport.DecodeResponse(target, res); err != nil { - return nil, err - } - return ret, nil - // { - // "description": "Unlike rate quota, allocation quota does not get refilled periodically.\nSo, it is possible that the quota usage as seen by the service differs from\nwhat the One Platform considers the usage is. This is expected to happen\nonly rarely, but over time this can accumulate. Services can invoke\nStartReconciliation and EndReconciliation to correct this usage drift, as\ndescribed below:\n1. Service sends StartReconciliation with a timestamp in future for each\n metric that needs to be reconciled. The timestamp being in future allows\n to account for in-flight AllocateQuota and ReleaseQuota requests for the\n same metric.\n2. One Platform records this timestamp and starts tracking subsequent\n AllocateQuota and ReleaseQuota requests until EndReconciliation is\n called.\n3. At or after the time specified in the StartReconciliation, service\n sends EndReconciliation with the usage that needs to be reconciled to.\n4. One Platform adjusts its own record of usage for that metric to the\n value specified in EndReconciliation by taking in to account any\n allocation or release between StartReconciliation and EndReconciliation.\n\nSignals the quota controller that the service wants to perform a usage\nreconciliation as specified in the request.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).", - // "flatPath": "v1/services/{serviceName}:startReconciliation", - // "httpMethod": "POST", - // "id": "servicecontrol.services.startReconciliation", - // "parameterOrder": [ - // "serviceName" - // ], - // "parameters": { - // "serviceName": { - // "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.", - // "location": "path", - // "required": true, - // "type": "string" - // } - // }, - // "path": "v1/services/{serviceName}:startReconciliation", - // "request": { - // "$ref": "StartReconciliationRequest" - // }, - // "response": { - // "$ref": "StartReconciliationResponse" - // }, - // "scopes": [ - // "https://www.googleapis.com/auth/cloud-platform", - // "https://www.googleapis.com/auth/servicecontrol" - // ] - // } - -} diff --git a/vendor/istio.io/api/mesh/v1alpha1/config.pb.go b/vendor/istio.io/api/mesh/v1alpha1/config.pb.go index 9113cf2515e2..f981795b62db 100644 --- a/vendor/istio.io/api/mesh/v1alpha1/config.pb.go +++ b/vendor/istio.io/api/mesh/v1alpha1/config.pb.go @@ -12,6 +12,7 @@ It has these top-level messages: MeshConfig ConfigSource + LocalityLoadBalancerSetting Network MeshNetworks Tracing @@ -242,6 +243,8 @@ type MeshConfig struct { // rules, and other Istio configuration artifacts. Multiple data sources // can be configured for a single control plane. ConfigSources []*ConfigSource `protobuf:"bytes,22,rep,name=config_sources,json=configSources" json:"config_sources,omitempty"` + // Locality based load balancing distribution or failover settings. + LocalityLbSetting *LocalityLoadBalancerSetting `protobuf:"bytes,31,opt,name=locality_lb_setting,json=localityLbSetting" json:"locality_lb_setting,omitempty"` // $hide_from_docs // This flag is used by secret discovery service(SDS). // If set to true(prerequisite: https://kubernetes.io/docs/concepts/storage/volumes/#projected), Istio will inject volumes mount @@ -443,6 +446,13 @@ func (m *MeshConfig) GetConfigSources() []*ConfigSource { return nil } +func (m *MeshConfig) GetLocalityLbSetting() *LocalityLoadBalancerSetting { + if m != nil { + return m.LocalityLbSetting + } + return nil +} + func (m *MeshConfig) GetEnableSdsTokenMount() bool { if m != nil { return m.EnableSdsTokenMount @@ -515,10 +525,141 @@ func (m *ConfigSource) GetTlsSettings() *istio_networking_v1alpha33.TLSSettings return nil } +// The following example sets up locality weight for mesh wide service +// Assume a service resides in "region1/zone1/*" and "region1/zone2/*", +// and originating clusters also reside in "region1/zone1/*" and "region1/zone2/*". +// This example specifies when clusters from "region1/zone1/*" accessing the service, 80% of the traffic +// is shipped to "region1/zone1/*" ratings service endpoints, and the rest 20% to "region1/zone2/*". +// +// ```yaml +// distribute: +// - from: region1/zone1/* +// to: +// "region1/zone1/*": 80 +// "region1/zone2/*": 20 +// - from: region1/zone2/* +// to: +// "region1/zone1/*": 20 +// "region1/zone2/*": 80 +// ``` +// +// The following example sets up locality failover policy for the ratings service +// Assume a service resides in "region1" "region2" and "region3", +// This example specifies when clusters from "region1/zone1" accessing the service, +// if endpoints in "region1" becomes unhealthy, traffic will begin to trickle to "region2". +// +// ```yaml +// failover: +// - from: region1 +// to: region2 +// ``` +// Locality load balancing settings. +type LocalityLoadBalancerSetting struct { + // Optional: only distribute or failover can be set. + // Explicitly specify loadbalancing weight across different zones and geographical locations. + // Refer to [Locality weighted load balancing](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/load_balancing.html?highlight=load_balancing_weight#locality-weighted-load-balancing) + // If empty, the locality weight is set according to the endpoints number within it. + Distribute []*LocalityLoadBalancerSetting_Distribute `protobuf:"bytes,1,rep,name=distribute" json:"distribute,omitempty"` + // Optional: only failover or distribute can be set. + // Explicitly specify the region traffic will land on when endpoints in local region becomes unhealthy. + // Should be used together with OutlierDetection to detect unhealthy endpoints. + // Note: if no OutlierDetection specified, this will not take effect. + Failover []*LocalityLoadBalancerSetting_Failover `protobuf:"bytes,2,rep,name=failover" json:"failover,omitempty"` +} + +func (m *LocalityLoadBalancerSetting) Reset() { *m = LocalityLoadBalancerSetting{} } +func (m *LocalityLoadBalancerSetting) String() string { return proto.CompactTextString(m) } +func (*LocalityLoadBalancerSetting) ProtoMessage() {} +func (*LocalityLoadBalancerSetting) Descriptor() ([]byte, []int) { + return fileDescriptorConfig, []int{2} +} + +func (m *LocalityLoadBalancerSetting) GetDistribute() []*LocalityLoadBalancerSetting_Distribute { + if m != nil { + return m.Distribute + } + return nil +} + +func (m *LocalityLoadBalancerSetting) GetFailover() []*LocalityLoadBalancerSetting_Failover { + if m != nil { + return m.Failover + } + return nil +} + +// Originating -> upstream cluster locality weight set, support wildcard matching '*' +// '*' matches all localities +// 'region1/*' matches all zones in region1 +type LocalityLoadBalancerSetting_Distribute struct { + // Originating locality, '/' separated, e.g. 'region/zone/sub_zone'. + From string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` + // Upstream locality to loadbalancing weight map. The sum of all weights should be == 100. + // Should assign load balancing weight for all localities, otherwise the traffic are not routed + // following the percentage of weight. + To map[string]uint32 `protobuf:"bytes,2,rep,name=to" json:"to,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (m *LocalityLoadBalancerSetting_Distribute) Reset() { + *m = LocalityLoadBalancerSetting_Distribute{} +} +func (m *LocalityLoadBalancerSetting_Distribute) String() string { return proto.CompactTextString(m) } +func (*LocalityLoadBalancerSetting_Distribute) ProtoMessage() {} +func (*LocalityLoadBalancerSetting_Distribute) Descriptor() ([]byte, []int) { + return fileDescriptorConfig, []int{2, 0} +} + +func (m *LocalityLoadBalancerSetting_Distribute) GetFrom() string { + if m != nil { + return m.From + } + return "" +} + +func (m *LocalityLoadBalancerSetting_Distribute) GetTo() map[string]uint32 { + if m != nil { + return m.To + } + return nil +} + +// Specify the traffic failover policy. +// As zone and sub_zone failover is supported by default, only region can be specified here. +type LocalityLoadBalancerSetting_Failover struct { + // Originating region. + From string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` + // Destination region the traffic will fail over to when endpoints in local region becomes unhealthy. + To string `protobuf:"bytes,2,opt,name=to,proto3" json:"to,omitempty"` +} + +func (m *LocalityLoadBalancerSetting_Failover) Reset() { *m = LocalityLoadBalancerSetting_Failover{} } +func (m *LocalityLoadBalancerSetting_Failover) String() string { return proto.CompactTextString(m) } +func (*LocalityLoadBalancerSetting_Failover) ProtoMessage() {} +func (*LocalityLoadBalancerSetting_Failover) Descriptor() ([]byte, []int) { + return fileDescriptorConfig, []int{2, 1} +} + +func (m *LocalityLoadBalancerSetting_Failover) GetFrom() string { + if m != nil { + return m.From + } + return "" +} + +func (m *LocalityLoadBalancerSetting_Failover) GetTo() string { + if m != nil { + return m.To + } + return "" +} + func init() { proto.RegisterType((*MeshConfig)(nil), "istio.mesh.v1alpha1.MeshConfig") proto.RegisterType((*MeshConfig_OutboundTrafficPolicy)(nil), "istio.mesh.v1alpha1.MeshConfig.OutboundTrafficPolicy") proto.RegisterType((*ConfigSource)(nil), "istio.mesh.v1alpha1.ConfigSource") + proto.RegisterType((*LocalityLoadBalancerSetting)(nil), "istio.mesh.v1alpha1.LocalityLoadBalancerSetting") + proto.RegisterType((*LocalityLoadBalancerSetting_Distribute)(nil), "istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute") + proto.RegisterType((*LocalityLoadBalancerSetting_Failover)(nil), "istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Failover") proto.RegisterEnum("istio.mesh.v1alpha1.MeshConfig_IngressControllerMode", MeshConfig_IngressControllerMode_name, MeshConfig_IngressControllerMode_value) proto.RegisterEnum("istio.mesh.v1alpha1.MeshConfig_AuthPolicy", MeshConfig_AuthPolicy_name, MeshConfig_AuthPolicy_value) proto.RegisterEnum("istio.mesh.v1alpha1.MeshConfig_AccessLogEncoding", MeshConfig_AccessLogEncoding_name, MeshConfig_AccessLogEncoding_value) @@ -788,6 +929,18 @@ func (m *MeshConfig) MarshalTo(dAtA []byte) (int, error) { } i++ } + if m.LocalityLbSetting != nil { + dAtA[i] = 0xfa + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintConfig(dAtA, i, uint64(m.LocalityLbSetting.Size())) + n7, err := m.LocalityLbSetting.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n7 + } return i, nil } @@ -839,11 +992,123 @@ func (m *ConfigSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintConfig(dAtA, i, uint64(m.TlsSettings.Size())) - n7, err := m.TlsSettings.MarshalTo(dAtA[i:]) + n8, err := m.TlsSettings.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n7 + i += n8 + } + return i, nil +} + +func (m *LocalityLoadBalancerSetting) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LocalityLoadBalancerSetting) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Distribute) > 0 { + for _, msg := range m.Distribute { + dAtA[i] = 0xa + i++ + i = encodeVarintConfig(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Failover) > 0 { + for _, msg := range m.Failover { + dAtA[i] = 0x12 + i++ + i = encodeVarintConfig(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *LocalityLoadBalancerSetting_Distribute) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LocalityLoadBalancerSetting_Distribute) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.From) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintConfig(dAtA, i, uint64(len(m.From))) + i += copy(dAtA[i:], m.From) + } + if len(m.To) > 0 { + for k, _ := range m.To { + dAtA[i] = 0x12 + i++ + v := m.To[k] + mapSize := 1 + len(k) + sovConfig(uint64(len(k))) + 1 + sovConfig(uint64(v)) + i = encodeVarintConfig(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintConfig(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x10 + i++ + i = encodeVarintConfig(dAtA, i, uint64(v)) + } + } + return i, nil +} + +func (m *LocalityLoadBalancerSetting_Failover) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LocalityLoadBalancerSetting_Failover) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.From) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintConfig(dAtA, i, uint64(len(m.From))) + i += copy(dAtA[i:], m.From) + } + if len(m.To) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintConfig(dAtA, i, uint64(len(m.To))) + i += copy(dAtA[i:], m.To) } return i, nil } @@ -962,6 +1227,10 @@ func (m *MeshConfig) Size() (n int) { if m.SidecarToTelemetrySessionAffinity { n += 3 } + if m.LocalityLbSetting != nil { + l = m.LocalityLbSetting.Size() + n += 2 + l + sovConfig(uint64(l)) + } return n } @@ -988,6 +1257,56 @@ func (m *ConfigSource) Size() (n int) { return n } +func (m *LocalityLoadBalancerSetting) Size() (n int) { + var l int + _ = l + if len(m.Distribute) > 0 { + for _, e := range m.Distribute { + l = e.Size() + n += 1 + l + sovConfig(uint64(l)) + } + } + if len(m.Failover) > 0 { + for _, e := range m.Failover { + l = e.Size() + n += 1 + l + sovConfig(uint64(l)) + } + } + return n +} + +func (m *LocalityLoadBalancerSetting_Distribute) Size() (n int) { + var l int + _ = l + l = len(m.From) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + if len(m.To) > 0 { + for k, v := range m.To { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovConfig(uint64(len(k))) + 1 + sovConfig(uint64(v)) + n += mapEntrySize + 1 + sovConfig(uint64(mapEntrySize)) + } + } + return n +} + +func (m *LocalityLoadBalancerSetting_Failover) Size() (n int) { + var l int + _ = l + l = len(m.From) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.To) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + return n +} + func sovConfig(x uint64) (n int) { for { n++ @@ -1755,6 +2074,39 @@ func (m *MeshConfig) Unmarshal(dAtA []byte) error { } } m.SidecarToTelemetrySessionAffinity = bool(v != 0) + case 31: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LocalityLbSetting", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LocalityLbSetting == nil { + m.LocalityLbSetting = &LocalityLoadBalancerSetting{} + } + if err := m.LocalityLbSetting.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipConfig(dAtA[iNdEx:]) @@ -1957,6 +2309,412 @@ func (m *ConfigSource) Unmarshal(dAtA []byte) error { } return nil } +func (m *LocalityLoadBalancerSetting) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LocalityLoadBalancerSetting: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LocalityLoadBalancerSetting: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Distribute", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Distribute = append(m.Distribute, &LocalityLoadBalancerSetting_Distribute{}) + if err := m.Distribute[len(m.Distribute)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Failover", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Failover = append(m.Failover, &LocalityLoadBalancerSetting_Failover{}) + if err := m.Failover[len(m.Failover)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LocalityLoadBalancerSetting_Distribute) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Distribute: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Distribute: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.From = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.To == nil { + m.To = make(map[string]uint32) + } + var mapkey string + var mapvalue uint32 + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthConfig + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapvalue |= (uint32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + } else { + iNdEx = entryPreIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.To[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LocalityLoadBalancerSetting_Failover) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Failover: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Failover: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.From = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.To = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipConfig(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 @@ -2065,80 +2823,91 @@ var ( func init() { proto.RegisterFile("mesh/v1alpha1/config.proto", fileDescriptorConfig) } var fileDescriptorConfig = []byte{ - // 1186 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xdf, 0x6e, 0xdb, 0xb6, - 0x17, 0x8e, 0x52, 0xb7, 0x49, 0xe9, 0x3f, 0x91, 0x99, 0xa6, 0x65, 0xd3, 0xdf, 0x2f, 0x73, 0x3d, - 0xb4, 0x35, 0x82, 0xc1, 0x46, 0x13, 0x0c, 0xe8, 0x76, 0xe7, 0x3a, 0x4e, 0xeb, 0xd4, 0x89, 0x0d, - 0x49, 0xe9, 0xd6, 0xdd, 0x10, 0x8a, 0x44, 0xdb, 0x5c, 0x64, 0x51, 0x10, 0xa9, 0xb6, 0x79, 0x8a, - 0x3d, 0xc9, 0xde, 0x63, 0x97, 0x7b, 0x84, 0xa1, 0x4f, 0x32, 0xf0, 0x50, 0xaa, 0x9d, 0xd6, 0x58, - 0x86, 0xdd, 0x99, 0xdf, 0xf9, 0xce, 0x39, 0xe4, 0x77, 0xfe, 0xc8, 0x68, 0x77, 0xce, 0xe4, 0xac, - 0xf3, 0xfe, 0xb9, 0x1f, 0x25, 0x33, 0xff, 0x79, 0x27, 0x10, 0xf1, 0x84, 0x4f, 0xdb, 0x49, 0x2a, - 0x94, 0xc0, 0xdb, 0x5c, 0x2a, 0x2e, 0xda, 0x9a, 0xd1, 0x2e, 0x18, 0xbb, 0x7b, 0x53, 0x21, 0xa6, - 0x11, 0xeb, 0x00, 0xe5, 0x22, 0x9b, 0x74, 0xc2, 0x2c, 0xf5, 0x15, 0x17, 0xb1, 0x71, 0xda, 0x7d, - 0x78, 0x3d, 0x60, 0x92, 0x8a, 0x8f, 0x57, 0xb9, 0x69, 0x3f, 0x66, 0xea, 0x83, 0x48, 0x2f, 0x79, - 0x3c, 0x2d, 0x08, 0x87, 0x9d, 0x90, 0x49, 0xc5, 0x63, 0x88, 0x40, 0xd3, 0x2c, 0x62, 0x86, 0xdb, - 0xfc, 0xcd, 0x46, 0xe8, 0x94, 0xc9, 0x59, 0x0f, 0x2e, 0x84, 0xbf, 0x43, 0x78, 0xce, 0x3f, 0xb2, - 0x94, 0x06, 0x33, 0x16, 0x5c, 0x52, 0xc9, 0xd2, 0xf7, 0x2c, 0x25, 0x56, 0xc3, 0x6a, 0xdd, 0x75, - 0x6c, 0xb0, 0xf4, 0xb4, 0xc1, 0x05, 0x1c, 0xb7, 0xd1, 0xb6, 0x61, 0xa7, 0x2c, 0x11, 0xa9, 0x2a, - 0xe8, 0xeb, 0x40, 0xaf, 0x83, 0xc9, 0x01, 0x4b, 0xce, 0x3f, 0x40, 0x3b, 0x21, 0x97, 0xfe, 0x45, - 0xc4, 0x68, 0x22, 0x22, 0x1e, 0x5c, 0x99, 0x34, 0x92, 0xdc, 0x6a, 0x58, 0xad, 0x4d, 0x67, 0x3b, - 0x37, 0x8e, 0xc1, 0x06, 0x89, 0x24, 0xde, 0x47, 0x75, 0x78, 0x1b, 0x8d, 0xb8, 0x54, 0x2c, 0xa6, - 0x3a, 0x1c, 0x29, 0x35, 0xac, 0xd6, 0x6d, 0x67, 0x0b, 0x0c, 0x43, 0xc0, 0xc7, 0x22, 0x55, 0xf8, - 0x29, 0x32, 0x10, 0x9d, 0x29, 0x95, 0x18, 0xe6, 0x6d, 0x60, 0x56, 0x01, 0x7e, 0xad, 0x54, 0x02, - 0xbc, 0x97, 0x68, 0x2b, 0x10, 0x71, 0xcc, 0x02, 0x45, 0x15, 0x9f, 0x33, 0x91, 0x29, 0x72, 0xa7, - 0x61, 0xb5, 0xca, 0x07, 0x0f, 0xdb, 0x46, 0xf5, 0x76, 0xa1, 0x7a, 0xfb, 0x28, 0x57, 0xdd, 0xa9, - 0xe5, 0x1e, 0x9e, 0x71, 0xc0, 0xdf, 0xa2, 0x2a, 0x8f, 0xa7, 0x29, 0x93, 0x92, 0x06, 0x91, 0x2f, - 0x25, 0xd9, 0x80, 0x57, 0x57, 0x72, 0xb0, 0xa7, 0x31, 0xfc, 0x0c, 0x6d, 0x15, 0x24, 0xad, 0x0d, - 0x0f, 0x18, 0xd9, 0x04, 0x5a, 0x2d, 0x87, 0x5d, 0x83, 0xe2, 0x39, 0x7a, 0xf0, 0x39, 0x9a, 0x88, - 0x55, 0x2a, 0xa2, 0x88, 0xa5, 0x74, 0x2e, 0x42, 0x46, 0xee, 0x36, 0xac, 0x56, 0xed, 0xe0, 0xfb, - 0xf6, 0x8a, 0x26, 0x69, 0x2f, 0x2a, 0xd7, 0x1e, 0xe4, 0x79, 0x3f, 0x7b, 0x9f, 0x8a, 0x90, 0x39, - 0x3b, 0x7c, 0x15, 0x8c, 0x47, 0xa8, 0xec, 0x67, 0x6a, 0x96, 0x57, 0x81, 0x20, 0x48, 0xb1, 0x7f, - 0x53, 0x8a, 0x6e, 0xa6, 0x66, 0xa6, 0x36, 0x2f, 0xd7, 0x89, 0xe5, 0x20, 0xff, 0xf3, 0x19, 0x0f, - 0x50, 0x3d, 0x0d, 0x25, 0x4d, 0xd9, 0x24, 0x65, 0x72, 0x46, 0x43, 0x16, 0xf9, 0x57, 0xa4, 0x7c, - 0x83, 0xa6, 0x10, 0x65, 0x2b, 0x0d, 0xa5, 0x63, 0xdc, 0x8e, 0xb4, 0x17, 0x7e, 0x82, 0x6a, 0x2c, - 0x86, 0x1e, 0x51, 0xa9, 0x1f, 0xf0, 0x78, 0x4a, 0x2a, 0xd0, 0x1d, 0x55, 0x83, 0x7a, 0x06, 0xd4, - 0xb5, 0xf6, 0x83, 0x40, 0x0b, 0x16, 0x89, 0x29, 0x9d, 0xf0, 0x88, 0x91, 0x2a, 0x48, 0x5b, 0x35, - 0xf0, 0x50, 0x4c, 0x8f, 0x79, 0xc4, 0xf0, 0x2b, 0x54, 0x0b, 0xd9, 0xc4, 0xcf, 0x22, 0x45, 0xcd, - 0xd0, 0x91, 0x1a, 0x5c, 0xab, 0xb1, 0xf2, 0xb5, 0x63, 0xdd, 0x27, 0xe6, 0xb9, 0x4e, 0x35, 0xf7, - 0xcb, 0x47, 0xe3, 0x19, 0xaa, 0x9a, 0x66, 0xf7, 0xc3, 0x50, 0x4b, 0x4a, 0x6c, 0x9d, 0x0e, 0xde, - 0x50, 0x01, 0x43, 0xd7, 0xe0, 0xba, 0x96, 0x22, 0x53, 0x17, 0x22, 0x8b, 0x43, 0xfd, 0x84, 0xc9, - 0x84, 0x07, 0x85, 0xd0, 0x75, 0x48, 0x7d, 0x63, 0x2d, 0x47, 0xb9, 0xbb, 0x67, 0xbc, 0x8d, 0xc6, - 0xce, 0x8e, 0x58, 0x05, 0xe3, 0x23, 0xf4, 0x4d, 0xae, 0x57, 0x10, 0x71, 0x16, 0x2b, 0x2a, 0x79, - 0x78, 0x7d, 0xbe, 0xc8, 0x36, 0x08, 0xf8, 0xc8, 0xd0, 0x7a, 0xc0, 0x72, 0x79, 0xb8, 0x3c, 0x67, - 0xb8, 0x81, 0x2a, 0x32, 0x94, 0x34, 0x0b, 0x25, 0x4d, 0x7c, 0x35, 0x23, 0xf7, 0x40, 0x4b, 0x24, - 0x43, 0x79, 0x1e, 0xca, 0xb1, 0xaf, 0x66, 0xba, 0xc4, 0xf2, 0xab, 0x12, 0xef, 0xfc, 0xab, 0x12, - 0xcb, 0x2f, 0x4a, 0xfc, 0x1a, 0xd5, 0x4c, 0x2d, 0xa8, 0x14, 0x59, 0x1a, 0x30, 0x49, 0xee, 0x37, - 0x6e, 0xb5, 0xca, 0x07, 0x8f, 0x57, 0x0a, 0x63, 0x44, 0x71, 0x81, 0xe9, 0x54, 0x83, 0xa5, 0x93, - 0xc4, 0x87, 0xe8, 0x7e, 0xfe, 0x78, 0x7d, 0x37, 0x25, 0x2e, 0x59, 0x4c, 0xe7, 0x22, 0x8b, 0x15, - 0x79, 0x60, 0x56, 0x8a, 0xb1, 0xba, 0xa1, 0xf4, 0xb4, 0xed, 0x54, 0x9b, 0xf4, 0x4a, 0x59, 0x6e, - 0x1d, 0x91, 0xce, 0x7d, 0x45, 0x08, 0x3c, 0x78, 0x6b, 0xd1, 0x3c, 0x00, 0xeb, 0x04, 0xcb, 0x52, - 0xd2, 0x89, 0xcf, 0x23, 0x2a, 0x12, 0x16, 0x93, 0x87, 0x26, 0x41, 0xb2, 0x10, 0xf1, 0xd8, 0xe7, - 0xd1, 0x28, 0x61, 0x31, 0x7e, 0x8c, 0x2a, 0x2a, 0xcd, 0xa4, 0xa2, 0xa1, 0x98, 0xfb, 0x3c, 0x26, - 0xbb, 0x10, 0xbb, 0x0c, 0xd8, 0x11, 0x40, 0xd8, 0x47, 0xdb, 0x4b, 0x77, 0x60, 0x71, 0x20, 0x42, - 0xdd, 0xea, 0x8f, 0x60, 0x12, 0x9f, 0xdf, 0x38, 0x89, 0xc5, 0x2d, 0xfb, 0xb9, 0xa3, 0x53, 0xf7, - 0xbf, 0x84, 0xb0, 0x40, 0x55, 0x15, 0x24, 0xf4, 0x92, 0xb1, 0xc4, 0x8f, 0xf8, 0x7b, 0x46, 0xfe, - 0x07, 0xc5, 0x3a, 0xc9, 0x83, 0x2f, 0x3e, 0x12, 0x45, 0x8a, 0x43, 0x2d, 0xb5, 0xde, 0x71, 0x5c, - 0xc4, 0x63, 0x21, 0x22, 0x97, 0x29, 0xc5, 0xe3, 0xa9, 0x6c, 0x7b, 0xbd, 0xf1, 0xe2, 0x77, 0x90, - 0xbc, 0x29, 0x22, 0x3a, 0x15, 0xb5, 0x74, 0xc2, 0xfb, 0x08, 0x43, 0x0f, 0x49, 0x46, 0x2f, 0x5f, - 0x48, 0x2a, 0x7d, 0xfa, 0xeb, 0x07, 0x45, 0xfe, 0x0f, 0x3a, 0xd5, 0x74, 0x27, 0x49, 0xf6, 0xe6, - 0x85, 0x74, 0xfd, 0x93, 0x0f, 0x0a, 0x8f, 0xd1, 0x13, 0xdd, 0xa7, 0x81, 0x9f, 0x52, 0x25, 0xa8, - 0x62, 0x11, 0x9b, 0x33, 0x95, 0x5e, 0x51, 0xc9, 0xa4, 0xd4, 0x9f, 0x28, 0xdd, 0xe1, 0x31, 0x57, - 0x57, 0x64, 0x0f, 0xdc, 0x1f, 0xe7, 0x64, 0x4f, 0x78, 0x05, 0xd5, 0x35, 0xcc, 0x6e, 0x4e, 0xdc, - 0xfd, 0xdd, 0x42, 0x3b, 0x2b, 0x07, 0x07, 0x9f, 0xa1, 0x12, 0x6c, 0x52, 0x0b, 0xc4, 0xfd, 0xf1, - 0x3f, 0x4d, 0x5f, 0x1b, 0xd6, 0x29, 0xc4, 0x69, 0x1e, 0xa1, 0x12, 0x6c, 0xd1, 0x3a, 0xaa, 0x3a, - 0xfd, 0x57, 0x03, 0xd7, 0x73, 0xde, 0xd1, 0xd1, 0xd9, 0xf0, 0x9d, 0xbd, 0x86, 0xab, 0xe8, 0x6e, - 0x77, 0x38, 0x1c, 0xfd, 0x44, 0xbb, 0x67, 0xef, 0x6c, 0xab, 0x59, 0xda, 0x5c, 0xb7, 0xd7, 0xf7, - 0xef, 0xbd, 0x1d, 0x38, 0xde, 0x79, 0x77, 0x48, 0xdd, 0xbe, 0xf3, 0x76, 0xd0, 0xeb, 0x03, 0xb9, - 0xf9, 0x03, 0xda, 0x59, 0xb9, 0xb3, 0xf1, 0x06, 0xba, 0x35, 0x3a, 0x3e, 0xb6, 0xd7, 0x70, 0x19, - 0x6d, 0x1c, 0xf5, 0x8f, 0xbb, 0xe7, 0x43, 0xcf, 0xb6, 0x30, 0x42, 0x77, 0x5c, 0xcf, 0x19, 0xf4, - 0x3c, 0x7b, 0xbd, 0xf9, 0x14, 0xa1, 0xc5, 0x2e, 0xc6, 0x9b, 0xa8, 0x74, 0x36, 0x3a, 0xeb, 0xdb, - 0x6b, 0xb8, 0x86, 0xd0, 0xe9, 0x39, 0x64, 0xf2, 0x86, 0xae, 0x6d, 0x35, 0x9f, 0xa1, 0xfa, 0x57, - 0x9d, 0xa2, 0xe9, 0x5e, 0xff, 0x67, 0xcf, 0x5e, 0xd3, 0xbf, 0x4e, 0xdc, 0xd1, 0x99, 0x6d, 0x9d, - 0x94, 0x36, 0xb7, 0x6c, 0xfb, 0xa4, 0xb4, 0x89, 0xed, 0xed, 0xa6, 0x44, 0x95, 0xe5, 0x89, 0xc3, - 0x04, 0x6d, 0x14, 0x1b, 0xcf, 0xfc, 0x0f, 0x28, 0x8e, 0x78, 0x80, 0x2a, 0x2a, 0xd2, 0x5f, 0x36, - 0xd3, 0x1a, 0xf0, 0xdd, 0x2f, 0x1f, 0x3c, 0xfd, 0x87, 0xfe, 0xf2, 0x86, 0x6e, 0xd1, 0x48, 0x4e, - 0x59, 0x45, 0xb2, 0x38, 0xbc, 0x6c, 0xfd, 0xf1, 0x69, 0xcf, 0xfa, 0xf3, 0xd3, 0x9e, 0xf5, 0xd7, - 0xa7, 0x3d, 0xeb, 0x97, 0x5d, 0x13, 0x81, 0x8b, 0x8e, 0x9f, 0xf0, 0xce, 0xb5, 0x3f, 0x3a, 0x17, - 0x77, 0x60, 0xc7, 0x1c, 0xfe, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x7a, 0x45, 0xbf, 0x51, 0x09, - 0x00, 0x00, + // 1367 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xef, 0x72, 0xd3, 0x48, + 0x12, 0x8f, 0x1c, 0x43, 0x4c, 0xfb, 0x4f, 0xe4, 0x09, 0x01, 0x61, 0xee, 0x82, 0xf1, 0x15, 0x90, + 0x4a, 0x5d, 0x39, 0x47, 0x52, 0x54, 0x01, 0xf7, 0x29, 0x71, 0x1c, 0x48, 0x70, 0xe2, 0x94, 0xac, + 0x70, 0xc7, 0xdd, 0x87, 0xd9, 0x89, 0x34, 0xb6, 0x67, 0x23, 0x6b, 0x54, 0x9a, 0x51, 0xc0, 0xef, + 0xb4, 0x5b, 0xb5, 0x8f, 0xb1, 0x1f, 0xf7, 0x11, 0xb6, 0x78, 0x83, 0x7d, 0x83, 0xad, 0x99, 0x91, + 0x12, 0x03, 0x2e, 0xb2, 0xec, 0x7e, 0xd3, 0xfc, 0xfa, 0xd7, 0xdd, 0xd3, 0xbf, 0xee, 0x19, 0x0d, + 0x34, 0x26, 0x54, 0x8c, 0x37, 0x2f, 0x9e, 0x92, 0x30, 0x1e, 0x93, 0xa7, 0x9b, 0x3e, 0x8f, 0x86, + 0x6c, 0xd4, 0x8e, 0x13, 0x2e, 0x39, 0x5a, 0x61, 0x42, 0x32, 0xde, 0x56, 0x8c, 0x76, 0xce, 0x68, + 0xac, 0x8d, 0x38, 0x1f, 0x85, 0x74, 0x53, 0x53, 0xce, 0xd2, 0xe1, 0x66, 0x90, 0x26, 0x44, 0x32, + 0x1e, 0x19, 0xa7, 0xc6, 0xbd, 0x4f, 0x03, 0xc6, 0x09, 0xff, 0x30, 0xcd, 0x4c, 0x1b, 0x11, 0x95, + 0xef, 0x79, 0x72, 0xce, 0xa2, 0x51, 0x4e, 0xd8, 0xde, 0x0c, 0xa8, 0x90, 0x2c, 0xd2, 0x11, 0x70, + 0x92, 0x86, 0xd4, 0x70, 0x5b, 0xbf, 0xd9, 0x00, 0x47, 0x54, 0x8c, 0x3b, 0x7a, 0x43, 0xe8, 0x9f, + 0x80, 0x26, 0xec, 0x03, 0x4d, 0xb0, 0x3f, 0xa6, 0xfe, 0x39, 0x16, 0x34, 0xb9, 0xa0, 0x89, 0x63, + 0x35, 0xad, 0xf5, 0x5b, 0xae, 0xad, 0x2d, 0x1d, 0x65, 0x18, 0x68, 0x1c, 0xb5, 0x61, 0xc5, 0xb0, + 0x13, 0x1a, 0xf3, 0x44, 0xe6, 0xf4, 0x82, 0xa6, 0xd7, 0xb5, 0xc9, 0xd5, 0x96, 0x8c, 0xbf, 0x05, + 0xab, 0x01, 0x13, 0xe4, 0x2c, 0xa4, 0x38, 0xe6, 0x21, 0xf3, 0xa7, 0x26, 0x8d, 0x70, 0x16, 0x9b, + 0xd6, 0x7a, 0xc9, 0x5d, 0xc9, 0x8c, 0x27, 0xda, 0xa6, 0x13, 0x09, 0xb4, 0x01, 0x75, 0x5d, 0x1b, + 0x0e, 0x99, 0x90, 0x34, 0xc2, 0x2a, 0x9c, 0x53, 0x6c, 0x5a, 0xeb, 0x37, 0xdc, 0x65, 0x6d, 0xe8, + 0x69, 0xfc, 0x84, 0x27, 0x12, 0x3d, 0x06, 0x03, 0xe1, 0xb1, 0x94, 0xb1, 0x61, 0xde, 0xd0, 0xcc, + 0xaa, 0x86, 0x5f, 0x4b, 0x19, 0x6b, 0xde, 0x2e, 0x2c, 0xfb, 0x3c, 0x8a, 0xa8, 0x2f, 0xb1, 0x64, + 0x13, 0xca, 0x53, 0xe9, 0xdc, 0x6c, 0x5a, 0xeb, 0xe5, 0xad, 0x7b, 0x6d, 0xa3, 0x7a, 0x3b, 0x57, + 0xbd, 0xbd, 0x97, 0xa9, 0xee, 0xd6, 0x32, 0x0f, 0xcf, 0x38, 0xa0, 0x7f, 0x40, 0x95, 0x45, 0xa3, + 0x84, 0x0a, 0x81, 0xfd, 0x90, 0x08, 0xe1, 0x2c, 0xe9, 0xaa, 0x2b, 0x19, 0xd8, 0x51, 0x18, 0x7a, + 0x02, 0xcb, 0x39, 0x49, 0x69, 0xc3, 0x7c, 0xea, 0x94, 0x34, 0xad, 0x96, 0xc1, 0x03, 0x83, 0xa2, + 0x09, 0xdc, 0xbd, 0x8c, 0xc6, 0x23, 0x99, 0xf0, 0x30, 0xa4, 0x09, 0x9e, 0xf0, 0x80, 0x3a, 0xb7, + 0x9a, 0xd6, 0x7a, 0x6d, 0xeb, 0x59, 0x7b, 0xce, 0x90, 0xb4, 0xaf, 0x3a, 0xd7, 0x3e, 0xc8, 0xf2, + 0x5e, 0x7a, 0x1f, 0xf1, 0x80, 0xba, 0xab, 0x6c, 0x1e, 0x8c, 0xfa, 0x50, 0x26, 0xa9, 0x1c, 0x67, + 0x5d, 0x70, 0x40, 0xa7, 0xd8, 0xb8, 0x2e, 0xc5, 0x4e, 0x2a, 0xc7, 0xa6, 0x37, 0xbb, 0x05, 0xc7, + 0x72, 0x81, 0x5c, 0xae, 0xd1, 0x01, 0xd4, 0x93, 0x40, 0xe0, 0x84, 0x0e, 0x13, 0x2a, 0xc6, 0x38, + 0xa0, 0x21, 0x99, 0x3a, 0xe5, 0x6b, 0x34, 0xd5, 0x51, 0x96, 0x93, 0x40, 0xb8, 0xc6, 0x6d, 0x4f, + 0x79, 0xa1, 0x47, 0x50, 0xa3, 0x91, 0x9e, 0x11, 0x99, 0x10, 0x9f, 0x45, 0x23, 0xa7, 0xa2, 0xa7, + 0xa3, 0x6a, 0x50, 0xcf, 0x80, 0xaa, 0xd7, 0xc4, 0xf7, 0x95, 0x60, 0x21, 0x1f, 0xe1, 0x21, 0x0b, + 0xa9, 0x53, 0xd5, 0xd2, 0x56, 0x0d, 0xdc, 0xe3, 0xa3, 0x7d, 0x16, 0x52, 0xf4, 0x0a, 0x6a, 0x01, + 0x1d, 0x92, 0x34, 0x94, 0xd8, 0x1c, 0x3a, 0xa7, 0xa6, 0xb7, 0xd5, 0x9c, 0x5b, 0xed, 0x89, 0x9a, + 0x13, 0x53, 0xae, 0x5b, 0xcd, 0xfc, 0xb2, 0xa3, 0xf1, 0x04, 0xaa, 0x66, 0xd8, 0x49, 0x10, 0x28, + 0x49, 0x1d, 0x5b, 0xa5, 0xd3, 0x35, 0x54, 0xb4, 0x61, 0xc7, 0xe0, 0xaa, 0x97, 0x3c, 0x95, 0x67, + 0x3c, 0x8d, 0x02, 0x55, 0xc2, 0x70, 0xc8, 0xfc, 0x5c, 0xe8, 0xba, 0x4e, 0x7d, 0x6d, 0x2f, 0xfb, + 0x99, 0xbb, 0x67, 0xbc, 0x8d, 0xc6, 0xee, 0x2a, 0x9f, 0x07, 0xa3, 0x3d, 0x78, 0x90, 0xe9, 0xe5, + 0x87, 0x8c, 0x46, 0x12, 0x0b, 0x16, 0x7c, 0x7a, 0xbe, 0x9c, 0x15, 0x2d, 0xe0, 0x7d, 0x43, 0xeb, + 0x68, 0xd6, 0x80, 0x05, 0xb3, 0xe7, 0x0c, 0x35, 0xa1, 0x22, 0x02, 0x81, 0xd3, 0x40, 0xe0, 0x98, + 0xc8, 0xb1, 0x73, 0x5b, 0x6b, 0x09, 0x22, 0x10, 0xa7, 0x81, 0x38, 0x21, 0x72, 0xac, 0x5a, 0x2c, + 0xbe, 0x68, 0xf1, 0xea, 0x1f, 0x6a, 0xb1, 0xf8, 0xac, 0xc5, 0xaf, 0xa1, 0x66, 0x7a, 0x81, 0x05, + 0x4f, 0x13, 0x9f, 0x0a, 0xe7, 0x4e, 0x73, 0x71, 0xbd, 0xbc, 0xf5, 0x70, 0xae, 0x30, 0x46, 0x94, + 0x81, 0x66, 0xba, 0x55, 0x7f, 0x66, 0x25, 0xd0, 0x36, 0xdc, 0xc9, 0x8a, 0x57, 0x7b, 0x93, 0xfc, + 0x9c, 0x46, 0x78, 0xc2, 0xd3, 0x48, 0x3a, 0x77, 0xcd, 0x95, 0x62, 0xac, 0x83, 0x40, 0x78, 0xca, + 0x76, 0xa4, 0x4c, 0xea, 0x4a, 0x99, 0x1d, 0x1d, 0x9e, 0x4c, 0x88, 0x74, 0x1c, 0x5d, 0xf0, 0xf2, + 0xd5, 0xf0, 0x68, 0x58, 0x25, 0x98, 0x95, 0x12, 0x0f, 0x09, 0x0b, 0x31, 0x8f, 0x69, 0xe4, 0xdc, + 0x33, 0x09, 0xe2, 0x2b, 0x11, 0xf7, 0x09, 0x0b, 0xfb, 0x31, 0x8d, 0xd0, 0x43, 0xa8, 0xc8, 0x24, + 0x15, 0x12, 0x07, 0x7c, 0x42, 0x58, 0xe4, 0x34, 0x74, 0xec, 0xb2, 0xc6, 0xf6, 0x34, 0x84, 0x08, + 0xac, 0xcc, 0xec, 0x81, 0x46, 0x3e, 0x0f, 0xd4, 0xa8, 0xdf, 0xd7, 0x27, 0xf1, 0xe9, 0xb5, 0x27, + 0x31, 0xdf, 0x65, 0x37, 0x73, 0x74, 0xeb, 0xe4, 0x73, 0x08, 0x71, 0xa8, 0x4a, 0x3f, 0xc6, 0xe7, + 0x94, 0xc6, 0x24, 0x64, 0x17, 0xd4, 0xf9, 0x9b, 0x6e, 0xd6, 0x61, 0x16, 0xfc, 0xea, 0x27, 0x91, + 0xa7, 0xd8, 0x56, 0x52, 0xab, 0x3b, 0x8e, 0xf1, 0xe8, 0x84, 0xf3, 0x70, 0x40, 0xa5, 0x64, 0xd1, + 0x48, 0xb4, 0xbd, 0xce, 0xc9, 0xd5, 0xb7, 0x1f, 0xbf, 0xc9, 0x23, 0xba, 0x15, 0x39, 0xb3, 0x42, + 0x1b, 0x80, 0xf4, 0x0c, 0x09, 0x8a, 0xcf, 0x9f, 0x0b, 0x2c, 0x08, 0xfe, 0xfe, 0xbd, 0x74, 0xfe, + 0xae, 0x75, 0xaa, 0xa9, 0x49, 0x12, 0xf4, 0xcd, 0x73, 0x31, 0x20, 0x87, 0xef, 0x25, 0x3a, 0x81, + 0x47, 0x6a, 0x4e, 0x7d, 0x92, 0x60, 0xc9, 0xb1, 0xa4, 0x21, 0x9d, 0x50, 0x99, 0x4c, 0xb1, 0xa0, + 0x42, 0xa8, 0x5f, 0x94, 0x9a, 0xf0, 0x88, 0xc9, 0xa9, 0xb3, 0xa6, 0xdd, 0x1f, 0x66, 0x64, 0x8f, + 0x7b, 0x39, 0x75, 0x60, 0x98, 0x3b, 0x19, 0x11, 0x7d, 0x07, 0x2b, 0x21, 0xf7, 0x49, 0xc8, 0xe4, + 0x14, 0x87, 0x67, 0x58, 0x98, 0x0d, 0x3b, 0x0f, 0x74, 0xd1, 0xff, 0x9a, 0xab, 0x68, 0x2f, 0xe3, + 0xf7, 0x38, 0x09, 0x76, 0x49, 0x48, 0x22, 0x9f, 0x26, 0x59, 0xa1, 0x6e, 0x3d, 0x0f, 0xd6, 0x3b, + 0xcb, 0xa0, 0xc6, 0x8f, 0x16, 0xac, 0xce, 0x3d, 0x9a, 0xe8, 0x18, 0x8a, 0xfa, 0xae, 0xb6, 0x74, + 0xfb, 0x5e, 0xfe, 0xa9, 0xf3, 0xdd, 0xd6, 0x17, 0xb6, 0x8e, 0xd3, 0xda, 0x83, 0xa2, 0xbe, 0xa7, + 0xeb, 0x50, 0x75, 0xbb, 0xaf, 0x0e, 0x06, 0x9e, 0xfb, 0x0e, 0xf7, 0x8f, 0x7b, 0xef, 0xec, 0x05, + 0x54, 0x85, 0x5b, 0x3b, 0xbd, 0x5e, 0xff, 0x3f, 0x78, 0xe7, 0xf8, 0x9d, 0x6d, 0xb5, 0x8a, 0xa5, + 0x82, 0x5d, 0xd8, 0xb8, 0xfd, 0xf6, 0xc0, 0xf5, 0x4e, 0x77, 0x7a, 0x78, 0xd0, 0x75, 0xdf, 0x1e, + 0x74, 0xba, 0x9a, 0xdc, 0x7a, 0x01, 0xab, 0x73, 0xff, 0x0a, 0x68, 0x09, 0x16, 0xfb, 0xfb, 0xfb, + 0xf6, 0x02, 0x2a, 0xc3, 0xd2, 0x5e, 0x77, 0x7f, 0xe7, 0xb4, 0xe7, 0xd9, 0x16, 0x02, 0xb8, 0x39, + 0xf0, 0xdc, 0x83, 0x8e, 0x67, 0x17, 0x5a, 0x8f, 0x01, 0xae, 0x6e, 0x7b, 0x54, 0x82, 0xe2, 0x71, + 0xff, 0xb8, 0x6b, 0x2f, 0xa0, 0x1a, 0xc0, 0xd1, 0xa9, 0xce, 0xe4, 0xf5, 0x06, 0xb6, 0xd5, 0x7a, + 0x02, 0xf5, 0x2f, 0x66, 0x51, 0xd1, 0xbd, 0xee, 0x7f, 0x3d, 0x7b, 0x41, 0x7d, 0x1d, 0x0e, 0xfa, + 0xc7, 0xb6, 0x75, 0x58, 0x2c, 0x2d, 0xdb, 0xf6, 0x61, 0xb1, 0x84, 0xec, 0x95, 0x96, 0x80, 0xca, + 0xec, 0x99, 0x46, 0x0e, 0x2c, 0xe5, 0x77, 0xaa, 0x79, 0x69, 0xe4, 0x4b, 0x74, 0x00, 0x15, 0x19, + 0x8a, 0xbc, 0x97, 0x42, 0xbf, 0x2c, 0xca, 0x5b, 0x8f, 0xbf, 0x32, 0xc1, 0x5e, 0x6f, 0x90, 0x8f, + 0xaa, 0x5b, 0x96, 0xa1, 0xc8, 0x17, 0xad, 0x9f, 0x16, 0xe1, 0xfe, 0x57, 0xfa, 0x8d, 0xfe, 0x0f, + 0x10, 0x30, 0x21, 0x13, 0x76, 0x96, 0x4a, 0xd5, 0x48, 0x75, 0x1f, 0xfd, 0xfb, 0x5b, 0xa7, 0xa6, + 0xbd, 0x77, 0x19, 0xc2, 0x9d, 0x09, 0x87, 0x4e, 0xa1, 0xa4, 0x2e, 0x0e, 0x6e, 0x5e, 0x47, 0x2a, + 0xf4, 0x8b, 0x6f, 0x0e, 0xbd, 0x9f, 0x05, 0x70, 0x2f, 0x43, 0x35, 0x7e, 0xb0, 0x00, 0xae, 0x32, + 0x22, 0x04, 0xc5, 0x61, 0xc2, 0x27, 0x99, 0x88, 0xfa, 0x1b, 0x0d, 0xa0, 0x20, 0x79, 0x96, 0xb3, + 0xf3, 0x17, 0xca, 0x69, 0x7b, 0xbc, 0x1b, 0xc9, 0x64, 0xea, 0x16, 0x24, 0x6f, 0x3c, 0x83, 0xa5, + 0x6c, 0x89, 0x6c, 0x58, 0x3c, 0xa7, 0xd3, 0x2c, 0xa5, 0xfa, 0x44, 0xb7, 0xe1, 0xc6, 0x05, 0x09, + 0x53, 0xaa, 0x9b, 0x55, 0x75, 0xcd, 0xe2, 0x65, 0xe1, 0xb9, 0xd5, 0x68, 0x43, 0x29, 0x2f, 0x62, + 0xee, 0x5e, 0x6b, 0xd9, 0x5e, 0x15, 0x52, 0x90, 0x7c, 0x77, 0xfd, 0xe7, 0x8f, 0x6b, 0xd6, 0x2f, + 0x1f, 0xd7, 0xac, 0x5f, 0x3f, 0xae, 0x59, 0xff, 0x6b, 0x98, 0xcd, 0x33, 0xbe, 0x49, 0x62, 0xb6, + 0xf9, 0xc9, 0xeb, 0xf7, 0xec, 0xa6, 0xfe, 0xf1, 0x6c, 0xff, 0x1e, 0x00, 0x00, 0xff, 0xff, 0x31, + 0xb4, 0x42, 0x7f, 0x66, 0x0b, 0x00, 0x00, } diff --git a/vendor/istio.io/api/mesh/v1alpha1/config.proto b/vendor/istio.io/api/mesh/v1alpha1/config.proto index 80e9590ffb10..ba2c909cc395 100644 --- a/vendor/istio.io/api/mesh/v1alpha1/config.proto +++ b/vendor/istio.io/api/mesh/v1alpha1/config.proto @@ -195,6 +195,9 @@ message MeshConfig { // can be configured for a single control plane. repeated ConfigSource config_sources = 22; + // Locality based load balancing distribution or failover settings. + LocalityLoadBalancerSetting locality_lb_setting = 31; + // $hide_from_docs // This flag is used by secret discovery service(SDS). // If set to true(prerequisite: https://kubernetes.io/docs/concepts/storage/volumes/#projected), Istio will inject volumes mount @@ -218,7 +221,7 @@ message MeshConfig { string trust_domain = 26; // $hide_from_docs - // Next available field number: 31 + // Next available field number: 32 } // ConfigSource describes information about a configuration store inside a @@ -235,3 +238,70 @@ message ConfigSource { // mode as ISTIO_MUTUAL. istio.networking.v1alpha3.TLSSettings tls_settings = 2; } + + +// The following example sets up locality weight for mesh wide service +// Assume a service resides in "region1/zone1/*" and "region1/zone2/*", +// and originating clusters also reside in "region1/zone1/*" and "region1/zone2/*". +// This example specifies when clusters from "region1/zone1/*" accessing the service, 80% of the traffic +// is shipped to "region1/zone1/*" ratings service endpoints, and the rest 20% to "region1/zone2/*". +// +// ```yaml +// distribute: +// - from: region1/zone1/* +// to: +// "region1/zone1/*": 80 +// "region1/zone2/*": 20 +// - from: region1/zone2/* +// to: +// "region1/zone1/*": 20 +// "region1/zone2/*": 80 +// ``` +// +// The following example sets up locality failover policy for the ratings service +// Assume a service resides in "region1" "region2" and "region3", +// This example specifies when clusters from "region1/zone1" accessing the service, +// if endpoints in "region1" becomes unhealthy, traffic will begin to trickle to "region2". +// +// ```yaml +// failover: +// - from: region1 +// to: region2 +// ``` +// Locality load balancing settings. +message LocalityLoadBalancerSetting{ + // Originating -> upstream cluster locality weight set, support wildcard matching '*' + // '*' matches all localities + // 'region1/*' matches all zones in region1 + message Distribute{ + // Originating locality, '/' separated, e.g. 'region/zone/sub_zone'. + string from = 1; + + // Upstream locality to loadbalancing weight map. The sum of all weights should be == 100. + // Should assign load balancing weight for all localities, otherwise the traffic are not routed + // following the percentage of weight. + map to = 2; + }; + + // Specify the traffic failover policy. + // As zone and sub_zone failover is supported by default, only region can be specified here. + message Failover{ + // Originating region. + string from = 1; + + // Destination region the traffic will fail over to when endpoints in local region becomes unhealthy. + string to = 2; + }; + + // Optional: only distribute or failover can be set. + // Explicitly specify loadbalancing weight across different zones and geographical locations. + // Refer to [Locality weighted load balancing](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/load_balancing.html?highlight=load_balancing_weight#locality-weighted-load-balancing) + // If empty, the locality weight is set according to the endpoints number within it. + repeated Distribute distribute = 1; + + // Optional: only failover or distribute can be set. + // Explicitly specify the region traffic will land on when endpoints in local region becomes unhealthy. + // Should be used together with OutlierDetection to detect unhealthy endpoints. + // Note: if no OutlierDetection specified, this will not take effect. + repeated Failover failover = 2; +} diff --git a/vendor/istio.io/api/mesh/v1alpha1/istio.mesh.v1alpha1.pb.html b/vendor/istio.io/api/mesh/v1alpha1/istio.mesh.v1alpha1.pb.html index a581ca038b7e..b2d788735e79 100644 --- a/vendor/istio.io/api/mesh/v1alpha1/istio.mesh.v1alpha1.pb.html +++ b/vendor/istio.io/api/mesh/v1alpha1/istio.mesh.v1alpha1.pb.html @@ -4,7 +4,7 @@ generator: protoc-gen-docs aliases: - /docs/reference/config/service-mesh.html -number_of_entries: 16 +number_of_entries: 19 ---

AuthenticationPolicy

@@ -79,6 +79,140 @@

ConfigSource

uses Istio MTLS and shares the root CA with Pilot, specify the TLS mode as ISTIOMUTUAL.

+ + + + +
+

LocalityLoadBalancerSetting

+
+

The following example sets up locality weight for mesh wide service +Assume a service resides in “region1/zone1/” and “region1/zone2/”, +and originating clusters also reside in “region1/zone1/” and “region1/zone2/”. +This example specifies when clusters from “region1/zone1/” accessing the service, 80% of the traffic +is shipped to “region1/zone1/” ratings service endpoints, and the rest 20% to “region1/zone2/*”.

+ +
  distribute:
+    - from: region1/zone1/*
+      to:
+        "region1/zone1/*": 80
+        "region1/zone2/*": 20
+    - from: region1/zone2/*
+      to:
+        "region1/zone1/*": 20
+        "region1/zone2/*": 80
+
+ +

The following example sets up locality failover policy for the ratings service +Assume a service resides in “region1” “region2” and “region3”, +This example specifies when clusters from “region1/zone1” accessing the service, +if endpoints in “region1” becomes unhealthy, traffic will begin to trickle to “region2”.

+ +
 failover:
+   - from: region1
+     to: region2
+
+ +

Locality load balancing settings.

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
distributeLocalityLoadBalancerSetting.Distribute[] +

Optional: only distribute or failover can be set. +Explicitly specify loadbalancing weight across different zones and geographical locations. +Refer to Locality weighted load balancing +If empty, the locality weight is set according to the endpoints number within it.

+ +
failoverLocalityLoadBalancerSetting.Failover[] +

Optional: only failover or distribute can be set. +Explicitly specify the region traffic will land on when endpoints in local region becomes unhealthy. +Should be used together with OutlierDetection to detect unhealthy endpoints. +Note: if no OutlierDetection specified, this will not take effect.

+ +
+
+

LocalityLoadBalancerSetting.Distribute

+
+

Originating -> upstream cluster locality weight set, support wildcard matching ‘’ +‘’ matches all localities +‘region1/*’ matches all zones in region1

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
fromstring +

Originating locality, ‘/’ separated, e.g. ‘region/zone/sub_zone’.

+ +
tomap<string, uint32> +

Upstream locality to loadbalancing weight map. The sum of all weights should be == 100. +Should assign load balancing weight for all localities, otherwise the traffic are not routed +following the percentage of weight.

+ +
+
+

LocalityLoadBalancerSetting.Failover

+
+

Specify the traffic failover policy. +As zone and sub_zone failover is supported by default, only region can be specified here.

+ + + + + + + + + + + + + + + + + + + @@ -304,6 +438,14 @@

MeshConfig

rules, and other Istio configuration artifacts. Multiple data sources can be configured for a single control plane.

+ + + + + + diff --git a/vendor/istio.io/api/mixer/v1/istio.mixer.v1.pb.html b/vendor/istio.io/api/mixer/v1/istio.mixer.v1.pb.html index 442d9ccaceef..43ed3b88a861 100644 --- a/vendor/istio.io/api/mixer/v1/istio.mixer.v1.pb.html +++ b/vendor/istio.io/api/mixer/v1/istio.mixer.v1.pb.html @@ -800,7 +800,7 @@

ReportResponse

RouteDirective

Expresses the routing manipulation actions to be performed on behalf of -Mixer in response to a successful precondition check.

+Mixer in response to a precondition check.

FieldTypeDescription
fromstring +

Originating region.

+ +
tostring +

Destination region the traffic will fail over to when endpoints in local region becomes unhealthy.

+
localityLbSettingLocalityLoadBalancerSetting +

Locality based load balancing distribution or failover settings.

+
diff --git a/vendor/istio.io/api/mixer/v1/mixer.pb.go b/vendor/istio.io/api/mixer/v1/mixer.pb.go index 0f6c334879a6..915e3b31e2ac 100644 --- a/vendor/istio.io/api/mixer/v1/mixer.pb.go +++ b/vendor/istio.io/api/mixer/v1/mixer.pb.go @@ -230,7 +230,7 @@ func (*HeaderOperation) ProtoMessage() {} func (*HeaderOperation) Descriptor() ([]byte, []int) { return fileDescriptorMixer, []int{3} } // Expresses the routing manipulation actions to be performed on behalf of -// Mixer in response to a successful precondition check. +// Mixer in response to a precondition check. type RouteDirective struct { // Operations on the request headers. RequestHeaderOperations []HeaderOperation `protobuf:"bytes,1,rep,name=request_header_operations,json=requestHeaderOperations" json:"request_header_operations"` diff --git a/vendor/istio.io/api/mixer/v1/mixer.proto b/vendor/istio.io/api/mixer/v1/mixer.proto index 8d95d91ed06b..461d3e2a351d 100644 --- a/vendor/istio.io/api/mixer/v1/mixer.proto +++ b/vendor/istio.io/api/mixer/v1/mixer.proto @@ -202,7 +202,7 @@ message HeaderOperation { } // Expresses the routing manipulation actions to be performed on behalf of -// Mixer in response to a successful precondition check. +// Mixer in response to a precondition check. message RouteDirective { // Operations on the request headers. repeated HeaderOperation request_header_operations = 1 [(gogoproto.nullable) = false]; diff --git a/vendor/istio.io/api/networking/v1alpha3/destination_rule.pb.go b/vendor/istio.io/api/networking/v1alpha3/destination_rule.pb.go index 7788ca4ef0be..d857346f74a0 100644 --- a/vendor/istio.io/api/networking/v1alpha3/destination_rule.pb.go +++ b/vendor/istio.io/api/networking/v1alpha3/destination_rule.pb.go @@ -526,31 +526,6 @@ func (m *Subset) GetTrafficPolicy() *TrafficPolicy { // ttl: 0s // ``` // -// The following example sets up locality weight for the ratings service -// Assume ratings service resides in "region1/zone1/*" and "region1/zone2/*", -// and originating clusters also reside in "region1/zone1/*" and "region1/zone2/*". -// This example specifies when clusters from "region1/zone1/*" accessing ratings service, 80% of the traffic -// is shipped to "region1/zone1/*" ratings service endpoints, and the rest 20% to "region1/zone2/*". -// -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// localityWeightSettings: -// - from: region1/zone1/* -// to: -// "region1/zone1/*": 80 -// "region1/zone2/*": 20 -// - from: region1/zone2/* -// to: -// "region1/zone1/*": 20 -// "region1/zone2/*": 80 -// ``` type LoadBalancerSettings struct { // Upstream load balancing policy. // @@ -558,11 +533,6 @@ type LoadBalancerSettings struct { // *LoadBalancerSettings_Simple // *LoadBalancerSettings_ConsistentHash LbPolicy isLoadBalancerSettings_LbPolicy `protobuf_oneof:"lb_policy"` - // Explicitly assign loadbalancing weight across different zones and geographical locations. - // Refer to [Locality weighted load balancing](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/load_balancing.html?highlight=load_balancing_weight#locality-weighted-load-balancing) - // If empty, the locality weight is set according to the endpoints number within it. - // If duplicated settings are present, then the first one will take effect. - LocalityWeightSettings []*LoadBalancerSettings_LocalityWeightSetting `protobuf:"bytes,3,rep,name=locality_weight_settings,json=localityWeightSettings" json:"locality_weight_settings,omitempty"` } func (m *LoadBalancerSettings) Reset() { *m = LoadBalancerSettings{} } @@ -609,13 +579,6 @@ func (m *LoadBalancerSettings) GetConsistentHash() *LoadBalancerSettings_Consist return nil } -func (m *LoadBalancerSettings) GetLocalityWeightSettings() []*LoadBalancerSettings_LocalityWeightSetting { - if m != nil { - return m.LocalityWeightSettings - } - return nil -} - // XXX_OneofFuncs is for the internal use of the proto package. func (*LoadBalancerSettings) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _LoadBalancerSettings_OneofMarshaler, _LoadBalancerSettings_OneofUnmarshaler, _LoadBalancerSettings_OneofSizer, []interface{}{ @@ -904,43 +867,6 @@ func (m *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) GetTtl() *time.Durati return nil } -// Originating -> upstream cluster locality weight set, support wildcard matching '*' -// '*' matches all localities -// 'region1/*' matches all zones in region1 -type LoadBalancerSettings_LocalityWeightSetting struct { - // Originating locality, '/' separated, e.g. 'region/zone/sub_zone'. - From string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` - // Upstream locality to loadbalancing weight map. The sum of all weights should be == 100. - // Should assign loadbalancing weight for all localities, otherwise the traffic are not routed - // following the percentage of weight. - To map[string]uint32 `protobuf:"bytes,2,rep,name=to" json:"to,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` -} - -func (m *LoadBalancerSettings_LocalityWeightSetting) Reset() { - *m = LoadBalancerSettings_LocalityWeightSetting{} -} -func (m *LoadBalancerSettings_LocalityWeightSetting) String() string { - return proto.CompactTextString(m) -} -func (*LoadBalancerSettings_LocalityWeightSetting) ProtoMessage() {} -func (*LoadBalancerSettings_LocalityWeightSetting) Descriptor() ([]byte, []int) { - return fileDescriptorDestinationRule, []int{3, 1} -} - -func (m *LoadBalancerSettings_LocalityWeightSetting) GetFrom() string { - if m != nil { - return m.From - } - return "" -} - -func (m *LoadBalancerSettings_LocalityWeightSetting) GetTo() map[string]uint32 { - if m != nil { - return m.To - } - return nil -} - // Connection pool settings for an upstream host. The settings apply to // each individual host in the upstream service. See Envoy's [circuit // breaker](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/circuit_breaking) @@ -1362,7 +1288,6 @@ func init() { proto.RegisterType((*LoadBalancerSettings)(nil), "istio.networking.v1alpha3.LoadBalancerSettings") proto.RegisterType((*LoadBalancerSettings_ConsistentHashLB)(nil), "istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB") proto.RegisterType((*LoadBalancerSettings_ConsistentHashLB_HTTPCookie)(nil), "istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.HTTPCookie") - proto.RegisterType((*LoadBalancerSettings_LocalityWeightSetting)(nil), "istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting") proto.RegisterType((*ConnectionPoolSettings)(nil), "istio.networking.v1alpha3.ConnectionPoolSettings") proto.RegisterType((*ConnectionPoolSettings_TCPSettings)(nil), "istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings") proto.RegisterType((*ConnectionPoolSettings_TCPSettings_TcpKeepalive)(nil), "istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive") @@ -1634,18 +1559,6 @@ func (m *LoadBalancerSettings) MarshalTo(dAtA []byte) (int, error) { } i += nn12 } - if len(m.LocalityWeightSettings) > 0 { - for _, msg := range m.LocalityWeightSettings { - dAtA[i] = 0x1a - i++ - i = encodeVarintDestinationRule(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } return i, nil } @@ -1774,46 +1687,6 @@ func (m *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) MarshalTo(dAtA []byte return i, nil } -func (m *LoadBalancerSettings_LocalityWeightSetting) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LoadBalancerSettings_LocalityWeightSetting) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.From) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintDestinationRule(dAtA, i, uint64(len(m.From))) - i += copy(dAtA[i:], m.From) - } - if len(m.To) > 0 { - for k, _ := range m.To { - dAtA[i] = 0x12 - i++ - v := m.To[k] - mapSize := 1 + len(k) + sovDestinationRule(uint64(len(k))) + 1 + sovDestinationRule(uint64(v)) - i = encodeVarintDestinationRule(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintDestinationRule(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x10 - i++ - i = encodeVarintDestinationRule(dAtA, i, uint64(v)) - } - } - return i, nil -} - func (m *ConnectionPoolSettings) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2205,12 +2078,6 @@ func (m *LoadBalancerSettings) Size() (n int) { if m.LbPolicy != nil { n += m.LbPolicy.Size() } - if len(m.LocalityWeightSettings) > 0 { - for _, e := range m.LocalityWeightSettings { - l = e.Size() - n += 1 + l + sovDestinationRule(uint64(l)) - } - } return n } @@ -2281,24 +2148,6 @@ func (m *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) Size() (n int) { return n } -func (m *LoadBalancerSettings_LocalityWeightSetting) Size() (n int) { - var l int - _ = l - l = len(m.From) - if l > 0 { - n += 1 + l + sovDestinationRule(uint64(l)) - } - if len(m.To) > 0 { - for k, v := range m.To { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovDestinationRule(uint64(len(k))) + 1 + sovDestinationRule(uint64(v)) - n += mapEntrySize + 1 + sovDestinationRule(uint64(mapEntrySize)) - } - } - return n -} - func (m *ConnectionPoolSettings) Size() (n int) { var l int _ = l @@ -3333,37 +3182,6 @@ func (m *LoadBalancerSettings) Unmarshal(dAtA []byte) error { } m.LbPolicy = &LoadBalancerSettings_ConsistentHash{v} iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LocalityWeightSettings", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDestinationRule - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDestinationRule - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.LocalityWeightSettings = append(m.LocalityWeightSettings, &LoadBalancerSettings_LocalityWeightSetting{}) - if err := m.LocalityWeightSettings[len(m.LocalityWeightSettings)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipDestinationRule(dAtA[iNdEx:]) @@ -3677,192 +3495,6 @@ func (m *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) Unmarshal(dAtA []byte } return nil } -func (m *LoadBalancerSettings_LocalityWeightSetting) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDestinationRule - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LocalityWeightSetting: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LocalityWeightSetting: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDestinationRule - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDestinationRule - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.From = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDestinationRule - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDestinationRule - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.To == nil { - m.To = make(map[string]uint32) - } - var mapkey string - var mapvalue uint32 - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDestinationRule - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDestinationRule - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthDestinationRule - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDestinationRule - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapvalue |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - } else { - iNdEx = entryPreIndex - skippy, err := skipDestinationRule(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthDestinationRule - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.To[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDestinationRule(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthDestinationRule - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *ConnectionPoolSettings) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4872,100 +4504,94 @@ func init() { } var fileDescriptorDestinationRule = []byte{ - // 1506 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcf, 0x6f, 0x1b, 0x37, - 0x16, 0xb6, 0x7e, 0x58, 0xb6, 0x9f, 0x6c, 0x59, 0xe6, 0x7a, 0xb3, 0x8a, 0x16, 0x70, 0x1c, 0x61, - 0xb1, 0xf1, 0x66, 0x37, 0xa3, 0xb5, 0x83, 0x00, 0x69, 0x82, 0x14, 0xb1, 0x6c, 0x21, 0x72, 0x23, - 0x5b, 0x02, 0x25, 0xa3, 0x45, 0x80, 0x62, 0x40, 0x8d, 0x68, 0x89, 0xf1, 0x68, 0x38, 0x1d, 0x72, - 0x14, 0x3b, 0x97, 0xfe, 0x03, 0x3d, 0x07, 0xbd, 0xf6, 0x4f, 0xe9, 0xad, 0xe8, 0xa9, 0xd7, 0xf6, - 0xd2, 0x22, 0xd7, 0x1e, 0x7a, 0xea, 0xa5, 0x87, 0xa2, 0x20, 0x87, 0x23, 0xc9, 0x89, 0x62, 0xc7, - 0x48, 0x72, 0xe3, 0xf0, 0x7d, 0xdf, 0x23, 0xf9, 0xde, 0xc7, 0xc7, 0x37, 0x70, 0xd3, 0xa3, 0xf2, - 0x19, 0x0f, 0x8e, 0x99, 0xd7, 0x2b, 0x0f, 0x37, 0x89, 0xeb, 0xf7, 0xc9, 0xed, 0x72, 0x97, 0x0a, - 0xc9, 0x3c, 0x22, 0x19, 0xf7, 0xec, 0x20, 0x74, 0xa9, 0xe5, 0x07, 0x5c, 0x72, 0x74, 0x95, 0x09, - 0xc9, 0xb8, 0x35, 0x66, 0x58, 0x31, 0xa3, 0xb8, 0xd6, 0xe3, 0xbc, 0xe7, 0xd2, 0xb2, 0x06, 0x76, - 0xc2, 0xa3, 0x72, 0x37, 0x0c, 0x34, 0x3f, 0xa2, 0x16, 0xff, 0x33, 0x6d, 0x99, 0x21, 0x0b, 0x64, - 0x48, 0x5c, 0x5b, 0xd0, 0x60, 0xc8, 0x1c, 0xb3, 0x4a, 0xf1, 0xfa, 0x34, 0xa8, 0x60, 0x5d, 0xea, - 0x90, 0xc0, 0x40, 0x56, 0x7b, 0xbc, 0xc7, 0xf5, 0xb0, 0xac, 0x46, 0xd1, 0x6c, 0xe9, 0xcf, 0x04, - 0x2c, 0xef, 0x8e, 0x77, 0x8e, 0x43, 0x97, 0x22, 0x04, 0xe9, 0x3e, 0x17, 0xb2, 0x90, 0x58, 0x4f, - 0x6c, 0x2c, 0x60, 0x3d, 0x46, 0x0d, 0xc8, 0xc9, 0x80, 0x1c, 0x1d, 0x31, 0xc7, 0xf6, 0xb9, 0xcb, - 0x9c, 0xd3, 0x42, 0x72, 0x3d, 0xb1, 0x91, 0xdd, 0xda, 0xb0, 0xde, 0x78, 0x3e, 0xab, 0x1d, 0x11, - 0x9a, 0x1a, 0x8f, 0x97, 0xe4, 0xe4, 0x27, 0xba, 0x0f, 0x73, 0x22, 0xec, 0x08, 0x2a, 0x45, 0x21, - 0xb5, 0x9e, 0xda, 0xc8, 0x6e, 0x5d, 0x3f, 0xc7, 0x53, 0x4b, 0x23, 0x71, 0xcc, 0x40, 0x7b, 0xb0, - 0xe8, 0x70, 0xef, 0x88, 0xf5, 0x6c, 0xe1, 0x70, 0x9f, 0x16, 0xd2, 0xeb, 0x89, 0x8d, 0xdc, 0xd6, - 0xbf, 0xcf, 0xf1, 0xb0, 0xa3, 0xe1, 0x2d, 0x85, 0xc6, 0x59, 0x67, 0xfc, 0x51, 0xfa, 0x29, 0x03, - 0x4b, 0x67, 0x36, 0x8a, 0xda, 0xb0, 0xe4, 0x72, 0xd2, 0xb5, 0x3b, 0xc4, 0x25, 0x9e, 0x43, 0x03, - 0x1d, 0x87, 0xec, 0x56, 0xf9, 0x1c, 0xef, 0x75, 0x4e, 0xba, 0x15, 0x03, 0x6f, 0x51, 0x29, 0x99, - 0xd7, 0x13, 0x78, 0xd1, 0x9d, 0x98, 0x45, 0x4f, 0x60, 0xd9, 0xe1, 0x9e, 0x47, 0x1d, 0x2d, 0x10, - 0x9f, 0x73, 0xd7, 0x44, 0x70, 0xf3, 0xfc, 0x5d, 0x1b, 0x46, 0x93, 0x73, 0x77, 0xe4, 0x39, 0xe7, - 0x9c, 0x99, 0x47, 0x9f, 0xc1, 0x0a, 0x0f, 0xa5, 0xcb, 0x68, 0x60, 0x77, 0xa9, 0x8c, 0x0c, 0x85, - 0x94, 0xf6, 0xfe, 0xdf, 0x73, 0xbc, 0x37, 0x22, 0xce, 0x6e, 0x4c, 0xc1, 0x79, 0xfe, 0xca, 0x0c, - 0xba, 0x0b, 0x29, 0xe9, 0x0a, 0x1d, 0xdf, 0xec, 0xb9, 0xf1, 0x6d, 0xd7, 0x5b, 0xa3, 0xed, 0x29, - 0x0a, 0x7a, 0x0a, 0x7f, 0xf3, 0x79, 0x20, 0x6d, 0x97, 0x0e, 0xa9, 0x52, 0x6b, 0x64, 0x2b, 0xcc, - 0xea, 0x5c, 0xdf, 0x7b, 0x5b, 0xd5, 0x58, 0x4d, 0x1e, 0xc8, 0xb3, 0x3a, 0x5a, 0x51, 0x6e, 0xeb, - 0xca, 0x6b, 0xbc, 0x60, 0xf1, 0x45, 0x0a, 0x56, 0x5e, 0x03, 0xa2, 0xfb, 0x90, 0x56, 0x50, 0x93, - 0xbe, 0x1b, 0xe7, 0x2c, 0xa9, 0xb8, 0x2d, 0xea, 0x52, 0x47, 0xf2, 0x00, 0x6b, 0xd2, 0xeb, 0x22, - 0x48, 0x7e, 0x20, 0x11, 0xa4, 0x3e, 0xa8, 0x08, 0xd2, 0xef, 0x51, 0x04, 0xb3, 0x97, 0x16, 0x41, - 0xe9, 0xb7, 0x04, 0x64, 0xa2, 0xbb, 0xab, 0x8a, 0x8a, 0x47, 0x06, 0x34, 0x2e, 0x2a, 0x6a, 0x8c, - 0xaa, 0x90, 0x71, 0x49, 0x87, 0xba, 0xa2, 0x90, 0xd4, 0xb2, 0xb8, 0x75, 0x61, 0x09, 0xb0, 0xea, - 0x1a, 0x5f, 0xf5, 0x64, 0x70, 0x8a, 0x0d, 0x79, 0x4a, 0x6d, 0x4a, 0xbd, 0x53, 0x6d, 0x2a, 0x7e, - 0x04, 0xd9, 0x89, 0x75, 0x50, 0x1e, 0x52, 0xc7, 0xf4, 0xd4, 0xec, 0x5c, 0x0d, 0xd1, 0x2a, 0xcc, - 0x0e, 0x89, 0x1b, 0x52, 0xad, 0x8a, 0x05, 0x1c, 0x7d, 0xdc, 0x4b, 0xde, 0x4d, 0x94, 0x7e, 0x9d, - 0x83, 0xd5, 0x69, 0x42, 0x40, 0x18, 0x32, 0x82, 0x0d, 0x7c, 0x37, 0x8a, 0x40, 0x6e, 0xeb, 0xee, - 0x25, 0x95, 0x64, 0xb5, 0x34, 0xbb, 0x5e, 0xa9, 0xcd, 0x60, 0xe3, 0x09, 0x1d, 0x6b, 0x39, 0x09, - 0x26, 0x24, 0xf5, 0xa4, 0xdd, 0x27, 0xa2, 0x6f, 0x64, 0xfa, 0xf0, 0xb2, 0xce, 0x77, 0x46, 0x6e, - 0x6a, 0x44, 0xf4, 0xf5, 0x22, 0x39, 0xe7, 0xcc, 0x1c, 0xfa, 0x12, 0x0a, 0x2e, 0x77, 0x88, 0xcb, - 0xe4, 0xa9, 0xfd, 0x8c, 0xb2, 0x5e, 0x5f, 0x8e, 0x6f, 0x75, 0x54, 0xc1, 0xab, 0x97, 0x5d, 0xb5, - 0x6e, 0xfc, 0x7d, 0xaa, 0xdd, 0x99, 0x69, 0x7c, 0xc5, 0x9d, 0x36, 0x2d, 0x8a, 0xbf, 0x27, 0x21, - 0xff, 0xea, 0x3e, 0xd1, 0x4d, 0xc8, 0xf7, 0xa5, 0xf4, 0xed, 0x3e, 0x25, 0x5d, 0x1a, 0xd8, 0x63, - 0x89, 0xa9, 0x13, 0x28, 0x4b, 0x4d, 0x1b, 0x0e, 0x94, 0xdc, 0x3c, 0xc8, 0x6a, 0xac, 0xc3, 0xf9, - 0x31, 0xa3, 0x26, 0x54, 0x8f, 0xdf, 0x35, 0x54, 0x56, 0xad, 0xdd, 0x6e, 0xee, 0x68, 0x97, 0xb5, - 0x19, 0x0c, 0x6a, 0x85, 0xe8, 0x0b, 0xfd, 0x0b, 0x96, 0x42, 0x41, 0x6d, 0xc1, 0xc3, 0xc0, 0xa1, - 0x36, 0xf3, 0xb5, 0x2c, 0xe7, 0x6b, 0x33, 0x38, 0x1b, 0x0a, 0xda, 0xd2, 0xb3, 0x7b, 0x3e, 0xba, - 0x09, 0x2b, 0x03, 0xe6, 0xb1, 0x41, 0x38, 0xb0, 0x03, 0xe6, 0xf5, 0x6c, 0xc1, 0x9e, 0x47, 0x0f, - 0x5a, 0x1a, 0x2f, 0x1b, 0x03, 0x66, 0x5e, 0xaf, 0xc5, 0x9e, 0xd3, 0x62, 0x0f, 0x60, 0xbc, 0xda, - 0xd4, 0x2b, 0x85, 0x20, 0xed, 0x13, 0xd9, 0x37, 0xc2, 0xd4, 0x63, 0xb4, 0x09, 0x29, 0x29, 0xe3, - 0x4a, 0x73, 0xd5, 0x8a, 0xba, 0x0e, 0x2b, 0xee, 0x3a, 0xac, 0x5d, 0xd3, 0x75, 0x54, 0xd2, 0x5f, - 0xff, 0x7c, 0x2d, 0x81, 0x15, 0xb6, 0x02, 0x30, 0xaf, 0xe4, 0x64, 0x1f, 0xd3, 0xd3, 0xe2, 0xb7, - 0x09, 0xf8, 0xfb, 0xd4, 0x4c, 0xa9, 0xc5, 0x8e, 0x02, 0x3e, 0x88, 0x37, 0xa0, 0xc6, 0xe8, 0x73, - 0x48, 0x4a, 0x6e, 0xee, 0xf3, 0xfe, 0x7b, 0x11, 0x84, 0xd5, 0xe6, 0xd1, 0x7d, 0x4f, 0x4a, 0x5e, - 0xbc, 0x03, 0x73, 0xe6, 0xf3, 0xa2, 0x6b, 0xb9, 0x34, 0x79, 0x2d, 0x6b, 0x30, 0x1f, 0xdf, 0x1f, - 0xb4, 0x0c, 0x59, 0xdc, 0x38, 0x3c, 0xd8, 0xb5, 0x71, 0xa3, 0xb2, 0x77, 0x90, 0x9f, 0x41, 0x39, - 0x80, 0x7a, 0x75, 0xbb, 0xd5, 0xb6, 0x77, 0x1a, 0x07, 0x07, 0xf9, 0x04, 0x02, 0xc8, 0xe0, 0xed, - 0x83, 0xdd, 0xc6, 0x7e, 0x3e, 0xa9, 0xc0, 0xcd, 0xed, 0x56, 0xab, 0x5d, 0xc3, 0x8d, 0xc3, 0x47, - 0xb5, 0x7c, 0xaa, 0x92, 0x85, 0x05, 0xb7, 0x63, 0xea, 0x4c, 0xe9, 0x45, 0x06, 0xae, 0x4c, 0x2f, - 0xcf, 0xa8, 0x01, 0x29, 0xe9, 0xf8, 0xe6, 0xf1, 0x79, 0x70, 0xe9, 0xf2, 0x6e, 0xb5, 0x77, 0x9a, - 0x13, 0xb5, 0xd4, 0xf1, 0x11, 0x86, 0xb4, 0xd2, 0x96, 0x91, 0xed, 0xc7, 0x97, 0xf7, 0xa8, 0x94, - 0x33, 0x72, 0xa9, 0x7d, 0x15, 0xff, 0x48, 0x42, 0x76, 0x62, 0x21, 0x74, 0x03, 0x96, 0x07, 0xe4, - 0xc4, 0x1e, 0xbf, 0x2c, 0x42, 0x1f, 0x60, 0x16, 0xe7, 0x06, 0xe4, 0x64, 0xec, 0x56, 0xa0, 0xca, - 0xe8, 0x21, 0xb3, 0x25, 0x1b, 0x50, 0x1e, 0x4a, 0xb3, 0xaf, 0x37, 0xcb, 0x6b, 0xf4, 0x60, 0xb5, - 0x23, 0x02, 0xe2, 0xb0, 0x24, 0x1d, 0xdf, 0x3e, 0xa6, 0xd4, 0x27, 0x2e, 0x1b, 0x52, 0x23, 0xd0, - 0x4f, 0xde, 0x29, 0x56, 0x56, 0xdb, 0xf1, 0x1f, 0xc7, 0x1e, 0xf1, 0xa2, 0x9c, 0xf8, 0x2a, 0x7e, - 0x95, 0x80, 0xc5, 0x49, 0x33, 0xba, 0x02, 0x19, 0x3f, 0xe0, 0x1d, 0x1a, 0x9d, 0x72, 0x09, 0x9b, - 0x2f, 0x74, 0x0b, 0xd2, 0xea, 0x54, 0x17, 0x1f, 0x49, 0xc3, 0xd0, 0x1d, 0x98, 0x67, 0x9e, 0xa4, - 0xc1, 0x90, 0x5c, 0x7c, 0xc9, 0xf0, 0x08, 0x5a, 0xfc, 0x31, 0x01, 0x8b, 0x93, 0x39, 0x41, 0xf7, - 0xa1, 0xa8, 0xb2, 0xb2, 0x69, 0xab, 0x1c, 0xf8, 0xd4, 0xeb, 0xaa, 0x72, 0x10, 0xd0, 0x2f, 0x42, - 0x2a, 0x64, 0x9c, 0x88, 0x7f, 0x68, 0xc4, 0x3e, 0x39, 0x69, 0x46, 0x76, 0x6c, 0xcc, 0xe8, 0x7f, - 0x80, 0x94, 0x69, 0x4b, 0x93, 0x47, 0xa4, 0xa4, 0x26, 0xe9, 0x12, 0xb9, 0xb5, 0x4f, 0x4e, 0x46, - 0xe8, 0x07, 0xf0, 0xcf, 0x49, 0x9c, 0xed, 0xd3, 0x60, 0x22, 0xeb, 0xfa, 0x14, 0xb3, 0xb8, 0x30, - 0x18, 0x33, 0x9a, 0x34, 0x18, 0x07, 0x1f, 0x5d, 0x83, 0x6c, 0x44, 0x97, 0x01, 0xa3, 0x51, 0x7b, - 0x38, 0x8b, 0x41, 0xc3, 0xf5, 0x4c, 0xe9, 0x9b, 0x24, 0xe4, 0x5f, 0xed, 0x2c, 0xd0, 0x2d, 0x40, - 0xea, 0x4d, 0xa1, 0x4e, 0x28, 0xd9, 0x90, 0xda, 0x34, 0x08, 0x78, 0x10, 0x9f, 0x6b, 0x65, 0xc2, - 0x52, 0xd5, 0x86, 0x33, 0x61, 0x4d, 0xbe, 0x75, 0x58, 0xd1, 0x23, 0x40, 0x1d, 0x22, 0xa8, 0x4d, - 0x9f, 0x9a, 0x36, 0x4b, 0xa7, 0xf2, 0xc2, 0xbc, 0xe4, 0x15, 0xa9, 0x6a, 0x38, 0x4a, 0xa2, 0xe8, - 0xff, 0xb0, 0xaa, 0x0e, 0x39, 0xf2, 0xe3, 0xd3, 0xc0, 0xa1, 0x9e, 0x34, 0xa7, 0x45, 0x03, 0x72, - 0x12, 0xc3, 0x9b, 0x91, 0x45, 0xe5, 0x60, 0xc0, 0x3c, 0xf5, 0x16, 0xb9, 0xb2, 0x3f, 0xc2, 0xcf, - 0x46, 0x39, 0x18, 0x30, 0xaf, 0xa6, 0x0d, 0x06, 0x5d, 0xfa, 0x5e, 0x5d, 0xbe, 0x71, 0xc7, 0x84, - 0x2a, 0x90, 0x1e, 0xf0, 0x6e, 0xdc, 0x1f, 0x58, 0x6f, 0xd7, 0x67, 0xa9, 0xb1, 0x62, 0x61, 0xcd, - 0xd5, 0x21, 0x76, 0x99, 0xea, 0x06, 0x1c, 0x1a, 0x48, 0x76, 0xc4, 0x1c, 0x22, 0xe3, 0x2e, 0x65, - 0x25, 0xb2, 0xec, 0x8c, 0x0d, 0x2a, 0x8f, 0x7e, 0xc0, 0x86, 0x44, 0x52, 0x55, 0xe9, 0x75, 0x90, - 0x16, 0x30, 0x98, 0xa9, 0xc7, 0xf4, 0x54, 0x15, 0x04, 0x87, 0x4c, 0xfa, 0x8a, 0x92, 0xbd, 0x80, - 0x73, 0x0e, 0x99, 0x70, 0x24, 0xd4, 0x2b, 0x26, 0xc2, 0x8e, 0x8a, 0x87, 0x4d, 0x5c, 0xa9, 0xdf, - 0xe1, 0xa8, 0xd9, 0x5f, 0xc0, 0xcb, 0xc6, 0xb0, 0xed, 0x4a, 0xf5, 0x0c, 0x0b, 0x55, 0xb8, 0x85, - 0xc7, 0x0a, 0x99, 0xa8, 0x70, 0x0b, 0x8f, 0x95, 0x1e, 0xc2, 0x9c, 0x39, 0x07, 0xca, 0xc2, 0xdc, - 0xee, 0x5e, 0x6b, 0xbb, 0x52, 0xaf, 0xe6, 0x67, 0x54, 0x25, 0x6e, 0xed, 0xed, 0x37, 0xeb, 0xd5, - 0xa8, 0x2a, 0xef, 0x1f, 0xb6, 0x0f, 0xb7, 0xeb, 0xf9, 0x24, 0xca, 0xc3, 0xe2, 0x5e, 0xab, 0xbd, - 0xd7, 0xb0, 0xcd, 0x4c, 0xaa, 0x62, 0x7d, 0xf7, 0x72, 0x2d, 0xf1, 0xc3, 0xcb, 0xb5, 0xc4, 0x2f, - 0x2f, 0xd7, 0x12, 0x4f, 0xd6, 0xa3, 0xd8, 0x31, 0x5e, 0x26, 0x3e, 0x2b, 0x4f, 0xf9, 0x37, 0xee, - 0x64, 0xb4, 0x02, 0x6e, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0xa6, 0xbb, 0x7b, 0xfa, 0xcb, 0x0f, - 0x00, 0x00, + // 1418 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x6e, 0x1b, 0xb7, + 0x16, 0xb6, 0x7e, 0x63, 0x1f, 0xd9, 0xb2, 0xcc, 0x6b, 0xe4, 0x2a, 0xba, 0x80, 0xe3, 0x08, 0x17, + 0x37, 0xbe, 0x69, 0x33, 0xaa, 0x1d, 0x14, 0x48, 0x13, 0xa4, 0x88, 0x65, 0x1b, 0x91, 0x1b, 0xd9, + 0x12, 0x28, 0x19, 0x28, 0xb2, 0x19, 0x50, 0x23, 0x5a, 0x62, 0x3c, 0x1a, 0x4e, 0x49, 0x8e, 0x6a, + 0xe7, 0x19, 0xba, 0x0e, 0xba, 0xed, 0xa6, 0xcf, 0x52, 0x74, 0xd5, 0x6d, 0xbb, 0x69, 0x91, 0x17, + 0xe8, 0xaa, 0x9b, 0x2e, 0x8a, 0x82, 0x1c, 0xea, 0xc7, 0x89, 0x23, 0xc7, 0x48, 0xb3, 0x23, 0x79, + 0xbe, 0xef, 0x90, 0x3c, 0xe7, 0x9b, 0x73, 0x38, 0x70, 0x27, 0xa0, 0xea, 0x6b, 0x2e, 0x4e, 0x58, + 0xd0, 0xab, 0x0c, 0x37, 0x89, 0x1f, 0xf6, 0xc9, 0xbd, 0x4a, 0x97, 0x4a, 0xc5, 0x02, 0xa2, 0x18, + 0x0f, 0x5c, 0x11, 0xf9, 0xd4, 0x09, 0x05, 0x57, 0x1c, 0xdd, 0x60, 0x52, 0x31, 0xee, 0x4c, 0x18, + 0xce, 0x88, 0x51, 0x5a, 0xeb, 0x71, 0xde, 0xf3, 0x69, 0xc5, 0x00, 0x3b, 0xd1, 0x71, 0xa5, 0x1b, + 0x09, 0xc3, 0x8f, 0xa9, 0xa5, 0xff, 0x5f, 0xb4, 0xcd, 0x90, 0x09, 0x15, 0x11, 0xdf, 0x95, 0x54, + 0x0c, 0x99, 0x67, 0x77, 0x29, 0xdd, 0xba, 0x08, 0x2a, 0x59, 0x97, 0x7a, 0x44, 0x58, 0xc8, 0x6a, + 0x8f, 0xf7, 0xb8, 0x19, 0x56, 0xf4, 0x28, 0x5e, 0x2d, 0xff, 0x95, 0x80, 0xe5, 0xdd, 0xc9, 0xc9, + 0x71, 0xe4, 0x53, 0x84, 0x20, 0xdd, 0xe7, 0x52, 0x15, 0x13, 0xeb, 0x89, 0x8d, 0x05, 0x6c, 0xc6, + 0xa8, 0x01, 0x79, 0x25, 0xc8, 0xf1, 0x31, 0xf3, 0xdc, 0x90, 0xfb, 0xcc, 0x3b, 0x2b, 0x26, 0xd7, + 0x13, 0x1b, 0xb9, 0xad, 0x0d, 0xe7, 0xad, 0xf7, 0x73, 0xda, 0x31, 0xa1, 0x69, 0xf0, 0x78, 0x49, + 0x4d, 0x4f, 0xd1, 0x43, 0xb8, 0x26, 0xa3, 0x8e, 0xa4, 0x4a, 0x16, 0x53, 0xeb, 0xa9, 0x8d, 0xdc, + 0xd6, 0xad, 0x19, 0x9e, 0x5a, 0x06, 0x89, 0x47, 0x0c, 0xb4, 0x0f, 0x8b, 0x1e, 0x0f, 0x8e, 0x59, + 0xcf, 0x95, 0x1e, 0x0f, 0x69, 0x31, 0xbd, 0x9e, 0xd8, 0xc8, 0x6f, 0xfd, 0x6f, 0x86, 0x87, 0x1d, + 0x03, 0x6f, 0x69, 0x34, 0xce, 0x79, 0x93, 0x49, 0xf9, 0x97, 0x2c, 0x2c, 0x9d, 0x3b, 0x28, 0x6a, + 0xc3, 0x92, 0xcf, 0x49, 0xd7, 0xed, 0x10, 0x9f, 0x04, 0x1e, 0x15, 0x26, 0x0e, 0xb9, 0xad, 0xca, + 0x0c, 0xef, 0x75, 0x4e, 0xba, 0x55, 0x0b, 0x6f, 0x51, 0xa5, 0x58, 0xd0, 0x93, 0x78, 0xd1, 0x9f, + 0x5a, 0x45, 0xcf, 0x60, 0xd9, 0xe3, 0x41, 0x40, 0x3d, 0x23, 0x90, 0x90, 0x73, 0xdf, 0x46, 0x70, + 0x73, 0xf6, 0xa9, 0x2d, 0xa3, 0xc9, 0xb9, 0x3f, 0xf6, 0x9c, 0xf7, 0xce, 0xad, 0xa3, 0x2f, 0x61, + 0x85, 0x47, 0xca, 0x67, 0x54, 0xb8, 0x5d, 0xaa, 0x62, 0x43, 0x31, 0x65, 0xbc, 0x7f, 0x34, 0xc3, + 0x7b, 0x23, 0xe6, 0xec, 0x8e, 0x28, 0xb8, 0xc0, 0x5f, 0x5b, 0x41, 0xf7, 0x21, 0xa5, 0x7c, 0x69, + 0xe2, 0x9b, 0x9b, 0x19, 0xdf, 0x76, 0xbd, 0x35, 0x3e, 0x9e, 0xa6, 0xa0, 0xe7, 0xf0, 0xaf, 0x90, + 0x0b, 0xe5, 0xfa, 0x74, 0x48, 0xb5, 0x5a, 0x63, 0x5b, 0x31, 0x63, 0x72, 0xfd, 0xe0, 0x5d, 0x55, + 0xe3, 0x34, 0xb9, 0x50, 0xe7, 0x75, 0xb4, 0xa2, 0xdd, 0xd6, 0xb5, 0xd7, 0xd1, 0x86, 0xa5, 0x97, + 0x29, 0x58, 0x79, 0x03, 0x88, 0x1e, 0x42, 0x5a, 0x43, 0x6d, 0xfa, 0x6e, 0xcf, 0xd8, 0x52, 0x73, + 0x5b, 0xd4, 0xa7, 0x9e, 0xe2, 0x02, 0x1b, 0xd2, 0x9b, 0x22, 0x48, 0x7e, 0x20, 0x11, 0xa4, 0x3e, + 0xa8, 0x08, 0xd2, 0xff, 0xa0, 0x08, 0x32, 0x57, 0x16, 0x41, 0xf9, 0xf7, 0x04, 0x64, 0xe3, 0x6f, + 0x57, 0x17, 0x95, 0x80, 0x0c, 0xe8, 0xa8, 0xa8, 0xe8, 0x31, 0xda, 0x83, 0xac, 0x4f, 0x3a, 0xd4, + 0x97, 0xc5, 0xa4, 0x91, 0xc5, 0xdd, 0x4b, 0x4b, 0x80, 0x53, 0x37, 0xf8, 0xbd, 0x40, 0x89, 0x33, + 0x6c, 0xc9, 0x17, 0xd4, 0xa6, 0xd4, 0x7b, 0xd5, 0xa6, 0xd2, 0x67, 0x90, 0x9b, 0xda, 0x07, 0x15, + 0x20, 0x75, 0x42, 0xcf, 0xec, 0xc9, 0xf5, 0x10, 0xad, 0x42, 0x66, 0x48, 0xfc, 0x88, 0x1a, 0x55, + 0x2c, 0xe0, 0x78, 0xf2, 0x20, 0x79, 0x3f, 0x51, 0xfe, 0x3e, 0x03, 0xab, 0x17, 0x09, 0x01, 0x61, + 0xc8, 0x4a, 0x36, 0x08, 0xfd, 0x38, 0x02, 0xf9, 0xad, 0xfb, 0x57, 0x54, 0x92, 0xd3, 0x32, 0xec, + 0x7a, 0xb5, 0x36, 0x87, 0xad, 0x27, 0x74, 0x62, 0xe4, 0x24, 0x99, 0x54, 0x34, 0x50, 0x6e, 0x9f, + 0xc8, 0xbe, 0x95, 0xe9, 0xe3, 0xab, 0x3a, 0xdf, 0x19, 0xbb, 0xa9, 0x11, 0xd9, 0x37, 0x9b, 0xe4, + 0xbd, 0x73, 0x6b, 0xa5, 0x3f, 0x92, 0x50, 0x78, 0x1d, 0x86, 0xee, 0x40, 0xa1, 0xaf, 0x54, 0xe8, + 0xf6, 0x29, 0xe9, 0x52, 0xe1, 0x4e, 0x32, 0xac, 0x1d, 0x68, 0x4b, 0xcd, 0x18, 0x0e, 0x75, 0xb6, + 0x03, 0xc8, 0x19, 0xac, 0xc7, 0xf9, 0x09, 0xa3, 0xf6, 0xa4, 0x4f, 0xdf, 0xf7, 0xa4, 0x4e, 0xad, + 0xdd, 0x6e, 0xee, 0x18, 0x97, 0xb5, 0x39, 0x0c, 0x7a, 0x87, 0x78, 0x86, 0xfe, 0x0b, 0x4b, 0x91, + 0xa4, 0xae, 0xe4, 0x91, 0xf0, 0xa8, 0xcb, 0x42, 0xa3, 0x8a, 0xf9, 0xda, 0x1c, 0xce, 0x45, 0x92, + 0xb6, 0xcc, 0xea, 0x7e, 0x88, 0xee, 0xc0, 0xca, 0x80, 0x05, 0x6c, 0x10, 0x0d, 0x5c, 0xc1, 0x82, + 0x9e, 0x2b, 0xd9, 0x8b, 0xb8, 0x9f, 0xa4, 0xf1, 0xb2, 0x35, 0x60, 0x16, 0xf4, 0x5a, 0xec, 0x05, + 0x2d, 0xf5, 0x00, 0x26, 0xbb, 0x5d, 0xa8, 0x68, 0x04, 0xe9, 0x90, 0xa8, 0xbe, 0xd5, 0x85, 0x19, + 0xa3, 0x4d, 0x48, 0x29, 0x35, 0xfa, 0xd0, 0x6f, 0x38, 0x71, 0xd3, 0x77, 0x46, 0x4d, 0xdf, 0xd9, + 0xb5, 0x4d, 0xbf, 0x9a, 0xfe, 0xf6, 0xd7, 0x9b, 0x09, 0xac, 0xb1, 0x55, 0x80, 0x79, 0x9d, 0x4d, + 0xf7, 0x84, 0x9e, 0x95, 0x6b, 0x30, 0x3f, 0x4a, 0x3d, 0x5a, 0x86, 0x1c, 0x6e, 0x1c, 0x1d, 0xee, + 0xba, 0xb8, 0x51, 0xdd, 0x3f, 0x2c, 0xcc, 0xa1, 0x3c, 0x40, 0x7d, 0x6f, 0xbb, 0xd5, 0x76, 0x77, + 0x1a, 0x87, 0x87, 0x85, 0x04, 0x02, 0xc8, 0xe2, 0xed, 0xc3, 0xdd, 0xc6, 0x41, 0x21, 0xa9, 0xc1, + 0xcd, 0xed, 0x56, 0xab, 0x5d, 0xc3, 0x8d, 0xa3, 0x27, 0xb5, 0x42, 0xaa, 0x9a, 0x83, 0x05, 0xbf, + 0x63, 0x3f, 0x91, 0xf2, 0xcb, 0x2c, 0x5c, 0xbf, 0xb8, 0xb2, 0xa0, 0x06, 0xa4, 0x94, 0x17, 0xda, + 0xba, 0xf9, 0xe8, 0xca, 0x95, 0xc9, 0x69, 0xef, 0x34, 0xa7, 0xca, 0x80, 0x17, 0x22, 0x0c, 0x69, + 0x9d, 0x17, 0x9b, 0xf2, 0xcf, 0xaf, 0xee, 0x51, 0x47, 0x7d, 0xec, 0xd2, 0xf8, 0x2a, 0xfd, 0x99, + 0x84, 0xdc, 0xd4, 0x46, 0xe8, 0x36, 0x2c, 0x0f, 0xc8, 0xa9, 0x3b, 0x29, 0x8a, 0xd2, 0x5c, 0x20, + 0x83, 0xf3, 0x03, 0x72, 0x3a, 0x71, 0x2b, 0x51, 0x75, 0x5c, 0x83, 0x5d, 0xc5, 0x06, 0x94, 0x47, + 0xca, 0x9e, 0xeb, 0xed, 0xa9, 0x19, 0xd7, 0xda, 0x76, 0x4c, 0x40, 0x1c, 0x96, 0x94, 0x17, 0xba, + 0x27, 0x94, 0x86, 0xc4, 0x67, 0x43, 0x6a, 0x93, 0xfb, 0xc5, 0x7b, 0xc5, 0xca, 0x69, 0x7b, 0xe1, + 0xd3, 0x91, 0x47, 0xbc, 0xa8, 0xa6, 0x66, 0xa5, 0x6f, 0x12, 0xb0, 0x38, 0x6d, 0x46, 0xd7, 0x21, + 0x1b, 0x0a, 0xde, 0xa1, 0xf1, 0x2d, 0x97, 0xb0, 0x9d, 0xa1, 0xbb, 0x90, 0xd6, 0xb7, 0xba, 0xfc, + 0x4a, 0x06, 0x86, 0x3e, 0x85, 0x79, 0x16, 0x28, 0x2a, 0x86, 0xe4, 0x72, 0x81, 0xe2, 0x31, 0xb4, + 0xf4, 0x73, 0x02, 0x16, 0xa7, 0x73, 0x82, 0x1e, 0x42, 0x49, 0x67, 0x65, 0xd3, 0xd5, 0x39, 0x08, + 0x69, 0xd0, 0xd5, 0x9f, 0x92, 0xa0, 0x5f, 0x45, 0x54, 0xaa, 0x51, 0x22, 0xfe, 0x6d, 0x10, 0x07, + 0xe4, 0xb4, 0x19, 0xdb, 0xb1, 0x35, 0xa3, 0x8f, 0x01, 0x69, 0xd3, 0x96, 0x21, 0x8f, 0x49, 0x49, + 0x43, 0x32, 0xe5, 0x65, 0xeb, 0x80, 0x9c, 0x8e, 0xd1, 0x8f, 0xe0, 0x3f, 0xd3, 0x38, 0x37, 0xa4, + 0x62, 0x2a, 0xeb, 0xe6, 0x16, 0x19, 0x5c, 0x1c, 0x4c, 0x18, 0x4d, 0x2a, 0x26, 0xc1, 0x47, 0x37, + 0x21, 0x17, 0xd3, 0x95, 0x60, 0x34, 0x7e, 0xd9, 0x64, 0x30, 0x18, 0xb8, 0x59, 0x29, 0x7f, 0x97, + 0x84, 0xc2, 0xeb, 0x4d, 0x11, 0xdd, 0x05, 0xa4, 0xcb, 0x21, 0xf5, 0x22, 0xc5, 0x86, 0xd4, 0xa5, + 0x42, 0x70, 0x31, 0xba, 0xd7, 0xca, 0x94, 0x65, 0xcf, 0x18, 0xce, 0x85, 0x35, 0xf9, 0xce, 0x61, + 0x45, 0x4f, 0x00, 0x75, 0x88, 0xa4, 0x2e, 0x7d, 0x6e, 0x5f, 0x08, 0x26, 0x95, 0x97, 0xe6, 0xa5, + 0xa0, 0x49, 0x7b, 0x96, 0xa3, 0x25, 0x8a, 0x3e, 0x81, 0x55, 0x7d, 0xc9, 0xb1, 0x9f, 0x90, 0x0a, + 0x8f, 0x06, 0xca, 0xde, 0x16, 0x0d, 0xc8, 0xe9, 0x08, 0xde, 0x8c, 0x2d, 0x3a, 0x07, 0x03, 0x16, + 0xe8, 0x3a, 0xee, 0xab, 0xfe, 0x18, 0x9f, 0x89, 0x73, 0x30, 0x60, 0x41, 0xcd, 0x18, 0x2c, 0xba, + 0xfc, 0xa3, 0xfe, 0xf8, 0x26, 0xcd, 0x1e, 0x55, 0x21, 0x3d, 0xe0, 0xdd, 0x51, 0x6b, 0x73, 0xde, + 0xed, 0x89, 0xa0, 0xc7, 0x9a, 0x85, 0x0d, 0xd7, 0x84, 0xd8, 0x67, 0xba, 0x91, 0x79, 0x54, 0x28, + 0x76, 0xcc, 0x3c, 0xa2, 0x46, 0x0d, 0x76, 0x25, 0xb6, 0xec, 0x4c, 0x0c, 0x3a, 0x8f, 0xa1, 0x60, + 0x43, 0xa2, 0xa8, 0xae, 0x92, 0x26, 0x48, 0x0b, 0x18, 0xec, 0xd2, 0x53, 0x7a, 0xa6, 0x0b, 0x82, + 0x47, 0xa6, 0x7d, 0xc5, 0xc9, 0x5e, 0xc0, 0x79, 0x8f, 0x4c, 0x39, 0x92, 0xba, 0x03, 0xc8, 0xa8, + 0xa3, 0xe3, 0xe1, 0x12, 0x5f, 0x99, 0x1e, 0x16, 0xbf, 0x53, 0x17, 0xf0, 0xb2, 0x35, 0x6c, 0xfb, + 0x4a, 0xb7, 0x30, 0xa9, 0x9f, 0x02, 0x32, 0x60, 0xc5, 0x6c, 0xfc, 0x14, 0x90, 0x01, 0x2b, 0x3f, + 0x86, 0x6b, 0xf6, 0x1e, 0x28, 0x07, 0xd7, 0x76, 0xf7, 0x5b, 0xdb, 0xd5, 0xfa, 0x5e, 0x61, 0x4e, + 0x57, 0xe2, 0xd6, 0xfe, 0x41, 0xb3, 0xbe, 0x17, 0x57, 0xe5, 0x83, 0xa3, 0xf6, 0xd1, 0x76, 0xbd, + 0x90, 0x44, 0x05, 0x58, 0xdc, 0x6f, 0xb5, 0xf7, 0x1b, 0xae, 0x5d, 0x49, 0x55, 0x9d, 0x1f, 0x5e, + 0xad, 0x25, 0x7e, 0x7a, 0xb5, 0x96, 0xf8, 0xed, 0xd5, 0x5a, 0xe2, 0xd9, 0x7a, 0x1c, 0x3b, 0xc6, + 0x2b, 0x24, 0x64, 0x95, 0x0b, 0x7e, 0xeb, 0x3a, 0x59, 0xa3, 0x80, 0x7b, 0x7f, 0x07, 0x00, 0x00, + 0xff, 0xff, 0x4e, 0xda, 0x16, 0xb0, 0x86, 0x0e, 0x00, 0x00, } diff --git a/vendor/istio.io/api/networking/v1alpha3/destination_rule.proto b/vendor/istio.io/api/networking/v1alpha3/destination_rule.proto index 757bca7c73ff..6d54f7a7cc82 100644 --- a/vendor/istio.io/api/networking/v1alpha3/destination_rule.proto +++ b/vendor/istio.io/api/networking/v1alpha3/destination_rule.proto @@ -264,31 +264,6 @@ message Subset { // ttl: 0s // ``` // -// The following example sets up locality weight for the ratings service -// Assume ratings service resides in "region1/zone1/*" and "region1/zone2/*", -// and originating clusters also reside in "region1/zone1/*" and "region1/zone2/*". -// This example specifies when clusters from "region1/zone1/*" accessing ratings service, 80% of the traffic -// is shipped to "region1/zone1/*" ratings service endpoints, and the rest 20% to "region1/zone2/*". -// -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// localityWeightSettings: -// - from: region1/zone1/* -// to: -// "region1/zone1/*": 80 -// "region1/zone2/*": 20 -// - from: region1/zone2/* -// to: -// "region1/zone1/*": 20 -// "region1/zone2/*": 80 -// ``` message LoadBalancerSettings { // Standard load balancing algorithms that require no tuning. enum SimpleLB { @@ -352,19 +327,6 @@ message LoadBalancerSettings { uint64 minimum_ring_size = 4; }; - // Originating -> upstream cluster locality weight set, support wildcard matching '*' - // '*' matches all localities - // 'region1/*' matches all zones in region1 - message LocalityWeightSetting{ - // Originating locality, '/' separated, e.g. 'region/zone/sub_zone'. - string from = 1; - - // Upstream locality to loadbalancing weight map. The sum of all weights should be == 100. - // Should assign loadbalancing weight for all localities, otherwise the traffic are not routed - // following the percentage of weight. - map to = 2; - }; - // (-- TODO: Enable Subset load balancing after moving to v2 API Also // look into enabling Priotity based load balancing for spilling over // from one priority pool to another. --) @@ -374,12 +336,6 @@ message LoadBalancerSettings { SimpleLB simple = 1; ConsistentHashLB consistent_hash = 2; } - - // Explicitly assign loadbalancing weight across different zones and geographical locations. - // Refer to [Locality weighted load balancing](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/load_balancing.html?highlight=load_balancing_weight#locality-weighted-load-balancing) - // If empty, the locality weight is set according to the endpoints number within it. - // If duplicated settings are present, then the first one will take effect. - repeated LocalityWeightSetting locality_weight_settings = 3; } // Connection pool settings for an upstream host. The settings apply to diff --git a/vendor/istio.io/api/networking/v1alpha3/istio.networking.v1alpha3.pb.html b/vendor/istio.io/api/networking/v1alpha3/istio.networking.v1alpha3.pb.html index 18540c5d6d1c..12fa35db47ef 100644 --- a/vendor/istio.io/api/networking/v1alpha3/istio.networking.v1alpha3.pb.html +++ b/vendor/istio.io/api/networking/v1alpha3/istio.networking.v1alpha3.pb.html @@ -6,7 +6,7 @@ generator: protoc-gen-docs aliases: - /docs/reference/config/istio.routing.v1alpha1/ -number_of_entries: 62 +number_of_entries: 61 ---

Configuration affecting traffic routing. Here are a few terms useful to define in the context of traffic routing.

@@ -2417,31 +2417,6 @@

LoadBalancerSettings

ttl: 0s -

The following example sets up locality weight for the ratings service -Assume ratings service resides in “region1/zone1/” and “region1/zone2/”, -and originating clusters also reside in “region1/zone1/” and “region1/zone2/”. -This example specifies when clusters from “region1/zone1/” accessing ratings service, 80% of the traffic -is shipped to “region1/zone1/” ratings service endpoints, and the rest 20% to “region1/zone2/*”.

- -
 apiVersion: networking.istio.io/v1alpha3
- kind: DestinationRule
- metadata:
-   name: bookinfo-ratings
- spec:
-   host: ratings.prod.svc.cluster.local
-   trafficPolicy:
-     loadBalancer:
-       localityWeightSettings:
-         - from: region1/zone1/*
-           to:
-             "region1/zone1/*": 80
-             "region1/zone2/*": 20
-         - from: region1/zone2/*
-           to:
-             "region1/zone1/*": 20
-             "region1/zone2/*": 80
-
-
@@ -2461,17 +2436,6 @@

LoadBalancerSettings

- - - - - @@ -2571,42 +2535,6 @@

LoadBalancerSettings.C

- - -
consistentHash LoadBalancerSettings.ConsistentHashLB (oneof) -
localityWeightSettingsLoadBalancerSettings.LocalityWeightSetting[] -

Explicitly assign loadbalancing weight across different zones and geographical locations. -Refer to Locality weighted load balancing -If empty, the locality weight is set according to the endpoints number within it. -If duplicated settings are present, then the first one will take effect.

-

REQUIRED. Lifetime of the cookie.

-
-
-

LoadBalancerSettings.LocalityWeightSetting

-
-

Originating -> upstream cluster locality weight set, support wildcard matching ‘’ -‘’ matches all localities -‘region1/*’ matches all zones in region1

- - - - - - - - - - - - - - - - - - - diff --git a/vendor/istio.io/api/policy/v1beta1/cfg.pb.go b/vendor/istio.io/api/policy/v1beta1/cfg.pb.go index c20dc5f6604a..e4ff2d1b4e50 100644 --- a/vendor/istio.io/api/policy/v1beta1/cfg.pb.go +++ b/vendor/istio.io/api/policy/v1beta1/cfg.pb.go @@ -6,6 +6,7 @@ It is generated from these files: policy/v1beta1/cfg.proto + policy/v1beta1/http_response.proto policy/v1beta1/type.proto policy/v1beta1/value_type.proto @@ -24,6 +25,7 @@ Tls OAuth Mutual + DirectHttpResponse Value IPAddress Duration @@ -267,7 +269,7 @@ func (m *AttributeManifest_AttributeInfo) GetValueType() ValueType { // instance constructed using the 'RequestCountByService' instance. // // ```yaml -// - match: destination.service == "*" +// - match: match(destination.service.host, "*") // actions: // - handler: prometheus-handler // instances: @@ -282,17 +284,17 @@ type Rule struct { // // * an empty match evaluates to `true` // * `true`, a boolean literal; a rule with this match will always be executed - // * `destination.service == ratings*` selects any request targeting a service whose + // * `match(destination.service.host, "ratings.*)` selects any request targeting a service whose // name starts with "ratings" // * `attr1 == "20" && attr2 == "30"` logical AND, OR, and NOT are also available Match string `protobuf:"bytes,1,opt,name=match,proto3" json:"match,omitempty"` // Optional. The actions that will be executed when match evaluates to `true`. Actions []*Action `protobuf:"bytes,2,rep,name=actions" json:"actions,omitempty"` // Optional. Templatized operations on the request headers using values produced by the - // rule actions. + // rule actions. Require the check action result to be OK. RequestHeaderOperations []*Rule_HeaderOperationTemplate `protobuf:"bytes,3,rep,name=request_header_operations,json=requestHeaderOperations" json:"request_header_operations,omitempty"` // Optional. Templatized operations on the response headers using values produced by the - // rule actions. + // rule actions. Require the check action result to be OK. ResponseHeaderOperations []*Rule_HeaderOperationTemplate `protobuf:"bytes,4,rep,name=response_header_operations,json=responseHeaderOperations" json:"response_header_operations,omitempty"` // $hide_from_docs // Optional. Provides the ability to add a sampling configuration for Mixer rules. This sampling @@ -458,7 +460,7 @@ func (m *Action) GetName() string { // params: // value: 1 // dimensions: -// source: source.service +// source: source.name // destination_ip: destination.ip // ``` type Instance struct { diff --git a/vendor/istio.io/api/policy/v1beta1/cfg.proto b/vendor/istio.io/api/policy/v1beta1/cfg.proto index aba475269228..e346755bea7a 100644 --- a/vendor/istio.io/api/policy/v1beta1/cfg.proto +++ b/vendor/istio.io/api/policy/v1beta1/cfg.proto @@ -104,7 +104,7 @@ message AttributeManifest { // instance constructed using the 'RequestCountByService' instance. // // ```yaml -// - match: destination.service == "*" +// - match: match(destination.service.host, "*") // actions: // - handler: prometheus-handler // instances: @@ -119,7 +119,7 @@ message Rule { // // * an empty match evaluates to `true` // * `true`, a boolean literal; a rule with this match will always be executed - // * `destination.service == ratings*` selects any request targeting a service whose + // * `match(destination.service.host, "ratings.*)` selects any request targeting a service whose // name starts with "ratings" // * `attr1 == "20" && attr2 == "30"` logical AND, OR, and NOT are also available string match = 1; @@ -167,11 +167,11 @@ message Rule { } // Optional. Templatized operations on the request headers using values produced by the - // rule actions. + // rule actions. Require the check action result to be OK. repeated HeaderOperationTemplate request_header_operations = 3; // Optional. Templatized operations on the response headers using values produced by the - // rule actions. + // rule actions. Require the check action result to be OK. repeated HeaderOperationTemplate response_header_operations = 4; // $hide_from_docs @@ -225,7 +225,7 @@ message Action { // params: // value: 1 // dimensions: -// source: source.service +// source: source.name // destination_ip: destination.ip // ``` message Instance { diff --git a/vendor/istio.io/api/policy/v1beta1/http_response.pb.go b/vendor/istio.io/api/policy/v1beta1/http_response.pb.go new file mode 100644 index 000000000000..ec3d55e25f7d --- /dev/null +++ b/vendor/istio.io/api/policy/v1beta1/http_response.pb.go @@ -0,0 +1,833 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: policy/v1beta1/http_response.proto + +package v1beta1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strconv "strconv" + +import strings "strings" +import reflect "reflect" +import sortkeys "github.com/gogo/protobuf/sortkeys" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// HTTP response codes. +// For more details: http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml +type HttpStatusCode int32 + +const ( + // Empty - This code not part of the HTTP status code specification, but it is needed for proto + // `enum` type. + Empty HttpStatusCode = 0 + Continue HttpStatusCode = 100 + OK HttpStatusCode = 200 + Created HttpStatusCode = 201 + Accepted HttpStatusCode = 202 + NonAuthoritativeInformation HttpStatusCode = 203 + NoContent HttpStatusCode = 204 + ResetContent HttpStatusCode = 205 + PartialContent HttpStatusCode = 206 + MultiStatus HttpStatusCode = 207 + AlreadyReported HttpStatusCode = 208 + IMUsed HttpStatusCode = 226 + MultipleChoices HttpStatusCode = 300 + MovedPermanently HttpStatusCode = 301 + Found HttpStatusCode = 302 + SeeOther HttpStatusCode = 303 + NotModified HttpStatusCode = 304 + UseProxy HttpStatusCode = 305 + TemporaryRedirect HttpStatusCode = 307 + PermanentRedirect HttpStatusCode = 308 + BadRequest HttpStatusCode = 400 + Unauthorized HttpStatusCode = 401 + PaymentRequired HttpStatusCode = 402 + Forbidden HttpStatusCode = 403 + NotFound HttpStatusCode = 404 + MethodNotAllowed HttpStatusCode = 405 + NotAcceptable HttpStatusCode = 406 + ProxyAuthenticationRequired HttpStatusCode = 407 + RequestTimeout HttpStatusCode = 408 + Conflict HttpStatusCode = 409 + Gone HttpStatusCode = 410 + LengthRequired HttpStatusCode = 411 + PreconditionFailed HttpStatusCode = 412 + PayloadTooLarge HttpStatusCode = 413 + URITooLong HttpStatusCode = 414 + UnsupportedMediaType HttpStatusCode = 415 + RangeNotSatisfiable HttpStatusCode = 416 + ExpectationFailed HttpStatusCode = 417 + MisdirectedRequest HttpStatusCode = 421 + UnprocessableEntity HttpStatusCode = 422 + Locked HttpStatusCode = 423 + FailedDependency HttpStatusCode = 424 + UpgradeRequired HttpStatusCode = 426 + PreconditionRequired HttpStatusCode = 428 + TooManyRequests HttpStatusCode = 429 + RequestHeaderFieldsTooLarge HttpStatusCode = 431 + InternalServerError HttpStatusCode = 500 + NotImplemented HttpStatusCode = 501 + BadGateway HttpStatusCode = 502 + ServiceUnavailable HttpStatusCode = 503 + GatewayTimeout HttpStatusCode = 504 + HTTPVersionNotSupported HttpStatusCode = 505 + VariantAlsoNegotiates HttpStatusCode = 506 + InsufficientStorage HttpStatusCode = 507 + LoopDetected HttpStatusCode = 508 + NotExtended HttpStatusCode = 510 + NetworkAuthenticationRequired HttpStatusCode = 511 +) + +var HttpStatusCode_name = map[int32]string{ + 0: "Empty", + 100: "Continue", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "NonAuthoritativeInformation", + 204: "NoContent", + 205: "ResetContent", + 206: "PartialContent", + 207: "MultiStatus", + 208: "AlreadyReported", + 226: "IMUsed", + 300: "MultipleChoices", + 301: "MovedPermanently", + 302: "Found", + 303: "SeeOther", + 304: "NotModified", + 305: "UseProxy", + 307: "TemporaryRedirect", + 308: "PermanentRedirect", + 400: "BadRequest", + 401: "Unauthorized", + 402: "PaymentRequired", + 403: "Forbidden", + 404: "NotFound", + 405: "MethodNotAllowed", + 406: "NotAcceptable", + 407: "ProxyAuthenticationRequired", + 408: "RequestTimeout", + 409: "Conflict", + 410: "Gone", + 411: "LengthRequired", + 412: "PreconditionFailed", + 413: "PayloadTooLarge", + 414: "URITooLong", + 415: "UnsupportedMediaType", + 416: "RangeNotSatisfiable", + 417: "ExpectationFailed", + 421: "MisdirectedRequest", + 422: "UnprocessableEntity", + 423: "Locked", + 424: "FailedDependency", + 426: "UpgradeRequired", + 428: "PreconditionRequired", + 429: "TooManyRequests", + 431: "RequestHeaderFieldsTooLarge", + 500: "InternalServerError", + 501: "NotImplemented", + 502: "BadGateway", + 503: "ServiceUnavailable", + 504: "GatewayTimeout", + 505: "HTTPVersionNotSupported", + 506: "VariantAlsoNegotiates", + 507: "InsufficientStorage", + 508: "LoopDetected", + 510: "NotExtended", + 511: "NetworkAuthenticationRequired", +} +var HttpStatusCode_value = map[string]int32{ + "Empty": 0, + "Continue": 100, + "OK": 200, + "Created": 201, + "Accepted": 202, + "NonAuthoritativeInformation": 203, + "NoContent": 204, + "ResetContent": 205, + "PartialContent": 206, + "MultiStatus": 207, + "AlreadyReported": 208, + "IMUsed": 226, + "MultipleChoices": 300, + "MovedPermanently": 301, + "Found": 302, + "SeeOther": 303, + "NotModified": 304, + "UseProxy": 305, + "TemporaryRedirect": 307, + "PermanentRedirect": 308, + "BadRequest": 400, + "Unauthorized": 401, + "PaymentRequired": 402, + "Forbidden": 403, + "NotFound": 404, + "MethodNotAllowed": 405, + "NotAcceptable": 406, + "ProxyAuthenticationRequired": 407, + "RequestTimeout": 408, + "Conflict": 409, + "Gone": 410, + "LengthRequired": 411, + "PreconditionFailed": 412, + "PayloadTooLarge": 413, + "URITooLong": 414, + "UnsupportedMediaType": 415, + "RangeNotSatisfiable": 416, + "ExpectationFailed": 417, + "MisdirectedRequest": 421, + "UnprocessableEntity": 422, + "Locked": 423, + "FailedDependency": 424, + "UpgradeRequired": 426, + "PreconditionRequired": 428, + "TooManyRequests": 429, + "RequestHeaderFieldsTooLarge": 431, + "InternalServerError": 500, + "NotImplemented": 501, + "BadGateway": 502, + "ServiceUnavailable": 503, + "GatewayTimeout": 504, + "HTTPVersionNotSupported": 505, + "VariantAlsoNegotiates": 506, + "InsufficientStorage": 507, + "LoopDetected": 508, + "NotExtended": 510, + "NetworkAuthenticationRequired": 511, +} + +func (HttpStatusCode) EnumDescriptor() ([]byte, []int) { return fileDescriptorHttpResponse, []int{0} } + +// Direct HTTP response for a client-facing error message which can be attached +// to an RPC error. +type DirectHttpResponse struct { + // Optional HTTP status code. If not set, RPC error code is used. + Code HttpStatusCode `protobuf:"varint,1,opt,name=code,proto3,enum=istio.policy.v1beta1.HttpStatusCode" json:"code,omitempty"` + // HTTP response body. + Body string `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` + // Optional HTTP response headers. + Headers map[string]string `protobuf:"bytes,3,rep,name=headers" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (m *DirectHttpResponse) Reset() { *m = DirectHttpResponse{} } +func (*DirectHttpResponse) ProtoMessage() {} +func (*DirectHttpResponse) Descriptor() ([]byte, []int) { return fileDescriptorHttpResponse, []int{0} } + +func (m *DirectHttpResponse) GetCode() HttpStatusCode { + if m != nil { + return m.Code + } + return Empty +} + +func (m *DirectHttpResponse) GetBody() string { + if m != nil { + return m.Body + } + return "" +} + +func (m *DirectHttpResponse) GetHeaders() map[string]string { + if m != nil { + return m.Headers + } + return nil +} + +func init() { + proto.RegisterType((*DirectHttpResponse)(nil), "istio.policy.v1beta1.DirectHttpResponse") + proto.RegisterEnum("istio.policy.v1beta1.HttpStatusCode", HttpStatusCode_name, HttpStatusCode_value) +} +func (x HttpStatusCode) String() string { + s, ok := HttpStatusCode_name[int32(x)] + if ok { + return s + } + return strconv.Itoa(int(x)) +} +func (this *DirectHttpResponse) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*DirectHttpResponse) + if !ok { + that2, ok := that.(DirectHttpResponse) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Code != that1.Code { + return false + } + if this.Body != that1.Body { + return false + } + if len(this.Headers) != len(that1.Headers) { + return false + } + for i := range this.Headers { + if this.Headers[i] != that1.Headers[i] { + return false + } + } + return true +} +func (this *DirectHttpResponse) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 7) + s = append(s, "&v1beta1.DirectHttpResponse{") + s = append(s, "Code: "+fmt.Sprintf("%#v", this.Code)+",\n") + s = append(s, "Body: "+fmt.Sprintf("%#v", this.Body)+",\n") + keysForHeaders := make([]string, 0, len(this.Headers)) + for k, _ := range this.Headers { + keysForHeaders = append(keysForHeaders, k) + } + sortkeys.Strings(keysForHeaders) + mapStringForHeaders := "map[string]string{" + for _, k := range keysForHeaders { + mapStringForHeaders += fmt.Sprintf("%#v: %#v,", k, this.Headers[k]) + } + mapStringForHeaders += "}" + if this.Headers != nil { + s = append(s, "Headers: "+mapStringForHeaders+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func valueToGoStringHttpResponse(v interface{}, typ string) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv) +} +func (m *DirectHttpResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DirectHttpResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Code != 0 { + dAtA[i] = 0x8 + i++ + i = encodeVarintHttpResponse(dAtA, i, uint64(m.Code)) + } + if len(m.Body) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintHttpResponse(dAtA, i, uint64(len(m.Body))) + i += copy(dAtA[i:], m.Body) + } + if len(m.Headers) > 0 { + for k, _ := range m.Headers { + dAtA[i] = 0x1a + i++ + v := m.Headers[k] + mapSize := 1 + len(k) + sovHttpResponse(uint64(len(k))) + 1 + len(v) + sovHttpResponse(uint64(len(v))) + i = encodeVarintHttpResponse(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintHttpResponse(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintHttpResponse(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } + return i, nil +} + +func encodeVarintHttpResponse(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *DirectHttpResponse) Size() (n int) { + var l int + _ = l + if m.Code != 0 { + n += 1 + sovHttpResponse(uint64(m.Code)) + } + l = len(m.Body) + if l > 0 { + n += 1 + l + sovHttpResponse(uint64(l)) + } + if len(m.Headers) > 0 { + for k, v := range m.Headers { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovHttpResponse(uint64(len(k))) + 1 + len(v) + sovHttpResponse(uint64(len(v))) + n += mapEntrySize + 1 + sovHttpResponse(uint64(mapEntrySize)) + } + } + return n +} + +func sovHttpResponse(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozHttpResponse(x uint64) (n int) { + return sovHttpResponse(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *DirectHttpResponse) String() string { + if this == nil { + return "nil" + } + keysForHeaders := make([]string, 0, len(this.Headers)) + for k, _ := range this.Headers { + keysForHeaders = append(keysForHeaders, k) + } + sortkeys.Strings(keysForHeaders) + mapStringForHeaders := "map[string]string{" + for _, k := range keysForHeaders { + mapStringForHeaders += fmt.Sprintf("%v: %v,", k, this.Headers[k]) + } + mapStringForHeaders += "}" + s := strings.Join([]string{`&DirectHttpResponse{`, + `Code:` + fmt.Sprintf("%v", this.Code) + `,`, + `Body:` + fmt.Sprintf("%v", this.Body) + `,`, + `Headers:` + mapStringForHeaders + `,`, + `}`, + }, "") + return s +} +func valueToStringHttpResponse(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *DirectHttpResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DirectHttpResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DirectHttpResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Code |= (HttpStatusCode(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Body", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHttpResponse + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Body = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Headers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHttpResponse + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Headers == nil { + m.Headers = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthHttpResponse + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthHttpResponse + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipHttpResponse(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthHttpResponse + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Headers[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipHttpResponse(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthHttpResponse + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipHttpResponse(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthHttpResponse + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHttpResponse + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipHttpResponse(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthHttpResponse = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowHttpResponse = fmt.Errorf("proto: integer overflow") +) + +func init() { proto.RegisterFile("policy/v1beta1/http_response.proto", fileDescriptorHttpResponse) } + +var fileDescriptorHttpResponse = []byte{ + // 1032 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x55, 0x4b, 0x8f, 0x1b, 0x45, + 0x10, 0xde, 0x71, 0xe7, 0xb5, 0x9d, 0xcd, 0xa6, 0xd3, 0xd9, 0x90, 0x25, 0x01, 0x6b, 0x15, 0x71, + 0x88, 0x38, 0x78, 0x95, 0x20, 0xa4, 0x28, 0xb7, 0xcd, 0xc6, 0x9b, 0x58, 0xac, 0x1d, 0xcb, 0x6b, + 0xe7, 0xc0, 0x05, 0xf5, 0x4e, 0x97, 0xed, 0x56, 0xc6, 0x5d, 0x93, 0x9e, 0xb2, 0x93, 0xe1, 0xc4, + 0x4f, 0x08, 0xef, 0xf7, 0xeb, 0x00, 0x44, 0x28, 0x21, 0x20, 0xb8, 0xf0, 0x0f, 0xc2, 0x3b, 0x47, + 0x8e, 0xc4, 0x5c, 0xb8, 0x91, 0x03, 0x6f, 0x10, 0xa0, 0x6e, 0x3f, 0xb4, 0x11, 0xe1, 0x36, 0x5d, + 0x53, 0x5f, 0xd5, 0x57, 0xdf, 0x57, 0x33, 0xcd, 0x8f, 0xa4, 0x98, 0x98, 0x38, 0x5f, 0x1e, 0x1c, + 0xdb, 0x04, 0x52, 0xc7, 0x96, 0xbb, 0x44, 0xe9, 0x13, 0x0e, 0xb2, 0x14, 0x6d, 0x06, 0xa5, 0xd4, + 0x21, 0xa1, 0x5c, 0x30, 0x19, 0x19, 0x2c, 0x8d, 0x32, 0x4b, 0xe3, 0xcc, 0x23, 0x3f, 0x46, 0x5c, + 0x9e, 0x36, 0x0e, 0x62, 0x3a, 0x4b, 0x94, 0x36, 0xc6, 0x10, 0x79, 0x82, 0x6f, 0x8b, 0x51, 0xc3, + 0x62, 0xb4, 0x14, 0x1d, 0x9d, 0x3f, 0xfe, 0x50, 0xe9, 0x5e, 0xd8, 0x92, 0x47, 0x6c, 0x90, 0xa2, + 0x7e, 0xb6, 0x8a, 0x1a, 0x1a, 0x01, 0x21, 0x25, 0xdf, 0xb6, 0x89, 0x3a, 0x5f, 0x2c, 0x2c, 0x45, + 0x47, 0x67, 0x1b, 0xe1, 0x59, 0x9e, 0xe3, 0x3b, 0xbb, 0xa0, 0x34, 0xb8, 0x6c, 0x91, 0x2d, 0xb1, + 0xa3, 0xbb, 0x8f, 0x3f, 0x7a, 0xef, 0x82, 0xff, 0x25, 0x52, 0x3a, 0x3b, 0xc2, 0x95, 0x2d, 0xb9, + 0xbc, 0x31, 0xa9, 0x72, 0xe8, 0x24, 0x9f, 0xdb, 0xfa, 0x42, 0x0a, 0xce, 0x2e, 0x40, 0x1e, 0xd8, + 0xce, 0x36, 0xfc, 0xa3, 0x5c, 0xe0, 0xdb, 0x07, 0x2a, 0xe9, 0xc3, 0x98, 0xc7, 0xe8, 0x70, 0xb2, + 0x70, 0x22, 0x7a, 0xf8, 0xd3, 0x59, 0x3e, 0x7f, 0x37, 0x73, 0x39, 0xcb, 0xb7, 0x97, 0x7b, 0x29, + 0xe5, 0x62, 0x46, 0xce, 0xf1, 0x5d, 0xab, 0x68, 0xc9, 0xd8, 0x3e, 0x08, 0x2d, 0x77, 0xf2, 0xc2, + 0xb9, 0xc7, 0xc4, 0xcd, 0x48, 0xce, 0xf1, 0x9d, 0xab, 0x0e, 0x14, 0x81, 0x16, 0x9f, 0x45, 0x72, + 0x0f, 0xdf, 0xb5, 0x12, 0xc7, 0x90, 0xfa, 0xe3, 0xe7, 0x91, 0x5c, 0xe2, 0x87, 0x6b, 0x68, 0x57, + 0xfa, 0xd4, 0x45, 0x67, 0x48, 0x91, 0x19, 0x40, 0xc5, 0xb6, 0xd1, 0xf5, 0x14, 0x19, 0xb4, 0xe2, + 0x8b, 0x48, 0xce, 0xf3, 0xd9, 0x1a, 0xfa, 0xba, 0x60, 0x49, 0x7c, 0x19, 0xc9, 0x7d, 0x7c, 0xae, + 0x01, 0x19, 0xd0, 0x24, 0xf4, 0x55, 0x24, 0xf7, 0xf3, 0xf9, 0xba, 0x72, 0x64, 0x54, 0x32, 0x09, + 0x7e, 0x1d, 0x49, 0xc1, 0x77, 0x57, 0xfb, 0x09, 0x99, 0x11, 0x57, 0xf1, 0x4d, 0x24, 0x17, 0xf8, + 0xde, 0x95, 0xc4, 0x81, 0xd2, 0x79, 0x03, 0x52, 0x74, 0x9e, 0xc1, 0xad, 0x48, 0xee, 0xe6, 0x3b, + 0x2a, 0xd5, 0x56, 0x06, 0x5a, 0x0c, 0x43, 0x4a, 0x00, 0xa5, 0x09, 0xac, 0x76, 0xd1, 0xc4, 0x90, + 0x89, 0x6b, 0x05, 0x79, 0x80, 0x8b, 0x2a, 0x0e, 0x40, 0xd7, 0xc1, 0xf5, 0x94, 0x05, 0x4b, 0x49, + 0x2e, 0xae, 0x17, 0x24, 0xe7, 0xdb, 0xd7, 0xb0, 0x6f, 0xb5, 0xf8, 0xa0, 0xe0, 0xc7, 0xda, 0x00, + 0x38, 0x47, 0x5d, 0x70, 0xe2, 0x46, 0xc1, 0x37, 0xaf, 0x21, 0x55, 0x51, 0x9b, 0xb6, 0x01, 0x2d, + 0x3e, 0x0c, 0x09, 0xad, 0x0c, 0xea, 0x0e, 0x2f, 0xe7, 0xe2, 0xa3, 0x82, 0xbc, 0x8f, 0xef, 0x6b, + 0x42, 0x2f, 0x45, 0xa7, 0x5c, 0xde, 0x00, 0x1d, 0xcc, 0x13, 0x1f, 0x87, 0xf8, 0xb4, 0xcb, 0x34, + 0xfe, 0x49, 0x41, 0xee, 0xe5, 0xfc, 0x94, 0xd2, 0x0d, 0xb8, 0xd8, 0x87, 0x8c, 0xc4, 0x15, 0xe6, + 0x65, 0x68, 0x59, 0x35, 0xd2, 0xed, 0x49, 0xd0, 0xe2, 0x69, 0xe6, 0xc9, 0xd7, 0x55, 0xde, 0x0b, + 0xc8, 0x8b, 0x7d, 0xe3, 0x40, 0x8b, 0x67, 0x98, 0xd7, 0x6f, 0x0d, 0xdd, 0xa6, 0xd1, 0x1a, 0xac, + 0x78, 0x96, 0x79, 0x22, 0x35, 0xa4, 0x11, 0xf1, 0xe7, 0x58, 0x98, 0x0d, 0xa8, 0x8b, 0xba, 0x86, + 0xb4, 0x92, 0x24, 0x78, 0x09, 0xb4, 0x78, 0x9e, 0x49, 0xc9, 0xf7, 0xf8, 0x40, 0x70, 0x4a, 0x6d, + 0x26, 0x20, 0x5e, 0x60, 0xde, 0xab, 0xc0, 0xdf, 0xbb, 0x05, 0x96, 0x4c, 0x1c, 0x3c, 0x9a, 0xf6, + 0x7a, 0x91, 0x79, 0x23, 0xc6, 0x14, 0x9b, 0xa6, 0x07, 0xd8, 0x27, 0xf1, 0x52, 0x68, 0xb8, 0x8a, + 0xb6, 0x9d, 0x98, 0x98, 0xc4, 0xcb, 0x4c, 0xce, 0xf2, 0x6d, 0x67, 0xd0, 0x82, 0x78, 0x25, 0xa4, + 0xaf, 0x83, 0xed, 0x50, 0x77, 0x5a, 0xe3, 0x55, 0x26, 0x0f, 0x72, 0x59, 0x77, 0x10, 0xa3, 0xd5, + 0xc6, 0x97, 0x5f, 0x53, 0x26, 0x01, 0x2d, 0x5e, 0x9b, 0x8c, 0x97, 0xa0, 0xd2, 0x4d, 0xc4, 0x75, + 0xe5, 0x3a, 0x20, 0x5e, 0x67, 0x5e, 0x98, 0x56, 0xa3, 0xe2, 0x23, 0x68, 0x3b, 0xe2, 0x0d, 0x26, + 0xef, 0xe7, 0x0b, 0x2d, 0x9b, 0xf5, 0xd3, 0x91, 0xc3, 0x55, 0xd0, 0x46, 0x35, 0xf3, 0x14, 0xc4, + 0x9b, 0x4c, 0x2e, 0xf2, 0xfd, 0x0d, 0x65, 0x3b, 0x50, 0x43, 0xda, 0x50, 0x64, 0xb2, 0xb6, 0x09, + 0xa3, 0xbd, 0xc5, 0xbc, 0xec, 0xe5, 0xcb, 0x29, 0xc4, 0xa4, 0xb6, 0xf4, 0x7c, 0x3b, 0x90, 0xa9, + 0x9a, 0x6c, 0x64, 0x03, 0x4c, 0xe5, 0x7f, 0x27, 0x94, 0x6a, 0xd9, 0xd4, 0x61, 0x0c, 0x59, 0xe6, + 0x8b, 0x94, 0x2d, 0x19, 0xca, 0xc5, 0xbb, 0xcc, 0xef, 0xd3, 0x3a, 0xc6, 0x17, 0x40, 0x8b, 0xf7, + 0x82, 0xba, 0xa3, 0x62, 0xa7, 0x21, 0x05, 0xab, 0xc1, 0xc6, 0xb9, 0xb8, 0x1a, 0x46, 0x69, 0xa5, + 0x1d, 0xa7, 0x34, 0x4c, 0x27, 0x7f, 0x3f, 0x30, 0xdf, 0x3a, 0xf9, 0xf4, 0xd5, 0xb5, 0x00, 0x68, + 0x22, 0x56, 0x95, 0xcd, 0xc7, 0x1c, 0x32, 0x71, 0x3d, 0x18, 0x32, 0x3e, 0x8e, 0xbe, 0xe8, 0x35, + 0x03, 0x89, 0xce, 0xa6, 0xea, 0xdc, 0x08, 0x34, 0x2b, 0x96, 0xc0, 0x59, 0x95, 0x6c, 0x80, 0x1b, + 0x80, 0x2b, 0x3b, 0x87, 0x4e, 0xfc, 0x14, 0xb4, 0xaf, 0x21, 0x55, 0x7a, 0x69, 0x02, 0x7e, 0x63, + 0x40, 0x8b, 0x9f, 0xd9, 0x78, 0xcb, 0xce, 0x28, 0x82, 0x4b, 0x2a, 0x17, 0xbf, 0x84, 0xf9, 0x3d, + 0xce, 0xc4, 0xd0, 0xb2, 0x6a, 0xa0, 0x4c, 0x12, 0x04, 0xfb, 0x35, 0xc0, 0xc7, 0x69, 0x13, 0xa7, + 0x7f, 0x63, 0xf2, 0x01, 0x7e, 0xf0, 0x6c, 0xb3, 0x59, 0x3f, 0x0f, 0x2e, 0x33, 0x68, 0xbd, 0xca, + 0x13, 0x1b, 0xc4, 0xef, 0x4c, 0x1e, 0xe2, 0x07, 0xce, 0x2b, 0x67, 0x94, 0xa5, 0x95, 0x24, 0xc3, + 0x1a, 0x74, 0x90, 0x8c, 0x22, 0xc8, 0xc4, 0x1f, 0x63, 0x9e, 0x59, 0xbf, 0xdd, 0x36, 0xb1, 0x01, + 0x4b, 0x1b, 0x84, 0x4e, 0x75, 0x40, 0xfc, 0x19, 0xf6, 0x7c, 0x1d, 0x31, 0x3d, 0x0d, 0x14, 0x2c, + 0x10, 0x7f, 0xb1, 0xf1, 0xc7, 0x55, 0xbe, 0x4c, 0x5e, 0x51, 0x2d, 0xfe, 0x66, 0xf2, 0x08, 0x7f, + 0xb0, 0x06, 0x74, 0x09, 0xdd, 0x85, 0xff, 0xd9, 0xcd, 0x7f, 0xd8, 0xa9, 0xca, 0xad, 0xdb, 0xc5, + 0x99, 0x6f, 0x6f, 0x17, 0x67, 0xee, 0xdc, 0x2e, 0x46, 0x4f, 0x0d, 0x8b, 0xd1, 0xd5, 0x61, 0x31, + 0xba, 0x39, 0x2c, 0x46, 0xb7, 0x86, 0xc5, 0xe8, 0xbb, 0x61, 0x31, 0xfa, 0x61, 0x58, 0x9c, 0xb9, + 0x33, 0x2c, 0x46, 0x57, 0xbe, 0x2f, 0xce, 0x3c, 0x7e, 0x78, 0xf4, 0x93, 0x35, 0xb8, 0xac, 0x52, + 0xb3, 0x7c, 0xf7, 0x15, 0xb1, 0xb9, 0x23, 0xdc, 0x0a, 0x8f, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, + 0xd9, 0x97, 0x1d, 0x7f, 0x3b, 0x06, 0x00, 0x00, +} diff --git a/vendor/istio.io/api/policy/v1beta1/http_response.proto b/vendor/istio.io/api/policy/v1beta1/http_response.proto new file mode 100644 index 000000000000..5da35120a820 --- /dev/null +++ b/vendor/istio.io/api/policy/v1beta1/http_response.proto @@ -0,0 +1,101 @@ +// Copyright 2019 Istio Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package istio.policy.v1beta1; + +option go_package="istio.io/api/policy/v1beta1"; + +// Direct HTTP response for a client-facing error message which can be attached +// to an RPC error. +message DirectHttpResponse { + // Optional HTTP status code. If not set, RPC error code is used. + HttpStatusCode code = 1; + + // HTTP response body. + string body = 2; + + // Optional HTTP response headers. + map headers = 3; +} + +// HTTP response codes. +// For more details: http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml +enum HttpStatusCode { + // Empty - This code not part of the HTTP status code specification, but it is needed for proto + // `enum` type. + Empty = 0; + + Continue = 100; + + OK = 200; + Created = 201; + Accepted = 202; + NonAuthoritativeInformation = 203; + NoContent = 204; + ResetContent = 205; + PartialContent = 206; + MultiStatus = 207; + AlreadyReported = 208; + IMUsed = 226; + + MultipleChoices = 300; + MovedPermanently = 301; + Found = 302; + SeeOther = 303; + NotModified = 304; + UseProxy = 305; + TemporaryRedirect = 307; + PermanentRedirect = 308; + + BadRequest = 400; + Unauthorized = 401; + PaymentRequired = 402; + Forbidden = 403; + NotFound = 404; + MethodNotAllowed = 405; + NotAcceptable = 406; + ProxyAuthenticationRequired = 407; + RequestTimeout = 408; + Conflict = 409; + Gone = 410; + LengthRequired = 411; + PreconditionFailed = 412; + PayloadTooLarge = 413; + URITooLong = 414; + UnsupportedMediaType = 415; + RangeNotSatisfiable = 416; + ExpectationFailed = 417; + MisdirectedRequest = 421; + UnprocessableEntity = 422; + Locked = 423; + FailedDependency = 424; + UpgradeRequired = 426; + PreconditionRequired = 428; + TooManyRequests = 429; + RequestHeaderFieldsTooLarge = 431; + + InternalServerError = 500; + NotImplemented = 501; + BadGateway = 502; + ServiceUnavailable = 503; + GatewayTimeout = 504; + HTTPVersionNotSupported = 505; + VariantAlsoNegotiates = 506; + InsufficientStorage = 507; + LoopDetected = 508; + NotExtended = 510; + NetworkAuthenticationRequired = 511; +} diff --git a/vendor/istio.io/api/policy/v1beta1/istio.policy.v1beta1.pb.html b/vendor/istio.io/api/policy/v1beta1/istio.policy.v1beta1.pb.html index 39c716a87e90..8f0e37473fa3 100644 --- a/vendor/istio.io/api/policy/v1beta1/istio.policy.v1beta1.pb.html +++ b/vendor/istio.io/api/policy/v1beta1/istio.policy.v1beta1.pb.html @@ -4,7 +4,7 @@ location: https://istio.io/docs/reference/config/policy-and-telemetry/istio.policy.v1beta1.html layout: protoc-gen-docs generator: protoc-gen-docs -number_of_entries: 23 +number_of_entries: 25 ---

Describes the rules used to configure Mixer’s policy and telemetry features.

@@ -288,6 +288,47 @@

DNSName

+ + +
FieldTypeDescription
fromstring -

Originating locality, ‘/’ separated, e.g. ‘region/zone/sub_zone’.

- -
tomap<string, uint32> -

Upstream locality to loadbalancing weight map. The sum of all weights should be == 100. -Should assign loadbalancing weight for all localities, otherwise the traffic are not routed -following the percentage of weight.

-

DNSName encoded as string.

+
+
+

DirectHttpResponse

+
+

Direct HTTP response for a client-facing error message which can be attached +to an RPC error.

+ + + + + + + + + + + + + + + + + + + + + + + + @@ -493,6 +534,310 @@

Handler

Optional. Information on how to connect to the out-of-process adapter. This is used if the adapter is not compiled into Mixer binary and is running as a separate process.

+ + + +
FieldTypeDescription
codeHttpStatusCode +

Optional HTTP status code. If not set, RPC error code is used.

+ +
bodystring +

HTTP response body.

+ +
headersmap<string, string> +

Optional HTTP response headers.

+
+
+

HttpStatusCode

+
+

HTTP response codes. +For more details: http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -544,7 +889,7 @@

Instance

params: value: 1 dimensions: - source: source.service + source: source.name destination_ip: destination.ip @@ -731,7 +1076,7 @@

Rule

The following example instructs Mixer to invoke ‘prometheus-handler’ handler for all services and pass it the instance constructed using the ‘RequestCountByService’ instance.

-
- match: destination.service == "*"
+
- match: match(destination.service.host, "*")
   actions:
   - handler: prometheus-handler
     instances:
@@ -760,7 +1105,7 @@ 

Rule

  • an empty match evaluates to true
  • true, a boolean literal; a rule with this match will always be executed
  • -
  • destination.service == ratings* selects any request targeting a service whose +
  • match(destination.service.host, "ratings.*) selects any request targeting a service whose name starts with “ratings”
  • attr1 == "20" && attr2 == "30" logical AND, OR, and NOT are also available
@@ -780,7 +1125,7 @@

Rule

@@ -789,7 +1134,7 @@

Rule

diff --git a/vendor/istio.io/api/proto.lock b/vendor/istio.io/api/proto.lock index 67af790a4d05..0f0232352c34 100644 --- a/vendor/istio.io/api/proto.lock +++ b/vendor/istio.io/api/proto.lock @@ -958,6 +958,11 @@ "type": "ConfigSource", "is_repeated": true }, + { + "id": 31, + "name": "locality_lb_setting", + "type": "LocalityLoadBalancerSetting" + }, { "id": 23, "name": "enable_sds_token_mount", @@ -1005,6 +1010,60 @@ "type": "istio.networking.v1alpha3.TLSSettings" } ] + }, + { + "name": "LocalityLoadBalancerSetting", + "fields": [ + { + "id": 1, + "name": "distribute", + "type": "Distribute", + "is_repeated": true + }, + { + "id": 2, + "name": "failover", + "type": "Failover", + "is_repeated": true + } + ], + "messages": [ + { + "name": "Distribute", + "fields": [ + { + "id": 1, + "name": "from", + "type": "string" + } + ], + "maps": [ + { + "key_type": "string", + "field": { + "id": 2, + "name": "to", + "type": "uint32" + } + } + ] + }, + { + "name": "Failover", + "fields": [ + { + "id": 1, + "name": "from", + "type": "string" + }, + { + "id": 2, + "name": "to", + "type": "string" + } + ] + } + ] } ] } @@ -2701,12 +2760,6 @@ "id": 2, "name": "consistent_hash", "type": "ConsistentHashLB" - }, - { - "id": 3, - "name": "locality_weight_settings", - "type": "LocalityWeightSetting", - "is_repeated": true } ], "messages": [ @@ -2756,26 +2809,6 @@ ] } ] - }, - { - "name": "LocalityWeightSetting", - "fields": [ - { - "id": 1, - "name": "from", - "type": "string" - } - ], - "maps": [ - { - "key_type": "string", - "field": { - "id": 2, - "name": "to", - "type": "uint32" - } - } - ] } ] }, @@ -4629,6 +4662,273 @@ ] } }, + { + "protopath": "policy:/:v1beta1:/:http_response.proto", + "def": { + "enums": [ + { + "name": "HttpStatusCode", + "enum_fields": [ + { + "name": "Empty", + "integer": 0 + }, + { + "name": "Continue", + "integer": 100 + }, + { + "name": "OK", + "integer": 200 + }, + { + "name": "Created", + "integer": 201 + }, + { + "name": "Accepted", + "integer": 202 + }, + { + "name": "NonAuthoritativeInformation", + "integer": 203 + }, + { + "name": "NoContent", + "integer": 204 + }, + { + "name": "ResetContent", + "integer": 205 + }, + { + "name": "PartialContent", + "integer": 206 + }, + { + "name": "MultiStatus", + "integer": 207 + }, + { + "name": "AlreadyReported", + "integer": 208 + }, + { + "name": "IMUsed", + "integer": 226 + }, + { + "name": "MultipleChoices", + "integer": 300 + }, + { + "name": "MovedPermanently", + "integer": 301 + }, + { + "name": "Found", + "integer": 302 + }, + { + "name": "SeeOther", + "integer": 303 + }, + { + "name": "NotModified", + "integer": 304 + }, + { + "name": "UseProxy", + "integer": 305 + }, + { + "name": "TemporaryRedirect", + "integer": 307 + }, + { + "name": "PermanentRedirect", + "integer": 308 + }, + { + "name": "BadRequest", + "integer": 400 + }, + { + "name": "Unauthorized", + "integer": 401 + }, + { + "name": "PaymentRequired", + "integer": 402 + }, + { + "name": "Forbidden", + "integer": 403 + }, + { + "name": "NotFound", + "integer": 404 + }, + { + "name": "MethodNotAllowed", + "integer": 405 + }, + { + "name": "NotAcceptable", + "integer": 406 + }, + { + "name": "ProxyAuthenticationRequired", + "integer": 407 + }, + { + "name": "RequestTimeout", + "integer": 408 + }, + { + "name": "Conflict", + "integer": 409 + }, + { + "name": "Gone", + "integer": 410 + }, + { + "name": "LengthRequired", + "integer": 411 + }, + { + "name": "PreconditionFailed", + "integer": 412 + }, + { + "name": "PayloadTooLarge", + "integer": 413 + }, + { + "name": "URITooLong", + "integer": 414 + }, + { + "name": "UnsupportedMediaType", + "integer": 415 + }, + { + "name": "RangeNotSatisfiable", + "integer": 416 + }, + { + "name": "ExpectationFailed", + "integer": 417 + }, + { + "name": "MisdirectedRequest", + "integer": 421 + }, + { + "name": "UnprocessableEntity", + "integer": 422 + }, + { + "name": "Locked", + "integer": 423 + }, + { + "name": "FailedDependency", + "integer": 424 + }, + { + "name": "UpgradeRequired", + "integer": 426 + }, + { + "name": "PreconditionRequired", + "integer": 428 + }, + { + "name": "TooManyRequests", + "integer": 429 + }, + { + "name": "RequestHeaderFieldsTooLarge", + "integer": 431 + }, + { + "name": "InternalServerError", + "integer": 500 + }, + { + "name": "NotImplemented", + "integer": 501 + }, + { + "name": "BadGateway", + "integer": 502 + }, + { + "name": "ServiceUnavailable", + "integer": 503 + }, + { + "name": "GatewayTimeout", + "integer": 504 + }, + { + "name": "HTTPVersionNotSupported", + "integer": 505 + }, + { + "name": "VariantAlsoNegotiates", + "integer": 506 + }, + { + "name": "InsufficientStorage", + "integer": 507 + }, + { + "name": "LoopDetected", + "integer": 508 + }, + { + "name": "NotExtended", + "integer": 510 + }, + { + "name": "NetworkAuthenticationRequired", + "integer": 511 + } + ] + } + ], + "messages": [ + { + "name": "DirectHttpResponse", + "fields": [ + { + "id": 1, + "name": "code", + "type": "HttpStatusCode" + }, + { + "id": 2, + "name": "body", + "type": "string" + } + ], + "maps": [ + { + "key_type": "string", + "field": { + "id": 3, + "name": "headers", + "type": "string" + } + } + ] + } + ] + } + }, { "protopath": "policy:/:v1beta1:/:type.proto", "def": { diff --git a/vendor/istio.io/api/prototool.yaml b/vendor/istio.io/api/prototool.yaml index ebf22bd55bb6..2ef3f7402192 100644 --- a/vendor/istio.io/api/prototool.yaml +++ b/vendor/istio.io/api/prototool.yaml @@ -13,6 +13,7 @@ lint: - id: ENUM_FIELD_NAMES_UPPER_SNAKE_CASE files: - networking/v1alpha3/gateway.proto + - policy/v1beta1/http_response.proto - id: REQUEST_RESPONSE_TYPES_UNIQUE files: - mcp/v1alpha1/mcp.proto diff --git a/vendor/istio.io/api/python/istio_api/mesh/v1alpha1/config_pb2.py b/vendor/istio.io/api/python/istio_api/mesh/v1alpha1/config_pb2.py index 1893c3beda18..54e8726de410 100644 --- a/vendor/istio.io/api/python/istio_api/mesh/v1alpha1/config_pb2.py +++ b/vendor/istio.io/api/python/istio_api/mesh/v1alpha1/config_pb2.py @@ -22,7 +22,7 @@ name='mesh/v1alpha1/config.proto', package='istio.mesh.v1alpha1', syntax='proto3', - serialized_pb=_b('\n\x1amesh/v1alpha1/config.proto\x12\x13istio.mesh.v1alpha1\x1a\x1egoogle/protobuf/duration.proto\x1a\x19mesh/v1alpha1/proxy.proto\x1a*networking/v1alpha3/destination_rule.proto\"\x96\x0c\n\nMeshConfig\x12\x1a\n\x12mixer_check_server\x18\x01 \x01(\t\x12\x1b\n\x13mixer_report_server\x18\x02 \x01(\t\x12\x1d\n\x15\x64isable_policy_checks\x18\x03 \x01(\x08\x12\x1e\n\x16policy_check_fail_open\x18\x19 \x01(\x08\x12-\n%sidecar_to_telemetry_session_affinity\x18\x1e \x01(\x08\x12\x19\n\x11proxy_listen_port\x18\x04 \x01(\x05\x12\x17\n\x0fproxy_http_port\x18\x05 \x01(\x05\x12\x32\n\x0f\x63onnect_timeout\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x61\n\rtcp_keepalive\x18\x1c \x01(\x0b\x32J.istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive\x12\x15\n\ringress_class\x18\x07 \x01(\t\x12\x17\n\x0fingress_service\x18\x08 \x01(\t\x12V\n\x17ingress_controller_mode\x18\t \x01(\x0e\x32\x35.istio.mesh.v1alpha1.MeshConfig.IngressControllerMode\x12\x43\n\x0b\x61uth_policy\x18\n \x01(\x0e\x32*.istio.mesh.v1alpha1.MeshConfig.AuthPolicyB\x02\x18\x01\x12\x38\n\x11rds_refresh_delay\x18\x0b \x01(\x0b\x32\x19.google.protobuf.DurationB\x02\x18\x01\x12\x16\n\x0e\x65nable_tracing\x18\x0c \x01(\x08\x12\x17\n\x0f\x61\x63\x63\x65ss_log_file\x18\r \x01(\t\x12\x19\n\x11\x61\x63\x63\x65ss_log_format\x18\x18 \x01(\t\x12N\n\x13\x61\x63\x63\x65ss_log_encoding\x18\x1b \x01(\x0e\x32\x31.istio.mesh.v1alpha1.MeshConfig.AccessLogEncoding\x12\x38\n\x0e\x64\x65\x66\x61ult_config\x18\x0e \x01(\x0b\x32 .istio.mesh.v1alpha1.ProxyConfig\x12\x19\n\rmixer_address\x18\x10 \x01(\tB\x02\x18\x01\x12V\n\x17outbound_traffic_policy\x18\x11 \x01(\x0b\x32\x35.istio.mesh.v1alpha1.MeshConfig.OutboundTrafficPolicy\x12\'\n\x1f\x65nable_client_side_policy_check\x18\x13 \x01(\x08\x12\x14\n\x0csds_uds_path\x18\x14 \x01(\t\x12\x38\n\x11sds_refresh_delay\x18\x15 \x01(\x0b\x32\x19.google.protobuf.DurationB\x02\x18\x01\x12\x39\n\x0e\x63onfig_sources\x18\x16 \x03(\x0b\x32!.istio.mesh.v1alpha1.ConfigSource\x12\x1e\n\x16\x65nable_sds_token_mount\x18\x17 \x01(\x08\x12\x1a\n\x12sds_use_k8s_sa_jwt\x18\x1d \x01(\x08\x12\x14\n\x0ctrust_domain\x18\x1a \x01(\t\x1a\xa7\x01\n\x15OutboundTrafficPolicy\x12H\n\x04mode\x18\x01 \x01(\x0e\x32:.istio.mesh.v1alpha1.MeshConfig.OutboundTrafficPolicy.Mode\"D\n\x04Mode\x12\x11\n\rREGISTRY_ONLY\x10\x00\x12\r\n\tALLOW_ANY\x10\x01\"\x04\x08\x02\x10\x02*\x14VIRTUAL_SERVICE_ONLY\"9\n\x15IngressControllerMode\x12\x07\n\x03OFF\x10\x00\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x01\x12\n\n\x06STRICT\x10\x02\"&\n\nAuthPolicy\x12\x08\n\x04NONE\x10\x00\x12\x0e\n\nMUTUAL_TLS\x10\x01\"\'\n\x11\x41\x63\x63\x65ssLogEncoding\x12\x08\n\x04TEXT\x10\x00\x12\x08\n\x04JSON\x10\x01J\x04\x08\x0f\x10\x10J\x04\x08\x12\x10\x13\"]\n\x0c\x43onfigSource\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12<\n\x0ctls_settings\x18\x02 \x01(\x0b\x32&.istio.networking.v1alpha3.TLSSettingsB\x1cZ\x1aistio.io/api/mesh/v1alpha1b\x06proto3') + serialized_pb=_b('\n\x1amesh/v1alpha1/config.proto\x12\x13istio.mesh.v1alpha1\x1a\x1egoogle/protobuf/duration.proto\x1a\x19mesh/v1alpha1/proxy.proto\x1a*networking/v1alpha3/destination_rule.proto\"\xe5\x0c\n\nMeshConfig\x12\x1a\n\x12mixer_check_server\x18\x01 \x01(\t\x12\x1b\n\x13mixer_report_server\x18\x02 \x01(\t\x12\x1d\n\x15\x64isable_policy_checks\x18\x03 \x01(\x08\x12\x1e\n\x16policy_check_fail_open\x18\x19 \x01(\x08\x12-\n%sidecar_to_telemetry_session_affinity\x18\x1e \x01(\x08\x12\x19\n\x11proxy_listen_port\x18\x04 \x01(\x05\x12\x17\n\x0fproxy_http_port\x18\x05 \x01(\x05\x12\x32\n\x0f\x63onnect_timeout\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x61\n\rtcp_keepalive\x18\x1c \x01(\x0b\x32J.istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive\x12\x15\n\ringress_class\x18\x07 \x01(\t\x12\x17\n\x0fingress_service\x18\x08 \x01(\t\x12V\n\x17ingress_controller_mode\x18\t \x01(\x0e\x32\x35.istio.mesh.v1alpha1.MeshConfig.IngressControllerMode\x12\x43\n\x0b\x61uth_policy\x18\n \x01(\x0e\x32*.istio.mesh.v1alpha1.MeshConfig.AuthPolicyB\x02\x18\x01\x12\x38\n\x11rds_refresh_delay\x18\x0b \x01(\x0b\x32\x19.google.protobuf.DurationB\x02\x18\x01\x12\x16\n\x0e\x65nable_tracing\x18\x0c \x01(\x08\x12\x17\n\x0f\x61\x63\x63\x65ss_log_file\x18\r \x01(\t\x12\x19\n\x11\x61\x63\x63\x65ss_log_format\x18\x18 \x01(\t\x12N\n\x13\x61\x63\x63\x65ss_log_encoding\x18\x1b \x01(\x0e\x32\x31.istio.mesh.v1alpha1.MeshConfig.AccessLogEncoding\x12\x38\n\x0e\x64\x65\x66\x61ult_config\x18\x0e \x01(\x0b\x32 .istio.mesh.v1alpha1.ProxyConfig\x12\x19\n\rmixer_address\x18\x10 \x01(\tB\x02\x18\x01\x12V\n\x17outbound_traffic_policy\x18\x11 \x01(\x0b\x32\x35.istio.mesh.v1alpha1.MeshConfig.OutboundTrafficPolicy\x12\'\n\x1f\x65nable_client_side_policy_check\x18\x13 \x01(\x08\x12\x14\n\x0csds_uds_path\x18\x14 \x01(\t\x12\x38\n\x11sds_refresh_delay\x18\x15 \x01(\x0b\x32\x19.google.protobuf.DurationB\x02\x18\x01\x12\x39\n\x0e\x63onfig_sources\x18\x16 \x03(\x0b\x32!.istio.mesh.v1alpha1.ConfigSource\x12M\n\x13locality_lb_setting\x18\x1f \x01(\x0b\x32\x30.istio.mesh.v1alpha1.LocalityLoadBalancerSetting\x12\x1e\n\x16\x65nable_sds_token_mount\x18\x17 \x01(\x08\x12\x1a\n\x12sds_use_k8s_sa_jwt\x18\x1d \x01(\x08\x12\x14\n\x0ctrust_domain\x18\x1a \x01(\t\x1a\xa7\x01\n\x15OutboundTrafficPolicy\x12H\n\x04mode\x18\x01 \x01(\x0e\x32:.istio.mesh.v1alpha1.MeshConfig.OutboundTrafficPolicy.Mode\"D\n\x04Mode\x12\x11\n\rREGISTRY_ONLY\x10\x00\x12\r\n\tALLOW_ANY\x10\x01\"\x04\x08\x02\x10\x02*\x14VIRTUAL_SERVICE_ONLY\"9\n\x15IngressControllerMode\x12\x07\n\x03OFF\x10\x00\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x01\x12\n\n\x06STRICT\x10\x02\"&\n\nAuthPolicy\x12\x08\n\x04NONE\x10\x00\x12\x0e\n\nMUTUAL_TLS\x10\x01\"\'\n\x11\x41\x63\x63\x65ssLogEncoding\x12\x08\n\x04TEXT\x10\x00\x12\x08\n\x04JSON\x10\x01J\x04\x08\x0f\x10\x10J\x04\x08\x12\x10\x13\"]\n\x0c\x43onfigSource\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12<\n\x0ctls_settings\x18\x02 \x01(\x0b\x32&.istio.networking.v1alpha3.TLSSettings\"\xfa\x02\n\x1bLocalityLoadBalancerSetting\x12O\n\ndistribute\x18\x01 \x03(\x0b\x32;.istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute\x12K\n\x08\x66\x61ilover\x18\x02 \x03(\x0b\x32\x39.istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Failover\x1a\x96\x01\n\nDistribute\x12\x0c\n\x04\x66rom\x18\x01 \x01(\t\x12O\n\x02to\x18\x02 \x03(\x0b\x32\x43.istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute.ToEntry\x1a)\n\x07ToEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a$\n\x08\x46\x61ilover\x12\x0c\n\x04\x66rom\x18\x01 \x01(\t\x12\n\n\x02to\x18\x02 \x01(\tB\x1cZ\x1aistio.io/api/mesh/v1alpha1b\x06proto3') , dependencies=[google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,mesh_dot_v1alpha1_dot_proxy__pb2.DESCRIPTOR,networking_dot_v1alpha3_dot_destination__rule__pb2.DESCRIPTOR,]) @@ -45,8 +45,8 @@ ], containing_type=None, options=None, - serialized_start=1493, - serialized_end=1561, + serialized_start=1572, + serialized_end=1640, ) _sym_db.RegisterEnumDescriptor(_MESHCONFIG_OUTBOUNDTRAFFICPOLICY_MODE) @@ -71,8 +71,8 @@ ], containing_type=None, options=None, - serialized_start=1563, - serialized_end=1620, + serialized_start=1642, + serialized_end=1699, ) _sym_db.RegisterEnumDescriptor(_MESHCONFIG_INGRESSCONTROLLERMODE) @@ -93,8 +93,8 @@ ], containing_type=None, options=None, - serialized_start=1622, - serialized_end=1660, + serialized_start=1701, + serialized_end=1739, ) _sym_db.RegisterEnumDescriptor(_MESHCONFIG_AUTHPOLICY) @@ -115,8 +115,8 @@ ], containing_type=None, options=None, - serialized_start=1662, - serialized_end=1701, + serialized_start=1741, + serialized_end=1780, ) _sym_db.RegisterEnumDescriptor(_MESHCONFIG_ACCESSLOGENCODING) @@ -148,8 +148,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1394, - serialized_end=1561, + serialized_start=1473, + serialized_end=1640, ) _MESHCONFIG = _descriptor.Descriptor( @@ -335,21 +335,28 @@ is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='enable_sds_token_mount', full_name='istio.mesh.v1alpha1.MeshConfig.enable_sds_token_mount', index=25, + name='locality_lb_setting', full_name='istio.mesh.v1alpha1.MeshConfig.locality_lb_setting', index=25, + number=31, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='enable_sds_token_mount', full_name='istio.mesh.v1alpha1.MeshConfig.enable_sds_token_mount', index=26, number=23, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='sds_use_k8s_sa_jwt', full_name='istio.mesh.v1alpha1.MeshConfig.sds_use_k8s_sa_jwt', index=26, + name='sds_use_k8s_sa_jwt', full_name='istio.mesh.v1alpha1.MeshConfig.sds_use_k8s_sa_jwt', index=27, number=29, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='trust_domain', full_name='istio.mesh.v1alpha1.MeshConfig.trust_domain', index=27, + name='trust_domain', full_name='istio.mesh.v1alpha1.MeshConfig.trust_domain', index=28, number=26, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, @@ -371,7 +378,7 @@ oneofs=[ ], serialized_start=155, - serialized_end=1713, + serialized_end=1792, ) @@ -408,8 +415,157 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1715, - serialized_end=1808, + serialized_start=1794, + serialized_end=1887, +) + + +_LOCALITYLOADBALANCERSETTING_DISTRIBUTE_TOENTRY = _descriptor.Descriptor( + name='ToEntry', + full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute.ToEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute.ToEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='value', full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute.ToEntry.value', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2189, + serialized_end=2230, +) + +_LOCALITYLOADBALANCERSETTING_DISTRIBUTE = _descriptor.Descriptor( + name='Distribute', + full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='from', full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute.from', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='to', full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute.to', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[_LOCALITYLOADBALANCERSETTING_DISTRIBUTE_TOENTRY, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2080, + serialized_end=2230, +) + +_LOCALITYLOADBALANCERSETTING_FAILOVER = _descriptor.Descriptor( + name='Failover', + full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Failover', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='from', full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Failover.from', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='to', full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Failover.to', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2232, + serialized_end=2268, +) + +_LOCALITYLOADBALANCERSETTING = _descriptor.Descriptor( + name='LocalityLoadBalancerSetting', + full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='distribute', full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.distribute', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='failover', full_name='istio.mesh.v1alpha1.LocalityLoadBalancerSetting.failover', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[_LOCALITYLOADBALANCERSETTING_DISTRIBUTE, _LOCALITYLOADBALANCERSETTING_FAILOVER, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1890, + serialized_end=2268, ) _MESHCONFIG_OUTBOUNDTRAFFICPOLICY.fields_by_name['mode'].enum_type = _MESHCONFIG_OUTBOUNDTRAFFICPOLICY_MODE @@ -425,12 +581,20 @@ _MESHCONFIG.fields_by_name['outbound_traffic_policy'].message_type = _MESHCONFIG_OUTBOUNDTRAFFICPOLICY _MESHCONFIG.fields_by_name['sds_refresh_delay'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION _MESHCONFIG.fields_by_name['config_sources'].message_type = _CONFIGSOURCE +_MESHCONFIG.fields_by_name['locality_lb_setting'].message_type = _LOCALITYLOADBALANCERSETTING _MESHCONFIG_INGRESSCONTROLLERMODE.containing_type = _MESHCONFIG _MESHCONFIG_AUTHPOLICY.containing_type = _MESHCONFIG _MESHCONFIG_ACCESSLOGENCODING.containing_type = _MESHCONFIG _CONFIGSOURCE.fields_by_name['tls_settings'].message_type = networking_dot_v1alpha3_dot_destination__rule__pb2._TLSSETTINGS +_LOCALITYLOADBALANCERSETTING_DISTRIBUTE_TOENTRY.containing_type = _LOCALITYLOADBALANCERSETTING_DISTRIBUTE +_LOCALITYLOADBALANCERSETTING_DISTRIBUTE.fields_by_name['to'].message_type = _LOCALITYLOADBALANCERSETTING_DISTRIBUTE_TOENTRY +_LOCALITYLOADBALANCERSETTING_DISTRIBUTE.containing_type = _LOCALITYLOADBALANCERSETTING +_LOCALITYLOADBALANCERSETTING_FAILOVER.containing_type = _LOCALITYLOADBALANCERSETTING +_LOCALITYLOADBALANCERSETTING.fields_by_name['distribute'].message_type = _LOCALITYLOADBALANCERSETTING_DISTRIBUTE +_LOCALITYLOADBALANCERSETTING.fields_by_name['failover'].message_type = _LOCALITYLOADBALANCERSETTING_FAILOVER DESCRIPTOR.message_types_by_name['MeshConfig'] = _MESHCONFIG DESCRIPTOR.message_types_by_name['ConfigSource'] = _CONFIGSOURCE +DESCRIPTOR.message_types_by_name['LocalityLoadBalancerSetting'] = _LOCALITYLOADBALANCERSETTING _sym_db.RegisterFileDescriptor(DESCRIPTOR) MeshConfig = _reflection.GeneratedProtocolMessageType('MeshConfig', (_message.Message,), dict( @@ -455,6 +619,37 @@ )) _sym_db.RegisterMessage(ConfigSource) +LocalityLoadBalancerSetting = _reflection.GeneratedProtocolMessageType('LocalityLoadBalancerSetting', (_message.Message,), dict( + + Distribute = _reflection.GeneratedProtocolMessageType('Distribute', (_message.Message,), dict( + + ToEntry = _reflection.GeneratedProtocolMessageType('ToEntry', (_message.Message,), dict( + DESCRIPTOR = _LOCALITYLOADBALANCERSETTING_DISTRIBUTE_TOENTRY, + __module__ = 'mesh.v1alpha1.config_pb2' + # @@protoc_insertion_point(class_scope:istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute.ToEntry) + )) + , + DESCRIPTOR = _LOCALITYLOADBALANCERSETTING_DISTRIBUTE, + __module__ = 'mesh.v1alpha1.config_pb2' + # @@protoc_insertion_point(class_scope:istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Distribute) + )) + , + + Failover = _reflection.GeneratedProtocolMessageType('Failover', (_message.Message,), dict( + DESCRIPTOR = _LOCALITYLOADBALANCERSETTING_FAILOVER, + __module__ = 'mesh.v1alpha1.config_pb2' + # @@protoc_insertion_point(class_scope:istio.mesh.v1alpha1.LocalityLoadBalancerSetting.Failover) + )) + , + DESCRIPTOR = _LOCALITYLOADBALANCERSETTING, + __module__ = 'mesh.v1alpha1.config_pb2' + # @@protoc_insertion_point(class_scope:istio.mesh.v1alpha1.LocalityLoadBalancerSetting) + )) +_sym_db.RegisterMessage(LocalityLoadBalancerSetting) +_sym_db.RegisterMessage(LocalityLoadBalancerSetting.Distribute) +_sym_db.RegisterMessage(LocalityLoadBalancerSetting.Distribute.ToEntry) +_sym_db.RegisterMessage(LocalityLoadBalancerSetting.Failover) + DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\032istio.io/api/mesh/v1alpha1')) @@ -466,4 +661,6 @@ _MESHCONFIG.fields_by_name['mixer_address']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\030\001')) _MESHCONFIG.fields_by_name['sds_refresh_delay'].has_options = True _MESHCONFIG.fields_by_name['sds_refresh_delay']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\030\001')) +_LOCALITYLOADBALANCERSETTING_DISTRIBUTE_TOENTRY.has_options = True +_LOCALITYLOADBALANCERSETTING_DISTRIBUTE_TOENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) # @@protoc_insertion_point(module_scope) diff --git a/vendor/istio.io/api/python/istio_api/networking/v1alpha3/destination_rule_pb2.py b/vendor/istio.io/api/python/istio_api/networking/v1alpha3/destination_rule_pb2.py index 461d8fcdfb91..3a54fdf1f0b0 100644 --- a/vendor/istio.io/api/python/istio_api/networking/v1alpha3/destination_rule_pb2.py +++ b/vendor/istio.io/api/python/istio_api/networking/v1alpha3/destination_rule_pb2.py @@ -23,7 +23,7 @@ name='networking/v1alpha3/destination_rule.proto', package='istio.networking.v1alpha3', syntax='proto3', - serialized_pb=_b('\n*networking/v1alpha3/destination_rule.proto\x12\x19istio.networking.v1alpha3\x1a\x1egoogle/protobuf/duration.proto\x1a)networking/v1alpha3/virtual_service.proto\x1a!networking/v1alpha3/sidecar.proto\x1a\x14gogoproto/gogo.proto\"\xd3\x01\n\x0f\x44\x65stinationRule\x12\x0c\n\x04host\x18\x01 \x01(\t\x12@\n\x0etraffic_policy\x18\x02 \x01(\x0b\x32(.istio.networking.v1alpha3.TrafficPolicy\x12\x32\n\x07subsets\x18\x03 \x03(\x0b\x32!.istio.networking.v1alpha3.Subset\x12<\n\x0c\x63onfig_scope\x18\x04 \x01(\x0e\x32&.istio.networking.v1alpha3.ConfigScope\"\xd7\x05\n\rTrafficPolicy\x12\x46\n\rload_balancer\x18\x01 \x01(\x0b\x32/.istio.networking.v1alpha3.LoadBalancerSettings\x12J\n\x0f\x63onnection_pool\x18\x02 \x01(\x0b\x32\x31.istio.networking.v1alpha3.ConnectionPoolSettings\x12\x46\n\x11outlier_detection\x18\x03 \x01(\x0b\x32+.istio.networking.v1alpha3.OutlierDetection\x12\x33\n\x03tls\x18\x04 \x01(\x0b\x32&.istio.networking.v1alpha3.TLSSettings\x12W\n\x13port_level_settings\x18\x05 \x03(\x0b\x32:.istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy\x1a\xdb\x02\n\x11PortTrafficPolicy\x12\x35\n\x04port\x18\x01 \x01(\x0b\x32\'.istio.networking.v1alpha3.PortSelector\x12\x46\n\rload_balancer\x18\x02 \x01(\x0b\x32/.istio.networking.v1alpha3.LoadBalancerSettings\x12J\n\x0f\x63onnection_pool\x18\x03 \x01(\x0b\x32\x31.istio.networking.v1alpha3.ConnectionPoolSettings\x12\x46\n\x11outlier_detection\x18\x04 \x01(\x0b\x32+.istio.networking.v1alpha3.OutlierDetection\x12\x33\n\x03tls\x18\x05 \x01(\x0b\x32&.istio.networking.v1alpha3.TLSSettings\"\xc6\x01\n\x06Subset\x12\x0c\n\x04name\x18\x01 \x01(\t\x12=\n\x06labels\x18\x02 \x03(\x0b\x32-.istio.networking.v1alpha3.Subset.LabelsEntry\x12@\n\x0etraffic_policy\x18\x03 \x01(\x0b\x32(.istio.networking.v1alpha3.TrafficPolicy\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xda\x06\n\x14LoadBalancerSettings\x12J\n\x06simple\x18\x01 \x01(\x0e\x32\x38.istio.networking.v1alpha3.LoadBalancerSettings.SimpleLBH\x00\x12[\n\x0f\x63onsistent_hash\x18\x02 \x01(\x0b\x32@.istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLBH\x00\x12g\n\x18locality_weight_settings\x18\x03 \x03(\x0b\x32\x45.istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting\x1a\xaa\x02\n\x10\x43onsistentHashLB\x12\x1a\n\x10http_header_name\x18\x01 \x01(\tH\x00\x12\x62\n\x0bhttp_cookie\x18\x02 \x01(\x0b\x32K.istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.HTTPCookieH\x00\x12\x17\n\ruse_source_ip\x18\x03 \x01(\x08H\x00\x12\x19\n\x11minimum_ring_size\x18\x04 \x01(\x04\x1aV\n\nHTTPCookie\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12,\n\x03ttl\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB\x04\x98\xdf\x1f\x01\x42\n\n\x08hash_key\x1a\xab\x01\n\x15LocalityWeightSetting\x12\x0c\n\x04\x66rom\x18\x01 \x01(\t\x12Y\n\x02to\x18\x02 \x03(\x0b\x32M.istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting.ToEntry\x1a)\n\x07ToEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"H\n\x08SimpleLB\x12\x0f\n\x0bROUND_ROBIN\x10\x00\x12\x0e\n\nLEAST_CONN\x10\x01\x12\n\n\x06RANDOM\x10\x02\x12\x0f\n\x0bPASSTHROUGH\x10\x03\x42\x0b\n\tlb_policy\"\xf3\x04\n\x16\x43onnectionPoolSettings\x12J\n\x03tcp\x18\x01 \x01(\x0b\x32=.istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings\x12L\n\x04http\x18\x02 \x01(\x0b\x32>.istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings\x1a\xb3\x02\n\x0bTCPSettings\x12\x17\n\x0fmax_connections\x18\x01 \x01(\x05\x12\x32\n\x0f\x63onnect_timeout\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x61\n\rtcp_keepalive\x18\x03 \x01(\x0b\x32J.istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive\x1at\n\x0cTcpKeepalive\x12\x0e\n\x06probes\x18\x01 \x01(\r\x12\'\n\x04time\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12+\n\x08interval\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x1a\x88\x01\n\x0cHTTPSettings\x12\"\n\x1ahttp1_max_pending_requests\x18\x01 \x01(\x05\x12\x1a\n\x12http2_max_requests\x18\x02 \x01(\x05\x12#\n\x1bmax_requests_per_connection\x18\x03 \x01(\x05\x12\x13\n\x0bmax_retries\x18\x04 \x01(\x05\"\xcc\x01\n\x10OutlierDetection\x12\x1a\n\x12\x63onsecutive_errors\x18\x01 \x01(\x05\x12+\n\x08interval\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x35\n\x12\x62\x61se_ejection_time\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x1c\n\x14max_ejection_percent\x18\x04 \x01(\x05\x12\x1a\n\x12min_health_percent\x18\x05 \x01(\x05\"\xff\x01\n\x0bTLSSettings\x12<\n\x04mode\x18\x01 \x01(\x0e\x32..istio.networking.v1alpha3.TLSSettings.TLSmode\x12\x1a\n\x12\x63lient_certificate\x18\x02 \x01(\t\x12\x13\n\x0bprivate_key\x18\x03 \x01(\t\x12\x17\n\x0f\x63\x61_certificates\x18\x04 \x01(\t\x12\x19\n\x11subject_alt_names\x18\x05 \x03(\t\x12\x0b\n\x03sni\x18\x06 \x01(\t\"@\n\x07TLSmode\x12\x0b\n\x07\x44ISABLE\x10\x00\x12\n\n\x06SIMPLE\x10\x01\x12\n\n\x06MUTUAL\x10\x02\x12\x10\n\x0cISTIO_MUTUAL\x10\x03\x42\"Z istio.io/api/networking/v1alpha3b\x06proto3') + serialized_pb=_b('\n*networking/v1alpha3/destination_rule.proto\x12\x19istio.networking.v1alpha3\x1a\x1egoogle/protobuf/duration.proto\x1a)networking/v1alpha3/virtual_service.proto\x1a!networking/v1alpha3/sidecar.proto\x1a\x14gogoproto/gogo.proto\"\xd3\x01\n\x0f\x44\x65stinationRule\x12\x0c\n\x04host\x18\x01 \x01(\t\x12@\n\x0etraffic_policy\x18\x02 \x01(\x0b\x32(.istio.networking.v1alpha3.TrafficPolicy\x12\x32\n\x07subsets\x18\x03 \x03(\x0b\x32!.istio.networking.v1alpha3.Subset\x12<\n\x0c\x63onfig_scope\x18\x04 \x01(\x0e\x32&.istio.networking.v1alpha3.ConfigScope\"\xd7\x05\n\rTrafficPolicy\x12\x46\n\rload_balancer\x18\x01 \x01(\x0b\x32/.istio.networking.v1alpha3.LoadBalancerSettings\x12J\n\x0f\x63onnection_pool\x18\x02 \x01(\x0b\x32\x31.istio.networking.v1alpha3.ConnectionPoolSettings\x12\x46\n\x11outlier_detection\x18\x03 \x01(\x0b\x32+.istio.networking.v1alpha3.OutlierDetection\x12\x33\n\x03tls\x18\x04 \x01(\x0b\x32&.istio.networking.v1alpha3.TLSSettings\x12W\n\x13port_level_settings\x18\x05 \x03(\x0b\x32:.istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy\x1a\xdb\x02\n\x11PortTrafficPolicy\x12\x35\n\x04port\x18\x01 \x01(\x0b\x32\'.istio.networking.v1alpha3.PortSelector\x12\x46\n\rload_balancer\x18\x02 \x01(\x0b\x32/.istio.networking.v1alpha3.LoadBalancerSettings\x12J\n\x0f\x63onnection_pool\x18\x03 \x01(\x0b\x32\x31.istio.networking.v1alpha3.ConnectionPoolSettings\x12\x46\n\x11outlier_detection\x18\x04 \x01(\x0b\x32+.istio.networking.v1alpha3.OutlierDetection\x12\x33\n\x03tls\x18\x05 \x01(\x0b\x32&.istio.networking.v1alpha3.TLSSettings\"\xc6\x01\n\x06Subset\x12\x0c\n\x04name\x18\x01 \x01(\t\x12=\n\x06labels\x18\x02 \x03(\x0b\x32-.istio.networking.v1alpha3.Subset.LabelsEntry\x12@\n\x0etraffic_policy\x18\x03 \x01(\x0b\x32(.istio.networking.v1alpha3.TrafficPolicy\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc3\x04\n\x14LoadBalancerSettings\x12J\n\x06simple\x18\x01 \x01(\x0e\x32\x38.istio.networking.v1alpha3.LoadBalancerSettings.SimpleLBH\x00\x12[\n\x0f\x63onsistent_hash\x18\x02 \x01(\x0b\x32@.istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLBH\x00\x1a\xaa\x02\n\x10\x43onsistentHashLB\x12\x1a\n\x10http_header_name\x18\x01 \x01(\tH\x00\x12\x62\n\x0bhttp_cookie\x18\x02 \x01(\x0b\x32K.istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.HTTPCookieH\x00\x12\x17\n\ruse_source_ip\x18\x03 \x01(\x08H\x00\x12\x19\n\x11minimum_ring_size\x18\x04 \x01(\x04\x1aV\n\nHTTPCookie\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12,\n\x03ttl\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB\x04\x98\xdf\x1f\x01\x42\n\n\x08hash_key\"H\n\x08SimpleLB\x12\x0f\n\x0bROUND_ROBIN\x10\x00\x12\x0e\n\nLEAST_CONN\x10\x01\x12\n\n\x06RANDOM\x10\x02\x12\x0f\n\x0bPASSTHROUGH\x10\x03\x42\x0b\n\tlb_policy\"\xf3\x04\n\x16\x43onnectionPoolSettings\x12J\n\x03tcp\x18\x01 \x01(\x0b\x32=.istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings\x12L\n\x04http\x18\x02 \x01(\x0b\x32>.istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings\x1a\xb3\x02\n\x0bTCPSettings\x12\x17\n\x0fmax_connections\x18\x01 \x01(\x05\x12\x32\n\x0f\x63onnect_timeout\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x61\n\rtcp_keepalive\x18\x03 \x01(\x0b\x32J.istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive\x1at\n\x0cTcpKeepalive\x12\x0e\n\x06probes\x18\x01 \x01(\r\x12\'\n\x04time\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12+\n\x08interval\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x1a\x88\x01\n\x0cHTTPSettings\x12\"\n\x1ahttp1_max_pending_requests\x18\x01 \x01(\x05\x12\x1a\n\x12http2_max_requests\x18\x02 \x01(\x05\x12#\n\x1bmax_requests_per_connection\x18\x03 \x01(\x05\x12\x13\n\x0bmax_retries\x18\x04 \x01(\x05\"\xcc\x01\n\x10OutlierDetection\x12\x1a\n\x12\x63onsecutive_errors\x18\x01 \x01(\x05\x12+\n\x08interval\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x35\n\x12\x62\x61se_ejection_time\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x1c\n\x14max_ejection_percent\x18\x04 \x01(\x05\x12\x1a\n\x12min_health_percent\x18\x05 \x01(\x05\"\xff\x01\n\x0bTLSSettings\x12<\n\x04mode\x18\x01 \x01(\x0e\x32..istio.networking.v1alpha3.TLSSettings.TLSmode\x12\x1a\n\x12\x63lient_certificate\x18\x02 \x01(\t\x12\x13\n\x0bprivate_key\x18\x03 \x01(\t\x12\x17\n\x0f\x63\x61_certificates\x18\x04 \x01(\t\x12\x19\n\x11subject_alt_names\x18\x05 \x03(\t\x12\x0b\n\x03sni\x18\x06 \x01(\t\"@\n\x07TLSmode\x12\x0b\n\x07\x44ISABLE\x10\x00\x12\n\n\x06SIMPLE\x10\x01\x12\n\n\x06MUTUAL\x10\x02\x12\x10\n\x0cISTIO_MUTUAL\x10\x03\x42\"Z istio.io/api/networking/v1alpha3b\x06proto3') , dependencies=[google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,networking_dot_v1alpha3_dot_virtual__service__pb2.DESCRIPTOR,networking_dot_v1alpha3_dot_sidecar__pb2.DESCRIPTOR,gogoproto_dot_gogo__pb2.DESCRIPTOR,]) @@ -54,8 +54,8 @@ ], containing_type=None, options=None, - serialized_start=2124, - serialized_end=2196, + serialized_start=1845, + serialized_end=1917, ) _sym_db.RegisterEnumDescriptor(_LOADBALANCERSETTINGS_SIMPLELB) @@ -84,8 +84,8 @@ ], containing_type=None, options=None, - serialized_start=3240, - serialized_end=3304, + serialized_start=2961, + serialized_end=3025, ) _sym_db.RegisterEnumDescriptor(_TLSSETTINGS_TLSMODE) @@ -381,8 +381,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1850, - serialized_end=1936, + serialized_start=1745, + serialized_end=1831, ) _LOADBALANCERSETTINGS_CONSISTENTHASHLB = _descriptor.Descriptor( @@ -435,82 +435,8 @@ name='hash_key', full_name='istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.hash_key', index=0, containing_type=None, fields=[]), ], - serialized_start=1650, - serialized_end=1948, -) - -_LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING_TOENTRY = _descriptor.Descriptor( - name='ToEntry', - full_name='istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting.ToEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting.ToEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting.ToEntry.value', index=1, - number=2, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2081, - serialized_end=2122, -) - -_LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING = _descriptor.Descriptor( - name='LocalityWeightSetting', - full_name='istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='from', full_name='istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting.from', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='to', full_name='istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting.to', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING_TOENTRY, ], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1951, - serialized_end=2122, + serialized_start=1545, + serialized_end=1843, ) _LOADBALANCERSETTINGS = _descriptor.Descriptor( @@ -534,17 +460,10 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='locality_weight_settings', full_name='istio.networking.v1alpha3.LoadBalancerSettings.locality_weight_settings', index=2, - number=3, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), ], extensions=[ ], - nested_types=[_LOADBALANCERSETTINGS_CONSISTENTHASHLB, _LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING, ], + nested_types=[_LOADBALANCERSETTINGS_CONSISTENTHASHLB, ], enum_types=[ _LOADBALANCERSETTINGS_SIMPLELB, ], @@ -558,7 +477,7 @@ index=0, containing_type=None, fields=[]), ], serialized_start=1351, - serialized_end=2209, + serialized_end=1930, ) @@ -602,8 +521,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2584, - serialized_end=2700, + serialized_start=2305, + serialized_end=2421, ) _CONNECTIONPOOLSETTINGS_TCPSETTINGS = _descriptor.Descriptor( @@ -646,8 +565,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2393, - serialized_end=2700, + serialized_start=2114, + serialized_end=2421, ) _CONNECTIONPOOLSETTINGS_HTTPSETTINGS = _descriptor.Descriptor( @@ -697,8 +616,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2703, - serialized_end=2839, + serialized_start=2424, + serialized_end=2560, ) _CONNECTIONPOOLSETTINGS = _descriptor.Descriptor( @@ -734,8 +653,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2212, - serialized_end=2839, + serialized_start=1933, + serialized_end=2560, ) @@ -793,8 +712,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2842, - serialized_end=3046, + serialized_start=2563, + serialized_end=2767, ) @@ -860,8 +779,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3049, - serialized_end=3304, + serialized_start=2770, + serialized_end=3025, ) _DESTINATIONRULE.fields_by_name['traffic_policy'].message_type = _TRAFFICPOLICY @@ -894,12 +813,8 @@ _LOADBALANCERSETTINGS_CONSISTENTHASHLB.oneofs_by_name['hash_key'].fields.append( _LOADBALANCERSETTINGS_CONSISTENTHASHLB.fields_by_name['use_source_ip']) _LOADBALANCERSETTINGS_CONSISTENTHASHLB.fields_by_name['use_source_ip'].containing_oneof = _LOADBALANCERSETTINGS_CONSISTENTHASHLB.oneofs_by_name['hash_key'] -_LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING_TOENTRY.containing_type = _LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING -_LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING.fields_by_name['to'].message_type = _LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING_TOENTRY -_LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING.containing_type = _LOADBALANCERSETTINGS _LOADBALANCERSETTINGS.fields_by_name['simple'].enum_type = _LOADBALANCERSETTINGS_SIMPLELB _LOADBALANCERSETTINGS.fields_by_name['consistent_hash'].message_type = _LOADBALANCERSETTINGS_CONSISTENTHASHLB -_LOADBALANCERSETTINGS.fields_by_name['locality_weight_settings'].message_type = _LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING _LOADBALANCERSETTINGS_SIMPLELB.containing_type = _LOADBALANCERSETTINGS _LOADBALANCERSETTINGS.oneofs_by_name['lb_policy'].fields.append( _LOADBALANCERSETTINGS.fields_by_name['simple']) @@ -981,20 +896,6 @@ # @@protoc_insertion_point(class_scope:istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB) )) , - - LocalityWeightSetting = _reflection.GeneratedProtocolMessageType('LocalityWeightSetting', (_message.Message,), dict( - - ToEntry = _reflection.GeneratedProtocolMessageType('ToEntry', (_message.Message,), dict( - DESCRIPTOR = _LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING_TOENTRY, - __module__ = 'networking.v1alpha3.destination_rule_pb2' - # @@protoc_insertion_point(class_scope:istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting.ToEntry) - )) - , - DESCRIPTOR = _LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING, - __module__ = 'networking.v1alpha3.destination_rule_pb2' - # @@protoc_insertion_point(class_scope:istio.networking.v1alpha3.LoadBalancerSettings.LocalityWeightSetting) - )) - , DESCRIPTOR = _LOADBALANCERSETTINGS, __module__ = 'networking.v1alpha3.destination_rule_pb2' # @@protoc_insertion_point(class_scope:istio.networking.v1alpha3.LoadBalancerSettings) @@ -1002,8 +903,6 @@ _sym_db.RegisterMessage(LoadBalancerSettings) _sym_db.RegisterMessage(LoadBalancerSettings.ConsistentHashLB) _sym_db.RegisterMessage(LoadBalancerSettings.ConsistentHashLB.HTTPCookie) -_sym_db.RegisterMessage(LoadBalancerSettings.LocalityWeightSetting) -_sym_db.RegisterMessage(LoadBalancerSettings.LocalityWeightSetting.ToEntry) ConnectionPoolSettings = _reflection.GeneratedProtocolMessageType('ConnectionPoolSettings', (_message.Message,), dict( @@ -1057,6 +956,4 @@ _SUBSET_LABELSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) _LOADBALANCERSETTINGS_CONSISTENTHASHLB_HTTPCOOKIE.fields_by_name['ttl'].has_options = True _LOADBALANCERSETTINGS_CONSISTENTHASHLB_HTTPCOOKIE.fields_by_name['ttl']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\230\337\037\001')) -_LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING_TOENTRY.has_options = True -_LOADBALANCERSETTINGS_LOCALITYWEIGHTSETTING_TOENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) # @@protoc_insertion_point(module_scope) diff --git a/vendor/istio.io/api/python/istio_api/policy/v1beta1/http_response_pb2.py b/vendor/istio.io/api/python/istio_api/policy/v1beta1/http_response_pb2.py new file mode 100644 index 000000000000..7a788c48625a --- /dev/null +++ b/vendor/istio.io/api/python/istio_api/policy/v1beta1/http_response_pb2.py @@ -0,0 +1,437 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: policy/v1beta1/http_response.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='policy/v1beta1/http_response.proto', + package='istio.policy.v1beta1', + syntax='proto3', + serialized_pb=_b('\n\"policy/v1beta1/http_response.proto\x12\x14istio.policy.v1beta1\"\xce\x01\n\x12\x44irectHttpResponse\x12\x32\n\x04\x63ode\x18\x01 \x01(\x0e\x32$.istio.policy.v1beta1.HttpStatusCode\x12\x0c\n\x04\x62ody\x18\x02 \x01(\t\x12\x46\n\x07headers\x18\x03 \x03(\x0b\x32\x35.istio.policy.v1beta1.DirectHttpResponse.HeadersEntry\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01*\xb9\t\n\x0eHttpStatusCode\x12\t\n\x05\x45mpty\x10\x00\x12\x0c\n\x08\x43ontinue\x10\x64\x12\x07\n\x02OK\x10\xc8\x01\x12\x0c\n\x07\x43reated\x10\xc9\x01\x12\r\n\x08\x41\x63\x63\x65pted\x10\xca\x01\x12 \n\x1bNonAuthoritativeInformation\x10\xcb\x01\x12\x0e\n\tNoContent\x10\xcc\x01\x12\x11\n\x0cResetContent\x10\xcd\x01\x12\x13\n\x0ePartialContent\x10\xce\x01\x12\x10\n\x0bMultiStatus\x10\xcf\x01\x12\x14\n\x0f\x41lreadyReported\x10\xd0\x01\x12\x0b\n\x06IMUsed\x10\xe2\x01\x12\x14\n\x0fMultipleChoices\x10\xac\x02\x12\x15\n\x10MovedPermanently\x10\xad\x02\x12\n\n\x05\x46ound\x10\xae\x02\x12\r\n\x08SeeOther\x10\xaf\x02\x12\x10\n\x0bNotModified\x10\xb0\x02\x12\r\n\x08UseProxy\x10\xb1\x02\x12\x16\n\x11TemporaryRedirect\x10\xb3\x02\x12\x16\n\x11PermanentRedirect\x10\xb4\x02\x12\x0f\n\nBadRequest\x10\x90\x03\x12\x11\n\x0cUnauthorized\x10\x91\x03\x12\x14\n\x0fPaymentRequired\x10\x92\x03\x12\x0e\n\tForbidden\x10\x93\x03\x12\r\n\x08NotFound\x10\x94\x03\x12\x15\n\x10MethodNotAllowed\x10\x95\x03\x12\x12\n\rNotAcceptable\x10\x96\x03\x12 \n\x1bProxyAuthenticationRequired\x10\x97\x03\x12\x13\n\x0eRequestTimeout\x10\x98\x03\x12\r\n\x08\x43onflict\x10\x99\x03\x12\t\n\x04Gone\x10\x9a\x03\x12\x13\n\x0eLengthRequired\x10\x9b\x03\x12\x17\n\x12PreconditionFailed\x10\x9c\x03\x12\x14\n\x0fPayloadTooLarge\x10\x9d\x03\x12\x0f\n\nURITooLong\x10\x9e\x03\x12\x19\n\x14UnsupportedMediaType\x10\x9f\x03\x12\x18\n\x13RangeNotSatisfiable\x10\xa0\x03\x12\x16\n\x11\x45xpectationFailed\x10\xa1\x03\x12\x17\n\x12MisdirectedRequest\x10\xa5\x03\x12\x18\n\x13UnprocessableEntity\x10\xa6\x03\x12\x0b\n\x06Locked\x10\xa7\x03\x12\x15\n\x10\x46\x61iledDependency\x10\xa8\x03\x12\x14\n\x0fUpgradeRequired\x10\xaa\x03\x12\x19\n\x14PreconditionRequired\x10\xac\x03\x12\x14\n\x0fTooManyRequests\x10\xad\x03\x12 \n\x1bRequestHeaderFieldsTooLarge\x10\xaf\x03\x12\x18\n\x13InternalServerError\x10\xf4\x03\x12\x13\n\x0eNotImplemented\x10\xf5\x03\x12\x0f\n\nBadGateway\x10\xf6\x03\x12\x17\n\x12ServiceUnavailable\x10\xf7\x03\x12\x13\n\x0eGatewayTimeout\x10\xf8\x03\x12\x1c\n\x17HTTPVersionNotSupported\x10\xf9\x03\x12\x1a\n\x15VariantAlsoNegotiates\x10\xfa\x03\x12\x18\n\x13InsufficientStorage\x10\xfb\x03\x12\x11\n\x0cLoopDetected\x10\xfc\x03\x12\x10\n\x0bNotExtended\x10\xfe\x03\x12\"\n\x1dNetworkAuthenticationRequired\x10\xff\x03\x42\x1dZ\x1bistio.io/api/policy/v1beta1b\x06proto3') +) + +_HTTPSTATUSCODE = _descriptor.EnumDescriptor( + name='HttpStatusCode', + full_name='istio.policy.v1beta1.HttpStatusCode', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='Empty', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='Continue', index=1, number=100, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='OK', index=2, number=200, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='Created', index=3, number=201, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='Accepted', index=4, number=202, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NonAuthoritativeInformation', index=5, number=203, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NoContent', index=6, number=204, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ResetContent', index=7, number=205, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PartialContent', index=8, number=206, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MultiStatus', index=9, number=207, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='AlreadyReported', index=10, number=208, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='IMUsed', index=11, number=226, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MultipleChoices', index=12, number=300, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MovedPermanently', index=13, number=301, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='Found', index=14, number=302, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SeeOther', index=15, number=303, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NotModified', index=16, number=304, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UseProxy', index=17, number=305, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TemporaryRedirect', index=18, number=307, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PermanentRedirect', index=19, number=308, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BadRequest', index=20, number=400, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='Unauthorized', index=21, number=401, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PaymentRequired', index=22, number=402, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='Forbidden', index=23, number=403, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NotFound', index=24, number=404, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MethodNotAllowed', index=25, number=405, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NotAcceptable', index=26, number=406, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ProxyAuthenticationRequired', index=27, number=407, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='RequestTimeout', index=28, number=408, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='Conflict', index=29, number=409, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='Gone', index=30, number=410, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LengthRequired', index=31, number=411, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PreconditionFailed', index=32, number=412, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PayloadTooLarge', index=33, number=413, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='URITooLong', index=34, number=414, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UnsupportedMediaType', index=35, number=415, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='RangeNotSatisfiable', index=36, number=416, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ExpectationFailed', index=37, number=417, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MisdirectedRequest', index=38, number=421, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UnprocessableEntity', index=39, number=422, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='Locked', index=40, number=423, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='FailedDependency', index=41, number=424, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UpgradeRequired', index=42, number=426, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PreconditionRequired', index=43, number=428, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TooManyRequests', index=44, number=429, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='RequestHeaderFieldsTooLarge', index=45, number=431, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='InternalServerError', index=46, number=500, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NotImplemented', index=47, number=501, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BadGateway', index=48, number=502, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ServiceUnavailable', index=49, number=503, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GatewayTimeout', index=50, number=504, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='HTTPVersionNotSupported', index=51, number=505, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='VariantAlsoNegotiates', index=52, number=506, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='InsufficientStorage', index=53, number=507, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LoopDetected', index=54, number=508, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NotExtended', index=55, number=510, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NetworkAuthenticationRequired', index=56, number=511, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=270, + serialized_end=1479, +) +_sym_db.RegisterEnumDescriptor(_HTTPSTATUSCODE) + +HttpStatusCode = enum_type_wrapper.EnumTypeWrapper(_HTTPSTATUSCODE) +Empty = 0 +Continue = 100 +OK = 200 +Created = 201 +Accepted = 202 +NonAuthoritativeInformation = 203 +NoContent = 204 +ResetContent = 205 +PartialContent = 206 +MultiStatus = 207 +AlreadyReported = 208 +IMUsed = 226 +MultipleChoices = 300 +MovedPermanently = 301 +Found = 302 +SeeOther = 303 +NotModified = 304 +UseProxy = 305 +TemporaryRedirect = 307 +PermanentRedirect = 308 +BadRequest = 400 +Unauthorized = 401 +PaymentRequired = 402 +Forbidden = 403 +NotFound = 404 +MethodNotAllowed = 405 +NotAcceptable = 406 +ProxyAuthenticationRequired = 407 +RequestTimeout = 408 +Conflict = 409 +Gone = 410 +LengthRequired = 411 +PreconditionFailed = 412 +PayloadTooLarge = 413 +URITooLong = 414 +UnsupportedMediaType = 415 +RangeNotSatisfiable = 416 +ExpectationFailed = 417 +MisdirectedRequest = 421 +UnprocessableEntity = 422 +Locked = 423 +FailedDependency = 424 +UpgradeRequired = 426 +PreconditionRequired = 428 +TooManyRequests = 429 +RequestHeaderFieldsTooLarge = 431 +InternalServerError = 500 +NotImplemented = 501 +BadGateway = 502 +ServiceUnavailable = 503 +GatewayTimeout = 504 +HTTPVersionNotSupported = 505 +VariantAlsoNegotiates = 506 +InsufficientStorage = 507 +LoopDetected = 508 +NotExtended = 510 +NetworkAuthenticationRequired = 511 + + + +_DIRECTHTTPRESPONSE_HEADERSENTRY = _descriptor.Descriptor( + name='HeadersEntry', + full_name='istio.policy.v1beta1.DirectHttpResponse.HeadersEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='istio.policy.v1beta1.DirectHttpResponse.HeadersEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='value', full_name='istio.policy.v1beta1.DirectHttpResponse.HeadersEntry.value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=221, + serialized_end=267, +) + +_DIRECTHTTPRESPONSE = _descriptor.Descriptor( + name='DirectHttpResponse', + full_name='istio.policy.v1beta1.DirectHttpResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='code', full_name='istio.policy.v1beta1.DirectHttpResponse.code', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='body', full_name='istio.policy.v1beta1.DirectHttpResponse.body', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='headers', full_name='istio.policy.v1beta1.DirectHttpResponse.headers', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[_DIRECTHTTPRESPONSE_HEADERSENTRY, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=61, + serialized_end=267, +) + +_DIRECTHTTPRESPONSE_HEADERSENTRY.containing_type = _DIRECTHTTPRESPONSE +_DIRECTHTTPRESPONSE.fields_by_name['code'].enum_type = _HTTPSTATUSCODE +_DIRECTHTTPRESPONSE.fields_by_name['headers'].message_type = _DIRECTHTTPRESPONSE_HEADERSENTRY +DESCRIPTOR.message_types_by_name['DirectHttpResponse'] = _DIRECTHTTPRESPONSE +DESCRIPTOR.enum_types_by_name['HttpStatusCode'] = _HTTPSTATUSCODE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +DirectHttpResponse = _reflection.GeneratedProtocolMessageType('DirectHttpResponse', (_message.Message,), dict( + + HeadersEntry = _reflection.GeneratedProtocolMessageType('HeadersEntry', (_message.Message,), dict( + DESCRIPTOR = _DIRECTHTTPRESPONSE_HEADERSENTRY, + __module__ = 'policy.v1beta1.http_response_pb2' + # @@protoc_insertion_point(class_scope:istio.policy.v1beta1.DirectHttpResponse.HeadersEntry) + )) + , + DESCRIPTOR = _DIRECTHTTPRESPONSE, + __module__ = 'policy.v1beta1.http_response_pb2' + # @@protoc_insertion_point(class_scope:istio.policy.v1beta1.DirectHttpResponse) + )) +_sym_db.RegisterMessage(DirectHttpResponse) +_sym_db.RegisterMessage(DirectHttpResponse.HeadersEntry) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\033istio.io/api/policy/v1beta1')) +_DIRECTHTTPRESPONSE_HEADERSENTRY.has_options = True +_DIRECTHTTPRESPONSE_HEADERSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +# @@protoc_insertion_point(module_scope)
NameDescription
Empty +

Empty - This code not part of the HTTP status code specification, but it is needed for proto +enum type.

+ +
Continue +
OK +
Created +
Accepted +
NonAuthoritativeInformation +
NoContent +
ResetContent +
PartialContent +
MultiStatus +
AlreadyReported +
IMUsed +
MultipleChoices +
MovedPermanently +
Found +
SeeOther +
NotModified +
UseProxy +
TemporaryRedirect +
PermanentRedirect +
BadRequest +
Unauthorized +
PaymentRequired +
Forbidden +
NotFound +
MethodNotAllowed +
NotAcceptable +
ProxyAuthenticationRequired +
RequestTimeout +
Conflict +
Gone +
LengthRequired +
PreconditionFailed +
PayloadTooLarge +
URITooLong +
UnsupportedMediaType +
RangeNotSatisfiable +
ExpectationFailed +
MisdirectedRequest +
UnprocessableEntity +
Locked +
FailedDependency +
UpgradeRequired +
PreconditionRequired +
TooManyRequests +
RequestHeaderFieldsTooLarge +
InternalServerError +
NotImplemented +
BadGateway +
ServiceUnavailable +
GatewayTimeout +
HTTPVersionNotSupported +
VariantAlsoNegotiates +
InsufficientStorage +
LoopDetected +
NotExtended +
NetworkAuthenticationRequired
Rule.HeaderOperationTemplate[]

Optional. Templatized operations on the request headers using values produced by the -rule actions.

+rule actions. Require the check action result to be OK.

Rule.HeaderOperationTemplate[]

Optional. Templatized operations on the response headers using values produced by the -rule actions.

+rule actions. Require the check action result to be OK.