region: guest detail add field macs

This commit is contained in:
wanyaoqi
2020-10-09 11:46:03 +08:00
parent 65cfd4108f
commit 54275ddcf5
2 changed files with 42 additions and 0 deletions
+2
View File
@@ -199,6 +199,8 @@ type ServerDetails struct {
// IP地址列表字符串
// example: 10.165.2.1,172.16.8.1
IPs string `json:"ips"`
// mac地址信息
Macs string `json:"macs"`
// 网卡信息
Nics []GuestnetworkShortDesc `json:"nics"`
+40
View File
@@ -72,6 +72,16 @@ func (manager *SGuestManager) FetchCustomizeColumns(
}
}
}
if len(fields) == 0 || fields.Contains("macs") {
gMacs := fetchGuestMacs(guestIds, tristate.False)
if gMacs != nil {
for i := range rows {
if gMac, ok := gMacs[guestIds[i]]; ok {
rows[i].Macs = strings.Join(gMac, ",")
}
}
}
}
if len(fields) == 0 || fields.Contains("nics") {
nicsMap := fetchGuestNICs(ctx, guestIds, tristate.False)
if nicsMap != nil {
@@ -264,6 +274,36 @@ func fetchGuestIPs(guestIds []string, virtual tristate.TriState) map[string][]st
return ret
}
func fetchGuestMacs(guestIds []string, virtual tristate.TriState) map[string][]string {
guestnetworks := GuestnetworkManager.Query().SubQuery()
q := guestnetworks.Query(guestnetworks.Field("guest_id"), guestnetworks.Field("mac_addr"))
q = q.In("guest_id", guestIds)
if virtual.IsTrue() {
q = q.IsTrue("virtual")
} else if virtual.IsFalse() {
q = q.IsFalse("virtual")
}
q = q.IsNotEmpty("mac_addr")
q = q.Asc("mac_addr")
type sGuestIdMacAddr struct {
GuestId string
MacAddr string
}
gims := make([]sGuestIdMacAddr, 0)
err := q.All(&gims)
if err != nil && err != sql.ErrNoRows {
return nil
}
ret := make(map[string][]string)
for i := range gims {
if _, ok := ret[gims[i].GuestId]; !ok {
ret[gims[i].GuestId] = make([]string, 0)
}
ret[gims[i].GuestId] = append(ret[gims[i].GuestId], gims[i].MacAddr)
}
return ret
}
func fetchGuestNICs(ctx context.Context, guestIds []string, virtual tristate.TriState) map[string][]api.GuestnetworkShortDesc {
netq := NetworkManager.Query().SubQuery()
wirq := WireManager.Query().SubQuery()