diff --git a/cloudstack.go b/cloudstack.go index 242ff7dc..92c31b96 100644 --- a/cloudstack.go +++ b/cloudstack.go @@ -48,6 +48,7 @@ type CSConfig struct { SSLNoVerify bool `gcfg:"ssl-no-verify"` ProjectID string `gcfg:"project-id"` Zone string `gcfg:"zone"` + Region string `gcfg:"region"` } } @@ -56,6 +57,7 @@ type CSCloud struct { client *cloudstack.CloudStackClient projectID string // If non-"", all resources will be created within this project zone string + region string version semver.Version clientBuilder cloudprovider.ControllerClientBuilder } @@ -90,6 +92,7 @@ func newCSCloud(cfg *CSConfig) (*CSCloud, error) { cs := &CSCloud{ projectID: cfg.Global.ProjectID, zone: cfg.Global.Zone, + region: cfg.Global.Region, version: semver.Version{}, } @@ -225,7 +228,8 @@ func (cs *CSCloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) { klog.V(2).Infof("Current zone is %v", cs.zone) zone.FailureDomain = cs.zone - zone.Region = cs.zone + + zone.Region = cs.getRegionFromZone(cs.zone) return zone, nil } @@ -247,7 +251,7 @@ func (cs *CSCloud) GetZoneByProviderID(ctx context.Context, providerID string) ( klog.V(2).Infof("Current zone is %v", cs.zone) zone.FailureDomain = instance.Zonename - zone.Region = instance.Zonename + zone.Region = cs.getRegionFromZone(instance.Zonename) return zone, nil } @@ -269,7 +273,7 @@ func (cs *CSCloud) GetZoneByNodeName(ctx context.Context, nodeName types.NodeNam klog.V(2).Infof("Current zone is %v", cs.zone) zone.FailureDomain = instance.Zonename - zone.Region = instance.Zonename + zone.Region = cs.getRegionFromZone(instance.Zonename) return zone, nil } @@ -324,3 +328,10 @@ func (cs *CSCloud) getNodeNameFromPod(ctx context.Context) (string, error) { klog.V(4).Infof("found node name %s for pod %s/%s", pod.Spec.NodeName, namespace, podName) return pod.Spec.NodeName, nil } + +func (cs *CSCloud) getRegionFromZone(zone string) string { + if cs.region != "" { + return cs.region + } + return zone +}