From 735ad9ed6389631d6b190978f41e8c3c156e52b7 Mon Sep 17 00:00:00 2001 From: walter Date: Sat, 20 Oct 2018 00:14:19 -0700 Subject: [PATCH] Fixed lint errors for pkg/cloudprovider/providers/gce. Fixed minor issues. Cleaned up from merge errors. --- hack/.golint_failures | 1 - pkg/cloudprovider/providers/gce/gce.go | 181 +++++++------- .../providers/gce/gce_addresses.go | 54 ++--- pkg/cloudprovider/providers/gce/gce_alpha.go | 15 +- .../providers/gce/gce_annotations.go | 14 +- .../providers/gce/gce_backendservice.go | 80 +++---- pkg/cloudprovider/providers/gce/gce_cert.go | 18 +- .../providers/gce/gce_clusterid.go | 54 +++-- .../providers/gce/gce_clusters.go | 38 +-- pkg/cloudprovider/providers/gce/gce_disks.go | 194 ++++++++------- .../providers/gce/gce_disks_test.go | 134 +++++------ pkg/cloudprovider/providers/gce/gce_fake.go | 12 +- .../providers/gce/gce_firewall.go | 16 +- .../providers/gce/gce_forwardingrule.go | 54 ++--- .../providers/gce/gce_healthchecks.go | 104 ++++---- .../providers/gce/gce_instancegroup.go | 32 +-- .../providers/gce/gce_instances.go | 175 +++++++------- .../providers/gce/gce_loadbalancer.go | 60 ++--- .../gce/gce_loadbalancer_external.go | 223 +++++++++--------- .../gce/gce_loadbalancer_external_test.go | 48 ++-- .../gce/gce_loadbalancer_internal.go | 178 +++++++------- .../gce/gce_loadbalancer_internal_test.go | 36 +-- .../gce/gce_loadbalancer_utils_test.go | 14 +- .../providers/gce/gce_networkendpointgroup.go | 43 ++-- pkg/cloudprovider/providers/gce/gce_routes.go | 18 +- .../providers/gce/gce_securitypolicy.go | 36 +-- .../providers/gce/gce_targetpool.go | 20 +- .../providers/gce/gce_targetproxy.go | 66 +++--- pkg/cloudprovider/providers/gce/gce_test.go | 12 +- pkg/cloudprovider/providers/gce/gce_tpu.go | 40 ++-- pkg/cloudprovider/providers/gce/gce_urlmap.go | 42 ++-- pkg/cloudprovider/providers/gce/gce_util.go | 18 +- pkg/cloudprovider/providers/gce/gce_zones.go | 20 +- pkg/cloudprovider/providers/gce/support.go | 8 +- .../providers/gce/token_source.go | 3 + pkg/controller/nodeipam/ipam/adapter.go | 4 +- .../nodeipam/ipam/cloud_cidr_allocator.go | 4 +- pkg/controller/nodeipam/ipam/controller.go | 2 +- .../nodeipam/node_ipam_controller_test.go | 2 +- pkg/volume/gcepd/gce_util.go | 4 +- .../persistentvolume/label/admission.go | 6 +- test/e2e/framework/providers/gce/firewall.go | 2 +- test/e2e/framework/providers/gce/gce.go | 10 +- test/e2e/framework/providers/gce/ingress.go | 14 +- test/e2e/framework/test_context.go | 2 +- test/e2e/network/firewall.go | 2 +- test/e2e/network/network_tiers.go | 2 +- test/e2e/network/service.go | 6 +- test/integration/util/cloud.go | 4 +- 49 files changed, 1086 insertions(+), 1039 deletions(-) diff --git a/hack/.golint_failures b/hack/.golint_failures index eebcb996ff1..e1618127c2e 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -88,7 +88,6 @@ pkg/apis/storage/v1beta1/util pkg/auth/authorizer/abac pkg/capabilities pkg/cloudprovider/providers/fake -pkg/cloudprovider/providers/gce pkg/cloudprovider/providers/gce/cloud pkg/cloudprovider/providers/ovirt pkg/cloudprovider/providers/photon diff --git a/pkg/cloudprovider/providers/gce/gce.go b/pkg/cloudprovider/providers/gce/gce.go index a514dc07288..adba37d59b6 100644 --- a/pkg/cloudprovider/providers/gce/gce.go +++ b/pkg/cloudprovider/providers/gce/gce.go @@ -57,6 +57,7 @@ import ( ) const ( + // ProviderName is the official const representation of the Google Cloud Provider ProviderName = "gce" k8sNodeRouteTag = "k8s-node-route" @@ -97,9 +98,9 @@ type gceObject interface { MarshalJSON() ([]byte, error) } -// GCECloud is an implementation of Interface, LoadBalancer and Instances for Google Compute Engine. -type GCECloud struct { - // ClusterID contains functionality for getting (and initializing) the ingress-uid. Call GCECloud.Initialize() +// Cloud is an implementation of Interface, LoadBalancer and Instances for Google Compute Engine. +type Cloud struct { + // ClusterID contains functionality for getting (and initializing) the ingress-uid. Call Cloud.Initialize() // for the cloudprovider to start watching the configmap. ClusterID ClusterID @@ -145,7 +146,7 @@ type GCECloud struct { // lock to prevent shared resources from being prematurely deleted while the operation is // in progress. sharedResourceLock sync.Mutex - // AlphaFeatureGate gates gce alpha features in GCECloud instance. + // AlphaFeatureGate gates gce alpha features in Cloud instance. // Related wrapper functions that interacts with gce alpha api should examine whether // the corresponding api is enabled. // If not enabled, it should return error. @@ -158,6 +159,7 @@ type GCECloud struct { s *cloud.Service } +// ConfigGlobal is the in memory representation of the gce.conf config data // TODO: replace gcfg with json type ConfigGlobal struct { TokenURL string `gcfg:"token-url"` @@ -177,12 +179,12 @@ type ConfigGlobal struct { NodeInstancePrefix string `gcfg:"node-instance-prefix"` Regional bool `gcfg:"regional"` Multizone bool `gcfg:"multizone"` - // ApiEndpoint is the GCE compute API endpoint to use. If this is blank, + // APIEndpoint is the GCE compute API endpoint to use. If this is blank, // then the default endpoint is used. - ApiEndpoint string `gcfg:"api-endpoint"` - // ContainerApiEndpoint is the GCE container API endpoint to use. If this is blank, + APIEndpoint string `gcfg:"api-endpoint"` + // ContainerAPIEndpoint is the GCE container API endpoint to use. If this is blank, // then the default endpoint is used. - ContainerApiEndpoint string `gcfg:"container-api-endpoint"` + ContainerAPIEndpoint string `gcfg:"container-api-endpoint"` // LocalZone specifies the GCE zone that gce cloud client instance is // located in (i.e. where the controller will be running). If this is // blank, then the local zone will be discovered via the metadata server. @@ -197,10 +199,10 @@ type ConfigFile struct { Global ConfigGlobal `gcfg:"global"` } -// CloudConfig includes all the necessary configuration for creating GCECloud +// CloudConfig includes all the necessary configuration for creating Cloud type CloudConfig struct { - ApiEndpoint string - ContainerApiEndpoint string + APIEndpoint string + ContainerAPIEndpoint string ProjectID string NetworkProjectID string Region string @@ -236,22 +238,22 @@ type Services struct { } // ComputeServices returns access to the internal compute services. -func (g *GCECloud) ComputeServices() *Services { +func (g *Cloud) ComputeServices() *Services { return &Services{g.service, g.serviceAlpha, g.serviceBeta} } // Compute returns the generated stubs for the compute API. -func (g *GCECloud) Compute() cloud.Cloud { +func (g *Cloud) Compute() cloud.Cloud { return g.c } // ContainerService returns the container service. -func (g *GCECloud) ContainerService() *container.Service { +func (g *Cloud) ContainerService() *container.Service { return g.containerService } -// newGCECloud creates a new instance of GCECloud. -func newGCECloud(config io.Reader) (gceCloud *GCECloud, err error) { +// newGCECloud creates a new instance of Cloud. +func newGCECloud(config io.Reader) (gceCloud *Cloud, err error) { var cloudConfig *CloudConfig var configFile *ConfigFile @@ -286,12 +288,12 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err cloudConfig.UseMetadataServer = true cloudConfig.AlphaFeatureGate = NewAlphaFeatureGate([]string{}) if configFile != nil { - if configFile.Global.ApiEndpoint != "" { - cloudConfig.ApiEndpoint = configFile.Global.ApiEndpoint + if configFile.Global.APIEndpoint != "" { + cloudConfig.APIEndpoint = configFile.Global.APIEndpoint } - if configFile.Global.ContainerApiEndpoint != "" { - cloudConfig.ContainerApiEndpoint = configFile.Global.ContainerApiEndpoint + if configFile.Global.ContainerAPIEndpoint != "" { + cloudConfig.ContainerAPIEndpoint = configFile.Global.ContainerAPIEndpoint } if configFile.Global.TokenURL != "" { @@ -377,11 +379,11 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err return cloudConfig, err } -// CreateGCECloud creates a GCECloud object using the specified parameters. +// CreateGCECloud creates a Cloud object using the specified parameters. // If no networkUrl is specified, loads networkName via rest call. // If no tokenSource is specified, uses oauth2.DefaultTokenSource. // If managedZones is nil / empty all zones in the region will be managed. -func CreateGCECloud(config *CloudConfig) (*GCECloud, error) { +func CreateGCECloud(config *CloudConfig) (*Cloud, error) { // Remove any pre-release version and build metadata from the semver, // leaving only the MAJOR.MINOR.PATCH portion. See http://semver.org/. version := strings.TrimLeft(strings.Split(strings.Split(version.Get().GitVersion, "-")[0], "+")[0], "v") @@ -429,10 +431,10 @@ func CreateGCECloud(config *CloudConfig) (*GCECloud, error) { // Generate alpha and beta api endpoints based on override v1 api endpoint. // For example, // staging API endpoint: https://www.googleapis.com/compute/staging_v1/ - if config.ApiEndpoint != "" { - service.BasePath = fmt.Sprintf("%sprojects/", config.ApiEndpoint) - serviceBeta.BasePath = fmt.Sprintf("%sprojects/", strings.Replace(config.ApiEndpoint, "v1", "beta", -1)) - serviceAlpha.BasePath = fmt.Sprintf("%sprojects/", strings.Replace(config.ApiEndpoint, "v1", "alpha", -1)) + if config.APIEndpoint != "" { + service.BasePath = fmt.Sprintf("%sprojects/", config.APIEndpoint) + serviceBeta.BasePath = fmt.Sprintf("%sprojects/", strings.Replace(config.APIEndpoint, "v1", "beta", -1)) + serviceAlpha.BasePath = fmt.Sprintf("%sprojects/", strings.Replace(config.APIEndpoint, "v1", "alpha", -1)) } containerService, err := container.New(client) @@ -440,8 +442,8 @@ func CreateGCECloud(config *CloudConfig) (*GCECloud, error) { return nil, err } containerService.UserAgent = userAgent - if config.ContainerApiEndpoint != "" { - containerService.BasePath = config.ContainerApiEndpoint + if config.ContainerAPIEndpoint != "" { + containerService.BasePath = config.ContainerAPIEndpoint } tpuService, err := newTPUService(client) @@ -460,7 +462,7 @@ func CreateGCECloud(config *CloudConfig) (*GCECloud, error) { if config.NetworkURL != "" { networkURL = config.NetworkURL } else if config.NetworkName != "" { - networkURL = gceNetworkURL(config.ApiEndpoint, netProjID, config.NetworkName) + networkURL = gceNetworkURL(config.APIEndpoint, netProjID, config.NetworkName) } else { // Other consumers may use the cloudprovider without utilizing the wrapped GCE API functions // or functions requiring network/subnetwork URLs (e.g. Kubelet). @@ -470,7 +472,7 @@ func CreateGCECloud(config *CloudConfig) (*GCECloud, error) { if config.SubnetworkURL != "" { subnetURL = config.SubnetworkURL } else if config.SubnetworkName != "" { - subnetURL = gceSubnetworkURL(config.ApiEndpoint, netProjID, config.Region, config.SubnetworkName) + subnetURL = gceSubnetworkURL(config.APIEndpoint, netProjID, config.Region, config.SubnetworkName) } else { // Determine the type of network and attempt to discover the correct subnet for AUTO mode. // Gracefully fail because kubelet calls CreateGCECloud without any config, and minions @@ -510,7 +512,7 @@ func CreateGCECloud(config *CloudConfig) (*GCECloud, error) { operationPollRateLimiter := flowcontrol.NewTokenBucketRateLimiter(5, 5) // 5 qps, 5 burst. - gce := &GCECloud{ + gce := &Cloud{ service: service, serviceAlpha: serviceAlpha, serviceBeta: serviceBeta, @@ -550,8 +552,8 @@ func CreateGCECloud(config *CloudConfig) (*GCECloud, error) { // SetRateLimiter adds a custom cloud.RateLimiter implementation. // WARNING: Calling this could have unexpected behavior if you have in-flight -// requests. It is best to use this immediately after creating a GCECloud. -func (g *GCECloud) SetRateLimiter(rl cloud.RateLimiter) { +// requests. It is best to use this immediately after creating a Cloud. +func (g *Cloud) SetRateLimiter(rl cloud.RateLimiter) { if rl != nil { g.s.RateLimiter = rl } @@ -610,89 +612,92 @@ func tryConvertToProjectNames(configProject, configNetworkProject string, servic // Initialize takes in a clientBuilder and spawns a goroutine for watching the clusterid configmap. // This must be called before utilizing the funcs of gce.ClusterID -func (gce *GCECloud) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{}) { - gce.clientBuilder = clientBuilder - gce.client = clientBuilder.ClientOrDie("cloud-provider") +func (g *Cloud) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{}) { + g.clientBuilder = clientBuilder + g.client = clientBuilder.ClientOrDie("cloud-provider") - if gce.OnXPN() { - gce.eventBroadcaster = record.NewBroadcaster() - gce.eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: gce.client.CoreV1().Events("")}) - gce.eventRecorder = gce.eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "gce-cloudprovider"}) + if g.OnXPN() { + g.eventBroadcaster = record.NewBroadcaster() + g.eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: g.client.CoreV1().Events("")}) + g.eventRecorder = g.eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "g-cloudprovider"}) } - go gce.watchClusterID(stop) + go g.watchClusterID(stop) } // LoadBalancer returns an implementation of LoadBalancer for Google Compute Engine. -func (gce *GCECloud) LoadBalancer() (cloudprovider.LoadBalancer, bool) { - return gce, true +func (g *Cloud) LoadBalancer() (cloudprovider.LoadBalancer, bool) { + return g, true } // Instances returns an implementation of Instances for Google Compute Engine. -func (gce *GCECloud) Instances() (cloudprovider.Instances, bool) { - return gce, true +func (g *Cloud) Instances() (cloudprovider.Instances, bool) { + return g, true } // Zones returns an implementation of Zones for Google Compute Engine. -func (gce *GCECloud) Zones() (cloudprovider.Zones, bool) { - return gce, true +func (g *Cloud) Zones() (cloudprovider.Zones, bool) { + return g, true } -func (gce *GCECloud) Clusters() (cloudprovider.Clusters, bool) { - return gce, true +// Clusters returns an implementation of Clusters for Google Compute Engine. +func (g *Cloud) Clusters() (cloudprovider.Clusters, bool) { + return g, true } // Routes returns an implementation of Routes for Google Compute Engine. -func (gce *GCECloud) Routes() (cloudprovider.Routes, bool) { - return gce, true +func (g *Cloud) Routes() (cloudprovider.Routes, bool) { + return g, true } // ProviderName returns the cloud provider ID. -func (gce *GCECloud) ProviderName() string { +func (g *Cloud) ProviderName() string { return ProviderName } // ProjectID returns the ProjectID corresponding to the project this cloud is in. -func (g *GCECloud) ProjectID() string { +func (g *Cloud) ProjectID() string { return g.projectID } // NetworkProjectID returns the ProjectID corresponding to the project this cluster's network is in. -func (g *GCECloud) NetworkProjectID() string { +func (g *Cloud) NetworkProjectID() string { return g.networkProjectID } // Region returns the region -func (gce *GCECloud) Region() string { - return gce.region +func (g *Cloud) Region() string { + return g.region } // OnXPN returns true if the cluster is running on a cross project network (XPN) -func (gce *GCECloud) OnXPN() bool { - return gce.onXPN +func (g *Cloud) OnXPN() bool { + return g.onXPN } // NetworkURL returns the network url -func (gce *GCECloud) NetworkURL() string { - return gce.networkURL +func (g *Cloud) NetworkURL() string { + return g.networkURL } // SubnetworkURL returns the subnetwork url -func (gce *GCECloud) SubnetworkURL() string { - return gce.subnetworkURL +func (g *Cloud) SubnetworkURL() string { + return g.subnetworkURL } -func (gce *GCECloud) IsLegacyNetwork() bool { - return gce.isLegacyNetwork +// IsLegacyNetwork returns true if the cluster is still running a legacy network configuration. +func (g *Cloud) IsLegacyNetwork() bool { + return g.isLegacyNetwork } -func (gce *GCECloud) SetInformers(informerFactory informers.SharedInformerFactory) { - glog.Infof("Setting up informers for GCECloud") +// SetInformers sets up the zone handlers we need watching for node changes. +func (g *Cloud) SetInformers(informerFactory informers.SharedInformerFactory) { + glog.Infof("Setting up informers for Cloud") nodeInformer := informerFactory.Core().V1().Nodes().Informer() nodeInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { node := obj.(*v1.Node) - gce.updateNodeZones(nil, node) + g.updateNodeZones(nil, node) }, UpdateFunc: func(prev, obj interface{}) { prevNode := prev.(*v1.Node) @@ -701,7 +706,7 @@ func (gce *GCECloud) SetInformers(informerFactory informers.SharedInformerFactor prevNode.Labels[kubeletapis.LabelZoneFailureDomain] { return } - gce.updateNodeZones(prevNode, newNode) + g.updateNodeZones(prevNode, newNode) }, DeleteFunc: func(obj interface{}) { node, isNode := obj.(*v1.Node) @@ -719,37 +724,37 @@ func (gce *GCECloud) SetInformers(informerFactory informers.SharedInformerFactor return } } - gce.updateNodeZones(node, nil) + g.updateNodeZones(node, nil) }, }) - gce.nodeInformerSynced = nodeInformer.HasSynced + g.nodeInformerSynced = nodeInformer.HasSynced } -func (gce *GCECloud) updateNodeZones(prevNode, newNode *v1.Node) { - gce.nodeZonesLock.Lock() - defer gce.nodeZonesLock.Unlock() +func (g *Cloud) updateNodeZones(prevNode, newNode *v1.Node) { + g.nodeZonesLock.Lock() + defer g.nodeZonesLock.Unlock() if prevNode != nil { prevZone, ok := prevNode.ObjectMeta.Labels[kubeletapis.LabelZoneFailureDomain] if ok { - gce.nodeZones[prevZone].Delete(prevNode.ObjectMeta.Name) - if gce.nodeZones[prevZone].Len() == 0 { - gce.nodeZones[prevZone] = nil + g.nodeZones[prevZone].Delete(prevNode.ObjectMeta.Name) + if g.nodeZones[prevZone].Len() == 0 { + g.nodeZones[prevZone] = nil } } } if newNode != nil { newZone, ok := newNode.ObjectMeta.Labels[kubeletapis.LabelZoneFailureDomain] if ok { - if gce.nodeZones[newZone] == nil { - gce.nodeZones[newZone] = sets.NewString() + if g.nodeZones[newZone] == nil { + g.nodeZones[newZone] = sets.NewString() } - gce.nodeZones[newZone].Insert(newNode.ObjectMeta.Name) + g.nodeZones[newZone].Insert(newNode.ObjectMeta.Name) } } } // HasClusterID returns true if the cluster has a clusterID -func (gce *GCECloud) HasClusterID() bool { +func (g *Cloud) HasClusterID() bool { return true } @@ -760,8 +765,8 @@ func isProjectNumber(idOrNumber string) bool { return err == nil } -// GCECloud implements cloudprovider.Interface. -var _ cloudprovider.Interface = (*GCECloud)(nil) +// Cloud implements cloudprovider.Interface. +var _ cloudprovider.Interface = (*Cloud)(nil) func gceNetworkURL(apiEndpoint, project, network string) string { if apiEndpoint == "" { @@ -894,19 +899,19 @@ func newOauthClient(tokenSource oauth2.TokenSource) (*http.Client, error) { } func (manager *gceServiceManager) getProjectsAPIEndpoint() string { - projectsApiEndpoint := gceComputeAPIEndpoint + "projects/" + projectsAPIEndpoint := gceComputeAPIEndpoint + "projects/" if manager.gce.service != nil { - projectsApiEndpoint = manager.gce.service.BasePath + projectsAPIEndpoint = manager.gce.service.BasePath } - return projectsApiEndpoint + return projectsAPIEndpoint } func (manager *gceServiceManager) getProjectsAPIEndpointBeta() string { - projectsApiEndpoint := gceComputeAPIEndpointBeta + "projects/" + projectsAPIEndpoint := gceComputeAPIEndpointBeta + "projects/" if manager.gce.service != nil { - projectsApiEndpoint = manager.gce.serviceBeta.BasePath + projectsAPIEndpoint = manager.gce.serviceBeta.BasePath } - return projectsApiEndpoint + return projectsAPIEndpoint } diff --git a/pkg/cloudprovider/providers/gce/gce_addresses.go b/pkg/cloudprovider/providers/gce/gce_addresses.go index 2bf3e20b051..b595ae62825 100644 --- a/pkg/cloudprovider/providers/gce/gce_addresses.go +++ b/pkg/cloudprovider/providers/gce/gce_addresses.go @@ -42,106 +42,106 @@ func newAddressMetricContextWithVersion(request, region, version string) *metric // Caller is allocated a random IP if they do not specify an ipAddress. If an // ipAddress is specified, it must belong to the current project, eg: an // ephemeral IP associated with a global forwarding rule. -func (gce *GCECloud) ReserveGlobalAddress(addr *compute.Address) error { +func (g *Cloud) ReserveGlobalAddress(addr *compute.Address) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("reserve", "") - return mc.Observe(gce.c.GlobalAddresses().Insert(ctx, meta.GlobalKey(addr.Name), addr)) + return mc.Observe(g.c.GlobalAddresses().Insert(ctx, meta.GlobalKey(addr.Name), addr)) } // DeleteGlobalAddress deletes a global address by name. -func (gce *GCECloud) DeleteGlobalAddress(name string) error { +func (g *Cloud) DeleteGlobalAddress(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("delete", "") - return mc.Observe(gce.c.GlobalAddresses().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.GlobalAddresses().Delete(ctx, meta.GlobalKey(name))) } // GetGlobalAddress returns the global address by name. -func (gce *GCECloud) GetGlobalAddress(name string) (*compute.Address, error) { +func (g *Cloud) GetGlobalAddress(name string) (*compute.Address, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("get", "") - v, err := gce.c.GlobalAddresses().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.GlobalAddresses().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // ReserveRegionAddress creates a region address -func (gce *GCECloud) ReserveRegionAddress(addr *compute.Address, region string) error { +func (g *Cloud) ReserveRegionAddress(addr *compute.Address, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("reserve", region) - return mc.Observe(gce.c.Addresses().Insert(ctx, meta.RegionalKey(addr.Name, region), addr)) + return mc.Observe(g.c.Addresses().Insert(ctx, meta.RegionalKey(addr.Name, region), addr)) } // ReserveAlphaRegionAddress creates an Alpha, regional address. -func (gce *GCECloud) ReserveAlphaRegionAddress(addr *computealpha.Address, region string) error { +func (g *Cloud) ReserveAlphaRegionAddress(addr *computealpha.Address, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("reserve", region) - return mc.Observe(gce.c.AlphaAddresses().Insert(ctx, meta.RegionalKey(addr.Name, region), addr)) + return mc.Observe(g.c.AlphaAddresses().Insert(ctx, meta.RegionalKey(addr.Name, region), addr)) } // ReserveBetaRegionAddress creates a beta region address -func (gce *GCECloud) ReserveBetaRegionAddress(addr *computebeta.Address, region string) error { +func (g *Cloud) ReserveBetaRegionAddress(addr *computebeta.Address, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("reserve", region) - return mc.Observe(gce.c.BetaAddresses().Insert(ctx, meta.RegionalKey(addr.Name, region), addr)) + return mc.Observe(g.c.BetaAddresses().Insert(ctx, meta.RegionalKey(addr.Name, region), addr)) } // DeleteRegionAddress deletes a region address by name. -func (gce *GCECloud) DeleteRegionAddress(name, region string) error { +func (g *Cloud) DeleteRegionAddress(name, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("delete", region) - return mc.Observe(gce.c.Addresses().Delete(ctx, meta.RegionalKey(name, region))) + return mc.Observe(g.c.Addresses().Delete(ctx, meta.RegionalKey(name, region))) } // GetRegionAddress returns the region address by name -func (gce *GCECloud) GetRegionAddress(name, region string) (*compute.Address, error) { +func (g *Cloud) GetRegionAddress(name, region string) (*compute.Address, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("get", region) - v, err := gce.c.Addresses().Get(ctx, meta.RegionalKey(name, region)) + v, err := g.c.Addresses().Get(ctx, meta.RegionalKey(name, region)) return v, mc.Observe(err) } // GetAlphaRegionAddress returns the Alpha, regional address by name. -func (gce *GCECloud) GetAlphaRegionAddress(name, region string) (*computealpha.Address, error) { +func (g *Cloud) GetAlphaRegionAddress(name, region string) (*computealpha.Address, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("get", region) - v, err := gce.c.AlphaAddresses().Get(ctx, meta.RegionalKey(name, region)) + v, err := g.c.AlphaAddresses().Get(ctx, meta.RegionalKey(name, region)) return v, mc.Observe(err) } // GetBetaRegionAddress returns the beta region address by name -func (gce *GCECloud) GetBetaRegionAddress(name, region string) (*computebeta.Address, error) { +func (g *Cloud) GetBetaRegionAddress(name, region string) (*computebeta.Address, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("get", region) - v, err := gce.c.BetaAddresses().Get(ctx, meta.RegionalKey(name, region)) + v, err := g.c.BetaAddresses().Get(ctx, meta.RegionalKey(name, region)) return v, mc.Observe(err) } // GetRegionAddressByIP returns the regional address matching the given IP address. -func (gce *GCECloud) GetRegionAddressByIP(region, ipAddress string) (*compute.Address, error) { +func (g *Cloud) GetRegionAddressByIP(region, ipAddress string) (*compute.Address, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("list", region) - addrs, err := gce.c.Addresses().List(ctx, region, filter.Regexp("address", ipAddress)) + addrs, err := g.c.Addresses().List(ctx, region, filter.Regexp("address", ipAddress)) mc.Observe(err) if err != nil { @@ -160,12 +160,12 @@ func (gce *GCECloud) GetRegionAddressByIP(region, ipAddress string) (*compute.Ad } // GetBetaRegionAddressByIP returns the beta regional address matching the given IP address. -func (gce *GCECloud) GetBetaRegionAddressByIP(region, ipAddress string) (*computebeta.Address, error) { +func (g *Cloud) GetBetaRegionAddressByIP(region, ipAddress string) (*computebeta.Address, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newAddressMetricContext("list", region) - addrs, err := gce.c.BetaAddresses().List(ctx, region, filter.Regexp("address", ipAddress)) + addrs, err := g.c.BetaAddresses().List(ctx, region, filter.Regexp("address", ipAddress)) mc.Observe(err) if err != nil { @@ -184,11 +184,11 @@ func (gce *GCECloud) GetBetaRegionAddressByIP(region, ipAddress string) (*comput } // TODO(#51665): retire this function once Network Tiers becomes Beta in GCP. -func (gce *GCECloud) getNetworkTierFromAddress(name, region string) (string, error) { - if !gce.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) { +func (g *Cloud) getNetworkTierFromAddress(name, region string) (string, error) { + if !g.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) { return cloud.NetworkTierDefault.ToGCEValue(), nil } - addr, err := gce.GetAlphaRegionAddress(name, region) + addr, err := g.GetAlphaRegionAddress(name, region) if err != nil { return handleAlphaNetworkTierGetError(err) } diff --git a/pkg/cloudprovider/providers/gce/gce_alpha.go b/pkg/cloudprovider/providers/gce/gce_alpha.go index 0ce698aa98e..598f1e336d3 100644 --- a/pkg/cloudprovider/providers/gce/gce_alpha.go +++ b/pkg/cloudprovider/providers/gce/gce_alpha.go @@ -21,21 +21,24 @@ import ( ) const ( - // alpha: v1.8 (for Services) + // AlphaFeatureNetworkTiers allows Services backed by a GCP load balancer to choose + // what network tier to use. Currently supports "Standard" and "Premium" (default). // - // Allows Services backed by a GCP load balancer to choose what network - // tier to use. Currently supports "Standard" and "Premium" (default). + // alpha: v1.8 (for Services) AlphaFeatureNetworkTiers = "NetworkTiers" ) +// AlphaFeatureGate contains a mapping of alpha features to whether they are enabled type AlphaFeatureGate struct { features map[string]bool } +// Enabled returns true if the provided alpha feature is enabled func (af *AlphaFeatureGate) Enabled(key string) bool { return af.features[key] } +// NewAlphaFeatureGate marks the provided alpha features as enabled func NewAlphaFeatureGate(features []string) *AlphaFeatureGate { featureMap := make(map[string]bool) for _, name := range features { @@ -44,9 +47,9 @@ func NewAlphaFeatureGate(features []string) *AlphaFeatureGate { return &AlphaFeatureGate{featureMap} } -func (gce *GCECloud) alphaFeatureEnabled(feature string) error { - if !gce.AlphaFeatureGate.Enabled(feature) { - return fmt.Errorf("alpha feature %q is not enabled.", feature) +func (g *Cloud) alphaFeatureEnabled(feature string) error { + if !g.AlphaFeatureGate.Enabled(feature) { + return fmt.Errorf("alpha feature %q is not enabled", feature) } return nil } diff --git a/pkg/cloudprovider/providers/gce/gce_annotations.go b/pkg/cloudprovider/providers/gce/gce_annotations.go index ccc0f444118..4f3281c3e47 100644 --- a/pkg/cloudprovider/providers/gce/gce_annotations.go +++ b/pkg/cloudprovider/providers/gce/gce_annotations.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud" ) +// LoadBalancerType defines a specific type for holding load balancer types (eg. Internal) type LoadBalancerType string const ( @@ -33,23 +34,30 @@ const ( // Currently, only "internal" is supported. ServiceAnnotationLoadBalancerType = "cloud.google.com/load-balancer-type" + // LBTypeInternal is the constant for the official internal type. LBTypeInternal LoadBalancerType = "Internal" + // Deprecating the lowercase spelling of Internal. deprecatedTypeInternalLowerCase LoadBalancerType = "internal" - // ServiceAnnotationInternalBackendShare is annotated on a service with "true" when users + // ServiceAnnotationILBBackendShare is annotated on a service with "true" when users // want to share GCP Backend Services for a set of internal load balancers. // ALPHA feature - this may be removed in a future release. ServiceAnnotationILBBackendShare = "alpha.cloud.google.com/load-balancer-backend-share" + // This annotation did not correctly specify "alpha", so both annotations will be checked. deprecatedServiceAnnotationILBBackendShare = "cloud.google.com/load-balancer-backend-share" // NetworkTierAnnotationKey is annotated on a Service object to indicate which // network tier a GCP LB should use. The valid values are "Standard" and // "Premium" (default). - NetworkTierAnnotationKey = "cloud.google.com/network-tier" + NetworkTierAnnotationKey = "cloud.google.com/network-tier" + + // NetworkTierAnnotationStandard is an annotation to indicate the Service is on the Standard network tier NetworkTierAnnotationStandard = cloud.NetworkTierStandard - NetworkTierAnnotationPremium = cloud.NetworkTierPremium + + // NetworkTierAnnotationPremium is an annotation to indicate the Service is on the Premium network tier + NetworkTierAnnotationPremium = cloud.NetworkTierPremium ) // GetLoadBalancerAnnotationType returns the type of GCP load balancer which should be assembled. diff --git a/pkg/cloudprovider/providers/gce/gce_backendservice.go b/pkg/cloudprovider/providers/gce/gce_backendservice.go index 23dc3bf1cb3..6560c912606 100644 --- a/pkg/cloudprovider/providers/gce/gce_backendservice.go +++ b/pkg/cloudprovider/providers/gce/gce_backendservice.go @@ -35,201 +35,201 @@ func newBackendServiceMetricContextWithVersion(request, region, version string) } // GetGlobalBackendService retrieves a backend by name. -func (gce *GCECloud) GetGlobalBackendService(name string) (*compute.BackendService, error) { +func (g *Cloud) GetGlobalBackendService(name string) (*compute.BackendService, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("get", "") - v, err := gce.c.BackendServices().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.BackendServices().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // GetBetaGlobalBackendService retrieves beta backend by name. -func (gce *GCECloud) GetBetaGlobalBackendService(name string) (*computebeta.BackendService, error) { +func (g *Cloud) GetBetaGlobalBackendService(name string) (*computebeta.BackendService, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContextWithVersion("get", "", computeBetaVersion) - v, err := gce.c.BetaBackendServices().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.BetaBackendServices().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // GetAlphaGlobalBackendService retrieves alpha backend by name. -func (gce *GCECloud) GetAlphaGlobalBackendService(name string) (*computealpha.BackendService, error) { +func (g *Cloud) GetAlphaGlobalBackendService(name string) (*computealpha.BackendService, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContextWithVersion("get", "", computeAlphaVersion) - v, err := gce.c.AlphaBackendServices().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.AlphaBackendServices().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // UpdateGlobalBackendService applies the given BackendService as an update to // an existing service. -func (gce *GCECloud) UpdateGlobalBackendService(bg *compute.BackendService) error { +func (g *Cloud) UpdateGlobalBackendService(bg *compute.BackendService) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("update", "") - return mc.Observe(gce.c.BackendServices().Update(ctx, meta.GlobalKey(bg.Name), bg)) + return mc.Observe(g.c.BackendServices().Update(ctx, meta.GlobalKey(bg.Name), bg)) } // UpdateBetaGlobalBackendService applies the given beta BackendService as an // update to an existing service. -func (gce *GCECloud) UpdateBetaGlobalBackendService(bg *computebeta.BackendService) error { +func (g *Cloud) UpdateBetaGlobalBackendService(bg *computebeta.BackendService) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContextWithVersion("update", "", computeBetaVersion) - return mc.Observe(gce.c.BetaBackendServices().Update(ctx, meta.GlobalKey(bg.Name), bg)) + return mc.Observe(g.c.BetaBackendServices().Update(ctx, meta.GlobalKey(bg.Name), bg)) } // UpdateAlphaGlobalBackendService applies the given alpha BackendService as an // update to an existing service. -func (gce *GCECloud) UpdateAlphaGlobalBackendService(bg *computealpha.BackendService) error { +func (g *Cloud) UpdateAlphaGlobalBackendService(bg *computealpha.BackendService) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContextWithVersion("update", "", computeAlphaVersion) - return mc.Observe(gce.c.AlphaBackendServices().Update(ctx, meta.GlobalKey(bg.Name), bg)) + return mc.Observe(g.c.AlphaBackendServices().Update(ctx, meta.GlobalKey(bg.Name), bg)) } // DeleteGlobalBackendService deletes the given BackendService by name. -func (gce *GCECloud) DeleteGlobalBackendService(name string) error { +func (g *Cloud) DeleteGlobalBackendService(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("delete", "") - return mc.Observe(gce.c.BackendServices().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.BackendServices().Delete(ctx, meta.GlobalKey(name))) } // CreateGlobalBackendService creates the given BackendService. -func (gce *GCECloud) CreateGlobalBackendService(bg *compute.BackendService) error { +func (g *Cloud) CreateGlobalBackendService(bg *compute.BackendService) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("create", "") - return mc.Observe(gce.c.BackendServices().Insert(ctx, meta.GlobalKey(bg.Name), bg)) + return mc.Observe(g.c.BackendServices().Insert(ctx, meta.GlobalKey(bg.Name), bg)) } // CreateBetaGlobalBackendService creates the given beta BackendService. -func (gce *GCECloud) CreateBetaGlobalBackendService(bg *computebeta.BackendService) error { +func (g *Cloud) CreateBetaGlobalBackendService(bg *computebeta.BackendService) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContextWithVersion("create", "", computeBetaVersion) - return mc.Observe(gce.c.BetaBackendServices().Insert(ctx, meta.GlobalKey(bg.Name), bg)) + return mc.Observe(g.c.BetaBackendServices().Insert(ctx, meta.GlobalKey(bg.Name), bg)) } // CreateAlphaGlobalBackendService creates the given alpha BackendService. -func (gce *GCECloud) CreateAlphaGlobalBackendService(bg *computealpha.BackendService) error { +func (g *Cloud) CreateAlphaGlobalBackendService(bg *computealpha.BackendService) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContextWithVersion("create", "", computeAlphaVersion) - return mc.Observe(gce.c.AlphaBackendServices().Insert(ctx, meta.GlobalKey(bg.Name), bg)) + return mc.Observe(g.c.AlphaBackendServices().Insert(ctx, meta.GlobalKey(bg.Name), bg)) } // ListGlobalBackendServices lists all backend services in the project. -func (gce *GCECloud) ListGlobalBackendServices() ([]*compute.BackendService, error) { +func (g *Cloud) ListGlobalBackendServices() ([]*compute.BackendService, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("list", "") - v, err := gce.c.BackendServices().List(ctx, filter.None) + v, err := g.c.BackendServices().List(ctx, filter.None) return v, mc.Observe(err) } // GetGlobalBackendServiceHealth returns the health of the BackendService // identified by the given name, in the given instanceGroup. The // instanceGroupLink is the fully qualified self link of an instance group. -func (gce *GCECloud) GetGlobalBackendServiceHealth(name string, instanceGroupLink string) (*compute.BackendServiceGroupHealth, error) { +func (g *Cloud) GetGlobalBackendServiceHealth(name string, instanceGroupLink string) (*compute.BackendServiceGroupHealth, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("get_health", "") groupRef := &compute.ResourceGroupReference{Group: instanceGroupLink} - v, err := gce.c.BackendServices().GetHealth(ctx, meta.GlobalKey(name), groupRef) + v, err := g.c.BackendServices().GetHealth(ctx, meta.GlobalKey(name), groupRef) return v, mc.Observe(err) } // GetRegionBackendService retrieves a backend by name. -func (gce *GCECloud) GetRegionBackendService(name, region string) (*compute.BackendService, error) { +func (g *Cloud) GetRegionBackendService(name, region string) (*compute.BackendService, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("get", region) - v, err := gce.c.RegionBackendServices().Get(ctx, meta.RegionalKey(name, region)) + v, err := g.c.RegionBackendServices().Get(ctx, meta.RegionalKey(name, region)) return v, mc.Observe(err) } // UpdateRegionBackendService applies the given BackendService as an update to // an existing service. -func (gce *GCECloud) UpdateRegionBackendService(bg *compute.BackendService, region string) error { +func (g *Cloud) UpdateRegionBackendService(bg *compute.BackendService, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("update", region) - return mc.Observe(gce.c.RegionBackendServices().Update(ctx, meta.RegionalKey(bg.Name, region), bg)) + return mc.Observe(g.c.RegionBackendServices().Update(ctx, meta.RegionalKey(bg.Name, region), bg)) } // DeleteRegionBackendService deletes the given BackendService by name. -func (gce *GCECloud) DeleteRegionBackendService(name, region string) error { +func (g *Cloud) DeleteRegionBackendService(name, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("delete", region) - return mc.Observe(gce.c.RegionBackendServices().Delete(ctx, meta.RegionalKey(name, region))) + return mc.Observe(g.c.RegionBackendServices().Delete(ctx, meta.RegionalKey(name, region))) } // CreateRegionBackendService creates the given BackendService. -func (gce *GCECloud) CreateRegionBackendService(bg *compute.BackendService, region string) error { +func (g *Cloud) CreateRegionBackendService(bg *compute.BackendService, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("create", region) - return mc.Observe(gce.c.RegionBackendServices().Insert(ctx, meta.RegionalKey(bg.Name, region), bg)) + return mc.Observe(g.c.RegionBackendServices().Insert(ctx, meta.RegionalKey(bg.Name, region), bg)) } // ListRegionBackendServices lists all backend services in the project. -func (gce *GCECloud) ListRegionBackendServices(region string) ([]*compute.BackendService, error) { +func (g *Cloud) ListRegionBackendServices(region string) ([]*compute.BackendService, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("list", region) - v, err := gce.c.RegionBackendServices().List(ctx, region, filter.None) + v, err := g.c.RegionBackendServices().List(ctx, region, filter.None) return v, mc.Observe(err) } // GetRegionalBackendServiceHealth returns the health of the BackendService // identified by the given name, in the given instanceGroup. The // instanceGroupLink is the fully qualified self link of an instance group. -func (gce *GCECloud) GetRegionalBackendServiceHealth(name, region string, instanceGroupLink string) (*compute.BackendServiceGroupHealth, error) { +func (g *Cloud) GetRegionalBackendServiceHealth(name, region string, instanceGroupLink string) (*compute.BackendServiceGroupHealth, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContext("get_health", region) ref := &compute.ResourceGroupReference{Group: instanceGroupLink} - v, err := gce.c.RegionBackendServices().GetHealth(ctx, meta.RegionalKey(name, region), ref) + v, err := g.c.RegionBackendServices().GetHealth(ctx, meta.RegionalKey(name, region), ref) return v, mc.Observe(err) } // SetSecurityPolicyForBetaGlobalBackendService sets the given // SecurityPolicyReference for the BackendService identified by the given name. -func (gce *GCECloud) SetSecurityPolicyForBetaGlobalBackendService(backendServiceName string, securityPolicyReference *computebeta.SecurityPolicyReference) error { +func (g *Cloud) SetSecurityPolicyForBetaGlobalBackendService(backendServiceName string, securityPolicyReference *computebeta.SecurityPolicyReference) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContextWithVersion("set_security_policy", "", computeBetaVersion) - return mc.Observe(gce.c.BetaBackendServices().SetSecurityPolicy(ctx, meta.GlobalKey(backendServiceName), securityPolicyReference)) + return mc.Observe(g.c.BetaBackendServices().SetSecurityPolicy(ctx, meta.GlobalKey(backendServiceName), securityPolicyReference)) } // SetSecurityPolicyForAlphaGlobalBackendService sets the given // SecurityPolicyReference for the BackendService identified by the given name. -func (gce *GCECloud) SetSecurityPolicyForAlphaGlobalBackendService(backendServiceName string, securityPolicyReference *computealpha.SecurityPolicyReference) error { +func (g *Cloud) SetSecurityPolicyForAlphaGlobalBackendService(backendServiceName string, securityPolicyReference *computealpha.SecurityPolicyReference) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newBackendServiceMetricContextWithVersion("set_security_policy", "", computeAlphaVersion) - return mc.Observe(gce.c.AlphaBackendServices().SetSecurityPolicy(ctx, meta.GlobalKey(backendServiceName), securityPolicyReference)) + return mc.Observe(g.c.AlphaBackendServices().SetSecurityPolicy(ctx, meta.GlobalKey(backendServiceName), securityPolicyReference)) } diff --git a/pkg/cloudprovider/providers/gce/gce_cert.go b/pkg/cloudprovider/providers/gce/gce_cert.go index 3b6614f816f..5153f067e8a 100644 --- a/pkg/cloudprovider/providers/gce/gce_cert.go +++ b/pkg/cloudprovider/providers/gce/gce_cert.go @@ -29,43 +29,43 @@ func newCertMetricContext(request string) *metricContext { } // GetSslCertificate returns the SslCertificate by name. -func (gce *GCECloud) GetSslCertificate(name string) (*compute.SslCertificate, error) { +func (g *Cloud) GetSslCertificate(name string) (*compute.SslCertificate, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newCertMetricContext("get") - v, err := gce.c.SslCertificates().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.SslCertificates().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // CreateSslCertificate creates and returns a SslCertificate. -func (gce *GCECloud) CreateSslCertificate(sslCerts *compute.SslCertificate) (*compute.SslCertificate, error) { +func (g *Cloud) CreateSslCertificate(sslCerts *compute.SslCertificate) (*compute.SslCertificate, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newCertMetricContext("create") - err := gce.c.SslCertificates().Insert(ctx, meta.GlobalKey(sslCerts.Name), sslCerts) + err := g.c.SslCertificates().Insert(ctx, meta.GlobalKey(sslCerts.Name), sslCerts) if err != nil { return nil, mc.Observe(err) } - return gce.GetSslCertificate(sslCerts.Name) + return g.GetSslCertificate(sslCerts.Name) } // DeleteSslCertificate deletes the SslCertificate by name. -func (gce *GCECloud) DeleteSslCertificate(name string) error { +func (g *Cloud) DeleteSslCertificate(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newCertMetricContext("delete") - return mc.Observe(gce.c.SslCertificates().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.SslCertificates().Delete(ctx, meta.GlobalKey(name))) } // ListSslCertificates lists all SslCertificates in the project. -func (gce *GCECloud) ListSslCertificates() ([]*compute.SslCertificate, error) { +func (g *Cloud) ListSslCertificates() ([]*compute.SslCertificate, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newCertMetricContext("list") - v, err := gce.c.SslCertificates().List(ctx, filter.None) + v, err := g.c.SslCertificates().List(ctx, filter.None) return v, mc.Observe(err) } diff --git a/pkg/cloudprovider/providers/gce/gce_clusterid.go b/pkg/cloudprovider/providers/gce/gce_clusterid.go index 80e54bd1723..23dd6cf5e21 100644 --- a/pkg/cloudprovider/providers/gce/gce_clusterid.go +++ b/pkg/cloudprovider/providers/gce/gce_clusterid.go @@ -36,19 +36,27 @@ import ( ) const ( - // Key used to persist UIDs to configmaps. + // UIDConfigMapName is the Key used to persist UIDs to configmaps. UIDConfigMapName = "ingress-uid" - // Namespace which contains the above config map + + // UIDNamespace is the namespace which contains the above config map UIDNamespace = metav1.NamespaceSystem - // Data keys for the specific ids - UIDCluster = "uid" - UIDProvider = "provider-uid" + + // UIDCluster is the data keys for looking up the clusters UID + UIDCluster = "uid" + + // UIDProvider is the data keys for looking up the providers UID + UIDProvider = "provider-uid" + + // UIDLengthBytes is the length of a UID UIDLengthBytes = 8 + // Frequency of the updateFunc event handler being called // This does not actually query the apiserver for current state - the local cache value is used. updateFuncFrequency = 10 * time.Minute ) +// ClusterID is the struct for maintaining information about this cluster's ID type ClusterID struct { idLock sync.RWMutex client clientset.Interface @@ -59,10 +67,10 @@ type ClusterID struct { } // Continually watches for changes to the cluster id config map -func (gce *GCECloud) watchClusterID(stop <-chan struct{}) { - gce.ClusterID = ClusterID{ +func (g *Cloud) watchClusterID(stop <-chan struct{}) { + g.ClusterID = ClusterID{ cfgMapKey: fmt.Sprintf("%v/%v", UIDNamespace, UIDConfigMapName), - client: gce.client, + client: g.client, } mapEventHandler := cache.ResourceEventHandlerFuncs{ @@ -78,7 +86,7 @@ func (gce *GCECloud) watchClusterID(stop <-chan struct{}) { } glog.V(4).Infof("Observed new configmap for clusteriD: %v, %v; setting local values", m.Name, m.Data) - gce.ClusterID.update(m) + g.ClusterID.update(m) }, UpdateFunc: func(old, cur interface{}) { m, ok := cur.(*v1.ConfigMap) @@ -97,13 +105,13 @@ func (gce *GCECloud) watchClusterID(stop <-chan struct{}) { } glog.V(4).Infof("Observed updated configmap for clusteriD %v, %v; setting local values", m.Name, m.Data) - gce.ClusterID.update(m) + g.ClusterID.update(m) }, } - listerWatcher := cache.NewListWatchFromClient(gce.ClusterID.client.CoreV1().RESTClient(), "configmaps", UIDNamespace, fields.Everything()) + listerWatcher := cache.NewListWatchFromClient(g.ClusterID.client.CoreV1().RESTClient(), "configmaps", UIDNamespace, fields.Everything()) var controller cache.Controller - gce.ClusterID.store, controller = cache.NewInformer(newSingleObjectListerWatcher(listerWatcher, UIDConfigMapName), &v1.ConfigMap{}, updateFuncFrequency, mapEventHandler) + g.ClusterID.store, controller = cache.NewInformer(newSingleObjectListerWatcher(listerWatcher, UIDConfigMapName), &v1.ConfigMap{}, updateFuncFrequency, mapEventHandler) controller.Run(stop) } @@ -131,9 +139,9 @@ func (ci *ClusterID) GetID() (string, error) { return *ci.clusterID, nil } -// GetFederationId returns the id which could represent the entire Federation +// GetFederationID returns the id which could represent the entire Federation // or just the cluster if not federated. -func (ci *ClusterID) GetFederationId() (string, bool, error) { +func (ci *ClusterID) GetFederationID() (string, bool, error) { if err := ci.getOrInitialize(); err != nil { return "", false, err } @@ -141,7 +149,7 @@ func (ci *ClusterID) GetFederationId() (string, bool, error) { ci.idLock.RLock() defer ci.idLock.RUnlock() if ci.clusterID == nil { - return "", false, errors.New("Could not retrieve cluster id") + return "", false, errors.New("could not retrieve cluster id") } // If provider ID is not set, return false @@ -157,7 +165,7 @@ func (ci *ClusterID) GetFederationId() (string, bool, error) { // before the watch has begun. func (ci *ClusterID) getOrInitialize() error { if ci.store == nil { - return errors.New("GCECloud.ClusterID is not ready. Call Initialize() before using.") + return errors.New("Cloud.ClusterID is not ready. Call Initialize() before using") } if ci.clusterID != nil { @@ -172,12 +180,12 @@ func (ci *ClusterID) getOrInitialize() error { } // The configmap does not exist - let's try creating one. - newId, err := makeUID() + newID, err := makeUID() if err != nil { return err } - glog.V(4).Infof("Creating clusteriD: %v", newId) + glog.V(4).Infof("Creating clusteriD: %v", newID) cfg := &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: UIDConfigMapName, @@ -185,8 +193,8 @@ func (ci *ClusterID) getOrInitialize() error { }, } cfg.Data = map[string]string{ - UIDCluster: newId, - UIDProvider: newId, + UIDCluster: newID, + UIDProvider: newID, } if _, err := ci.client.CoreV1().ConfigMaps(UIDNamespace).Create(cfg); err != nil { @@ -194,7 +202,7 @@ func (ci *ClusterID) getOrInitialize() error { return err } - glog.V(2).Infof("Created a config map containing clusteriD: %v", newId) + glog.V(2).Infof("Created a config map containing clusteriD: %v", newID) ci.update(cfg) return nil } @@ -224,8 +232,8 @@ func (ci *ClusterID) update(m *v1.ConfigMap) { if clusterID, exists := m.Data[UIDCluster]; exists { ci.clusterID = &clusterID } - if provId, exists := m.Data[UIDProvider]; exists { - ci.providerID = &provId + if provID, exists := m.Data[UIDProvider]; exists { + ci.providerID = &provID } } diff --git a/pkg/cloudprovider/providers/gce/gce_clusters.go b/pkg/cloudprovider/providers/gce/gce_clusters.go index 63b4bbeb69d..53295000c66 100644 --- a/pkg/cloudprovider/providers/gce/gce_clusters.go +++ b/pkg/cloudprovider/providers/gce/gce_clusters.go @@ -18,22 +18,22 @@ package gce import ( "context" - "errors" "fmt" "github.com/golang/glog" - container "google.golang.org/api/container/v1" + "google.golang.org/api/container/v1" ) func newClustersMetricContext(request, zone string) *metricContext { return newGenericMetricContext("clusters", request, unusedMetricLabel, zone, computeV1Version) } -func (gce *GCECloud) ListClusters(ctx context.Context) ([]string, error) { +// ListClusters will return a list of cluster names for the associated project +func (g *Cloud) ListClusters(ctx context.Context) ([]string, error) { allClusters := []string{} - for _, zone := range gce.managedZones { - clusters, err := gce.listClustersInZone(zone) + for _, zone := range g.managedZones { + clusters, err := g.listClustersInZone(zone) if err != nil { return nil, err } @@ -44,36 +44,38 @@ func (gce *GCECloud) ListClusters(ctx context.Context) ([]string, error) { return allClusters, nil } -func (gce *GCECloud) GetManagedClusters(ctx context.Context) ([]*container.Cluster, error) { +// GetManagedClusters will return the cluster objects associated to this project +func (g *Cloud) GetManagedClusters(ctx context.Context) ([]*container.Cluster, error) { managedClusters := []*container.Cluster{} - if gce.regional { + if g.regional { var err error - managedClusters, err = gce.getClustersInLocation(gce.region) + managedClusters, err = g.getClustersInLocation(g.region) if err != nil { return nil, err } - } else if len(gce.managedZones) >= 1 { - for _, zone := range gce.managedZones { - clusters, err := gce.getClustersInLocation(zone) + } else if len(g.managedZones) >= 1 { + for _, zone := range g.managedZones { + clusters, err := g.getClustersInLocation(zone) if err != nil { return nil, err } managedClusters = append(managedClusters, clusters...) } } else { - return nil, errors.New(fmt.Sprintf("no zones associated with this cluster(%s)", gce.ProjectID())) + return nil, fmt.Errorf("no zones associated with this cluster(%s)", g.ProjectID()) } return managedClusters, nil } -func (gce *GCECloud) Master(ctx context.Context, clusterName string) (string, error) { +// Master returned the dns address of the master +func (g *Cloud) Master(ctx context.Context, clusterName string) (string, error) { return "k8s-" + clusterName + "-master.internal", nil } -func (gce *GCECloud) listClustersInZone(zone string) ([]string, error) { - clusters, err := gce.getClustersInLocation(zone) +func (g *Cloud) listClustersInZone(zone string) ([]string, error) { + clusters, err := g.getClustersInLocation(zone) if err != nil { return nil, err } @@ -85,12 +87,12 @@ func (gce *GCECloud) listClustersInZone(zone string) ([]string, error) { return result, nil } -func (gce *GCECloud) getClustersInLocation(zoneOrRegion string) ([]*container.Cluster, error) { +func (g *Cloud) getClustersInLocation(zoneOrRegion string) ([]*container.Cluster, error) { // TODO: Issue/68913 migrate metric to list_location instead of list_zone. mc := newClustersMetricContext("list_zone", zoneOrRegion) // TODO: use PageToken to list all not just the first 500 - location := getLocationName(gce.projectID, zoneOrRegion) - list, err := gce.containerService.Projects.Locations.Clusters.List(location).Do() + location := getLocationName(g.projectID, zoneOrRegion) + list, err := g.containerService.Projects.Locations.Clusters.List(location).Do() if err != nil { return nil, mc.Observe(err) } diff --git a/pkg/cloudprovider/providers/gce/gce_disks.go b/pkg/cloudprovider/providers/gce/gce_disks.go index d7c31603ee4..8f8c47c7434 100644 --- a/pkg/cloudprovider/providers/gce/gce_disks.go +++ b/pkg/cloudprovider/providers/gce/gce_disks.go @@ -43,10 +43,14 @@ import ( "k8s.io/kubernetes/pkg/features" ) +// DiskType defines a specific type for holding disk types (eg. pd-ssd) type DiskType string const ( - DiskTypeSSD = "pd-ssd" + // DiskTypeSSD the type for persistent SSD storage + DiskTypeSSD = "pd-ssd" + + // DiskTypeStandard the type for standard persistent storage DiskTypeStandard = "pd-standard" diskTypeDefault = DiskTypeStandard @@ -85,7 +89,7 @@ type diskServiceManager interface { // Attach a persistent disk on GCE with the given disk spec to the specified instance. AttachDiskOnCloudProvider( - disk *GCEDisk, + disk *Disk, readWrite string, instanceZone string, instanceName string) error @@ -96,18 +100,18 @@ type diskServiceManager interface { instanceName string, devicePath string) error - ResizeDiskOnCloudProvider(disk *GCEDisk, sizeGb int64, zone string) error - RegionalResizeDiskOnCloudProvider(disk *GCEDisk, sizeGb int64) error + ResizeDiskOnCloudProvider(disk *Disk, sizeGb int64, zone string) error + RegionalResizeDiskOnCloudProvider(disk *Disk, sizeGb int64) error // Gets the persistent disk from GCE with the given diskName. - GetDiskFromCloudProvider(zone string, diskName string) (*GCEDisk, error) + GetDiskFromCloudProvider(zone string, diskName string) (*Disk, error) // Gets the regional persistent disk from GCE with the given diskName. - GetRegionalDiskFromCloudProvider(diskName string) (*GCEDisk, error) + GetRegionalDiskFromCloudProvider(diskName string) (*Disk, error) } type gceServiceManager struct { - gce *GCECloud + gce *Cloud } var _ diskServiceManager = &gceServiceManager{} @@ -172,7 +176,7 @@ func (manager *gceServiceManager) CreateRegionalDiskOnCloudProvider( } func (manager *gceServiceManager) AttachDiskOnCloudProvider( - disk *GCEDisk, + disk *Disk, readWrite string, instanceZone string, instanceName string) error { @@ -205,13 +209,13 @@ func (manager *gceServiceManager) DetachDiskOnCloudProvider( func (manager *gceServiceManager) GetDiskFromCloudProvider( zone string, - diskName string) (*GCEDisk, error) { + diskName string) (*Disk, error) { if zone == "" { - return nil, fmt.Errorf("Can not fetch disk %q. Zone is empty.", diskName) + return nil, fmt.Errorf("can not fetch disk %q, zone is empty", diskName) } if diskName == "" { - return nil, fmt.Errorf("Can not fetch disk. Zone is specified (%q). But disk name is empty.", zone) + return nil, fmt.Errorf("can not fetch disk, zone is specified (%q), but disk name is empty", zone) } ctx, cancel := cloud.ContextWithCallTimeout() @@ -231,7 +235,7 @@ func (manager *gceServiceManager) GetDiskFromCloudProvider( return nil, fmt.Errorf("failed to extract region from zone for %q/%q err=%v", zone, diskName, err) } - return &GCEDisk{ + return &Disk{ ZoneInfo: zoneInfo, Region: region, Name: diskStable.Name, @@ -242,7 +246,7 @@ func (manager *gceServiceManager) GetDiskFromCloudProvider( } func (manager *gceServiceManager) GetRegionalDiskFromCloudProvider( - diskName string) (*GCEDisk, error) { + diskName string) (*Disk, error) { if !utilfeature.DefaultFeatureGate.Enabled(features.GCERegionalPersistentDisk) { return nil, fmt.Errorf("the regional PD feature is only available with the %s Kubernetes feature gate enabled", features.GCERegionalPersistentDisk) @@ -260,7 +264,7 @@ func (manager *gceServiceManager) GetRegionalDiskFromCloudProvider( zones.Insert(lastComponent(zoneURI)) } - return &GCEDisk{ + return &Disk{ ZoneInfo: multiZone{zones}, Region: lastComponent(diskBeta.Region), Name: diskBeta.Name, @@ -290,7 +294,7 @@ func (manager *gceServiceManager) DeleteRegionalDiskOnCloudProvider( return manager.gce.c.BetaRegionDisks().Delete(ctx, meta.RegionalKey(diskName, manager.gce.region)) } -func (manager *gceServiceManager) getDiskSourceURI(disk *GCEDisk) (string, error) { +func (manager *gceServiceManager) getDiskSourceURI(disk *Disk) (string, error) { getProjectsAPIEndpoint := manager.getProjectsAPIEndpoint() switch zoneInfo := disk.ZoneInfo.(type) { @@ -409,7 +413,7 @@ func (manager *gceServiceManager) getRegionFromZone(zoneInfo zoneType) (string, return region, nil } -func (manager *gceServiceManager) ResizeDiskOnCloudProvider(disk *GCEDisk, sizeGb int64, zone string) error { +func (manager *gceServiceManager) ResizeDiskOnCloudProvider(disk *Disk, sizeGb int64, zone string) error { resizeServiceRequest := &compute.DisksResizeRequest{ SizeGb: sizeGb, } @@ -419,7 +423,7 @@ func (manager *gceServiceManager) ResizeDiskOnCloudProvider(disk *GCEDisk, sizeG return manager.gce.c.Disks().Resize(ctx, meta.ZonalKey(disk.Name, zone), resizeServiceRequest) } -func (manager *gceServiceManager) RegionalResizeDiskOnCloudProvider(disk *GCEDisk, sizeGb int64) error { +func (manager *gceServiceManager) RegionalResizeDiskOnCloudProvider(disk *Disk, sizeGb int64) error { if !utilfeature.DefaultFeatureGate.Enabled(features.GCERegionalPersistentDisk) { return fmt.Errorf("the regional PD feature is only available with the %s Kubernetes feature gate enabled", features.GCERegionalPersistentDisk) } @@ -472,13 +476,14 @@ type Disks interface { GetAutoLabelsForPD(name string, zone string) (map[string]string, error) } -// GCECloud implements Disks. -var _ Disks = (*GCECloud)(nil) +// Cloud implements Disks. +var _ Disks = (*Cloud)(nil) -// GCECloud implements PVLabeler. -var _ cloudprovider.PVLabeler = (*GCECloud)(nil) +// Cloud implements PVLabeler. +var _ cloudprovider.PVLabeler = (*Cloud)(nil) -type GCEDisk struct { +// Disk holds all relevant data about an instance of GCE storage +type Disk struct { ZoneInfo zoneType Region string Name string @@ -510,7 +515,8 @@ func newDiskMetricContextRegional(request, region string) *metricContext { return newGenericMetricContext("disk", request, region, unusedMetricLabel, computeV1Version) } -func (gce *GCECloud) GetLabelsForVolume(ctx context.Context, pv *v1.PersistentVolume) (map[string]string, error) { +// GetLabelsForVolume retrieved the label info for the provided volume +func (g *Cloud) GetLabelsForVolume(ctx context.Context, pv *v1.PersistentVolume) (map[string]string, error) { // Ignore any volumes that are being provisioned if pv.Spec.GCEPersistentDisk.PDName == volume.ProvisionedVolumeName { return nil, nil @@ -519,7 +525,7 @@ func (gce *GCECloud) GetLabelsForVolume(ctx context.Context, pv *v1.PersistentVo // If the zone is already labeled, honor the hint zone := pv.Labels[kubeletapis.LabelZoneFailureDomain] - labels, err := gce.GetAutoLabelsForPD(pv.Spec.GCEPersistentDisk.PDName, zone) + labels, err := g.GetAutoLabelsForPD(pv.Spec.GCEPersistentDisk.PDName, zone) if err != nil { return nil, err } @@ -527,28 +533,30 @@ func (gce *GCECloud) GetLabelsForVolume(ctx context.Context, pv *v1.PersistentVo return labels, nil } -func (gce *GCECloud) AttachDisk(diskName string, nodeName types.NodeName, readOnly bool, regional bool) error { +// AttachDisk attaches given disk to the node with the specified NodeName. +// Current instance is used when instanceID is empty string. +func (g *Cloud) AttachDisk(diskName string, nodeName types.NodeName, readOnly bool, regional bool) error { instanceName := mapNodeNameToInstanceName(nodeName) - instance, err := gce.getInstanceByName(instanceName) + instance, err := g.getInstanceByName(instanceName) if err != nil { return fmt.Errorf("error getting instance %q", instanceName) } // Try fetching as regional PD - var disk *GCEDisk + var disk *Disk var mc *metricContext if regional && utilfeature.DefaultFeatureGate.Enabled(features.GCERegionalPersistentDisk) { - disk, err = gce.getRegionalDiskByName(diskName) + disk, err = g.getRegionalDiskByName(diskName) if err != nil { return err } - mc = newDiskMetricContextRegional("attach", gce.region) + mc = newDiskMetricContextRegional("attach", g.region) } else { - disk, err = gce.getDiskByName(diskName, instance.Zone) + disk, err = g.getDiskByName(diskName, instance.Zone) if err != nil { return err } - mc = newDiskMetricContextZonal("attach", gce.region, instance.Zone) + mc = newDiskMetricContextZonal("attach", g.region, instance.Zone) } readWrite := "READ_WRITE" @@ -556,12 +564,14 @@ func (gce *GCECloud) AttachDisk(diskName string, nodeName types.NodeName, readOn readWrite = "READ_ONLY" } - return mc.Observe(gce.manager.AttachDiskOnCloudProvider(disk, readWrite, instance.Zone, instance.Name)) + return mc.Observe(g.manager.AttachDiskOnCloudProvider(disk, readWrite, instance.Zone, instance.Name)) } -func (gce *GCECloud) DetachDisk(devicePath string, nodeName types.NodeName) error { +// DetachDisk detaches given disk to the node with the specified NodeName. +// Current instance is used when nodeName is empty string. +func (g *Cloud) DetachDisk(devicePath string, nodeName types.NodeName) error { instanceName := mapNodeNameToInstanceName(nodeName) - inst, err := gce.getInstanceByName(instanceName) + inst, err := g.getInstanceByName(instanceName) if err != nil { if err == cloudprovider.InstanceNotFound { // If instance no longer exists, safe to assume volume is not attached. @@ -575,13 +585,14 @@ func (gce *GCECloud) DetachDisk(devicePath string, nodeName types.NodeName) erro return fmt.Errorf("error getting instance %q", instanceName) } - mc := newDiskMetricContextZonal("detach", gce.region, inst.Zone) - return mc.Observe(gce.manager.DetachDiskOnCloudProvider(inst.Zone, inst.Name, devicePath)) + mc := newDiskMetricContextZonal("detach", g.region, inst.Zone) + return mc.Observe(g.manager.DetachDiskOnCloudProvider(inst.Zone, inst.Name, devicePath)) } -func (gce *GCECloud) DiskIsAttached(diskName string, nodeName types.NodeName) (bool, error) { +// DiskIsAttached checks if a disk is attached to the node with the specified NodeName. +func (g *Cloud) DiskIsAttached(diskName string, nodeName types.NodeName) (bool, error) { instanceName := mapNodeNameToInstanceName(nodeName) - instance, err := gce.getInstanceByName(instanceName) + instance, err := g.getInstanceByName(instanceName) if err != nil { if err == cloudprovider.InstanceNotFound { // If instance no longer exists, safe to assume volume is not attached. @@ -605,13 +616,15 @@ func (gce *GCECloud) DiskIsAttached(diskName string, nodeName types.NodeName) (b return false, nil } -func (gce *GCECloud) DisksAreAttached(diskNames []string, nodeName types.NodeName) (map[string]bool, error) { +// DisksAreAttached is a batch function to check if a list of disks are attached +// to the node with the specified NodeName. +func (g *Cloud) DisksAreAttached(diskNames []string, nodeName types.NodeName) (map[string]bool, error) { attached := make(map[string]bool) for _, diskName := range diskNames { attached[diskName] = false } instanceName := mapNodeNameToInstanceName(nodeName) - instance, err := gce.getInstanceByName(instanceName) + instance, err := g.getInstanceByName(instanceName) if err != nil { if err == cloudprovider.InstanceNotFound { // If instance no longer exists, safe to assume volume is not attached. @@ -640,11 +653,11 @@ func (gce *GCECloud) DisksAreAttached(diskNames []string, nodeName types.NodeNam // CreateDisk creates a new Persistent Disk, with the specified name & // size, in the specified zone. It stores specified tags encoded in // JSON in Description field. -func (gce *GCECloud) CreateDisk( +func (g *Cloud) CreateDisk( name string, diskType string, zone string, sizeGb int64, tags map[string]string) error { // Do not allow creation of PDs in zones that are do not have nodes. Such PDs // are not currently usable. - curZones, err := gce.GetAllCurrentZones() + curZones, err := g.GetAllCurrentZones() if err != nil { return err } @@ -652,7 +665,7 @@ func (gce *GCECloud) CreateDisk( return fmt.Errorf("kubernetes does not have a node in zone %q", zone) } - tagsStr, err := gce.encodeDiskTags(tags) + tagsStr, err := g.encodeDiskTags(tags) if err != nil { return err } @@ -662,9 +675,9 @@ func (gce *GCECloud) CreateDisk( return err } - mc := newDiskMetricContextZonal("create", gce.region, zone) + mc := newDiskMetricContextZonal("create", g.region, zone) - err = gce.manager.CreateDiskOnCloudProvider( + err = g.manager.CreateDiskOnCloudProvider( name, sizeGb, tagsStr, diskType, zone) mc.Observe(err) @@ -678,14 +691,14 @@ func (gce *GCECloud) CreateDisk( // CreateRegionalDisk creates a new Regional Persistent Disk, with the specified // name & size, replicated to the specified zones. It stores specified tags // encoded in JSON in Description field. -func (gce *GCECloud) CreateRegionalDisk( +func (g *Cloud) CreateRegionalDisk( name string, diskType string, replicaZones sets.String, sizeGb int64, tags map[string]string) error { // Do not allow creation of PDs in zones that are do not have nodes. Such PDs // are not currently usable. This functionality should be reverted to checking // against managed zones if we want users to be able to create RegionalDisks // in zones where there are no nodes - curZones, err := gce.GetAllCurrentZones() + curZones, err := g.GetAllCurrentZones() if err != nil { return err } @@ -693,7 +706,7 @@ func (gce *GCECloud) CreateRegionalDisk( return fmt.Errorf("kubernetes does not have nodes in specified zones: %q. Zones that contain nodes: %q", replicaZones.Difference(curZones), curZones) } - tagsStr, err := gce.encodeDiskTags(tags) + tagsStr, err := g.encodeDiskTags(tags) if err != nil { return err } @@ -703,9 +716,9 @@ func (gce *GCECloud) CreateRegionalDisk( return err } - mc := newDiskMetricContextRegional("create", gce.region) + mc := newDiskMetricContextRegional("create", g.region) - err = gce.manager.CreateRegionalDiskOnCloudProvider( + err = g.manager.CreateRegionalDiskOnCloudProvider( name, sizeGb, tagsStr, diskType, replicaZones) mc.Observe(err) @@ -727,8 +740,9 @@ func getDiskType(diskType string) (string, error) { } } -func (gce *GCECloud) DeleteDisk(diskToDelete string) error { - err := gce.doDeleteDisk(diskToDelete) +// DeleteDisk deletes rgw referenced persistent disk. +func (g *Cloud) DeleteDisk(diskToDelete string) error { + err := g.doDeleteDisk(diskToDelete) if isGCEError(err, "resourceInUseByAnotherResource") { return volume.NewDeletedVolumeInUseError(err.Error()) } @@ -740,8 +754,8 @@ func (gce *GCECloud) DeleteDisk(diskToDelete string) error { } // ResizeDisk expands given disk and returns new disk size -func (gce *GCECloud) ResizeDisk(diskToResize string, oldSize resource.Quantity, newSize resource.Quantity) (resource.Quantity, error) { - disk, err := gce.GetDiskByNameUnknownZone(diskToResize) +func (g *Cloud) ResizeDisk(diskToResize string, oldSize resource.Quantity, newSize resource.Quantity) (resource.Quantity, error) { + disk, err := g.GetDiskByNameUnknownZone(diskToResize) if err != nil { return oldSize, err } @@ -760,26 +774,24 @@ func (gce *GCECloud) ResizeDisk(diskToResize string, oldSize resource.Quantity, switch zoneInfo := disk.ZoneInfo.(type) { case singleZone: mc = newDiskMetricContextZonal("resize", disk.Region, zoneInfo.zone) - err := gce.manager.ResizeDiskOnCloudProvider(disk, requestGIB, zoneInfo.zone) + err := g.manager.ResizeDiskOnCloudProvider(disk, requestGIB, zoneInfo.zone) if err != nil { return oldSize, mc.Observe(err) - } else { - return newSizeQuant, mc.Observe(err) } + return newSizeQuant, mc.Observe(err) case multiZone: if !utilfeature.DefaultFeatureGate.Enabled(features.GCERegionalPersistentDisk) { return oldSize, fmt.Errorf("disk.ZoneInfo has unexpected type %T", zoneInfo) } mc = newDiskMetricContextRegional("resize", disk.Region) - err := gce.manager.RegionalResizeDiskOnCloudProvider(disk, requestGIB) + err := g.manager.RegionalResizeDiskOnCloudProvider(disk, requestGIB) if err != nil { return oldSize, mc.Observe(err) - } else { - return newSizeQuant, mc.Observe(err) } + return newSizeQuant, mc.Observe(err) case nil: return oldSize, fmt.Errorf("PD has nil ZoneInfo: %v", disk) default: @@ -787,13 +799,13 @@ func (gce *GCECloud) ResizeDisk(diskToResize string, oldSize resource.Quantity, } } -// Builds the labels that should be automatically added to a PersistentVolume backed by a GCE PD +// GetAutoLabelsForPD builds the labels that should be automatically added to a PersistentVolume backed by a GCE PD // Specifically, this builds FailureDomain (zone) and Region labels. // The PersistentVolumeLabel admission controller calls this and adds the labels when a PV is created. // If zone is specified, the volume will only be found in the specified zone, // otherwise all managed zones will be searched. -func (gce *GCECloud) GetAutoLabelsForPD(name string, zone string) (map[string]string, error) { - var disk *GCEDisk +func (g *Cloud) GetAutoLabelsForPD(name string, zone string) (map[string]string, error) { + var disk *Disk var err error if zone == "" { // For regional PDs this is fine, but for zonal PDs we would like as far @@ -804,7 +816,7 @@ func (gce *GCECloud) GetAutoLabelsForPD(name string, zone string) (map[string]st // However, wherever possible the zone should be passed (and it is // passed for most cases that we can control, e.g. dynamic volume // provisioning). - disk, err = gce.GetDiskByNameUnknownZone(name) + disk, err = g.GetDiskByNameUnknownZone(name) if err != nil { return nil, err } @@ -820,19 +832,19 @@ func (gce *GCECloud) GetAutoLabelsForPD(name string, zone string) (map[string]st if len(zoneSet) > 1 { // Regional PD - disk, err = gce.getRegionalDiskByName(name) + disk, err = g.getRegionalDiskByName(name) if err != nil { return nil, err } } else { // Zonal PD - disk, err = gce.getDiskByName(name, zone) + disk, err = g.getDiskByName(name, zone) if err != nil { return nil, err } } } else { - disk, err = gce.getDiskByName(name, zone) + disk, err = g.getDiskByName(name, zone) if err != nil { return nil, err } @@ -867,11 +879,11 @@ func (gce *GCECloud) GetAutoLabelsForPD(name string, zone string) (map[string]st return labels, nil } -// Returns a GCEDisk for the disk, if it is found in the specified zone. +// Returns a Disk for the disk, if it is found in the specified zone. // If not found, returns (nil, nil) -func (gce *GCECloud) findDiskByName(diskName string, zone string) (*GCEDisk, error) { - mc := newDiskMetricContextZonal("get", gce.region, zone) - disk, err := gce.manager.GetDiskFromCloudProvider(zone, diskName) +func (g *Cloud) findDiskByName(diskName string, zone string) (*Disk, error) { + mc := newDiskMetricContextZonal("get", g.region, zone) + disk, err := g.manager.GetDiskFromCloudProvider(zone, diskName) if err == nil { return disk, mc.Observe(nil) } @@ -882,19 +894,19 @@ func (gce *GCECloud) findDiskByName(diskName string, zone string) (*GCEDisk, err } // Like findDiskByName, but returns an error if the disk is not found -func (gce *GCECloud) getDiskByName(diskName string, zone string) (*GCEDisk, error) { - disk, err := gce.findDiskByName(diskName, zone) +func (g *Cloud) getDiskByName(diskName string, zone string) (*Disk, error) { + disk, err := g.findDiskByName(diskName, zone) if disk == nil && err == nil { return nil, fmt.Errorf("GCE persistent disk not found: diskName=%q zone=%q", diskName, zone) } return disk, err } -// Returns a GCEDisk for the regional disk, if it is found. +// Returns a Disk for the regional disk, if it is found. // If not found, returns (nil, nil) -func (gce *GCECloud) findRegionalDiskByName(diskName string) (*GCEDisk, error) { - mc := newDiskMetricContextRegional("get", gce.region) - disk, err := gce.manager.GetRegionalDiskFromCloudProvider(diskName) +func (g *Cloud) findRegionalDiskByName(diskName string) (*Disk, error) { + mc := newDiskMetricContextRegional("get", g.region) + disk, err := g.manager.GetRegionalDiskFromCloudProvider(diskName) if err == nil { return disk, mc.Observe(nil) } @@ -905,20 +917,20 @@ func (gce *GCECloud) findRegionalDiskByName(diskName string) (*GCEDisk, error) { } // Like findRegionalDiskByName, but returns an error if the disk is not found -func (gce *GCECloud) getRegionalDiskByName(diskName string) (*GCEDisk, error) { - disk, err := gce.findRegionalDiskByName(diskName) +func (g *Cloud) getRegionalDiskByName(diskName string) (*Disk, error) { + disk, err := g.findRegionalDiskByName(diskName) if disk == nil && err == nil { return nil, fmt.Errorf("GCE regional persistent disk not found: diskName=%q", diskName) } return disk, err } -// Scans all managed zones to return the GCE PD +// GetDiskByNameUnknownZone scans all managed zones to return the GCE PD // Prefer getDiskByName, if the zone can be established // Return cloudprovider.DiskNotFound if the given disk cannot be found in any zone -func (gce *GCECloud) GetDiskByNameUnknownZone(diskName string) (*GCEDisk, error) { +func (g *Cloud) GetDiskByNameUnknownZone(diskName string) (*Disk, error) { if utilfeature.DefaultFeatureGate.Enabled(features.GCERegionalPersistentDisk) { - regionalDisk, err := gce.getRegionalDiskByName(diskName) + regionalDisk, err := g.getRegionalDiskByName(diskName) if err == nil { return regionalDisk, err } @@ -934,9 +946,9 @@ func (gce *GCECloud) GetDiskByNameUnknownZone(diskName string) (*GCEDisk, error) // admission control, but that might be a little weird (values changing // on create) - var found *GCEDisk - for _, zone := range gce.managedZones { - disk, err := gce.findDiskByName(diskName, zone) + var found *Disk + for _, zone := range g.managedZones { + disk, err := g.findDiskByName(diskName, zone) if err != nil { return nil, err } @@ -964,14 +976,14 @@ func (gce *GCECloud) GetDiskByNameUnknownZone(diskName string) (*GCEDisk, error) return found, nil } glog.Warningf("GCE persistent disk %q not found in managed zones (%s)", - diskName, strings.Join(gce.managedZones, ",")) + diskName, strings.Join(g.managedZones, ",")) return nil, cloudprovider.DiskNotFound } // encodeDiskTags encodes requested volume tags into JSON string, as GCE does // not support tags on GCE PDs and we use Description field as fallback. -func (gce *GCECloud) encodeDiskTags(tags map[string]string) (string, error) { +func (g *Cloud) encodeDiskTags(tags map[string]string) (string, error) { if len(tags) == 0 { // No tags -> empty JSON return "", nil @@ -984,8 +996,8 @@ func (gce *GCECloud) encodeDiskTags(tags map[string]string) (string, error) { return string(enc), nil } -func (gce *GCECloud) doDeleteDisk(diskToDelete string) error { - disk, err := gce.GetDiskByNameUnknownZone(diskToDelete) +func (g *Cloud) doDeleteDisk(diskToDelete string) error { + disk, err := g.GetDiskByNameUnknownZone(diskToDelete) if err != nil { return err } @@ -995,14 +1007,14 @@ func (gce *GCECloud) doDeleteDisk(diskToDelete string) error { switch zoneInfo := disk.ZoneInfo.(type) { case singleZone: mc = newDiskMetricContextZonal("delete", disk.Region, zoneInfo.zone) - return mc.Observe(gce.manager.DeleteDiskOnCloudProvider(zoneInfo.zone, disk.Name)) + return mc.Observe(g.manager.DeleteDiskOnCloudProvider(zoneInfo.zone, disk.Name)) case multiZone: if !utilfeature.DefaultFeatureGate.Enabled(features.GCERegionalPersistentDisk) { return fmt.Errorf("disk.ZoneInfo has unexpected type %T", zoneInfo) } mc = newDiskMetricContextRegional("delete", disk.Region) - return mc.Observe(gce.manager.DeleteRegionalDiskOnCloudProvider(disk.Name)) + return mc.Observe(g.manager.DeleteRegionalDiskOnCloudProvider(disk.Name)) case nil: return fmt.Errorf("PD has nil ZoneInfo: %v", disk) default: diff --git a/pkg/cloudprovider/providers/gce/gce_disks_test.go b/pkg/cloudprovider/providers/gce/gce_disks_test.go index 4db0401e707..98a95b64ea2 100644 --- a/pkg/cloudprovider/providers/gce/gce_disks_test.go +++ b/pkg/cloudprovider/providers/gce/gce_disks_test.go @@ -35,15 +35,15 @@ import ( func TestCreateDisk_Basic(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: []string{"zone1"}, - projectID: gceProjectId, + projectID: gceProjectID, AlphaFeatureGate: alphaFeatureGate, nodeZones: createNodeZones(zonesWithNodes), nodeInformerSynced: func() bool { return true }, @@ -57,7 +57,7 @@ func TestCreateDisk_Basic(t *testing.T) { tags["test-tag"] = "test-value" expectedDiskTypeURI := gceComputeAPIEndpoint + "projects/" + fmt.Sprintf( - diskTypeURITemplateSingleZone, gceProjectId, zone, diskType) + diskTypeURITemplateSingleZone, gceProjectID, zone, diskType) expectedDescription := "{\"test-tag\":\"test-value\"}" /* Act */ @@ -90,15 +90,15 @@ func TestCreateDisk_Basic(t *testing.T) { func TestCreateRegionalDisk_Basic(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1", "zone3", "zone2"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, - projectID: gceProjectId, + projectID: gceProjectID, nodeZones: createNodeZones(zonesWithNodes), nodeInformerSynced: func() bool { return true }, } @@ -111,7 +111,7 @@ func TestCreateRegionalDisk_Basic(t *testing.T) { tags["test-tag"] = "test-value" expectedDiskTypeURI := gceComputeAPIEndpointBeta + "projects/" + fmt.Sprintf( - diskTypeURITemplateRegional, gceProjectId, gceRegion, diskType) + diskTypeURITemplateRegional, gceProjectID, gceRegion, diskType) expectedDescription := "{\"test-tag\":\"test-value\"}" /* Act */ @@ -144,12 +144,12 @@ func TestCreateRegionalDisk_Basic(t *testing.T) { func TestCreateDisk_DiskAlreadyExists(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -175,11 +175,11 @@ func TestCreateDisk_DiskAlreadyExists(t *testing.T) { func TestCreateDisk_WrongZone(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1"} - fakeManager := newFakeManager(gceProjectId, gceRegion) - gce := GCECloud{ + fakeManager := newFakeManager(gceProjectID, gceRegion) + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, nodeZones: createNodeZones(zonesWithNodes), @@ -200,11 +200,11 @@ func TestCreateDisk_WrongZone(t *testing.T) { func TestCreateDisk_NoManagedZone(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{} - fakeManager := newFakeManager(gceProjectId, gceRegion) - gce := GCECloud{ + fakeManager := newFakeManager(gceProjectID, gceRegion) + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, nodeZones: createNodeZones(zonesWithNodes), @@ -225,11 +225,11 @@ func TestCreateDisk_NoManagedZone(t *testing.T) { func TestCreateDisk_BadDiskType(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1"} - fakeManager := newFakeManager(gceProjectId, gceRegion) - gce := GCECloud{manager: fakeManager, + fakeManager := newFakeManager(gceProjectID, gceRegion) + gce := Cloud{manager: fakeManager, managedZones: zonesWithNodes, nodeZones: createNodeZones(zonesWithNodes), nodeInformerSynced: func() bool { return true }} @@ -250,12 +250,12 @@ func TestCreateDisk_BadDiskType(t *testing.T) { func TestCreateDisk_MultiZone(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1", "zone2", "zone3"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -279,12 +279,12 @@ func TestCreateDisk_MultiZone(t *testing.T) { func TestDeleteDisk_Basic(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -313,12 +313,12 @@ func TestDeleteDisk_Basic(t *testing.T) { func TestDeleteDisk_NotFound(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -338,12 +338,12 @@ func TestDeleteDisk_NotFound(t *testing.T) { func TestDeleteDisk_ResourceBeingUsed(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -369,12 +369,12 @@ func TestDeleteDisk_ResourceBeingUsed(t *testing.T) { func TestDeleteDisk_SameDiskMultiZone(t *testing.T) { /* Assert */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1", "zone2", "zone3"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -403,12 +403,12 @@ func TestDeleteDisk_SameDiskMultiZone(t *testing.T) { func TestDeleteDisk_DiffDiskMultiZone(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"zone1"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -437,16 +437,16 @@ func TestDeleteDisk_DiffDiskMultiZone(t *testing.T) { func TestGetAutoLabelsForPD_Basic(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "us-central1" zone := "us-central1-c" zonesWithNodes := []string{zone} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) diskName := "disk" diskType := DiskTypeSSD const sizeGb int64 = 128 alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -474,16 +474,16 @@ func TestGetAutoLabelsForPD_Basic(t *testing.T) { func TestGetAutoLabelsForPD_NoZone(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "europe-west1" zone := "europe-west1-d" zonesWithNodes := []string{zone} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) diskName := "disk" diskType := DiskTypeStandard const sizeGb int64 = 128 alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -510,13 +510,13 @@ func TestGetAutoLabelsForPD_NoZone(t *testing.T) { func TestGetAutoLabelsForPD_DiskNotFound(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zone := "asia-northeast1-a" zonesWithNodes := []string{zone} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) diskName := "disk" - gce := GCECloud{manager: fakeManager, + gce := Cloud{manager: fakeManager, managedZones: zonesWithNodes, nodeZones: createNodeZones(zonesWithNodes), nodeInformerSynced: func() bool { return true }} @@ -532,13 +532,13 @@ func TestGetAutoLabelsForPD_DiskNotFound(t *testing.T) { func TestGetAutoLabelsForPD_DiskNotFoundAndNoZone(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) diskName := "disk" alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -557,17 +557,17 @@ func TestGetAutoLabelsForPD_DiskNotFoundAndNoZone(t *testing.T) { func TestGetAutoLabelsForPD_DupDisk(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "us-west1" zonesWithNodes := []string{"us-west1-b", "asia-southeast1-a"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) diskName := "disk" diskType := DiskTypeStandard zone := "us-west1-b" const sizeGb int64 = 128 alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -596,16 +596,16 @@ func TestGetAutoLabelsForPD_DupDisk(t *testing.T) { func TestGetAutoLabelsForPD_DupDiskNoZone(t *testing.T) { /* Arrange */ - gceProjectId := "test-project" + gceProjectID := "test-project" gceRegion := "fake-region" zonesWithNodes := []string{"us-west1-b", "asia-southeast1-a"} - fakeManager := newFakeManager(gceProjectId, gceRegion) + fakeManager := newFakeManager(gceProjectID, gceRegion) diskName := "disk" diskType := DiskTypeStandard const sizeGb int64 = 128 alphaFeatureGate := NewAlphaFeatureGate([]string{}) - gce := GCECloud{ + gce := Cloud{ manager: fakeManager, managedZones: zonesWithNodes, AlphaFeatureGate: alphaFeatureGate, @@ -738,16 +738,16 @@ func (manager *FakeServiceManager) CreateRegionalDiskOnCloudProvider( manager.regionalDisks[diskToCreateV1.Name] = zones return nil case targetBeta: - return fmt.Errorf("RegionalDisk CreateDisk op not supported in beta.") + return fmt.Errorf("regionalDisk CreateDisk op not supported in beta") case targetAlpha: - return fmt.Errorf("RegionalDisk CreateDisk op not supported in alpha.") + return fmt.Errorf("regionalDisk CreateDisk op not supported in alpha") default: return fmt.Errorf("unexpected type: %T", t) } } func (manager *FakeServiceManager) AttachDiskOnCloudProvider( - disk *GCEDisk, + disk *Disk, readWrite string, instanceZone string, instanceName string) error { @@ -784,7 +784,7 @@ func (manager *FakeServiceManager) DetachDiskOnCloudProvider( * Gets disk info stored in the FakeServiceManager. */ func (manager *FakeServiceManager) GetDiskFromCloudProvider( - zone string, diskName string) (*GCEDisk, error) { + zone string, diskName string) (*Disk, error) { if manager.zonalDisks[zone] == "" { return nil, cloudprovider.DiskNotFound @@ -796,7 +796,7 @@ func (manager *FakeServiceManager) GetDiskFromCloudProvider( return nil, err } - return &GCEDisk{ + return &Disk{ Region: manager.gceRegion, ZoneInfo: singleZone{lastComponent(zone)}, Name: diskName, @@ -809,7 +809,7 @@ func (manager *FakeServiceManager) GetDiskFromCloudProvider( * Gets disk info stored in the FakeServiceManager. */ func (manager *FakeServiceManager) GetRegionalDiskFromCloudProvider( - diskName string) (*GCEDisk, error) { + diskName string) (*Disk, error) { if _, ok := manager.regionalDisks[diskName]; !ok { return nil, cloudprovider.DiskNotFound @@ -821,7 +821,7 @@ func (manager *FakeServiceManager) GetRegionalDiskFromCloudProvider( return nil, err } - return &GCEDisk{ + return &Disk{ Region: manager.gceRegion, ZoneInfo: multiZone{manager.regionalDisks[diskName]}, Name: diskName, @@ -831,14 +831,14 @@ func (manager *FakeServiceManager) GetRegionalDiskFromCloudProvider( } func (manager *FakeServiceManager) ResizeDiskOnCloudProvider( - disk *GCEDisk, + disk *Disk, size int64, zone string) error { panic("Not implmented") } func (manager *FakeServiceManager) RegionalResizeDiskOnCloudProvider( - disk *GCEDisk, + disk *Disk, size int64) error { panic("Not implemented") } diff --git a/pkg/cloudprovider/providers/gce/gce_fake.go b/pkg/cloudprovider/providers/gce/gce_fake.go index f51bc20719f..73a724d74ae 100644 --- a/pkg/cloudprovider/providers/gce/gce_fake.go +++ b/pkg/cloudprovider/providers/gce/gce_fake.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud" ) +// TestClusterValues holds the config values for the fake/test gce cloud object. type TestClusterValues struct { ProjectID string Region string @@ -34,6 +35,8 @@ type TestClusterValues struct { ClusterName string } +// DefaultTestClusterValues Creates a reasonable set of default cluster values +// for generating a new test fake GCE cloud instance. func DefaultTestClusterValues() TestClusterValues { return TestClusterValues{ ProjectID: "test-project", @@ -45,10 +48,6 @@ func DefaultTestClusterValues() TestClusterValues { } } -func FakeGCECloud(vals TestClusterValues) *GCECloud { - return simpleFakeGCECloud(vals) -} - type fakeRoundTripper struct{} func (*fakeRoundTripper) RoundTrip(*http.Request) (*http.Response, error) { @@ -66,10 +65,11 @@ func fakeClusterID(clusterID string) ClusterID { } } -func simpleFakeGCECloud(vals TestClusterValues) *GCECloud { +// NewFakeGCECloud constructs a fake GCE Cloud from the cluster values. +func NewFakeGCECloud(vals TestClusterValues) *Cloud { client := &http.Client{Transport: &fakeRoundTripper{}} service, _ := compute.New(client) - gce := &GCECloud{ + gce := &Cloud{ region: vals.Region, service: service, managedZones: []string{vals.ZoneName}, diff --git a/pkg/cloudprovider/providers/gce/gce_firewall.go b/pkg/cloudprovider/providers/gce/gce_firewall.go index e138df87471..4aea4970956 100644 --- a/pkg/cloudprovider/providers/gce/gce_firewall.go +++ b/pkg/cloudprovider/providers/gce/gce_firewall.go @@ -28,38 +28,38 @@ func newFirewallMetricContext(request string) *metricContext { } // GetFirewall returns the Firewall by name. -func (gce *GCECloud) GetFirewall(name string) (*compute.Firewall, error) { +func (g *Cloud) GetFirewall(name string) (*compute.Firewall, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newFirewallMetricContext("get") - v, err := gce.c.Firewalls().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.Firewalls().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // CreateFirewall creates the passed firewall -func (gce *GCECloud) CreateFirewall(f *compute.Firewall) error { +func (g *Cloud) CreateFirewall(f *compute.Firewall) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newFirewallMetricContext("create") - return mc.Observe(gce.c.Firewalls().Insert(ctx, meta.GlobalKey(f.Name), f)) + return mc.Observe(g.c.Firewalls().Insert(ctx, meta.GlobalKey(f.Name), f)) } // DeleteFirewall deletes the given firewall rule. -func (gce *GCECloud) DeleteFirewall(name string) error { +func (g *Cloud) DeleteFirewall(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newFirewallMetricContext("delete") - return mc.Observe(gce.c.Firewalls().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.Firewalls().Delete(ctx, meta.GlobalKey(name))) } // UpdateFirewall applies the given firewall as an update to an existing service. -func (gce *GCECloud) UpdateFirewall(f *compute.Firewall) error { +func (g *Cloud) UpdateFirewall(f *compute.Firewall) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newFirewallMetricContext("update") - return mc.Observe(gce.c.Firewalls().Update(ctx, meta.GlobalKey(f.Name), f)) + return mc.Observe(g.c.Firewalls().Update(ctx, meta.GlobalKey(f.Name), f)) } diff --git a/pkg/cloudprovider/providers/gce/gce_forwardingrule.go b/pkg/cloudprovider/providers/gce/gce_forwardingrule.go index b40652c98e3..5689cfd32ea 100644 --- a/pkg/cloudprovider/providers/gce/gce_forwardingrule.go +++ b/pkg/cloudprovider/providers/gce/gce_forwardingrule.go @@ -32,129 +32,129 @@ func newForwardingRuleMetricContextWithVersion(request, region, version string) } // CreateGlobalForwardingRule creates the passed GlobalForwardingRule -func (gce *GCECloud) CreateGlobalForwardingRule(rule *compute.ForwardingRule) error { +func (g *Cloud) CreateGlobalForwardingRule(rule *compute.ForwardingRule) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContext("create", "") - return mc.Observe(gce.c.GlobalForwardingRules().Insert(ctx, meta.GlobalKey(rule.Name), rule)) + return mc.Observe(g.c.GlobalForwardingRules().Insert(ctx, meta.GlobalKey(rule.Name), rule)) } // SetProxyForGlobalForwardingRule links the given TargetHttp(s)Proxy with the given GlobalForwardingRule. // targetProxyLink is the SelfLink of a TargetHttp(s)Proxy. -func (gce *GCECloud) SetProxyForGlobalForwardingRule(forwardingRuleName, targetProxyLink string) error { +func (g *Cloud) SetProxyForGlobalForwardingRule(forwardingRuleName, targetProxyLink string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContext("set_proxy", "") target := &compute.TargetReference{Target: targetProxyLink} - return mc.Observe(gce.c.GlobalForwardingRules().SetTarget(ctx, meta.GlobalKey(forwardingRuleName), target)) + return mc.Observe(g.c.GlobalForwardingRules().SetTarget(ctx, meta.GlobalKey(forwardingRuleName), target)) } // DeleteGlobalForwardingRule deletes the GlobalForwardingRule by name. -func (gce *GCECloud) DeleteGlobalForwardingRule(name string) error { +func (g *Cloud) DeleteGlobalForwardingRule(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContext("delete", "") - return mc.Observe(gce.c.GlobalForwardingRules().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.GlobalForwardingRules().Delete(ctx, meta.GlobalKey(name))) } // GetGlobalForwardingRule returns the GlobalForwardingRule by name. -func (gce *GCECloud) GetGlobalForwardingRule(name string) (*compute.ForwardingRule, error) { +func (g *Cloud) GetGlobalForwardingRule(name string) (*compute.ForwardingRule, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContext("get", "") - v, err := gce.c.GlobalForwardingRules().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.GlobalForwardingRules().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // ListGlobalForwardingRules lists all GlobalForwardingRules in the project. -func (gce *GCECloud) ListGlobalForwardingRules() ([]*compute.ForwardingRule, error) { +func (g *Cloud) ListGlobalForwardingRules() ([]*compute.ForwardingRule, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContext("list", "") - v, err := gce.c.GlobalForwardingRules().List(ctx, filter.None) + v, err := g.c.GlobalForwardingRules().List(ctx, filter.None) return v, mc.Observe(err) } // GetRegionForwardingRule returns the RegionalForwardingRule by name & region. -func (gce *GCECloud) GetRegionForwardingRule(name, region string) (*compute.ForwardingRule, error) { +func (g *Cloud) GetRegionForwardingRule(name, region string) (*compute.ForwardingRule, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContext("get", region) - v, err := gce.c.ForwardingRules().Get(ctx, meta.RegionalKey(name, region)) + v, err := g.c.ForwardingRules().Get(ctx, meta.RegionalKey(name, region)) return v, mc.Observe(err) } // GetAlphaRegionForwardingRule returns the Alpha forwarding rule by name & region. -func (gce *GCECloud) GetAlphaRegionForwardingRule(name, region string) (*computealpha.ForwardingRule, error) { +func (g *Cloud) GetAlphaRegionForwardingRule(name, region string) (*computealpha.ForwardingRule, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContextWithVersion("get", region, computeAlphaVersion) - v, err := gce.c.AlphaForwardingRules().Get(ctx, meta.RegionalKey(name, region)) + v, err := g.c.AlphaForwardingRules().Get(ctx, meta.RegionalKey(name, region)) return v, mc.Observe(err) } // ListRegionForwardingRules lists all RegionalForwardingRules in the project & region. -func (gce *GCECloud) ListRegionForwardingRules(region string) ([]*compute.ForwardingRule, error) { +func (g *Cloud) ListRegionForwardingRules(region string) ([]*compute.ForwardingRule, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContext("list", region) - v, err := gce.c.ForwardingRules().List(ctx, region, filter.None) + v, err := g.c.ForwardingRules().List(ctx, region, filter.None) return v, mc.Observe(err) } // ListAlphaRegionForwardingRules lists all RegionalForwardingRules in the project & region. -func (gce *GCECloud) ListAlphaRegionForwardingRules(region string) ([]*computealpha.ForwardingRule, error) { +func (g *Cloud) ListAlphaRegionForwardingRules(region string) ([]*computealpha.ForwardingRule, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContextWithVersion("list", region, computeAlphaVersion) - v, err := gce.c.AlphaForwardingRules().List(ctx, region, filter.None) + v, err := g.c.AlphaForwardingRules().List(ctx, region, filter.None) return v, mc.Observe(err) } // CreateRegionForwardingRule creates and returns a // RegionalForwardingRule that points to the given BackendService -func (gce *GCECloud) CreateRegionForwardingRule(rule *compute.ForwardingRule, region string) error { +func (g *Cloud) CreateRegionForwardingRule(rule *compute.ForwardingRule, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContext("create", region) - return mc.Observe(gce.c.ForwardingRules().Insert(ctx, meta.RegionalKey(rule.Name, region), rule)) + return mc.Observe(g.c.ForwardingRules().Insert(ctx, meta.RegionalKey(rule.Name, region), rule)) } // CreateAlphaRegionForwardingRule creates and returns an Alpha // forwarding fule in the given region. -func (gce *GCECloud) CreateAlphaRegionForwardingRule(rule *computealpha.ForwardingRule, region string) error { +func (g *Cloud) CreateAlphaRegionForwardingRule(rule *computealpha.ForwardingRule, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContextWithVersion("create", region, computeAlphaVersion) - return mc.Observe(gce.c.AlphaForwardingRules().Insert(ctx, meta.RegionalKey(rule.Name, region), rule)) + return mc.Observe(g.c.AlphaForwardingRules().Insert(ctx, meta.RegionalKey(rule.Name, region), rule)) } // DeleteRegionForwardingRule deletes the RegionalForwardingRule by name & region. -func (gce *GCECloud) DeleteRegionForwardingRule(name, region string) error { +func (g *Cloud) DeleteRegionForwardingRule(name, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newForwardingRuleMetricContext("delete", region) - return mc.Observe(gce.c.ForwardingRules().Delete(ctx, meta.RegionalKey(name, region))) + return mc.Observe(g.c.ForwardingRules().Delete(ctx, meta.RegionalKey(name, region))) } // TODO(#51665): retire this function once Network Tiers becomes Beta in GCP. -func (gce *GCECloud) getNetworkTierFromForwardingRule(name, region string) (string, error) { - if !gce.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) { +func (g *Cloud) getNetworkTierFromForwardingRule(name, region string) (string, error) { + if !g.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) { return cloud.NetworkTierDefault.ToGCEValue(), nil } - fwdRule, err := gce.GetAlphaRegionForwardingRule(name, region) + fwdRule, err := g.GetAlphaRegionForwardingRule(name, region) if err != nil { return handleAlphaNetworkTierGetError(err) } diff --git a/pkg/cloudprovider/providers/gce/gce_healthchecks.go b/pkg/cloudprovider/providers/gce/gce_healthchecks.go index f8283851687..10e1f72a359 100644 --- a/pkg/cloudprovider/providers/gce/gce_healthchecks.go +++ b/pkg/cloudprovider/providers/gce/gce_healthchecks.go @@ -56,204 +56,204 @@ func newHealthcheckMetricContextWithVersion(request, version string) *metricCont return newGenericMetricContext("healthcheck", request, unusedMetricLabel, unusedMetricLabel, version) } -// GetHttpHealthCheck returns the given HttpHealthCheck by name. -func (gce *GCECloud) GetHttpHealthCheck(name string) (*compute.HttpHealthCheck, error) { +// GetHTTPHealthCheck returns the given HttpHealthCheck by name. +func (g *Cloud) GetHTTPHealthCheck(name string) (*compute.HttpHealthCheck, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("get_legacy") - v, err := gce.c.HttpHealthChecks().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.HttpHealthChecks().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } -// UpdateHttpHealthCheck applies the given HttpHealthCheck as an update. -func (gce *GCECloud) UpdateHttpHealthCheck(hc *compute.HttpHealthCheck) error { +// UpdateHTTPHealthCheck applies the given HttpHealthCheck as an update. +func (g *Cloud) UpdateHTTPHealthCheck(hc *compute.HttpHealthCheck) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("update_legacy") - return mc.Observe(gce.c.HttpHealthChecks().Update(ctx, meta.GlobalKey(hc.Name), hc)) + return mc.Observe(g.c.HttpHealthChecks().Update(ctx, meta.GlobalKey(hc.Name), hc)) } -// DeleteHttpHealthCheck deletes the given HttpHealthCheck by name. -func (gce *GCECloud) DeleteHttpHealthCheck(name string) error { +// DeleteHTTPHealthCheck deletes the given HttpHealthCheck by name. +func (g *Cloud) DeleteHTTPHealthCheck(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("delete_legacy") - return mc.Observe(gce.c.HttpHealthChecks().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.HttpHealthChecks().Delete(ctx, meta.GlobalKey(name))) } -// CreateHttpHealthCheck creates the given HttpHealthCheck. -func (gce *GCECloud) CreateHttpHealthCheck(hc *compute.HttpHealthCheck) error { +// CreateHTTPHealthCheck creates the given HttpHealthCheck. +func (g *Cloud) CreateHTTPHealthCheck(hc *compute.HttpHealthCheck) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("create_legacy") - return mc.Observe(gce.c.HttpHealthChecks().Insert(ctx, meta.GlobalKey(hc.Name), hc)) + return mc.Observe(g.c.HttpHealthChecks().Insert(ctx, meta.GlobalKey(hc.Name), hc)) } -// ListHttpHealthChecks lists all HttpHealthChecks in the project. -func (gce *GCECloud) ListHttpHealthChecks() ([]*compute.HttpHealthCheck, error) { +// ListHTTPHealthChecks lists all HttpHealthChecks in the project. +func (g *Cloud) ListHTTPHealthChecks() ([]*compute.HttpHealthCheck, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("list_legacy") - v, err := gce.c.HttpHealthChecks().List(ctx, filter.None) + v, err := g.c.HttpHealthChecks().List(ctx, filter.None) return v, mc.Observe(err) } // Legacy HTTPS Health Checks -// GetHttpsHealthCheck returns the given HttpsHealthCheck by name. -func (gce *GCECloud) GetHttpsHealthCheck(name string) (*compute.HttpsHealthCheck, error) { +// GetHTTPSHealthCheck returns the given HttpsHealthCheck by name. +func (g *Cloud) GetHTTPSHealthCheck(name string) (*compute.HttpsHealthCheck, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("get_legacy") - v, err := gce.c.HttpsHealthChecks().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.HttpsHealthChecks().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } -// UpdateHttpsHealthCheck applies the given HttpsHealthCheck as an update. -func (gce *GCECloud) UpdateHttpsHealthCheck(hc *compute.HttpsHealthCheck) error { +// UpdateHTTPSHealthCheck applies the given HttpsHealthCheck as an update. +func (g *Cloud) UpdateHTTPSHealthCheck(hc *compute.HttpsHealthCheck) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("update_legacy") - return mc.Observe(gce.c.HttpsHealthChecks().Update(ctx, meta.GlobalKey(hc.Name), hc)) + return mc.Observe(g.c.HttpsHealthChecks().Update(ctx, meta.GlobalKey(hc.Name), hc)) } -// DeleteHttpsHealthCheck deletes the given HttpsHealthCheck by name. -func (gce *GCECloud) DeleteHttpsHealthCheck(name string) error { +// DeleteHTTPSHealthCheck deletes the given HttpsHealthCheck by name. +func (g *Cloud) DeleteHTTPSHealthCheck(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("delete_legacy") - return mc.Observe(gce.c.HttpsHealthChecks().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.HttpsHealthChecks().Delete(ctx, meta.GlobalKey(name))) } -// CreateHttpsHealthCheck creates the given HttpsHealthCheck. -func (gce *GCECloud) CreateHttpsHealthCheck(hc *compute.HttpsHealthCheck) error { +// CreateHTTPSHealthCheck creates the given HttpsHealthCheck. +func (g *Cloud) CreateHTTPSHealthCheck(hc *compute.HttpsHealthCheck) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("create_legacy") - return mc.Observe(gce.c.HttpsHealthChecks().Insert(ctx, meta.GlobalKey(hc.Name), hc)) + return mc.Observe(g.c.HttpsHealthChecks().Insert(ctx, meta.GlobalKey(hc.Name), hc)) } -// ListHttpsHealthChecks lists all HttpsHealthChecks in the project. -func (gce *GCECloud) ListHttpsHealthChecks() ([]*compute.HttpsHealthCheck, error) { +// ListHTTPSHealthChecks lists all HttpsHealthChecks in the project. +func (g *Cloud) ListHTTPSHealthChecks() ([]*compute.HttpsHealthCheck, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("list_legacy") - v, err := gce.c.HttpsHealthChecks().List(ctx, filter.None) + v, err := g.c.HttpsHealthChecks().List(ctx, filter.None) return v, mc.Observe(err) } // Generic HealthCheck // GetHealthCheck returns the given HealthCheck by name. -func (gce *GCECloud) GetHealthCheck(name string) (*compute.HealthCheck, error) { +func (g *Cloud) GetHealthCheck(name string) (*compute.HealthCheck, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("get") - v, err := gce.c.HealthChecks().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.HealthChecks().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // GetAlphaHealthCheck returns the given alpha HealthCheck by name. -func (gce *GCECloud) GetAlphaHealthCheck(name string) (*computealpha.HealthCheck, error) { +func (g *Cloud) GetAlphaHealthCheck(name string) (*computealpha.HealthCheck, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContextWithVersion("get", computeAlphaVersion) - v, err := gce.c.AlphaHealthChecks().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.AlphaHealthChecks().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // GetBetaHealthCheck returns the given beta HealthCheck by name. -func (gce *GCECloud) GetBetaHealthCheck(name string) (*computebeta.HealthCheck, error) { +func (g *Cloud) GetBetaHealthCheck(name string) (*computebeta.HealthCheck, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContextWithVersion("get", computeBetaVersion) - v, err := gce.c.BetaHealthChecks().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.BetaHealthChecks().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // UpdateHealthCheck applies the given HealthCheck as an update. -func (gce *GCECloud) UpdateHealthCheck(hc *compute.HealthCheck) error { +func (g *Cloud) UpdateHealthCheck(hc *compute.HealthCheck) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("update") - return mc.Observe(gce.c.HealthChecks().Update(ctx, meta.GlobalKey(hc.Name), hc)) + return mc.Observe(g.c.HealthChecks().Update(ctx, meta.GlobalKey(hc.Name), hc)) } // UpdateAlphaHealthCheck applies the given alpha HealthCheck as an update. -func (gce *GCECloud) UpdateAlphaHealthCheck(hc *computealpha.HealthCheck) error { +func (g *Cloud) UpdateAlphaHealthCheck(hc *computealpha.HealthCheck) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContextWithVersion("update", computeAlphaVersion) - return mc.Observe(gce.c.AlphaHealthChecks().Update(ctx, meta.GlobalKey(hc.Name), hc)) + return mc.Observe(g.c.AlphaHealthChecks().Update(ctx, meta.GlobalKey(hc.Name), hc)) } // UpdateBetaHealthCheck applies the given beta HealthCheck as an update. -func (gce *GCECloud) UpdateBetaHealthCheck(hc *computebeta.HealthCheck) error { +func (g *Cloud) UpdateBetaHealthCheck(hc *computebeta.HealthCheck) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContextWithVersion("update", computeBetaVersion) - return mc.Observe(gce.c.BetaHealthChecks().Update(ctx, meta.GlobalKey(hc.Name), hc)) + return mc.Observe(g.c.BetaHealthChecks().Update(ctx, meta.GlobalKey(hc.Name), hc)) } // DeleteHealthCheck deletes the given HealthCheck by name. -func (gce *GCECloud) DeleteHealthCheck(name string) error { +func (g *Cloud) DeleteHealthCheck(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("delete") - return mc.Observe(gce.c.HealthChecks().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.HealthChecks().Delete(ctx, meta.GlobalKey(name))) } // CreateHealthCheck creates the given HealthCheck. -func (gce *GCECloud) CreateHealthCheck(hc *compute.HealthCheck) error { +func (g *Cloud) CreateHealthCheck(hc *compute.HealthCheck) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("create") - return mc.Observe(gce.c.HealthChecks().Insert(ctx, meta.GlobalKey(hc.Name), hc)) + return mc.Observe(g.c.HealthChecks().Insert(ctx, meta.GlobalKey(hc.Name), hc)) } // CreateAlphaHealthCheck creates the given alpha HealthCheck. -func (gce *GCECloud) CreateAlphaHealthCheck(hc *computealpha.HealthCheck) error { +func (g *Cloud) CreateAlphaHealthCheck(hc *computealpha.HealthCheck) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContextWithVersion("create", computeAlphaVersion) - return mc.Observe(gce.c.AlphaHealthChecks().Insert(ctx, meta.GlobalKey(hc.Name), hc)) + return mc.Observe(g.c.AlphaHealthChecks().Insert(ctx, meta.GlobalKey(hc.Name), hc)) } // CreateBetaHealthCheck creates the given beta HealthCheck. -func (gce *GCECloud) CreateBetaHealthCheck(hc *computebeta.HealthCheck) error { +func (g *Cloud) CreateBetaHealthCheck(hc *computebeta.HealthCheck) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContextWithVersion("create", computeBetaVersion) - return mc.Observe(gce.c.BetaHealthChecks().Insert(ctx, meta.GlobalKey(hc.Name), hc)) + return mc.Observe(g.c.BetaHealthChecks().Insert(ctx, meta.GlobalKey(hc.Name), hc)) } // ListHealthChecks lists all HealthCheck in the project. -func (gce *GCECloud) ListHealthChecks() ([]*compute.HealthCheck, error) { +func (g *Cloud) ListHealthChecks() ([]*compute.HealthCheck, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newHealthcheckMetricContext("list") - v, err := gce.c.HealthChecks().List(ctx, filter.None) + v, err := g.c.HealthChecks().List(ctx, filter.None) return v, mc.Observe(err) } diff --git a/pkg/cloudprovider/providers/gce/gce_instancegroup.go b/pkg/cloudprovider/providers/gce/gce_instancegroup.go index 13b2c51e503..edc5f093339 100644 --- a/pkg/cloudprovider/providers/gce/gce_instancegroup.go +++ b/pkg/cloudprovider/providers/gce/gce_instancegroup.go @@ -30,49 +30,49 @@ func newInstanceGroupMetricContext(request string, zone string) *metricContext { // CreateInstanceGroup creates an instance group with the given // instances. It is the callers responsibility to add named ports. -func (gce *GCECloud) CreateInstanceGroup(ig *compute.InstanceGroup, zone string) error { +func (g *Cloud) CreateInstanceGroup(ig *compute.InstanceGroup, zone string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newInstanceGroupMetricContext("create", zone) - return mc.Observe(gce.c.InstanceGroups().Insert(ctx, meta.ZonalKey(ig.Name, zone), ig)) + return mc.Observe(g.c.InstanceGroups().Insert(ctx, meta.ZonalKey(ig.Name, zone), ig)) } // DeleteInstanceGroup deletes an instance group. -func (gce *GCECloud) DeleteInstanceGroup(name string, zone string) error { +func (g *Cloud) DeleteInstanceGroup(name string, zone string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newInstanceGroupMetricContext("delete", zone) - return mc.Observe(gce.c.InstanceGroups().Delete(ctx, meta.ZonalKey(name, zone))) + return mc.Observe(g.c.InstanceGroups().Delete(ctx, meta.ZonalKey(name, zone))) } // ListInstanceGroups lists all InstanceGroups in the project and // zone. -func (gce *GCECloud) ListInstanceGroups(zone string) ([]*compute.InstanceGroup, error) { +func (g *Cloud) ListInstanceGroups(zone string) ([]*compute.InstanceGroup, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newInstanceGroupMetricContext("list", zone) - v, err := gce.c.InstanceGroups().List(ctx, zone, filter.None) + v, err := g.c.InstanceGroups().List(ctx, zone, filter.None) return v, mc.Observe(err) } // ListInstancesInInstanceGroup lists all the instances in a given // instance group and state. -func (gce *GCECloud) ListInstancesInInstanceGroup(name string, zone string, state string) ([]*compute.InstanceWithNamedPorts, error) { +func (g *Cloud) ListInstancesInInstanceGroup(name string, zone string, state string) ([]*compute.InstanceWithNamedPorts, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newInstanceGroupMetricContext("list_instances", zone) req := &compute.InstanceGroupsListInstancesRequest{InstanceState: state} - v, err := gce.c.InstanceGroups().ListInstances(ctx, meta.ZonalKey(name, zone), req, filter.None) + v, err := g.c.InstanceGroups().ListInstances(ctx, meta.ZonalKey(name, zone), req, filter.None) return v, mc.Observe(err) } // AddInstancesToInstanceGroup adds the given instances to the given // instance group. -func (gce *GCECloud) AddInstancesToInstanceGroup(name string, zone string, instanceRefs []*compute.InstanceReference) error { +func (g *Cloud) AddInstancesToInstanceGroup(name string, zone string, instanceRefs []*compute.InstanceReference) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() @@ -84,12 +84,12 @@ func (gce *GCECloud) AddInstancesToInstanceGroup(name string, zone string, insta req := &compute.InstanceGroupsAddInstancesRequest{ Instances: instanceRefs, } - return mc.Observe(gce.c.InstanceGroups().AddInstances(ctx, meta.ZonalKey(name, zone), req)) + return mc.Observe(g.c.InstanceGroups().AddInstances(ctx, meta.ZonalKey(name, zone), req)) } // RemoveInstancesFromInstanceGroup removes the given instances from // the instance group. -func (gce *GCECloud) RemoveInstancesFromInstanceGroup(name string, zone string, instanceRefs []*compute.InstanceReference) error { +func (g *Cloud) RemoveInstancesFromInstanceGroup(name string, zone string, instanceRefs []*compute.InstanceReference) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() @@ -101,25 +101,25 @@ func (gce *GCECloud) RemoveInstancesFromInstanceGroup(name string, zone string, req := &compute.InstanceGroupsRemoveInstancesRequest{ Instances: instanceRefs, } - return mc.Observe(gce.c.InstanceGroups().RemoveInstances(ctx, meta.ZonalKey(name, zone), req)) + return mc.Observe(g.c.InstanceGroups().RemoveInstances(ctx, meta.ZonalKey(name, zone), req)) } // SetNamedPortsOfInstanceGroup sets the list of named ports on a given instance group -func (gce *GCECloud) SetNamedPortsOfInstanceGroup(igName, zone string, namedPorts []*compute.NamedPort) error { +func (g *Cloud) SetNamedPortsOfInstanceGroup(igName, zone string, namedPorts []*compute.NamedPort) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newInstanceGroupMetricContext("set_namedports", zone) req := &compute.InstanceGroupsSetNamedPortsRequest{NamedPorts: namedPorts} - return mc.Observe(gce.c.InstanceGroups().SetNamedPorts(ctx, meta.ZonalKey(igName, zone), req)) + return mc.Observe(g.c.InstanceGroups().SetNamedPorts(ctx, meta.ZonalKey(igName, zone), req)) } // GetInstanceGroup returns an instance group by name. -func (gce *GCECloud) GetInstanceGroup(name string, zone string) (*compute.InstanceGroup, error) { +func (g *Cloud) GetInstanceGroup(name string, zone string) (*compute.InstanceGroup, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newInstanceGroupMetricContext("get", zone) - v, err := gce.c.InstanceGroups().Get(ctx, meta.ZonalKey(name, zone)) + v, err := g.c.InstanceGroups().Get(ctx, meta.ZonalKey(name, zone)) return v, mc.Observe(err) } diff --git a/pkg/cloudprovider/providers/gce/gce_instances.go b/pkg/cloudprovider/providers/gce/gce_instances.go index ff2dce89c37..f97d89648f8 100644 --- a/pkg/cloudprovider/providers/gce/gce_instances.go +++ b/pkg/cloudprovider/providers/gce/gce_instances.go @@ -67,22 +67,22 @@ func getZone(n *v1.Node) string { return zone } -func makeHostURL(projectsApiEndpoint, projectID, zone, host string) string { +func makeHostURL(projectsAPIEndpoint, projectID, zone, host string) string { host = canonicalizeInstanceName(host) - return projectsApiEndpoint + strings.Join([]string{projectID, "zones", zone, "instances", host}, "/") + return projectsAPIEndpoint + strings.Join([]string{projectID, "zones", zone, "instances", host}, "/") } // ToInstanceReferences returns instance references by links -func (gce *GCECloud) ToInstanceReferences(zone string, instanceNames []string) (refs []*compute.InstanceReference) { +func (g *Cloud) ToInstanceReferences(zone string, instanceNames []string) (refs []*compute.InstanceReference) { for _, ins := range instanceNames { - instanceLink := makeHostURL(gce.service.BasePath, gce.projectID, zone, ins) + instanceLink := makeHostURL(g.service.BasePath, g.projectID, zone, ins) refs = append(refs, &compute.InstanceReference{Instance: instanceLink}) } return refs } // NodeAddresses is an implementation of Instances.NodeAddresses. -func (gce *GCECloud) NodeAddresses(_ context.Context, _ types.NodeName) ([]v1.NodeAddress, error) { +func (g *Cloud) NodeAddresses(_ context.Context, _ types.NodeName) ([]v1.NodeAddress, error) { internalIP, err := metadata.Get("instance/network-interfaces/0/ip") if err != nil { return nil, fmt.Errorf("couldn't get internal IP: %v", err) @@ -109,7 +109,7 @@ func (gce *GCECloud) NodeAddresses(_ context.Context, _ types.NodeName) ([]v1.No // NodeAddressesByProviderID will not be called from the node that is requesting this ID. // i.e. metadata service and other local methods cannot be used here -func (gce *GCECloud) NodeAddressesByProviderID(ctx context.Context, providerID string) ([]v1.NodeAddress, error) { +func (g *Cloud) NodeAddressesByProviderID(ctx context.Context, providerID string) ([]v1.NodeAddress, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() @@ -118,7 +118,7 @@ func (gce *GCECloud) NodeAddressesByProviderID(ctx context.Context, providerID s return []v1.NodeAddress{}, err } - instance, err := gce.c.Instances().Get(ctx, meta.ZonalKey(canonicalizeInstanceName(name), zone)) + instance, err := g.c.Instances().Get(ctx, meta.ZonalKey(canonicalizeInstanceName(name), zone)) if err != nil { return []v1.NodeAddress{}, fmt.Errorf("error while querying for providerID %q: %v", providerID, err) } @@ -138,13 +138,13 @@ func (gce *GCECloud) NodeAddressesByProviderID(ctx context.Context, providerID s // instanceByProviderID returns the cloudprovider instance of the node // with the specified unique providerID -func (gce *GCECloud) instanceByProviderID(providerID string) (*gceInstance, error) { +func (g *Cloud) instanceByProviderID(providerID string) (*gceInstance, error) { project, zone, name, err := splitProviderID(providerID) if err != nil { return nil, err } - instance, err := gce.getInstanceFromProjectInZoneByName(project, zone, name) + instance, err := g.getInstanceFromProjectInZoneByName(project, zone, name) if err != nil { if isHTTPErrorCode(err, http.StatusNotFound) { return nil, cloudprovider.InstanceNotFound @@ -156,7 +156,7 @@ func (gce *GCECloud) instanceByProviderID(providerID string) (*gceInstance, erro } // InstanceShutdownByProviderID returns true if the instance is in safe state to detach volumes -func (gce *GCECloud) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error) { +func (g *Cloud) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error) { return false, cloudprovider.NotImplemented } @@ -164,8 +164,8 @@ func (gce *GCECloud) InstanceShutdownByProviderID(ctx context.Context, providerI // with the specified unique providerID This method will not be called from the // node that is requesting this ID. i.e. metadata service and other local // methods cannot be used here -func (gce *GCECloud) InstanceTypeByProviderID(ctx context.Context, providerID string) (string, error) { - instance, err := gce.instanceByProviderID(providerID) +func (g *Cloud) InstanceTypeByProviderID(ctx context.Context, providerID string) (string, error) { + instance, err := g.instanceByProviderID(providerID) if err != nil { return "", err } @@ -175,8 +175,8 @@ func (gce *GCECloud) InstanceTypeByProviderID(ctx context.Context, providerID st // InstanceExistsByProviderID returns true if the instance with the given provider id still exists and is running. // If false is returned with no error, the instance will be immediately deleted by the cloud controller manager. -func (gce *GCECloud) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error) { - _, err := gce.instanceByProviderID(providerID) +func (g *Cloud) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error) { + _, err := g.instanceByProviderID(providerID) if err != nil { if err == cloudprovider.InstanceNotFound { return false, nil @@ -188,49 +188,51 @@ func (gce *GCECloud) InstanceExistsByProviderID(ctx context.Context, providerID } // InstanceID returns the cloud provider ID of the node with the specified NodeName. -func (gce *GCECloud) InstanceID(ctx context.Context, nodeName types.NodeName) (string, error) { +func (g *Cloud) InstanceID(ctx context.Context, nodeName types.NodeName) (string, error) { instanceName := mapNodeNameToInstanceName(nodeName) - if gce.useMetadataServer { + if g.useMetadataServer { // Use metadata, if possible, to fetch ID. See issue #12000 - if gce.isCurrentInstance(instanceName) { + if g.isCurrentInstance(instanceName) { projectID, zone, err := getProjectAndZone() if err == nil { return projectID + "/" + zone + "/" + canonicalizeInstanceName(instanceName), nil } } } - instance, err := gce.getInstanceByName(instanceName) + instance, err := g.getInstanceByName(instanceName) if err != nil { return "", err } - return gce.projectID + "/" + instance.Zone + "/" + instance.Name, nil + return g.projectID + "/" + instance.Zone + "/" + instance.Name, nil } // InstanceType returns the type of the specified node with the specified NodeName. -func (gce *GCECloud) InstanceType(ctx context.Context, nodeName types.NodeName) (string, error) { +func (g *Cloud) InstanceType(ctx context.Context, nodeName types.NodeName) (string, error) { instanceName := mapNodeNameToInstanceName(nodeName) - if gce.useMetadataServer { + if g.useMetadataServer { // Use metadata, if possible, to fetch ID. See issue #12000 - if gce.isCurrentInstance(instanceName) { + if g.isCurrentInstance(instanceName) { mType, err := getCurrentMachineTypeViaMetadata() if err == nil { return mType, nil } } } - instance, err := gce.getInstanceByName(instanceName) + instance, err := g.getInstanceByName(instanceName) if err != nil { return "", err } return instance.Type, nil } -func (gce *GCECloud) AddSSHKeyToAllInstances(ctx context.Context, user string, keyData []byte) error { +// AddSSHKeyToAllInstances adds an SSH public key as a legal identity for all instances +// expected format for the key is standard ssh-keygen format: +func (g *Cloud) AddSSHKeyToAllInstances(ctx context.Context, user string, keyData []byte) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() return wait.Poll(2*time.Second, 30*time.Second, func() (bool, error) { - project, err := gce.c.Projects().Get(ctx, gce.projectID) + project, err := g.c.Projects().Get(ctx, g.projectID) if err != nil { glog.Errorf("Could not get project: %v", err) return false, nil @@ -261,7 +263,7 @@ func (gce *GCECloud) AddSSHKeyToAllInstances(ctx context.Context, user string, k } mc := newInstancesMetricContext("add_ssh_key", "") - err = gce.c.Projects().SetCommonInstanceMetadata(ctx, gce.projectID, project.CommonInstanceMetadata) + err = g.c.Projects().SetCommonInstanceMetadata(ctx, g.projectID, project.CommonInstanceMetadata) mc.Observe(err) if err != nil { @@ -274,18 +276,18 @@ func (gce *GCECloud) AddSSHKeyToAllInstances(ctx context.Context, user string, k } // GetAllCurrentZones returns all the zones in which k8s nodes are currently running -func (gce *GCECloud) GetAllCurrentZones() (sets.String, error) { - if gce.nodeInformerSynced == nil { - glog.Warningf("GCECloud object does not have informers set, should only happen in E2E binary.") - return gce.GetAllZonesFromCloudProvider() +func (g *Cloud) GetAllCurrentZones() (sets.String, error) { + if g.nodeInformerSynced == nil { + glog.Warningf("Cloud object does not have informers set, should only happen in E2E binary.") + return g.GetAllZonesFromCloudProvider() } - gce.nodeZonesLock.Lock() - defer gce.nodeZonesLock.Unlock() - if !gce.nodeInformerSynced() { + g.nodeZonesLock.Lock() + defer g.nodeZonesLock.Unlock() + if !g.nodeInformerSynced() { return nil, fmt.Errorf("node informer is not synced when trying to GetAllCurrentZones") } zones := sets.NewString() - for zone, nodes := range gce.nodeZones { + for zone, nodes := range g.nodeZones { if len(nodes) > 0 { zones.Insert(zone) } @@ -300,13 +302,13 @@ func (gce *GCECloud) GetAllCurrentZones() (sets.String, error) { // a non-k8s compute in us-central1-a. This func will return a,b, and c. // // TODO: this should be removed from the cloud provider. -func (gce *GCECloud) GetAllZonesFromCloudProvider() (sets.String, error) { +func (g *Cloud) GetAllZonesFromCloudProvider() (sets.String, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() zones := sets.NewString() - for _, zone := range gce.managedZones { - instances, err := gce.c.Instances().List(ctx, zone, filter.None) + for _, zone := range g.managedZones { + instances, err := g.c.Instances().List(ctx, zone, filter.None) if err != nil { return sets.NewString(), err } @@ -318,22 +320,22 @@ func (gce *GCECloud) GetAllZonesFromCloudProvider() (sets.String, error) { } // InsertInstance creates a new instance on GCP -func (gce *GCECloud) InsertInstance(project string, zone string, i *compute.Instance) error { +func (g *Cloud) InsertInstance(project string, zone string, i *compute.Instance) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newInstancesMetricContext("create", zone) - return mc.Observe(gce.c.Instances().Insert(ctx, meta.ZonalKey(i.Name, zone), i)) + return mc.Observe(g.c.Instances().Insert(ctx, meta.ZonalKey(i.Name, zone), i)) } // ListInstanceNames returns a string of instance names separated by spaces. // This method should only be used for e2e testing. // TODO: remove this method. -func (gce *GCECloud) ListInstanceNames(project, zone string) (string, error) { +func (g *Cloud) ListInstanceNames(project, zone string) (string, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() - l, err := gce.c.Instances().List(ctx, zone, filter.None) + l, err := g.c.Instances().List(ctx, zone, filter.None) if err != nil { return "", err } @@ -345,33 +347,34 @@ func (gce *GCECloud) ListInstanceNames(project, zone string) (string, error) { } // DeleteInstance deletes an instance specified by project, zone, and name -func (gce *GCECloud) DeleteInstance(project, zone, name string) error { +func (g *Cloud) DeleteInstance(project, zone, name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() - return gce.c.Instances().Delete(ctx, meta.ZonalKey(name, zone)) + return g.c.Instances().Delete(ctx, meta.ZonalKey(name, zone)) } -// Implementation of Instances.CurrentNodeName -func (gce *GCECloud) CurrentNodeName(ctx context.Context, hostname string) (types.NodeName, error) { +// CurrentNodeName returns the name of the node we are currently running on +// On most clouds (e.g. GCE) this is the hostname, so we provide the hostname +func (g *Cloud) CurrentNodeName(ctx context.Context, hostname string) (types.NodeName, error) { return types.NodeName(hostname), nil } // AliasRanges returns a list of CIDR ranges that are assigned to the // `node` for allocation to pods. Returns a list of the form // "/". -func (gce *GCECloud) AliasRanges(nodeName types.NodeName) (cidrs []string, err error) { +func (g *Cloud) AliasRanges(nodeName types.NodeName) (cidrs []string, err error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() var instance *gceInstance - instance, err = gce.getInstanceByName(mapNodeNameToInstanceName(nodeName)) + instance, err = g.getInstanceByName(mapNodeNameToInstanceName(nodeName)) if err != nil { return } var res *computebeta.Instance - res, err = gce.c.BetaInstances().Get(ctx, meta.ZonalKey(instance.Name, lastComponent(instance.Zone))) + res, err = g.c.BetaInstances().Get(ctx, meta.ZonalKey(instance.Name, lastComponent(instance.Zone))) if err != nil { return } @@ -386,15 +389,15 @@ func (gce *GCECloud) AliasRanges(nodeName types.NodeName) (cidrs []string, err e // AddAliasToInstance adds an alias to the given instance from the named // secondary range. -func (gce *GCECloud) AddAliasToInstance(nodeName types.NodeName, alias *net.IPNet) error { +func (g *Cloud) AddAliasToInstance(nodeName types.NodeName, alias *net.IPNet) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() - v1instance, err := gce.getInstanceByName(mapNodeNameToInstanceName(nodeName)) + v1instance, err := g.getInstanceByName(mapNodeNameToInstanceName(nodeName)) if err != nil { return err } - instance, err := gce.c.BetaInstances().Get(ctx, meta.ZonalKey(v1instance.Name, lastComponent(v1instance.Zone))) + instance, err := g.c.BetaInstances().Get(ctx, meta.ZonalKey(v1instance.Name, lastComponent(v1instance.Zone))) if err != nil { return err } @@ -413,38 +416,38 @@ func (gce *GCECloud) AddAliasToInstance(nodeName types.NodeName, alias *net.IPNe iface.Fingerprint = instance.NetworkInterfaces[0].Fingerprint iface.AliasIpRanges = append(iface.AliasIpRanges, &computebeta.AliasIpRange{ IpCidrRange: alias.String(), - SubnetworkRangeName: gce.secondaryRangeName, + SubnetworkRangeName: g.secondaryRangeName, }) mc := newInstancesMetricContext("add_alias", v1instance.Zone) - err = gce.c.BetaInstances().UpdateNetworkInterface(ctx, meta.ZonalKey(instance.Name, lastComponent(instance.Zone)), iface.Name, iface) + err = g.c.BetaInstances().UpdateNetworkInterface(ctx, meta.ZonalKey(instance.Name, lastComponent(instance.Zone)), iface.Name, iface) return mc.Observe(err) } // Gets the named instances, returning cloudprovider.InstanceNotFound if any // instance is not found -func (gce *GCECloud) getInstancesByNames(names []string) ([]*gceInstance, error) { +func (g *Cloud) getInstancesByNames(names []string) ([]*gceInstance, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() found := map[string]*gceInstance{} remaining := len(names) - nodeInstancePrefix := gce.nodeInstancePrefix + nodeInstancePrefix := g.nodeInstancePrefix for _, name := range names { name = canonicalizeInstanceName(name) - if !strings.HasPrefix(name, gce.nodeInstancePrefix) { - glog.Warningf("Instance %q does not conform to prefix %q, removing filter", name, gce.nodeInstancePrefix) + if !strings.HasPrefix(name, g.nodeInstancePrefix) { + glog.Warningf("Instance %q does not conform to prefix %q, removing filter", name, g.nodeInstancePrefix) nodeInstancePrefix = "" } found[name] = nil } - for _, zone := range gce.managedZones { + for _, zone := range g.managedZones { if remaining == 0 { break } - instances, err := gce.c.Instances().List(ctx, zone, filter.Regexp("name", nodeInstancePrefix+".*")) + instances, err := g.c.Instances().List(ctx, zone, filter.Regexp("name", nodeInstancePrefix+".*")) if err != nil { return nil, err } @@ -490,10 +493,10 @@ func (gce *GCECloud) getInstancesByNames(names []string) ([]*gceInstance, error) } // Gets the named instance, returning cloudprovider.InstanceNotFound if the instance is not found -func (gce *GCECloud) getInstanceByName(name string) (*gceInstance, error) { +func (g *Cloud) getInstanceByName(name string) (*gceInstance, error) { // Avoid changing behaviour when not managing multiple zones - for _, zone := range gce.managedZones { - instance, err := gce.getInstanceFromProjectInZoneByName(gce.projectID, zone, name) + for _, zone := range g.managedZones { + instance, err := g.getInstanceFromProjectInZoneByName(g.projectID, zone, name) if err != nil { if isHTTPErrorCode(err, http.StatusNotFound) { continue @@ -507,13 +510,13 @@ func (gce *GCECloud) getInstanceByName(name string) (*gceInstance, error) { return nil, cloudprovider.InstanceNotFound } -func (gce *GCECloud) getInstanceFromProjectInZoneByName(project, zone, name string) (*gceInstance, error) { +func (g *Cloud) getInstanceFromProjectInZoneByName(project, zone, name string) (*gceInstance, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() name = canonicalizeInstanceName(name) mc := newInstancesMetricContext("get", zone) - res, err := gce.c.Instances().Get(ctx, meta.ZonalKey(name, zone)) + res, err := g.c.Instances().Get(ctx, meta.ZonalKey(name, zone)) mc.Observe(err) if err != nil { return nil, err @@ -554,7 +557,7 @@ func getCurrentMachineTypeViaMetadata() (string, error) { // isCurrentInstance uses metadata server to check if specified // instanceID matches current machine's instanceID -func (gce *GCECloud) isCurrentInstance(instanceID string) bool { +func (g *Cloud) isCurrentInstance(instanceID string) bool { currentInstanceID, err := getInstanceIDViaMetadata() if err != nil { // Log and swallow error @@ -571,16 +574,16 @@ func (gce *GCECloud) isCurrentInstance(instanceID string) bool { // Invoking this method to get host tags is risky since it depends on the // format of the host names in the cluster. Only use it as a fallback if // gce.nodeTags is unspecified -func (gce *GCECloud) computeHostTags(hosts []*gceInstance) ([]string, error) { +func (g *Cloud) computeHostTags(hosts []*gceInstance) ([]string, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() // TODO: We could store the tags in gceInstance, so we could have already fetched it hostNamesByZone := make(map[string]map[string]bool) // map of zones -> map of names -> bool (for easy lookup) - nodeInstancePrefix := gce.nodeInstancePrefix + nodeInstancePrefix := g.nodeInstancePrefix for _, host := range hosts { - if !strings.HasPrefix(host.Name, gce.nodeInstancePrefix) { - glog.Warningf("instance %v does not conform to prefix '%s', ignoring filter", host, gce.nodeInstancePrefix) + if !strings.HasPrefix(host.Name, g.nodeInstancePrefix) { + glog.Warningf("instance %v does not conform to prefix '%s', ignoring filter", host, g.nodeInstancePrefix) nodeInstancePrefix = "" } @@ -599,7 +602,7 @@ func (gce *GCECloud) computeHostTags(hosts []*gceInstance) ([]string, error) { filt = filter.Regexp("name", nodeInstancePrefix+".*") } for zone, hostNames := range hostNamesByZone { - instances, err := gce.c.Instances().List(ctx, zone, filt) + instances, err := g.c.Instances().List(ctx, zone, filt) if err != nil { return nil, err } @@ -607,14 +610,14 @@ func (gce *GCECloud) computeHostTags(hosts []*gceInstance) ([]string, error) { if !hostNames[instance.Name] { continue } - longest_tag := "" + longestTag := "" for _, tag := range instance.Tags.Items { - if strings.HasPrefix(instance.Name, tag) && len(tag) > len(longest_tag) { - longest_tag = tag + if strings.HasPrefix(instance.Name, tag) && len(tag) > len(longestTag) { + longestTag = tag } } - if len(longest_tag) > 0 { - tags.Insert(longest_tag) + if len(longestTag) > 0 { + tags.Insert(longestTag) } else { return nil, fmt.Errorf("could not find any tag that is a prefix of instance name for instance %s", instance.Name) } @@ -629,35 +632,35 @@ func (gce *GCECloud) computeHostTags(hosts []*gceInstance) ([]string, error) { // GetNodeTags will first try returning the list of tags specified in GCE cloud Configuration. // If they weren't provided, it'll compute the host tags with the given hostnames. If the list // of hostnames has not changed, a cached set of nodetags are returned. -func (gce *GCECloud) GetNodeTags(nodeNames []string) ([]string, error) { +func (g *Cloud) GetNodeTags(nodeNames []string) ([]string, error) { // If nodeTags were specified through configuration, use them - if len(gce.nodeTags) > 0 { - return gce.nodeTags, nil + if len(g.nodeTags) > 0 { + return g.nodeTags, nil } - gce.computeNodeTagLock.Lock() - defer gce.computeNodeTagLock.Unlock() + g.computeNodeTagLock.Lock() + defer g.computeNodeTagLock.Unlock() // Early return if hosts have not changed hosts := sets.NewString(nodeNames...) - if hosts.Equal(gce.lastKnownNodeNames) { - return gce.lastComputedNodeTags, nil + if hosts.Equal(g.lastKnownNodeNames) { + return g.lastComputedNodeTags, nil } // Get GCE instance data by hostname - instances, err := gce.getInstancesByNames(nodeNames) + instances, err := g.getInstancesByNames(nodeNames) if err != nil { return nil, err } // Determine list of host tags - tags, err := gce.computeHostTags(instances) + tags, err := g.computeHostTags(instances) if err != nil { return nil, err } // Save the list of tags - gce.lastKnownNodeNames = hosts - gce.lastComputedNodeTags = tags + g.lastKnownNodeNames = hosts + g.lastComputedNodeTags = tags return tags, nil } diff --git a/pkg/cloudprovider/providers/gce/gce_loadbalancer.go b/pkg/cloudprovider/providers/gce/gce_loadbalancer.go index da8819d93cc..b6e55d6e9dd 100644 --- a/pkg/cloudprovider/providers/gce/gce_loadbalancer.go +++ b/pkg/cloudprovider/providers/gce/gce_loadbalancer.go @@ -87,9 +87,9 @@ func LoadBalancerSrcRanges() []string { } // GetLoadBalancer is an implementation of LoadBalancer.GetLoadBalancer -func (gce *GCECloud) GetLoadBalancer(ctx context.Context, clusterName string, svc *v1.Service) (*v1.LoadBalancerStatus, bool, error) { - loadBalancerName := gce.GetLoadBalancerName(ctx, clusterName, svc) - fwd, err := gce.GetRegionForwardingRule(loadBalancerName, gce.region) +func (g *Cloud) GetLoadBalancer(ctx context.Context, clusterName string, svc *v1.Service) (*v1.LoadBalancerStatus, bool, error) { + loadBalancerName := g.GetLoadBalancerName(ctx, clusterName, svc) + fwd, err := g.GetRegionForwardingRule(loadBalancerName, g.region) if err == nil { status := &v1.LoadBalancerStatus{} status.Ingress = []v1.LoadBalancerIngress{{IP: fwd.IPAddress}} @@ -100,23 +100,23 @@ func (gce *GCECloud) GetLoadBalancer(ctx context.Context, clusterName string, sv } // GetLoadBalancerName is an implementation of LoadBalancer.GetLoadBalancerName. -func (gce *GCECloud) GetLoadBalancerName(ctx context.Context, clusterName string, svc *v1.Service) string { +func (g *Cloud) GetLoadBalancerName(ctx context.Context, clusterName string, svc *v1.Service) string { // TODO: replace DefaultLoadBalancerName to generate more meaningful loadbalancer names. return cloudprovider.DefaultLoadBalancerName(svc) } // EnsureLoadBalancer is an implementation of LoadBalancer.EnsureLoadBalancer. -func (gce *GCECloud) EnsureLoadBalancer(ctx context.Context, clusterName string, svc *v1.Service, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) { - loadBalancerName := gce.GetLoadBalancerName(ctx, clusterName, svc) +func (g *Cloud) EnsureLoadBalancer(ctx context.Context, clusterName string, svc *v1.Service, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) { + loadBalancerName := g.GetLoadBalancerName(ctx, clusterName, svc) desiredScheme := getSvcScheme(svc) - clusterID, err := gce.ClusterID.GetID() + clusterID, err := g.ClusterID.GetID() if err != nil { return nil, err } - glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v): ensure %v loadbalancer", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, desiredScheme) + glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v): ensure %v loadbalancer", clusterName, svc.Namespace, svc.Name, loadBalancerName, g.region, desiredScheme) - existingFwdRule, err := gce.GetRegionForwardingRule(loadBalancerName, gce.region) + existingFwdRule, err := g.GetRegionForwardingRule(loadBalancerName, g.region) if err != nil && !isNotFound(err) { return nil, err } @@ -126,14 +126,14 @@ func (gce *GCECloud) EnsureLoadBalancer(ctx context.Context, clusterName string, // If the loadbalancer type changes between INTERNAL and EXTERNAL, the old load balancer should be deleted. if existingScheme != desiredScheme { - glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v): deleting existing %v loadbalancer", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, existingScheme) + glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v): deleting existing %v loadbalancer", clusterName, svc.Namespace, svc.Name, loadBalancerName, g.region, existingScheme) switch existingScheme { case cloud.SchemeInternal: - err = gce.ensureInternalLoadBalancerDeleted(clusterName, clusterID, svc) + err = g.ensureInternalLoadBalancerDeleted(clusterName, clusterID, svc) default: - err = gce.ensureExternalLoadBalancerDeleted(clusterName, clusterID, svc) + err = g.ensureExternalLoadBalancerDeleted(clusterName, clusterID, svc) } - glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v): done deleting existing %v loadbalancer. err: %v", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, existingScheme, err) + glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v): done deleting existing %v loadbalancer. err: %v", clusterName, svc.Namespace, svc.Name, loadBalancerName, g.region, existingScheme, err) if err != nil { return nil, err } @@ -146,53 +146,53 @@ func (gce *GCECloud) EnsureLoadBalancer(ctx context.Context, clusterName string, var status *v1.LoadBalancerStatus switch desiredScheme { case cloud.SchemeInternal: - status, err = gce.ensureInternalLoadBalancer(clusterName, clusterID, svc, existingFwdRule, nodes) + status, err = g.ensureInternalLoadBalancer(clusterName, clusterID, svc, existingFwdRule, nodes) default: - status, err = gce.ensureExternalLoadBalancer(clusterName, clusterID, svc, existingFwdRule, nodes) + status, err = g.ensureExternalLoadBalancer(clusterName, clusterID, svc, existingFwdRule, nodes) } - glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v): done ensuring loadbalancer. err: %v", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, err) + glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v): done ensuring loadbalancer. err: %v", clusterName, svc.Namespace, svc.Name, loadBalancerName, g.region, err) return status, err } // UpdateLoadBalancer is an implementation of LoadBalancer.UpdateLoadBalancer. -func (gce *GCECloud) UpdateLoadBalancer(ctx context.Context, clusterName string, svc *v1.Service, nodes []*v1.Node) error { - loadBalancerName := gce.GetLoadBalancerName(ctx, clusterName, svc) +func (g *Cloud) UpdateLoadBalancer(ctx context.Context, clusterName string, svc *v1.Service, nodes []*v1.Node) error { + loadBalancerName := g.GetLoadBalancerName(ctx, clusterName, svc) scheme := getSvcScheme(svc) - clusterID, err := gce.ClusterID.GetID() + clusterID, err := g.ClusterID.GetID() if err != nil { return err } - glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v, %v, %v): updating with %d nodes", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, len(nodes)) + glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v, %v, %v): updating with %d nodes", clusterName, svc.Namespace, svc.Name, loadBalancerName, g.region, len(nodes)) switch scheme { case cloud.SchemeInternal: - err = gce.updateInternalLoadBalancer(clusterName, clusterID, svc, nodes) + err = g.updateInternalLoadBalancer(clusterName, clusterID, svc, nodes) default: - err = gce.updateExternalLoadBalancer(clusterName, svc, nodes) + err = g.updateExternalLoadBalancer(clusterName, svc, nodes) } - glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v, %v, %v): done updating. err: %v", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, err) + glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v, %v, %v): done updating. err: %v", clusterName, svc.Namespace, svc.Name, loadBalancerName, g.region, err) return err } // EnsureLoadBalancerDeleted is an implementation of LoadBalancer.EnsureLoadBalancerDeleted. -func (gce *GCECloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterName string, svc *v1.Service) error { - loadBalancerName := gce.GetLoadBalancerName(ctx, clusterName, svc) +func (g *Cloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterName string, svc *v1.Service) error { + loadBalancerName := g.GetLoadBalancerName(ctx, clusterName, svc) scheme := getSvcScheme(svc) - clusterID, err := gce.ClusterID.GetID() + clusterID, err := g.ClusterID.GetID() if err != nil { return err } - glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v, %v, %v, %v): deleting loadbalancer", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region) + glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v, %v, %v, %v): deleting loadbalancer", clusterName, svc.Namespace, svc.Name, loadBalancerName, g.region) switch scheme { case cloud.SchemeInternal: - err = gce.ensureInternalLoadBalancerDeleted(clusterName, clusterID, svc) + err = g.ensureInternalLoadBalancerDeleted(clusterName, clusterID, svc) default: - err = gce.ensureExternalLoadBalancerDeleted(clusterName, clusterID, svc) + err = g.ensureExternalLoadBalancerDeleted(clusterName, clusterID, svc) } - glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v, %v, %v, %v): done deleting loadbalancer. err: %v", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, err) + glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v, %v, %v, %v): done deleting loadbalancer. err: %v", clusterName, svc.Namespace, svc.Name, loadBalancerName, g.region, err) return err } diff --git a/pkg/cloudprovider/providers/gce/gce_loadbalancer_external.go b/pkg/cloudprovider/providers/gce/gce_loadbalancer_external.go index 4efea8ab974..62531716662 100644 --- a/pkg/cloudprovider/providers/gce/gce_loadbalancer_external.go +++ b/pkg/cloudprovider/providers/gce/gce_loadbalancer_external.go @@ -44,19 +44,19 @@ import ( // Due to an interesting series of design decisions, this handles both creating // new load balancers and updating existing load balancers, recognizing when // each is needed. -func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID string, apiService *v1.Service, existingFwdRule *compute.ForwardingRule, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) { +func (g *Cloud) ensureExternalLoadBalancer(clusterName string, clusterID string, apiService *v1.Service, existingFwdRule *compute.ForwardingRule, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) { if len(nodes) == 0 { return nil, fmt.Errorf("Cannot EnsureLoadBalancer() with no hosts") } hostNames := nodeNames(nodes) supportsNodesHealthCheck := supportsNodesHealthCheck(nodes) - hosts, err := gce.getInstancesByNames(hostNames) + hosts, err := g.getInstancesByNames(hostNames) if err != nil { return nil, err } - loadBalancerName := gce.GetLoadBalancerName(context.TODO(), clusterName, apiService) + loadBalancerName := g.GetLoadBalancerName(context.TODO(), clusterName, apiService) requestedIP := apiService.Spec.LoadBalancerIP ports := apiService.Spec.Ports portStr := []string{} @@ -66,22 +66,22 @@ func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID st serviceName := types.NamespacedName{Namespace: apiService.Namespace, Name: apiService.Name} lbRefStr := fmt.Sprintf("%v(%v)", loadBalancerName, serviceName) - glog.V(2).Infof("ensureExternalLoadBalancer(%s, %v, %v, %v, %v, %v)", lbRefStr, gce.region, requestedIP, portStr, hostNames, apiService.Annotations) + glog.V(2).Infof("ensureExternalLoadBalancer(%s, %v, %v, %v, %v, %v)", lbRefStr, g.region, requestedIP, portStr, hostNames, apiService.Annotations) // Check the current and the desired network tiers. If they do not match, // tear down the existing resources with the wrong tier. - netTier, err := gce.getServiceNetworkTier(apiService) + netTier, err := g.getServiceNetworkTier(apiService) if err != nil { glog.Errorf("ensureExternalLoadBalancer(%s): Failed to get the desired network tier: %v.", lbRefStr, err) return nil, err } glog.V(4).Infof("ensureExternalLoadBalancer(%s): Desired network tier %q.", lbRefStr, netTier) - if gce.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) { - gce.deleteWrongNetworkTieredResources(loadBalancerName, lbRefStr, netTier) + if g.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) { + g.deleteWrongNetworkTieredResources(loadBalancerName, lbRefStr, netTier) } // Check if the forwarding rule exists, and if so, what its IP is. - fwdRuleExists, fwdRuleNeedsUpdate, fwdRuleIP, err := gce.forwardingRuleNeedsUpdate(loadBalancerName, gce.region, requestedIP, ports) + fwdRuleExists, fwdRuleNeedsUpdate, fwdRuleIP, err := g.forwardingRuleNeedsUpdate(loadBalancerName, g.region, requestedIP, ports) if err != nil { return nil, err } @@ -120,22 +120,22 @@ func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID st return } if isSafeToReleaseIP { - if err := gce.DeleteRegionAddress(loadBalancerName, gce.region); err != nil && !isNotFound(err) { - glog.Errorf("ensureExternalLoadBalancer(%s): Failed to release static IP %s in region %v: %v.", lbRefStr, ipAddressToUse, gce.region, err) + if err := g.DeleteRegionAddress(loadBalancerName, g.region); err != nil && !isNotFound(err) { + glog.Errorf("ensureExternalLoadBalancer(%s): Failed to release static IP %s in region %v: %v.", lbRefStr, ipAddressToUse, g.region, err) } else if isNotFound(err) { glog.V(2).Infof("ensureExternalLoadBalancer(%s): IP address %s is not reserved.", lbRefStr, ipAddressToUse) } else { glog.Infof("ensureExternalLoadBalancer(%s): Released static IP %s.", lbRefStr, ipAddressToUse) } } else { - glog.Warningf("ensureExternalLoadBalancer(%s): Orphaning static IP %s in region %v: %v.", lbRefStr, ipAddressToUse, gce.region, err) + glog.Warningf("ensureExternalLoadBalancer(%s): Orphaning static IP %s in region %v: %v.", lbRefStr, ipAddressToUse, g.region, err) } }() if requestedIP != "" { // If user requests a specific IP address, verify first. No mutation to // the GCE resources will be performed in the verification process. - isUserOwnedIP, err = verifyUserRequestedIP(gce, gce.region, requestedIP, fwdRuleIP, lbRefStr, netTier) + isUserOwnedIP, err = verifyUserRequestedIP(g, g.region, requestedIP, fwdRuleIP, lbRefStr, netTier) if err != nil { return nil, err } @@ -145,7 +145,7 @@ func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID st if !isUserOwnedIP { // If we are not using the user-owned IP, either promote the // emphemeral IP used by the fwd rule, or create a new static IP. - ipAddr, existed, err := ensureStaticIP(gce, loadBalancerName, serviceName.String(), gce.region, fwdRuleIP, netTier) + ipAddr, existed, err := ensureStaticIP(g, loadBalancerName, serviceName.String(), g.region, fwdRuleIP, netTier) if err != nil { return nil, fmt.Errorf("failed to ensure a static IP for load balancer (%s): %v", lbRefStr, err) } @@ -167,7 +167,7 @@ func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID st return nil, err } - firewallExists, firewallNeedsUpdate, err := gce.firewallNeedsUpdate(loadBalancerName, serviceName.String(), gce.region, ipAddressToUse, ports, sourceRanges) + firewallExists, firewallNeedsUpdate, err := g.firewallNeedsUpdate(loadBalancerName, serviceName.String(), g.region, ipAddressToUse, ports, sourceRanges) if err != nil { return nil, err } @@ -178,20 +178,20 @@ func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID st // without needing to be deleted and recreated. if firewallExists { glog.Infof("ensureExternalLoadBalancer(%s): Updating firewall.", lbRefStr) - if err := gce.updateFirewall(apiService, MakeFirewallName(loadBalancerName), gce.region, desc, sourceRanges, ports, hosts); err != nil { + if err := g.updateFirewall(apiService, MakeFirewallName(loadBalancerName), g.region, desc, sourceRanges, ports, hosts); err != nil { return nil, err } glog.Infof("ensureExternalLoadBalancer(%s): Updated firewall.", lbRefStr) } else { glog.Infof("ensureExternalLoadBalancer(%s): Creating firewall.", lbRefStr) - if err := gce.createFirewall(apiService, MakeFirewallName(loadBalancerName), gce.region, desc, sourceRanges, ports, hosts); err != nil { + if err := g.createFirewall(apiService, MakeFirewallName(loadBalancerName), g.region, desc, sourceRanges, ports, hosts); err != nil { return nil, err } glog.Infof("ensureExternalLoadBalancer(%s): Created firewall.", lbRefStr) } } - tpExists, tpNeedsRecreation, err := gce.targetPoolNeedsRecreation(loadBalancerName, gce.region, apiService.Spec.SessionAffinity) + tpExists, tpNeedsRecreation, err := g.targetPoolNeedsRecreation(loadBalancerName, g.region, apiService.Spec.SessionAffinity) if err != nil { return nil, err } @@ -202,7 +202,7 @@ func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID st // Check which health check needs to create and which health check needs to delete. // Health check management is coupled with target pool operation to prevent leaking. var hcToCreate, hcToDelete *compute.HttpHealthCheck - hcLocalTrafficExisting, err := gce.GetHttpHealthCheck(loadBalancerName) + hcLocalTrafficExisting, err := g.GetHTTPHealthCheck(loadBalancerName) if err != nil && !isHTTPErrorCode(err, http.StatusNotFound) { return nil, fmt.Errorf("error checking HTTP health check for load balancer (%s): %v", lbRefStr, err) } @@ -214,11 +214,11 @@ func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID st // target pool to use local traffic health check. glog.V(2).Infof("ensureExternalLoadBalancer(%s): Updating from nodes health checks to local traffic health checks.", lbRefStr) if supportsNodesHealthCheck { - hcToDelete = makeHttpHealthCheck(MakeNodesHealthCheckName(clusterID), GetNodesHealthCheckPath(), GetNodesHealthCheckPort()) + hcToDelete = makeHTTPHealthCheck(MakeNodesHealthCheckName(clusterID), GetNodesHealthCheckPath(), GetNodesHealthCheckPort()) } tpNeedsRecreation = true } - hcToCreate = makeHttpHealthCheck(loadBalancerName, path, healthCheckNodePort) + hcToCreate = makeHTTPHealthCheck(loadBalancerName, path, healthCheckNodePort) } else { glog.V(4).Infof("ensureExternalLoadBalancer(%s): Service needs nodes health checks.", lbRefStr) if hcLocalTrafficExisting != nil { @@ -230,7 +230,7 @@ func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID st tpNeedsRecreation = true } if supportsNodesHealthCheck { - hcToCreate = makeHttpHealthCheck(MakeNodesHealthCheckName(clusterID), GetNodesHealthCheckPath(), GetNodesHealthCheckPort()) + hcToCreate = makeHTTPHealthCheck(MakeNodesHealthCheckName(clusterID), GetNodesHealthCheckPath(), GetNodesHealthCheckPort()) } } // Now we get to some slightly more interesting logic. @@ -245,19 +245,19 @@ func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID st // and something should fail before we recreate it, don't release the // IP. That way we can come back to it later. isSafeToReleaseIP = false - if err := gce.DeleteRegionForwardingRule(loadBalancerName, gce.region); err != nil && !isNotFound(err) { + if err := g.DeleteRegionForwardingRule(loadBalancerName, g.region); err != nil && !isNotFound(err) { return nil, fmt.Errorf("failed to delete existing forwarding rule for load balancer (%s) update: %v", lbRefStr, err) } glog.Infof("ensureExternalLoadBalancer(%s): Deleted forwarding rule.", lbRefStr) } - if err := gce.ensureTargetPoolAndHealthCheck(tpExists, tpNeedsRecreation, apiService, loadBalancerName, clusterID, ipAddressToUse, hosts, hcToCreate, hcToDelete); err != nil { + if err := g.ensureTargetPoolAndHealthCheck(tpExists, tpNeedsRecreation, apiService, loadBalancerName, clusterID, ipAddressToUse, hosts, hcToCreate, hcToDelete); err != nil { return nil, err } if tpNeedsRecreation || fwdRuleNeedsUpdate { glog.Infof("ensureExternalLoadBalancer(%s): Creating forwarding rule, IP %s (tier: %s).", lbRefStr, ipAddressToUse, netTier) - if err := createForwardingRule(gce, loadBalancerName, serviceName.String(), gce.region, ipAddressToUse, gce.targetPoolURL(loadBalancerName), ports, netTier); err != nil { + if err := createForwardingRule(g, loadBalancerName, serviceName.String(), g.region, ipAddressToUse, g.targetPoolURL(loadBalancerName), ports, netTier); err != nil { return nil, fmt.Errorf("failed to create forwarding rule for load balancer (%s): %v", lbRefStr, err) } // End critical section. It is safe to release the static IP (which @@ -275,25 +275,25 @@ func (gce *GCECloud) ensureExternalLoadBalancer(clusterName string, clusterID st } // updateExternalLoadBalancer is the external implementation of LoadBalancer.UpdateLoadBalancer. -func (gce *GCECloud) updateExternalLoadBalancer(clusterName string, service *v1.Service, nodes []*v1.Node) error { - hosts, err := gce.getInstancesByNames(nodeNames(nodes)) +func (g *Cloud) updateExternalLoadBalancer(clusterName string, service *v1.Service, nodes []*v1.Node) error { + hosts, err := g.getInstancesByNames(nodeNames(nodes)) if err != nil { return err } - loadBalancerName := gce.GetLoadBalancerName(context.TODO(), clusterName, service) - return gce.updateTargetPool(loadBalancerName, hosts) + loadBalancerName := g.GetLoadBalancerName(context.TODO(), clusterName, service) + return g.updateTargetPool(loadBalancerName, hosts) } // ensureExternalLoadBalancerDeleted is the external implementation of LoadBalancer.EnsureLoadBalancerDeleted -func (gce *GCECloud) ensureExternalLoadBalancerDeleted(clusterName, clusterID string, service *v1.Service) error { - loadBalancerName := gce.GetLoadBalancerName(context.TODO(), clusterName, service) +func (g *Cloud) ensureExternalLoadBalancerDeleted(clusterName, clusterID string, service *v1.Service) error { + loadBalancerName := g.GetLoadBalancerName(context.TODO(), clusterName, service) serviceName := types.NamespacedName{Namespace: service.Namespace, Name: service.Name} lbRefStr := fmt.Sprintf("%v(%v)", loadBalancerName, serviceName) var hcNames []string if path, _ := apiservice.GetServiceHealthCheckPathPort(service); path != "" { - hcToDelete, err := gce.GetHttpHealthCheck(loadBalancerName) + hcToDelete, err := g.GetHTTPHealthCheck(loadBalancerName) if err != nil && !isHTTPErrorCode(err, http.StatusNotFound) { glog.Infof("ensureExternalLoadBalancerDeleted(%s): Failed to retrieve health check:%v.", lbRefStr, err) return err @@ -315,10 +315,10 @@ func (gce *GCECloud) ensureExternalLoadBalancerDeleted(clusterName, clusterID st func() error { glog.Infof("ensureExternalLoadBalancerDeleted(%s): Deleting firewall rule.", lbRefStr) fwName := MakeFirewallName(loadBalancerName) - err := ignoreNotFound(gce.DeleteFirewall(fwName)) - if isForbidden(err) && gce.OnXPN() { + err := ignoreNotFound(g.DeleteFirewall(fwName)) + if isForbidden(err) && g.OnXPN() { glog.V(4).Infof("ensureExternalLoadBalancerDeleted(%s): Do not have permission to delete firewall rule %v (on XPN). Raising event.", lbRefStr, fwName) - gce.raiseFirewallChangeNeededEvent(service, FirewallToGCloudDeleteCmd(fwName, gce.NetworkProjectID())) + g.raiseFirewallChangeNeededEvent(service, FirewallToGCloudDeleteCmd(fwName, g.NetworkProjectID())) return nil } return err @@ -328,17 +328,17 @@ func (gce *GCECloud) ensureExternalLoadBalancerDeleted(clusterName, clusterID st // creation/update attempt, so make sure we clean it up here just in case. func() error { glog.Infof("ensureExternalLoadBalancerDeleted(%s): Deleting IP address.", lbRefStr) - return ignoreNotFound(gce.DeleteRegionAddress(loadBalancerName, gce.region)) + return ignoreNotFound(g.DeleteRegionAddress(loadBalancerName, g.region)) }, func() error { glog.Infof("ensureExternalLoadBalancerDeleted(%s): Deleting forwarding rule.", lbRefStr) // The forwarding rule must be deleted before either the target pool can, // unfortunately, so we have to do these two serially. - if err := ignoreNotFound(gce.DeleteRegionForwardingRule(loadBalancerName, gce.region)); err != nil { + if err := ignoreNotFound(g.DeleteRegionForwardingRule(loadBalancerName, g.region)); err != nil { return err } glog.Infof("ensureExternalLoadBalancerDeleted(%s): Deleting target pool.", lbRefStr) - if err := gce.DeleteExternalTargetPoolAndChecks(service, loadBalancerName, gce.region, clusterID, hcNames...); err != nil { + if err := g.DeleteExternalTargetPoolAndChecks(service, loadBalancerName, g.region, clusterID, hcNames...); err != nil { return err } return nil @@ -350,11 +350,12 @@ func (gce *GCECloud) ensureExternalLoadBalancerDeleted(clusterName, clusterID st return nil } -func (gce *GCECloud) DeleteExternalTargetPoolAndChecks(service *v1.Service, name, region, clusterID string, hcNames ...string) error { +// DeleteExternalTargetPoolAndChecks Deletes an external load balancer pool and verifies the operation +func (g *Cloud) DeleteExternalTargetPoolAndChecks(service *v1.Service, name, region, clusterID string, hcNames ...string) error { serviceName := types.NamespacedName{Namespace: service.Namespace, Name: service.Name} lbRefStr := fmt.Sprintf("%v(%v)", name, serviceName) - if err := gce.DeleteTargetPool(name, region); err != nil && isHTTPErrorCode(err, http.StatusNotFound) { + if err := g.DeleteTargetPool(name, region); err != nil && isHTTPErrorCode(err, http.StatusNotFound) { glog.Infof("DeleteExternalTargetPoolAndChecks(%v): Target pool already deleted. Continuing to delete other resources.", lbRefStr) } else if err != nil { glog.Warningf("DeleteExternalTargetPoolAndChecks(%v): Failed to delete target pool, got error %s.", lbRefStr, err.Error()) @@ -369,11 +370,11 @@ func (gce *GCECloud) DeleteExternalTargetPoolAndChecks(service *v1.Service, name if isNodesHealthCheck { // Lock to prevent deleting necessary nodes health check before it gets attached // to target pool. - gce.sharedResourceLock.Lock() - defer gce.sharedResourceLock.Unlock() + g.sharedResourceLock.Lock() + defer g.sharedResourceLock.Unlock() } glog.Infof("DeleteExternalTargetPoolAndChecks(%v): Deleting health check %v.", lbRefStr, hcName) - if err := gce.DeleteHttpHealthCheck(hcName); err != nil { + if err := g.DeleteHTTPHealthCheck(hcName); err != nil { // Delete nodes health checks will fail if any other target pool is using it. if isInUsedByError(err) { glog.V(4).Infof("DeleteExternalTargetPoolAndChecks(%v): Health check %v is in used: %v.", lbRefStr, hcName, err) @@ -395,10 +396,10 @@ func (gce *GCECloud) DeleteExternalTargetPoolAndChecks(service *v1.Service, name // So we should delete the health check firewall as well. fwName := MakeHealthCheckFirewallName(clusterID, hcName, isNodesHealthCheck) glog.Infof("DeleteExternalTargetPoolAndChecks(%v): Deleting health check firewall %v.", lbRefStr, fwName) - if err := ignoreNotFound(gce.DeleteFirewall(fwName)); err != nil { - if isForbidden(err) && gce.OnXPN() { + if err := ignoreNotFound(g.DeleteFirewall(fwName)); err != nil { + if isForbidden(err) && g.OnXPN() { glog.V(4).Infof("DeleteExternalTargetPoolAndChecks(%v): Do not have permission to delete firewall rule %v (on XPN). Raising event.", lbRefStr, fwName) - gce.raiseFirewallChangeNeededEvent(service, FirewallToGCloudDeleteCmd(fwName, gce.NetworkProjectID())) + g.raiseFirewallChangeNeededEvent(service, FirewallToGCloudDeleteCmd(fwName, g.NetworkProjectID())) return nil } return err @@ -462,7 +463,7 @@ func verifyUserRequestedIP(s CloudAddressService, region, requestedIP, fwdRuleIP return false, fmt.Errorf("requested ip %q is neither static nor assigned to the LB", requestedIP) } -func (gce *GCECloud) ensureTargetPoolAndHealthCheck(tpExists, tpNeedsRecreation bool, svc *v1.Service, loadBalancerName, clusterID, ipAddressToUse string, hosts []*gceInstance, hcToCreate, hcToDelete *compute.HttpHealthCheck) error { +func (g *Cloud) ensureTargetPoolAndHealthCheck(tpExists, tpNeedsRecreation bool, svc *v1.Service, loadBalancerName, clusterID, ipAddressToUse string, hosts []*gceInstance, hcToCreate, hcToDelete *compute.HttpHealthCheck) error { serviceName := types.NamespacedName{Namespace: svc.Namespace, Name: svc.Name} lbRefStr := fmt.Sprintf("%v(%v)", loadBalancerName, serviceName) @@ -472,7 +473,7 @@ func (gce *GCECloud) ensureTargetPoolAndHealthCheck(tpExists, tpNeedsRecreation if hcToDelete != nil { hcNames = append(hcNames, hcToDelete.Name) } - if err := gce.DeleteExternalTargetPoolAndChecks(svc, loadBalancerName, gce.region, clusterID, hcNames...); err != nil { + if err := g.DeleteExternalTargetPoolAndChecks(svc, loadBalancerName, g.region, clusterID, hcNames...); err != nil { return fmt.Errorf("failed to delete existing target pool for load balancer (%s) update: %v", lbRefStr, err) } glog.Infof("ensureTargetPoolAndHealthCheck(%s): Deleted target pool.", lbRefStr) @@ -484,7 +485,7 @@ func (gce *GCECloud) ensureTargetPoolAndHealthCheck(tpExists, tpNeedsRecreation if len(hosts) > maxTargetPoolCreateInstances { createInstances = createInstances[:maxTargetPoolCreateInstances] } - if err := gce.createTargetPoolAndHealthCheck(svc, loadBalancerName, serviceName.String(), ipAddressToUse, gce.region, clusterID, createInstances, hcToCreate); err != nil { + if err := g.createTargetPoolAndHealthCheck(svc, loadBalancerName, serviceName.String(), ipAddressToUse, g.region, clusterID, createInstances, hcToCreate); err != nil { return fmt.Errorf("failed to create target pool for load balancer (%s): %v", lbRefStr, err) } if hcToCreate != nil { @@ -494,19 +495,19 @@ func (gce *GCECloud) ensureTargetPoolAndHealthCheck(tpExists, tpNeedsRecreation glog.Infof("ensureTargetPoolAndHealthCheck(%s): Created target pool.", lbRefStr) } else { glog.Infof("ensureTargetPoolAndHealthCheck(%s): Created initial target pool (now updating the remaining %d hosts).", lbRefStr, len(hosts)-maxTargetPoolCreateInstances) - if err := gce.updateTargetPool(loadBalancerName, hosts); err != nil { + if err := g.updateTargetPool(loadBalancerName, hosts); err != nil { return fmt.Errorf("failed to update target pool for load balancer (%s): %v", lbRefStr, err) } glog.Infof("ensureTargetPoolAndHealthCheck(%s): Updated target pool (with %d hosts).", lbRefStr, len(hosts)-maxTargetPoolCreateInstances) } } else if tpExists { // Ensure hosts are updated even if there is no other changes required on target pool. - if err := gce.updateTargetPool(loadBalancerName, hosts); err != nil { + if err := g.updateTargetPool(loadBalancerName, hosts); err != nil { return fmt.Errorf("failed to update target pool for load balancer (%s): %v", lbRefStr, err) } glog.Infof("ensureTargetPoolAndHealthCheck(%s): Updated target pool (with %d hosts).", lbRefStr, len(hosts)) if hcToCreate != nil { - if hc, err := gce.ensureHttpHealthCheck(hcToCreate.Name, hcToCreate.RequestPath, int32(hcToCreate.Port)); err != nil || hc == nil { + if hc, err := g.ensureHTTPHealthCheck(hcToCreate.Name, hcToCreate.RequestPath, int32(hcToCreate.Port)); err != nil || hc == nil { return fmt.Errorf("Failed to ensure health check for %v port %d path %v: %v", loadBalancerName, hcToCreate.Port, hcToCreate.RequestPath, err) } } @@ -517,7 +518,7 @@ func (gce *GCECloud) ensureTargetPoolAndHealthCheck(tpExists, tpNeedsRecreation return nil } -func (gce *GCECloud) createTargetPoolAndHealthCheck(svc *v1.Service, name, serviceName, ipAddress, region, clusterID string, hosts []*gceInstance, hc *compute.HttpHealthCheck) error { +func (g *Cloud) createTargetPoolAndHealthCheck(svc *v1.Service, name, serviceName, ipAddress, region, clusterID string, hosts []*gceInstance, hc *compute.HttpHealthCheck) error { // health check management is coupled with targetPools to prevent leaks. A // target pool is the only thing that requires a health check, so we delete // associated checks on teardown, and ensure checks on setup. @@ -527,16 +528,16 @@ func (gce *GCECloud) createTargetPoolAndHealthCheck(svc *v1.Service, name, servi isNodesHealthCheck := hc.Name != name if isNodesHealthCheck { // Lock to prevent necessary nodes health check / firewall gets deleted. - gce.sharedResourceLock.Lock() - defer gce.sharedResourceLock.Unlock() + g.sharedResourceLock.Lock() + defer g.sharedResourceLock.Unlock() } - if err := gce.ensureHttpHealthCheckFirewall(svc, serviceName, ipAddress, region, clusterID, hosts, hc.Name, int32(hc.Port), isNodesHealthCheck); err != nil { + if err := g.ensureHTTPHealthCheckFirewall(svc, serviceName, ipAddress, region, clusterID, hosts, hc.Name, int32(hc.Port), isNodesHealthCheck); err != nil { return err } var err error hcRequestPath, hcPort := hc.RequestPath, hc.Port - if hc, err = gce.ensureHttpHealthCheck(hc.Name, hc.RequestPath, int32(hc.Port)); err != nil || hc == nil { + if hc, err = g.ensureHTTPHealthCheck(hc.Name, hc.RequestPath, int32(hc.Port)); err != nil || hc == nil { return fmt.Errorf("Failed to ensure health check for %v port %d path %v: %v", name, hcPort, hcRequestPath, err) } hcLinks = append(hcLinks, hc.SelfLink) @@ -555,14 +556,14 @@ func (gce *GCECloud) createTargetPoolAndHealthCheck(svc *v1.Service, name, servi HealthChecks: hcLinks, } - if err := gce.CreateTargetPool(pool, region); err != nil && !isHTTPErrorCode(err, http.StatusConflict) { + if err := g.CreateTargetPool(pool, region); err != nil && !isHTTPErrorCode(err, http.StatusConflict) { return err } return nil } -func (gce *GCECloud) updateTargetPool(loadBalancerName string, hosts []*gceInstance) error { - pool, err := gce.GetTargetPool(loadBalancerName, gce.region) +func (g *Cloud) updateTargetPool(loadBalancerName string, hosts []*gceInstance) error { + pool, err := g.GetTargetPool(loadBalancerName, g.region) if err != nil { return err } @@ -585,13 +586,13 @@ func (gce *GCECloud) updateTargetPool(loadBalancerName string, hosts []*gceInsta } if len(toAdd) > 0 { - if err := gce.AddInstancesToTargetPool(loadBalancerName, gce.region, toAdd); err != nil { + if err := g.AddInstancesToTargetPool(loadBalancerName, g.region, toAdd); err != nil { return err } } if len(toRemove) > 0 { - if err := gce.RemoveInstancesFromTargetPool(loadBalancerName, gce.region, toRemove); err != nil { + if err := g.RemoveInstancesFromTargetPool(loadBalancerName, g.region, toRemove); err != nil { return err } } @@ -599,7 +600,7 @@ func (gce *GCECloud) updateTargetPool(loadBalancerName string, hosts []*gceInsta // Try to verify that the correct number of nodes are now in the target pool. // We've been bitten by a bug here before (#11327) where all nodes were // accidentally removed and want to make similar problems easier to notice. - updatedPool, err := gce.GetTargetPool(loadBalancerName, gce.region) + updatedPool, err := g.GetTargetPool(loadBalancerName, g.region) if err != nil { return err } @@ -611,11 +612,11 @@ func (gce *GCECloud) updateTargetPool(loadBalancerName string, hosts []*gceInsta return nil } -func (gce *GCECloud) targetPoolURL(name string) string { - return gce.service.BasePath + strings.Join([]string{gce.projectID, "regions", gce.region, "targetPools", name}, "/") +func (g *Cloud) targetPoolURL(name string) string { + return g.service.BasePath + strings.Join([]string{g.projectID, "regions", g.region, "targetPools", name}, "/") } -func makeHttpHealthCheck(name, path string, port int32) *compute.HttpHealthCheck { +func makeHTTPHealthCheck(name, path string, port int32) *compute.HttpHealthCheck { return &compute.HttpHealthCheck{ Name: name, Port: int64(port), @@ -629,13 +630,13 @@ func makeHttpHealthCheck(name, path string, port int32) *compute.HttpHealthCheck } } -// mergeHttpHealthChecks reconciles HttpHealthCheck configures to be no smaller +// mergeHTTPHealthChecks reconciles HttpHealthCheck configures to be no smaller // than the default values. // E.g. old health check interval is 2s, new default is 8. // The HC interval will be reconciled to 8 seconds. // If the existing health check is larger than the default interval, // the configuration will be kept. -func mergeHttpHealthChecks(hc, newHC *compute.HttpHealthCheck) *compute.HttpHealthCheck { +func mergeHTTPHealthChecks(hc, newHC *compute.HttpHealthCheck) *compute.HttpHealthCheck { if hc.CheckIntervalSec > newHC.CheckIntervalSec { newHC.CheckIntervalSec = hc.CheckIntervalSec } @@ -651,24 +652,24 @@ func mergeHttpHealthChecks(hc, newHC *compute.HttpHealthCheck) *compute.HttpHeal return newHC } -// needToUpdateHttpHealthChecks checks whether the http healthcheck needs to be +// needToUpdateHTTPHealthChecks checks whether the http healthcheck needs to be // updated. -func needToUpdateHttpHealthChecks(hc, newHC *compute.HttpHealthCheck) bool { +func needToUpdateHTTPHealthChecks(hc, newHC *compute.HttpHealthCheck) bool { changed := hc.Port != newHC.Port || hc.RequestPath != newHC.RequestPath || hc.Description != newHC.Description changed = changed || hc.CheckIntervalSec < newHC.CheckIntervalSec || hc.TimeoutSec < newHC.TimeoutSec changed = changed || hc.UnhealthyThreshold < newHC.UnhealthyThreshold || hc.HealthyThreshold < newHC.HealthyThreshold return changed } -func (gce *GCECloud) ensureHttpHealthCheck(name, path string, port int32) (hc *compute.HttpHealthCheck, err error) { - newHC := makeHttpHealthCheck(name, path, port) - hc, err = gce.GetHttpHealthCheck(name) +func (g *Cloud) ensureHTTPHealthCheck(name, path string, port int32) (hc *compute.HttpHealthCheck, err error) { + newHC := makeHTTPHealthCheck(name, path, port) + hc, err = g.GetHTTPHealthCheck(name) if hc == nil || err != nil && isHTTPErrorCode(err, http.StatusNotFound) { glog.Infof("Did not find health check %v, creating port %v path %v", name, port, path) - if err = gce.CreateHttpHealthCheck(newHC); err != nil { + if err = g.CreateHTTPHealthCheck(newHC); err != nil { return nil, err } - hc, err = gce.GetHttpHealthCheck(name) + hc, err = g.GetHTTPHealthCheck(name) if err != nil { glog.Errorf("Failed to get http health check %v", err) return nil, err @@ -678,15 +679,15 @@ func (gce *GCECloud) ensureHttpHealthCheck(name, path string, port int32) (hc *c } // Validate health check fields glog.V(4).Infof("Checking http health check params %s", name) - if needToUpdateHttpHealthChecks(hc, newHC) { + if needToUpdateHTTPHealthChecks(hc, newHC) { glog.Warningf("Health check %v exists but parameters have drifted - updating...", name) - newHC = mergeHttpHealthChecks(hc, newHC) - if err := gce.UpdateHttpHealthCheck(newHC); err != nil { + newHC = mergeHTTPHealthChecks(hc, newHC) + if err := g.UpdateHTTPHealthCheck(newHC); err != nil { glog.Warningf("Failed to reconcile http health check %v parameters", name) return nil, err } glog.V(4).Infof("Corrected health check %v parameters successful", name) - hc, err = gce.GetHttpHealthCheck(name) + hc, err = g.GetHTTPHealthCheck(name) if err != nil { return nil, err } @@ -698,14 +699,14 @@ func (gce *GCECloud) ensureHttpHealthCheck(name, path string, port int32) (hc *c // IP is being requested. // Returns whether the forwarding rule exists, whether it needs to be updated, // what its IP address is (if it exists), and any error we encountered. -func (gce *GCECloud) forwardingRuleNeedsUpdate(name, region string, loadBalancerIP string, ports []v1.ServicePort) (exists bool, needsUpdate bool, ipAddress string, err error) { - fwd, err := gce.GetRegionForwardingRule(name, region) +func (g *Cloud) forwardingRuleNeedsUpdate(name, region string, loadBalancerIP string, ports []v1.ServicePort) (exists bool, needsUpdate bool, ipAddress string, err error) { + fwd, err := g.GetRegionForwardingRule(name, region) if err != nil { if isHTTPErrorCode(err, http.StatusNotFound) { return false, true, "", nil } // Err on the side of caution in case of errors. Caller should notice the error and retry. - // We never want to end up recreating resources because gce api flaked. + // We never want to end up recreating resources because g api flaked. return true, false, "", fmt.Errorf("error getting load balancer's forwarding rule: %v", err) } // If the user asks for a specific static ip through the Service spec, @@ -719,7 +720,7 @@ func (gce *GCECloud) forwardingRuleNeedsUpdate(name, region string, loadBalancer portRange, err := loadBalancerPortRange(ports) if err != nil { // Err on the side of caution in case of errors. Caller should notice the error and retry. - // We never want to end up recreating resources because gce api flaked. + // We never want to end up recreating resources because g api flaked. return true, false, "", err } if portRange != fwd.PortRange { @@ -737,14 +738,14 @@ func (gce *GCECloud) forwardingRuleNeedsUpdate(name, region string, loadBalancer // Doesn't check whether the hosts have changed, since host updating is handled // separately. -func (gce *GCECloud) targetPoolNeedsRecreation(name, region string, affinityType v1.ServiceAffinity) (exists bool, needsRecreation bool, err error) { - tp, err := gce.GetTargetPool(name, region) +func (g *Cloud) targetPoolNeedsRecreation(name, region string, affinityType v1.ServiceAffinity) (exists bool, needsRecreation bool, err error) { + tp, err := g.GetTargetPool(name, region) if err != nil { if isHTTPErrorCode(err, http.StatusNotFound) { return false, true, nil } // Err on the side of caution in case of errors. Caller should notice the error and retry. - // We never want to end up recreating resources because gce api flaked. + // We never want to end up recreating resources because g api flaked. return true, false, fmt.Errorf("error getting load balancer's target pool: %v", err) } // TODO: If the user modifies their Service's session affinity, it *should* @@ -818,8 +819,8 @@ func translateAffinityType(affinityType v1.ServiceAffinity) string { } } -func (gce *GCECloud) firewallNeedsUpdate(name, serviceName, region, ipAddress string, ports []v1.ServicePort, sourceRanges netsets.IPNet) (exists bool, needsUpdate bool, err error) { - fw, err := gce.GetFirewall(MakeFirewallName(name)) +func (g *Cloud) firewallNeedsUpdate(name, serviceName, region, ipAddress string, ports []v1.ServicePort, sourceRanges netsets.IPNet) (exists bool, needsUpdate bool, err error) { + fw, err := g.GetFirewall(MakeFirewallName(name)) if err != nil { if isHTTPErrorCode(err, http.StatusNotFound) { return false, true, nil @@ -856,7 +857,7 @@ func (gce *GCECloud) firewallNeedsUpdate(name, serviceName, region, ipAddress st return true, false, nil } -func (gce *GCECloud) ensureHttpHealthCheckFirewall(svc *v1.Service, serviceName, ipAddress, region, clusterID string, hosts []*gceInstance, hcName string, hcPort int32, isNodesHealthCheck bool) error { +func (g *Cloud) ensureHTTPHealthCheckFirewall(svc *v1.Service, serviceName, ipAddress, region, clusterID string, hosts []*gceInstance, hcName string, hcPort int32, isNodesHealthCheck bool) error { // Prepare the firewall params for creating / checking. desc := fmt.Sprintf(`{"kubernetes.io/cluster-id":"%s"}`, clusterID) if !isNodesHealthCheck { @@ -866,13 +867,13 @@ func (gce *GCECloud) ensureHttpHealthCheckFirewall(svc *v1.Service, serviceName, ports := []v1.ServicePort{{Protocol: "tcp", Port: hcPort}} fwName := MakeHealthCheckFirewallName(clusterID, hcName, isNodesHealthCheck) - fw, err := gce.GetFirewall(fwName) + fw, err := g.GetFirewall(fwName) if err != nil { if !isHTTPErrorCode(err, http.StatusNotFound) { return fmt.Errorf("error getting firewall for health checks: %v", err) } glog.Infof("Creating firewall %v for health checks.", fwName) - if err := gce.createFirewall(svc, fwName, region, desc, sourceRanges, ports, hosts); err != nil { + if err := g.createFirewall(svc, fwName, region, desc, sourceRanges, ports, hosts); err != nil { return err } glog.Infof("Created firewall %v for health checks.", fwName) @@ -885,7 +886,7 @@ func (gce *GCECloud) ensureHttpHealthCheckFirewall(svc *v1.Service, serviceName, !equalStringSets(fw.Allowed[0].Ports, []string{strconv.Itoa(int(ports[0].Port))}) || !equalStringSets(fw.SourceRanges, sourceRanges.StringSlice()) { glog.Warningf("Firewall %v exists but parameters have drifted - updating...", fwName) - if err := gce.updateFirewall(svc, fwName, region, desc, sourceRanges, ports, hosts); err != nil { + if err := g.updateFirewall(svc, fwName, region, desc, sourceRanges, ports, hosts); err != nil { glog.Warningf("Failed to reconcile firewall %v parameters.", fwName) return err } @@ -933,17 +934,17 @@ func createForwardingRule(s CloudForwardingRuleService, name, serviceName, regio return nil } -func (gce *GCECloud) createFirewall(svc *v1.Service, name, region, desc string, sourceRanges netsets.IPNet, ports []v1.ServicePort, hosts []*gceInstance) error { - firewall, err := gce.firewallObject(name, region, desc, sourceRanges, ports, hosts) +func (g *Cloud) createFirewall(svc *v1.Service, name, region, desc string, sourceRanges netsets.IPNet, ports []v1.ServicePort, hosts []*gceInstance) error { + firewall, err := g.firewallObject(name, region, desc, sourceRanges, ports, hosts) if err != nil { return err } - if err = gce.CreateFirewall(firewall); err != nil { + if err = g.CreateFirewall(firewall); err != nil { if isHTTPErrorCode(err, http.StatusConflict) { return nil - } else if isForbidden(err) && gce.OnXPN() { + } else if isForbidden(err) && g.OnXPN() { glog.V(4).Infof("createFirewall(%v): do not have permission to create firewall rule (on XPN). Raising event.", firewall.Name) - gce.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudCreateCmd(firewall, gce.NetworkProjectID())) + g.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudCreateCmd(firewall, g.NetworkProjectID())) return nil } return err @@ -951,18 +952,18 @@ func (gce *GCECloud) createFirewall(svc *v1.Service, name, region, desc string, return nil } -func (gce *GCECloud) updateFirewall(svc *v1.Service, name, region, desc string, sourceRanges netsets.IPNet, ports []v1.ServicePort, hosts []*gceInstance) error { - firewall, err := gce.firewallObject(name, region, desc, sourceRanges, ports, hosts) +func (g *Cloud) updateFirewall(svc *v1.Service, name, region, desc string, sourceRanges netsets.IPNet, ports []v1.ServicePort, hosts []*gceInstance) error { + firewall, err := g.firewallObject(name, region, desc, sourceRanges, ports, hosts) if err != nil { return err } - if err = gce.UpdateFirewall(firewall); err != nil { + if err = g.UpdateFirewall(firewall); err != nil { if isHTTPErrorCode(err, http.StatusConflict) { return nil - } else if isForbidden(err) && gce.OnXPN() { + } else if isForbidden(err) && g.OnXPN() { glog.V(4).Infof("updateFirewall(%v): do not have permission to update firewall rule (on XPN). Raising event.", firewall.Name) - gce.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudUpdateCmd(firewall, gce.NetworkProjectID())) + g.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudUpdateCmd(firewall, g.NetworkProjectID())) return nil } return err @@ -970,25 +971,25 @@ func (gce *GCECloud) updateFirewall(svc *v1.Service, name, region, desc string, return nil } -func (gce *GCECloud) firewallObject(name, region, desc string, sourceRanges netsets.IPNet, ports []v1.ServicePort, hosts []*gceInstance) (*compute.Firewall, error) { +func (g *Cloud) firewallObject(name, region, desc string, sourceRanges netsets.IPNet, ports []v1.ServicePort, hosts []*gceInstance) (*compute.Firewall, error) { allowedPorts := make([]string, len(ports)) for ix := range ports { allowedPorts[ix] = strconv.Itoa(int(ports[ix].Port)) } // If the node tags to be used for this cluster have been predefined in the // provider config, just use them. Otherwise, invoke computeHostTags method to get the tags. - hostTags := gce.nodeTags + hostTags := g.nodeTags if len(hostTags) == 0 { var err error - if hostTags, err = gce.computeHostTags(hosts); err != nil { - return nil, fmt.Errorf("No node tags supplied and also failed to parse the given lists of hosts for tags. Abort creating firewall rule.") + if hostTags, err = g.computeHostTags(hosts); err != nil { + return nil, fmt.Errorf("no node tags supplied and also failed to parse the given lists of hosts for tags. Abort creating firewall rule") } } firewall := &compute.Firewall{ Name: name, Description: desc, - Network: gce.networkURL, + Network: g.networkURL, SourceRanges: sourceRanges.StringSlice(), TargetTags: hostTags, Allowed: []*compute.FirewallAllowed{ @@ -1054,8 +1055,8 @@ func ensureStaticIP(s CloudAddressService, name, serviceName, region, existingIP return addr.Address, existed, nil } -func (gce *GCECloud) getServiceNetworkTier(svc *v1.Service) (cloud.NetworkTier, error) { - if !gce.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) { +func (g *Cloud) getServiceNetworkTier(svc *v1.Service) (cloud.NetworkTier, error) { + if !g.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) { return cloud.NetworkTierDefault, nil } tier, err := GetServiceNetworkTier(svc) @@ -1066,12 +1067,12 @@ func (gce *GCECloud) getServiceNetworkTier(svc *v1.Service) (cloud.NetworkTier, return tier, nil } -func (gce *GCECloud) deleteWrongNetworkTieredResources(lbName, lbRef string, desiredNetTier cloud.NetworkTier) error { +func (g *Cloud) deleteWrongNetworkTieredResources(lbName, lbRef string, desiredNetTier cloud.NetworkTier) error { logPrefix := fmt.Sprintf("deleteWrongNetworkTieredResources:(%s)", lbRef) - if err := deleteFWDRuleWithWrongTier(gce, gce.region, lbName, logPrefix, desiredNetTier); err != nil { + if err := deleteFWDRuleWithWrongTier(g, g.region, lbName, logPrefix, desiredNetTier); err != nil { return err } - if err := deleteAddressWithWrongTier(gce, gce.region, lbName, logPrefix, desiredNetTier); err != nil { + if err := deleteAddressWithWrongTier(g, g.region, lbName, logPrefix, desiredNetTier); err != nil { return err } return nil diff --git a/pkg/cloudprovider/providers/gce/gce_loadbalancer_external_test.go b/pkg/cloudprovider/providers/gce/gce_loadbalancer_external_test.go index 60838277fb1..a238d888db8 100644 --- a/pkg/cloudprovider/providers/gce/gce_loadbalancer_external_test.go +++ b/pkg/cloudprovider/providers/gce/gce_loadbalancer_external_test.go @@ -164,7 +164,7 @@ func TestCreateForwardingRuleWithTier(t *testing.T) { vals := DefaultTestClusterValues() serviceName := "foo-svc" - baseLinkUrl := "https://www.googleapis.com/compute/%v/projects/%v/regions/%v/forwardingRules/%v" + baseLinkURL := "https://www.googleapis.com/compute/%v/projects/%v/regions/%v/forwardingRules/%v" for desc, tc := range map[string]struct { netTier cloud.NetworkTier @@ -180,7 +180,7 @@ func TestCreateForwardingRuleWithTier(t *testing.T) { PortRange: "123-123", Target: target, NetworkTier: "PREMIUM", - SelfLink: fmt.Sprintf(baseLinkUrl, "v1", vals.ProjectID, vals.Region, "lb-1"), + SelfLink: fmt.Sprintf(baseLinkURL, "v1", vals.ProjectID, vals.Region, "lb-1"), }, }, "Standard tier": { @@ -193,7 +193,7 @@ func TestCreateForwardingRuleWithTier(t *testing.T) { PortRange: "123-123", Target: target, NetworkTier: "STANDARD", - SelfLink: fmt.Sprintf(baseLinkUrl, "alpha", vals.ProjectID, vals.Region, "lb-2"), + SelfLink: fmt.Sprintf(baseLinkURL, "alpha", vals.ProjectID, vals.Region, "lb-2"), }, }, } { @@ -276,7 +276,7 @@ func TestDeleteAddressWithWrongTier(t *testing.T) { } } -func createExternalLoadBalancer(gce *GCECloud, svc *v1.Service, nodeNames []string, clusterName, clusterID, zoneName string) (*v1.LoadBalancerStatus, error) { +func createExternalLoadBalancer(gce *Cloud, svc *v1.Service, nodeNames []string, clusterName, clusterID, zoneName string) (*v1.LoadBalancerStatus, error) { nodes, err := createAndInsertNodes(gce, nodeNames, zoneName) if err != nil { return nil, err @@ -498,7 +498,7 @@ func TestForwardingRuleNeedsUpdate(t *testing.T) { ports []v1.ServicePort exists bool needsUpdate bool - expectIpAddr string + expectIPAddr string expectError bool }{ "When the loadBalancerIP does not equal the FwdRule IP address.": { @@ -506,7 +506,7 @@ func TestForwardingRuleNeedsUpdate(t *testing.T) { ports: svc.Spec.Ports, exists: true, needsUpdate: true, - expectIpAddr: ipAddr, + expectIPAddr: ipAddr, expectError: false, }, "When loadBalancerPortRange returns an error.": { @@ -514,7 +514,7 @@ func TestForwardingRuleNeedsUpdate(t *testing.T) { ports: []v1.ServicePort{}, exists: true, needsUpdate: false, - expectIpAddr: "", + expectIPAddr: "", expectError: true, }, "When portRange not equals to the forwardingRule port range.": { @@ -522,7 +522,7 @@ func TestForwardingRuleNeedsUpdate(t *testing.T) { ports: wrongPorts, exists: true, needsUpdate: true, - expectIpAddr: ipAddr, + expectIPAddr: ipAddr, expectError: false, }, "When the ports protocol does not equal the ForwardingRuel IP Protocol.": { @@ -530,7 +530,7 @@ func TestForwardingRuleNeedsUpdate(t *testing.T) { ports: wrongProtocolPorts, exists: true, needsUpdate: true, - expectIpAddr: ipAddr, + expectIPAddr: ipAddr, expectError: false, }, "When basic workflow.": { @@ -538,7 +538,7 @@ func TestForwardingRuleNeedsUpdate(t *testing.T) { ports: svc.Spec.Ports, exists: true, needsUpdate: false, - expectIpAddr: ipAddr, + expectIPAddr: ipAddr, expectError: false, }, } { @@ -546,7 +546,7 @@ func TestForwardingRuleNeedsUpdate(t *testing.T) { exists, needsUpdate, ipAddress, err := gce.forwardingRuleNeedsUpdate(lbName, vals.Region, tc.lbIP, tc.ports) assert.Equal(t, tc.exists, exists, "'exists' didn't return as expected "+desc) assert.Equal(t, tc.needsUpdate, needsUpdate, "'needsUpdate' didn't return as expected "+desc) - assert.Equal(t, tc.expectIpAddr, ipAddress, "'ipAddress' didn't return as expected "+desc) + assert.Equal(t, tc.expectIPAddr, ipAddress, "'ipAddress' didn't return as expected "+desc) if tc.expectError { assert.Error(t, err, "Should returns an error "+desc) } else { @@ -806,8 +806,8 @@ func TestEnsureTargetPoolAndHealthCheck(t *testing.T) { lbName := gce.GetLoadBalancerName(context.TODO(), "", svc) region := vals.Region - hcToCreate := makeHttpHealthCheck(MakeNodesHealthCheckName(clusterID), GetNodesHealthCheckPath(), GetNodesHealthCheckPort()) - hcToDelete := makeHttpHealthCheck(MakeNodesHealthCheckName(clusterID), GetNodesHealthCheckPath(), GetNodesHealthCheckPort()) + hcToCreate := makeHTTPHealthCheck(MakeNodesHealthCheckName(clusterID), GetNodesHealthCheckPath(), GetNodesHealthCheckPort()) + hcToDelete := makeHTTPHealthCheck(MakeNodesHealthCheckName(clusterID), GetNodesHealthCheckPath(), GetNodesHealthCheckPort()) // Apply a tag on the target pool. By verifying the change of the tag, target pool update can be ensured. tag := "A Tag" @@ -823,7 +823,7 @@ func TestEnsureTargetPoolAndHealthCheck(t *testing.T) { pool, err = gce.GetTargetPool(lbName, region) assert.Equal(t, 1, len(pool.Instances)) var manyNodeName [maxTargetPoolCreateInstances + 1]string - for i := 0; i < maxTargetPoolCreateInstances+1; i += 1 { + for i := 0; i < maxTargetPoolCreateInstances+1; i++ { manyNodeName[i] = fmt.Sprintf("testnode_%d", i) } manyNodes, err := createAndInsertNodes(gce, manyNodeName[:], vals.ZoneName) @@ -1079,17 +1079,17 @@ func TestExternalLoadBalancerEnsureHttpHealthCheck(t *testing.T) { } hcName, hcPath, hcPort := "test-hc", "/healthz", int32(12345) - existingHC := makeHttpHealthCheck(hcName, hcPath, hcPort) + existingHC := makeHTTPHealthCheck(hcName, hcPath, hcPort) existingHC = tc.modifier(existingHC) if existingHC != nil { - if err := gce.CreateHttpHealthCheck(existingHC); err != nil { + if err := gce.CreateHTTPHealthCheck(existingHC); err != nil { t.Fatalf("gce.CreateHttpHealthCheck(%#v) = %v; want err = nil", existingHC, err) } } - if _, err := gce.ensureHttpHealthCheck(hcName, hcPath, hcPort); err != nil { + if _, err := gce.ensureHTTPHealthCheck(hcName, hcPath, hcPort); err != nil { t.Fatalf("gce.ensureHttpHealthCheck(%q, %q, %v) = _, %d; want err = nil", hcName, hcPath, hcPort, err) } - if hc, err := gce.GetHttpHealthCheck(hcName); err != nil { + if hc, err := gce.GetHTTPHealthCheck(hcName); err != nil { t.Fatalf("gce.GetHttpHealthCheck(%q) = _, %d; want err = nil", hcName, err) } else { if tc.wantEqual { @@ -1127,14 +1127,14 @@ func TestMergeHttpHealthChecks(t *testing.T) { {"unhealthy threshold - user configured - should keep", gceHcCheckIntervalSeconds, gceHcTimeoutSeconds, gceHcHealthyThreshold, gceHcUnhealthyThreshold + 1, gceHcCheckIntervalSeconds, gceHcTimeoutSeconds, gceHcHealthyThreshold, gceHcUnhealthyThreshold + 1}, } { t.Run(tc.desc, func(t *testing.T) { - wantHC := makeHttpHealthCheck("hc", "/", 12345) + wantHC := makeHTTPHealthCheck("hc", "/", 12345) hc := &compute.HttpHealthCheck{ CheckIntervalSec: tc.checkIntervalSec, TimeoutSec: tc.timeoutSec, HealthyThreshold: tc.healthyThreshold, UnhealthyThreshold: tc.unhealthyThreshold, } - mergeHttpHealthChecks(hc, wantHC) + mergeHTTPHealthChecks(hc, wantHC) if wantHC.CheckIntervalSec != tc.wantCheckIntervalSec { t.Errorf("wantHC.CheckIntervalSec = %d; want %d", wantHC.CheckIntervalSec, tc.checkIntervalSec) } @@ -1172,13 +1172,13 @@ func TestNeedToUpdateHttpHealthChecks(t *testing.T) { {"unhealthy threshold does not need update", func(hc *compute.HttpHealthCheck) { hc.UnhealthyThreshold = gceHcUnhealthyThreshold + 1 }, false}, } { t.Run(tc.desc, func(t *testing.T) { - hc := makeHttpHealthCheck("hc", "/", 12345) - wantHC := makeHttpHealthCheck("hc", "/", 12345) + hc := makeHTTPHealthCheck("hc", "/", 12345) + wantHC := makeHTTPHealthCheck("hc", "/", 12345) if tc.modifier != nil { tc.modifier(hc) } - if gotChanged := needToUpdateHttpHealthChecks(hc, wantHC); gotChanged != tc.wantChanged { - t.Errorf("needToUpdateHttpHealthChecks(%#v, %#v) = %t; want changed = %t", hc, wantHC, gotChanged, tc.wantChanged) + if gotChanged := needToUpdateHTTPHealthChecks(hc, wantHC); gotChanged != tc.wantChanged { + t.Errorf("needToUpdateHTTPHealthChecks(%#v, %#v) = %t; want changed = %t", hc, wantHC, gotChanged, tc.wantChanged) } }) } diff --git a/pkg/cloudprovider/providers/gce/gce_loadbalancer_internal.go b/pkg/cloudprovider/providers/gce/gce_loadbalancer_internal.go index 3bc83710b86..49a28855207 100644 --- a/pkg/cloudprovider/providers/gce/gce_loadbalancer_internal.go +++ b/pkg/cloudprovider/providers/gce/gce_loadbalancer_internal.go @@ -35,21 +35,21 @@ const ( allInstances = "ALL" ) -func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v1.Service, existingFwdRule *compute.ForwardingRule, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) { +func (g *Cloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v1.Service, existingFwdRule *compute.ForwardingRule, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) { nm := types.NamespacedName{Name: svc.Name, Namespace: svc.Namespace} ports, protocol := getPortsAndProtocol(svc.Spec.Ports) if protocol != v1.ProtocolTCP && protocol != v1.ProtocolUDP { return nil, fmt.Errorf("Invalid protocol %s, only TCP and UDP are supported", string(protocol)) } scheme := cloud.SchemeInternal - loadBalancerName := gce.GetLoadBalancerName(context.TODO(), clusterName, svc) + loadBalancerName := g.GetLoadBalancerName(context.TODO(), clusterName, svc) sharedBackend := shareBackendService(svc) backendServiceName := makeBackendServiceName(loadBalancerName, clusterID, sharedBackend, scheme, protocol, svc.Spec.SessionAffinity) - backendServiceLink := gce.getBackendServiceLink(backendServiceName) + backendServiceLink := g.getBackendServiceLink(backendServiceName) // Ensure instance groups exist and nodes are assigned to groups igName := makeInstanceGroupName(clusterID) - igLinks, err := gce.ensureInternalInstanceGroups(igName, nodes) + igLinks, err := g.ensureInternalInstanceGroups(igName, nodes) if err != nil { return nil, err } @@ -58,14 +58,14 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s var existingBackendService *compute.BackendService if existingFwdRule != nil && existingFwdRule.BackendService != "" { existingBSName := getNameFromLink(existingFwdRule.BackendService) - if existingBackendService, err = gce.GetRegionBackendService(existingBSName, gce.region); err != nil && !isNotFound(err) { + if existingBackendService, err = g.GetRegionBackendService(existingBSName, g.region); err != nil && !isNotFound(err) { return nil, err } } // Lock the sharedResourceLock to prevent any deletions of shared resources while assembling shared resources here - gce.sharedResourceLock.Lock() - defer gce.sharedResourceLock.Unlock() + g.sharedResourceLock.Lock() + defer g.sharedResourceLock.Unlock() // Ensure health check exists before creating the backend service. The health check is shared // if externalTrafficPolicy=Cluster. @@ -76,7 +76,7 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s // Service requires a special health check, retrieve the OnlyLocal port & path hcPath, hcPort = v1_service.GetServiceHealthCheckPathPort(svc) } - hc, err := gce.ensureInternalHealthCheck(hcName, nm, sharedHealthCheck, hcPath, hcPort) + hc, err := g.ensureInternalHealthCheck(hcName, nm, sharedHealthCheck, hcPath, hcPort) if err != nil { return nil, err } @@ -88,7 +88,7 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s // If the ILB already exists, continue using the subnet that it's already using. // This is to support existing ILBs that were setup using the wrong subnet. - subnetworkURL := gce.SubnetworkURL() + subnetworkURL := g.SubnetworkURL() if existingFwdRule != nil && existingFwdRule.Subnetwork != "" { // external LBs have an empty Subnetwork field. subnetworkURL = existingFwdRule.Subnetwork @@ -96,8 +96,8 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s var addrMgr *addressManager // If the network is not a legacy network, use the address manager - if !gce.IsLegacyNetwork() { - addrMgr = newAddressManager(gce, nm.String(), gce.Region(), subnetworkURL, loadBalancerName, requestedIP, cloud.SchemeInternal) + if !g.IsLegacyNetwork() { + addrMgr = newAddressManager(g, nm.String(), g.Region(), subnetworkURL, loadBalancerName, requestedIP, cloud.SchemeInternal) ipToUse, err = addrMgr.HoldAddress() if err != nil { return nil, err @@ -106,7 +106,7 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s } // Ensure firewall rules if necessary - if err = gce.ensureInternalFirewalls(loadBalancerName, ipToUse, clusterID, nm, svc, strconv.Itoa(int(hcPort)), sharedHealthCheck, nodes); err != nil { + if err = g.ensureInternalFirewalls(loadBalancerName, ipToUse, clusterID, nm, svc, strconv.Itoa(int(hcPort)), sharedHealthCheck, nodes); err != nil { return nil, err } @@ -125,20 +125,20 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s if subnetworkURL != "" { expectedFwdRule.Subnetwork = subnetworkURL } else { - expectedFwdRule.Network = gce.networkURL + expectedFwdRule.Network = g.networkURL } fwdRuleDeleted := false if existingFwdRule != nil && !fwdRuleEqual(existingFwdRule, expectedFwdRule) { glog.V(2).Infof("ensureInternalLoadBalancer(%v): deleting existing forwarding rule with IP address %v", loadBalancerName, existingFwdRule.IPAddress) - if err = ignoreNotFound(gce.DeleteRegionForwardingRule(loadBalancerName, gce.region)); err != nil { + if err = ignoreNotFound(g.DeleteRegionForwardingRule(loadBalancerName, g.region)); err != nil { return nil, err } fwdRuleDeleted = true } bsDescription := makeBackendServiceDescription(nm, sharedBackend) - err = gce.ensureInternalBackendService(backendServiceName, bsDescription, svc.Spec.SessionAffinity, scheme, protocol, igLinks, hc.SelfLink) + err = g.ensureInternalBackendService(backendServiceName, bsDescription, svc.Spec.SessionAffinity, scheme, protocol, igLinks, hc.SelfLink) if err != nil { return nil, err } @@ -146,7 +146,7 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s // If we previously deleted the forwarding rule or it never existed, finally create it. if fwdRuleDeleted || existingFwdRule == nil { glog.V(2).Infof("ensureInternalLoadBalancer(%v): creating forwarding rule", loadBalancerName) - if err = gce.CreateRegionForwardingRule(expectedFwdRule, gce.region); err != nil { + if err = g.CreateRegionForwardingRule(expectedFwdRule, g.region); err != nil { return nil, err } glog.V(2).Infof("ensureInternalLoadBalancer(%v): created forwarding rule", loadBalancerName) @@ -154,7 +154,7 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s // Delete the previous internal load balancer resources if necessary if existingBackendService != nil { - gce.clearPreviousInternalResources(svc, loadBalancerName, existingBackendService, backendServiceName, hcName) + g.clearPreviousInternalResources(svc, loadBalancerName, existingBackendService, backendServiceName, hcName) } if addrMgr != nil { @@ -165,7 +165,7 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s } // Get the most recent forwarding rule for the address. - updatedFwdRule, err := gce.GetRegionForwardingRule(loadBalancerName, gce.region) + updatedFwdRule, err := g.GetRegionForwardingRule(loadBalancerName, g.region) if err != nil { return nil, err } @@ -175,11 +175,11 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s return status, nil } -func (gce *GCECloud) clearPreviousInternalResources(svc *v1.Service, loadBalancerName string, existingBackendService *compute.BackendService, expectedBSName, expectedHCName string) { +func (g *Cloud) clearPreviousInternalResources(svc *v1.Service, loadBalancerName string, existingBackendService *compute.BackendService, expectedBSName, expectedHCName string) { // If a new backend service was created, delete the old one. if existingBackendService.Name != expectedBSName { glog.V(2).Infof("clearPreviousInternalResources(%v): expected backend service %q does not match previous %q - deleting backend service", loadBalancerName, expectedBSName, existingBackendService.Name) - if err := gce.teardownInternalBackendService(existingBackendService.Name); err != nil && !isNotFound(err) { + if err := g.teardownInternalBackendService(existingBackendService.Name); err != nil && !isNotFound(err) { glog.Warningf("clearPreviousInternalResources: could not delete old backend service: %v, err: %v", existingBackendService.Name, err) } } @@ -189,7 +189,7 @@ func (gce *GCECloud) clearPreviousInternalResources(svc *v1.Service, loadBalance existingHCName := getNameFromLink(existingBackendService.HealthChecks[0]) if existingHCName != expectedHCName { glog.V(2).Infof("clearPreviousInternalResources(%v): expected health check %q does not match previous %q - deleting health check", loadBalancerName, expectedHCName, existingHCName) - if err := gce.teardownInternalHealthCheckAndFirewall(svc, existingHCName); err != nil { + if err := g.teardownInternalHealthCheckAndFirewall(svc, existingHCName); err != nil { glog.Warningf("clearPreviousInternalResources: could not delete existing healthcheck: %v, err: %v", existingHCName, err) } } @@ -200,12 +200,12 @@ func (gce *GCECloud) clearPreviousInternalResources(svc *v1.Service, loadBalance // updateInternalLoadBalancer is called when the list of nodes has changed. Therefore, only the instance groups // and possibly the backend service need to be updated. -func (gce *GCECloud) updateInternalLoadBalancer(clusterName, clusterID string, svc *v1.Service, nodes []*v1.Node) error { - gce.sharedResourceLock.Lock() - defer gce.sharedResourceLock.Unlock() +func (g *Cloud) updateInternalLoadBalancer(clusterName, clusterID string, svc *v1.Service, nodes []*v1.Node) error { + g.sharedResourceLock.Lock() + defer g.sharedResourceLock.Unlock() igName := makeInstanceGroupName(clusterID) - igLinks, err := gce.ensureInternalInstanceGroups(igName, nodes) + igLinks, err := g.ensureInternalInstanceGroups(igName, nodes) if err != nil { return err } @@ -213,41 +213,41 @@ func (gce *GCECloud) updateInternalLoadBalancer(clusterName, clusterID string, s // Generate the backend service name _, protocol := getPortsAndProtocol(svc.Spec.Ports) scheme := cloud.SchemeInternal - loadBalancerName := gce.GetLoadBalancerName(context.TODO(), clusterName, svc) + loadBalancerName := g.GetLoadBalancerName(context.TODO(), clusterName, svc) backendServiceName := makeBackendServiceName(loadBalancerName, clusterID, shareBackendService(svc), scheme, protocol, svc.Spec.SessionAffinity) // Ensure the backend service has the proper backend/instance-group links - return gce.ensureInternalBackendServiceGroups(backendServiceName, igLinks) + return g.ensureInternalBackendServiceGroups(backendServiceName, igLinks) } -func (gce *GCECloud) ensureInternalLoadBalancerDeleted(clusterName, clusterID string, svc *v1.Service) error { - loadBalancerName := gce.GetLoadBalancerName(context.TODO(), clusterName, svc) +func (g *Cloud) ensureInternalLoadBalancerDeleted(clusterName, clusterID string, svc *v1.Service) error { + loadBalancerName := g.GetLoadBalancerName(context.TODO(), clusterName, svc) _, protocol := getPortsAndProtocol(svc.Spec.Ports) scheme := cloud.SchemeInternal sharedBackend := shareBackendService(svc) sharedHealthCheck := !v1_service.RequestsOnlyLocalTraffic(svc) - gce.sharedResourceLock.Lock() - defer gce.sharedResourceLock.Unlock() + g.sharedResourceLock.Lock() + defer g.sharedResourceLock.Unlock() glog.V(2).Infof("ensureInternalLoadBalancerDeleted(%v): attempting delete of region internal address", loadBalancerName) - ensureAddressDeleted(gce, loadBalancerName, gce.region) + ensureAddressDeleted(g, loadBalancerName, g.region) glog.V(2).Infof("ensureInternalLoadBalancerDeleted(%v): deleting region internal forwarding rule", loadBalancerName) - if err := ignoreNotFound(gce.DeleteRegionForwardingRule(loadBalancerName, gce.region)); err != nil { + if err := ignoreNotFound(g.DeleteRegionForwardingRule(loadBalancerName, g.region)); err != nil { return err } backendServiceName := makeBackendServiceName(loadBalancerName, clusterID, sharedBackend, scheme, protocol, svc.Spec.SessionAffinity) glog.V(2).Infof("ensureInternalLoadBalancerDeleted(%v): deleting region backend service %v", loadBalancerName, backendServiceName) - if err := gce.teardownInternalBackendService(backendServiceName); err != nil { + if err := g.teardownInternalBackendService(backendServiceName); err != nil { return err } glog.V(2).Infof("ensureInternalLoadBalancerDeleted(%v): deleting firewall for traffic", loadBalancerName) - if err := ignoreNotFound(gce.DeleteFirewall(loadBalancerName)); err != nil { - if isForbidden(err) && gce.OnXPN() { + if err := ignoreNotFound(g.DeleteFirewall(loadBalancerName)); err != nil { + if isForbidden(err) && g.OnXPN() { glog.V(2).Infof("ensureInternalLoadBalancerDeleted(%v): could not delete traffic firewall on XPN cluster. Raising event.", loadBalancerName) - gce.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudDeleteCmd(loadBalancerName, gce.NetworkProjectID())) + g.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudDeleteCmd(loadBalancerName, g.NetworkProjectID())) } else { return err } @@ -255,21 +255,21 @@ func (gce *GCECloud) ensureInternalLoadBalancerDeleted(clusterName, clusterID st hcName := makeHealthCheckName(loadBalancerName, clusterID, sharedHealthCheck) glog.V(2).Infof("ensureInternalLoadBalancerDeleted(%v): deleting health check %v and its firewall", loadBalancerName, hcName) - if err := gce.teardownInternalHealthCheckAndFirewall(svc, hcName); err != nil { + if err := g.teardownInternalHealthCheckAndFirewall(svc, hcName); err != nil { return err } // Try deleting instance groups - expect ResourceInuse error if needed by other LBs igName := makeInstanceGroupName(clusterID) - if err := gce.ensureInternalInstanceGroupsDeleted(igName); err != nil && !isInUsedByError(err) { + if err := g.ensureInternalInstanceGroupsDeleted(igName); err != nil && !isInUsedByError(err) { return err } return nil } -func (gce *GCECloud) teardownInternalBackendService(bsName string) error { - if err := gce.DeleteRegionBackendService(bsName, gce.region); err != nil { +func (g *Cloud) teardownInternalBackendService(bsName string) error { + if err := g.DeleteRegionBackendService(bsName, g.region); err != nil { if isNotFound(err) { glog.V(2).Infof("teardownInternalBackendService(%v): backend service already deleted. err: %v", bsName, err) return nil @@ -284,8 +284,8 @@ func (gce *GCECloud) teardownInternalBackendService(bsName string) error { return nil } -func (gce *GCECloud) teardownInternalHealthCheckAndFirewall(svc *v1.Service, hcName string) error { - if err := gce.DeleteHealthCheck(hcName); err != nil { +func (g *Cloud) teardownInternalHealthCheckAndFirewall(svc *v1.Service, hcName string) error { + if err := g.DeleteHealthCheck(hcName); err != nil { if isNotFound(err) { glog.V(2).Infof("teardownInternalHealthCheckAndFirewall(%v): health check does not exist.", hcName) // Purposely do not early return - double check the firewall does not exist @@ -299,10 +299,10 @@ func (gce *GCECloud) teardownInternalHealthCheckAndFirewall(svc *v1.Service, hcN glog.V(2).Infof("teardownInternalHealthCheckAndFirewall(%v): health check deleted", hcName) hcFirewallName := makeHealthCheckFirewallNameFromHC(hcName) - if err := ignoreNotFound(gce.DeleteFirewall(hcFirewallName)); err != nil { - if isForbidden(err) && gce.OnXPN() { + if err := ignoreNotFound(g.DeleteFirewall(hcFirewallName)); err != nil { + if isForbidden(err) && g.OnXPN() { glog.V(2).Infof("teardownInternalHealthCheckAndFirewall(%v): could not delete health check traffic firewall on XPN cluster. Raising Event.", hcName) - gce.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudDeleteCmd(hcFirewallName, gce.NetworkProjectID())) + g.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudDeleteCmd(hcFirewallName, g.NetworkProjectID())) return nil } @@ -312,14 +312,14 @@ func (gce *GCECloud) teardownInternalHealthCheckAndFirewall(svc *v1.Service, hcN return nil } -func (gce *GCECloud) ensureInternalFirewall(svc *v1.Service, fwName, fwDesc string, sourceRanges []string, ports []string, protocol v1.Protocol, nodes []*v1.Node) error { +func (g *Cloud) ensureInternalFirewall(svc *v1.Service, fwName, fwDesc string, sourceRanges []string, ports []string, protocol v1.Protocol, nodes []*v1.Node) error { glog.V(2).Infof("ensureInternalFirewall(%v): checking existing firewall", fwName) - targetTags, err := gce.GetNodeTags(nodeNames(nodes)) + targetTags, err := g.GetNodeTags(nodeNames(nodes)) if err != nil { return err } - existingFirewall, err := gce.GetFirewall(fwName) + existingFirewall, err := g.GetFirewall(fwName) if err != nil && !isNotFound(err) { return err } @@ -327,7 +327,7 @@ func (gce *GCECloud) ensureInternalFirewall(svc *v1.Service, fwName, fwDesc stri expectedFirewall := &compute.Firewall{ Name: fwName, Description: fwDesc, - Network: gce.networkURL, + Network: g.networkURL, SourceRanges: sourceRanges, TargetTags: targetTags, Allowed: []*compute.FirewallAllowed{ @@ -340,10 +340,10 @@ func (gce *GCECloud) ensureInternalFirewall(svc *v1.Service, fwName, fwDesc stri if existingFirewall == nil { glog.V(2).Infof("ensureInternalFirewall(%v): creating firewall", fwName) - err = gce.CreateFirewall(expectedFirewall) - if err != nil && isForbidden(err) && gce.OnXPN() { + err = g.CreateFirewall(expectedFirewall) + if err != nil && isForbidden(err) && g.OnXPN() { glog.V(2).Infof("ensureInternalFirewall(%v): do not have permission to create firewall rule (on XPN). Raising event.", fwName) - gce.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudCreateCmd(expectedFirewall, gce.NetworkProjectID())) + g.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudCreateCmd(expectedFirewall, g.NetworkProjectID())) return nil } return err @@ -354,16 +354,16 @@ func (gce *GCECloud) ensureInternalFirewall(svc *v1.Service, fwName, fwDesc stri } glog.V(2).Infof("ensureInternalFirewall(%v): updating firewall", fwName) - err = gce.UpdateFirewall(expectedFirewall) - if err != nil && isForbidden(err) && gce.OnXPN() { + err = g.UpdateFirewall(expectedFirewall) + if err != nil && isForbidden(err) && g.OnXPN() { glog.V(2).Infof("ensureInternalFirewall(%v): do not have permission to update firewall rule (on XPN). Raising event.", fwName) - gce.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudUpdateCmd(expectedFirewall, gce.NetworkProjectID())) + g.raiseFirewallChangeNeededEvent(svc, FirewallToGCloudUpdateCmd(expectedFirewall, g.NetworkProjectID())) return nil } return err } -func (gce *GCECloud) ensureInternalFirewalls(loadBalancerName, ipAddress, clusterID string, nm types.NamespacedName, svc *v1.Service, healthCheckPort string, sharedHealthCheck bool, nodes []*v1.Node) error { +func (g *Cloud) ensureInternalFirewalls(loadBalancerName, ipAddress, clusterID string, nm types.NamespacedName, svc *v1.Service, healthCheckPort string, sharedHealthCheck bool, nodes []*v1.Node) error { // First firewall is for ingress traffic fwDesc := makeFirewallDescription(nm.String(), ipAddress) ports, protocol := getPortsAndProtocol(svc.Spec.Ports) @@ -371,7 +371,7 @@ func (gce *GCECloud) ensureInternalFirewalls(loadBalancerName, ipAddress, cluste if err != nil { return err } - err = gce.ensureInternalFirewall(svc, loadBalancerName, fwDesc, sourceRanges.StringSlice(), ports, protocol, nodes) + err = g.ensureInternalFirewall(svc, loadBalancerName, fwDesc, sourceRanges.StringSlice(), ports, protocol, nodes) if err != nil { return err } @@ -379,24 +379,24 @@ func (gce *GCECloud) ensureInternalFirewalls(loadBalancerName, ipAddress, cluste // Second firewall is for health checking nodes / services fwHCName := makeHealthCheckFirewallName(loadBalancerName, clusterID, sharedHealthCheck) hcSrcRanges := LoadBalancerSrcRanges() - return gce.ensureInternalFirewall(svc, fwHCName, "", hcSrcRanges, []string{healthCheckPort}, v1.ProtocolTCP, nodes) + return g.ensureInternalFirewall(svc, fwHCName, "", hcSrcRanges, []string{healthCheckPort}, v1.ProtocolTCP, nodes) } -func (gce *GCECloud) ensureInternalHealthCheck(name string, svcName types.NamespacedName, shared bool, path string, port int32) (*compute.HealthCheck, error) { +func (g *Cloud) ensureInternalHealthCheck(name string, svcName types.NamespacedName, shared bool, path string, port int32) (*compute.HealthCheck, error) { glog.V(2).Infof("ensureInternalHealthCheck(%v, %v, %v): checking existing health check", name, path, port) expectedHC := newInternalLBHealthCheck(name, svcName, shared, path, port) - hc, err := gce.GetHealthCheck(name) + hc, err := g.GetHealthCheck(name) if err != nil && !isNotFound(err) { return nil, err } if hc == nil { glog.V(2).Infof("ensureInternalHealthCheck: did not find health check %v, creating one with port %v path %v", name, port, path) - if err = gce.CreateHealthCheck(expectedHC); err != nil { + if err = g.CreateHealthCheck(expectedHC); err != nil { return nil, err } - hc, err = gce.GetHealthCheck(name) + hc, err = g.GetHealthCheck(name) if err != nil { glog.Errorf("Failed to get http health check %v", err) return nil, err @@ -408,12 +408,12 @@ func (gce *GCECloud) ensureInternalHealthCheck(name string, svcName types.Namesp if needToUpdateHealthChecks(hc, expectedHC) { glog.V(2).Infof("ensureInternalHealthCheck: health check %v exists but parameters have drifted - updating...", name) expectedHC = mergeHealthChecks(hc, expectedHC) - if err := gce.UpdateHealthCheck(expectedHC); err != nil { + if err := g.UpdateHealthCheck(expectedHC); err != nil { glog.Warningf("Failed to reconcile http health check %v parameters", name) return nil, err } glog.V(2).Infof("ensureInternalHealthCheck: corrected health check %v parameters successful", name) - hc, err = gce.GetHealthCheck(name) + hc, err = g.GetHealthCheck(name) if err != nil { return nil, err } @@ -421,9 +421,9 @@ func (gce *GCECloud) ensureInternalHealthCheck(name string, svcName types.Namesp return hc, nil } -func (gce *GCECloud) ensureInternalInstanceGroup(name, zone string, nodes []*v1.Node) (string, error) { +func (g *Cloud) ensureInternalInstanceGroup(name, zone string, nodes []*v1.Node) (string, error) { glog.V(2).Infof("ensureInternalInstanceGroup(%v, %v): checking group that it contains %v nodes", name, zone, len(nodes)) - ig, err := gce.GetInstanceGroup(name, zone) + ig, err := g.GetInstanceGroup(name, zone) if err != nil && !isNotFound(err) { return "", err } @@ -437,16 +437,16 @@ func (gce *GCECloud) ensureInternalInstanceGroup(name, zone string, nodes []*v1. if ig == nil { glog.V(2).Infof("ensureInternalInstanceGroup(%v, %v): creating instance group", name, zone) newIG := &compute.InstanceGroup{Name: name} - if err = gce.CreateInstanceGroup(newIG, zone); err != nil { + if err = g.CreateInstanceGroup(newIG, zone); err != nil { return "", err } - ig, err = gce.GetInstanceGroup(name, zone) + ig, err = g.GetInstanceGroup(name, zone) if err != nil { return "", err } } else { - instances, err := gce.ListInstancesInInstanceGroup(name, zone, allInstances) + instances, err := g.ListInstancesInInstanceGroup(name, zone, allInstances) if err != nil { return "", err } @@ -462,17 +462,17 @@ func (gce *GCECloud) ensureInternalInstanceGroup(name, zone string, nodes []*v1. if len(removeNodes) != 0 { glog.V(2).Infof("ensureInternalInstanceGroup(%v, %v): removing nodes: %v", name, zone, removeNodes) - instanceRefs := gce.ToInstanceReferences(zone, removeNodes) + instanceRefs := g.ToInstanceReferences(zone, removeNodes) // Possible we'll receive 404's here if the instance was deleted before getting to this point. - if err = gce.RemoveInstancesFromInstanceGroup(name, zone, instanceRefs); err != nil && !isNotFound(err) { + if err = g.RemoveInstancesFromInstanceGroup(name, zone, instanceRefs); err != nil && !isNotFound(err) { return "", err } } if len(addNodes) != 0 { glog.V(2).Infof("ensureInternalInstanceGroup(%v, %v): adding nodes: %v", name, zone, addNodes) - instanceRefs := gce.ToInstanceReferences(zone, addNodes) - if err = gce.AddInstancesToInstanceGroup(name, zone, instanceRefs); err != nil { + instanceRefs := g.ToInstanceReferences(zone, addNodes) + if err = g.AddInstancesToInstanceGroup(name, zone, instanceRefs); err != nil { return "", err } } @@ -482,12 +482,12 @@ func (gce *GCECloud) ensureInternalInstanceGroup(name, zone string, nodes []*v1. // ensureInternalInstanceGroups generates an unmanaged instance group for every zone // where a K8s node exists. It also ensures that each node belongs to an instance group -func (gce *GCECloud) ensureInternalInstanceGroups(name string, nodes []*v1.Node) ([]string, error) { +func (g *Cloud) ensureInternalInstanceGroups(name string, nodes []*v1.Node) ([]string, error) { zonedNodes := splitNodesByZone(nodes) - glog.V(2).Infof("ensureInternalInstanceGroups(%v): %d nodes over %d zones in region %v", name, len(nodes), len(zonedNodes), gce.region) + glog.V(2).Infof("ensureInternalInstanceGroups(%v): %d nodes over %d zones in region %v", name, len(nodes), len(zonedNodes), g.region) var igLinks []string for zone, nodes := range zonedNodes { - igLink, err := gce.ensureInternalInstanceGroup(name, zone, nodes) + igLink, err := g.ensureInternalInstanceGroup(name, zone, nodes) if err != nil { return []string{}, err } @@ -497,25 +497,25 @@ func (gce *GCECloud) ensureInternalInstanceGroups(name string, nodes []*v1.Node) return igLinks, nil } -func (gce *GCECloud) ensureInternalInstanceGroupsDeleted(name string) error { +func (g *Cloud) ensureInternalInstanceGroupsDeleted(name string) error { // List of nodes isn't available here - fetch all zones in region and try deleting this cluster's ig - zones, err := gce.ListZonesInRegion(gce.region) + zones, err := g.ListZonesInRegion(g.region) if err != nil { return err } glog.V(2).Infof("ensureInternalInstanceGroupsDeleted(%v): attempting delete instance group in all %d zones", name, len(zones)) for _, z := range zones { - if err := gce.DeleteInstanceGroup(name, z.Name); err != nil && !isNotFoundOrInUse(err) { + if err := g.DeleteInstanceGroup(name, z.Name); err != nil && !isNotFoundOrInUse(err) { return err } } return nil } -func (gce *GCECloud) ensureInternalBackendService(name, description string, affinityType v1.ServiceAffinity, scheme cloud.LbScheme, protocol v1.Protocol, igLinks []string, hcLink string) error { +func (g *Cloud) ensureInternalBackendService(name, description string, affinityType v1.ServiceAffinity, scheme cloud.LbScheme, protocol v1.Protocol, igLinks []string, hcLink string) error { glog.V(2).Infof("ensureInternalBackendService(%v, %v, %v): checking existing backend service with %d groups", name, scheme, protocol, len(igLinks)) - bs, err := gce.GetRegionBackendService(name, gce.region) + bs, err := g.GetRegionBackendService(name, g.region) if err != nil && !isNotFound(err) { return err } @@ -534,7 +534,7 @@ func (gce *GCECloud) ensureInternalBackendService(name, description string, affi // Create backend service if none was found if bs == nil { glog.V(2).Infof("ensureInternalBackendService: creating backend service %v", name) - err := gce.CreateRegionBackendService(expectedBS, gce.region) + err := g.CreateRegionBackendService(expectedBS, g.region) if err != nil { return err } @@ -549,7 +549,7 @@ func (gce *GCECloud) ensureInternalBackendService(name, description string, affi glog.V(2).Infof("ensureInternalBackendService: updating backend service %v", name) // Set fingerprint for optimistic locking expectedBS.Fingerprint = bs.Fingerprint - if err := gce.UpdateRegionBackendService(expectedBS, gce.region); err != nil { + if err := g.UpdateRegionBackendService(expectedBS, g.region); err != nil { return err } glog.V(2).Infof("ensureInternalBackendService: updated backend service %v successfully", name) @@ -557,9 +557,9 @@ func (gce *GCECloud) ensureInternalBackendService(name, description string, affi } // ensureInternalBackendServiceGroups updates backend services if their list of backend instance groups is incorrect. -func (gce *GCECloud) ensureInternalBackendServiceGroups(name string, igLinks []string) error { +func (g *Cloud) ensureInternalBackendServiceGroups(name string, igLinks []string) error { glog.V(2).Infof("ensureInternalBackendServiceGroups(%v): checking existing backend service's groups", name) - bs, err := gce.GetRegionBackendService(name, gce.region) + bs, err := g.GetRegionBackendService(name, g.region) if err != nil { return err } @@ -573,7 +573,7 @@ func (gce *GCECloud) ensureInternalBackendServiceGroups(name string, igLinks []s bs.Backends = backends glog.V(2).Infof("ensureInternalBackendServiceGroups: updating backend service %v", name) - if err := gce.UpdateRegionBackendService(bs, gce.region); err != nil { + if err := g.UpdateRegionBackendService(bs, g.region); err != nil { return err } glog.V(2).Infof("ensureInternalBackendServiceGroups: updated backend service %v successfully", name) @@ -707,8 +707,8 @@ func getPortsAndProtocol(svcPorts []v1.ServicePort) (ports []string, protocol v1 return ports, protocol } -func (gce *GCECloud) getBackendServiceLink(name string) string { - return gce.service.BasePath + strings.Join([]string{gce.projectID, "regions", gce.region, "backendServices", name}, "/") +func (g *Cloud) getBackendServiceLink(name string) string { + return g.service.BasePath + strings.Join([]string{g.projectID, "regions", g.region, "backendServices", name}, "/") } func getNameFromLink(link string) string { diff --git a/pkg/cloudprovider/providers/gce/gce_loadbalancer_internal_test.go b/pkg/cloudprovider/providers/gce/gce_loadbalancer_internal_test.go index e3910828de8..8b08ce378e8 100644 --- a/pkg/cloudprovider/providers/gce/gce_loadbalancer_internal_test.go +++ b/pkg/cloudprovider/providers/gce/gce_loadbalancer_internal_test.go @@ -34,7 +34,7 @@ import ( "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/mock" ) -func createInternalLoadBalancer(gce *GCECloud, svc *v1.Service, existingFwdRule *compute.ForwardingRule, nodeNames []string, clusterName, clusterID, zoneName string) (*v1.LoadBalancerStatus, error) { +func createInternalLoadBalancer(gce *Cloud, svc *v1.Service, existingFwdRule *compute.ForwardingRule, nodeNames []string, clusterName, clusterID, zoneName string) (*v1.LoadBalancerStatus, error) { nodes, err := createAndInsertNodes(gce, nodeNames, zoneName) if err != nil { return nil, err @@ -335,19 +335,19 @@ func TestUpdateInternalLoadBalancerBackendServices(t *testing.T) { require.NoError(t, err) // Check that the new BackendService has the correct attributes - url_base := fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s", vals.ProjectID) + urlBase := fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s", vals.ProjectID) assert.NotEqual(t, existingBS, bs) assert.Equal( t, bs.SelfLink, - fmt.Sprintf("%s/regions/%s/backendServices/%s", url_base, vals.Region, bs.Name), + fmt.Sprintf("%s/regions/%s/backendServices/%s", urlBase, vals.Region, bs.Name), ) assert.Equal(t, bs.Description, `{"kubernetes.io/service-name":"/"}`) assert.Equal( t, bs.HealthChecks, - []string{fmt.Sprintf("%s/global/healthChecks/k8s-%s-node", url_base, vals.ClusterID)}, + []string{fmt.Sprintf("%s/global/healthChecks/k8s-%s-node", urlBase, vals.ClusterID)}, ) } @@ -487,16 +487,16 @@ func TestClearPreviousInternalResources(t *testing.T) { c := gce.c.(*cloud.MockGCE) require.NoError(t, err) - hc_1, err := gce.ensureInternalHealthCheck("hc_1", nm, false, "healthz", 12345) + hc1, err := gce.ensureInternalHealthCheck("hc1", nm, false, "healthz", 12345) require.NoError(t, err) - hc_2, err := gce.ensureInternalHealthCheck("hc_2", nm, false, "healthz", 12346) + hc2, err := gce.ensureInternalHealthCheck("hc2", nm, false, "healthz", 12346) require.NoError(t, err) err = gce.ensureInternalBackendService(svc.ObjectMeta.Name, "", svc.Spec.SessionAffinity, cloud.SchemeInternal, v1.ProtocolTCP, []string{}, "") require.NoError(t, err) backendSvc, err := gce.GetRegionBackendService(svc.ObjectMeta.Name, gce.region) - backendSvc.HealthChecks = []string{hc_1.SelfLink, hc_2.SelfLink} + backendSvc.HealthChecks = []string{hc1.SelfLink, hc2.SelfLink} c.MockRegionBackendServices.DeleteHook = mock.DeleteRegionBackendServicesErrHook c.MockHealthChecks.DeleteHook = mock.DeleteHealthChecksInternalErrHook @@ -505,27 +505,27 @@ func TestClearPreviousInternalResources(t *testing.T) { backendSvc, err = gce.GetRegionBackendService(svc.ObjectMeta.Name, gce.region) assert.NoError(t, err) assert.NotNil(t, backendSvc, "BackendService should not be deleted when api is mocked out.") - hc_1, err = gce.GetHealthCheck("hc_1") + hc1, err = gce.GetHealthCheck("hc1") assert.NoError(t, err) - assert.NotNil(t, hc_1, "HealthCheck should not be deleted when there are more than one healthcheck attached.") - hc_2, err = gce.GetHealthCheck("hc_2") + assert.NotNil(t, hc1, "HealthCheck should not be deleted when there are more than one healthcheck attached.") + hc2, err = gce.GetHealthCheck("hc2") assert.NoError(t, err) - assert.NotNil(t, hc_2, "HealthCheck should not be deleted when there are more than one healthcheck attached.") + assert.NotNil(t, hc2, "HealthCheck should not be deleted when there are more than one healthcheck attached.") c.MockRegionBackendServices.DeleteHook = mock.DeleteRegionBackendServicesInUseErrHook - backendSvc.HealthChecks = []string{hc_1.SelfLink} + backendSvc.HealthChecks = []string{hc1.SelfLink} gce.clearPreviousInternalResources(svc, loadBalancerName, backendSvc, "expectedBSName", "expectedHCName") - hc_1, err = gce.GetHealthCheck("hc_1") + hc1, err = gce.GetHealthCheck("hc1") assert.NoError(t, err) - assert.NotNil(t, hc_1, "HealthCheck should not be deleted when api is mocked out.") + assert.NotNil(t, hc1, "HealthCheck should not be deleted when api is mocked out.") c.MockHealthChecks.DeleteHook = mock.DeleteHealthChecksInuseErrHook gce.clearPreviousInternalResources(svc, loadBalancerName, backendSvc, "expectedBSName", "expectedHCName") - hc_1, err = gce.GetHealthCheck("hc_1") + hc1, err = gce.GetHealthCheck("hc1") assert.NoError(t, err) - assert.NotNil(t, hc_1, "HealthCheck should not be deleted when api is mocked out.") + assert.NotNil(t, hc1, "HealthCheck should not be deleted when api is mocked out.") c.MockRegionBackendServices.DeleteHook = nil c.MockHealthChecks.DeleteHook = nil @@ -534,9 +534,9 @@ func TestClearPreviousInternalResources(t *testing.T) { backendSvc, err = gce.GetRegionBackendService(svc.ObjectMeta.Name, gce.region) assert.Error(t, err) assert.Nil(t, backendSvc, "BackendService should be deleted.") - hc_1, err = gce.GetHealthCheck("hc_1") + hc1, err = gce.GetHealthCheck("hc1") assert.Error(t, err) - assert.Nil(t, hc_1, "HealthCheck should be deleted.") + assert.Nil(t, hc1, "HealthCheck should be deleted.") } func TestEnsureInternalFirewallSucceedsOnXPN(t *testing.T) { diff --git a/pkg/cloudprovider/providers/gce/gce_loadbalancer_utils_test.go b/pkg/cloudprovider/providers/gce/gce_loadbalancer_utils_test.go index bdea0d5eb03..7c133c7c9a2 100644 --- a/pkg/cloudprovider/providers/gce/gce_loadbalancer_utils_test.go +++ b/pkg/cloudprovider/providers/gce/gce_loadbalancer_utils_test.go @@ -67,7 +67,7 @@ var ( FilewallChangeMsg = fmt.Sprintf("%s %s %s", v1.EventTypeNormal, eventReasonManualChange, eventMsgFirewallChange) ) -func createAndInsertNodes(gce *GCECloud, nodeNames []string, zoneName string) ([]*v1.Node, error) { +func createAndInsertNodes(gce *Cloud, nodeNames []string, zoneName string) ([]*v1.Node, error) { nodes := []*v1.Node{} for _, name := range nodeNames { @@ -116,7 +116,7 @@ func createAndInsertNodes(gce *GCECloud, nodeNames []string, zoneName string) ([ return nodes, nil } -func assertExternalLbResources(t *testing.T, gce *GCECloud, apiService *v1.Service, vals TestClusterValues, nodeNames []string) { +func assertExternalLbResources(t *testing.T, gce *Cloud, apiService *v1.Service, vals TestClusterValues, nodeNames []string) { lbName := gce.GetLoadBalancerName(context.TODO(), "", apiService) hcName := MakeNodesHealthCheckName(vals.ClusterID) @@ -141,7 +141,7 @@ func assertExternalLbResources(t *testing.T, gce *GCECloud, apiService *v1.Servi assert.Equal(t, 1, len(pool.Instances)) // Check that HealthCheck is created - healthcheck, err := gce.GetHttpHealthCheck(hcName) + healthcheck, err := gce.GetHTTPHealthCheck(hcName) require.NoError(t, err) assert.Equal(t, hcName, healthcheck.Name) @@ -153,7 +153,7 @@ func assertExternalLbResources(t *testing.T, gce *GCECloud, apiService *v1.Servi assert.Equal(t, "123-123", fwdRule.PortRange) } -func assertExternalLbResourcesDeleted(t *testing.T, gce *GCECloud, apiService *v1.Service, vals TestClusterValues, firewallsDeleted bool) { +func assertExternalLbResourcesDeleted(t *testing.T, gce *Cloud, apiService *v1.Service, vals TestClusterValues, firewallsDeleted bool) { lbName := gce.GetLoadBalancerName(context.TODO(), "", apiService) hcName := MakeNodesHealthCheckName(vals.ClusterID) @@ -182,13 +182,13 @@ func assertExternalLbResourcesDeleted(t *testing.T, gce *GCECloud, apiService *v assert.Nil(t, pool) // Check that HealthCheck is deleted - healthcheck, err := gce.GetHttpHealthCheck(hcName) + healthcheck, err := gce.GetHTTPHealthCheck(hcName) require.Error(t, err) assert.Nil(t, healthcheck) } -func assertInternalLbResources(t *testing.T, gce *GCECloud, apiService *v1.Service, vals TestClusterValues, nodeNames []string) { +func assertInternalLbResources(t *testing.T, gce *Cloud, apiService *v1.Service, vals TestClusterValues, nodeNames []string) { lbName := gce.GetLoadBalancerName(context.TODO(), "", apiService) // Check that Instance Group is created @@ -241,7 +241,7 @@ func assertInternalLbResources(t *testing.T, gce *GCECloud, apiService *v1.Servi assert.Equal(t, gce.NetworkURL(), fwdRule.Subnetwork) } -func assertInternalLbResourcesDeleted(t *testing.T, gce *GCECloud, apiService *v1.Service, vals TestClusterValues, firewallsDeleted bool) { +func assertInternalLbResourcesDeleted(t *testing.T, gce *Cloud, apiService *v1.Service, vals TestClusterValues, firewallsDeleted bool) { lbName := gce.GetLoadBalancerName(context.TODO(), "", apiService) sharedHealthCheck := !v1_service.RequestsOnlyLocalTraffic(apiService) hcName := makeHealthCheckName(lbName, vals.ClusterID, sharedHealthCheck) diff --git a/pkg/cloudprovider/providers/gce/gce_networkendpointgroup.go b/pkg/cloudprovider/providers/gce/gce_networkendpointgroup.go index f82781e08d9..b7aa998cc34 100644 --- a/pkg/cloudprovider/providers/gce/gce_networkendpointgroup.go +++ b/pkg/cloudprovider/providers/gce/gce_networkendpointgroup.go @@ -27,40 +27,38 @@ import ( "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta" ) -const ( - NEGIPPortNetworkEndpointType = "GCE_VM_IP_PORT" -) - func newNetworkEndpointGroupMetricContext(request string, zone string) *metricContext { return newGenericMetricContext("networkendpointgroup_", request, unusedMetricLabel, zone, computeBetaVersion) } -func (gce *GCECloud) GetNetworkEndpointGroup(name string, zone string) (*computebeta.NetworkEndpointGroup, error) { +// GetNetworkEndpointGroup returns the collection of network endpoints for the name in zone +func (g *Cloud) GetNetworkEndpointGroup(name string, zone string) (*computebeta.NetworkEndpointGroup, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newNetworkEndpointGroupMetricContext("get", zone) - v, err := gce.c.BetaNetworkEndpointGroups().Get(ctx, meta.ZonalKey(name, zone)) + v, err := g.c.BetaNetworkEndpointGroups().Get(ctx, meta.ZonalKey(name, zone)) return v, mc.Observe(err) } -func (gce *GCECloud) ListNetworkEndpointGroup(zone string) ([]*computebeta.NetworkEndpointGroup, error) { +// ListNetworkEndpointGroup returns the collection of network endpoints for the zone +func (g *Cloud) ListNetworkEndpointGroup(zone string) ([]*computebeta.NetworkEndpointGroup, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newNetworkEndpointGroupMetricContext("list", zone) - negs, err := gce.c.BetaNetworkEndpointGroups().List(ctx, zone, filter.None) + negs, err := g.c.BetaNetworkEndpointGroups().List(ctx, zone, filter.None) return negs, mc.Observe(err) } // AggregatedListNetworkEndpointGroup returns a map of zone -> endpoint group. -func (gce *GCECloud) AggregatedListNetworkEndpointGroup() (map[string][]*computebeta.NetworkEndpointGroup, error) { +func (g *Cloud) AggregatedListNetworkEndpointGroup() (map[string][]*computebeta.NetworkEndpointGroup, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newNetworkEndpointGroupMetricContext("aggregated_list", "") // TODO: filter for the region the cluster is in. - all, err := gce.c.BetaNetworkEndpointGroups().AggregatedList(ctx, filter.None) + all, err := g.c.BetaNetworkEndpointGroups().AggregatedList(ctx, filter.None) if err != nil { return nil, mc.Observe(err) } @@ -77,23 +75,26 @@ func (gce *GCECloud) AggregatedListNetworkEndpointGroup() (map[string][]*compute return ret, mc.Observe(nil) } -func (gce *GCECloud) CreateNetworkEndpointGroup(neg *computebeta.NetworkEndpointGroup, zone string) error { +// CreateNetworkEndpointGroup creates an endpoint group in the zone +func (g *Cloud) CreateNetworkEndpointGroup(neg *computebeta.NetworkEndpointGroup, zone string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newNetworkEndpointGroupMetricContext("create", zone) - return mc.Observe(gce.c.BetaNetworkEndpointGroups().Insert(ctx, meta.ZonalKey(neg.Name, zone), neg)) + return mc.Observe(g.c.BetaNetworkEndpointGroups().Insert(ctx, meta.ZonalKey(neg.Name, zone), neg)) } -func (gce *GCECloud) DeleteNetworkEndpointGroup(name string, zone string) error { +// DeleteNetworkEndpointGroup deletes the name endpoint group from the zone +func (g *Cloud) DeleteNetworkEndpointGroup(name string, zone string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newNetworkEndpointGroupMetricContext("delete", zone) - return mc.Observe(gce.c.BetaNetworkEndpointGroups().Delete(ctx, meta.ZonalKey(name, zone))) + return mc.Observe(g.c.BetaNetworkEndpointGroups().Delete(ctx, meta.ZonalKey(name, zone))) } -func (gce *GCECloud) AttachNetworkEndpoints(name, zone string, endpoints []*computebeta.NetworkEndpoint) error { +// AttachNetworkEndpoints associates the referenced endpoints with the named endpoint group in the zone +func (g *Cloud) AttachNetworkEndpoints(name, zone string, endpoints []*computebeta.NetworkEndpoint) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() @@ -101,10 +102,11 @@ func (gce *GCECloud) AttachNetworkEndpoints(name, zone string, endpoints []*comp req := &computebeta.NetworkEndpointGroupsAttachEndpointsRequest{ NetworkEndpoints: endpoints, } - return mc.Observe(gce.c.BetaNetworkEndpointGroups().AttachNetworkEndpoints(ctx, meta.ZonalKey(name, zone), req)) + return mc.Observe(g.c.BetaNetworkEndpointGroups().AttachNetworkEndpoints(ctx, meta.ZonalKey(name, zone), req)) } -func (gce *GCECloud) DetachNetworkEndpoints(name, zone string, endpoints []*computebeta.NetworkEndpoint) error { +// DetachNetworkEndpoints breaks the association between the referenced endpoints and the named endpoint group in the zone +func (g *Cloud) DetachNetworkEndpoints(name, zone string, endpoints []*computebeta.NetworkEndpoint) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() @@ -112,10 +114,11 @@ func (gce *GCECloud) DetachNetworkEndpoints(name, zone string, endpoints []*comp req := &computebeta.NetworkEndpointGroupsDetachEndpointsRequest{ NetworkEndpoints: endpoints, } - return mc.Observe(gce.c.BetaNetworkEndpointGroups().DetachNetworkEndpoints(ctx, meta.ZonalKey(name, zone), req)) + return mc.Observe(g.c.BetaNetworkEndpointGroups().DetachNetworkEndpoints(ctx, meta.ZonalKey(name, zone), req)) } -func (gce *GCECloud) ListNetworkEndpoints(name, zone string, showHealthStatus bool) ([]*computebeta.NetworkEndpointWithHealthStatus, error) { +// ListNetworkEndpoints returns all the endpoints associated with the endpoint group in zone and optionally their status. +func (g *Cloud) ListNetworkEndpoints(name, zone string, showHealthStatus bool) ([]*computebeta.NetworkEndpointWithHealthStatus, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() @@ -127,6 +130,6 @@ func (gce *GCECloud) ListNetworkEndpoints(name, zone string, showHealthStatus bo req := &computebeta.NetworkEndpointGroupsListEndpointsRequest{ HealthStatus: healthStatus, } - l, err := gce.c.BetaNetworkEndpointGroups().ListNetworkEndpoints(ctx, meta.ZonalKey(name, zone), req, filter.None) + l, err := g.c.BetaNetworkEndpointGroups().ListNetworkEndpoints(ctx, meta.ZonalKey(name, zone), req, filter.None) return l, mc.Observe(err) } diff --git a/pkg/cloudprovider/providers/gce/gce_routes.go b/pkg/cloudprovider/providers/gce/gce_routes.go index f53a620912e..703e2dd3cf2 100644 --- a/pkg/cloudprovider/providers/gce/gce_routes.go +++ b/pkg/cloudprovider/providers/gce/gce_routes.go @@ -37,14 +37,14 @@ func newRoutesMetricContext(request string) *metricContext { } // ListRoutes in the cloud environment. -func (gce *GCECloud) ListRoutes(ctx context.Context, clusterName string) ([]*cloudprovider.Route, error) { +func (g *Cloud) ListRoutes(ctx context.Context, clusterName string) ([]*cloudprovider.Route, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newRoutesMetricContext("list") prefix := truncateClusterName(clusterName) - f := filter.Regexp("name", prefix+"-.*").AndRegexp("network", gce.NetworkURL()).AndRegexp("description", k8sNodeRouteTag) - routes, err := gce.c.Routes().List(ctx, f) + f := filter.Regexp("name", prefix+"-.*").AndRegexp("network", g.NetworkURL()).AndRegexp("description", k8sNodeRouteTag) + routes, err := g.c.Routes().List(ctx, f) if err != nil { return nil, mc.Observe(err) } @@ -63,13 +63,13 @@ func (gce *GCECloud) ListRoutes(ctx context.Context, clusterName string) ([]*clo } // CreateRoute in the cloud environment. -func (gce *GCECloud) CreateRoute(ctx context.Context, clusterName string, nameHint string, route *cloudprovider.Route) error { +func (g *Cloud) CreateRoute(ctx context.Context, clusterName string, nameHint string, route *cloudprovider.Route) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newRoutesMetricContext("create") - targetInstance, err := gce.getInstanceByName(mapNodeNameToInstanceName(route.TargetNode)) + targetInstance, err := g.getInstanceByName(mapNodeNameToInstanceName(route.TargetNode)) if err != nil { return mc.Observe(err) } @@ -77,11 +77,11 @@ func (gce *GCECloud) CreateRoute(ctx context.Context, clusterName string, nameHi Name: truncateClusterName(clusterName) + "-" + nameHint, DestRange: route.DestinationCIDR, NextHopInstance: fmt.Sprintf("zones/%s/instances/%s", targetInstance.Zone, targetInstance.Name), - Network: gce.NetworkURL(), + Network: g.NetworkURL(), Priority: 1000, Description: k8sNodeRouteTag, } - err = gce.c.Routes().Insert(ctx, meta.GlobalKey(cr.Name), cr) + err = g.c.Routes().Insert(ctx, meta.GlobalKey(cr.Name), cr) if isHTTPErrorCode(err, http.StatusConflict) { glog.Infof("Route %q already exists.", cr.Name) err = nil @@ -90,12 +90,12 @@ func (gce *GCECloud) CreateRoute(ctx context.Context, clusterName string, nameHi } // DeleteRoute from the cloud environment. -func (gce *GCECloud) DeleteRoute(ctx context.Context, clusterName string, route *cloudprovider.Route) error { +func (g *Cloud) DeleteRoute(ctx context.Context, clusterName string, route *cloudprovider.Route) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newRoutesMetricContext("delete") - return mc.Observe(gce.c.Routes().Delete(ctx, meta.GlobalKey(route.Name))) + return mc.Observe(g.c.Routes().Delete(ctx, meta.GlobalKey(route.Name))) } func truncateClusterName(clusterName string) string { diff --git a/pkg/cloudprovider/providers/gce/gce_securitypolicy.go b/pkg/cloudprovider/providers/gce/gce_securitypolicy.go index 293946590b3..3ce2f71fa54 100644 --- a/pkg/cloudprovider/providers/gce/gce_securitypolicy.go +++ b/pkg/cloudprovider/providers/gce/gce_securitypolicy.go @@ -29,88 +29,88 @@ func newSecurityPolicyMetricContextWithVersion(request, version string) *metricC } // GetBetaSecurityPolicy retrieves a security policy. -func (gce *GCECloud) GetBetaSecurityPolicy(name string) (*computebeta.SecurityPolicy, error) { +func (g *Cloud) GetBetaSecurityPolicy(name string) (*computebeta.SecurityPolicy, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newSecurityPolicyMetricContextWithVersion("get", computeBetaVersion) - v, err := gce.c.BetaSecurityPolicies().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.BetaSecurityPolicies().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // ListBetaSecurityPolicy lists all security policies in the project. -func (gce *GCECloud) ListBetaSecurityPolicy() ([]*computebeta.SecurityPolicy, error) { +func (g *Cloud) ListBetaSecurityPolicy() ([]*computebeta.SecurityPolicy, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newSecurityPolicyMetricContextWithVersion("list", computeBetaVersion) - v, err := gce.c.BetaSecurityPolicies().List(ctx, filter.None) + v, err := g.c.BetaSecurityPolicies().List(ctx, filter.None) return v, mc.Observe(err) } // CreateBetaSecurityPolicy creates the given security policy. -func (gce *GCECloud) CreateBetaSecurityPolicy(sp *computebeta.SecurityPolicy) error { +func (g *Cloud) CreateBetaSecurityPolicy(sp *computebeta.SecurityPolicy) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newSecurityPolicyMetricContextWithVersion("create", computeBetaVersion) - return mc.Observe(gce.c.BetaSecurityPolicies().Insert(ctx, meta.GlobalKey(sp.Name), sp)) + return mc.Observe(g.c.BetaSecurityPolicies().Insert(ctx, meta.GlobalKey(sp.Name), sp)) } // DeleteBetaSecurityPolicy deletes the given security policy. -func (gce *GCECloud) DeleteBetaSecurityPolicy(name string) error { +func (g *Cloud) DeleteBetaSecurityPolicy(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newSecurityPolicyMetricContextWithVersion("delete", computeBetaVersion) - return mc.Observe(gce.c.BetaSecurityPolicies().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.BetaSecurityPolicies().Delete(ctx, meta.GlobalKey(name))) } // PatchBetaSecurityPolicy applies the given security policy as a // patch to an existing security policy. -func (gce *GCECloud) PatchBetaSecurityPolicy(sp *computebeta.SecurityPolicy) error { +func (g *Cloud) PatchBetaSecurityPolicy(sp *computebeta.SecurityPolicy) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newSecurityPolicyMetricContextWithVersion("patch", computeBetaVersion) - return mc.Observe(gce.c.BetaSecurityPolicies().Patch(ctx, meta.GlobalKey(sp.Name), sp)) + return mc.Observe(g.c.BetaSecurityPolicies().Patch(ctx, meta.GlobalKey(sp.Name), sp)) } // GetRuleForBetaSecurityPolicy gets rule from a security policy. -func (gce *GCECloud) GetRuleForBetaSecurityPolicy(name string) (*computebeta.SecurityPolicyRule, error) { +func (g *Cloud) GetRuleForBetaSecurityPolicy(name string) (*computebeta.SecurityPolicyRule, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newSecurityPolicyMetricContextWithVersion("get_rule", computeBetaVersion) - v, err := gce.c.BetaSecurityPolicies().GetRule(ctx, meta.GlobalKey(name)) + v, err := g.c.BetaSecurityPolicies().GetRule(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } // AddRuletoBetaSecurityPolicy adds the given security policy rule to // a security policy. -func (gce *GCECloud) AddRuletoBetaSecurityPolicy(name string, spr *computebeta.SecurityPolicyRule) error { +func (g *Cloud) AddRuletoBetaSecurityPolicy(name string, spr *computebeta.SecurityPolicyRule) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newSecurityPolicyMetricContextWithVersion("add_rule", computeBetaVersion) - return mc.Observe(gce.c.BetaSecurityPolicies().AddRule(ctx, meta.GlobalKey(name), spr)) + return mc.Observe(g.c.BetaSecurityPolicies().AddRule(ctx, meta.GlobalKey(name), spr)) } // PatchRuleForBetaSecurityPolicy patches the given security policy // rule to a security policy. -func (gce *GCECloud) PatchRuleForBetaSecurityPolicy(name string, spr *computebeta.SecurityPolicyRule) error { +func (g *Cloud) PatchRuleForBetaSecurityPolicy(name string, spr *computebeta.SecurityPolicyRule) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newSecurityPolicyMetricContextWithVersion("patch_rule", computeBetaVersion) - return mc.Observe(gce.c.BetaSecurityPolicies().PatchRule(ctx, meta.GlobalKey(name), spr)) + return mc.Observe(g.c.BetaSecurityPolicies().PatchRule(ctx, meta.GlobalKey(name), spr)) } // RemoveRuleFromBetaSecurityPolicy removes rule from a security policy. -func (gce *GCECloud) RemoveRuleFromBetaSecurityPolicy(name string) error { +func (g *Cloud) RemoveRuleFromBetaSecurityPolicy(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newSecurityPolicyMetricContextWithVersion("remove_rule", computeBetaVersion) - return mc.Observe(gce.c.BetaSecurityPolicies().RemoveRule(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.BetaSecurityPolicies().RemoveRule(ctx, meta.GlobalKey(name))) } diff --git a/pkg/cloudprovider/providers/gce/gce_targetpool.go b/pkg/cloudprovider/providers/gce/gce_targetpool.go index 8c1127e749e..65388b44980 100644 --- a/pkg/cloudprovider/providers/gce/gce_targetpool.go +++ b/pkg/cloudprovider/providers/gce/gce_targetpool.go @@ -28,35 +28,35 @@ func newTargetPoolMetricContext(request, region string) *metricContext { } // GetTargetPool returns the TargetPool by name. -func (gce *GCECloud) GetTargetPool(name, region string) (*compute.TargetPool, error) { +func (g *Cloud) GetTargetPool(name, region string) (*compute.TargetPool, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetPoolMetricContext("get", region) - v, err := gce.c.TargetPools().Get(ctx, meta.RegionalKey(name, region)) + v, err := g.c.TargetPools().Get(ctx, meta.RegionalKey(name, region)) return v, mc.Observe(err) } // CreateTargetPool creates the passed TargetPool -func (gce *GCECloud) CreateTargetPool(tp *compute.TargetPool, region string) error { +func (g *Cloud) CreateTargetPool(tp *compute.TargetPool, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetPoolMetricContext("create", region) - return mc.Observe(gce.c.TargetPools().Insert(ctx, meta.RegionalKey(tp.Name, region), tp)) + return mc.Observe(g.c.TargetPools().Insert(ctx, meta.RegionalKey(tp.Name, region), tp)) } // DeleteTargetPool deletes TargetPool by name. -func (gce *GCECloud) DeleteTargetPool(name, region string) error { +func (g *Cloud) DeleteTargetPool(name, region string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetPoolMetricContext("delete", region) - return mc.Observe(gce.c.TargetPools().Delete(ctx, meta.RegionalKey(name, region))) + return mc.Observe(g.c.TargetPools().Delete(ctx, meta.RegionalKey(name, region))) } // AddInstancesToTargetPool adds instances by link to the TargetPool -func (gce *GCECloud) AddInstancesToTargetPool(name, region string, instanceRefs []*compute.InstanceReference) error { +func (g *Cloud) AddInstancesToTargetPool(name, region string, instanceRefs []*compute.InstanceReference) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() @@ -64,11 +64,11 @@ func (gce *GCECloud) AddInstancesToTargetPool(name, region string, instanceRefs Instances: instanceRefs, } mc := newTargetPoolMetricContext("add_instances", region) - return mc.Observe(gce.c.TargetPools().AddInstance(ctx, meta.RegionalKey(name, region), req)) + return mc.Observe(g.c.TargetPools().AddInstance(ctx, meta.RegionalKey(name, region), req)) } // RemoveInstancesFromTargetPool removes instances by link to the TargetPool -func (gce *GCECloud) RemoveInstancesFromTargetPool(name, region string, instanceRefs []*compute.InstanceReference) error { +func (g *Cloud) RemoveInstancesFromTargetPool(name, region string, instanceRefs []*compute.InstanceReference) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() @@ -76,5 +76,5 @@ func (gce *GCECloud) RemoveInstancesFromTargetPool(name, region string, instance Instances: instanceRefs, } mc := newTargetPoolMetricContext("remove_instances", region) - return mc.Observe(gce.c.TargetPools().RemoveInstance(ctx, meta.RegionalKey(name, region), req)) + return mc.Observe(g.c.TargetPools().RemoveInstance(ctx, meta.RegionalKey(name, region), req)) } diff --git a/pkg/cloudprovider/providers/gce/gce_targetproxy.go b/pkg/cloudprovider/providers/gce/gce_targetproxy.go index c5bd21aaedf..64a4190628e 100644 --- a/pkg/cloudprovider/providers/gce/gce_targetproxy.go +++ b/pkg/cloudprovider/providers/gce/gce_targetproxy.go @@ -28,87 +28,87 @@ func newTargetProxyMetricContext(request string) *metricContext { return newGenericMetricContext("targetproxy", request, unusedMetricLabel, unusedMetricLabel, computeV1Version) } -// GetTargetHttpProxy returns the UrlMap by name. -func (gce *GCECloud) GetTargetHttpProxy(name string) (*compute.TargetHttpProxy, error) { +// GetTargetHTTPProxy returns the UrlMap by name. +func (g *Cloud) GetTargetHTTPProxy(name string) (*compute.TargetHttpProxy, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetProxyMetricContext("get") - v, err := gce.c.TargetHttpProxies().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.TargetHttpProxies().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } -// CreateTargetHttpProxy creates a TargetHttpProxy -func (gce *GCECloud) CreateTargetHttpProxy(proxy *compute.TargetHttpProxy) error { +// CreateTargetHTTPProxy creates a TargetHttpProxy +func (g *Cloud) CreateTargetHTTPProxy(proxy *compute.TargetHttpProxy) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetProxyMetricContext("create") - return mc.Observe(gce.c.TargetHttpProxies().Insert(ctx, meta.GlobalKey(proxy.Name), proxy)) + return mc.Observe(g.c.TargetHttpProxies().Insert(ctx, meta.GlobalKey(proxy.Name), proxy)) } -// SetUrlMapForTargetHttpProxy sets the given UrlMap for the given TargetHttpProxy. -func (gce *GCECloud) SetUrlMapForTargetHttpProxy(proxy *compute.TargetHttpProxy, urlMapLink string) error { +// SetURLMapForTargetHTTPProxy sets the given UrlMap for the given TargetHttpProxy. +func (g *Cloud) SetURLMapForTargetHTTPProxy(proxy *compute.TargetHttpProxy, urlMapLink string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() ref := &compute.UrlMapReference{UrlMap: urlMapLink} mc := newTargetProxyMetricContext("set_url_map") - return mc.Observe(gce.c.TargetHttpProxies().SetUrlMap(ctx, meta.GlobalKey(proxy.Name), ref)) + return mc.Observe(g.c.TargetHttpProxies().SetUrlMap(ctx, meta.GlobalKey(proxy.Name), ref)) } -// DeleteTargetHttpProxy deletes the TargetHttpProxy by name. -func (gce *GCECloud) DeleteTargetHttpProxy(name string) error { +// DeleteTargetHTTPProxy deletes the TargetHttpProxy by name. +func (g *Cloud) DeleteTargetHTTPProxy(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetProxyMetricContext("delete") - return mc.Observe(gce.c.TargetHttpProxies().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.TargetHttpProxies().Delete(ctx, meta.GlobalKey(name))) } -// ListTargetHttpProxies lists all TargetHttpProxies in the project. -func (gce *GCECloud) ListTargetHttpProxies() ([]*compute.TargetHttpProxy, error) { +// ListTargetHTTPProxies lists all TargetHttpProxies in the project. +func (g *Cloud) ListTargetHTTPProxies() ([]*compute.TargetHttpProxy, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetProxyMetricContext("list") - v, err := gce.c.TargetHttpProxies().List(ctx, filter.None) + v, err := g.c.TargetHttpProxies().List(ctx, filter.None) return v, mc.Observe(err) } // TargetHttpsProxy management -// GetTargetHttpsProxy returns the UrlMap by name. -func (gce *GCECloud) GetTargetHttpsProxy(name string) (*compute.TargetHttpsProxy, error) { +// GetTargetHTTPSProxy returns the UrlMap by name. +func (g *Cloud) GetTargetHTTPSProxy(name string) (*compute.TargetHttpsProxy, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetProxyMetricContext("get") - v, err := gce.c.TargetHttpsProxies().Get(ctx, meta.GlobalKey(name)) + v, err := g.c.TargetHttpsProxies().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } -// CreateTargetHttpsProxy creates a TargetHttpsProxy -func (gce *GCECloud) CreateTargetHttpsProxy(proxy *compute.TargetHttpsProxy) error { +// CreateTargetHTTPSProxy creates a TargetHttpsProxy +func (g *Cloud) CreateTargetHTTPSProxy(proxy *compute.TargetHttpsProxy) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetProxyMetricContext("create") - return mc.Observe(gce.c.TargetHttpsProxies().Insert(ctx, meta.GlobalKey(proxy.Name), proxy)) + return mc.Observe(g.c.TargetHttpsProxies().Insert(ctx, meta.GlobalKey(proxy.Name), proxy)) } -// SetUrlMapForTargetHttpsProxy sets the given UrlMap for the given TargetHttpsProxy. -func (gce *GCECloud) SetUrlMapForTargetHttpsProxy(proxy *compute.TargetHttpsProxy, urlMapLink string) error { +// SetURLMapForTargetHTTPSProxy sets the given UrlMap for the given TargetHttpsProxy. +func (g *Cloud) SetURLMapForTargetHTTPSProxy(proxy *compute.TargetHttpsProxy, urlMapLink string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetProxyMetricContext("set_url_map") ref := &compute.UrlMapReference{UrlMap: urlMapLink} - return mc.Observe(gce.c.TargetHttpsProxies().SetUrlMap(ctx, meta.GlobalKey(proxy.Name), ref)) + return mc.Observe(g.c.TargetHttpsProxies().SetUrlMap(ctx, meta.GlobalKey(proxy.Name), ref)) } -// SetSslCertificateForTargetHttpsProxy sets the given SslCertificate for the given TargetHttpsProxy. -func (gce *GCECloud) SetSslCertificateForTargetHttpsProxy(proxy *compute.TargetHttpsProxy, sslCertURLs []string) error { +// SetSslCertificateForTargetHTTPSProxy sets the given SslCertificate for the given TargetHttpsProxy. +func (g *Cloud) SetSslCertificateForTargetHTTPSProxy(proxy *compute.TargetHttpsProxy, sslCertURLs []string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() @@ -116,24 +116,24 @@ func (gce *GCECloud) SetSslCertificateForTargetHttpsProxy(proxy *compute.TargetH req := &compute.TargetHttpsProxiesSetSslCertificatesRequest{ SslCertificates: sslCertURLs, } - return mc.Observe(gce.c.TargetHttpsProxies().SetSslCertificates(ctx, meta.GlobalKey(proxy.Name), req)) + return mc.Observe(g.c.TargetHttpsProxies().SetSslCertificates(ctx, meta.GlobalKey(proxy.Name), req)) } -// DeleteTargetHttpsProxy deletes the TargetHttpsProxy by name. -func (gce *GCECloud) DeleteTargetHttpsProxy(name string) error { +// DeleteTargetHTTPSProxy deletes the TargetHttpsProxy by name. +func (g *Cloud) DeleteTargetHTTPSProxy(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetProxyMetricContext("delete") - return mc.Observe(gce.c.TargetHttpsProxies().Delete(ctx, meta.GlobalKey(name))) + return mc.Observe(g.c.TargetHttpsProxies().Delete(ctx, meta.GlobalKey(name))) } -// ListTargetHttpsProxies lists all TargetHttpsProxies in the project. -func (gce *GCECloud) ListTargetHttpsProxies() ([]*compute.TargetHttpsProxy, error) { +// ListTargetHTTPSProxies lists all TargetHttpsProxies in the project. +func (g *Cloud) ListTargetHTTPSProxies() ([]*compute.TargetHttpsProxy, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newTargetProxyMetricContext("list") - v, err := gce.c.TargetHttpsProxies().List(ctx, filter.None) + v, err := g.c.TargetHttpsProxies().List(ctx, filter.None) return v, mc.Observe(err) } diff --git a/pkg/cloudprovider/providers/gce/gce_test.go b/pkg/cloudprovider/providers/gce/gce_test.go index 33b9e35f73c..627c3c50dcc 100644 --- a/pkg/cloudprovider/providers/gce/gce_test.go +++ b/pkg/cloudprovider/providers/gce/gce_test.go @@ -91,7 +91,7 @@ func TestGetRegion(t *testing.T) { if regionName != "us-central1" { t.Errorf("Unexpected region from GetGCERegion: %s", regionName) } - gce := &GCECloud{ + gce := &Cloud{ localZone: zoneName, region: regionName, } @@ -299,7 +299,7 @@ func TestGetZoneByProviderID(t *testing.T) { }, } - gce := &GCECloud{ + gce := &Cloud{ localZone: "us-central1-f", region: "us-central1", } @@ -331,13 +331,13 @@ func TestGenerateCloudConfigs(t *testing.T) { NodeInstancePrefix: "node-prefix", Multizone: false, Regional: false, - ApiEndpoint: "", + APIEndpoint: "", LocalZone: "us-central1-a", AlphaFeatures: []string{}, } cloudBoilerplate := CloudConfig{ - ApiEndpoint: "", + APIEndpoint: "", ProjectID: "project-id", NetworkProjectID: "", Region: "us-central1", @@ -395,12 +395,12 @@ func TestGenerateCloudConfigs(t *testing.T) { name: "Specified API Endpint", config: func() ConfigGlobal { v := configBoilerplate - v.ApiEndpoint = "https://www.googleapis.com/compute/staging_v1/" + v.APIEndpoint = "https://www.googleapis.com/compute/staging_v1/" return v }, cloud: func() CloudConfig { v := cloudBoilerplate - v.ApiEndpoint = "https://www.googleapis.com/compute/staging_v1/" + v.APIEndpoint = "https://www.googleapis.com/compute/staging_v1/" return v }, }, diff --git a/pkg/cloudprovider/providers/gce/gce_tpu.go b/pkg/cloudprovider/providers/gce/gce_tpu.go index 0a78f62cb3a..fda62851cfb 100644 --- a/pkg/cloudprovider/providers/gce/gce_tpu.go +++ b/pkg/cloudprovider/providers/gce/gce_tpu.go @@ -50,20 +50,20 @@ type tpuService struct { // CreateTPU creates the Cloud TPU node with the specified name in the // specified zone. -func (gce *GCECloud) CreateTPU(ctx context.Context, name, zone string, node *tpuapi.Node) (*tpuapi.Node, error) { +func (g *Cloud) CreateTPU(ctx context.Context, name, zone string, node *tpuapi.Node) (*tpuapi.Node, error) { var err error mc := newTPUMetricContext("create", zone) defer mc.Observe(err) var op *tpuapi.Operation - parent := getTPUParentName(gce.projectID, zone) - op, err = gce.tpuService.projects.Locations.Nodes.Create(parent, node).NodeId(name).Do() + parent := getTPUParentName(g.projectID, zone) + op, err = g.tpuService.projects.Locations.Nodes.Create(parent, node).NodeId(name).Do() if err != nil { return nil, err } glog.V(2).Infof("Creating Cloud TPU %q in zone %q with operation %q", name, zone, op.Name) - op, err = gce.waitForTPUOp(ctx, op) + op, err = g.waitForTPUOp(ctx, op) if err != nil { return nil, err } @@ -83,20 +83,20 @@ func (gce *GCECloud) CreateTPU(ctx context.Context, name, zone string, node *tpu // DeleteTPU deletes the Cloud TPU with the specified name in the specified // zone. -func (gce *GCECloud) DeleteTPU(ctx context.Context, name, zone string) error { +func (g *Cloud) DeleteTPU(ctx context.Context, name, zone string) error { var err error mc := newTPUMetricContext("delete", zone) defer mc.Observe(err) var op *tpuapi.Operation - name = getTPUName(gce.projectID, zone, name) - op, err = gce.tpuService.projects.Locations.Nodes.Delete(name).Do() + name = getTPUName(g.projectID, zone, name) + op, err = g.tpuService.projects.Locations.Nodes.Delete(name).Do() if err != nil { return err } glog.V(2).Infof("Deleting Cloud TPU %q in zone %q with operation %q", name, zone, op.Name) - op, err = gce.waitForTPUOp(ctx, op) + op, err = g.waitForTPUOp(ctx, op) if err != nil { return err } @@ -108,11 +108,11 @@ func (gce *GCECloud) DeleteTPU(ctx context.Context, name, zone string) error { } // GetTPU returns the Cloud TPU with the specified name in the specified zone. -func (gce *GCECloud) GetTPU(ctx context.Context, name, zone string) (*tpuapi.Node, error) { +func (g *Cloud) GetTPU(ctx context.Context, name, zone string) (*tpuapi.Node, error) { mc := newTPUMetricContext("get", zone) - name = getTPUName(gce.projectID, zone, name) - node, err := gce.tpuService.projects.Locations.Nodes.Get(name).Do() + name = getTPUName(g.projectID, zone, name) + node, err := g.tpuService.projects.Locations.Nodes.Get(name).Do() if err != nil { return nil, mc.Observe(err) } @@ -120,11 +120,11 @@ func (gce *GCECloud) GetTPU(ctx context.Context, name, zone string) (*tpuapi.Nod } // ListTPUs returns Cloud TPUs in the specified zone. -func (gce *GCECloud) ListTPUs(ctx context.Context, zone string) ([]*tpuapi.Node, error) { +func (g *Cloud) ListTPUs(ctx context.Context, zone string) ([]*tpuapi.Node, error) { mc := newTPUMetricContext("list", zone) - parent := getTPUParentName(gce.projectID, zone) - response, err := gce.tpuService.projects.Locations.Nodes.List(parent).Do() + parent := getTPUParentName(g.projectID, zone) + response, err := g.tpuService.projects.Locations.Nodes.List(parent).Do() if err != nil { return nil, mc.Observe(err) } @@ -132,10 +132,10 @@ func (gce *GCECloud) ListTPUs(ctx context.Context, zone string) ([]*tpuapi.Node, } // ListLocations returns the zones where Cloud TPUs are available. -func (gce *GCECloud) ListLocations(ctx context.Context) ([]*tpuapi.Location, error) { +func (g *Cloud) ListLocations(ctx context.Context) ([]*tpuapi.Location, error) { mc := newTPUMetricContext("list_locations", "") - parent := getTPUProjectURL(gce.projectID) - response, err := gce.tpuService.projects.Locations.List(parent).Do() + parent := getTPUProjectURL(g.projectID) + response, err := g.tpuService.projects.Locations.List(parent).Do() if err != nil { return nil, mc.Observe(err) } @@ -144,7 +144,7 @@ func (gce *GCECloud) ListLocations(ctx context.Context) ([]*tpuapi.Location, err // waitForTPUOp checks whether the op is done every 30 seconds before the ctx // is cancelled. -func (gce *GCECloud) waitForTPUOp(ctx context.Context, op *tpuapi.Operation) (*tpuapi.Operation, error) { +func (g *Cloud) waitForTPUOp(ctx context.Context, op *tpuapi.Operation) (*tpuapi.Operation, error) { if err := wait.PollInfinite(30*time.Second, func() (bool, error) { // Check if context has been cancelled. select { @@ -157,14 +157,14 @@ func (gce *GCECloud) waitForTPUOp(ctx context.Context, op *tpuapi.Operation) (*t glog.V(3).Infof("Waiting for operation %q to complete...", op.Name) start := time.Now() - gce.operationPollRateLimiter.Accept() + g.operationPollRateLimiter.Accept() duration := time.Now().Sub(start) if duration > 5*time.Second { glog.V(2).Infof("Getting operation %q throttled for %v", op.Name, duration) } var err error - op, err = gce.tpuService.projects.Locations.Operations.Get(op.Name).Do() + op, err = g.tpuService.projects.Locations.Operations.Get(op.Name).Do() if err != nil { return true, err } diff --git a/pkg/cloudprovider/providers/gce/gce_urlmap.go b/pkg/cloudprovider/providers/gce/gce_urlmap.go index b0e60093c15..7ee8b821327 100644 --- a/pkg/cloudprovider/providers/gce/gce_urlmap.go +++ b/pkg/cloudprovider/providers/gce/gce_urlmap.go @@ -24,53 +24,53 @@ import ( "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta" ) -func newUrlMapMetricContext(request string) *metricContext { +func newURLMapMetricContext(request string) *metricContext { return newGenericMetricContext("urlmap", request, unusedMetricLabel, unusedMetricLabel, computeV1Version) } -// GetUrlMap returns the UrlMap by name. -func (gce *GCECloud) GetUrlMap(name string) (*compute.UrlMap, error) { +// GetURLMap returns the UrlMap by name. +func (g *Cloud) GetURLMap(name string) (*compute.UrlMap, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() - mc := newUrlMapMetricContext("get") - v, err := gce.c.UrlMaps().Get(ctx, meta.GlobalKey(name)) + mc := newURLMapMetricContext("get") + v, err := g.c.UrlMaps().Get(ctx, meta.GlobalKey(name)) return v, mc.Observe(err) } -// CreateUrlMap creates a url map -func (gce *GCECloud) CreateUrlMap(urlMap *compute.UrlMap) error { +// CreateURLMap creates a url map +func (g *Cloud) CreateURLMap(urlMap *compute.UrlMap) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() - mc := newUrlMapMetricContext("create") - return mc.Observe(gce.c.UrlMaps().Insert(ctx, meta.GlobalKey(urlMap.Name), urlMap)) + mc := newURLMapMetricContext("create") + return mc.Observe(g.c.UrlMaps().Insert(ctx, meta.GlobalKey(urlMap.Name), urlMap)) } -// UpdateUrlMap applies the given UrlMap as an update -func (gce *GCECloud) UpdateUrlMap(urlMap *compute.UrlMap) error { +// UpdateURLMap applies the given UrlMap as an update +func (g *Cloud) UpdateURLMap(urlMap *compute.UrlMap) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() - mc := newUrlMapMetricContext("update") - return mc.Observe(gce.c.UrlMaps().Update(ctx, meta.GlobalKey(urlMap.Name), urlMap)) + mc := newURLMapMetricContext("update") + return mc.Observe(g.c.UrlMaps().Update(ctx, meta.GlobalKey(urlMap.Name), urlMap)) } -// DeleteUrlMap deletes a url map by name. -func (gce *GCECloud) DeleteUrlMap(name string) error { +// DeleteURLMap deletes a url map by name. +func (g *Cloud) DeleteURLMap(name string) error { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() - mc := newUrlMapMetricContext("delete") - return mc.Observe(gce.c.UrlMaps().Delete(ctx, meta.GlobalKey(name))) + mc := newURLMapMetricContext("delete") + return mc.Observe(g.c.UrlMaps().Delete(ctx, meta.GlobalKey(name))) } -// ListUrlMaps lists all UrlMaps in the project. -func (gce *GCECloud) ListUrlMaps() ([]*compute.UrlMap, error) { +// ListURLMaps lists all UrlMaps in the project. +func (g *Cloud) ListURLMaps() ([]*compute.UrlMap, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() - mc := newUrlMapMetricContext("list") - v, err := gce.c.UrlMaps().List(ctx, filter.None) + mc := newURLMapMetricContext("list") + v, err := g.c.UrlMaps().List(ctx, filter.None) return v, mc.Observe(err) } diff --git a/pkg/cloudprovider/providers/gce/gce_util.go b/pkg/cloudprovider/providers/gce/gce_util.go index ffc74bc2d24..d66029a1df6 100644 --- a/pkg/cloudprovider/providers/gce/gce_util.go +++ b/pkg/cloudprovider/providers/gce/gce_util.go @@ -38,8 +38,8 @@ import ( "google.golang.org/api/googleapi" ) -func fakeGCECloud(vals TestClusterValues) (*GCECloud, error) { - gce := simpleFakeGCECloud(vals) +func fakeGCECloud(vals TestClusterValues) (*Cloud, error) { + gce := NewFakeGCECloud(vals) gce.AlphaFeatureGate = NewAlphaFeatureGate([]string{}) gce.nodeInformerSynced = func() bool { return true } @@ -88,7 +88,7 @@ var ( } ) -var providerIdRE = regexp.MustCompile(`^` + ProviderName + `://([^/]+)/([^/]+)/([^/]+)$`) +var providerIDRE = regexp.MustCompile(`^` + ProviderName + `://([^/]+)/([^/]+)/([^/]+)$`) func getProjectAndZone() (string, string, error) { result, err := metadata.Get("instance/zone") @@ -107,10 +107,10 @@ func getProjectAndZone() (string, string, error) { return projectID, zone, nil } -func (gce *GCECloud) raiseFirewallChangeNeededEvent(svc *v1.Service, cmd string) { +func (g *Cloud) raiseFirewallChangeNeededEvent(svc *v1.Service, cmd string) { msg := fmt.Sprintf("Firewall change required by network admin: `%v`", cmd) - if gce.eventRecorder != nil && svc != nil { - gce.eventRecorder.Event(svc, v1.EventTypeNormal, "LoadBalancerManualChange", msg) + if g.eventRecorder != nil && svc != nil { + g.eventRecorder.Event(svc, v1.EventTypeNormal, "LoadBalancerManualChange", msg) } } @@ -120,13 +120,13 @@ func FirewallToGCloudCreateCmd(fw *compute.Firewall, projectID string) string { return fmt.Sprintf("gcloud compute firewall-rules create %v --network %v %v", fw.Name, getNameFromLink(fw.Network), args) } -// FirewallToGCloudCreateCmd generates a gcloud command to update a firewall to specified params +// FirewallToGCloudUpdateCmd generates a gcloud command to update a firewall to specified params func FirewallToGCloudUpdateCmd(fw *compute.Firewall, projectID string) string { args := firewallToGcloudArgs(fw, projectID) return fmt.Sprintf("gcloud compute firewall-rules update %v %v", fw.Name, args) } -// FirewallToGCloudCreateCmd generates a gcloud command to delete a firewall to specified params +// FirewallToGCloudDeleteCmd generates a gcloud command to delete a firewall to specified params func FirewallToGCloudDeleteCmd(fwName, projectID string) string { return fmt.Sprintf("gcloud compute firewall-rules delete %v --project %v", fwName, projectID) } @@ -205,7 +205,7 @@ func isInUsedByError(err error) bool { // A providerID is build out of '${ProviderName}://${project-id}/${zone}/${instance-name}' // See cloudprovider.GetInstanceProviderID. func splitProviderID(providerID string) (project, zone, instance string, err error) { - matches := providerIdRE.FindStringSubmatch(providerID) + matches := providerIDRE.FindStringSubmatch(providerID) if len(matches) != 4 { return "", "", "", errors.New("error splitting providerID") } diff --git a/pkg/cloudprovider/providers/gce/gce_zones.go b/pkg/cloudprovider/providers/gce/gce_zones.go index 09f12b82a81..3e4bb059bd6 100644 --- a/pkg/cloudprovider/providers/gce/gce_zones.go +++ b/pkg/cloudprovider/providers/gce/gce_zones.go @@ -33,17 +33,17 @@ func newZonesMetricContext(request, region string) *metricContext { } // GetZone creates a cloudprovider.Zone of the current zone and region -func (gce *GCECloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) { +func (g *Cloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) { return cloudprovider.Zone{ - FailureDomain: gce.localZone, - Region: gce.region, + FailureDomain: g.localZone, + Region: g.region, }, nil } // GetZoneByProviderID implements Zones.GetZoneByProviderID // This is particularly useful in external cloud providers where the kubelet // does not initialize node data. -func (gce *GCECloud) GetZoneByProviderID(ctx context.Context, providerID string) (cloudprovider.Zone, error) { +func (g *Cloud) GetZoneByProviderID(ctx context.Context, providerID string) (cloudprovider.Zone, error) { _, zone, _, err := splitProviderID(providerID) if err != nil { return cloudprovider.Zone{}, err @@ -58,9 +58,9 @@ func (gce *GCECloud) GetZoneByProviderID(ctx context.Context, providerID string) // GetZoneByNodeName implements Zones.GetZoneByNodeName // This is particularly useful in external cloud providers where the kubelet // does not initialize node data. -func (gce *GCECloud) GetZoneByNodeName(ctx context.Context, nodeName types.NodeName) (cloudprovider.Zone, error) { +func (g *Cloud) GetZoneByNodeName(ctx context.Context, nodeName types.NodeName) (cloudprovider.Zone, error) { instanceName := mapNodeNameToInstanceName(nodeName) - instance, err := gce.getInstanceByName(instanceName) + instance, err := g.getInstanceByName(instanceName) if err != nil { return cloudprovider.Zone{}, err } @@ -72,18 +72,18 @@ func (gce *GCECloud) GetZoneByNodeName(ctx context.Context, nodeName types.NodeN } // ListZonesInRegion returns all zones in a GCP region -func (gce *GCECloud) ListZonesInRegion(region string) ([]*compute.Zone, error) { +func (g *Cloud) ListZonesInRegion(region string) ([]*compute.Zone, error) { ctx, cancel := cloud.ContextWithCallTimeout() defer cancel() mc := newZonesMetricContext("list", region) - list, err := gce.c.Zones().List(ctx, filter.Regexp("region", gce.getRegionLink(region))) + list, err := g.c.Zones().List(ctx, filter.Regexp("region", g.getRegionLink(region))) if err != nil { return nil, mc.Observe(err) } return list, mc.Observe(err) } -func (gce *GCECloud) getRegionLink(region string) string { - return gce.service.BasePath + strings.Join([]string{gce.projectID, "regions", region}, "/") +func (g *Cloud) getRegionLink(region string) string { + return g.service.BasePath + strings.Join([]string{g.projectID, "regions", region}, "/") } diff --git a/pkg/cloudprovider/providers/gce/support.go b/pkg/cloudprovider/providers/gce/support.go index 7861e08acbc..e6c471855fe 100644 --- a/pkg/cloudprovider/providers/gce/support.go +++ b/pkg/cloudprovider/providers/gce/support.go @@ -25,7 +25,7 @@ import ( // gceProjectRouter sends requests to the appropriate project ID. type gceProjectRouter struct { - gce *GCECloud + gce *Cloud } // ProjectID returns the project ID to be used for the given operation. @@ -40,7 +40,7 @@ func (r *gceProjectRouter) ProjectID(ctx context.Context, version meta.Version, // gceRateLimiter implements cloud.RateLimiter. type gceRateLimiter struct { - gce *GCECloud + gce *Cloud } // Accept blocks until the operation can be performed. @@ -63,10 +63,10 @@ func (l *gceRateLimiter) Accept(ctx context.Context, key *cloud.RateLimitKey) er return nil } -// CreateGCECloudWithCloud is a helper function to create an instance of GCECloud with the +// CreateGCECloudWithCloud is a helper function to create an instance of Cloud with the // given Cloud interface implementation. Typical usage is to use cloud.NewMockGCE to get a // handle to a mock Cloud instance and then use that for testing. -func CreateGCECloudWithCloud(config *CloudConfig, c cloud.Cloud) (*GCECloud, error) { +func CreateGCECloudWithCloud(config *CloudConfig, c cloud.Cloud) (*Cloud, error) { gceCloud, err := CreateGCECloud(config) if err == nil { gceCloud.c = c diff --git a/pkg/cloudprovider/providers/gce/token_source.go b/pkg/cloudprovider/providers/gce/token_source.go index 2f4bb09119a..e8434bd2a0c 100644 --- a/pkg/cloudprovider/providers/gce/token_source.go +++ b/pkg/cloudprovider/providers/gce/token_source.go @@ -57,6 +57,7 @@ func init() { prometheus.MustRegister(getTokenFailCounter) } +// AltTokenSource is the structure holding the data for the functionality needed to generates tokens type AltTokenSource struct { oauthClient *http.Client tokenURL string @@ -64,6 +65,7 @@ type AltTokenSource struct { throttle flowcontrol.RateLimiter } +// Token returns a token which may be used for authentication func (a *AltTokenSource) Token() (*oauth2.Token, error) { a.throttle.Accept() getTokenCounter.Inc() @@ -100,6 +102,7 @@ func (a *AltTokenSource) token() (*oauth2.Token, error) { }, nil } +// NewAltTokenSource constructs a new alternate token source for generating tokens. func NewAltTokenSource(tokenURL, tokenBody string) oauth2.TokenSource { client := oauth2.NewClient(oauth2.NoContext, google.ComputeTokenSource("")) a := &AltTokenSource{ diff --git a/pkg/controller/nodeipam/ipam/adapter.go b/pkg/controller/nodeipam/ipam/adapter.go index a834edac30e..c72e2e5a22c 100644 --- a/pkg/controller/nodeipam/ipam/adapter.go +++ b/pkg/controller/nodeipam/ipam/adapter.go @@ -36,12 +36,12 @@ import ( type adapter struct { k8s clientset.Interface - cloud *gce.GCECloud + cloud *gce.Cloud recorder record.EventRecorder } -func newAdapter(k8s clientset.Interface, cloud *gce.GCECloud) *adapter { +func newAdapter(k8s clientset.Interface, cloud *gce.Cloud) *adapter { ret := &adapter{ k8s: k8s, cloud: cloud, diff --git a/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go b/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go index e3a0a72aa5b..12bf16f5a28 100644 --- a/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go +++ b/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go @@ -59,7 +59,7 @@ type nodeProcessingInfo struct { // merely takes the assignment and updates the node spec. type cloudCIDRAllocator struct { client clientset.Interface - cloud *gce.GCECloud + cloud *gce.Cloud // nodeLister is able to list/get nodes and is populated by the shared informer passed to // NewCloudCIDRAllocator. @@ -93,7 +93,7 @@ func NewCloudCIDRAllocator(client clientset.Interface, cloud cloudprovider.Inter glog.V(0).Infof("Sending events to api server.") eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: client.CoreV1().Events("")}) - gceCloud, ok := cloud.(*gce.GCECloud) + gceCloud, ok := cloud.(*gce.Cloud) if !ok { err := fmt.Errorf("cloudCIDRAllocator does not support %v provider", cloud.ProviderName()) return nil, err diff --git a/pkg/controller/nodeipam/ipam/controller.go b/pkg/controller/nodeipam/ipam/controller.go index e33d448d6a9..18d1c2f368f 100644 --- a/pkg/controller/nodeipam/ipam/controller.go +++ b/pkg/controller/nodeipam/ipam/controller.go @@ -71,7 +71,7 @@ func NewController( return nil, fmt.Errorf("invalid IPAM controller mode %q", config.Mode) } - gceCloud, ok := cloud.(*gce.GCECloud) + gceCloud, ok := cloud.(*gce.Cloud) if !ok { return nil, fmt.Errorf("cloud IPAM controller does not support %q provider", cloud.ProviderName()) } diff --git a/pkg/controller/nodeipam/node_ipam_controller_test.go b/pkg/controller/nodeipam/node_ipam_controller_test.go index 6f25f7ce363..331c19d6646 100644 --- a/pkg/controller/nodeipam/node_ipam_controller_test.go +++ b/pkg/controller/nodeipam/node_ipam_controller_test.go @@ -48,7 +48,7 @@ func newTestNodeIpamController(clusterCIDR, serviceCIDR *net.IPNet, nodeCIDRMask fakeNodeInformer.Informer().GetStore().Add(node) } - fakeGCE := gce.FakeGCECloud(gce.DefaultTestClusterValues()) + fakeGCE := gce.NewFakeGCECloud(gce.DefaultTestClusterValues()) return NewNodeIpamController( fakeNodeInformer, fakeGCE, clientSet, clusterCIDR, serviceCIDR, nodeCIDRMaskSize, allocatorType, diff --git a/pkg/volume/gcepd/gce_util.go b/pkg/volume/gcepd/gce_util.go index a01adf9807f..947cc13fe14 100644 --- a/pkg/volume/gcepd/gce_util.go +++ b/pkg/volume/gcepd/gce_util.go @@ -284,10 +284,10 @@ func getDiskByIDPaths(pdName string, partition string) []string { } // Return cloud provider -func getCloudProvider(cloudProvider cloudprovider.Interface) (*gcecloud.GCECloud, error) { +func getCloudProvider(cloudProvider cloudprovider.Interface) (*gcecloud.Cloud, error) { var err error for numRetries := 0; numRetries < maxRetries; numRetries++ { - gceCloudProvider, ok := cloudProvider.(*gcecloud.GCECloud) + gceCloudProvider, ok := cloudProvider.(*gcecloud.Cloud) if !ok || gceCloudProvider == nil { // Retry on error. See issue #11321 glog.Errorf("Failed to get GCE Cloud Provider. plugin.host.GetCloudProvider returned %v instead", cloudProvider) diff --git a/plugin/pkg/admission/storage/persistentvolume/label/admission.go b/plugin/pkg/admission/storage/persistentvolume/label/admission.go index 8afe0190aa2..a1683e3d297 100644 --- a/plugin/pkg/admission/storage/persistentvolume/label/admission.go +++ b/plugin/pkg/admission/storage/persistentvolume/label/admission.go @@ -58,7 +58,7 @@ type persistentVolumeLabel struct { mutex sync.Mutex ebsVolumes aws.Volumes cloudConfig []byte - gceCloudProvider *gce.GCECloud + gceCloudProvider *gce.Cloud azureProvider *azure.Cloud } @@ -259,7 +259,7 @@ func (l *persistentVolumeLabel) findGCEPDLabels(volume *api.PersistentVolume) (m } // getGCECloudProvider returns the GCE cloud provider, for use for querying volume labels -func (l *persistentVolumeLabel) getGCECloudProvider() (*gce.GCECloud, error) { +func (l *persistentVolumeLabel) getGCECloudProvider() (*gce.Cloud, error) { l.mutex.Lock() defer l.mutex.Unlock() @@ -272,7 +272,7 @@ func (l *persistentVolumeLabel) getGCECloudProvider() (*gce.GCECloud, error) { if err != nil || cloudProvider == nil { return nil, err } - gceCloudProvider, ok := cloudProvider.(*gce.GCECloud) + gceCloudProvider, ok := cloudProvider.(*gce.Cloud) if !ok { // GetCloudProvider has gone very wrong return nil, fmt.Errorf("error retrieving GCE cloud provider") diff --git a/test/e2e/framework/providers/gce/firewall.go b/test/e2e/framework/providers/gce/firewall.go index 6894cb36b9a..70468920d21 100644 --- a/test/e2e/framework/providers/gce/firewall.go +++ b/test/e2e/framework/providers/gce/firewall.go @@ -401,7 +401,7 @@ func VerifyFirewallRule(res, exp *compute.Firewall, network string, portsSubset return nil } -func WaitForFirewallRule(gceCloud *gcecloud.GCECloud, fwName string, exist bool, timeout time.Duration) (*compute.Firewall, error) { +func WaitForFirewallRule(gceCloud *gcecloud.Cloud, fwName string, exist bool, timeout time.Duration) (*compute.Firewall, error) { framework.Logf("Waiting up to %v for firewall %v exist=%v", timeout, fwName, exist) var fw *compute.Firewall var err error diff --git a/test/e2e/framework/providers/gce/gce.go b/test/e2e/framework/providers/gce/gce.go index 29da3e4d796..9236ef13405 100644 --- a/test/e2e/framework/providers/gce/gce.go +++ b/test/e2e/framework/providers/gce/gce.go @@ -58,7 +58,7 @@ func factory() (framework.ProviderInterface, error) { } gceCloud, err := gcecloud.CreateGCECloud(&gcecloud.CloudConfig{ - ApiEndpoint: framework.TestContext.CloudConfig.ApiEndpoint, + APIEndpoint: framework.TestContext.CloudConfig.ApiEndpoint, ProjectID: framework.TestContext.CloudConfig.ProjectID, Region: region, Zone: zone, @@ -89,7 +89,7 @@ func factory() (framework.ProviderInterface, error) { return NewProvider(gceCloud), nil } -func NewProvider(gceCloud *gcecloud.GCECloud) framework.ProviderInterface { +func NewProvider(gceCloud *gcecloud.Cloud) framework.ProviderInterface { return &Provider{ gceCloud: gceCloud, } @@ -97,7 +97,7 @@ func NewProvider(gceCloud *gcecloud.GCECloud) framework.ProviderInterface { type Provider struct { framework.NullProvider - gceCloud *gcecloud.GCECloud + gceCloud *gcecloud.Cloud } func (p *Provider) ResizeGroup(group string, size int32) error { @@ -279,7 +279,7 @@ func (p *Provider) cleanupGCEResources(c clientset.Interface, loadBalancerName, return } hcNames := []string{gcecloud.MakeNodesHealthCheckName(clusterID)} - hc, getErr := p.gceCloud.GetHttpHealthCheck(loadBalancerName) + hc, getErr := p.gceCloud.GetHTTPHealthCheck(loadBalancerName) if getErr != nil && !IsGoogleAPIHTTPErrorCode(getErr, http.StatusNotFound) { retErr = fmt.Errorf("%v\n%v", retErr, getErr) return @@ -351,7 +351,7 @@ func IsGoogleAPIHTTPErrorCode(err error, code int) bool { return ok && apiErr.Code == code } -func GetGCECloud() (*gcecloud.GCECloud, error) { +func GetGCECloud() (*gcecloud.Cloud, error) { p, ok := framework.TestContext.CloudConfig.Provider.(*Provider) if !ok { return nil, fmt.Errorf("failed to convert CloudConfig.Provider to GCE provider: %#v", framework.TestContext.CloudConfig.Provider) diff --git a/test/e2e/framework/providers/gce/ingress.go b/test/e2e/framework/providers/gce/ingress.go index b11598fb756..9ea772c7ee9 100644 --- a/test/e2e/framework/providers/gce/ingress.go +++ b/test/e2e/framework/providers/gce/ingress.go @@ -198,7 +198,7 @@ func (cont *GCEIngressController) deleteAddresses(del bool) string { func (cont *GCEIngressController) ListTargetHttpProxies() []*compute.TargetHttpProxy { gceCloud := cont.Cloud.Provider.(*Provider).gceCloud tpList := []*compute.TargetHttpProxy{} - l, err := gceCloud.ListTargetHttpProxies() + l, err := gceCloud.ListTargetHTTPProxies() Expect(err).NotTo(HaveOccurred()) for _, tp := range l { if cont.isOwned(tp.Name) { @@ -211,7 +211,7 @@ func (cont *GCEIngressController) ListTargetHttpProxies() []*compute.TargetHttpP func (cont *GCEIngressController) ListTargetHttpsProxies() []*compute.TargetHttpsProxy { gceCloud := cont.Cloud.Provider.(*Provider).gceCloud tpsList := []*compute.TargetHttpsProxy{} - l, err := gceCloud.ListTargetHttpsProxies() + l, err := gceCloud.ListTargetHTTPSProxies() Expect(err).NotTo(HaveOccurred()) for _, tps := range l { if cont.isOwned(tps.Name) { @@ -259,7 +259,7 @@ func (cont *GCEIngressController) deleteTargetProxy(del bool) string { func (cont *GCEIngressController) ListUrlMaps() []*compute.UrlMap { gceCloud := cont.Cloud.Provider.(*Provider).gceCloud umList := []*compute.UrlMap{} - l, err := gceCloud.ListUrlMaps() + l, err := gceCloud.ListURLMaps() Expect(err).NotTo(HaveOccurred()) for _, um := range l { if cont.isOwned(um.Name) { @@ -271,7 +271,7 @@ func (cont *GCEIngressController) ListUrlMaps() []*compute.UrlMap { func (cont *GCEIngressController) deleteURLMap(del bool) (msg string) { gceCloud := cont.Cloud.Provider.(*Provider).gceCloud - umList, err := gceCloud.ListUrlMaps() + umList, err := gceCloud.ListURLMaps() if err != nil { if cont.isHTTPErrorCode(err, http.StatusNotFound) { return msg @@ -287,7 +287,7 @@ func (cont *GCEIngressController) deleteURLMap(del bool) (msg string) { } if del { framework.Logf("Deleting url-map: %s", um.Name) - if err := gceCloud.DeleteUrlMap(um.Name); err != nil && + if err := gceCloud.DeleteURLMap(um.Name); err != nil && !cont.isHTTPErrorCode(err, http.StatusNotFound) { msg += fmt.Sprintf("Failed to delete url map %v\n", um.Name) } @@ -343,7 +343,7 @@ func (cont *GCEIngressController) deleteBackendService(del bool) (msg string) { func (cont *GCEIngressController) deleteHTTPHealthCheck(del bool) (msg string) { gceCloud := cont.Cloud.Provider.(*Provider).gceCloud - hcList, err := gceCloud.ListHttpHealthChecks() + hcList, err := gceCloud.ListHTTPHealthChecks() if err != nil { if cont.isHTTPErrorCode(err, http.StatusNotFound) { return msg @@ -359,7 +359,7 @@ func (cont *GCEIngressController) deleteHTTPHealthCheck(del bool) (msg string) { } if del { framework.Logf("Deleting http-health-check: %s", hc.Name) - if err := gceCloud.DeleteHttpHealthCheck(hc.Name); err != nil && + if err := gceCloud.DeleteHTTPHealthCheck(hc.Name); err != nil && !cont.isHTTPErrorCode(err, http.StatusNotFound) { msg += fmt.Sprintf("Failed to delete HTTP health check %v\n", hc.Name) } diff --git a/test/e2e/framework/test_context.go b/test/e2e/framework/test_context.go index ac62258d498..b95c526912f 100644 --- a/test/e2e/framework/test_context.go +++ b/test/e2e/framework/test_context.go @@ -252,7 +252,7 @@ func RegisterClusterFlags() { // TODO: Flags per provider? Rename gce-project/gce-zone? cloudConfig := &TestContext.CloudConfig flag.StringVar(&cloudConfig.MasterName, "kube-master", "", "Name of the kubernetes master. Only required if provider is gce or gke") - flag.StringVar(&cloudConfig.ApiEndpoint, "gce-api-endpoint", "", "The GCE ApiEndpoint being used, if applicable") + flag.StringVar(&cloudConfig.ApiEndpoint, "gce-api-endpoint", "", "The GCE APIEndpoint being used, if applicable") flag.StringVar(&cloudConfig.ProjectID, "gce-project", "", "The GCE project being used, if applicable") flag.StringVar(&cloudConfig.Zone, "gce-zone", "", "GCE zone being used, if applicable") flag.StringVar(&cloudConfig.Region, "gce-region", "", "GCE region being used, if applicable") diff --git a/test/e2e/network/firewall.go b/test/e2e/network/firewall.go index 89b6b032104..f5c98b70bb2 100644 --- a/test/e2e/network/firewall.go +++ b/test/e2e/network/firewall.go @@ -39,7 +39,7 @@ var _ = SIGDescribe("Firewall rule", func() { var cs clientset.Interface var cloudConfig framework.CloudConfig - var gceCloud *gcecloud.GCECloud + var gceCloud *gcecloud.Cloud BeforeEach(func() { framework.SkipUnlessProviderIs("gce") diff --git a/test/e2e/network/network_tiers.go b/test/e2e/network/network_tiers.go index 3cad210e9c1..c102d52e3d3 100644 --- a/test/e2e/network/network_tiers.go +++ b/test/e2e/network/network_tiers.go @@ -222,7 +222,7 @@ func clearNetworkTier(svc *v1.Service) { // TODO: add retries if this turns out to be flaky. // TODO(#51665): remove this helper function once Network Tiers becomes beta. -func reserveAlphaRegionalAddress(cloud *gcecloud.GCECloud, name string, netTier cloud.NetworkTier) (string, error) { +func reserveAlphaRegionalAddress(cloud *gcecloud.Cloud, name string, netTier cloud.NetworkTier) (string, error) { alphaAddr := &computealpha.Address{ Name: name, NetworkTier: netTier.ToGCEValue(), diff --git a/test/e2e/network/service.go b/test/e2e/network/service.go index 0e06a77a48b..93c45fee21f 100644 --- a/test/e2e/network/service.go +++ b/test/e2e/network/service.go @@ -1585,7 +1585,7 @@ var _ = SIGDescribe("Services", func() { svc = jig.WaitForLoadBalancerOrFail(namespace, serviceName, framework.LoadBalancerCreateTimeoutDefault) hcName := gcecloud.MakeNodesHealthCheckName(clusterID) - hc, err := gceCloud.GetHttpHealthCheck(hcName) + hc, err := gceCloud.GetHTTPHealthCheck(hcName) if err != nil { framework.Failf("gceCloud.GetHttpHealthCheck(%q) = _, %v; want nil", hcName, err) } @@ -1593,7 +1593,7 @@ var _ = SIGDescribe("Services", func() { By("modify the health check interval") hc.CheckIntervalSec = gceHcCheckIntervalSeconds - 1 - if err = gceCloud.UpdateHttpHealthCheck(hc); err != nil { + if err = gceCloud.UpdateHTTPHealthCheck(hc); err != nil { framework.Failf("gcecloud.UpdateHttpHealthCheck(%#v) = %v; want nil", hc, err) } @@ -1608,7 +1608,7 @@ var _ = SIGDescribe("Services", func() { By("health check should be reconciled") pollInterval := framework.Poll * 10 if pollErr := wait.PollImmediate(pollInterval, framework.LoadBalancerCreateTimeoutDefault, func() (bool, error) { - hc, err := gceCloud.GetHttpHealthCheck(hcName) + hc, err := gceCloud.GetHTTPHealthCheck(hcName) if err != nil { framework.Logf("Failed to get HttpHealthCheck(%q): %v", hcName, err) return false, err diff --git a/test/integration/util/cloud.go b/test/integration/util/cloud.go index d5c758d4aa6..0d018a4e96f 100644 --- a/test/integration/util/cloud.go +++ b/test/integration/util/cloud.go @@ -52,9 +52,9 @@ func (*mockTokenSource) Token() (*oauth2.Token, error) { }, nil } -// NewMockGCECloud returns a handle to a GCECloud instance that is +// NewMockGCECloud returns a handle to a Cloud instance that is // served by a mock http server -func NewMockGCECloud(cloud cloud.Cloud) (*gce.GCECloud, error) { +func NewMockGCECloud(cloud cloud.Cloud) (*gce.Cloud, error) { config := &gce.CloudConfig{ ProjectID: TestProjectID, NetworkProjectID: TestNetworkProjectID,