mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
region: guest detail add field macs
This commit is contained in:
@@ -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"`
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user