mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge branch 'release/2.1.0' into feature/rex-logclient-20180822-1018
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user