From 4f6fa10cf0829da6397fb6c6c680ff32cddcd55b Mon Sep 17 00:00:00 2001 From: TangBin Date: Wed, 27 Feb 2019 16:52:01 +0800 Subject: [PATCH] skus list result add region&zone external id --- pkg/compute/models/skus.go | 78 ++++++++++++++++++++++++-------- pkg/mcclient/modules/mod_skus.go | 2 +- 2 files changed, 59 insertions(+), 21 deletions(-) diff --git a/pkg/compute/models/skus.go b/pkg/compute/models/skus.go index 3ebc1cdc54..bea86b54ad 100644 --- a/pkg/compute/models/skus.go +++ b/pkg/compute/models/skus.go @@ -6,6 +6,7 @@ import ( "fmt" "sort" "strconv" + "strings" "time" "yunion.io/x/jsonutils" @@ -163,6 +164,26 @@ func skuRelatedGuestCount(self *SServerSku) int { return q.Count() } +func getNameAndExtId(resId string, query func() (string, string, error)) (string, string) { + nKey := resId + ".Name" + eKey := resId + ".ExtId" + name := Cache.Get(nKey) + extId := Cache.Get(eKey) + var err error + if name == nil || extId == nil { + name, extId, err = query() + if err != nil { + log.Debugf(err.Error()) + return "", "" + } + + Cache.Set(nKey, name) + Cache.Set(eKey, extId) + } + + return name.(string), extId.(string) +} + func (self *SServerSkuManager) AllowListItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { return true } @@ -188,35 +209,52 @@ func (self *SServerSku) GetCustomizeColumns(ctx context.Context, userCred mcclie // zone if len(self.ZoneId) > 0 { - var zoneName string - v := Cache.Get(self.ZoneId) - if v == nil { + name, extId := getNameAndExtId(self.ZoneId, func() (string, string, error) { zone, err := ZoneManager.FetchById(self.ZoneId) - if err == nil { - zoneName = zone.GetName() - Cache.Set(zone.GetId(), zoneName) + if err != nil { + return "", "", err } - } else { - zoneName = v.(string) - } - extra.Add(jsonutils.NewString(zoneName), "zone_name") + szone, ok := zone.(*SZone) + if !ok || szone == nil { + return "", "", fmt.Errorf("%s zone not found", self.ZoneId) + } + + _id := "" + segs := strings.Split(szone.ExternalId, "/") + if len(segs) > 0 { + _id = segs[len(segs)-1] + } + + return zone.GetName(), _id, nil + }) + + extra.Add(jsonutils.NewString(name), "zone_name") + extra.Add(jsonutils.NewString(extId), "zone_exteranl_id") } // region - var regionName string - v = Cache.Get(self.CloudregionId) - if v == nil { + name, extId := getNameAndExtId(self.CloudregionId, func() (string, string, error) { region, err := CloudregionManager.FetchById(self.CloudregionId) - if err == nil { - regionName = region.GetName() - Cache.Set(region.GetId(), regionName) + if err != nil { + return "", "", err } - } else { - regionName = v.(string) - } - extra.Add(jsonutils.NewString(regionName), "region_name") + sregion, ok := region.(*SCloudregion) + if !ok || sregion == nil { + return "", "", fmt.Errorf("%s region not found", self.CloudregionId) + } + + _id := "" + segs := strings.Split(sregion.ExternalId, "/") + if len(segs) > 0 { + _id = segs[len(segs)-1] + } + return region.GetName(), _id, nil + }) + + extra.Add(jsonutils.NewString(name), "region_name") + extra.Add(jsonutils.NewString(extId), "region_exteranl_id") return extra } diff --git a/pkg/mcclient/modules/mod_skus.go b/pkg/mcclient/modules/mod_skus.go index 7e6bbd7163..bd7c987080 100644 --- a/pkg/mcclient/modules/mod_skus.go +++ b/pkg/mcclient/modules/mod_skus.go @@ -31,7 +31,7 @@ func init() { "Sys_disk_min_size_mb", "Sys_disk_max_size_mb", "Attached_disk_type", "Attached_disk_size_gb", "Attached_disk_count", "Data_disk_types", "Data_disk_max_count", "Nic_max_count", "Cloudregion_id", "Zone_id", - "Provider", "Postpaid_status", "Prepaid_status", "region_name", "Zone_name"}, + "Provider", "Postpaid_status", "Prepaid_status", "Region_name", "Region_exteranl_id", "Zone_name", "Zone_exteranl_id"}, []string{"Total_guest_count"})} register(&CloudmetaSkus)