Skip to content

Commit 744873b

Browse files
authored
Merge branch 'cloud-barista:master' into master
2 parents 8acb308 + cbdc9af commit 744873b

17 files changed

Lines changed: 2166 additions & 1521 deletions

File tree

api-runtime/common-runtime/RegionZoneHandler.go

Lines changed: 111 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,15 @@
99
package commonruntime
1010

1111
import (
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

100182
func 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

254363
func ListOrgRegionPreConfig(driverName string, credentialName string) (string, error) {

api-runtime/rest-runtime/admin-web/AdminWeb-RegionZone.go

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,19 @@ func RegionZone(c echo.Context) error {
6868

6969
// struct for HTML template
7070
type ZoneInfo struct {
71-
ZoneName string
72-
DisplayName string
73-
ZoneStatus string
74-
IsDefault bool
71+
ZoneName string
72+
DisplayName string
73+
CSPDisplayName string
74+
ZoneStatus string
75+
IsDefault bool
7576
}
7677

7778
type RegionInfo struct {
78-
RegionName string
79-
DisplayName string
80-
InnerTableID string
81-
ZoneInfo []ZoneInfo
79+
RegionName string
80+
DisplayName string
81+
CSPDisplayName string
82+
InnerTableID string
83+
ZoneInfo []ZoneInfo
8284
}
8385

8486
type PageData struct {
@@ -91,18 +93,20 @@ func RegionZone(c echo.Context) error {
9193
regionZoneInfos := info.ResultList
9294
for idx, rzInfo := range regionZoneInfos {
9395
rInfo := &RegionInfo{
94-
RegionName: rzInfo.Name,
95-
DisplayName: rzInfo.DisplayName,
96-
InnerTableID: fmt.Sprintf("%s-%d", rzInfo.Name, idx),
96+
RegionName: rzInfo.Name,
97+
DisplayName: rzInfo.DisplayName,
98+
CSPDisplayName: rzInfo.CSPDisplayName,
99+
InnerTableID: fmt.Sprintf("%s-%d", rzInfo.Name, idx),
97100
}
98101

99102
for i, zone := range rzInfo.ZoneList {
100103
isDefault := i == 0 // Only the first row is true, for the default zone
101104
rInfo.ZoneInfo = append(rInfo.ZoneInfo, ZoneInfo{
102-
ZoneName: zone.Name,
103-
DisplayName: zone.DisplayName,
104-
ZoneStatus: string(zone.Status),
105-
IsDefault: isDefault,
105+
ZoneName: zone.Name,
106+
DisplayName: zone.DisplayName,
107+
CSPDisplayName: zone.CSPDisplayName,
108+
ZoneStatus: string(zone.Status),
109+
IsDefault: isDefault,
106110
})
107111
}
108112
regionInfos = append(regionInfos, rInfo)

api-runtime/rest-runtime/admin-web/html/region-zone.html

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,16 @@
3333
width: 5%;
3434
}
3535
.column-region-name {
36-
width: 25%;
36+
width: 15%;
3737
}
3838
.column-display-name {
39-
width: 25%;
39+
width: 18%;
40+
}
41+
.column-csp-display-name {
42+
width: 18%;
4043
}
4144
.column-zone-list {
42-
width: 45%;
45+
width: 50%;
4346
}
4447

4548
#searchInputWrapper {
@@ -112,17 +115,22 @@
112115
}
113116

114117
function searchTable() {
115-
var input, filter, table, tr, td;
118+
var input, filter, table, tr, td, td2;
116119
input = document.getElementById("searchInput");
117120
filter = input.value.toUpperCase();
118121
table = document.getElementsByTagName("table")[0];
119122
tr = table.getElementsByTagName("tr");
120123

121124
for (var i = 1; i < tr.length; i++) {
122-
td = tr[i].getElementsByTagName("td")[1];
123-
if (td) {
124-
var txtValue = td.textContent || td.innerText;
125-
if (txtValue.toUpperCase().indexOf(filter) > -1) {
125+
td = tr[i].getElementsByTagName("td")[2]; // Display Name column
126+
td2 = tr[i].getElementsByTagName("td")[3]; // CSP Display Name column
127+
if (td || td2) {
128+
var txtValue1 = td ? td.textContent || td.innerText : "";
129+
var txtValue2 = td2 ? td2.textContent || td2.innerText : "";
130+
if (
131+
txtValue1.toUpperCase().indexOf(filter) > -1 ||
132+
txtValue2.toUpperCase().indexOf(filter) > -1
133+
) {
126134
tr[i].style.display = "";
127135
} else {
128136
tr[i].style.display = "none";
@@ -131,6 +139,7 @@
131139
}
132140
}
133141

142+
134143
function clearSearchInput() {
135144
document.getElementById("searchInput").value = "";
136145
searchTable();
@@ -143,7 +152,7 @@
143152
var rows = table.rows;
144153
for (var i = 1; i < rows.length; i++) {
145154
var cells = rows[i].cells;
146-
var status = cells[2].innerText;
155+
var status = cells[3].innerText;
147156
if (statusFilter === "All" || status === statusFilter) {
148157
rows[i].style.display = "";
149158
} else {
@@ -173,24 +182,28 @@
173182
<th class="column-index">#</th>
174183
<th class="column-region-name">Region Name</th>
175184
<th class="column-display-name">Display Name</th>
185+
<th class="column-csp-display-name">CSP Display Name</th>
176186
<th class="column-zone-list">Zone List</th>
177187
</tr>
178188
{{range $index, $region := .RegionInfo}}
179189
<tr>
180190
<td class="column-index">{{inc $index}}</td>
181191
<td class="column-region-name">{{$region.RegionName}}</td>
182192
<td class="column-display-name">{{$region.DisplayName}}</td>
193+
<td class="column-csp-display-name">{{$region.CSPDisplayName}}</td>
183194
<td class="column-zone-list">
184195
<table id="{{.InnerTableID}}" style="width: 100%;">
185196
<tr>
186197
<th class="inner-th">Zone Name</th>
187198
<th class="inner-th">Display Name</th>
199+
<th class="inner-th">CSP Display Name</th>
188200
<th class="inner-th">Zone Status</th>
189201
</tr>
190202
{{range .ZoneInfo}}
191203
<tr>
192204
<td>{{.ZoneName}}</td>
193205
<td>{{.DisplayName}}</td>
206+
<td>{{.CSPDisplayName}}</td>
194207
<td>{{.ZoneStatus}}</td>
195208
</tr>
196209
{{end}}

cloud-control-manager/CloudDriverHandler_common.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func getCloudDriverByDriverName(driverName string) (idrv.CloudDriver, error) {
6363
return getCloudDriver(*cldDrvInfo)
6464
}
6565

66-
func getProviderNameByDriverName(driverName string) (string, error) {
66+
func GetProviderNameByDriverName(driverName string) (string, error) {
6767
cldDrvInfo, err := dim.GetCloudDriver(driverName)
6868
if err != nil {
6969
return "", err
@@ -332,7 +332,7 @@ func GetCloudConnectionByDriverNameAndCredentialName(driverName string, credenti
332332
return nil, err
333333
}
334334

335-
providerName, err := getProviderNameByDriverName(driverName)
335+
providerName, err := GetProviderNameByDriverName(driverName)
336336
if err != nil {
337337
return nil, err
338338
}

0 commit comments

Comments
 (0)