99package commonruntime
1010
1111import (
12+ "fmt"
13+ "io/ioutil"
14+ "os"
15+ "path/filepath"
16+ "strings"
17+
1218 ccm "github.com/cloud-barista/cb-spider/cloud-control-manager"
1319 cres "github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/interfaces/resources"
20+ "gopkg.in/yaml.v2"
1421)
1522
1623// ================ RegionZone Handler
@@ -44,6 +51,7 @@ func ListRegionZone(connectionName string) ([]*cres.RegionZoneInfo, error) {
4451
4552 if infoList == nil || len (infoList ) <= 0 {
4653 infoList = []* cres.RegionZoneInfo {}
54+ return infoList , nil
4755 }
4856
4957 // Set KeyValueList to an empty array if it is nil
@@ -53,6 +61,66 @@ func ListRegionZone(connectionName string) ([]*cres.RegionZoneInfo, error) {
5361 }
5462 }
5563
64+ // Update DisplayName and CSPDisplayName from metadata files
65+ cspName , err := ccm .GetProviderNameByConnectionName (connectionName )
66+ if err != nil {
67+ cblog .Error (err )
68+ return nil , err
69+ }
70+ csp := strings .ToLower (cspName )
71+ infoList , err = UpdateRegionZoneDisplayNames (csp , infoList )
72+ if err != nil {
73+ cblog .Error (err )
74+ return nil , err
75+ }
76+
77+ return infoList , nil
78+ }
79+
80+ func UpdateRegionZoneDisplayNames (csp string , infoList []* cres.RegionZoneInfo ) ([]* cres.RegionZoneInfo , error ) {
81+ metaFile := filepath .Join (os .Getenv ("CBSPIDER_ROOT" ), "cloud-driver-libs" , "region" , fmt .Sprintf ("%s_region_meta.yaml" , csp ))
82+ data , err := ioutil .ReadFile (metaFile )
83+ if err != nil {
84+ // If the file does not exist, return without modification
85+ if strings .Contains (err .Error (), "no such file or directory" ) {
86+ cblog .Warnf ("Metadata file for CSP '%s' not found. Skipping updates." , csp )
87+ return infoList , nil
88+ }
89+ return nil , err
90+ }
91+
92+ var metadata struct {
93+ DisplayName map [string ]map [string ]string `yaml:"DisplayName"`
94+ CSPDisplayName map [string ]map [string ]string `yaml:"CSPDisplayName"`
95+ }
96+ if err := yaml .Unmarshal (data , & metadata ); err != nil {
97+ return nil , fmt .Errorf ("failed to parse metadata file: %v" , err )
98+ }
99+
100+ for _ , region := range infoList {
101+ // Update Region-level DisplayName and CSPDisplayName
102+ if regionDisplayName , exists := metadata .DisplayName [region .Name ]; exists {
103+ if regionDisplay , ok := regionDisplayName ["" ]; ok {
104+ region .DisplayName = regionDisplay
105+ }
106+ }
107+ if regionCSPDisplayName , exists := metadata .CSPDisplayName [region .Name ]; exists {
108+ if regionCSPDisplay , ok := regionCSPDisplayName ["" ]; ok {
109+ region .CSPDisplayName = regionCSPDisplay
110+ }
111+ }
112+
113+ // Update Zone-level DisplayName and CSPDisplayName
114+ for i , zone := range region .ZoneList {
115+ if zoneDisplayName , exists := metadata.DisplayName [region.Name ][zone.Name ]; exists {
116+ region .ZoneList [i ].DisplayName = zoneDisplayName
117+ }
118+ if zoneCSPDisplayName , exists := metadata.CSPDisplayName [region.Name ][zone.Name ]; exists {
119+ region .ZoneList [i ].CSPDisplayName = zoneCSPDisplayName
120+ }
121+ }
122+ }
123+
56124 return infoList , nil
57125}
58126
@@ -83,6 +151,7 @@ func GetRegionZone(connectionName string, nameID string) (*cres.RegionZoneInfo,
83151 cblog .Error (err )
84152 return nil , err
85153 }
154+
86155 info , err := handler .GetRegionZone (nameID )
87156 if err != nil {
88157 cblog .Error (err )
@@ -94,7 +163,20 @@ func GetRegionZone(connectionName string, nameID string) (*cres.RegionZoneInfo,
94163 info .KeyValueList = []cres.KeyValue {}
95164 }
96165
97- return & info , nil
166+ // Update DisplayName and CSPDisplayName from metadata files
167+ cspName , err := ccm .GetProviderNameByConnectionName (connectionName )
168+ if err != nil {
169+ cblog .Error (err )
170+ return nil , err
171+ }
172+ csp := strings .ToLower (cspName )
173+ updatedInfoList , err := UpdateRegionZoneDisplayNames (csp , []* cres.RegionZoneInfo {& info })
174+ if err != nil {
175+ cblog .Error (err )
176+ return nil , err
177+ }
178+
179+ return updatedInfoList [0 ], nil
98180}
99181
100182func ListOrgRegion (connectionName string ) (string , error ) {
@@ -204,6 +286,19 @@ func ListRegionZonePreConfig(driverName string, credentialName string) ([]*cres.
204286 }
205287 }
206288
289+ // Update DisplayName and CSPDisplayName from metadata files
290+ cspName , err := ccm .GetProviderNameByDriverName (driverName )
291+ if err != nil {
292+ cblog .Error (err )
293+ return nil , err
294+ }
295+ csp := strings .ToLower (cspName )
296+ infoList , err = UpdateRegionZoneDisplayNames (csp , infoList )
297+ if err != nil {
298+ cblog .Error (err )
299+ return nil , err
300+ }
301+
207302 return infoList , nil
208303}
209304
@@ -237,6 +332,7 @@ func GetRegionZonePreConfig(driverName string, credentialName string, nameID str
237332 cblog .Error (err )
238333 return nil , err
239334 }
335+
240336 info , err := handler .GetRegionZone (nameID )
241337 if err != nil {
242338 cblog .Error (err )
@@ -248,7 +344,20 @@ func GetRegionZonePreConfig(driverName string, credentialName string, nameID str
248344 info .KeyValueList = []cres.KeyValue {}
249345 }
250346
251- return & info , nil
347+ // Update DisplayName and CSPDisplayName from metadata files
348+ cspName , err := ccm .GetProviderNameByDriverName (driverName )
349+ if err != nil {
350+ cblog .Error (err )
351+ return nil , err
352+ }
353+ csp := strings .ToLower (cspName )
354+ updatedInfoList , err := UpdateRegionZoneDisplayNames (csp , []* cres.RegionZoneInfo {& info })
355+ if err != nil {
356+ cblog .Error (err )
357+ return nil , err
358+ }
359+
360+ return updatedInfoList [0 ], nil
252361}
253362
254363func ListOrgRegionPreConfig (driverName string , credentialName string ) (string , error ) {
0 commit comments