package infra import ( "errors" "fmt" "strings" proto "git.badhouseplants.net/softplayer/softplayer-go-proto/pkg/environments" ) type Hetzner struct{} // GetProviderName implements Providers. func (h *Hetzner) GetProviderName() string { return "hetzner" } // RawProviderName implements Providers. func (h *Hetzner) RawProviderName() string { return proto.Provider_PROVIDER_HETZNER.String() } // RawServerLocation implements Providers. func (h *Hetzner) RawServerLocation(location string) string { switch location { case "ash": return proto.Location_LOCATION_HETZNER_ASHBURN.String() case "hil": return proto.Location_LOCATION_HETZNER_HILLSBORO.String() case "fsn1": return proto.Location_LOCATION_HETZNER_FALKENSTEIN.String() case "nbg1": return proto.Location_LOCATION_HETZNER_NUREMBERG.String() case "hel1": return proto.Location_LOCATION_HETZNER_HELSINKI.String() default: return proto.Location_LOCATION_UNSPECIFIED.String() } } // RawServerType implements Providers. func (h *Hetzner) RawServerType(kind string) string { switch kind { case "cpx21": return proto.ServerType_SERVER_TYPE_STARTER.String() case "cpx31": return proto.ServerType_SERVER_TYPE_REGULAR.String() case "cpx41": return proto.ServerType_SERVER_TYPE_PLUS.String() case "cpx51": return proto.ServerType_SERVER_TYPE_PRO.String() default: return proto.ServerType_SERVER_TYPE_UNSPECIFIED.String() } } // GetServerLocation implements Providers. func (h *Hetzner) GetServerLocation(location string) (string, error) { if !strings.Contains(location, "HETZNER") { return "", fmt.Errorf("location isn't supported by hetzner: %s", location) } switch location { case proto.Location_LOCATION_HETZNER_ASHBURN.String(): return "ash", nil case proto.Location_LOCATION_HETZNER_HILLSBORO.String(): return "hil", nil case proto.Location_LOCATION_HETZNER_FALKENSTEIN.String(): return "fsn1", nil case proto.Location_LOCATION_HETZNER_NUREMBERG.String(): return "nbg1", nil case proto.Location_LOCATION_HETZNER_HELSINKI.String(): return "hel1", nil default: return "", fmt.Errorf("unknown location: %s", location) } } func (h *Hetzner) GetServerType(kind string) (serverType string, err error) { switch kind { case proto.ServerType_SERVER_TYPE_STARTER.String(): serverType = "cpx21" return case proto.ServerType_SERVER_TYPE_REGULAR.String(): serverType = "cpx31" return case proto.ServerType_SERVER_TYPE_PLUS.String(): serverType = "cpx41" return case proto.ServerType_SERVER_TYPE_PRO.String(): serverType = "cpx51" return case proto.ServerType_SERVER_TYPE_CUSTOM.String(): err = errors.New("custom server types are not supported yet") return default: err = fmt.Errorf("unknown server type: %s", kind) return } }