Merge branch 'release/2.1.0' into feature/rex-logclient-20180822-1018

This commit is contained in:
Zhang Dongliang
2018-08-24 15:34:37 +08:00
3 changed files with 74 additions and 36 deletions
+4
View File
@@ -64,6 +64,7 @@ func init() {
Secgroup string `help:"Secgroup ID or Name"`
AdminSecgroup string `help:"AdminSecgroup ID or Name"`
Hypervisor string `help:"Show server of hypervisor" choices:"kvm|esxi|container|baremetal|aliyun"`
Manager string `help:"Show servers imported from manager"`
BaseListOptions
}
R(&ServerListOptions{}, "server-list", "List virtual servers", func(s *mcclient.ClientSession, args *ServerListOptions) error {
@@ -98,6 +99,9 @@ func init() {
if len(args.Hypervisor) > 0 {
params.Add(jsonutils.NewString(args.Hypervisor), "hypervisor")
}
if len(args.Manager) > 0 {
params.Add(jsonutils.NewString(args.Manager), "manager")
}
result, err := modules.Servers.List(s, params)
if err != nil {
return err
+65 -33
View File
@@ -205,49 +205,60 @@ func (manager *SGuestManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQ
if len(hypervisor) > 0 {
q = q.Equals("hypervisor", hypervisor)
}
hostFilter, _ := queryDict.GetString("host")
zoneFilter, _ := queryDict.GetString("zone")
wireFilter, _ := queryDict.GetString("wire")
networkFilter, _ := queryDict.GetString("network")
diskFilter, _ := queryDict.GetString("disk")
var sq *sqlchemy.SSubQuery
if len(hostFilter) > 0 {
host, _ := HostManager.FetchByIdOrName("", hostFilter)
if host == nil {
return nil, httperrors.NewResourceNotFoundError(fmt.Sprintf("host %s not found", hostFilter))
return nil, httperrors.NewResourceNotFoundError("host %s not found", hostFilter)
}
sq = HostManager.Query("id").Equals("id", host.GetId()).SubQuery()
} else if len(zoneFilter) > 0 {
q = q.Equals("host_id", host.GetId())
}
zoneFilter, _ := queryDict.GetString("zone")
if len(zoneFilter) > 0 {
zone, _ := ZoneManager.FetchByIdOrName("", zoneFilter)
if zone == nil {
return nil, httperrors.NewResourceNotFoundError(fmt.Sprintf("zone %s not found", zoneFilter))
return nil, httperrors.NewResourceNotFoundError("zone %s not found", zoneFilter)
}
hostTable := HostManager.Query().SubQuery()
zoneTable := ZoneManager.Query().SubQuery()
sq = hostTable.Query(hostTable.Field("id")).Join(zoneTable,
sq := hostTable.Query(hostTable.Field("id")).Join(zoneTable,
sqlchemy.Equals(zoneTable.Field("id"), hostTable.Field("zone_id"))).Filter(sqlchemy.Equals(zoneTable.Field("id"), zone.GetId())).SubQuery()
} else if len(wireFilter) > 0 {
q = q.In("host_id", sq)
}
wireFilter, _ := queryDict.GetString("wire")
if len(wireFilter) > 0 {
wire, _ := WireManager.FetchByIdOrName("", wireFilter)
if wire == nil {
return nil, httperrors.NewResourceNotFoundError(fmt.Sprintf("wire %s not found", wireFilter))
return nil, httperrors.NewResourceNotFoundError("wire %s not found", wireFilter)
}
hostTable := HostManager.Query().SubQuery()
hostWire := HostwireManager.Query().SubQuery()
sq = hostTable.Query(hostTable.Field("id")).Join(hostWire, sqlchemy.Equals(hostWire.Field("host_id"), hostTable.Field("id"))).Filter(sqlchemy.Equals(hostWire.Field("wire_id"), wire.GetId())).SubQuery()
} else if len(networkFilter) > 0 {
sq := hostTable.Query(hostTable.Field("id")).Join(hostWire, sqlchemy.Equals(hostWire.Field("host_id"), hostTable.Field("id"))).Filter(sqlchemy.Equals(hostWire.Field("wire_id"), wire.GetId())).SubQuery()
q = q.In("host_id", sq)
}
networkFilter, _ := queryDict.GetString("network")
if len(networkFilter) > 0 {
netI, _ := NetworkManager.FetchByIdOrName(userCred.GetProjectId(), networkFilter)
if netI == nil {
return nil, httperrors.NewResourceNotFoundError(fmt.Sprintf("network %s not found", networkFilter))
return nil, httperrors.NewResourceNotFoundError("network %s not found", networkFilter)
}
net := netI.(*SNetwork)
hostTable := HostManager.Query().SubQuery()
hostWire := HostwireManager.Query().SubQuery()
sq = hostTable.Query(hostTable.Field("id")).Join(hostWire,
sq := hostTable.Query(hostTable.Field("id")).Join(hostWire,
sqlchemy.Equals(hostWire.Field("host_id"), hostTable.Field("id"))).Filter(sqlchemy.Equals(hostWire.Field("wire_id"), net.WireId)).SubQuery()
} else if len(diskFilter) > 0 {
q = q.In("host_id", sq)
}
diskFilter, _ := queryDict.GetString("disk")
if len(diskFilter) > 0 {
diskI, _ := DiskManager.FetchByIdOrName(userCred.GetProjectId(), diskFilter)
if diskI == nil {
return nil, httperrors.NewResourceNotFoundError(fmt.Sprintf("disk %s not found", diskFilter))
return nil, httperrors.NewResourceNotFoundError("disk %s not found", diskFilter)
}
disk := diskI.(*SDisk)
guestdisks := GuestdiskManager.Query().SubQuery()
@@ -264,7 +275,7 @@ func (manager *SGuestManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQ
hosts := HostManager.Query().SubQuery()
hoststorages := HoststorageManager.Query().SubQuery()
storages := StorageManager.Query().SubQuery()
sq = hosts.Query(hosts.Field("id")).
sq := hosts.Query(hosts.Field("id")).
Join(hoststorages, sqlchemy.AND(
sqlchemy.Equals(hoststorages.Field("host_id"), hosts.Field("id")),
sqlchemy.IsFalse(hoststorages.Field("deleted")))).
@@ -272,11 +283,21 @@ func (manager *SGuestManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQ
sqlchemy.Equals(storages.Field("id"), hoststorages.Field("storage_id")),
sqlchemy.IsFalse(storages.Field("deleted")))).
Filter(sqlchemy.Equals(storages.Field("id"), disk.StorageId)).SubQuery()
q = q.In("host_id", sq)
}
}
if sq != nil {
managerFilter, _ := queryDict.GetString("manager")
if len(managerFilter) > 0 {
managerI, _ := CloudproviderManager.FetchByIdOrName(userCred.GetProjectId(), managerFilter)
if managerI == nil {
return nil, httperrors.NewResourceNotFoundError("cloud provider %s not found", managerFilter)
}
hosts := HostManager.Query().SubQuery()
sq := hosts.Query(hosts.Field("id")).Equals("manager_id", managerI.GetId()).SubQuery()
q = q.In("host_id", sq)
}
gpu, _ := queryDict.GetString("gpu")
if len(gpu) != 0 {
isodev := IsolatedDeviceManager.Query().SubQuery()
@@ -906,11 +927,7 @@ func (self *SGuest) GetCustomizeColumns(ctx context.Context, userCred mcclient.T
// extra.Add(jsonutils.NewString(self.getFlavorName()), "flavor")
extra.Add(jsonutils.NewString(self.getKeypairName()), "keypair")
extra.Add(jsonutils.NewInt(int64(self.getExtBandwidth())), "ext_bw")
zone := self.getZone()
if zone != nil {
extra.Add(jsonutils.NewString(zone.Id), "zone_id")
extra.Add(jsonutils.NewString(zone.Name), "zone")
}
extra.Add(jsonutils.NewString(self.GetSecgroupName()), "secgroup")
if self.PendingDeleted {
@@ -918,6 +935,28 @@ func (self *SGuest) GetCustomizeColumns(ctx context.Context, userCred mcclient.T
extra.Add(jsonutils.NewString(timeutils.FullIsoTime(pendingDeletedAt)), "auto_delete_at")
}
return self.moreExtraInfo(extra)
}
func (self *SGuest) moreExtraInfo(extra *jsonutils.JSONDict) *jsonutils.JSONDict {
zone := self.getZone()
if zone != nil {
extra.Add(jsonutils.NewString(zone.GetId()), "zone_id")
extra.Add(jsonutils.NewString(zone.GetName()), "zone")
if len(zone.ExternalId) > 0 {
extra.Add(jsonutils.NewString(zone.ExternalId), "zone_external_id")
}
region := zone.GetRegion()
if region != nil {
extra.Add(jsonutils.NewString(region.Id), "region_id")
extra.Add(jsonutils.NewString(region.Name), "region")
if len(region.ExternalId) > 0 {
extra.Add(jsonutils.NewString(region.ExternalId), "region_external_id")
}
}
}
return extra
}
@@ -948,14 +987,7 @@ func (self *SGuest) GetExtraDetails(ctx context.Context, userCred mcclient.Token
}
extra.Add(jsonutils.NewString(self.getAdminSecurityRules()), "admin_security_rules")
}
zone := self.getZone()
if zone != nil {
extra.Add(jsonutils.NewString(zone.GetId()), "zone_id")
extra.Add(jsonutils.NewString(zone.GetName()), "zone")
extra.Add(jsonutils.NewString(zone.GetRegion().GetName()), "region")
extra.Add(jsonutils.NewString(zone.GetRegion().GetId()), "region_id")
}
return extra
return self.moreExtraInfo(extra)
}
func (self *SGuest) getNetworksDetails() string {
+5 -3
View File
@@ -311,10 +311,12 @@ func (this *Client) SetProject(tenantId, tenantName string, token TokenCredentia
func (this *Client) NewSession(region, zone, endpointType string, token TokenCredential, apiVersion string) *ClientSession {
cata := token.GetServiceCatalog()
if cata == nil {
log.Fatalf("Missing service catalog in token")
if this.serviceCatalog == nil {
if cata == nil {
log.Fatalf("Missing service catalog in token")
}
this.serviceCatalog = cata
}
this.serviceCatalog = cata
return &ClientSession{client: this, region: region, zone: zone,
endpointType: endpointType, token: token,
apiVersion: apiVersion,