diff --git a/pkg/cloudprovider/providers/aws/aws.go b/pkg/cloudprovider/providers/aws/aws.go index 1ac3334e714..97a6a4fd577 100644 --- a/pkg/cloudprovider/providers/aws/aws.go +++ b/pkg/cloudprovider/providers/aws/aws.go @@ -261,9 +261,6 @@ const DefaultVolumeType = "gp2" // Used to call recognizeWellKnownRegions just once var once sync.Once -// AWS implements PVLabeler. -var _ cloudprovider.PVLabeler = (*Cloud)(nil) - // Services is an abstraction over AWS, to allow mocking/other implementations type Services interface { Compute(region string) (EC2, error) @@ -480,6 +477,13 @@ type InstanceGroupInfo interface { CurrentSize() (int, error) } +var _ cloudprovider.Interface = (*Cloud)(nil) +var _ cloudprovider.Instances = (*Cloud)(nil) +var _ cloudprovider.LoadBalancer = (*Cloud)(nil) +var _ cloudprovider.Routes = (*Cloud)(nil) +var _ cloudprovider.Zones = (*Cloud)(nil) +var _ cloudprovider.PVLabeler = (*Cloud)(nil) + // Cloud is an implementation of Interface, LoadBalancer and Instances for Amazon Web Services. type Cloud struct { ec2 EC2 diff --git a/pkg/cloudprovider/providers/azure/azure.go b/pkg/cloudprovider/providers/azure/azure.go index e2205c37fbe..a64e5730c42 100644 --- a/pkg/cloudprovider/providers/azure/azure.go +++ b/pkg/cloudprovider/providers/azure/azure.go @@ -71,9 +71,6 @@ var ( defaultExcludeMasterFromStandardLB = true ) -// Azure implements PVLabeler. -var _ cloudprovider.PVLabeler = (*Cloud)(nil) - // Config holds the configuration parsed from the --cloud-config flag // All fields are required unless otherwise specified type Config struct { @@ -143,6 +140,13 @@ type Config struct { MaximumLoadBalancerRuleCount int `json:"maximumLoadBalancerRuleCount" yaml:"maximumLoadBalancerRuleCount"` } +var _ cloudprovider.Interface = (*Cloud)(nil) +var _ cloudprovider.Instances = (*Cloud)(nil) +var _ cloudprovider.LoadBalancer = (*Cloud)(nil) +var _ cloudprovider.Routes = (*Cloud)(nil) +var _ cloudprovider.Zones = (*Cloud)(nil) +var _ cloudprovider.PVLabeler = (*Cloud)(nil) + // Cloud holds the config and clients type Cloud struct { Config diff --git a/pkg/cloudprovider/providers/cloudstack/cloudstack.go b/pkg/cloudprovider/providers/cloudstack/cloudstack.go index 4769adb647f..222a0356293 100644 --- a/pkg/cloudprovider/providers/cloudstack/cloudstack.go +++ b/pkg/cloudprovider/providers/cloudstack/cloudstack.go @@ -120,6 +120,11 @@ func newCSCloud(cfg *CSConfig) (*CSCloud, error) { return cs, nil } +var _ cloudprovider.Interface = (*CSCloud)(nil) +var _ cloudprovider.Instances = (*CSCloud)(nil) +var _ cloudprovider.LoadBalancer = (*CSCloud)(nil) +var _ cloudprovider.Zones = (*CSCloud)(nil) + // Initialize passes a Kubernetes clientBuilder interface to the cloud provider func (cs *CSCloud) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{}) { } diff --git a/pkg/cloudprovider/providers/cloudstack/metadata.go b/pkg/cloudprovider/providers/cloudstack/metadata.go index f2decccdf86..b666e076dd5 100644 --- a/pkg/cloudprovider/providers/cloudstack/metadata.go +++ b/pkg/cloudprovider/providers/cloudstack/metadata.go @@ -31,6 +31,9 @@ import ( "k8s.io/klog" ) +var _ cloudprovider.Instances = (*metadata)(nil) +var _ cloudprovider.Zones = (*metadata)(nil) + type metadata struct { dhcpServer string zone string diff --git a/pkg/cloudprovider/providers/fake/fake.go b/pkg/cloudprovider/providers/fake/fake.go index 8adf2fed214..1962ffc82c0 100644 --- a/pkg/cloudprovider/providers/fake/fake.go +++ b/pkg/cloudprovider/providers/fake/fake.go @@ -45,6 +45,14 @@ type FakeUpdateBalancerCall struct { Hosts []*v1.Node } +var _ cloudprovider.Interface = (*FakeCloud)(nil) +var _ cloudprovider.Instances = (*FakeCloud)(nil) +var _ cloudprovider.LoadBalancer = (*FakeCloud)(nil) +var _ cloudprovider.Routes = (*FakeCloud)(nil) +var _ cloudprovider.Zones = (*FakeCloud)(nil) +var _ cloudprovider.PVLabeler = (*FakeCloud)(nil) +var _ cloudprovider.Clusters = (*FakeCloud)(nil) + // FakeCloud is a test-double implementation of Interface, LoadBalancer, Instances, and Routes. It is useful for testing. type FakeCloud struct { Exists bool diff --git a/pkg/cloudprovider/providers/gce/gce.go b/pkg/cloudprovider/providers/gce/gce.go index 616fe5f5477..3e13930197e 100644 --- a/pkg/cloudprovider/providers/gce/gce.go +++ b/pkg/cloudprovider/providers/gce/gce.go @@ -98,6 +98,14 @@ type gceObject interface { MarshalJSON() ([]byte, error) } +var _ cloudprovider.Interface = (*Cloud)(nil) +var _ cloudprovider.Instances = (*Cloud)(nil) +var _ cloudprovider.LoadBalancer = (*Cloud)(nil) +var _ cloudprovider.Routes = (*Cloud)(nil) +var _ cloudprovider.Zones = (*Cloud)(nil) +var _ cloudprovider.PVLabeler = (*Cloud)(nil) +var _ cloudprovider.Clusters = (*Cloud)(nil) + // 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() @@ -765,9 +773,6 @@ func isProjectNumber(idOrNumber string) bool { return err == nil } -// Cloud implements cloudprovider.Interface. -var _ cloudprovider.Interface = (*Cloud)(nil) - func gceNetworkURL(apiEndpoint, project, network string) string { if apiEndpoint == "" { apiEndpoint = gceComputeAPIEndpoint diff --git a/pkg/cloudprovider/providers/openstack/openstack.go b/pkg/cloudprovider/providers/openstack/openstack.go index 9f13db944e1..9af4e4f7bd0 100644 --- a/pkg/cloudprovider/providers/openstack/openstack.go +++ b/pkg/cloudprovider/providers/openstack/openstack.go @@ -126,6 +126,9 @@ type MetadataOpts struct { RequestTimeout MyDuration `gcfg:"request-timeout"` } +var _ cloudprovider.Interface = (*OpenStack)(nil) +var _ cloudprovider.Zones = (*OpenStack)(nil) + // OpenStack is an implementation of cloud provider Interface for OpenStack. type OpenStack struct { provider *gophercloud.ProviderClient diff --git a/pkg/cloudprovider/providers/openstack/openstack_instances.go b/pkg/cloudprovider/providers/openstack/openstack_instances.go index c52ce21998e..4ca4198f419 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_instances.go +++ b/pkg/cloudprovider/providers/openstack/openstack_instances.go @@ -30,6 +30,8 @@ import ( cloudprovider "k8s.io/cloud-provider" ) +var _ cloudprovider.Instances = (*Instances)(nil) + // Instances encapsulates an implementation of Instances for OpenStack. type Instances struct { compute *gophercloud.ServiceClient diff --git a/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go b/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go index 26e6b095a2c..5f793924a35 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go +++ b/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go @@ -78,6 +78,8 @@ const ( ServiceAnnotationLoadBalancerInternal = "service.beta.kubernetes.io/openstack-internal-load-balancer" ) +var _ cloudprovider.LoadBalancer = (*LbaasV2)(nil) + // LbaasV2 is a LoadBalancer implementation for Neutron LBaaS v2 API type LbaasV2 struct { LoadBalancer diff --git a/pkg/cloudprovider/providers/openstack/openstack_routes.go b/pkg/cloudprovider/providers/openstack/openstack_routes.go index 0cb31a435a7..a1b447e37cf 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_routes.go +++ b/pkg/cloudprovider/providers/openstack/openstack_routes.go @@ -33,6 +33,8 @@ import ( var errNoRouterID = errors.New("router-id not set in cloud provider config") +var _ cloudprovider.Routes = (*Routes)(nil) + // Routes implements the cloudprovider.Routes for OpenStack clouds type Routes struct { compute *gophercloud.ServiceClient diff --git a/pkg/cloudprovider/providers/ovirt/ovirt.go b/pkg/cloudprovider/providers/ovirt/ovirt.go index 472c8c3ecdd..c9364a2585b 100644 --- a/pkg/cloudprovider/providers/ovirt/ovirt.go +++ b/pkg/cloudprovider/providers/ovirt/ovirt.go @@ -49,6 +49,9 @@ type Instance struct { // InstanceMap provides the map of Ovirt instances. type InstanceMap map[string]Instance +var _ cloudprovider.Interface = (*Cloud)(nil) +var _ cloudprovider.Instances = (*Cloud)(nil) + // Cloud is an implementation of the cloud provider interface for Ovirt. type Cloud struct { VmsRequest *url.URL diff --git a/pkg/cloudprovider/providers/photon/photon.go b/pkg/cloudprovider/providers/photon/photon.go index 24f8d2b8dd8..8bcca5a093d 100644 --- a/pkg/cloudprovider/providers/photon/photon.go +++ b/pkg/cloudprovider/providers/photon/photon.go @@ -55,6 +55,10 @@ const ( // overrideIP = true in cloud config file. Default value is false. var overrideIP bool = false +var _ cloudprovider.Interface = (*PCCloud)(nil) +var _ cloudprovider.Instances = (*PCCloud)(nil) +var _ cloudprovider.Zones = (*PCCloud)(nil) + // Photon is an implementation of the cloud provider interface for Photon Controller. type PCCloud struct { cfg *PCConfig diff --git a/pkg/cloudprovider/providers/vsphere/vsphere.go b/pkg/cloudprovider/providers/vsphere/vsphere.go index 26180e6aff9..2e562b036ed 100644 --- a/pkg/cloudprovider/providers/vsphere/vsphere.go +++ b/pkg/cloudprovider/providers/vsphere/vsphere.go @@ -76,6 +76,10 @@ var ( ErrPasswordMissing = errors.New(MissingPasswordErrMsg) ) +var _ cloudprovider.Interface = (*VSphere)(nil) +var _ cloudprovider.Instances = (*VSphere)(nil) +var _ cloudprovider.Zones = (*VSphere)(nil) + // VSphere is an implementation of cloud provider Interface for VSphere. type VSphere struct { cfg *VSphereConfig