diff --git a/pkg/compute/models/capabilities.go b/pkg/compute/models/capabilities.go index 9588d780c1..e2d2a65e1f 100644 --- a/pkg/compute/models/capabilities.go +++ b/pkg/compute/models/capabilities.go @@ -88,6 +88,17 @@ type SCapabilities struct { InstanceCapabilities []cloudprovider.SInstanceCapability } +func GetDiskCapabilities(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, region *SCloudregion, zone *SZone) (SCapabilities, error) { + capa := SCapabilities{} + s1, d1, s2, s3, d2, d3 := getStorageTypes(region, zone, "") + capa.StorageTypes, capa.DataStorageTypes = s1, d1 + capa.StorageTypes2, capa.StorageTypes3 = s2, s3 + capa.DataStorageTypes2, capa.DataStorageTypes3 = d2, d3 + capa.MinDataDiskCount = getMinDataDiskCount(region, zone) + capa.MaxDataDiskCount = getMaxDataDiskCount(region, zone) + return capa, nil +} + func GetCapabilities(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, region *SCloudregion, zone *SZone) (SCapabilities, error) { capa := SCapabilities{} var ownerId mcclient.IIdentityProvider diff --git a/pkg/compute/models/cloudregions.go b/pkg/compute/models/cloudregions.go index d0b0eaa3aa..4dbdb456e1 100644 --- a/pkg/compute/models/cloudregions.go +++ b/pkg/compute/models/cloudregions.go @@ -924,6 +924,18 @@ func (self *SCloudregion) GetDetailsCapability(ctx context.Context, userCred mcc return jsonutils.Marshal(&capa), nil } +func (self *SCloudregion) AllowGetDetailsDiskCapability(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { + return true +} + +func (self *SCloudregion) GetDetailsDiskCapability(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) { + capa, err := GetDiskCapabilities(ctx, userCred, query, self, nil) + if err != nil { + return nil, err + } + return jsonutils.Marshal(&capa), nil +} + func (self *SCloudregion) GetNetworkCount() (int, error) { return getNetworkCount(nil, rbacutils.ScopeSystem, self, nil) } diff --git a/pkg/compute/models/zones.go b/pkg/compute/models/zones.go index e3e36ffbba..a1a91d390b 100644 --- a/pkg/compute/models/zones.go +++ b/pkg/compute/models/zones.go @@ -674,6 +674,18 @@ func (self *SZone) GetDetailsCapability(ctx context.Context, userCred mcclient.T return jsonutils.Marshal(&capa), nil } +func (self *SZone) AllowGetDetailsDiskCapability(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { + return true +} + +func (self *SZone) GetDetailsDiskCapability(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) { + capa, err := GetDiskCapabilities(ctx, userCred, query, nil, self) + if err != nil { + return nil, err + } + return jsonutils.Marshal(&capa), nil +} + func (self *SZone) isManaged() bool { region := self.GetRegion() if region != nil && len(region.ExternalId) == 0 {