package providers import ( "fmt" ) // NewProvider creates a cloud provider by name func NewProvider(name string, config map[string]string) (CloudProvider, error) { switch name { case "exoscale": apiKey := config["api_key"] apiSecret := config["api_secret"] if apiKey == "" || apiSecret == "" { return nil, fmt.Errorf("exoscale requires api_key and api_secret") } return NewExoscaleProvider(apiKey, apiSecret) case "cloudscale": token := config["token"] if token == "" { return nil, fmt.Errorf("cloudscale requires token") } return NewCloudscaleProvider(token) case "hetzner": token := config["token"] if token == "" { return nil, fmt.Errorf("hetzner requires token") } return NewHetznerProvider(token) default: return nil, fmt.Errorf("unknown provider: %s", name) } } // SupportedProviders returns list of supported cloud providers func SupportedProviders() []string { return []string{"exoscale", "cloudscale", "hetzner"} }