diff --git a/acl/acl_oss.go b/acl/acl_oss.go index 1057bff41..df54e3ed0 100644 --- a/acl/acl_oss.go +++ b/acl/acl_oss.go @@ -2,6 +2,8 @@ package acl +const DefaultPartitionName = "" + type EnterpriseConfig struct { // no fields in OSS } diff --git a/agent/agent_endpoint.go b/agent/agent_endpoint.go index e30013ddf..475b18b2f 100644 --- a/agent/agent_endpoint.go +++ b/agent/agent_endpoint.go @@ -1076,6 +1076,11 @@ func (s *HTTPHandlers) AgentRegisterService(resp http.ResponseWriter, req *http. Reason: fmt.Sprintf("Invalid SidecarService: %s", err)} } if sidecar != nil { + if err := sidecar.Validate(); err != nil { + resp.WriteHeader(http.StatusBadRequest) + fmt.Fprint(resp, err.Error()) + return nil, nil + } // Make sure we are allowed to register the sidecar using the token // specified (might be specific to sidecar or the same one as the overall // request). diff --git a/agent/cache-types/discovery_chain_test.go b/agent/cache-types/discovery_chain_test.go index f94469c79..057661e7f 100644 --- a/agent/cache-types/discovery_chain_test.go +++ b/agent/cache-types/discovery_chain_test.go @@ -16,7 +16,7 @@ func TestCompiledDiscoveryChain(t *testing.T) { typ := &CompiledDiscoveryChain{RPC: rpc} // just do the default chain - chain := discoverychain.TestCompileConfigEntries(t, "web", "default", "dc1", "trustdomain.consul", "dc1", nil) + chain := discoverychain.TestCompileConfigEntries(t, "web", "default", "default", "dc1", "trustdomain.consul", "dc1", nil) // Expect the proper RPC call. This also sets the expected value // since that is return-by-pointer in the arguments. diff --git a/agent/connect/sni_test.go b/agent/connect/sni_test.go index 00c964fb1..64fc97d8a 100644 --- a/agent/connect/sni_test.go +++ b/agent/connect/sni_test.go @@ -142,17 +142,20 @@ func TestQuerySNI(t *testing.T) { func TestTargetSNI(t *testing.T) { // empty namespace, empty subset require.Equal(t, "api.default.foo."+testTrustDomainSuffix1, - TargetSNI(structs.NewDiscoveryTarget("api", "", "", "foo"), testTrustDomain1)) + TargetSNI(structs.NewDiscoveryTarget("api", "", "", "default", "foo"), testTrustDomain1)) + + require.Equal(t, "api.default.foo."+testTrustDomainSuffix1, + TargetSNI(structs.NewDiscoveryTarget("api", "", "", "", "foo"), testTrustDomain1)) // set namespace, empty subset require.Equal(t, "api.neighbor.foo."+testTrustDomainSuffix2, - TargetSNI(structs.NewDiscoveryTarget("api", "", "neighbor", "foo"), testTrustDomain2)) + TargetSNI(structs.NewDiscoveryTarget("api", "", "neighbor", "default", "foo"), testTrustDomain2)) // empty namespace, set subset require.Equal(t, "v2.api.default.foo."+testTrustDomainSuffix1, - TargetSNI(structs.NewDiscoveryTarget("api", "v2", "", "foo"), testTrustDomain1)) + TargetSNI(structs.NewDiscoveryTarget("api", "v2", "", "default", "foo"), testTrustDomain1)) // set namespace, set subset require.Equal(t, "canary.api.neighbor.foo."+testTrustDomainSuffix2, - TargetSNI(structs.NewDiscoveryTarget("api", "canary", "neighbor", "foo"), testTrustDomain2)) + TargetSNI(structs.NewDiscoveryTarget("api", "canary", "neighbor", "default", "foo"), testTrustDomain2)) } diff --git a/agent/consul/discovery_chain_endpoint_test.go b/agent/consul/discovery_chain_endpoint_test.go index 16e3fb562..275aff03a 100644 --- a/agent/consul/discovery_chain_endpoint_test.go +++ b/agent/consul/discovery_chain_endpoint_test.go @@ -54,8 +54,8 @@ func TestDiscoveryChainEndpoint_Get(t *testing.T) { return &resp, nil } - newTarget := func(service, serviceSubset, namespace, datacenter string) *structs.DiscoveryTarget { - t := structs.NewDiscoveryTarget(service, serviceSubset, namespace, datacenter) + newTarget := func(service, serviceSubset, namespace, partition, datacenter string) *structs.DiscoveryTarget { + t := structs.NewDiscoveryTarget(service, serviceSubset, namespace, partition, datacenter) t.SNI = connect.TargetSNI(t, connect.TestClusterID+".consul") t.Name = t.SNI return t @@ -68,6 +68,7 @@ func TestDiscoveryChainEndpoint_Get(t *testing.T) { Name: "web", EvaluateInDatacenter: "dc1", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", }) if !acl.IsErrPermissionDenied(err) { @@ -80,6 +81,7 @@ func TestDiscoveryChainEndpoint_Get(t *testing.T) { Name: "web", EvaluateInDatacenter: "dc1", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", QueryOptions: structs.QueryOptions{Token: denyToken.SecretID}, }) @@ -92,51 +94,81 @@ func TestDiscoveryChainEndpoint_Get(t *testing.T) { Chain: &structs.CompiledDiscoveryChain{ ServiceName: "web", Namespace: "default", + Partition: "default", Datacenter: "dc1", Protocol: "tcp", - StartNode: "resolver:web.default.dc1", + StartNode: "resolver:web.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:web.default.dc1": { + "resolver:web.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc1", + Name: "web.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "web.default.dc1", + Target: "web.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "web.default.dc1": newTarget("web", "", "default", "dc1"), + "web.default.default.dc1": newTarget("web", "", "default", "default", "dc1"), }, }, } // various ways with good token for _, tc := range []struct { - evalDC string - evalNS string - expect *structs.DiscoveryChainResponse + evalDC string + evalNS string + evalPart string + expect *structs.DiscoveryChainResponse }{ { - evalDC: "dc1", - evalNS: "default", - expect: expectDefaultResponse_DC1_Default, + evalDC: "dc1", + evalNS: "default", + evalPart: "default", + expect: expectDefaultResponse_DC1_Default, }, { - evalDC: "", - evalNS: "default", - expect: expectDefaultResponse_DC1_Default, + evalDC: "", + evalNS: "default", + evalPart: "default", + expect: expectDefaultResponse_DC1_Default, }, { - evalDC: "dc1", - evalNS: "", - expect: expectDefaultResponse_DC1_Default, + evalDC: "dc1", + evalNS: "", + evalPart: "default", + expect: expectDefaultResponse_DC1_Default, }, { - evalDC: "", - evalNS: "", - expect: expectDefaultResponse_DC1_Default, + evalDC: "", + evalNS: "", + evalPart: "default", + expect: expectDefaultResponse_DC1_Default, + }, + { + evalDC: "dc1", + evalNS: "default", + evalPart: "", + expect: expectDefaultResponse_DC1_Default, + }, + { + evalDC: "", + evalNS: "default", + evalPart: "", + expect: expectDefaultResponse_DC1_Default, + }, + { + evalDC: "dc1", + evalNS: "", + evalPart: "", + expect: expectDefaultResponse_DC1_Default, + }, + { + evalDC: "", + evalNS: "", + evalPart: "", + expect: expectDefaultResponse_DC1_Default, }, } { tc := tc @@ -146,6 +178,7 @@ func TestDiscoveryChainEndpoint_Get(t *testing.T) { Name: "web", EvaluateInDatacenter: tc.evalDC, EvaluateInNamespace: tc.evalNS, + EvaluateInPartition: tc.evalPart, Datacenter: "dc1", QueryOptions: structs.QueryOptions{Token: allowToken.SecretID}, }) @@ -177,6 +210,7 @@ func TestDiscoveryChainEndpoint_Get(t *testing.T) { Name: "web", EvaluateInDatacenter: "dc1", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", QueryOptions: structs.QueryOptions{Token: allowToken.SecretID}, }) @@ -186,21 +220,22 @@ func TestDiscoveryChainEndpoint_Get(t *testing.T) { Chain: &structs.CompiledDiscoveryChain{ ServiceName: "web", Namespace: "default", + Partition: "default", Datacenter: "dc1", Protocol: "tcp", - StartNode: "resolver:web.default.dc1", + StartNode: "resolver:web.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:web.default.dc1": { + "resolver:web.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc1", + Name: "web.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 33 * time.Second, - Target: "web.default.dc1", + Target: "web.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "web.default.dc1": newTarget("web", "", "default", "dc1"), + "web.default.default.dc1": newTarget("web", "", "default", "default", "dc1"), }, }, } diff --git a/agent/consul/discoverychain/compile.go b/agent/consul/discoverychain/compile.go index 4df444721..bd385abdf 100644 --- a/agent/consul/discoverychain/compile.go +++ b/agent/consul/discoverychain/compile.go @@ -59,6 +59,7 @@ func Compile(req CompileRequest) (*structs.CompiledDiscoveryChain, error) { var ( serviceName = req.ServiceName evaluateInNamespace = req.EvaluateInNamespace + evaluateInPartition = req.EvaluateInPartition evaluateInDatacenter = req.EvaluateInDatacenter evaluateInTrustDomain = req.EvaluateInTrustDomain useInDatacenter = req.UseInDatacenter @@ -70,6 +71,9 @@ func Compile(req CompileRequest) (*structs.CompiledDiscoveryChain, error) { if evaluateInNamespace == "" { return nil, fmt.Errorf("evaluateInNamespace is required") } + if evaluateInPartition == "" { + return nil, fmt.Errorf("evaluateInPartition is required") + } if evaluateInDatacenter == "" { return nil, fmt.Errorf("evaluateInDatacenter is required") } @@ -85,6 +89,7 @@ func Compile(req CompileRequest) (*structs.CompiledDiscoveryChain, error) { c := &compiler{ serviceName: serviceName, + evaluateInPartition: evaluateInPartition, evaluateInNamespace: evaluateInNamespace, evaluateInDatacenter: evaluateInDatacenter, evaluateInTrustDomain: evaluateInTrustDomain, @@ -122,6 +127,7 @@ func Compile(req CompileRequest) (*structs.CompiledDiscoveryChain, error) { type compiler struct { serviceName string evaluateInNamespace string + evaluateInPartition string evaluateInDatacenter string evaluateInTrustDomain string useInDatacenter string @@ -323,6 +329,7 @@ func (c *compiler) compile() (*structs.CompiledDiscoveryChain, error) { return &structs.CompiledDiscoveryChain{ ServiceName: c.serviceName, Namespace: c.evaluateInNamespace, + Partition: c.evaluateInPartition, Datacenter: c.evaluateInDatacenter, CustomizationHash: customizationHash, Protocol: c.protocol, @@ -522,7 +529,7 @@ func (c *compiler) assembleChain() error { if router == nil { // If no router is configured, move on down the line to the next hop of // the chain. - node, err := c.getSplitterOrResolverNode(c.newTarget(c.serviceName, "", "", "")) + node, err := c.getSplitterOrResolverNode(c.newTarget(c.serviceName, "", "", "", "")) if err != nil { return err } @@ -562,6 +569,7 @@ func (c *compiler) assembleChain() error { } svc := defaultIfEmpty(dest.Service, c.serviceName) destNamespace := defaultIfEmpty(dest.Namespace, router.NamespaceOrDefault()) + destPartition := router.PartitionOrDefault() // Check to see if the destination is eligible for splitting. var ( @@ -570,11 +578,11 @@ func (c *compiler) assembleChain() error { ) if dest.ServiceSubset == "" { node, err = c.getSplitterOrResolverNode( - c.newTarget(svc, "", destNamespace, ""), + c.newTarget(svc, "", destNamespace, destPartition, ""), ) } else { node, err = c.getResolverNode( - c.newTarget(svc, dest.ServiceSubset, destNamespace, ""), + c.newTarget(svc, dest.ServiceSubset, destNamespace, destPartition, ""), false, ) } @@ -586,7 +594,7 @@ func (c *compiler) assembleChain() error { // If we have a router, we'll add a catch-all route at the end to send // unmatched traffic to the next hop in the chain. - defaultDestinationNode, err := c.getSplitterOrResolverNode(c.newTarget(router.Name, "", router.NamespaceOrDefault(), "")) + defaultDestinationNode, err := c.getSplitterOrResolverNode(c.newTarget(router.Name, "", router.NamespaceOrDefault(), router.PartitionOrDefault(), "")) if err != nil { return err } @@ -617,7 +625,7 @@ func newDefaultServiceRoute(serviceName string, namespace string) *structs.Servi } } -func (c *compiler) newTarget(service, serviceSubset, namespace, datacenter string) *structs.DiscoveryTarget { +func (c *compiler) newTarget(service, serviceSubset, namespace, partition, datacenter string) *structs.DiscoveryTarget { if service == "" { panic("newTarget called with empty service which makes no sense") } @@ -626,6 +634,7 @@ func (c *compiler) newTarget(service, serviceSubset, namespace, datacenter strin service, serviceSubset, defaultIfEmpty(namespace, c.evaluateInNamespace), + defaultIfEmpty(partition, c.evaluateInPartition), defaultIfEmpty(datacenter, c.evaluateInDatacenter), ) @@ -645,10 +654,11 @@ func (c *compiler) newTarget(service, serviceSubset, namespace, datacenter strin return t } -func (c *compiler) rewriteTarget(t *structs.DiscoveryTarget, service, serviceSubset, namespace, datacenter string) *structs.DiscoveryTarget { +func (c *compiler) rewriteTarget(t *structs.DiscoveryTarget, service, serviceSubset, partition, namespace, datacenter string) *structs.DiscoveryTarget { var ( service2 = t.Service serviceSubset2 = t.ServiceSubset + partition2 = t.Partition namespace2 = t.Namespace datacenter2 = t.Datacenter ) @@ -661,6 +671,9 @@ func (c *compiler) rewriteTarget(t *structs.DiscoveryTarget, service, serviceSub if serviceSubset != "" { serviceSubset2 = serviceSubset } + if partition != "" { + partition2 = partition + } if namespace != "" { namespace2 = namespace } @@ -668,7 +681,7 @@ func (c *compiler) rewriteTarget(t *structs.DiscoveryTarget, service, serviceSub datacenter2 = datacenter } - return c.newTarget(service2, serviceSubset2, namespace2, datacenter2) + return c.newTarget(service2, serviceSubset2, namespace2, partition2, datacenter2) } func (c *compiler) getSplitterOrResolverNode(target *structs.DiscoveryTarget) (*structs.DiscoveryGraphNode, error) { @@ -735,7 +748,7 @@ func (c *compiler) getSplitterNode(sid structs.ServiceID) (*structs.DiscoveryGra } node, err := c.getResolverNode( - c.newTarget(splitID.ID, split.ServiceSubset, splitID.NamespaceOrDefault(), ""), + c.newTarget(splitID.ID, split.ServiceSubset, splitID.NamespaceOrDefault(), splitID.PartitionOrDefault(), ""), false, ) if err != nil { @@ -806,6 +819,7 @@ RESOLVE_AGAIN: // Handle redirects right up front. // // TODO(rb): What about a redirected subset reference? (web/v2, but web redirects to alt/"") + if resolver.Redirect != nil { redirect := resolver.Redirect @@ -813,6 +827,7 @@ RESOLVE_AGAIN: target, redirect.Service, redirect.ServiceSubset, + target.Partition, redirect.Namespace, redirect.Datacenter, ) @@ -830,6 +845,7 @@ RESOLVE_AGAIN: resolver.DefaultSubset, "", "", + "", ) goto RESOLVE_AGAIN } @@ -962,6 +978,7 @@ RESOLVE_AGAIN: target, failover.Service, failover.ServiceSubset, + target.Partition, failover.Namespace, dc, ) @@ -975,6 +992,7 @@ RESOLVE_AGAIN: target, failover.Service, failover.ServiceSubset, + target.Partition, failover.Namespace, "", ) diff --git a/agent/consul/discoverychain/compile_test.go b/agent/consul/discoverychain/compile_test.go index 4f13f2d55..bb26415c8 100644 --- a/agent/consul/discoverychain/compile_test.go +++ b/agent/consul/discoverychain/compile_test.go @@ -102,6 +102,7 @@ func TestCompile(t *testing.T) { req := CompileRequest{ ServiceName: "main", EvaluateInNamespace: "default", + EvaluateInPartition: "default", EvaluateInDatacenter: "dc1", EvaluateInTrustDomain: "trustdomain.consul", UseInDatacenter: "dc1", @@ -128,6 +129,7 @@ func TestCompile(t *testing.T) { // ourselves. tc.expect.ServiceName = "main" tc.expect.Namespace = "default" + tc.expect.Partition = "default" tc.expect.Datacenter = "dc1" if tc.expectCustom { @@ -165,22 +167,22 @@ func testcase_JustRouterWithDefaults() compileTestCase { Routes: []*structs.DiscoveryRoute{ { Definition: newDefaultServiceRoute("main", "default"), - NextNode: "resolver:main.default.dc1", + NextNode: "resolver:main.default.default.dc1", }, }, }, - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } @@ -223,26 +225,26 @@ func testcase_JustRouterWithNoDestination() compileTestCase { }, }, }, - NextNode: "resolver:main.default.dc1", + NextNode: "resolver:main.default.default.dc1", }, { Definition: newDefaultServiceRoute("main", "default"), - NextNode: "resolver:main.default.dc1", + NextNode: "resolver:main.default.default.dc1", }, }, }, - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } @@ -277,21 +279,21 @@ func testcase_RouterWithDefaults_NoSplit_WithResolver() compileTestCase { Routes: []*structs.DiscoveryRoute{ { Definition: newDefaultServiceRoute("main", "default"), - NextNode: "resolver:main.default.dc1", + NextNode: "resolver:main.default.default.dc1", }, }, }, - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 33 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } @@ -338,22 +340,22 @@ func testcase_RouterWithDefaults_WithNoopSplit_DefaultResolver() compileTestCase Splits: []*structs.DiscoverySplit{ { Weight: 100, - NextNode: "resolver:main.default.dc1", + NextNode: "resolver:main.default.default.dc1", }, }, }, - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } @@ -400,22 +402,22 @@ func testcase_NoopSplit_DefaultResolver_ProtocolFromProxyDefaults() compileTestC Splits: []*structs.DiscoverySplit{ { Weight: 100, - NextNode: "resolver:main.default.dc1", + NextNode: "resolver:main.default.default.dc1", }, }, }, - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } @@ -469,21 +471,21 @@ func testcase_RouterWithDefaults_WithNoopSplit_WithResolver() compileTestCase { Splits: []*structs.DiscoverySplit{ { Weight: 100, - NextNode: "resolver:main.default.dc1", + NextNode: "resolver:main.default.default.dc1", }, }, }, - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 33 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } @@ -540,35 +542,35 @@ func testcase_RouteBypassesSplit() compileTestCase { Routes: []*structs.DiscoveryRoute{ { Definition: &router.Routes[0], - NextNode: "resolver:bypass.other.default.dc1", + NextNode: "resolver:bypass.other.default.default.dc1", }, { Definition: newDefaultServiceRoute("main", "default"), - NextNode: "resolver:main.default.dc1", + NextNode: "resolver:main.default.default.dc1", }, }, }, - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, - "resolver:bypass.other.default.dc1": { + "resolver:bypass.other.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "bypass.other.default.dc1", + Name: "bypass.other.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "bypass.other.default.dc1", + Target: "bypass.other.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), - "bypass.other.default.dc1": newTarget("other", "bypass", "default", "dc1", func(t *structs.DiscoveryTarget) { + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), + "bypass.other.default.default.dc1": newTarget("other", "bypass", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == bypass", } @@ -603,22 +605,22 @@ func testcase_NoopSplit_DefaultResolver() compileTestCase { Splits: []*structs.DiscoverySplit{ { Weight: 100, - NextNode: "resolver:main.default.dc1", + NextNode: "resolver:main.default.default.dc1", }, }, }, - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } @@ -656,21 +658,21 @@ func testcase_NoopSplit_WithResolver() compileTestCase { Splits: []*structs.DiscoverySplit{ { Weight: 100, - NextNode: "resolver:main.default.dc1", + NextNode: "resolver:main.default.default.dc1", }, }, }, - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 33 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } @@ -716,38 +718,38 @@ func testcase_SubsetSplit() compileTestCase { Splits: []*structs.DiscoverySplit{ { Weight: 60, - NextNode: "resolver:v2.main.default.dc1", + NextNode: "resolver:v2.main.default.default.dc1", }, { Weight: 40, - NextNode: "resolver:v1.main.default.dc1", + NextNode: "resolver:v1.main.default.default.dc1", }, }, }, - "resolver:v2.main.default.dc1": { + "resolver:v2.main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "v2.main.default.dc1", + Name: "v2.main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "v2.main.default.dc1", + Target: "v2.main.default.default.dc1", }, }, - "resolver:v1.main.default.dc1": { + "resolver:v1.main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "v1.main.default.dc1", + Name: "v1.main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "v1.main.default.dc1", + Target: "v1.main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "v2.main.default.dc1": newTarget("main", "v2", "default", "dc1", func(t *structs.DiscoveryTarget) { + "v2.main.default.default.dc1": newTarget("main", "v2", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == 2", } }), - "v1.main.default.dc1": newTarget("main", "v1", "default", "dc1", func(t *structs.DiscoveryTarget) { + "v1.main.default.default.dc1": newTarget("main", "v1", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == 1", } @@ -785,36 +787,36 @@ func testcase_ServiceSplit() compileTestCase { Splits: []*structs.DiscoverySplit{ { Weight: 60, - NextNode: "resolver:foo.default.dc1", + NextNode: "resolver:foo.default.default.dc1", }, { Weight: 40, - NextNode: "resolver:bar.default.dc1", + NextNode: "resolver:bar.default.default.dc1", }, }, }, - "resolver:foo.default.dc1": { + "resolver:foo.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "foo.default.dc1", + Name: "foo.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "foo.default.dc1", + Target: "foo.default.default.dc1", }, }, - "resolver:bar.default.dc1": { + "resolver:bar.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "bar.default.dc1", + Name: "bar.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "bar.default.dc1", + Target: "bar.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "foo.default.dc1": newTarget("foo", "", "default", "dc1", nil), - "bar.default.dc1": newTarget("bar", "", "default", "dc1", nil), + "foo.default.default.dc1": newTarget("foo", "", "default", "default", "dc1", nil), + "bar.default.default.dc1": newTarget("bar", "", "default", "default", "dc1", nil), }, } @@ -874,21 +876,21 @@ func testcase_SplitBypassesSplit() compileTestCase { Splits: []*structs.DiscoverySplit{ { Weight: 100, - NextNode: "resolver:bypassed.next.default.dc1", + NextNode: "resolver:bypassed.next.default.default.dc1", }, }, }, - "resolver:bypassed.next.default.dc1": { + "resolver:bypassed.next.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "bypassed.next.default.dc1", + Name: "bypassed.next.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "bypassed.next.default.dc1", + Target: "bypassed.next.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "bypassed.next.default.dc1": newTarget("next", "bypassed", "default", "dc1", func(t *structs.DiscoveryTarget) { + "bypassed.next.default.default.dc1": newTarget("next", "bypassed", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == bypass", } @@ -913,20 +915,20 @@ func testcase_ServiceRedirect() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:other.default.dc1", + StartNode: "resolver:other.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:other.default.dc1": { + "resolver:other.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "other.default.dc1", + Name: "other.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "other.default.dc1", + Target: "other.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "other.default.dc1": newTarget("other", "", "default", "dc1", nil), + "other.default.default.dc1": newTarget("other", "", "default", "default", "dc1", nil), }, } @@ -960,19 +962,19 @@ func testcase_ServiceAndSubsetRedirect() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:v2.other.default.dc1", + StartNode: "resolver:v2.other.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:v2.other.default.dc1": { + "resolver:v2.other.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "v2.other.default.dc1", + Name: "v2.other.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "v2.other.default.dc1", + Target: "v2.other.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "v2.other.default.dc1": newTarget("other", "v2", "default", "dc1", func(t *structs.DiscoveryTarget) { + "v2.other.default.default.dc1": newTarget("other", "v2", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == 2", } @@ -996,19 +998,19 @@ func testcase_DatacenterRedirect() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc9", + StartNode: "resolver:main.default.default.dc9", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc9": { + "resolver:main.default.default.dc9": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc9", + Name: "main.default.default.dc9", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "main.default.dc9", + Target: "main.default.default.dc9", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc9": newTarget("main", "", "default", "dc9", nil), + "main.default.default.dc9": newTarget("main", "", "default", "default", "dc9", nil), }, } return compileTestCase{entries: entries, expect: expect} @@ -1035,19 +1037,19 @@ func testcase_DatacenterRedirect_WithMeshGateways() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc9", + StartNode: "resolver:main.default.default.dc9", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc9": { + "resolver:main.default.default.dc9": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc9", + Name: "main.default.default.dc9", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "main.default.dc9", + Target: "main.default.default.dc9", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc9": newTarget("main", "", "default", "dc9", func(t *structs.DiscoveryTarget) { + "main.default.default.dc9": newTarget("main", "", "default", "default", "dc9", func(t *structs.DiscoveryTarget) { t.MeshGateway = structs.MeshGatewayConfig{ Mode: structs.MeshGatewayModeRemote, } @@ -1071,23 +1073,23 @@ func testcase_ServiceFailover() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", Failover: &structs.DiscoveryFailover{ - Targets: []string{"backup.default.dc1"}, + Targets: []string{"backup.default.default.dc1"}, }, }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), - "backup.default.dc1": newTarget("backup", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), + "backup.default.default.dc1": newTarget("backup", "", "default", "default", "dc1", nil), }, } return compileTestCase{entries: entries, expect: expect} @@ -1114,23 +1116,23 @@ func testcase_ServiceFailoverThroughRedirect() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", Failover: &structs.DiscoveryFailover{ - Targets: []string{"actual.default.dc1"}, + Targets: []string{"actual.default.default.dc1"}, }, }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), - "actual.default.dc1": newTarget("actual", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), + "actual.default.default.dc1": newTarget("actual", "", "default", "default", "dc1", nil), }, } return compileTestCase{entries: entries, expect: expect} @@ -1157,23 +1159,23 @@ func testcase_Resolver_CircularFailover() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", Failover: &structs.DiscoveryFailover{ - Targets: []string{"backup.default.dc1"}, + Targets: []string{"backup.default.default.dc1"}, }, }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), - "backup.default.dc1": newTarget("backup", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), + "backup.default.default.dc1": newTarget("backup", "", "default", "default", "dc1", nil), }, } return compileTestCase{entries: entries, expect: expect} @@ -1198,23 +1200,23 @@ func testcase_ServiceAndSubsetFailover() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", Failover: &structs.DiscoveryFailover{ - Targets: []string{"backup.main.default.dc1"}, + Targets: []string{"backup.main.default.default.dc1"}, }, }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), - "backup.main.default.dc1": newTarget("main", "backup", "default", "dc1", func(t *structs.DiscoveryTarget) { + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), + "backup.main.default.default.dc1": newTarget("main", "backup", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == backup", } @@ -1238,24 +1240,24 @@ func testcase_DatacenterFailover() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", Failover: &structs.DiscoveryFailover{ - Targets: []string{"main.default.dc2", "main.default.dc4"}, + Targets: []string{"main.default.default.dc2", "main.default.default.dc4"}, }, }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), - "main.default.dc2": newTarget("main", "", "default", "dc2", nil), - "main.default.dc4": newTarget("main", "", "default", "dc4", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), + "main.default.default.dc2": newTarget("main", "", "default", "default", "dc2", nil), + "main.default.default.dc4": newTarget("main", "", "default", "default", "dc4", nil), }, } return compileTestCase{entries: entries, expect: expect} @@ -1282,31 +1284,31 @@ func testcase_DatacenterFailover_WithMeshGateways() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", Failover: &structs.DiscoveryFailover{ Targets: []string{ - "main.default.dc2", - "main.default.dc4", + "main.default.default.dc2", + "main.default.default.dc4", }, }, }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), - "main.default.dc2": newTarget("main", "", "default", "dc2", func(t *structs.DiscoveryTarget) { + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), + "main.default.default.dc2": newTarget("main", "", "default", "default", "dc2", func(t *structs.DiscoveryTarget) { t.MeshGateway = structs.MeshGatewayConfig{ Mode: structs.MeshGatewayModeRemote, } }), - "main.default.dc4": newTarget("main", "", "default", "dc4", func(t *structs.DiscoveryTarget) { + "main.default.default.dc4": newTarget("main", "", "default", "default", "dc4", func(t *structs.DiscoveryTarget) { t.MeshGateway = structs.MeshGatewayConfig{ Mode: structs.MeshGatewayModeRemote, } @@ -1351,21 +1353,21 @@ func testcase_NoopSplit_WithDefaultSubset() compileTestCase { Splits: []*structs.DiscoverySplit{ { Weight: 100, - NextNode: "resolver:v2.main.default.dc1", + NextNode: "resolver:v2.main.default.default.dc1", }, }, }, - "resolver:v2.main.default.dc1": { + "resolver:v2.main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "v2.main.default.dc1", + Name: "v2.main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "v2.main.default.dc1", + Target: "v2.main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "v2.main.default.dc1": newTarget("main", "v2", "default", "dc1", func(t *structs.DiscoveryTarget) { + "v2.main.default.default.dc1": newTarget("main", "v2", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == 2", } @@ -1380,21 +1382,21 @@ func testcase_DefaultResolver() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ // TODO-TARGET - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } return compileTestCase{entries: entries, expect: expect, expectIsDefault: true} @@ -1415,20 +1417,20 @@ func testcase_DefaultResolver_WithProxyDefaults() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "grpc", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } return compileTestCase{entries: entries, expect: expect, expectIsDefault: true} @@ -1448,20 +1450,20 @@ func testcase_RedirectToDefaultResolverIsNotDefaultChain() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:other.default.dc1", + StartNode: "resolver:other.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:other.default.dc1": { + "resolver:other.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "other.default.dc1", + Name: "other.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "other.default.dc1", + Target: "other.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "other.default.dc1": newTarget("other", "", "default", "dc1", nil), + "other.default.default.dc1": newTarget("other", "", "default", "default", "dc1", nil), }, } @@ -1484,19 +1486,19 @@ func testcase_Resolve_WithDefaultSubset() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:v2.main.default.dc1", + StartNode: "resolver:v2.main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:v2.main.default.dc1": { + "resolver:v2.main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "v2.main.default.dc1", + Name: "v2.main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "v2.main.default.dc1", + Target: "v2.main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "v2.main.default.dc1": newTarget("main", "v2", "default", "dc1", func(t *structs.DiscoveryTarget) { + "v2.main.default.default.dc1": newTarget("main", "v2", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == 2", } @@ -1516,20 +1518,20 @@ func testcase_DefaultResolver_ExternalSNI() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", func(t *structs.DiscoveryTarget) { + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.SNI = "main.some.other.service.mesh" t.External = true }), @@ -1659,34 +1661,34 @@ func testcase_MultiDatacenterCanary() compileTestCase { Splits: []*structs.DiscoverySplit{ { Weight: 60, - NextNode: "resolver:main.default.dc2", + NextNode: "resolver:main.default.default.dc2", }, { Weight: 40, - NextNode: "resolver:main.default.dc3", + NextNode: "resolver:main.default.default.dc3", }, }, }, - "resolver:main.default.dc2": { + "resolver:main.default.default.dc2": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc2", + Name: "main.default.default.dc2", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 33 * time.Second, - Target: "main.default.dc2", + Target: "main.default.default.dc2", }, }, - "resolver:main.default.dc3": { + "resolver:main.default.default.dc3": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc3", + Name: "main.default.default.dc3", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 33 * time.Second, - Target: "main.default.dc3", + Target: "main.default.default.dc3", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc2": newTarget("main", "", "default", "dc2", nil), - "main.default.dc3": newTarget("main", "", "default", "dc3", nil), + "main.default.default.dc2": newTarget("main", "", "default", "default", "dc2", nil), + "main.default.default.dc3": newTarget("main", "", "default", "default", "dc3", nil), }, } return compileTestCase{entries: entries, expect: expect} @@ -1801,7 +1803,7 @@ func testcase_AllBellsAndWhistles() compileTestCase { Routes: []*structs.DiscoveryRoute{ { Definition: &router.Routes[0], - NextNode: "resolver:prod.redirected.default.dc1", + NextNode: "resolver:prod.redirected.default.default.dc1", }, { Definition: &router.Routes[1], @@ -1809,7 +1811,7 @@ func testcase_AllBellsAndWhistles() compileTestCase { }, { Definition: newDefaultServiceRoute("main", "default"), - NextNode: "resolver:default-subset.main.default.dc1", + NextNode: "resolver:default-subset.main.default.default.dc1", }, }, }, @@ -1819,19 +1821,19 @@ func testcase_AllBellsAndWhistles() compileTestCase { Splits: []*structs.DiscoverySplit{ { Weight: 60, - NextNode: "resolver:prod.redirected.default.dc1", + NextNode: "resolver:prod.redirected.default.default.dc1", }, { Weight: 30, - NextNode: "resolver:v1.main.default.dc1", + NextNode: "resolver:v1.main.default.default.dc1", }, { Weight: 8, - NextNode: "resolver:v2.main.default.dc1", + NextNode: "resolver:v2.main.default.default.dc1", }, { Weight: 2, - NextNode: "resolver:v3.main.default.dc1", + NextNode: "resolver:v3.main.default.default.dc1", }, }, LoadBalancer: &structs.LoadBalancer{ @@ -1846,12 +1848,12 @@ func testcase_AllBellsAndWhistles() compileTestCase { }, }, }, - "resolver:prod.redirected.default.dc1": { + "resolver:prod.redirected.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "prod.redirected.default.dc1", + Name: "prod.redirected.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "prod.redirected.default.dc1", + Target: "prod.redirected.default.default.dc1", }, LoadBalancer: &structs.LoadBalancer{ Policy: "ring_hash", @@ -1865,61 +1867,61 @@ func testcase_AllBellsAndWhistles() compileTestCase { }, }, }, - "resolver:v1.main.default.dc1": { + "resolver:v1.main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "v1.main.default.dc1", + Name: "v1.main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "v1.main.default.dc1", + Target: "v1.main.default.default.dc1", }, }, - "resolver:v2.main.default.dc1": { + "resolver:v2.main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "v2.main.default.dc1", + Name: "v2.main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "v2.main.default.dc1", + Target: "v2.main.default.default.dc1", }, }, - "resolver:v3.main.default.dc1": { + "resolver:v3.main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "v3.main.default.dc1", + Name: "v3.main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "v3.main.default.dc1", + Target: "v3.main.default.default.dc1", }, }, - "resolver:default-subset.main.default.dc1": { + "resolver:default-subset.main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "default-subset.main.default.dc1", + Name: "default-subset.main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 5 * time.Second, - Target: "default-subset.main.default.dc1", + Target: "default-subset.main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "prod.redirected.default.dc1": newTarget("redirected", "prod", "default", "dc1", func(t *structs.DiscoveryTarget) { + "prod.redirected.default.default.dc1": newTarget("redirected", "prod", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "ServiceMeta.env == prod", } }), - "v1.main.default.dc1": newTarget("main", "v1", "default", "dc1", func(t *structs.DiscoveryTarget) { + "v1.main.default.default.dc1": newTarget("main", "v1", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == 1", } }), - "v2.main.default.dc1": newTarget("main", "v2", "default", "dc1", func(t *structs.DiscoveryTarget) { + "v2.main.default.default.dc1": newTarget("main", "v2", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == 2", } }), - "v3.main.default.dc1": newTarget("main", "v3", "default", "dc1", func(t *structs.DiscoveryTarget) { + "v3.main.default.default.dc1": newTarget("main", "v3", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{ Filter: "Service.Meta.version == 3", } }), - "default-subset.main.default.dc1": newTarget("main", "default-subset", "default", "dc1", func(t *structs.DiscoveryTarget) { + "default-subset.main.default.default.dc1": newTarget("main", "default-subset", "default", "default", "dc1", func(t *structs.DiscoveryTarget) { t.Subset = structs.ServiceResolverSubset{OnlyPassing: true} }), }, @@ -2108,21 +2110,21 @@ func testcase_ResolverProtocolOverride() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "http2", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ // TODO-TARGET - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } return compileTestCase{entries: entries, expect: expect, expectIsDefault: true, @@ -2141,21 +2143,21 @@ func testcase_ResolverProtocolOverrideIgnored() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "http2", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ // TODO-TARGET - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } return compileTestCase{entries: entries, expect: expect, expectIsDefault: true, @@ -2178,21 +2180,21 @@ func testcase_RouterIgnored_ResolverProtocolOverride() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "tcp", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ // TODO-TARGET - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } return compileTestCase{entries: entries, expect: expect, expectIsDefault: true, @@ -2328,15 +2330,15 @@ func testcase_LBSplitterAndResolver() compileTestCase { Splits: []*structs.DiscoverySplit{ { Weight: 60, - NextNode: "resolver:foo.default.dc1", + NextNode: "resolver:foo.default.default.dc1", }, { Weight: 20, - NextNode: "resolver:bar.default.dc1", + NextNode: "resolver:bar.default.default.dc1", }, { Weight: 20, - NextNode: "resolver:baz.default.dc1", + NextNode: "resolver:baz.default.default.dc1", }, }, // The LB config from bar is attached because splitters only care about hash-based policies, @@ -2354,13 +2356,13 @@ func testcase_LBSplitterAndResolver() compileTestCase { }, }, // Each service's LB config is passed down from the service-resolver to the resolver node - "resolver:foo.default.dc1": { + "resolver:foo.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "foo.default.dc1", + Name: "foo.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: false, ConnectTimeout: 5 * time.Second, - Target: "foo.default.dc1", + Target: "foo.default.default.dc1", }, LoadBalancer: &structs.LoadBalancer{ Policy: "least_request", @@ -2369,13 +2371,13 @@ func testcase_LBSplitterAndResolver() compileTestCase { }, }, }, - "resolver:bar.default.dc1": { + "resolver:bar.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "bar.default.dc1", + Name: "bar.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: false, ConnectTimeout: 5 * time.Second, - Target: "bar.default.dc1", + Target: "bar.default.default.dc1", }, LoadBalancer: &structs.LoadBalancer{ Policy: "ring_hash", @@ -2389,13 +2391,13 @@ func testcase_LBSplitterAndResolver() compileTestCase { }, }, }, - "resolver:baz.default.dc1": { + "resolver:baz.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "baz.default.dc1", + Name: "baz.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: false, ConnectTimeout: 5 * time.Second, - Target: "baz.default.dc1", + Target: "baz.default.default.dc1", }, LoadBalancer: &structs.LoadBalancer{ Policy: "maglev", @@ -2414,9 +2416,9 @@ func testcase_LBSplitterAndResolver() compileTestCase { }, }, Targets: map[string]*structs.DiscoveryTarget{ - "foo.default.dc1": newTarget("foo", "", "default", "dc1", nil), - "bar.default.dc1": newTarget("bar", "", "default", "dc1", nil), - "baz.default.dc1": newTarget("baz", "", "default", "dc1", nil), + "foo.default.default.dc1": newTarget("foo", "", "default", "default", "dc1", nil), + "bar.default.default.dc1": newTarget("bar", "", "default", "default", "dc1", nil), + "baz.default.default.dc1": newTarget("baz", "", "default", "default", "dc1", nil), }, } @@ -2448,15 +2450,15 @@ func testcase_LBResolver() compileTestCase { expect := &structs.CompiledDiscoveryChain{ Protocol: "http", - StartNode: "resolver:main.default.dc1", + StartNode: "resolver:main.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:main.default.dc1": { + "resolver:main.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "main.default.dc1", + Name: "main.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: false, ConnectTimeout: 5 * time.Second, - Target: "main.default.dc1", + Target: "main.default.default.dc1", }, LoadBalancer: &structs.LoadBalancer{ Policy: "ring_hash", @@ -2472,7 +2474,7 @@ func testcase_LBResolver() compileTestCase { }, }, Targets: map[string]*structs.DiscoveryTarget{ - "main.default.dc1": newTarget("main", "", "default", "dc1", nil), + "main.default.default.dc1": newTarget("main", "", "default", "default", "dc1", nil), }, } @@ -2520,8 +2522,8 @@ func newEntries() *structs.DiscoveryChainConfigEntries { } } -func newTarget(service, serviceSubset, namespace, datacenter string, modFn func(t *structs.DiscoveryTarget)) *structs.DiscoveryTarget { - t := structs.NewDiscoveryTarget(service, serviceSubset, namespace, datacenter) +func newTarget(service, serviceSubset, namespace, partition, datacenter string, modFn func(t *structs.DiscoveryTarget)) *structs.DiscoveryTarget { + t := structs.NewDiscoveryTarget(service, serviceSubset, namespace, partition, datacenter) t.SNI = connect.TargetSNI(t, "trustdomain.consul") t.Name = t.SNI if modFn != nil { diff --git a/agent/consul/discoverychain/testing.go b/agent/consul/discoverychain/testing.go index 863fa9f87..c13801dd7 100644 --- a/agent/consul/discoverychain/testing.go +++ b/agent/consul/discoverychain/testing.go @@ -6,16 +6,14 @@ import ( "github.com/stretchr/testify/require" ) -func TestCompileConfigEntries( - t testing.T, +func TestCompileConfigEntries(t testing.T, serviceName string, evaluateInNamespace string, + evaluateInPartition string, evaluateInDatacenter string, evaluateInTrustDomain string, useInDatacenter string, - setup func(req *CompileRequest), - entries ...structs.ConfigEntry, -) *structs.CompiledDiscoveryChain { + setup func(req *CompileRequest), entries ...structs.ConfigEntry) *structs.CompiledDiscoveryChain { set := structs.NewDiscoveryChainConfigEntries() set.AddEntries(entries...) @@ -23,6 +21,7 @@ func TestCompileConfigEntries( req := CompileRequest{ ServiceName: serviceName, EvaluateInNamespace: evaluateInNamespace, + EvaluateInPartition: evaluateInPartition, EvaluateInDatacenter: evaluateInDatacenter, EvaluateInTrustDomain: evaluateInTrustDomain, UseInDatacenter: useInDatacenter, diff --git a/agent/consul/state/config_entry.go b/agent/consul/state/config_entry.go index c85f36758..c6f568e7a 100644 --- a/agent/consul/state/config_entry.go +++ b/agent/consul/state/config_entry.go @@ -391,6 +391,7 @@ func (s *Store) discoveryChainTargetsTxn(tx ReadTxn, ws memdb.WatchSet, dc, serv req := discoverychain.CompileRequest{ ServiceName: source.Name, EvaluateInNamespace: source.NamespaceOrDefault(), + EvaluateInPartition: source.PartitionOrDefault(), EvaluateInDatacenter: dc, UseInDatacenter: dc, } @@ -448,6 +449,7 @@ func (s *Store) discoveryChainSourcesTxn(tx ReadTxn, ws memdb.WatchSet, dc strin req := discoverychain.CompileRequest{ ServiceName: sn.Name, EvaluateInNamespace: sn.NamespaceOrDefault(), + EvaluateInPartition: sn.PartitionOrDefault(), EvaluateInDatacenter: dc, UseInDatacenter: dc, } @@ -717,6 +719,7 @@ func testCompileDiscoveryChain( req := discoverychain.CompileRequest{ ServiceName: chainName, EvaluateInNamespace: entMeta.NamespaceOrDefault(), + EvaluateInPartition: entMeta.PartitionOrDefault(), EvaluateInDatacenter: "dc1", EvaluateInTrustDomain: "b6fc9da3-03d4-4b5a-9134-c045e9b20152.consul", UseInDatacenter: "dc1", @@ -1200,6 +1203,7 @@ func protocolForService( req := discoverychain.CompileRequest{ ServiceName: svc.Name, EvaluateInNamespace: svc.NamespaceOrDefault(), + EvaluateInPartition: svc.PartitionOrDefault(), EvaluateInDatacenter: "dc1", // Use a dummy trust domain since that won't affect the protocol here. EvaluateInTrustDomain: "b6fc9da3-03d4-4b5a-9134-c045e9b20152.consul", diff --git a/agent/discovery_chain_endpoint_test.go b/agent/discovery_chain_endpoint_test.go index 4a89443bc..177f9e5da 100644 --- a/agent/discovery_chain_endpoint_test.go +++ b/agent/discovery_chain_endpoint_test.go @@ -26,8 +26,8 @@ func TestDiscoveryChainRead(t *testing.T) { defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") - newTarget := func(service, serviceSubset, namespace, datacenter string) *structs.DiscoveryTarget { - t := structs.NewDiscoveryTarget(service, serviceSubset, namespace, datacenter) + newTarget := func(service, serviceSubset, namespace, partition, datacenter string) *structs.DiscoveryTarget { + t := structs.NewDiscoveryTarget(service, serviceSubset, namespace, partition, datacenter) t.SNI = connect.TargetSNI(t, connect.TestClusterID+".consul") t.Name = t.SNI return t @@ -76,22 +76,23 @@ func TestDiscoveryChainRead(t *testing.T) { expect := &structs.CompiledDiscoveryChain{ ServiceName: "web", Namespace: "default", + Partition: "default", Datacenter: "dc1", Protocol: "tcp", - StartNode: "resolver:web.default.dc1", + StartNode: "resolver:web.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:web.default.dc1": { + "resolver:web.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc1", + Name: "web.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "web.default.dc1", + Target: "web.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "web.default.dc1": newTarget("web", "", "default", "dc1"), + "web.default.default.dc1": newTarget("web", "", "default", "default", "dc1"), }, } require.Equal(t, expect, value.Chain) @@ -119,22 +120,23 @@ func TestDiscoveryChainRead(t *testing.T) { expect := &structs.CompiledDiscoveryChain{ ServiceName: "web", Namespace: "default", + Partition: "default", Datacenter: "dc2", Protocol: "tcp", - StartNode: "resolver:web.default.dc2", + StartNode: "resolver:web.default.default.dc2", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:web.default.dc2": { + "resolver:web.default.default.dc2": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc2", + Name: "web.default.default.dc2", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "web.default.dc2", + Target: "web.default.default.dc2", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "web.default.dc2": newTarget("web", "", "default", "dc2"), + "web.default.default.dc2": newTarget("web", "", "default", "default", "dc2"), }, } require.Equal(t, expect, value.Chain) @@ -171,22 +173,23 @@ func TestDiscoveryChainRead(t *testing.T) { expect := &structs.CompiledDiscoveryChain{ ServiceName: "web", Namespace: "default", + Partition: "default", Datacenter: "dc1", Protocol: "tcp", - StartNode: "resolver:web.default.dc1", + StartNode: "resolver:web.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:web.default.dc1": { + "resolver:web.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc1", + Name: "web.default.default.dc1", Resolver: &structs.DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "web.default.dc1", + Target: "web.default.default.dc1", }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "web.default.dc1": newTarget("web", "", "default", "dc1"), + "web.default.default.dc1": newTarget("web", "", "default", "default", "dc1"), }, } require.Equal(t, expect, value.Chain) @@ -233,25 +236,26 @@ func TestDiscoveryChainRead(t *testing.T) { expect := &structs.CompiledDiscoveryChain{ ServiceName: "web", Namespace: "default", + Partition: "default", Datacenter: "dc1", Protocol: "tcp", - StartNode: "resolver:web.default.dc1", + StartNode: "resolver:web.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:web.default.dc1": { + "resolver:web.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc1", + Name: "web.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 33 * time.Second, - Target: "web.default.dc1", + Target: "web.default.default.dc1", Failover: &structs.DiscoveryFailover{ - Targets: []string{"web.default.dc2"}, + Targets: []string{"web.default.default.dc2"}, }, }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "web.default.dc1": newTarget("web", "", "default", "dc1"), - "web.default.dc2": newTarget("web", "", "default", "dc2"), + "web.default.default.dc1": newTarget("web", "", "default", "default", "dc1"), + "web.default.default.dc2": newTarget("web", "", "default", "default", "dc2"), }, } if !reflect.DeepEqual(expect, value.Chain) { @@ -260,7 +264,7 @@ func TestDiscoveryChainRead(t *testing.T) { }) })) - expectTarget_DC2 := newTarget("web", "", "default", "dc2") + expectTarget_DC2 := newTarget("web", "", "default", "default", "dc2") expectTarget_DC2.MeshGateway = structs.MeshGatewayConfig{ Mode: structs.MeshGatewayModeLocal, } @@ -268,26 +272,27 @@ func TestDiscoveryChainRead(t *testing.T) { expectModifiedWithOverrides := &structs.CompiledDiscoveryChain{ ServiceName: "web", Namespace: "default", + Partition: "default", Datacenter: "dc1", Protocol: "grpc", CustomizationHash: "98809527", - StartNode: "resolver:web.default.dc1", + StartNode: "resolver:web.default.default.dc1", Nodes: map[string]*structs.DiscoveryGraphNode{ - "resolver:web.default.dc1": { + "resolver:web.default.default.dc1": { Type: structs.DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc1", + Name: "web.default.default.dc1", Resolver: &structs.DiscoveryResolver{ ConnectTimeout: 22 * time.Second, - Target: "web.default.dc1", + Target: "web.default.default.dc1", Failover: &structs.DiscoveryFailover{ - Targets: []string{"web.default.dc2"}, + Targets: []string{"web.default.default.dc2"}, }, }, }, }, Targets: map[string]*structs.DiscoveryTarget{ - "web.default.dc1": newTarget("web", "", "default", "dc1"), - expectTarget_DC2.ID: expectTarget_DC2, + "web.default.default.dc1": newTarget("web", "", "default", "default", "dc1"), + expectTarget_DC2.ID: expectTarget_DC2, }, } diff --git a/agent/proxycfg/connect_proxy.go b/agent/proxycfg/connect_proxy.go index d20e7ad7f..250b88705 100644 --- a/agent/proxycfg/connect_proxy.go +++ b/agent/proxycfg/connect_proxy.go @@ -135,6 +135,11 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e ns = u.DestinationNamespace } + partition := s.proxyID.PartitionOrDefault() + if u.DestinationPartition != "" { + partition = u.DestinationPartition + } + cfg, err := parseReducedUpstreamConfig(u.Config) if err != nil { // Don't hard fail on a config typo, just warn. We'll fall back on @@ -162,14 +167,14 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e case structs.UpstreamDestTypeService: fallthrough - // TODO (partition): pass Partition to DiscoveryChainRequest? - case "": // Treat unset as the default Service type + case "": err = s.cache.Notify(ctx, cachetype.CompiledDiscoveryChainName, &structs.DiscoveryChainRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Name: u.DestinationName, EvaluateInDatacenter: dc, EvaluateInNamespace: ns, + EvaluateInPartition: partition, OverrideMeshGateway: s.proxyCfg.MeshGateway.OverlayWith(u.MeshGateway), OverrideProtocol: cfg.Protocol, OverrideConnectTimeout: cfg.ConnectTimeout(), diff --git a/agent/proxycfg/manager_test.go b/agent/proxycfg/manager_test.go index 256e15216..7c73e7abb 100644 --- a/agent/proxycfg/manager_test.go +++ b/agent/proxycfg/manager_test.go @@ -59,53 +59,45 @@ func TestManager_BasicLifecycle(t *testing.T) { roots, leaf := TestCerts(t) dbDefaultChain := func() *structs.CompiledDiscoveryChain { - return discoverychain.TestCompileConfigEntries(t, "db", "default", "dc1", connect.TestClusterID+".consul", "dc1", - func(req *discoverychain.CompileRequest) { - // This is because structs.TestUpstreams uses an opaque config - // to override connect timeouts. - req.OverrideConnectTimeout = 1 * time.Second - }, - &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "db", - }, - ) + return discoverychain.TestCompileConfigEntries(t, "db", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", func(req *discoverychain.CompileRequest) { + // This is because structs.TestUpstreams uses an opaque config + // to override connect timeouts. + req.OverrideConnectTimeout = 1 * time.Second + }, &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "db", + }) } dbSplitChain := func() *structs.CompiledDiscoveryChain { - return discoverychain.TestCompileConfigEntries(t, "db", "default", "dc1", "trustdomain.consul", "dc1", - func(req *discoverychain.CompileRequest) { - // This is because structs.TestUpstreams uses an opaque config - // to override connect timeouts. - req.OverrideConnectTimeout = 1 * time.Second + return discoverychain.TestCompileConfigEntries(t, "db", "default", "default", "dc1", "trustdomain.consul", "dc1", func(req *discoverychain.CompileRequest) { + // This is because structs.TestUpstreams uses an opaque config + // to override connect timeouts. + req.OverrideConnectTimeout = 1 * time.Second + }, &structs.ProxyConfigEntry{ + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + Config: map[string]interface{}{ + "protocol": "http", }, - &structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, - Config: map[string]interface{}{ - "protocol": "http", + }, &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "db", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.version == v1", + }, + "v2": { + Filter: "Service.Meta.version == v2", }, }, - &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "db", - Subsets: map[string]structs.ServiceResolverSubset{ - "v1": { - Filter: "Service.Meta.version == v1", - }, - "v2": { - Filter: "Service.Meta.version == v2", - }, - }, + }, &structs.ServiceSplitterConfigEntry{ + Kind: structs.ServiceSplitter, + Name: "db", + Splits: []structs.ServiceSplit{ + {Weight: 60, ServiceSubset: "v1"}, + {Weight: 40, ServiceSubset: "v2"}, }, - &structs.ServiceSplitterConfigEntry{ - Kind: structs.ServiceSplitter, - Name: "db", - Splits: []structs.ServiceSplit{ - {Weight: 60, ServiceSubset: "v1"}, - {Weight: 40, ServiceSubset: "v2"}, - }, - }, - ) + }) } upstreams := structs.TestUpstreams(t) @@ -157,6 +149,7 @@ func TestManager_BasicLifecycle(t *testing.T) { Name: "db", EvaluateInDatacenter: "dc1", EvaluateInNamespace: "default", + EvaluateInPartition: "default", // This is because structs.TestUpstreams uses an opaque config // to override connect timeouts. OverrideConnectTimeout: 1 * time.Second, @@ -225,7 +218,7 @@ func TestManager_BasicLifecycle(t *testing.T) { WatchedUpstreams: nil, // Clone() clears this out WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ db.String(): { - "db.default.dc1": TestUpstreamNodes(t, db.Name), + "db.default.default.dc1": TestUpstreamNodes(t, db.Name), }, }, WatchedGateways: nil, // Clone() clears this out @@ -281,8 +274,8 @@ func TestManager_BasicLifecycle(t *testing.T) { WatchedUpstreams: nil, // Clone() clears this out WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ db.String(): { - "v1.db.default.dc1": TestUpstreamNodes(t, db.Name), - "v2.db.default.dc1": TestUpstreamNodesAlternate(t), + "v1.db.default.default.dc1": TestUpstreamNodes(t, db.Name), + "v2.db.default.default.dc1": TestUpstreamNodesAlternate(t), }, }, WatchedGateways: nil, // Clone() clears this out diff --git a/agent/proxycfg/state_test.go b/agent/proxycfg/state_test.go index dd0ce6511..974fe4995 100644 --- a/agent/proxycfg/state_test.go +++ b/agent/proxycfg/state_test.go @@ -488,6 +488,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Name: "api", EvaluateInDatacenter: "dc1", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", OverrideMeshGateway: structs.MeshGatewayConfig{ Mode: meshGatewayProxyConfigValue, @@ -497,6 +498,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Name: "api-failover-remote", EvaluateInDatacenter: "dc2", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", OverrideMeshGateway: structs.MeshGatewayConfig{ Mode: structs.MeshGatewayModeRemote, @@ -506,6 +508,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Name: "api-failover-local", EvaluateInDatacenter: "dc2", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", OverrideMeshGateway: structs.MeshGatewayConfig{ Mode: structs.MeshGatewayModeLocal, @@ -515,6 +518,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Name: "api-failover-direct", EvaluateInDatacenter: "dc2", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", OverrideMeshGateway: structs.MeshGatewayConfig{ Mode: structs.MeshGatewayModeNone, @@ -524,6 +528,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Name: "api-dc2", EvaluateInDatacenter: "dc1", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", OverrideMeshGateway: structs.MeshGatewayConfig{ Mode: meshGatewayProxyConfigValue, @@ -545,7 +550,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { { CorrelationID: "discovery-chain:api", Result: &structs.DiscoveryChainResponse{ - Chain: discoverychain.TestCompileConfigEntries(t, "api", "default", "dc1", "trustdomain.consul", "dc1", + Chain: discoverychain.TestCompileConfigEntries(t, "api", "default", "default", "dc1", "trustdomain.consul", "dc1", func(req *discoverychain.CompileRequest) { req.OverrideMeshGateway.Mode = meshGatewayProxyConfigValue }), @@ -555,7 +560,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { { CorrelationID: "discovery-chain:api-failover-remote?dc=dc2", Result: &structs.DiscoveryChainResponse{ - Chain: discoverychain.TestCompileConfigEntries(t, "api-failover-remote", "default", "dc2", "trustdomain.consul", "dc1", + Chain: discoverychain.TestCompileConfigEntries(t, "api-failover-remote", "default", "default", "dc2", "trustdomain.consul", "dc1", func(req *discoverychain.CompileRequest) { req.OverrideMeshGateway.Mode = structs.MeshGatewayModeRemote }), @@ -565,7 +570,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { { CorrelationID: "discovery-chain:api-failover-local?dc=dc2", Result: &structs.DiscoveryChainResponse{ - Chain: discoverychain.TestCompileConfigEntries(t, "api-failover-local", "default", "dc2", "trustdomain.consul", "dc1", + Chain: discoverychain.TestCompileConfigEntries(t, "api-failover-local", "default", "default", "dc2", "trustdomain.consul", "dc1", func(req *discoverychain.CompileRequest) { req.OverrideMeshGateway.Mode = structs.MeshGatewayModeLocal }), @@ -575,7 +580,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { { CorrelationID: "discovery-chain:api-failover-direct?dc=dc2", Result: &structs.DiscoveryChainResponse{ - Chain: discoverychain.TestCompileConfigEntries(t, "api-failover-direct", "default", "dc2", "trustdomain.consul", "dc1", + Chain: discoverychain.TestCompileConfigEntries(t, "api-failover-direct", "default", "default", "dc2", "trustdomain.consul", "dc1", func(req *discoverychain.CompileRequest) { req.OverrideMeshGateway.Mode = structs.MeshGatewayModeNone }), @@ -585,19 +590,17 @@ func TestState_WatchesAndUpdates(t *testing.T) { { CorrelationID: "discovery-chain:api-dc2", Result: &structs.DiscoveryChainResponse{ - Chain: discoverychain.TestCompileConfigEntries(t, "api-dc2", "default", "dc1", "trustdomain.consul", "dc1", + Chain: discoverychain.TestCompileConfigEntries(t, "api-dc2", "default", "default", "dc1", "trustdomain.consul", "dc1", func(req *discoverychain.CompileRequest) { req.OverrideMeshGateway.Mode = meshGatewayProxyConfigValue - }, - &structs.ServiceResolverConfigEntry{ + }, &structs.ServiceResolverConfigEntry{ Kind: structs.ServiceResolver, Name: "api-dc2", Redirect: &structs.ServiceResolverRedirect{ Service: "api", Datacenter: "dc2", }, - }, - ), + }), }, Err: nil, }, @@ -624,12 +627,12 @@ func TestState_WatchesAndUpdates(t *testing.T) { stage1 := verificationStage{ requiredWatches: map[string]verifyWatchRequest{ - "upstream-target:api.default.dc1:api": genVerifyServiceWatch("api", "", "dc1", true), - "upstream-target:api-failover-remote.default.dc2:api-failover-remote?dc=dc2": genVerifyServiceWatch("api-failover-remote", "", "dc2", true), - "upstream-target:api-failover-local.default.dc2:api-failover-local?dc=dc2": genVerifyServiceWatch("api-failover-local", "", "dc2", true), - "upstream-target:api-failover-direct.default.dc2:api-failover-direct?dc=dc2": genVerifyServiceWatch("api-failover-direct", "", "dc2", true), - "mesh-gateway:dc2:api-failover-remote?dc=dc2": genVerifyGatewayWatch("dc2"), - "mesh-gateway:dc1:api-failover-local?dc=dc2": genVerifyGatewayWatch("dc1"), + "upstream-target:api.default.default.dc1:api": genVerifyServiceWatch("api", "", "dc1", true), + "upstream-target:api-failover-remote.default.default.dc2:api-failover-remote?dc=dc2": genVerifyServiceWatch("api-failover-remote", "", "dc2", true), + "upstream-target:api-failover-local.default.default.dc2:api-failover-local?dc=dc2": genVerifyServiceWatch("api-failover-local", "", "dc2", true), + "upstream-target:api-failover-direct.default.default.dc2:api-failover-direct?dc=dc2": genVerifyServiceWatch("api-failover-direct", "", "dc2", true), + "mesh-gateway:dc2:api-failover-remote?dc=dc2": genVerifyGatewayWatch("dc2"), + "mesh-gateway:dc1:api-failover-local?dc=dc2": genVerifyGatewayWatch("dc1"), }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { require.True(t, snap.Valid()) @@ -1003,6 +1006,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Name: "api", EvaluateInDatacenter: "dc1", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", }), }, @@ -1010,7 +1014,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { { CorrelationID: "discovery-chain:" + api.String(), Result: &structs.DiscoveryChainResponse{ - Chain: discoverychain.TestCompileConfigEntries(t, "api", "default", "dc1", "trustdomain.consul", "dc1", nil), + Chain: discoverychain.TestCompileConfigEntries(t, "api", "default", "default", "dc1", "trustdomain.consul", "dc1", nil), }, Err: nil, }, @@ -1022,11 +1026,11 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, { requiredWatches: map[string]verifyWatchRequest{ - "upstream-target:api.default.dc1:" + api.String(): genVerifyServiceWatch("api", "", "dc1", true), + "upstream-target:api.default.default.dc1:" + api.String(): genVerifyServiceWatch("api", "", "dc1", true), }, events: []cache.UpdateEvent{ { - CorrelationID: "upstream-target:api.default.dc1:" + api.String(), + CorrelationID: "upstream-target:api.default.default.dc1:" + api.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: structs.CheckServiceNodes{ { @@ -1048,8 +1052,8 @@ func TestState_WatchesAndUpdates(t *testing.T) { require.Len(t, snap.IngressGateway.WatchedUpstreamEndpoints, 1) require.Contains(t, snap.IngressGateway.WatchedUpstreamEndpoints, api.String()) require.Len(t, snap.IngressGateway.WatchedUpstreamEndpoints[api.String()], 1) - require.Contains(t, snap.IngressGateway.WatchedUpstreamEndpoints[api.String()], "api.default.dc1") - require.Equal(t, snap.IngressGateway.WatchedUpstreamEndpoints[api.String()]["api.default.dc1"], + require.Contains(t, snap.IngressGateway.WatchedUpstreamEndpoints[api.String()], "api.default.default.dc1") + require.Equal(t, snap.IngressGateway.WatchedUpstreamEndpoints[api.String()]["api.default.default.dc1"], structs.CheckServiceNodes{ { Node: &structs.Node{ @@ -1752,7 +1756,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { { CorrelationID: "discovery-chain:" + db.String(), Result: &structs.DiscoveryChainResponse{ - Chain: discoverychain.TestCompileConfigEntries(t, "db", "default", "dc1", "trustdomain.consul", "dc1", nil), + Chain: discoverychain.TestCompileConfigEntries(t, "db", "default", "default", "dc1", "trustdomain.consul", "dc1", nil), }, Err: nil, }, @@ -1764,11 +1768,11 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, { requiredWatches: map[string]verifyWatchRequest{ - "upstream-target:db.default.dc1:" + db.String(): genVerifyServiceWatch("db", "", "dc1", true), + "upstream-target:db.default.default.dc1:" + db.String(): genVerifyServiceWatch("db", "", "dc1", true), }, events: []cache.UpdateEvent{ { - CorrelationID: "upstream-target:db.default.dc1:" + db.String(), + CorrelationID: "upstream-target:db.default.default.dc1:" + db.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: structs.CheckServiceNodes{ { @@ -1819,8 +1823,8 @@ func TestState_WatchesAndUpdates(t *testing.T) { require.Len(t, snap.ConnectProxy.WatchedUpstreamEndpoints, 1) require.Contains(t, snap.ConnectProxy.WatchedUpstreamEndpoints, db.String()) require.Len(t, snap.ConnectProxy.WatchedUpstreamEndpoints[db.String()], 1) - require.Contains(t, snap.ConnectProxy.WatchedUpstreamEndpoints[db.String()], "db.default.dc1") - require.Equal(t, snap.ConnectProxy.WatchedUpstreamEndpoints[db.String()]["db.default.dc1"], + require.Contains(t, snap.ConnectProxy.WatchedUpstreamEndpoints[db.String()], "db.default.default.dc1") + require.Equal(t, snap.ConnectProxy.WatchedUpstreamEndpoints[db.String()]["db.default.default.dc1"], structs.CheckServiceNodes{ { Node: &structs.Node{ @@ -1900,15 +1904,13 @@ func TestState_WatchesAndUpdates(t *testing.T) { { CorrelationID: "discovery-chain:" + db.String(), Result: &structs.DiscoveryChainResponse{ - Chain: discoverychain.TestCompileConfigEntries(t, "db", "default", "dc1", "trustdomain.consul", "dc1", nil, - &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "db", - Redirect: &structs.ServiceResolverRedirect{ - Service: "mysql", - }, + Chain: discoverychain.TestCompileConfigEntries(t, "db", "default", "default", "dc1", "trustdomain.consul", "dc1", nil, &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "db", + Redirect: &structs.ServiceResolverRedirect{ + Service: "mysql", }, - ), + }), }, Err: nil, }, @@ -1919,8 +1921,8 @@ func TestState_WatchesAndUpdates(t *testing.T) { // In transparent mode we watch the upstream's endpoints even if the upstream is not a target of its chain. // This will happen in cases like redirects. - require.Contains(t, snap.ConnectProxy.WatchedUpstreams[db.String()], "db.default.dc1") - require.Contains(t, snap.ConnectProxy.WatchedUpstreams[db.String()], "mysql.default.dc1") + require.Contains(t, snap.ConnectProxy.WatchedUpstreams[db.String()], "db.default.default.dc1") + require.Contains(t, snap.ConnectProxy.WatchedUpstreams[db.String()], "mysql.default.default.dc1") }, }, // Empty list of upstreams should clean everything up @@ -1999,6 +2001,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Name: "db", EvaluateInDatacenter: "dc2", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", OverrideMeshGateway: structs.MeshGatewayConfig{Mode: structs.MeshGatewayModeLocal}, }), @@ -2060,6 +2063,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Name: "db", EvaluateInDatacenter: "dc2", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", OverrideMeshGateway: structs.MeshGatewayConfig{Mode: structs.MeshGatewayModeLocal}, }), @@ -2068,7 +2072,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { { CorrelationID: "discovery-chain:" + upstreamIDForDC2(db.String()), Result: &structs.DiscoveryChainResponse{ - Chain: discoverychain.TestCompileConfigEntries(t, "db", "default", "dc2", "trustdomain.consul", "dc1", + Chain: discoverychain.TestCompileConfigEntries(t, "db", "default", "default", "dc2", "trustdomain.consul", "dc1", func(req *discoverychain.CompileRequest) { req.OverrideMeshGateway.Mode = structs.MeshGatewayModeLocal }), @@ -2096,6 +2100,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Name: "db", EvaluateInDatacenter: "dc2", EvaluateInNamespace: "default", + EvaluateInPartition: "default", Datacenter: "dc1", OverrideMeshGateway: structs.MeshGatewayConfig{Mode: structs.MeshGatewayModeLocal}, }), diff --git a/agent/proxycfg/testing.go b/agent/proxycfg/testing.go index d8fe46ffb..b55deaf6d 100644 --- a/agent/proxycfg/testing.go +++ b/agent/proxycfg/testing.go @@ -669,9 +669,7 @@ func TestConfigSnapshot(t testing.T) *ConfigSnapshot { roots, leaf := TestCerts(t) // no entries implies we'll get a default chain - dbChain := discoverychain.TestCompileConfigEntries( - t, "db", "default", "dc1", - connect.TestClusterID+".consul", "dc1", nil) + dbChain := discoverychain.TestCompileConfigEntries(t, "db", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) upstreams := structs.TestUpstreams(t) @@ -701,7 +699,7 @@ func TestConfigSnapshot(t testing.T) *ConfigSnapshot { }, WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ "db": { - "db.default.dc1": TestUpstreamNodes(t, "db"), + "db.default.default.dc1": TestUpstreamNodes(t, "db"), }, }, }, @@ -1345,9 +1343,7 @@ func setupTestVariationConfigEntriesAndSnapshot( entries = append(entries, additionalEntries...) } - dbChain := discoverychain.TestCompileConfigEntries( - t, "db", "default", "dc1", - connect.TestClusterID+".consul", "dc1", compileSetup, entries...) + dbChain := discoverychain.TestCompileConfigEntries(t, "db", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", compileSetup, entries...) upstreams := structs.TestUpstreams(t) snap := ConfigSnapshotUpstreams{ @@ -1357,7 +1353,7 @@ func setupTestVariationConfigEntriesAndSnapshot( }, WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ "db": { - "db.default.dc1": TestUpstreamNodes(t, "db"), + "db.default.default.dc1": TestUpstreamNodes(t, "db"), }, }, UpstreamConfig: upstreams.ToMap(), @@ -1369,14 +1365,14 @@ func setupTestVariationConfigEntriesAndSnapshot( case "simple": case "external-sni": case "failover": - snap.WatchedUpstreamEndpoints["db"]["fail.default.dc1"] = + snap.WatchedUpstreamEndpoints["db"]["fail.default.default.dc1"] = TestUpstreamNodesAlternate(t) case "failover-through-remote-gateway-triggered": - snap.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.default.dc1"] = TestUpstreamNodesInStatus(t, "critical") fallthrough case "failover-through-remote-gateway": - snap.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.default.dc2"] = TestUpstreamNodesDC2(t) snap.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ "db": { @@ -1384,13 +1380,13 @@ func setupTestVariationConfigEntriesAndSnapshot( }, } case "failover-through-double-remote-gateway-triggered": - snap.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.default.dc1"] = TestUpstreamNodesInStatus(t, "critical") - snap.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.default.dc2"] = TestUpstreamNodesInStatusDC2(t, "critical") fallthrough case "failover-through-double-remote-gateway": - snap.WatchedUpstreamEndpoints["db"]["db.default.dc3"] = TestUpstreamNodesDC2(t) + snap.WatchedUpstreamEndpoints["db"]["db.default.default.dc3"] = TestUpstreamNodesDC2(t) snap.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ "db": { "dc2": TestGatewayNodesDC2(t), @@ -1398,11 +1394,11 @@ func setupTestVariationConfigEntriesAndSnapshot( }, } case "failover-through-local-gateway-triggered": - snap.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.default.dc1"] = TestUpstreamNodesInStatus(t, "critical") fallthrough case "failover-through-local-gateway": - snap.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.default.dc2"] = TestUpstreamNodesDC2(t) snap.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ "db": { @@ -1410,13 +1406,13 @@ func setupTestVariationConfigEntriesAndSnapshot( }, } case "failover-through-double-local-gateway-triggered": - snap.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.default.dc1"] = TestUpstreamNodesInStatus(t, "critical") - snap.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.default.dc2"] = TestUpstreamNodesInStatusDC2(t, "critical") fallthrough case "failover-through-double-local-gateway": - snap.WatchedUpstreamEndpoints["db"]["db.default.dc3"] = TestUpstreamNodesDC2(t) + snap.WatchedUpstreamEndpoints["db"]["db.default.default.dc3"] = TestUpstreamNodesDC2(t) snap.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ "db": { "dc1": TestGatewayNodesDC1(t), @@ -1424,18 +1420,18 @@ func setupTestVariationConfigEntriesAndSnapshot( } case "splitter-with-resolver-redirect-multidc": snap.WatchedUpstreamEndpoints["db"] = map[string]structs.CheckServiceNodes{ - "v1.db.default.dc1": TestUpstreamNodes(t, "db"), - "v2.db.default.dc2": TestUpstreamNodesDC2(t), + "v1.db.default.default.dc1": TestUpstreamNodes(t, "db"), + "v2.db.default.default.dc2": TestUpstreamNodesDC2(t), } case "chain-and-splitter": case "grpc-router": case "chain-and-router": case "http-multiple-services": snap.WatchedUpstreamEndpoints["foo"] = map[string]structs.CheckServiceNodes{ - "foo.default.dc1": TestUpstreamNodes(t, "foo"), + "foo.default.default.dc1": TestUpstreamNodes(t, "foo"), } snap.WatchedUpstreamEndpoints["bar"] = map[string]structs.CheckServiceNodes{ - "bar.default.dc1": TestUpstreamNodesAlternate(t), + "bar.default.default.dc1": TestUpstreamNodesAlternate(t), } case "lb-resolver": default: @@ -2017,8 +2013,8 @@ func TestConfigSnapshotIngress_MultipleListenersDuplicateService(t testing.T) *C }, } - fooChain := discoverychain.TestCompileConfigEntries(t, "foo", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) - barChain := discoverychain.TestCompileConfigEntries(t, "bar", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) + fooChain := discoverychain.TestCompileConfigEntries(t, "foo", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) + barChain := discoverychain.TestCompileConfigEntries(t, "bar", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) snap.IngressGateway.DiscoveryChain = map[string]*structs.CompiledDiscoveryChain{ "foo": fooChain, diff --git a/agent/proxycfg/upstreams.go b/agent/proxycfg/upstreams.go index 07fc9043f..e11c1a48b 100644 --- a/agent/proxycfg/upstreams.go +++ b/agent/proxycfg/upstreams.go @@ -224,8 +224,7 @@ func (s *handlerUpstreams) resetWatchesFromChain( // Outside of transparent mode we only watch the chain target, B, // since A is a virtual service and traffic will not be sent to it. if !watchedChainEndpoints && s.proxyCfg.Mode == structs.ProxyModeTransparent { - // TODO(partitions): add partition to the disco chain - chainEntMeta := structs.NewEnterpriseMetaWithPartition("" /*TODO*/, chain.Namespace) + chainEntMeta := structs.NewEnterpriseMetaWithPartition(chain.Partition, chain.Namespace) opts := targetWatchOpts{ upstreamID: id, @@ -358,6 +357,7 @@ func (s *handlerUpstreams) watchDiscoveryChain(ctx context.Context, snap *Config Name: opts.name, EvaluateInDatacenter: opts.datacenter, EvaluateInNamespace: opts.namespace, + EvaluateInPartition: opts.partition, OverrideProtocol: opts.cfg.Protocol, OverrideConnectTimeout: opts.cfg.ConnectTimeout(), OverrideMeshGateway: opts.meshGateway, diff --git a/agent/structs/config_entry_discoverychain.go b/agent/structs/config_entry_discoverychain.go index 77171edcc..cfe562a92 100644 --- a/agent/structs/config_entry_discoverychain.go +++ b/agent/structs/config_entry_discoverychain.go @@ -379,8 +379,6 @@ type ServiceRouteDestination struct { // splitting. Namespace string `json:",omitempty"` - // NOTE: Partition is not represented here by design. Do not add it. - // PrefixRewrite allows for the proxied request to have its matching path // prefix modified before being sent to the destination. Described more // below in the envoy implementation section. @@ -660,8 +658,6 @@ type ServiceSplit struct { // If this field is specified then this route is ineligible for further // splitting. Namespace string `json:",omitempty"` - - // NOTE: Partition is not represented here by design. Do not add it. } // ServiceResolverConfigEntry defines which instances of a service should @@ -846,6 +842,9 @@ func (e *ServiceResolverConfigEntry) Validate() error { } if e.Redirect != nil { + if e.PartitionOrEmpty() != acl.DefaultPartitionName && e.Redirect.Datacenter != "" { + return fmt.Errorf("Cross datacenters redirect is not allowed for non default partition") + } r := e.Redirect if len(e.Failover) > 0 { @@ -873,7 +872,11 @@ func (e *ServiceResolverConfigEntry) Validate() error { } if len(e.Failover) > 0 { + for subset, f := range e.Failover { + if e.PartitionOrEmpty() != acl.DefaultPartitionName && len(f.Datacenters) != 0 { + return fmt.Errorf("Cross datacenters failover is not allowed for non default partition") + } if subset != "*" && !isSubset(subset) { return fmt.Errorf("Bad Failover[%q]: not a valid subset", subset) } @@ -988,6 +991,7 @@ func (e *ServiceResolverConfigEntry) ListRelatedServices() []ServiceID { if redirectID != svcID { found[redirectID] = struct{}{} } + } if len(e.Failover) > 0 { @@ -1052,8 +1056,6 @@ type ServiceResolverRedirect struct { // Datacenter is the datacenter to resolve the service from instead of the // current one (optional). Datacenter string `json:",omitempty"` - - // NOTE: Partition is not represented here by design. Do not add it. } // There are some restrictions on what is allowed in here: @@ -1088,8 +1090,6 @@ type ServiceResolverFailover struct { // // This is a DESTINATION during failover. Datacenters []string `json:",omitempty"` - - // NOTE: Partition is not represented here by design. Do not add it. } // LoadBalancer determines the load balancing policy and configuration for services @@ -1345,8 +1345,6 @@ type DiscoveryChainRequest struct { EvaluateInNamespace string EvaluateInPartition string - // NOTE: Partition is not represented here by design. Do not add it. - // OverrideMeshGateway allows for the mesh gateway setting to be overridden // for any resolver in the compiled chain. OverrideMeshGateway MeshGatewayConfig diff --git a/agent/structs/discovery_chain.go b/agent/structs/discovery_chain.go index 4d331203d..8ff02b197 100644 --- a/agent/structs/discovery_chain.go +++ b/agent/structs/discovery_chain.go @@ -14,6 +14,7 @@ import ( type CompiledDiscoveryChain struct { ServiceName string Namespace string // the namespace that the chain was compiled within + Partition string // the partition that the chain was compiled within Datacenter string // the datacenter that the chain was compiled within // CustomizationHash is a unique hash of any data that affects the @@ -85,17 +86,17 @@ func (c *CompiledDiscoveryChain) IsDefault() bool { target := c.Targets[node.Resolver.Target] - return target.Service == c.ServiceName && target.Namespace == c.Namespace + return target.Service == c.ServiceName && target.Namespace == c.Namespace && target.Partition == c.Partition } -// ID returns an ID that encodes the service, namespace, and datacenter. +// ID returns an ID that encodes the service, namespace, partition, and datacenter. // This ID allows us to compare a discovery chain target to the chain upstream itself. func (c *CompiledDiscoveryChain) ID() string { - return chainID("", c.ServiceName, c.Namespace, c.Datacenter) + return chainID("", c.ServiceName, c.Namespace, c.Partition, c.Datacenter) } func (c *CompiledDiscoveryChain) CompoundServiceName() ServiceName { - entMeta := NewEnterpriseMetaInDefaultPartition(c.Namespace) + entMeta := NewEnterpriseMetaWithPartition(c.Partition, c.Namespace) return NewServiceName(c.ServiceName, &entMeta) } @@ -230,27 +231,28 @@ type DiscoveryTarget struct { Name string `json:",omitempty"` } -func NewDiscoveryTarget(service, serviceSubset, namespace, datacenter string) *DiscoveryTarget { +func NewDiscoveryTarget(service, serviceSubset, namespace, partition, datacenter string) *DiscoveryTarget { t := &DiscoveryTarget{ Service: service, ServiceSubset: serviceSubset, Namespace: namespace, + Partition: partition, Datacenter: datacenter, } t.setID() return t } -func chainID(subset, service, namespace, dc string) string { +func chainID(subset, service, namespace, partition, dc string) string { // NOTE: this format is similar to the SNI syntax for simplicity if subset == "" { - return fmt.Sprintf("%s.%s.%s", service, namespace, dc) + return fmt.Sprintf("%s.%s.%s.%s", service, namespace, partition, dc) } - return fmt.Sprintf("%s.%s.%s.%s", subset, service, namespace, dc) + return fmt.Sprintf("%s.%s.%s.%s.%s", subset, service, namespace, partition, dc) } func (t *DiscoveryTarget) setID() { - t.ID = chainID(t.ServiceSubset, t.Service, t.Namespace, t.Datacenter) + t.ID = chainID(t.ServiceSubset, t.Service, t.Namespace, t.Partition, t.Datacenter) } func (t *DiscoveryTarget) String() string { diff --git a/agent/structs/structs.go b/agent/structs/structs.go index e3f5dfaad..af87708fe 100644 --- a/agent/structs/structs.go +++ b/agent/structs/structs.go @@ -1250,6 +1250,17 @@ func (s *NodeService) Validate() error { bindAddrs = make(map[string]struct{}) ) for _, u := range s.Proxy.Upstreams { + destinationPartition := u.DestinationPartition + if destinationPartition == "" { + destinationPartition = acl.DefaultPartitionName + } + + // cross DC Upstreams are only allowed for non "default" partitions + if u.Datacenter != "" && (destinationPartition != acl.DefaultPartitionName || s.PartitionOrDefault() != "default") { + result = multierror.Append(result, fmt.Errorf( + "upstreams cannot target another datacenter in non default partition")) + continue + } if err := u.Validate(); err != nil { result = multierror.Append(result, err) continue diff --git a/agent/structs/structs_test.go b/agent/structs/structs_test.go index b5a0d0b7d..b3835a67a 100644 --- a/agent/structs/structs_test.go +++ b/agent/structs/structs_test.go @@ -790,6 +790,21 @@ func TestStructs_NodeService_ValidateConnectProxy(t *testing.T) { }, "", }, + { + "connect-proxy: Upstreams non default partition another dc", + func(x *NodeService) { + x.Proxy.Upstreams = Upstreams{ + { // baseline + DestinationType: UpstreamDestTypeService, + DestinationName: "foo", + DestinationPartition: "foo", + Datacenter: "dc1", + LocalBindPort: 5000, + }, + } + }, + "upstreams cannot target another datacenter in non default partition", + }, { "connect-proxy: Upstreams duplicated by port", func(x *NodeService) { @@ -942,6 +957,65 @@ func TestStructs_NodeService_ValidateConnectProxy(t *testing.T) { } } +func TestStructs_NodeService_ValidateConnectProxy_In_Partition(t *testing.T) { + cases := []struct { + Name string + Modify func(*NodeService) + Err string + }{ + { + "valid", + func(x *NodeService) {}, + "", + }, + { + "connect-proxy: Upstreams non default partition another dc", + func(x *NodeService) { + x.Proxy.Upstreams = Upstreams{ + { // baseline + DestinationType: UpstreamDestTypeService, + DestinationName: "foo", + DestinationPartition: "foo", + Datacenter: "dc1", + LocalBindPort: 5000, + }, + } + }, + "upstreams cannot target another datacenter in non default partition", + }, + { + "connect-proxy: Upstreams non default partition same dc", + func(x *NodeService) { + x.Proxy.Upstreams = Upstreams{ + { // baseline + DestinationType: UpstreamDestTypeService, + DestinationName: "foo", + DestinationPartition: "foo", + LocalBindPort: 5000, + }, + } + }, + "", + }, + } + + for _, tc := range cases { + t.Run(tc.Name, func(t *testing.T) { + assert := assert.New(t) + ns := TestNodeServiceProxyInPartition(t, "bar") + tc.Modify(ns) + + err := ns.Validate() + assert.Equal(err != nil, tc.Err != "", err) + if err == nil { + return + } + + assert.Contains(strings.ToLower(err.Error()), strings.ToLower(tc.Err)) + }) + } +} + func TestStructs_NodeService_ValidateSidecarService(t *testing.T) { cases := []struct { Name string diff --git a/agent/structs/testing_catalog.go b/agent/structs/testing_catalog.go index a474e4329..a701cbfc6 100644 --- a/agent/structs/testing_catalog.go +++ b/agent/structs/testing_catalog.go @@ -56,12 +56,18 @@ func TestNodeServiceWithName(t testing.T, name string) *NodeService { // TestNodeServiceProxy returns a *NodeService representing a valid // Connect proxy. func TestNodeServiceProxy(t testing.T) *NodeService { + return TestNodeServiceProxyInPartition(t, "") +} + +func TestNodeServiceProxyInPartition(t testing.T, partition string) *NodeService { + entMeta := DefaultEnterpriseMetaInPartition(partition) return &NodeService{ - Kind: ServiceKindConnectProxy, - Service: "web-proxy", - Address: "127.0.0.2", - Port: 2222, - Proxy: TestConnectProxyConfig(t), + Kind: ServiceKindConnectProxy, + Service: "web-proxy", + Address: "127.0.0.2", + Port: 2222, + Proxy: TestConnectProxyConfig(t), + EnterpriseMeta: *entMeta, } } diff --git a/agent/xds/clusters_test.go b/agent/xds/clusters_test.go index cc3685399..5d06c5ed6 100644 --- a/agent/xds/clusters_test.go +++ b/agent/xds/clusters_test.go @@ -697,9 +697,7 @@ func TestClustersFromSnapshot(t *testing.T) { } // There should still be a cluster for non-passthrough requests - snap.ConnectProxy.DiscoveryChain["mongo"] = discoverychain.TestCompileConfigEntries( - t, "mongo", "default", "dc1", - connect.TestClusterID+".consul", "dc1", nil) + snap.ConnectProxy.DiscoveryChain["mongo"] = discoverychain.TestCompileConfigEntries(t, "mongo", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) snap.ConnectProxy.WatchedUpstreamEndpoints["mongo"] = map[string]structs.CheckServiceNodes{ "mongo.default.dc1": { structs.CheckServiceNode{ diff --git a/agent/xds/delta_test.go b/agent/xds/delta_test.go index 028fca043..c00293c4a 100644 --- a/agent/xds/delta_test.go +++ b/agent/xds/delta_test.go @@ -179,7 +179,7 @@ func TestServer_DeltaAggregatedResources_v3_BasicProtocol_TCP(t *testing.T) { // now reconfigure the snapshot and JUST edit the endpoints to strike one of the two current endpoints for DB snap = newTestSnapshot(t, snap, "") - deleteAllButOneEndpoint(snap, "db", "db.default.dc1") + deleteAllButOneEndpoint(snap, "db", "db.default.default.dc1") mgr.DeliverConfig(t, sid, snap) // We never send an EDS reply about this change. @@ -216,7 +216,7 @@ func TestServer_DeltaAggregatedResources_v3_BasicProtocol_TCP(t *testing.T) { runStep(t, "simulate envoy NACKing an endpoint update", func(t *testing.T) { // Trigger only an EDS update. snap = newTestSnapshot(t, snap, "") - deleteAllButOneEndpoint(snap, "db", "db.default.dc1") + deleteAllButOneEndpoint(snap, "db", "db.default.default.dc1") mgr.DeliverConfig(t, sid, snap) // Send envoy an EDS update. diff --git a/agent/xds/failover_math_test.go b/agent/xds/failover_math_test.go index ecef7cdbe..29ac17ffe 100644 --- a/agent/xds/failover_math_test.go +++ b/agent/xds/failover_math_test.go @@ -15,22 +15,22 @@ func TestFirstHealthyTarget(t *testing.T) { warning := proxycfg.TestUpstreamNodesInStatus(t, "warning") critical := proxycfg.TestUpstreamNodesInStatus(t, "critical") - warnOnlyPassingTarget := structs.NewDiscoveryTarget("all-warn", "", "default", "dc1") + warnOnlyPassingTarget := structs.NewDiscoveryTarget("all-warn", "", "default", "default", "dc1") warnOnlyPassingTarget.Subset.OnlyPassing = true - failOnlyPassingTarget := structs.NewDiscoveryTarget("all-fail", "", "default", "dc1") + failOnlyPassingTarget := structs.NewDiscoveryTarget("all-fail", "", "default", "default", "dc1") failOnlyPassingTarget.Subset.OnlyPassing = true targets := map[string]*structs.DiscoveryTarget{ - "all-ok.default.dc1": structs.NewDiscoveryTarget("all-ok", "", "default", "dc1"), - "all-warn.default.dc1": structs.NewDiscoveryTarget("all-warn", "", "default", "dc1"), - "all-fail.default.dc1": structs.NewDiscoveryTarget("all-fail", "", "default", "dc1"), + "all-ok.default.dc1": structs.NewDiscoveryTarget("all-ok", "", "default", "default", "dc1"), + "all-warn.default.dc1": structs.NewDiscoveryTarget("all-warn", "", "default", "default", "dc1"), + "all-fail.default.default.dc1": structs.NewDiscoveryTarget("all-fail", "", "default", "default", "dc1"), "all-warn-onlypassing.default.dc1": warnOnlyPassingTarget, "all-fail-onlypassing.default.dc1": failOnlyPassingTarget, } targetHealth := map[string]structs.CheckServiceNodes{ "all-ok.default.dc1": passing, "all-warn.default.dc1": warning, - "all-fail.default.dc1": critical, + "all-fail.default.default.dc1": critical, "all-warn-onlypassing.default.dc1": warning, "all-fail-onlypassing.default.dc1": critical, } @@ -49,8 +49,8 @@ func TestFirstHealthyTarget(t *testing.T) { expect: "all-warn.default.dc1", }, { - primary: "all-fail.default.dc1", - expect: "all-fail.default.dc1", + primary: "all-fail.default.default.dc1", + expect: "all-fail.default.default.dc1", }, { primary: "all-warn-onlypassing.default.dc1", @@ -82,7 +82,7 @@ func TestFirstHealthyTarget(t *testing.T) { expect: "all-ok.default.dc1", }, { - primary: "all-fail.default.dc1", + primary: "all-fail.default.default.dc1", secondary: []string{ "all-ok.default.dc1", }, @@ -96,7 +96,7 @@ func TestFirstHealthyTarget(t *testing.T) { expect: "all-ok.default.dc1", }, { - primary: "all-fail.default.dc1", + primary: "all-fail.default.default.dc1", secondary: []string{ "all-warn-onlypassing.default.dc1", "all-warn.default.dc1", diff --git a/agent/xds/listeners.go b/agent/xds/listeners.go index 531fd1bab..2f41a9c08 100644 --- a/agent/xds/listeners.go +++ b/agent/xds/listeners.go @@ -1134,7 +1134,7 @@ func (s *ResourceGenerator) makeFilterChainTerminatingGateway( // HTTP filter to do intention checks here instead. opts := listenerFilterOpts{ protocol: protocol, - filterName: fmt.Sprintf("%s.%s.%s", service.Name, service.NamespaceOrDefault(), cfgSnap.Datacenter), + filterName: fmt.Sprintf("%s.%s.%s.%s", service.Name, service.NamespaceOrDefault(), service.PartitionOrDefault(), cfgSnap.Datacenter), routeName: cluster, // Set cluster name for route config since each will have its own cluster: cluster, statPrefix: "upstream.", @@ -1279,12 +1279,13 @@ func (s *ResourceGenerator) makeUpstreamFilterChainForDiscoveryChain( useRDS := true var ( - clusterName string - destination, datacenter, namespace string + clusterName string + destination, datacenter, partition, namespace string ) + // TODO (SNI partition) add partition for SNI if chain != nil { - destination, datacenter, namespace = chain.ServiceName, chain.Datacenter, chain.Namespace + destination, datacenter, partition, namespace = chain.ServiceName, chain.Datacenter, chain.Partition, chain.Namespace } if (chain == nil || chain.IsDefault()) && u != nil { useRDS = false @@ -1298,6 +1299,9 @@ func (s *ResourceGenerator) makeUpstreamFilterChainForDiscoveryChain( if destination == "" { destination = u.DestinationName } + if partition == "" { + partition = u.DestinationPartition + } if namespace == "" { namespace = u.DestinationNamespace } @@ -1328,7 +1332,12 @@ func (s *ResourceGenerator) makeUpstreamFilterChainForDiscoveryChain( namespace = structs.IntentionDefaultNamespace } - filterName := fmt.Sprintf("%s.%s.%s", destination, namespace, datacenter) + // Default the partition to match how SNIs are generated + if partition == "" { + partition = structs.IntentionDefaultNamespace + } + + filterName := fmt.Sprintf("%s.%s.%s.%s", destination, namespace, partition, datacenter) if u != nil && u.DestinationType == structs.UpstreamDestTypePreparedQuery { // Avoid encoding dc and namespace for prepared queries. // Those are defined in the query itself and are not available here. @@ -1395,8 +1404,8 @@ func (s *ResourceGenerator) makeUpstreamListenerForDiscoveryChain( useRDS := true var ( - clusterName string - destination, datacenter, namespace string + clusterName string + destination, datacenter, partition, namespace string ) if chain == nil || chain.IsDefault() { useRDS = false @@ -1405,13 +1414,13 @@ func (s *ResourceGenerator) makeUpstreamListenerForDiscoveryChain( if dc == "" { dc = cfgSnap.Datacenter } - destination, datacenter, namespace = u.DestinationName, dc, u.DestinationNamespace + destination, datacenter, partition, namespace = u.DestinationName, dc, u.DestinationPartition, u.DestinationNamespace sni := connect.UpstreamSNI(u, "", dc, cfgSnap.Roots.TrustDomain) clusterName = CustomizeClusterName(sni, chain) } else { - destination, datacenter, namespace = chain.ServiceName, chain.Datacenter, chain.Namespace + destination, datacenter, partition, namespace = chain.ServiceName, chain.Datacenter, chain.Partition, chain.Namespace if cfg.Protocol == "tcp" { useRDS = false @@ -1434,7 +1443,12 @@ func (s *ResourceGenerator) makeUpstreamListenerForDiscoveryChain( if namespace == "" { namespace = structs.IntentionDefaultNamespace } - filterName := fmt.Sprintf("%s.%s.%s", destination, namespace, datacenter) + + // Default the partition to match how SNIs are generated + if partition == "" { + partition = structs.IntentionDefaultNamespace + } + filterName := fmt.Sprintf("%s.%s.%s.%s", destination, namespace, partition, datacenter) if u.DestinationType == structs.UpstreamDestTypePreparedQuery { // Avoid encoding dc and namespace for prepared queries. diff --git a/agent/xds/listeners_test.go b/agent/xds/listeners_test.go index 30a98145a..e7cd5e6a5 100644 --- a/agent/xds/listeners_test.go +++ b/agent/xds/listeners_test.go @@ -498,11 +498,9 @@ func TestListenersFromSnapshot(t *testing.T) { snap.ConnectProxy.MeshConfigSet = true // DiscoveryChain without an UpstreamConfig should yield a filter chain when in transparent proxy mode - snap.ConnectProxy.DiscoveryChain["google"] = discoverychain.TestCompileConfigEntries( - t, "google", "default", "dc1", - connect.TestClusterID+".consul", "dc1", nil) + snap.ConnectProxy.DiscoveryChain["google"] = discoverychain.TestCompileConfigEntries(t, "google", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) snap.ConnectProxy.WatchedUpstreamEndpoints["google"] = map[string]structs.CheckServiceNodes{ - "google.default.dc1": { + "google.default.default.dc1": { structs.CheckServiceNode{ Node: &structs.Node{ Address: "8.8.8.8", @@ -520,7 +518,7 @@ func TestListenersFromSnapshot(t *testing.T) { }, // Other targets of the discovery chain should be ignored. // We only match on the upstream's virtual IP, not the IPs of other targets. - "google-v2.default.dc1": { + "google-v2.default.default.dc1": { structs.CheckServiceNode{ Node: &structs.Node{ Address: "7.7.7.7", @@ -537,9 +535,7 @@ func TestListenersFromSnapshot(t *testing.T) { } // DiscoveryChains without endpoints do not get a filter chain because there are no addresses to match on. - snap.ConnectProxy.DiscoveryChain["no-endpoints"] = discoverychain.TestCompileConfigEntries( - t, "no-endpoints", "default", "dc1", - connect.TestClusterID+".consul", "dc1", nil) + snap.ConnectProxy.DiscoveryChain["no-endpoints"] = discoverychain.TestCompileConfigEntries(t, "no-endpoints", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) }, }, { @@ -556,11 +552,9 @@ func TestListenersFromSnapshot(t *testing.T) { } // DiscoveryChain without an UpstreamConfig should yield a filter chain when in transparent proxy mode - snap.ConnectProxy.DiscoveryChain["google"] = discoverychain.TestCompileConfigEntries( - t, "google", "default", "dc1", - connect.TestClusterID+".consul", "dc1", nil) + snap.ConnectProxy.DiscoveryChain["google"] = discoverychain.TestCompileConfigEntries(t, "google", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) snap.ConnectProxy.WatchedUpstreamEndpoints["google"] = map[string]structs.CheckServiceNodes{ - "google.default.dc1": { + "google.default.default.dc1": { structs.CheckServiceNode{ Node: &structs.Node{ Address: "8.8.8.8", @@ -579,9 +573,7 @@ func TestListenersFromSnapshot(t *testing.T) { } // DiscoveryChains without endpoints do not get a filter chain because there are no addresses to match on. - snap.ConnectProxy.DiscoveryChain["no-endpoints"] = discoverychain.TestCompileConfigEntries( - t, "no-endpoints", "default", "dc1", - connect.TestClusterID+".consul", "dc1", nil) + snap.ConnectProxy.DiscoveryChain["no-endpoints"] = discoverychain.TestCompileConfigEntries(t, "no-endpoints", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) }, }, { @@ -590,13 +582,9 @@ func TestListenersFromSnapshot(t *testing.T) { setup: func(snap *proxycfg.ConfigSnapshot) { snap.Proxy.Mode = structs.ProxyModeTransparent - snap.ConnectProxy.DiscoveryChain["mongo"] = discoverychain.TestCompileConfigEntries( - t, "mongo", "default", "dc1", - connect.TestClusterID+".consul", "dc1", nil) + snap.ConnectProxy.DiscoveryChain["mongo"] = discoverychain.TestCompileConfigEntries(t, "mongo", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) - snap.ConnectProxy.DiscoveryChain["kafka"] = discoverychain.TestCompileConfigEntries( - t, "kafka", "default", "dc1", - connect.TestClusterID+".consul", "dc1", nil) + snap.ConnectProxy.DiscoveryChain["kafka"] = discoverychain.TestCompileConfigEntries(t, "kafka", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) kafka := structs.NewServiceName("kafka", structs.DefaultEnterpriseMetaInDefaultPartition()) mongo := structs.NewServiceName("mongo", structs.DefaultEnterpriseMetaInDefaultPartition()) @@ -621,7 +609,7 @@ func TestListenersFromSnapshot(t *testing.T) { // There should still be a filter chain for mongo's virtual address snap.ConnectProxy.WatchedUpstreamEndpoints["mongo"] = map[string]structs.CheckServiceNodes{ - "mongo.default.dc1": { + "mongo.default.default.dc1": { structs.CheckServiceNode{ Node: &structs.Node{ Datacenter: "dc1", @@ -688,7 +676,8 @@ func TestListenersFromSnapshot(t *testing.T) { gName = tt.overrideGoldenName } - require.JSONEq(t, goldenEnvoy(t, filepath.Join("listeners", gName), envoyVersion, latestEnvoyVersion, gotJSON), gotJSON) + expectedJSON := goldenEnvoy(t, filepath.Join("listeners", gName), envoyVersion, latestEnvoyVersion, gotJSON) + require.JSONEq(t, expectedJSON, gotJSON) }) t.Run("v2-compat", func(t *testing.T) { diff --git a/agent/xds/routes_test.go b/agent/xds/routes_test.go index 005a4a9fe..cfb838e86 100644 --- a/agent/xds/routes_test.go +++ b/agent/xds/routes_test.go @@ -176,10 +176,10 @@ func TestRoutesFromSnapshot(t *testing.T) { ConnectTimeout: 22 * time.Second, }, } - fooChain := discoverychain.TestCompileConfigEntries(t, "foo", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) - barChain := discoverychain.TestCompileConfigEntries(t, "bar", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) - bazChain := discoverychain.TestCompileConfigEntries(t, "baz", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) - quxChain := discoverychain.TestCompileConfigEntries(t, "qux", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) + fooChain := discoverychain.TestCompileConfigEntries(t, "foo", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) + barChain := discoverychain.TestCompileConfigEntries(t, "bar", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) + bazChain := discoverychain.TestCompileConfigEntries(t, "baz", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) + quxChain := discoverychain.TestCompileConfigEntries(t, "qux", "default", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) snap.IngressGateway.DiscoveryChain = map[string]*structs.CompiledDiscoveryChain{ "foo": fooChain, diff --git a/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-18-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-18-x.golden index c62f2d49e..1410130f8 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.v2compat.envoy-1-16-x.golden index 66dff063c..cd41bb0d5 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-18-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-18-x.golden index 10de38687..57d50f71c 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.v2compat.envoy-1-16-x.golden index 208df4988..8ed1490a9 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-18-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-18-x.golden index c62f2d49e..1410130f8 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.v2compat.envoy-1-16-x.golden index 66dff063c..cd41bb0d5 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-18-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-18-x.golden index 58f566234..2ef5af99d 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/connect-proxy-with-http-chain.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-http-chain.v2compat.envoy-1-16-x.golden index 4df11a586..c76b170d3 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-http-chain.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-http-chain.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-18-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-18-x.golden index 9445fb379..6463f5b1b 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.v2compat.envoy-1-16-x.golden index e83cb38e5..2293429e0 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-18-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-18-x.golden index 10de38687..57d50f71c 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.v2compat.envoy-1-16-x.golden index 208df4988..8ed1490a9 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-18-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-18-x.golden index 10de38687..57d50f71c 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.v2compat.envoy-1-16-x.golden index 208df4988..8ed1490a9 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-18-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-18-x.golden index 10de38687..57d50f71c 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.v2compat.envoy-1-16-x.golden index 208df4988..8ed1490a9 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/custom-public-listener-http-2.envoy-1-18-x.golden b/agent/xds/testdata/listeners/custom-public-listener-http-2.envoy-1-18-x.golden index 5ffe4ffa0..9c7640202 100644 --- a/agent/xds/testdata/listeners/custom-public-listener-http-2.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/custom-public-listener-http-2.envoy-1-18-x.golden @@ -101,7 +101,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/custom-public-listener-http-2.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/custom-public-listener-http-2.v2compat.envoy-1-16-x.golden index 9bafc64fd..f3ccbc4b0 100644 --- a/agent/xds/testdata/listeners/custom-public-listener-http-2.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/custom-public-listener-http-2.v2compat.envoy-1-16-x.golden @@ -101,7 +101,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/custom-public-listener-http-missing.envoy-1-18-x.golden b/agent/xds/testdata/listeners/custom-public-listener-http-missing.envoy-1-18-x.golden index 70b39d05a..99c8f3139 100644 --- a/agent/xds/testdata/listeners/custom-public-listener-http-missing.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/custom-public-listener-http-missing.envoy-1-18-x.golden @@ -78,7 +78,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/custom-public-listener-http-missing.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/custom-public-listener-http-missing.v2compat.envoy-1-16-x.golden index 4b785a374..04b981365 100644 --- a/agent/xds/testdata/listeners/custom-public-listener-http-missing.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/custom-public-listener-http-missing.v2compat.envoy-1-16-x.golden @@ -78,7 +78,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/custom-public-listener-http.envoy-1-18-x.golden b/agent/xds/testdata/listeners/custom-public-listener-http.envoy-1-18-x.golden index 5ffe4ffa0..9c7640202 100644 --- a/agent/xds/testdata/listeners/custom-public-listener-http.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/custom-public-listener-http.envoy-1-18-x.golden @@ -101,7 +101,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/custom-public-listener-http.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/custom-public-listener-http.v2compat.envoy-1-16-x.golden index 9bafc64fd..f3ccbc4b0 100644 --- a/agent/xds/testdata/listeners/custom-public-listener-http.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/custom-public-listener-http.v2compat.envoy-1-16-x.golden @@ -101,7 +101,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/custom-public-listener.envoy-1-18-x.golden b/agent/xds/testdata/listeners/custom-public-listener.envoy-1-18-x.golden index 70b39d05a..99c8f3139 100644 --- a/agent/xds/testdata/listeners/custom-public-listener.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/custom-public-listener.envoy-1-18-x.golden @@ -78,7 +78,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/custom-public-listener.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/custom-public-listener.v2compat.envoy-1-16-x.golden index 4b785a374..04b981365 100644 --- a/agent/xds/testdata/listeners/custom-public-listener.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/custom-public-listener.v2compat.envoy-1-16-x.golden @@ -78,7 +78,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/custom-upstream-ignored-with-disco-chain.envoy-1-18-x.golden b/agent/xds/testdata/listeners/custom-upstream-ignored-with-disco-chain.envoy-1-18-x.golden index 10de38687..57d50f71c 100644 --- a/agent/xds/testdata/listeners/custom-upstream-ignored-with-disco-chain.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/custom-upstream-ignored-with-disco-chain.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/custom-upstream-ignored-with-disco-chain.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/custom-upstream-ignored-with-disco-chain.v2compat.envoy-1-16-x.golden index 208df4988..8ed1490a9 100644 --- a/agent/xds/testdata/listeners/custom-upstream-ignored-with-disco-chain.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/custom-upstream-ignored-with-disco-chain.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/defaults.envoy-1-18-x.golden b/agent/xds/testdata/listeners/defaults.envoy-1-18-x.golden index 10de38687..57d50f71c 100644 --- a/agent/xds/testdata/listeners/defaults.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/defaults.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/defaults.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/defaults.v2compat.envoy-1-16-x.golden index 208df4988..8ed1490a9 100644 --- a/agent/xds/testdata/listeners/defaults.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/defaults.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/http-listener-with-timeouts.envoy-1-18-x.golden b/agent/xds/testdata/listeners/http-listener-with-timeouts.envoy-1-18-x.golden index 254251eb5..15997388c 100644 --- a/agent/xds/testdata/listeners/http-listener-with-timeouts.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/http-listener-with-timeouts.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/http-listener-with-timeouts.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/http-listener-with-timeouts.v2compat.envoy-1-16-x.golden index fdbffea62..289928481 100644 --- a/agent/xds/testdata/listeners/http-listener-with-timeouts.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/http-listener-with-timeouts.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/http-public-listener.envoy-1-18-x.golden b/agent/xds/testdata/listeners/http-public-listener.envoy-1-18-x.golden index d62565cd1..85a5acb53 100644 --- a/agent/xds/testdata/listeners/http-public-listener.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/http-public-listener.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/http-public-listener.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/http-public-listener.v2compat.envoy-1-16-x.golden index 51d35afd9..d815dc546 100644 --- a/agent/xds/testdata/listeners/http-public-listener.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/http-public-listener.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/http-upstream.envoy-1-18-x.golden b/agent/xds/testdata/listeners/http-upstream.envoy-1-18-x.golden index 993625890..14046bfcf 100644 --- a/agent/xds/testdata/listeners/http-upstream.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/http-upstream.envoy-1-18-x.golden @@ -17,12 +17,12 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "routeConfig": { "name": "db", "virtualHosts": [ { - "name": "db.default.dc1", + "name": "db.default.default.dc1", "domains": [ "*" ], diff --git a/agent/xds/testdata/listeners/http-upstream.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/http-upstream.v2compat.envoy-1-16-x.golden index f3461b367..aa16d42ad 100644 --- a/agent/xds/testdata/listeners/http-upstream.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/http-upstream.v2compat.envoy-1-16-x.golden @@ -17,12 +17,12 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "routeConfig": { "name": "db", "virtualHosts": [ { - "name": "db.default.dc1", + "name": "db.default.default.dc1", "domains": [ "*" ], diff --git a/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-18-x.golden b/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-18-x.golden index 8fb86f6ac..ffbba76ef 100644 --- a/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -42,7 +42,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -67,7 +67,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.v2compat.envoy-1-16-x.golden index 6adfafb64..1b0f3c788 100644 --- a/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -42,7 +42,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -67,7 +67,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-gateway.envoy-1-18-x.golden b/agent/xds/testdata/listeners/ingress-gateway.envoy-1-18-x.golden index 059b11226..668cb3e51 100644 --- a/agent/xds/testdata/listeners/ingress-gateway.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/ingress-gateway.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-gateway.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/ingress-gateway.v2compat.envoy-1-16-x.golden index 417d25f16..a07467333 100644 --- a/agent/xds/testdata/listeners/ingress-gateway.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/ingress-gateway.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-18-x.golden b/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-18-x.golden index 46383d61a..22e3261e6 100644 --- a/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.v2compat.envoy-1-16-x.golden index 6f011b9a7..edd8b5b54 100644 --- a/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-18-x.golden b/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-18-x.golden index 059b11226..668cb3e51 100644 --- a/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-with-chain-external-sni.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/ingress-with-chain-external-sni.v2compat.envoy-1-16-x.golden index 417d25f16..a07467333 100644 --- a/agent/xds/testdata/listeners/ingress-with-chain-external-sni.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/ingress-with-chain-external-sni.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-18-x.golden b/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-18-x.golden index 059b11226..668cb3e51 100644 --- a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.v2compat.envoy-1-16-x.golden index 417d25f16..a07467333 100644 --- a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-18-x.golden b/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-18-x.golden index 059b11226..668cb3e51 100644 --- a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.v2compat.envoy-1-16-x.golden index 417d25f16..a07467333 100644 --- a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-18-x.golden b/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-18-x.golden index e106983fc..f578c2ace 100644 --- a/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/ingress-with-tls-listener.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/ingress-with-tls-listener.v2compat.envoy-1-16-x.golden index 65d7ea8f6..aa4f2e731 100644 --- a/agent/xds/testdata/listeners/ingress-with-tls-listener.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/ingress-with-tls-listener.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-18-x.golden b/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-18-x.golden index 37a38656b..1c9146861 100644 --- a/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/listener-bind-address-port.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/listener-bind-address-port.v2compat.envoy-1-16-x.golden index eabe5b0e5..8db72c8d7 100644 --- a/agent/xds/testdata/listeners/listener-bind-address-port.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/listener-bind-address-port.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/listener-bind-address.envoy-1-18-x.golden b/agent/xds/testdata/listeners/listener-bind-address.envoy-1-18-x.golden index 7d88ad2cf..9f7bc6b28 100644 --- a/agent/xds/testdata/listeners/listener-bind-address.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/listener-bind-address.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/listener-bind-address.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/listener-bind-address.v2compat.envoy-1-16-x.golden index 199c68e40..701c98e22 100644 --- a/agent/xds/testdata/listeners/listener-bind-address.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/listener-bind-address.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/listener-bind-port.envoy-1-18-x.golden b/agent/xds/testdata/listeners/listener-bind-port.envoy-1-18-x.golden index 4a44e6450..a286e5232 100644 --- a/agent/xds/testdata/listeners/listener-bind-port.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/listener-bind-port.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/listener-bind-port.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/listener-bind-port.v2compat.envoy-1-16-x.golden index 3c5410fea..e07ce0b95 100644 --- a/agent/xds/testdata/listeners/listener-bind-port.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/listener-bind-port.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/listener-unix-domain-socket.envoy-1-18-x.golden b/agent/xds/testdata/listeners/listener-unix-domain-socket.envoy-1-18-x.golden index 60a237e1a..6d4ee8880 100644 --- a/agent/xds/testdata/listeners/listener-unix-domain-socket.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/listener-unix-domain-socket.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/listener-unix-domain-socket.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/listener-unix-domain-socket.v2compat.envoy-1-16-x.golden index c64b9d280..d6641183e 100644 --- a/agent/xds/testdata/listeners/listener-unix-domain-socket.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/listener-unix-domain-socket.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-18-x.golden b/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-18-x.golden index 58f566234..2ef5af99d 100644 --- a/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/splitter-with-resolver-redirect.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/splitter-with-resolver-redirect.v2compat.envoy-1-16-x.golden index 4df11a586..c76b170d3 100644 --- a/agent/xds/testdata/listeners/splitter-with-resolver-redirect.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/splitter-with-resolver-redirect.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-18-x.golden b/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-18-x.golden index 31db7b51b..80e0a6045 100644 --- a/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-18-x.golden @@ -32,7 +32,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.api.default.dc1", + "statPrefix": "upstream.api.default.default.dc1", "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -86,7 +86,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.cache.default.dc1", + "statPrefix": "upstream.cache.default.default.dc1", "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -140,7 +140,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -194,7 +194,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -281,7 +281,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.api.default.dc1", + "statPrefix": "upstream.api.default.default.dc1", "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -335,7 +335,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.cache.default.dc1", + "statPrefix": "upstream.cache.default.default.dc1", "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -389,7 +389,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -443,7 +443,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.v2compat.envoy-1-16-x.golden index 356828093..3c00b9a3b 100644 --- a/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.v2compat.envoy-1-16-x.golden @@ -32,7 +32,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.api.default.dc1", + "statPrefix": "upstream.api.default.default.dc1", "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -86,7 +86,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.cache.default.dc1", + "statPrefix": "upstream.cache.default.default.dc1", "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -140,7 +140,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -194,7 +194,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -281,7 +281,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.api.default.dc1", + "statPrefix": "upstream.api.default.default.dc1", "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -335,7 +335,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.cache.default.dc1", + "statPrefix": "upstream.cache.default.default.dc1", "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -389,7 +389,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -443,7 +443,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-18-x.golden b/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-18-x.golden index a069ee434..1c59ad859 100644 --- a/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-18-x.golden @@ -32,7 +32,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.cache.default.dc1", + "statPrefix": "upstream.cache.default.default.dc1", "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -86,7 +86,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -140,7 +140,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.v2compat.envoy-1-16-x.golden index 59821616f..28871ace2 100644 --- a/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.v2compat.envoy-1-16-x.golden @@ -32,7 +32,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.cache.default.dc1", + "statPrefix": "upstream.cache.default.default.dc1", "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -86,7 +86,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -140,7 +140,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-18-x.golden b/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-18-x.golden index 2515ef21e..f68f73e65 100644 --- a/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-18-x.golden @@ -32,7 +32,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.api.default.dc1", + "statPrefix": "upstream.api.default.default.dc1", "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -86,7 +86,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.cache.default.dc1", + "statPrefix": "upstream.cache.default.default.dc1", "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -140,7 +140,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -184,7 +184,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "rds": { "configSource": { "ads": { @@ -255,7 +255,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "rds": { "configSource": { "ads": { @@ -326,7 +326,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/terminating-gateway-service-subsets.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/terminating-gateway-service-subsets.v2compat.envoy-1-16-x.golden index 89b07f226..07b1a2f69 100644 --- a/agent/xds/testdata/listeners/terminating-gateway-service-subsets.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/terminating-gateway-service-subsets.v2compat.envoy-1-16-x.golden @@ -32,7 +32,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.api.default.dc1", + "statPrefix": "upstream.api.default.default.dc1", "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -86,7 +86,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.cache.default.dc1", + "statPrefix": "upstream.cache.default.default.dc1", "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -140,7 +140,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -184,7 +184,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "rds": { "configSource": { "ads": { @@ -255,7 +255,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "rds": { "configSource": { "ads": { @@ -326,7 +326,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "rds": { "configSource": { "ads": { diff --git a/agent/xds/testdata/listeners/terminating-gateway.envoy-1-18-x.golden b/agent/xds/testdata/listeners/terminating-gateway.envoy-1-18-x.golden index 4351d8f21..ab610fae3 100644 --- a/agent/xds/testdata/listeners/terminating-gateway.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/terminating-gateway.envoy-1-18-x.golden @@ -32,7 +32,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.api.default.dc1", + "statPrefix": "upstream.api.default.default.dc1", "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -86,7 +86,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.cache.default.dc1", + "statPrefix": "upstream.cache.default.default.dc1", "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -140,7 +140,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -194,7 +194,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/terminating-gateway.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/terminating-gateway.v2compat.envoy-1-16-x.golden index ac33bab98..3760a6e1e 100644 --- a/agent/xds/testdata/listeners/terminating-gateway.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/terminating-gateway.v2compat.envoy-1-16-x.golden @@ -32,7 +32,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.api.default.dc1", + "statPrefix": "upstream.api.default.default.dc1", "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -86,7 +86,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.cache.default.dc1", + "statPrefix": "upstream.cache.default.default.dc1", "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -140,7 +140,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -194,7 +194,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.web.default.dc1", + "statPrefix": "upstream.web.default.default.dc1", "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/transparent-proxy-catalog-destinations-only.envoy-1-18-x.golden b/agent/xds/testdata/listeners/transparent-proxy-catalog-destinations-only.envoy-1-18-x.golden index a3c52dc4f..394e4eb35 100644 --- a/agent/xds/testdata/listeners/transparent-proxy-catalog-destinations-only.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/transparent-proxy-catalog-destinations-only.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -50,7 +50,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.google.default.dc1", + "statPrefix": "upstream.google.default.default.dc1", "cluster": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/transparent-proxy-catalog-destinations-only.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/transparent-proxy-catalog-destinations-only.v2compat.envoy-1-16-x.golden index db881a384..266efa154 100644 --- a/agent/xds/testdata/listeners/transparent-proxy-catalog-destinations-only.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/transparent-proxy-catalog-destinations-only.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -50,7 +50,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.google.default.dc1", + "statPrefix": "upstream.google.default.default.dc1", "cluster": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/transparent-proxy-dial-instances-directly.envoy-1-18-x.golden b/agent/xds/testdata/listeners/transparent-proxy-dial-instances-directly.envoy-1-18-x.golden index 3de39f7cb..7a422ca40 100644 --- a/agent/xds/testdata/listeners/transparent-proxy-dial-instances-directly.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/transparent-proxy-dial-instances-directly.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -54,7 +54,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.mongo.default.dc1", + "statPrefix": "upstream.mongo.default.default.dc1", "cluster": "passthrough~mongo.default.dc1.internal.e5b08d03-bfc3-c870-1833-baddb116e648.consul" } } @@ -74,7 +74,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.mongo.default.dc1", + "statPrefix": "upstream.mongo.default.default.dc1", "cluster": "mongo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -94,7 +94,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.kafka.default.dc1", + "statPrefix": "upstream.kafka.default.default.dc1", "cluster": "passthrough~kafka.default.dc1.internal.e5b08d03-bfc3-c870-1833-baddb116e648.consul" } } diff --git a/agent/xds/testdata/listeners/transparent-proxy-dial-instances-directly.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/transparent-proxy-dial-instances-directly.v2compat.envoy-1-16-x.golden index ab37095ab..fbd8984b6 100644 --- a/agent/xds/testdata/listeners/transparent-proxy-dial-instances-directly.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/transparent-proxy-dial-instances-directly.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -54,7 +54,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.mongo.default.dc1", + "statPrefix": "upstream.mongo.default.default.dc1", "cluster": "passthrough~mongo.default.dc1.internal.e5b08d03-bfc3-c870-1833-baddb116e648.consul" } } @@ -74,7 +74,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.mongo.default.dc1", + "statPrefix": "upstream.mongo.default.default.dc1", "cluster": "mongo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -94,7 +94,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.kafka.default.dc1", + "statPrefix": "upstream.kafka.default.default.dc1", "cluster": "passthrough~kafka.default.dc1.internal.e5b08d03-bfc3-c870-1833-baddb116e648.consul" } } diff --git a/agent/xds/testdata/listeners/transparent-proxy.envoy-1-18-x.golden b/agent/xds/testdata/listeners/transparent-proxy.envoy-1-18-x.golden index deec35536..6c6691c61 100644 --- a/agent/xds/testdata/listeners/transparent-proxy.envoy-1-18-x.golden +++ b/agent/xds/testdata/listeners/transparent-proxy.envoy-1-18-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -50,7 +50,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "upstream.google.default.dc1", + "statPrefix": "upstream.google.default.default.dc1", "cluster": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/testdata/listeners/transparent-proxy.v2compat.envoy-1-16-x.golden b/agent/xds/testdata/listeners/transparent-proxy.v2compat.envoy-1-16-x.golden index 8a3bb4b5d..5d27efde2 100644 --- a/agent/xds/testdata/listeners/transparent-proxy.v2compat.envoy-1-16-x.golden +++ b/agent/xds/testdata/listeners/transparent-proxy.v2compat.envoy-1-16-x.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.db.default.dc1", + "statPrefix": "upstream.db.default.default.dc1", "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } @@ -50,7 +50,7 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy", - "statPrefix": "upstream.google.default.dc1", + "statPrefix": "upstream.google.default.default.dc1", "cluster": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" } } diff --git a/agent/xds/xds_protocol_helpers_test.go b/agent/xds/xds_protocol_helpers_test.go index cbbe30b94..3a567115f 100644 --- a/agent/xds/xds_protocol_helpers_test.go +++ b/agent/xds/xds_protocol_helpers_test.go @@ -1,12 +1,13 @@ package xds import ( - "github.com/hashicorp/consul/agent/connect" "sort" "sync" "testing" "time" + "github.com/hashicorp/consul/agent/connect" + envoy_cluster_v3 "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" envoy_core_v3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" envoy_endpoint_v3 "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3" @@ -591,7 +592,7 @@ func makeTestListener(t *testing.T, snap *proxycfg.ConfigSnapshot, fixtureName s ClusterSpecifier: &envoy_tcp_proxy_v3.TcpProxy_Cluster{ Cluster: "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", }, - StatPrefix: "upstream.db.default.dc1", + StatPrefix: "upstream.db.default.default.dc1", }), }, }, @@ -612,7 +613,7 @@ func makeTestListener(t *testing.T, snap *proxycfg.ConfigSnapshot, fixtureName s RouteSpecifier: &envoy_http_v3.HttpConnectionManager_RouteConfig{ RouteConfig: makeTestRoute(t, "http2:db:inline"), }, - StatPrefix: "upstream.db.default.dc1", + StatPrefix: "upstream.db.default.default.dc1", Tracing: &envoy_http_v3.HttpConnectionManager_Tracing{ RandomSampling: &envoy_type_v3.Percent{Value: 0}, }, @@ -640,7 +641,7 @@ func makeTestListener(t *testing.T, snap *proxycfg.ConfigSnapshot, fixtureName s ConfigSource: xdsNewADSConfig(), }, }, - StatPrefix: "upstream.db.default.dc1", + StatPrefix: "upstream.db.default.default.dc1", Tracing: &envoy_http_v3.HttpConnectionManager_Tracing{ RandomSampling: &envoy_type_v3.Percent{Value: 0}, }, @@ -668,7 +669,7 @@ func makeTestListener(t *testing.T, snap *proxycfg.ConfigSnapshot, fixtureName s ConfigSource: xdsNewADSConfig(), }, }, - StatPrefix: "upstream.db.default.dc1", + StatPrefix: "upstream.db.default.default.dc1", Tracing: &envoy_http_v3.HttpConnectionManager_Tracing{ RandomSampling: &envoy_type_v3.Percent{Value: 0}, }, @@ -736,7 +737,7 @@ func makeTestRoute(t *testing.T, fixtureName string) *envoy_route_v3.RouteConfig Name: "db", VirtualHosts: []*envoy_route_v3.VirtualHost{ { - Name: "db.default.dc1", + Name: "db.default.default.dc1", Domains: []string{"*"}, Routes: []*envoy_route_v3.Route{ { diff --git a/api/discovery_chain_test.go b/api/discovery_chain_test.go index c4073fbf1..99f97fa9d 100644 --- a/api/discovery_chain_test.go +++ b/api/discovery_chain_test.go @@ -32,21 +32,21 @@ func TestAPI_DiscoveryChain_Get(t *testing.T) { Namespace: "default", Datacenter: "dc1", Protocol: "tcp", - StartNode: "resolver:web.default.dc1", + StartNode: "resolver:web.default.default.dc1", Nodes: map[string]*DiscoveryGraphNode{ - "resolver:web.default.dc1": { + "resolver:web.default.default.dc1": { Type: DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc1", + Name: "web.default.default.dc1", Resolver: &DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "web.default.dc1", + Target: "web.default.default.dc1", }, }, }, Targets: map[string]*DiscoveryTarget{ - "web.default.dc1": { - ID: "web.default.dc1", + "web.default.default.dc1": { + ID: "web.default.default.dc1", Service: "web", Namespace: "default", Datacenter: "dc1", @@ -72,21 +72,21 @@ func TestAPI_DiscoveryChain_Get(t *testing.T) { Namespace: "default", Datacenter: "dc2", Protocol: "tcp", - StartNode: "resolver:web.default.dc2", + StartNode: "resolver:web.default.default.dc2", Nodes: map[string]*DiscoveryGraphNode{ - "resolver:web.default.dc2": { + "resolver:web.default.default.dc2": { Type: DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc2", + Name: "web.default.default.dc2", Resolver: &DiscoveryResolver{ Default: true, ConnectTimeout: 5 * time.Second, - Target: "web.default.dc2", + Target: "web.default.default.dc2", }, }, }, Targets: map[string]*DiscoveryTarget{ - "web.default.dc2": { - ID: "web.default.dc2", + "web.default.default.dc2": { + ID: "web.default.default.dc2", Service: "web", Namespace: "default", Datacenter: "dc2", @@ -119,20 +119,20 @@ func TestAPI_DiscoveryChain_Get(t *testing.T) { Namespace: "default", Datacenter: "dc1", Protocol: "tcp", - StartNode: "resolver:web.default.dc1", + StartNode: "resolver:web.default.default.dc1", Nodes: map[string]*DiscoveryGraphNode{ - "resolver:web.default.dc1": { + "resolver:web.default.default.dc1": { Type: DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc1", + Name: "web.default.default.dc1", Resolver: &DiscoveryResolver{ ConnectTimeout: 33 * time.Second, - Target: "web.default.dc1", + Target: "web.default.default.dc1", }, }, }, Targets: map[string]*DiscoveryTarget{ - "web.default.dc1": { - ID: "web.default.dc1", + "web.default.default.dc1": { + ID: "web.default.default.dc1", Service: "web", Namespace: "default", Datacenter: "dc1", @@ -164,20 +164,20 @@ func TestAPI_DiscoveryChain_Get(t *testing.T) { Datacenter: "dc2", Protocol: "grpc", CustomizationHash: "98809527", - StartNode: "resolver:web.default.dc2", + StartNode: "resolver:web.default.default.dc2", Nodes: map[string]*DiscoveryGraphNode{ - "resolver:web.default.dc2": { + "resolver:web.default.default.dc2": { Type: DiscoveryGraphNodeTypeResolver, - Name: "web.default.dc2", + Name: "web.default.default.dc2", Resolver: &DiscoveryResolver{ ConnectTimeout: 22 * time.Second, - Target: "web.default.dc2", + Target: "web.default.default.dc2", }, }, }, Targets: map[string]*DiscoveryTarget{ - "web.default.dc2": { - ID: "web.default.dc2", + "web.default.default.dc2": { + ID: "web.default.default.dc2", Service: "web", Namespace: "default", Datacenter: "dc2",