github.com/justinjmoses/evergreen@v0.0.0-20170530173719-1d50e381ff0d/cloud/providers/factory.go (about) 1 package providers 2 3 import ( 4 "github.com/evergreen-ci/evergreen" 5 "github.com/evergreen-ci/evergreen/cloud" 6 "github.com/evergreen-ci/evergreen/cloud/providers/digitalocean" 7 "github.com/evergreen-ci/evergreen/cloud/providers/docker" 8 "github.com/evergreen-ci/evergreen/cloud/providers/ec2" 9 "github.com/evergreen-ci/evergreen/cloud/providers/mock" 10 "github.com/evergreen-ci/evergreen/cloud/providers/static" 11 "github.com/evergreen-ci/evergreen/model/host" 12 "github.com/pkg/errors" 13 ) 14 15 // GetCloudManager returns an implementation of CloudManager for the given provider name. 16 // It returns an error if the provider name doesn't have a known implementation. 17 func GetCloudManager(providerName string, settings *evergreen.Settings) (cloud.CloudManager, error) { 18 19 var provider cloud.CloudManager 20 switch providerName { 21 case static.ProviderName: 22 provider = &static.StaticManager{} 23 case mock.ProviderName: 24 provider = mock.FetchMockProvider() 25 case digitalocean.ProviderName: 26 provider = &digitalocean.DigitalOceanManager{} 27 case ec2.OnDemandProviderName: 28 provider = &ec2.EC2Manager{} 29 case ec2.SpotProviderName: 30 provider = &ec2.EC2SpotManager{} 31 case docker.ProviderName: 32 provider = &docker.DockerManager{} 33 default: 34 return nil, errors.Errorf("No known provider for '%v'", providerName) 35 } 36 37 if err := provider.Configure(settings); err != nil { 38 return nil, errors.Wrap(err, "Failed to configure cloud provider") 39 } 40 41 return provider, nil 42 } 43 44 // GetCloudHost returns an instance of CloudHost wrapping the given model.Host, 45 // giving access to the provider-specific methods to manipulate on the host. 46 func GetCloudHost(host *host.Host, settings *evergreen.Settings) (*cloud.CloudHost, error) { 47 mgr, err := GetCloudManager(host.Provider, settings) 48 if err != nil { 49 return nil, err 50 } 51 52 keyPath := "" 53 if host.Distro.SSHKey != "" { 54 keyPath = settings.Keys[host.Distro.SSHKey] 55 } 56 return &cloud.CloudHost{host, keyPath, mgr}, nil 57 }