Handle both types for MaxOverSubscriptionRatio
float <= Pike; string > Pike.
Related-PROD: PROD-25085 (PROD:25085)
Change-Id: I137ef82442d6277f4341ee71c4b793a912ef5f2d
diff --git a/openstack/blockstorage/extensions/schedulerstats/results.go b/openstack/blockstorage/extensions/schedulerstats/results.go
index c7b3e73..e176c61 100644
--- a/openstack/blockstorage/extensions/schedulerstats/results.go
+++ b/openstack/blockstorage/extensions/schedulerstats/results.go
@@ -2,7 +2,9 @@
import (
"encoding/json"
+ "fmt"
"math"
+ "strconv"
"gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
)
@@ -23,7 +25,7 @@
LocationInfo string `json:"location_info"`
QoSSupport bool `json:"QoS_support"`
ProvisionedCapacityGB float64 `json:"provisioned_capacity_gb"`
- MaxOverSubscriptionRatio string `json:"max_over_subscription_ratio"`
+ MaxOverSubscriptionRatio string `json:"-"`
ThinProvisioningSupport bool `json:"thin_provisioning_support"`
ThickProvisioningSupport bool `json:"thick_provisioning_support"`
TotalVolumes int64 `json:"total_volumes"`
@@ -44,8 +46,9 @@
type tmp Capabilities
var s struct {
tmp
- FreeCapacityGB interface{} `json:"free_capacity_gb"`
- TotalCapacityGB interface{} `json:"total_capacity_gb"`
+ FreeCapacityGB interface{} `json:"free_capacity_gb"`
+ TotalCapacityGB interface{} `json:"total_capacity_gb"`
+ MaxOverSubscriptionRatio interface{} `json:"max_over_subscription_ratio"`
}
err := json.Unmarshal(b, &s)
if err != nil {
@@ -72,6 +75,15 @@
r.FreeCapacityGB = parseCapacity(s.FreeCapacityGB)
r.TotalCapacityGB = parseCapacity(s.TotalCapacityGB)
+ switch t := s.MaxOverSubscriptionRatio.(type) {
+ case string:
+ r.MaxOverSubscriptionRatio = t
+ case float64:
+ r.MaxOverSubscriptionRatio = strconv.FormatFloat(t, 'f', -1, 64)
+ default:
+ return fmt.Errorf("MaxOverSubscriptionRatio has unexpected type: %T", t)
+ }
+
return nil
}