cloudprovider: add the ProviderName method

This patch adds the ProviderName method used to identify the cloud
provider.

Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
This commit is contained in:
Federico Simoncelli 2015-05-05 10:10:24 -04:00
parent 9b67435cf3
commit 194343267d
9 changed files with 64 additions and 8 deletions

View File

@ -41,6 +41,8 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
) )
const ProviderName = "aws"
// Abstraction over EC2, to allow mocking/other implementations // Abstraction over EC2, to allow mocking/other implementations
type EC2 interface { type EC2 interface {
// Query EC2 for instances matching the filter // Query EC2 for instances matching the filter
@ -250,7 +252,7 @@ func (s *awsSdkEC2) DeleteVolume(volumeID string) (resp *ec2.DeleteVolumeOutput,
} }
func init() { func init() {
cloudprovider.RegisterCloudProvider("aws", func(config io.Reader) (cloudprovider.Interface, error) { cloudprovider.RegisterCloudProvider(ProviderName, func(config io.Reader) (cloudprovider.Interface, error) {
metadata := &awsSdkMetadata{} metadata := &awsSdkMetadata{}
return newAWSCloud(config, getAuth, metadata) return newAWSCloud(config, getAuth, metadata)
}) })
@ -366,6 +368,11 @@ func (aws *AWSCloud) Clusters() (cloudprovider.Clusters, bool) {
return nil, false return nil, false
} }
// ProviderName returns the cloud provider ID.
func (aws *AWSCloud) ProviderName() string {
return ProviderName
}
// TCPLoadBalancer returns an implementation of TCPLoadBalancer for Amazon Web Services. // TCPLoadBalancer returns an implementation of TCPLoadBalancer for Amazon Web Services.
func (aws *AWSCloud) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) { func (aws *AWSCloud) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) {
return nil, false return nil, false

View File

@ -36,6 +36,8 @@ type Interface interface {
Clusters() (Clusters, bool) Clusters() (Clusters, bool)
// Routes returns a routes interface along with whether the interface is supported. // Routes returns a routes interface along with whether the interface is supported.
Routes() (Routes, bool) Routes() (Routes, bool)
// ProviderName returns the cloud provider ID.
ProviderName() string
} }
// Clusters is an abstract, pluggable interface for clusters of containers. // Clusters is an abstract, pluggable interface for clusters of containers.

View File

@ -26,6 +26,8 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider" "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
) )
const ProviderName = "fake"
// FakeBalancer is a fake storage of balancer information // FakeBalancer is a fake storage of balancer information
type FakeBalancer struct { type FakeBalancer struct {
Name string Name string
@ -81,6 +83,11 @@ func (f *FakeCloud) Clusters() (cloudprovider.Clusters, bool) {
return f, true return f, true
} }
// ProviderName returns the cloud provider ID.
func (f *FakeCloud) ProviderName() string {
return ProviderName
}
// TCPLoadBalancer returns a fake implementation of TCPLoadBalancer. // TCPLoadBalancer returns a fake implementation of TCPLoadBalancer.
// Actually it just returns f itself. // Actually it just returns f itself.
func (f *FakeCloud) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) { func (f *FakeCloud) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) {

View File

@ -42,6 +42,8 @@ import (
"google.golang.org/cloud/compute/metadata" "google.golang.org/cloud/compute/metadata"
) )
const ProviderName = "gce"
const EXTERNAL_IP_METADATA_URL = "http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip" const EXTERNAL_IP_METADATA_URL = "http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip"
// GCECloud is an implementation of Interface, TCPLoadBalancer and Instances for Google Compute Engine. // GCECloud is an implementation of Interface, TCPLoadBalancer and Instances for Google Compute Engine.
@ -67,7 +69,7 @@ type Config struct {
} }
func init() { func init() {
cloudprovider.RegisterCloudProvider("gce", func(config io.Reader) (cloudprovider.Interface, error) { return newGCECloud(config) }) cloudprovider.RegisterCloudProvider(ProviderName, func(config io.Reader) (cloudprovider.Interface, error) { return newGCECloud(config) })
} }
func getMetadata(url string) (string, error) { func getMetadata(url string) (string, error) {
@ -182,6 +184,11 @@ func (gce *GCECloud) Clusters() (cloudprovider.Clusters, bool) {
return gce, true return gce, true
} }
// ProviderName returns the cloud provider ID.
func (gce *GCECloud) ProviderName() string {
return ProviderName
}
// TCPLoadBalancer returns an implementation of TCPLoadBalancer for Google Compute Engine. // TCPLoadBalancer returns an implementation of TCPLoadBalancer for Google Compute Engine.
func (gce *GCECloud) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) { func (gce *GCECloud) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) {
return gce, true return gce, true

View File

@ -31,7 +31,7 @@ import (
) )
var ( var (
PluginName = "mesos" ProviderName = "mesos"
CloudProvider *MesosCloud CloudProvider *MesosCloud
noHostNameSpecified = errors.New("No hostname specified") noHostNameSpecified = errors.New("No hostname specified")
@ -39,7 +39,7 @@ var (
func init() { func init() {
cloudprovider.RegisterCloudProvider( cloudprovider.RegisterCloudProvider(
PluginName, ProviderName,
func(configReader io.Reader) (cloudprovider.Interface, error) { func(configReader io.Reader) (cloudprovider.Interface, error) {
provider, err := newMesosCloud(configReader) provider, err := newMesosCloud(configReader)
if err == nil { if err == nil {
@ -110,6 +110,11 @@ func (c *MesosCloud) Routes() (cloudprovider.Routes, bool) {
return nil, false return nil, false
} }
// ProviderName returns the cloud provider ID.
func (c *MesosCloud) ProviderName() string {
return ProviderName
}
// ListClusters lists the names of the available Mesos clusters. // ListClusters lists the names of the available Mesos clusters.
func (c *MesosCloud) ListClusters() ([]string, error) { func (c *MesosCloud) ListClusters() ([]string, error) {
// Always returns a single cluster (this one!) // Always returns a single cluster (this one!)

View File

@ -42,6 +42,8 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
) )
const ProviderName = "openstack"
var ErrNotFound = errors.New("Failed to find object") var ErrNotFound = errors.New("Failed to find object")
var ErrMultipleResults = errors.New("Multiple results where only one expected") var ErrMultipleResults = errors.New("Multiple results where only one expected")
var ErrNoAddressFound = errors.New("No address found for host") var ErrNoAddressFound = errors.New("No address found for host")
@ -99,7 +101,7 @@ type Config struct {
} }
func init() { func init() {
cloudprovider.RegisterCloudProvider("openstack", func(config io.Reader) (cloudprovider.Interface, error) { cloudprovider.RegisterCloudProvider(ProviderName, func(config io.Reader) (cloudprovider.Interface, error) {
cfg, err := readConfig(config) cfg, err := readConfig(config)
if err != nil { if err != nil {
return nil, err return nil, err
@ -394,6 +396,11 @@ func (os *OpenStack) Clusters() (cloudprovider.Clusters, bool) {
return nil, false return nil, false
} }
// ProviderName returns the cloud provider ID.
func (os *OpenStack) ProviderName() string {
return ProviderName
}
type LoadBalancer struct { type LoadBalancer struct {
network *gophercloud.ServiceClient network *gophercloud.ServiceClient
compute *gophercloud.ServiceClient compute *gophercloud.ServiceClient

View File

@ -33,6 +33,8 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider" "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
) )
const ProviderName = "ovirt"
type OVirtInstance struct { type OVirtInstance struct {
UUID string UUID string
Name string Name string
@ -75,7 +77,7 @@ type XmlVmsList struct {
} }
func init() { func init() {
cloudprovider.RegisterCloudProvider("ovirt", cloudprovider.RegisterCloudProvider(ProviderName,
func(config io.Reader) (cloudprovider.Interface, error) { func(config io.Reader) (cloudprovider.Interface, error) {
return newOVirtCloud(config) return newOVirtCloud(config)
}) })
@ -115,6 +117,11 @@ func (aws *OVirtCloud) Clusters() (cloudprovider.Clusters, bool) {
return nil, false return nil, false
} }
// ProviderName returns the cloud provider ID.
func (v *OVirtCloud) ProviderName() string {
return ProviderName
}
// TCPLoadBalancer returns an implementation of TCPLoadBalancer for oVirt cloud // TCPLoadBalancer returns an implementation of TCPLoadBalancer for oVirt cloud
func (v *OVirtCloud) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) { func (v *OVirtCloud) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) {
return nil, false return nil, false

View File

@ -38,6 +38,8 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
) )
const ProviderName = "rackspace"
var ErrNotFound = errors.New("Failed to find object") var ErrNotFound = errors.New("Failed to find object")
var ErrMultipleResults = errors.New("Multiple results where only one expected") var ErrMultipleResults = errors.New("Multiple results where only one expected")
var ErrNoAddressFound = errors.New("No address found for host") var ErrNoAddressFound = errors.New("No address found for host")
@ -89,7 +91,7 @@ type Config struct {
} }
func init() { func init() {
cloudprovider.RegisterCloudProvider("rackspace", func(config io.Reader) (cloudprovider.Interface, error) { cloudprovider.RegisterCloudProvider(ProviderName, func(config io.Reader) (cloudprovider.Interface, error) {
cfg, err := readConfig(config) cfg, err := readConfig(config)
if err != nil { if err != nil {
return nil, err return nil, err
@ -399,6 +401,11 @@ func (os *Rackspace) Clusters() (cloudprovider.Clusters, bool) {
return nil, false return nil, false
} }
// ProviderName returns the cloud provider ID.
func (os *Rackspace) ProviderName() string {
return ProviderName
}
func (os *Rackspace) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) { func (os *Rackspace) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) {
return nil, false return nil, false
} }

View File

@ -31,6 +31,8 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider" "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
) )
const ProviderName = "vagrant"
// VagrantCloud is an implementation of Interface, TCPLoadBalancer and Instances for developer managed Vagrant cluster. // VagrantCloud is an implementation of Interface, TCPLoadBalancer and Instances for developer managed Vagrant cluster.
type VagrantCloud struct { type VagrantCloud struct {
saltURL string saltURL string
@ -40,7 +42,7 @@ type VagrantCloud struct {
} }
func init() { func init() {
cloudprovider.RegisterCloudProvider("vagrant", func(config io.Reader) (cloudprovider.Interface, error) { return newVagrantCloud() }) cloudprovider.RegisterCloudProvider(ProviderName, func(config io.Reader) (cloudprovider.Interface, error) { return newVagrantCloud() })
} }
// SaltToken is an authorization token required by Salt REST API. // SaltToken is an authorization token required by Salt REST API.
@ -84,6 +86,11 @@ func (v *VagrantCloud) Clusters() (cloudprovider.Clusters, bool) {
return nil, false return nil, false
} }
// ProviderName returns the cloud provider ID.
func (v *VagrantCloud) ProviderName() string {
return ProviderName
}
// TCPLoadBalancer returns an implementation of TCPLoadBalancer for Vagrant cloud. // TCPLoadBalancer returns an implementation of TCPLoadBalancer for Vagrant cloud.
func (v *VagrantCloud) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) { func (v *VagrantCloud) TCPLoadBalancer() (cloudprovider.TCPLoadBalancer, bool) {
return nil, false return nil, false