diff --git a/pkg/backends/backends_test.go b/pkg/backends/backends_test.go index 6a1de5103f..06b58df70a 100644 --- a/pkg/backends/backends_test.go +++ b/pkg/backends/backends_test.go @@ -96,7 +96,7 @@ func TestBackendPoolAdd(t *testing.T) { if err != nil { t.Fatalf("Did not expect error when ensuring a ServicePort %+v: %v", sp, err) } - beName := defaultNamer.Backend(sp.NodePort) + beName := sp.BackendName(defaultNamer) // Check that the new backend has the right port be, err := f.GetGlobalBackendService(beName) @@ -162,7 +162,7 @@ func TestHealthCheckMigration(t *testing.T) { // Create a legacy health check and insert it into the HC provider. legacyHC := &compute.HttpHealthCheck{ - Name: defaultNamer.Backend(p.NodePort), + Name: p.BackendName(defaultNamer), RequestPath: "/my-healthz-path", Host: "k8s.io", Description: "My custom HC", @@ -175,7 +175,7 @@ func TestHealthCheckMigration(t *testing.T) { pool.Ensure([]utils.ServicePort{p}, nil) // Assert the proper health check was created - hc, _ := pool.healthChecker.Get(defaultNamer.Backend(p.NodePort), p.IsAlpha()) + hc, _ := pool.healthChecker.Get(p.BackendName(defaultNamer), p.IsAlpha()) if hc == nil || hc.Protocol() != p.Protocol { t.Fatalf("Expected %s health check, received %v: ", p.Protocol, hc) } @@ -197,7 +197,7 @@ func TestBackendPoolUpdateHTTPS(t *testing.T) { p := utils.ServicePort{NodePort: 3000, Protocol: annotations.ProtocolHTTP} pool.Ensure([]utils.ServicePort{p}, nil) - beName := defaultNamer.Backend(p.NodePort) + beName := p.BackendName(defaultNamer) be, err := f.GetGlobalBackendService(beName) if err != nil { @@ -242,7 +242,7 @@ func TestBackendPoolUpdateHTTP2(t *testing.T) { p := utils.ServicePort{NodePort: 3000, Protocol: annotations.ProtocolHTTP} pool.Ensure([]utils.ServicePort{p}, nil) - beName := defaultNamer.Backend(p.NodePort) + beName := p.BackendName(defaultNamer) be, err := f.GetGlobalBackendService(beName) if err != nil { @@ -287,7 +287,7 @@ func TestBackendPoolUpdateHTTP2WithoutWhitelist(t *testing.T) { p := utils.ServicePort{NodePort: 3000, Protocol: annotations.ProtocolHTTP} pool.Ensure([]utils.ServicePort{p}, nil) - beName := defaultNamer.Backend(p.NodePort) + beName := p.BackendName(defaultNamer) be, err := f.GetGlobalBackendService(beName) if err != nil { @@ -315,7 +315,7 @@ func TestBackendPoolChaosMonkey(t *testing.T) { sp := utils.ServicePort{NodePort: 8080, Protocol: annotations.ProtocolHTTP} igs, _ := pool.nodePool.EnsureInstanceGroupsAndPorts(defaultNamer.InstanceGroup(), []int64{sp.NodePort}) pool.Ensure([]utils.ServicePort{sp}, igs) - beName := defaultNamer.Backend(sp.NodePort) + beName := sp.BackendName(defaultNamer) be, _ := f.GetGlobalBackendService(beName) @@ -369,11 +369,11 @@ func TestBackendPoolSync(t *testing.T) { if err := pool.GC(svcNodePorts); err != nil { t.Errorf("Expected backend pool to GC, err: %v", err) } - if _, err := pool.Get(defaultNamer.Backend(90), false); err == nil { + if _, err := pool.Get(defaultNamer.IGBackend(90), false); err == nil { t.Fatalf("Did not expect to find port 90") } for _, port := range svcNodePorts { - if _, err := pool.Get(defaultNamer.Backend(port.NodePort), false); err != nil { + if _, err := pool.Get(port.BackendName(defaultNamer), false); err != nil { t.Fatalf("Expected to find port %v", port) } } @@ -385,7 +385,7 @@ func TestBackendPoolSync(t *testing.T) { } for _, port := range deletedPorts { - if _, err := pool.Get(defaultNamer.Backend(port.NodePort), false); err == nil { + if _, err := pool.Get(port.BackendName(defaultNamer), false); err == nil { t.Fatalf("Pool contains %v after deletion", port) } } @@ -401,7 +401,7 @@ func TestBackendPoolSync(t *testing.T) { } // This backend should get deleted again since it is managed by this cluster. - f.CreateGlobalBackendService(&compute.BackendService{Name: defaultNamer.Backend(deletedPorts[0].NodePort)}) + f.CreateGlobalBackendService(&compute.BackendService{Name: deletedPorts[0].BackendName(defaultNamer)}) // TODO: Avoid casting. // Repopulate the pool with a cloud list, which now includes the 82 port @@ -417,7 +417,7 @@ func TestBackendPoolSync(t *testing.T) { currSet.Insert(b.Name) } // Port 81 still exists because it's an in-use service NodePort. - knownBe := defaultNamer.Backend(81) + knownBe := defaultNamer.IGBackend(81) if !currSet.Has(knownBe) { t.Fatalf("Expected %v to exist in backend pool", knownBe) } @@ -438,7 +438,7 @@ func TestBackendPoolSyncNEG(t *testing.T) { t.Errorf("Expected backend pool to add node ports, err: %v", err) } - nodePortName := defaultNamer.Backend(svcPort.NodePort) + nodePortName := svcPort.BackendName(defaultNamer) _, err := f.GetGlobalBackendService(nodePortName) if err != nil { t.Fatalf("Failed to get backend service: %v", err) @@ -450,7 +450,7 @@ func TestBackendPoolSyncNEG(t *testing.T) { t.Errorf("Expected backend pool to add node ports, err: %v", err) } - negName := defaultNamer.BackendNEG(svcPort.SvcName.Namespace, svcPort.SvcName.Name, svcPort.SvcTargetPort) + negName := svcPort.BackendName(defaultNamer) _, err = f.GetGlobalBackendService(negName) if err != nil { t.Fatalf("Failed to get backend service with name %v: %v", negName, err) @@ -608,7 +608,7 @@ func TestBackendPoolDeleteLegacyHealthChecks(t *testing.T) { bp.Init(NewFakeProbeProvider(probes)) // Create a legacy HTTP health check - beName := defaultNamer.Backend(80) + beName := defaultNamer.IGBackend(80) if err := hcp.CreateHttpHealthCheck(&compute.HttpHealthCheck{ Name: beName, Port: 80, @@ -657,7 +657,7 @@ func TestBackendPoolShutdown(t *testing.T) { // Add a backend-service and verify that it doesn't exist after Shutdown() pool.Ensure([]utils.ServicePort{{NodePort: 80}}, nil) pool.Shutdown() - if _, err := f.GetGlobalBackendService(defaultNamer.Backend(80)); err == nil { + if _, err := f.GetGlobalBackendService(defaultNamer.IGBackend(80)); err == nil { t.Fatalf("%v", err) } } @@ -671,9 +671,9 @@ func TestBackendInstanceGroupClobbering(t *testing.T) { igs, _ := pool.nodePool.EnsureInstanceGroupsAndPorts(defaultNamer.InstanceGroup(), []int64{sp.NodePort}) pool.Ensure([]utils.ServicePort{sp}, igs) - be, err := f.GetGlobalBackendService(defaultNamer.Backend(80)) + be, err := f.GetGlobalBackendService(defaultNamer.IGBackend(80)) if err != nil { - t.Fatalf("f.GetGlobalBackendService(defaultNamer.Backend(80)) = _, %v, want _, nil", err) + t.Fatalf("f.GetGlobalBackendService(defaultNamer.IGBackend(80)) = _, %v, want _, nil", err) } // Simulate another controller updating the same backend service with // a different instance group @@ -689,7 +689,7 @@ func TestBackendInstanceGroupClobbering(t *testing.T) { // Make sure repeated adds don't clobber the inserted instance group igs, _ = pool.nodePool.EnsureInstanceGroupsAndPorts(defaultNamer.InstanceGroup(), []int64{sp.NodePort}) pool.Ensure([]utils.ServicePort{sp}, igs) - be, err = f.GetGlobalBackendService(defaultNamer.Backend(80)) + be, err = f.GetGlobalBackendService(defaultNamer.IGBackend(80)) if err != nil { t.Fatalf("%v", err) } @@ -730,7 +730,7 @@ func TestBackendCreateBalancingMode(t *testing.T) { igs, _ := pool.nodePool.EnsureInstanceGroupsAndPorts(defaultNamer.InstanceGroup(), []int64{sp.NodePort}) pool.Ensure([]utils.ServicePort{sp}, igs) - be, err := f.GetGlobalBackendService(defaultNamer.Backend(sp.NodePort)) + be, err := f.GetGlobalBackendService(sp.BackendName(defaultNamer)) if err != nil { t.Fatalf("%v", err) } @@ -803,7 +803,7 @@ func TestLinkBackendServiceToNEG(t *testing.T) { for _, zone := range zones { err := fakeNEG.CreateNetworkEndpointGroup(&computealpha.NetworkEndpointGroup{ - Name: defaultNamer.BackendNEG(namespace, name, port), + Name: defaultNamer.NEG(namespace, name, port), }, zone) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -814,7 +814,7 @@ func TestLinkBackendServiceToNEG(t *testing.T) { t.Fatalf("Failed to link backend service to NEG: %v", err) } - beName := defaultNamer.BackendNEG(svcPort.SvcName.Namespace, svcPort.SvcName.Name, svcPort.SvcTargetPort) + beName := svcPort.BackendName(defaultNamer) bs, err := f.GetGlobalBackendService(beName) if err != nil { t.Fatalf("Failed to retrieve backend service: %v", err) @@ -904,7 +904,7 @@ func TestEnsureBackendServiceProtocol(t *testing.T) { fmt.Sprintf("Updating Port:%v Protocol:%v to Port:%v Protocol:%v", oldPort.NodePort, oldPort.Protocol, newPort.NodePort, newPort.Protocol), func(t *testing.T) { pool.Ensure([]utils.ServicePort{oldPort}, nil) - be, err := pool.Get(defaultNamer.Backend(oldPort.NodePort), newPort.IsAlpha()) + be, err := pool.Get(oldPort.BackendName(defaultNamer), newPort.IsAlpha()) if err != nil { t.Fatalf("%v", err) } @@ -953,7 +953,7 @@ func TestEnsureBackendServiceDescription(t *testing.T) { fmt.Sprintf("Updating Port:%v Protocol:%v to Port:%v Protocol:%v", oldPort.NodePort, oldPort.Protocol, newPort.NodePort, newPort.Protocol), func(t *testing.T) { pool.Ensure([]utils.ServicePort{oldPort}, nil) - be, err := pool.Get(defaultNamer.Backend(oldPort.NodePort), oldPort.IsAlpha()) + be, err := pool.Get(oldPort.BackendName(defaultNamer), oldPort.IsAlpha()) if err != nil { t.Fatalf("%v", err) } @@ -982,7 +982,7 @@ func TestEnsureBackendServiceHealthCheckLink(t *testing.T) { p := utils.ServicePort{NodePort: 80, Protocol: annotations.ProtocolHTTP, SvcPort: intstr.FromInt(1)} pool.Ensure([]utils.ServicePort{p}, nil) - be, err := pool.Get(defaultNamer.Backend(p.NodePort), p.IsAlpha()) + be, err := pool.Get(p.BackendName(defaultNamer), p.IsAlpha()) if err != nil { t.Fatalf("%v", err) } diff --git a/pkg/controller/controller_test.go b/pkg/controller/controller_test.go index 98eefb26b1..f247ab5383 100644 --- a/pkg/controller/controller_test.go +++ b/pkg/controller/controller_test.go @@ -268,7 +268,7 @@ func TestLbCreateDelete(t *testing.T) { } for _, port := range unexpected { - beName := pm.namer.Backend(int64(port)) + beName := pm.namer.IGBackend(int64(port)) if be, err := cm.backendPool.Get(beName, false); err == nil { t.Fatalf("Found backend %+v for port %v", be, port) } @@ -282,7 +282,7 @@ func TestLbCreateDelete(t *testing.T) { // No cluster resources (except the defaults used by the cluster manager) // should exist at this point. for _, port := range expected { - beName := pm.namer.Backend(int64(port)) + beName := pm.namer.IGBackend(int64(port)) if be, err := cm.backendPool.Get(beName, false); err == nil { t.Fatalf("Found backend %+v for port %v", be, port) } diff --git a/pkg/healthchecks/healthchecks.go b/pkg/healthchecks/healthchecks.go index cc4cfb0b97..3f479413cc 100644 --- a/pkg/healthchecks/healthchecks.go +++ b/pkg/healthchecks/healthchecks.go @@ -210,13 +210,13 @@ func (h *HealthChecks) Get(name string, alpha bool) (*HealthCheck, error) { // GetLegacy deletes legacy HTTP health checks func (h *HealthChecks) GetLegacy(port int64) (*compute.HttpHealthCheck, error) { - name := h.namer.Backend(port) + name := h.namer.IGBackend(port) return h.cloud.GetHttpHealthCheck(name) } // DeleteLegacy deletes legacy HTTP health checks func (h *HealthChecks) DeleteLegacy(port int64) error { - name := h.namer.Backend(port) + name := h.namer.IGBackend(port) glog.V(2).Infof("Deleting legacy HTTP health check %v", name) return h.cloud.DeleteHttpHealthCheck(name) } diff --git a/pkg/healthchecks/healthchecks_test.go b/pkg/healthchecks/healthchecks_test.go index ec3ae5c8b3..57d62293dc 100644 --- a/pkg/healthchecks/healthchecks_test.go +++ b/pkg/healthchecks/healthchecks_test.go @@ -32,35 +32,35 @@ func TestHealthCheckAdd(t *testing.T) { hcp := NewFakeHealthCheckProvider() healthChecks := NewHealthChecker(hcp, "/", namer) - hc := healthChecks.New(namer.Backend(80), 80, annotations.ProtocolHTTP, false) + hc := healthChecks.New(namer.IGBackend(80), 80, annotations.ProtocolHTTP, false) _, err := healthChecks.Sync(hc) if err != nil { t.Fatalf("unexpected error: %v", err) } // Verify the health check exists - _, err = hcp.GetHealthCheck(namer.Backend(80)) + _, err = hcp.GetHealthCheck(namer.IGBackend(80)) if err != nil { t.Fatalf("expected the health check to exist, err: %v", err) } - hc = healthChecks.New(namer.Backend(443), 443, annotations.ProtocolHTTPS, false) + hc = healthChecks.New(namer.IGBackend(443), 443, annotations.ProtocolHTTPS, false) _, err = healthChecks.Sync(hc) if err != nil { t.Fatalf("unexpected error: %v", err) } // Verify the health check exists - _, err = hcp.GetHealthCheck(namer.Backend(443)) + _, err = hcp.GetHealthCheck(namer.IGBackend(443)) if err != nil { t.Fatalf("expected the health check to exist, err: %v", err) } - hc = healthChecks.New(namer.Backend(3000), 3000, annotations.ProtocolHTTP2, false) + hc = healthChecks.New(namer.IGBackend(3000), 3000, annotations.ProtocolHTTP2, false) _, err = healthChecks.Sync(hc) if err != nil { t.Fatalf("unexpected error: %v", err) } // Verify the health check exists - _, err = hcp.GetHealthCheck(namer.Backend(3000)) + _, err = hcp.GetHealthCheck(namer.IGBackend(3000)) if err != nil { t.Fatalf("expected the health check to exist, err: %v", err) } @@ -73,7 +73,7 @@ func TestHealthCheckAddExisting(t *testing.T) { // HTTP // Manually insert a health check httpHC := DefaultHealthCheck(3000, annotations.ProtocolHTTP) - httpHC.Name = namer.Backend(3000) + httpHC.Name = namer.IGBackend(3000) httpHC.RequestPath = "/my-probes-health" v1hc, err := httpHC.ToComputeHealthCheck() if err != nil { @@ -82,7 +82,7 @@ func TestHealthCheckAddExisting(t *testing.T) { hcp.CreateHealthCheck(v1hc) // Should not fail adding the same type of health check - hc := healthChecks.New(namer.Backend(3000), 3000, annotations.ProtocolHTTP, false) + hc := healthChecks.New(namer.IGBackend(3000), 3000, annotations.ProtocolHTTP, false) _, err = healthChecks.Sync(hc) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -96,7 +96,7 @@ func TestHealthCheckAddExisting(t *testing.T) { // HTTPS // Manually insert a health check httpsHC := DefaultHealthCheck(4000, annotations.ProtocolHTTPS) - httpsHC.Name = namer.Backend(4000) + httpsHC.Name = namer.IGBackend(4000) httpsHC.RequestPath = "/my-probes-health" v1hc, err = httpHC.ToComputeHealthCheck() if err != nil { @@ -104,7 +104,7 @@ func TestHealthCheckAddExisting(t *testing.T) { } hcp.CreateHealthCheck(v1hc) - hc = healthChecks.New(namer.Backend(4000), 4000, annotations.ProtocolHTTPS, false) + hc = healthChecks.New(namer.IGBackend(4000), 4000, annotations.ProtocolHTTPS, false) _, err = healthChecks.Sync(hc) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -118,7 +118,7 @@ func TestHealthCheckAddExisting(t *testing.T) { // HTTP2 // Manually insert a health check http2 := DefaultHealthCheck(5000, annotations.ProtocolHTTP2) - http2.Name = namer.Backend(5000) + http2.Name = namer.IGBackend(5000) http2.RequestPath = "/my-probes-health" v1hc, err = httpHC.ToComputeHealthCheck() if err != nil { @@ -126,7 +126,7 @@ func TestHealthCheckAddExisting(t *testing.T) { } hcp.CreateHealthCheck(v1hc) - hc = healthChecks.New(namer.Backend(5000), 5000, annotations.ProtocolHTTPS, false) + hc = healthChecks.New(namer.IGBackend(5000), 5000, annotations.ProtocolHTTPS, false) _, err = healthChecks.Sync(hc) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -144,7 +144,7 @@ func TestHealthCheckDelete(t *testing.T) { // Create HTTP HC for 1234 hc := DefaultHealthCheck(1234, annotations.ProtocolHTTP) - hc.Name = namer.Backend(1234) + hc.Name = namer.IGBackend(1234) v1hc, err := hc.ToComputeHealthCheck() if err != nil { t.Fatalf("unexpected error: %v", err) @@ -156,7 +156,7 @@ func TestHealthCheckDelete(t *testing.T) { hcp.CreateHealthCheck(v1hc) // Delete only HTTP 1234 - err = healthChecks.Delete(namer.Backend(1234)) + err = healthChecks.Delete(namer.IGBackend(1234)) if err != nil { t.Errorf("unexpected error when deleting health check, err: %v", err) } @@ -168,7 +168,7 @@ func TestHealthCheckDelete(t *testing.T) { } // Delete only HTTP 1234 - err = healthChecks.Delete(namer.Backend(1234)) + err = healthChecks.Delete(namer.IGBackend(1234)) if err == nil { t.Errorf("expected not-found error when deleting health check, err: %v", err) } @@ -180,13 +180,13 @@ func TestHTTP2HealthCheckDelete(t *testing.T) { // Create HTTP2 HC for 1234 hc := DefaultHealthCheck(1234, annotations.ProtocolHTTP2) - hc.Name = namer.Backend(1234) + hc.Name = namer.IGBackend(1234) alphahc := hc.ToAlphaComputeHealthCheck() hcp.CreateAlphaHealthCheck(alphahc) // Delete only HTTP2 1234 - err := healthChecks.Delete(namer.Backend(1234)) + err := healthChecks.Delete(namer.IGBackend(1234)) if err != nil { t.Errorf("unexpected error when deleting health check, err: %v", err) } @@ -205,7 +205,7 @@ func TestHealthCheckUpdate(t *testing.T) { // HTTP // Manually insert a health check hc := DefaultHealthCheck(3000, annotations.ProtocolHTTP) - hc.Name = namer.Backend(3000) + hc.Name = namer.IGBackend(3000) hc.RequestPath = "/my-probes-health" v1hc, err := hc.ToComputeHealthCheck() if err != nil { @@ -304,7 +304,7 @@ func TestHealthCheckDeleteLegacy(t *testing.T) { healthChecks := NewHealthChecker(hcp, "/", namer) err := hcp.CreateHttpHealthCheck(&compute.HttpHealthCheck{ - Name: namer.Backend(80), + Name: namer.IGBackend(80), }) if err != nil { t.Fatalf("expected health check to be created, err: %v", err) @@ -320,7 +320,7 @@ func TestHealthCheckDeleteLegacy(t *testing.T) { func TestAlphaHealthCheck(t *testing.T) { hcp := NewFakeHealthCheckProvider() healthChecks := NewHealthChecker(hcp, "/", namer) - hc := healthChecks.New(namer.Backend(8000), 8000, annotations.ProtocolHTTP, true) + hc := healthChecks.New(namer.IGBackend(8000), 8000, annotations.ProtocolHTTP, true) _, err := healthChecks.Sync(hc) if err != nil { t.Fatalf("got %v, want nil", err) diff --git a/pkg/loadbalancers/fakes.go b/pkg/loadbalancers/fakes.go index 7fb389f538..dd7b62aaf1 100644 --- a/pkg/loadbalancers/fakes.go +++ b/pkg/loadbalancers/fakes.go @@ -366,7 +366,7 @@ func (f *FakeLoadBalancers) CheckURLMap(l7 *L7, expectedUrlMap *utils.GCEURLMap) if err != nil || um == nil { return fmt.Errorf("f.GetUrlMap(%q) = %v, %v; want _, nil", l7.UrlMap().Name, um, err) } - defaultBackendName := f.namer.Backend(expectedUrlMap.DefaultBackend.NodePort) + defaultBackendName := expectedUrlMap.DefaultBackend.BackendName(f.namer) defaultBackendLink := utils.BackendServiceRelativeResourcePath(defaultBackendName) // The urlmap should have a default backend, and each path matcher. if defaultBackendName != "" && l7.UrlMap().DefaultService != defaultBackendLink { @@ -398,7 +398,7 @@ func (f *FakeLoadBalancers) CheckURLMap(l7 *L7, expectedUrlMap *utils.GCEURLMap) return fmt.Errorf("Expected path rules for host %v", hostname) } else if ok, svc := expectedUrlMap.PathExists(hostname, pathRule); !ok { return fmt.Errorf("Expected rule %v for host %v", pathRule, hostname) - } else if utils.BackendServiceRelativeResourcePath(f.namer.Backend(svc.NodePort)) != rule.Service { + } else if utils.BackendServiceRelativeResourcePath(svc.BackendName(f.namer)) != rule.Service { return fmt.Errorf("Expected service %v found %v", svc, rule.Service) } } diff --git a/pkg/loadbalancers/l7.go b/pkg/loadbalancers/l7.go index bcaa929263..ead43104e0 100644 --- a/pkg/loadbalancers/l7.go +++ b/pkg/loadbalancers/l7.go @@ -133,11 +133,12 @@ func (l *L7) UrlMap() *compute.UrlMap { return l.um } -func (l *L7) checkUrlMap() (err error) { +func (l *L7) assertUrlMapExists() (err error) { if l.runtimeInfo.UrlMap == nil { return fmt.Errorf("cannot create urlmap without internal representation") } - defaultBackendName := l.namer.Backend(l.runtimeInfo.UrlMap.DefaultBackend.NodePort) + + defaultBackendName := l.runtimeInfo.UrlMap.DefaultBackend.BackendName(l.namer) urlMapName := l.namer.UrlMap(l.Name) urlMap, _ := l.cloud.GetUrlMap(urlMapName) if urlMap != nil { @@ -602,7 +603,7 @@ func (l *L7) checkStaticIP() (err error) { } func (l *L7) edgeHop() error { - if err := l.checkUrlMap(); err != nil { + if err := l.assertUrlMapExists(); err != nil { return err } if l.runtimeInfo.AllowHTTP { @@ -717,8 +718,7 @@ func (l *L7) UpdateUrlMap() error { } urlMap := l.runtimeInfo.UrlMap - - defaultBackendName := l.namer.Backend(urlMap.DefaultBackend.NodePort) + defaultBackendName := urlMap.DefaultBackend.BackendName(l.namer) l.um.DefaultService = utils.BackendServiceRelativeResourcePath(defaultBackendName) // Every update replaces the entire urlmap. @@ -747,7 +747,7 @@ func (l *L7) UpdateUrlMap() error { // GCE ensures that matched rule with longest prefix wins. for _, rule := range rules { - beName := l.namer.Backend(rule.Backend.NodePort) + beName := rule.Backend.BackendName(l.namer) beLink := utils.BackendServiceRelativeResourcePath(beName) pathMatcher.PathRules = append( pathMatcher.PathRules, &compute.PathRule{Paths: []string{rule.Path}, Service: beLink}) diff --git a/pkg/utils/namer.go b/pkg/utils/namer.go index ddba953f8c..daf5c6b4a6 100644 --- a/pkg/utils/namer.go +++ b/pkg/utils/namer.go @@ -159,6 +159,14 @@ func (n *Namer) UID() string { return n.clusterName } +func (n *Namer) shortUID() string { + uid := n.UID() + if len(uid) <= 8 { + return uid + } + return uid[:8] +} + // GetFirewallName returns the firewall name of this cluster. func (n *Namer) Firewall() string { n.nameLock.Lock() @@ -215,14 +223,14 @@ func (n *Namer) ParseName(name string) *NameComponents { } } -// negBelongsToCluster checks that the uid is present and a substring of the +// negBelongsToCluster checks that the UID is present and a substring of the // cluster uid, since the NEG naming schema truncates it to 8 characters. -// This is only valid for NEGs and Backends on NEG. +// This is only valid for NEGs, BackendServices and Healthchecks for NEG. func (n *Namer) negBelongsToCluster(name string) bool { - l := strings.Split(name, "-") + fields := strings.Split(name, "-") var uid string - if len(l) > 1 { - uid = l[1] + if len(fields) > 1 { + uid = fields[1] } return len(uid) > 0 && strings.Contains(n.UID(), uid) @@ -239,13 +247,13 @@ func (n *Namer) NameBelongsToCluster(name string) bool { return components.ClusterName == clusterName || n.negBelongsToCluster(name) } -// BeName constructs the name for a backend. -func (n *Namer) Backend(port int64) string { +// IGBackend constructs the name for a backend service targeting instance groups. +func (n *Namer) IGBackend(port int64) string { return n.decorateName(fmt.Sprintf("%v-%v-%d", n.prefix, backendPrefix, port)) } -// BackendPort retrieves the port from the given backend name. -func (n *Namer) BackendPort(beName string) (string, error) { +// IGBackendPort retrieves the port from the given backend name. +func (n *Namer) IGBackendPort(beName string) (string, error) { r := regexp.MustCompile(n.prefix + "-" + backendRegex) match := r.FindStringSubmatch(beName) if len(match) < 2 { @@ -371,21 +379,11 @@ func (n *Namer) NamedPort(port int64) string { // of all NEGs associated with the current cluster. Any modifications // must be backward compatible. func (n *Namer) NEG(namespace, name, port string) string { - trimmedFields := trimFieldsEvenly(maxNEGDescriptiveLabel, namespace, name, port) - trimedNamespace := trimmedFields[0] - trimedName := trimmedFields[1] - trimedPort := trimmedFields[2] - return fmt.Sprintf("%s-%s-%s-%s-%s", n.negPrefix(), trimedNamespace, trimedName, trimedPort, negSuffix(n.UID(), namespace, name, port)) -} - -// BackendNEG names the BackendServices which are using NEG, using the same -// naming convention as NEG. -func (n *Namer) BackendNEG(namespace, name, port string) string { - trimmedFields := trimFieldsEvenly(maxNEGDescriptiveLabel, namespace, name, port) - trimedNamespace := trimmedFields[0] - trimedName := trimmedFields[1] - trimedPort := trimmedFields[2] - return fmt.Sprintf("%s-%s-%s-%s-%s", n.negPrefix(), trimedNamespace, trimedName, trimedPort, negSuffix(n.UID(), namespace, name, port)) + truncFields := trimFieldsEvenly(maxNEGDescriptiveLabel, namespace, name, port) + truncNamespace := truncFields[0] + truncName := truncFields[1] + truncPort := truncFields[2] + return fmt.Sprintf("%s-%s-%s-%s-%s", n.negPrefix(), truncNamespace, truncName, truncPort, negSuffix(n.shortUID(), namespace, name, port)) } // IsNEG returns true if the name is a NEG owned by this cluster. @@ -394,16 +392,12 @@ func (n *Namer) IsNEG(name string) bool { } func (n *Namer) negPrefix() string { - uid := n.UID() - if len(uid) > 8 { - uid = uid[:8] - } - return fmt.Sprintf("%s%s-%s", n.prefix, schemaVersionV1, uid) + return fmt.Sprintf("%s%s-%s", n.prefix, schemaVersionV1, n.shortUID()) } // negSuffix returns hash code with 8 characters func negSuffix(uid, namespace, name, port string) string { - negString := uid + namespace + name + port + negString := strings.Join([]string{uid, namespace, name, port}, ";") negHash := fmt.Sprintf("%x", sha256.Sum256([]byte(negString))) return negHash[:8] } diff --git a/pkg/utils/namer_test.go b/pkg/utils/namer_test.go index 19db990d9e..8d220ca121 100644 --- a/pkg/utils/namer_test.go +++ b/pkg/utils/namer_test.go @@ -100,7 +100,7 @@ func TestNamerParseName(t *testing.T) { want *NameComponents }{ {"", &NameComponents{}}, // TODO: this should really be a parse error. - {namer.Backend(80), &NameComponents{uid, "be", ""}}, + {namer.IGBackend(80), &NameComponents{uid, "be", ""}}, {namer.InstanceGroup(), &NameComponents{uid, "ig", ""}}, {namer.TargetProxy(lbName, HTTPProtocol), &NameComponents{uid, "tp", ""}}, {namer.TargetProxy(lbName, HTTPSProtocol), &NameComponents{uid, "tps", ""}}, @@ -126,7 +126,7 @@ func TestNameBelongsToCluster(t *testing.T) { lbName := namer.LoadBalancer("key1") // Positive cases. for _, tc := range []string{ - namer.Backend(80), + namer.IGBackend(80), namer.InstanceGroup(), namer.TargetProxy(lbName, HTTPProtocol), namer.TargetProxy(lbName, HTTPSProtocol), @@ -172,14 +172,14 @@ func TestNamerBackend(t *testing.T) { if tc.uid != "" { namer.SetUID(tc.uid) } - name := namer.Backend(tc.port) + name := namer.IGBackend(tc.port) if name != tc.want { t.Errorf("%s: namer.Backend() = %q, want %q", tc.desc, name, tc.want) } } // Prefix. namer := NewNamerWithPrefix("mci", "uid1", "fw1") - name := namer.Backend(80) + name := namer.IGBackend(80) const want = "mci-be-80--uid1" if name != want { t.Errorf("with prefix = %q, namer.Backend(80) = %q, want %q", "mci", name, want) @@ -198,7 +198,7 @@ func TestBackendPort(t *testing.T) { {"k8s-be-8080--uid1", "8080", true}, {"k8s-be-port1--uid1", "8080", false}, } { - port, err := namer.BackendPort(tc.in) + port, err := namer.IGBackendPort(tc.in) if err != nil { if tc.valid { t.Errorf("namer.BackendPort(%q) = _, %v, want _, nil", tc.in, err) @@ -386,21 +386,21 @@ func TestNamerNEG(t *testing.T) { "namespace", "name", "80", - "k8s1-01234567-namespace-name-80-1bcdfee6", + "k8s1-01234567-namespace-name-80-5104b449", }, { "63 characters", longstring[:10], longstring[:10], longstring[:10], - "k8s1-01234567-0123456789-0123456789-0123456789-0db7111e", + "k8s1-01234567-0123456789-0123456789-0123456789-6d4e657b", }, { "long namespace", longstring, "0", "0", - "k8s1-01234567-0123456789012345678901234567890123456-0--9faea975", + "k8s1-01234567-0123456789012345678901234567890123456-0--72142e04", }, { @@ -408,14 +408,14 @@ func TestNamerNEG(t *testing.T) { longstring, longstring, "0", - "k8s1-01234567-0123456789012345678-0123456789012345678--59770beb", + "k8s1-01234567-0123456789012345678-0123456789012345678--9129e3d2", }, { " long name, namespace and port", longstring, longstring[:40], longstring[:30], - "k8s1-01234567-0123456789012345-0123456789012-012345678-623f075f", + "k8s1-01234567-0123456789012345-0123456789012-012345678-a7dff5e0", }, } @@ -433,7 +433,7 @@ func TestNamerNEG(t *testing.T) { // Different prefix. namer = NewNamerWithPrefix("mci", clusterId, "fw") name := namer.NEG("ns", "svc", "port") - const want = "mci1-01234567-ns-svc-port-73fad9b3" + const want = "mci1-01234567-ns-svc-port-fe7dd054" if name != want { t.Errorf(`with prefix %q, namer.NEG("ns", "svc", 80) = %q, want %q`, "mci", name, want) } diff --git a/pkg/utils/serviceport.go b/pkg/utils/serviceport.go index 62160e6b3f..b902d3b50a 100644 --- a/pkg/utils/serviceport.go +++ b/pkg/utils/serviceport.go @@ -51,8 +51,8 @@ func (sp ServicePort) IsAlpha() bool { // BackendName returns the name of the backend which would be used for this ServicePort. func (sp ServicePort) BackendName(namer *Namer) string { if !sp.NEGEnabled { - return namer.Backend(sp.NodePort) + return namer.IGBackend(sp.NodePort) } - return namer.BackendNEG(sp.SvcName.Namespace, sp.SvcName.Name, sp.SvcTargetPort) + return namer.NEG(sp.SvcName.Namespace, sp.SvcName.Name, sp.SvcTargetPort) }