mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 14:19:49 +08:00
Merge pull request #5443 from swordqiu/hotfix/qj-fix-region-list-filters2
fix region list filters round 2
This commit is contained in:
@@ -70,6 +70,44 @@ type HostListInput struct {
|
||||
IsEmpty *bool `json:"is_empty"`
|
||||
// filter host that is baremetal
|
||||
Baremetal *bool `json:"baremetal"`
|
||||
|
||||
// 机架
|
||||
Rack []string `json:"rack"`
|
||||
// 机位
|
||||
Slots []string `json:"slots"`
|
||||
// 管理口MAC
|
||||
AccessMac []string `json:"access_mac"`
|
||||
// 管理口Ip地址
|
||||
AccessIp []string `json:"access_ip"`
|
||||
// 物理机序列号信息
|
||||
SN []string `json:"sn"`
|
||||
// CPU大小
|
||||
CpuCount []int `json:"cpu_count"`
|
||||
// 内存大小,单位Mb
|
||||
MemSize []int `json:"mem_size"`
|
||||
// 存储类型
|
||||
StorageType []string `json:"storage_type"`
|
||||
// IPMI地址
|
||||
IpmiIp []string `json:"ipmi_ip"`
|
||||
// 宿主机状态
|
||||
// example: online
|
||||
HostStatus []string `json:"host_status"`
|
||||
// 宿主机类型
|
||||
HostType []string `json:"host_type"`
|
||||
// host服务软件版本
|
||||
Version []string `json:"version"`
|
||||
// OVN软件版本
|
||||
OvnVersion []string `json:"ovn_version"`
|
||||
// 是否处于维护状态
|
||||
IsMaintenance *bool `json:"is_maintenance"`
|
||||
// 是否为导入的宿主机
|
||||
IsImport *bool `json:"is_import"`
|
||||
// 是否允许PXE启动
|
||||
EnablePxeBoot *bool `json:"enable_pxe_boot"`
|
||||
// 主机UUID
|
||||
Uuid []string `json:"uuid"`
|
||||
// 主机启动模式, 可能值位PXE和ISO
|
||||
BootMode []string `json:"boot_mode"`
|
||||
}
|
||||
|
||||
type HostDetails struct {
|
||||
|
||||
@@ -29,3 +29,9 @@ type HostJointResourceDetails struct {
|
||||
|
||||
HostJointResourceDetailsBase
|
||||
}
|
||||
|
||||
type HostJointsListInput struct {
|
||||
apis.JointResourceBaseListInput
|
||||
|
||||
HostFilterListInput
|
||||
}
|
||||
|
||||
@@ -24,3 +24,13 @@ type HostnetworkDetails struct {
|
||||
|
||||
NicType string `json:"nic_type"`
|
||||
}
|
||||
|
||||
type HostnetworkListInput struct {
|
||||
HostJointsListInput
|
||||
NetworkFilterListInput
|
||||
|
||||
// IP地址
|
||||
IpAddr []string `json:"ip_addr"`
|
||||
// MAC地址
|
||||
MacAddr []string `json:"mac_addr"`
|
||||
}
|
||||
|
||||
@@ -21,3 +21,8 @@ type HostschedtagDetails struct {
|
||||
|
||||
SHostschedtag
|
||||
}
|
||||
|
||||
type HostschedtagListInput struct {
|
||||
SchedtagJointsListInput
|
||||
HostFilterListInput
|
||||
}
|
||||
@@ -52,3 +52,9 @@ type HoststorageDetails struct {
|
||||
|
||||
GuestDiskCount int `json:"guest_disk_count,allowempty"`
|
||||
}
|
||||
|
||||
type HoststorageListInput struct {
|
||||
HostJointsListInput
|
||||
|
||||
StorageFilterListInput
|
||||
}
|
||||
|
||||
@@ -25,3 +25,20 @@ type HostwireDetails struct {
|
||||
// 带宽大小
|
||||
Bandwidth int `json:"bandwidth"`
|
||||
}
|
||||
|
||||
type HostwireListInput struct {
|
||||
HostJointsListInput
|
||||
WireFilterListInput
|
||||
|
||||
// 网桥名称
|
||||
Bridge []string `json:"bridge"`
|
||||
|
||||
// 接口名称
|
||||
Interface []string `json:"interface"`
|
||||
|
||||
// 是否是主网口
|
||||
IsMaster *bool `json:"is_master"`
|
||||
|
||||
// MAC地址
|
||||
MacAddr []string `json:"mac_addr"`
|
||||
}
|
||||
|
||||
@@ -47,3 +47,12 @@ type InstanceSnapshotDetails struct {
|
||||
Snapshots []SimpleSnapshot `json:"snapshots"`
|
||||
Properties map[string]string `json:"properties"`
|
||||
}
|
||||
|
||||
type InstanceSnapshotListInput struct {
|
||||
apis.VirtualResourceListInput
|
||||
|
||||
ServerFilterListInput
|
||||
|
||||
// 操作系统类型
|
||||
OsType []string `json:"os_type"`
|
||||
}
|
||||
|
||||
@@ -27,3 +27,30 @@ type IsolateDeviceDetails struct {
|
||||
// 云主机状态
|
||||
GuestStatus string `json:"guest_status"`
|
||||
}
|
||||
|
||||
type IsolatedDeviceListInput struct {
|
||||
apis.StandaloneResourceListInput
|
||||
apis.DomainizedResourceListInput
|
||||
|
||||
HostFilterListInput
|
||||
|
||||
// 只列出GPU直通设备
|
||||
Gpu *bool `json:"gpu"`
|
||||
// 只列出USB直通设备
|
||||
Usb *bool `json:"usb"`
|
||||
// 只列出未使用的直通设备
|
||||
Unused *bool `json:"unused"`
|
||||
|
||||
// # PCI / GPU-HPC / GPU-VGA / USB / NIC
|
||||
// 设备类型
|
||||
DevType []string `json:"dev_type"`
|
||||
|
||||
// # Specific device name read from lspci command, e.g. `Tesla K40m` ...
|
||||
Model []string `json:"model"`
|
||||
|
||||
// # pci address of `Bus:Device.Function` format, or usb bus address of `bus.addr`
|
||||
Addr []string `json:"addr"`
|
||||
|
||||
// 设备VENDOE编号
|
||||
VendorDeviceId []string `json:"vendor_device_id"`
|
||||
}
|
||||
|
||||
@@ -14,10 +14,6 @@
|
||||
|
||||
package compute
|
||||
|
||||
import (
|
||||
"yunion.io/x/onecloud/pkg/apis"
|
||||
)
|
||||
|
||||
const (
|
||||
DIRECT_PCI_TYPE = "PCI"
|
||||
GPU_HPC_TYPE = "GPU-HPC" // # for compute
|
||||
@@ -42,17 +38,3 @@ var VENDOR_ID_MAP = map[string]string{
|
||||
"NVIDIA": NVIDIA_VENDOR_ID,
|
||||
"AMD": AMD_VENDOR_ID,
|
||||
}
|
||||
|
||||
type IsolatedDeviceListInput struct {
|
||||
apis.StandaloneResourceListInput
|
||||
apis.DomainizedResourceListInput
|
||||
|
||||
HostFilterListInput
|
||||
|
||||
// 只列出GPU直通设备
|
||||
Gpu *bool `json:"gpu"`
|
||||
// 只列出USB直通设备
|
||||
Usb *bool `json:"usb"`
|
||||
// 只列出未使用的直通设备
|
||||
Unused *bool `json:"unused"`
|
||||
}
|
||||
|
||||
@@ -98,3 +98,8 @@ type SchedtagJointResourceDetails struct {
|
||||
// 调度标签管理的资源类型
|
||||
ResourceType string `json:"resource_type"`
|
||||
}
|
||||
|
||||
type SchedtagJointsListInput struct {
|
||||
apis.JointResourceBaseListInput
|
||||
SchedtagFilterListInput
|
||||
}
|
||||
|
||||
@@ -82,12 +82,6 @@ type SnapshotListInput struct {
|
||||
IsInstanceSnapshot *bool `json:"is_instance_snapshot"`
|
||||
}
|
||||
|
||||
type InstanceSnapshotListInput struct {
|
||||
apis.VirtualResourceListInput
|
||||
|
||||
ServerFilterListInput
|
||||
}
|
||||
|
||||
type SnapshotDetails struct {
|
||||
apis.VirtualResourceDetails
|
||||
ManagedResourceInfo
|
||||
|
||||
@@ -172,10 +172,3 @@ type StorageListInput struct {
|
||||
UsableResourceListInput
|
||||
StorageShareFilterListInput
|
||||
}
|
||||
|
||||
type StoragecacheListInput struct {
|
||||
apis.StandaloneResourceListInput
|
||||
apis.DomainizedResourceListInput
|
||||
|
||||
ManagedResourceListInput
|
||||
}
|
||||
|
||||
@@ -35,3 +35,13 @@ type StoragecacheDetails struct {
|
||||
// 通过一致性哈希获取的一个管理宿主机信息
|
||||
Host *jsonutils.JSONDict `json:"host"`
|
||||
}
|
||||
|
||||
type StoragecacheListInput struct {
|
||||
apis.StandaloneResourceListInput
|
||||
apis.ExternalizedResourceBaseListInput
|
||||
|
||||
ManagedResourceListInput
|
||||
|
||||
// 路径过滤
|
||||
Path []string `json:"path"`
|
||||
}
|
||||
|
||||
@@ -222,3 +222,8 @@ type JointResourceBaseListInput struct {
|
||||
type VirtualJointResourceBaseListInput struct {
|
||||
JointResourceBaseListInput
|
||||
}
|
||||
|
||||
type ExternalizedResourceBaseListInput struct {
|
||||
// 以资源外部ID过滤
|
||||
ExternalId string `json:"external_id"`
|
||||
}
|
||||
|
||||
@@ -15,10 +15,12 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
|
||||
"yunion.io/x/sqlchemy"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/apis"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
)
|
||||
|
||||
@@ -27,6 +29,8 @@ type SExternalizedResourceBase struct {
|
||||
ExternalId string `width:"256" charset:"utf8" index:"true" list:"user" create:"admin_optional" update:"admin" json:"external_id"`
|
||||
}
|
||||
|
||||
type SExternalizedResourceBaseManager struct{}
|
||||
|
||||
func (model SExternalizedResourceBase) GetExternalId() string {
|
||||
return model.ExternalId
|
||||
}
|
||||
@@ -84,3 +88,15 @@ func FetchByExternalId(manager IModelManager, idStr string) (IExternalizedModel,
|
||||
return nil, sql.ErrNoRows
|
||||
}
|
||||
}
|
||||
|
||||
func (manager *SExternalizedResourceBaseManager) ListItemFilter(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query apis.ExternalizedResourceBaseListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
if len(query.ExternalId) > 0 {
|
||||
q = q.Equals("external_id", query.ExternalId)
|
||||
}
|
||||
return q, nil
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@ package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"yunion.io/x/pkg/errors"
|
||||
"yunion.io/x/sqlchemy"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
|
||||
@@ -27,9 +29,10 @@ import (
|
||||
|
||||
type SHostJointsManager struct {
|
||||
db.SJointResourceBaseManager
|
||||
SHostResourceBaseManager
|
||||
}
|
||||
|
||||
func NewHostJointsManager(dt interface{}, tableName string, keyword string, keywordPlural string, slave db.IStandaloneModelManager) SHostJointsManager {
|
||||
func NewHostJointsManager(hostIdFieldName string, dt interface{}, tableName string, keyword string, keywordPlural string, slave db.IStandaloneModelManager) SHostJointsManager {
|
||||
return SHostJointsManager{
|
||||
SJointResourceBaseManager: db.NewJointResourceBaseManager(
|
||||
dt,
|
||||
@@ -39,6 +42,9 @@ func NewHostJointsManager(dt interface{}, tableName string, keyword string, keyw
|
||||
HostManager,
|
||||
slave,
|
||||
),
|
||||
SHostResourceBaseManager: SHostResourceBaseManager{
|
||||
hostIdFieldName:hostIdFieldName,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,3 +109,43 @@ func (manager *SHostJointsManager) FetchCustomizeColumns(
|
||||
|
||||
return rows
|
||||
}
|
||||
|
||||
func (manager *SHostJointsManager) ListItemFilter(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.HostJointsListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SJointResourceBaseManager.ListItemFilter(ctx, q, userCred, query.JointResourceBaseListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SJointResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
q, err = manager.SHostResourceBaseManager.ListItemFilter(ctx, q, userCred, query.HostFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
func (manager *SHostJointsManager) OrderByExtraFields(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.HostJointsListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SJointResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.JointResourceBaseListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SJointResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
q, err = manager.SHostResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.HostFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"yunion.io/x/pkg/errors"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
@@ -29,6 +30,7 @@ import (
|
||||
|
||||
type SHostnetworkManager struct {
|
||||
SHostJointsManager
|
||||
SNetworkResourceBaseManager
|
||||
}
|
||||
|
||||
var HostnetworkManager *SHostnetworkManager
|
||||
@@ -37,6 +39,7 @@ func init() {
|
||||
db.InitManager(func() {
|
||||
HostnetworkManager = &SHostnetworkManager{
|
||||
SHostJointsManager: NewHostJointsManager(
|
||||
"baremetal_id",
|
||||
SHostnetwork{},
|
||||
"baremetalnetworks_tbl",
|
||||
"baremetalnetwork",
|
||||
@@ -51,14 +54,18 @@ func init() {
|
||||
type SHostnetwork struct {
|
||||
SHostJointsBase
|
||||
|
||||
BaremetalId string `width:"36" charset:"ascii" nullable:"false" list:"admin"` // Column(VARCHAR(36, charset='ascii'), nullable=False)
|
||||
NetworkId string `width:"36" charset:"ascii" nullable:"false" list:"admin"` // Column(VARCHAR(36, charset='ascii'), nullable=False)
|
||||
IpAddr string `width:"16" charset:"ascii" list:"admin"` // Column(VARCHAR(16, charset='ascii'))
|
||||
MacAddr string `width:"18" charset:"ascii" list:"admin"` // Column(VARCHAR(18, charset='ascii'))
|
||||
// 宿主机ID
|
||||
BaremetalId string `width:"36" charset:"ascii" nullable:"false" list:"admin"`
|
||||
// 网络ID
|
||||
NetworkId string `width:"36" charset:"ascii" nullable:"false" list:"admin"`
|
||||
// IP地址
|
||||
IpAddr string `width:"16" charset:"ascii" list:"admin"`
|
||||
// MAC地址
|
||||
MacAddr string `width:"18" charset:"ascii" list:"admin"`
|
||||
}
|
||||
|
||||
func (manager *SHostnetworkManager) GetMasterFieldName() string {
|
||||
return "baremetal_id"
|
||||
return manager.getHostIdFieldName()
|
||||
}
|
||||
|
||||
func (manager *SHostnetworkManager) GetSlaveFieldName() string {
|
||||
@@ -207,3 +214,50 @@ func (man *SHostnetworkManager) GetHostByAddress(addr string) *SHost {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (manager *SHostnetworkManager) ListItemFilter(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.HostnetworkListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SHostJointsManager.ListItemFilter(ctx, q, userCred, query.HostJointsListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
q, err = manager.SNetworkResourceBaseManager.ListItemFilter(ctx, q, userCred, query.NetworkFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SNetworkResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
|
||||
if len(query.IpAddr) > 0 {
|
||||
q = q.In("ip_addr", query.IpAddr)
|
||||
}
|
||||
if len(query.MacAddr) > 0 {
|
||||
q = q.In("mac_addr", query.MacAddr)
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
func (manager *SHostnetworkManager) OrderByExtraFields(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.HostnetworkListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SHostJointsManager.OrderByExtraFields(ctx, q, userCred, query.HostJointsListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
q, err = manager.SNetworkResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.NetworkFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SNetworkResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
@@ -38,6 +38,14 @@ type SHostResourceBase struct {
|
||||
type SHostResourceBaseManager struct {
|
||||
SZoneResourceBaseManager
|
||||
SManagedResourceBaseManager
|
||||
hostIdFieldName string
|
||||
}
|
||||
|
||||
func (manager *SHostResourceBaseManager) getHostIdFieldName() string {
|
||||
if len(manager.hostIdFieldName) > 0 {
|
||||
return manager.hostIdFieldName
|
||||
}
|
||||
return "host_id"
|
||||
}
|
||||
|
||||
func (self *SHostResourceBase) GetExtraDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) api.HostResourceInfo {
|
||||
@@ -113,11 +121,11 @@ func (manager *SHostResourceBaseManager) ListItemFilter(
|
||||
return nil, errors.Wrap(err, "HostManager.FetchByIdOrName")
|
||||
}
|
||||
}
|
||||
q = q.Equals("host_id", hostObj.GetId())
|
||||
q = q.Equals(manager.getHostIdFieldName(), hostObj.GetId())
|
||||
}
|
||||
if len(query.HostSN) > 0 {
|
||||
sq := HostManager.Query("id").Equals("sn", query.HostSN).SubQuery()
|
||||
q = q.In("host_id", sq)
|
||||
q = q.In(manager.getHostIdFieldName(), sq)
|
||||
}
|
||||
subq := HostManager.Query("id").Snapshot()
|
||||
subq, err := manager.SZoneResourceBaseManager.ListItemFilter(ctx, subq, userCred, query.ZonalFilterListInput)
|
||||
@@ -129,7 +137,7 @@ func (manager *SHostResourceBaseManager) ListItemFilter(
|
||||
return nil, errors.Wrap(err, "SManagedResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
if subq.IsAltered() {
|
||||
q = q.Filter(sqlchemy.In(q.Field("host_id"), subq.SubQuery()))
|
||||
q = q.Filter(sqlchemy.In(q.Field(manager.getHostIdFieldName()), subq.SubQuery()))
|
||||
}
|
||||
return q, nil
|
||||
}
|
||||
@@ -139,22 +147,22 @@ func (manager *SHostResourceBaseManager) QueryDistinctExtraField(q *sqlchemy.SQu
|
||||
case "host":
|
||||
hostQuery := HostManager.Query("name", "id").Distinct().SubQuery()
|
||||
q.AppendField(hostQuery.Field("name", field))
|
||||
q = q.Join(hostQuery, sqlchemy.Equals(q.Field("host_id"), hostQuery.Field("id")))
|
||||
q = q.Join(hostQuery, sqlchemy.Equals(q.Field(manager.getHostIdFieldName()), hostQuery.Field("id")))
|
||||
q.GroupBy(hostQuery.Field("name"))
|
||||
return q, nil
|
||||
case "host_type":
|
||||
hostQuery := HostManager.Query(field, "id").Distinct().SubQuery()
|
||||
q.AppendField(hostQuery.Field(field))
|
||||
q = q.Join(hostQuery, sqlchemy.Equals(q.Field("host_id"), hostQuery.Field("id")))
|
||||
q = q.Join(hostQuery, sqlchemy.Equals(q.Field(manager.getHostIdFieldName()), hostQuery.Field("id")))
|
||||
q.GroupBy(hostQuery.Field(field))
|
||||
return q, nil
|
||||
case "manager", "account", "provider", "brand":
|
||||
hosts := HostManager.Query("id", "manager_id").SubQuery()
|
||||
q = q.LeftJoin(hosts, sqlchemy.Equals(q.Field("host_id"), hosts.Field("id")))
|
||||
q = q.LeftJoin(hosts, sqlchemy.Equals(q.Field(manager.getHostIdFieldName()), hosts.Field("id")))
|
||||
return manager.SManagedResourceBaseManager.QueryDistinctExtraField(q, field)
|
||||
default:
|
||||
hosts := HostManager.Query("id", "zone_id").SubQuery()
|
||||
q = q.LeftJoin(hosts, sqlchemy.Equals(q.Field("host_id"), hosts.Field("id")))
|
||||
q = q.LeftJoin(hosts, sqlchemy.Equals(q.Field(manager.getHostIdFieldName()), hosts.Field("id")))
|
||||
q, err := manager.SZoneResourceBaseManager.QueryDistinctExtraField(q, field)
|
||||
if err == nil {
|
||||
return q, nil
|
||||
@@ -205,7 +213,7 @@ func (manager *SHostResourceBaseManager) GetOrderBySubQuery(
|
||||
}
|
||||
if db.NeedOrderQuery(manager.GetOrderByFields(query)) {
|
||||
subq := hostQ.SubQuery()
|
||||
q = q.LeftJoin(subq, sqlchemy.Equals(q.Field("host_id"), subq.Field("id")))
|
||||
q = q.LeftJoin(subq, sqlchemy.Equals(q.Field(manager.getHostIdFieldName()), subq.Field("id")))
|
||||
if db.NeedOrderQuery([]string{query.OrderByHost, query.OrderByHostSN}) {
|
||||
orders = append(orders, query.OrderByHost, query.OrderByHostSN)
|
||||
fields = append(fields, subq.Field("name"), subq.Field("sn"))
|
||||
|
||||
@@ -86,12 +86,14 @@ type SHost struct {
|
||||
SBillingResourceBase
|
||||
|
||||
// 机架
|
||||
Rack string `width:"16" charset:"ascii" nullable:"true" get:"admin" update:"admin" create:"admin_optional"`
|
||||
Rack string `width:"16" charset:"ascii" nullable:"true" get:"admin" update:"admin" create:"admin_optional"`
|
||||
// 机位
|
||||
Slots string `width:"16" charset:"ascii" nullable:"true" get:"admin" update:"admin" create:"admin_optional"`
|
||||
|
||||
// 管理口MAC
|
||||
AccessMac string `width:"32" charset:"ascii" nullable:"false" index:"true" list:"admin" update:"admin"`
|
||||
|
||||
// Ip地址
|
||||
// 管理口Ip地址
|
||||
AccessIp string `width:"16" charset:"ascii" nullable:"true" list:"admin"`
|
||||
|
||||
// 管理地址
|
||||
@@ -99,7 +101,7 @@ type SHost struct {
|
||||
|
||||
// 系统信息
|
||||
SysInfo jsonutils.JSONObject `nullable:"true" search:"admin" list:"admin" update:"admin" create:"admin_optional"`
|
||||
// SN信息
|
||||
// 物理机序列号信息
|
||||
SN string `width:"128" charset:"ascii" nullable:"true" list:"admin" update:"admin" create:"admin_optional"`
|
||||
|
||||
// CPU大小
|
||||
@@ -154,7 +156,9 @@ type SHost struct {
|
||||
// 宿主机类型
|
||||
HostType string `width:"36" charset:"ascii" nullable:"false" list:"admin" update:"admin" create:"admin_required"`
|
||||
|
||||
Version string `width:"64" charset:"ascii" list:"admin" update:"admin" create:"admin_optional"`
|
||||
// host服务软件版本
|
||||
Version string `width:"64" charset:"ascii" list:"admin" update:"admin" create:"admin_optional"`
|
||||
// OVN软件版本
|
||||
OvnVersion string `width:"64" charset:"ascii" list:"admin" update:"admin" create:"admin_optional"`
|
||||
|
||||
IsBaremetal bool `nullable:"true" default:"false" list:"admin" update:"admin" create:"admin_optional"`
|
||||
@@ -164,15 +168,20 @@ type SHost struct {
|
||||
|
||||
LastPingAt time.Time ``
|
||||
|
||||
ResourceType string `width:"36" charset:"ascii" nullable:"false" list:"admin" update:"admin" create:"admin_optional" default:"shared"` // Column(VARCHAR(36, charset='ascii'), nullable=False)
|
||||
ResourceType string `width:"36" charset:"ascii" nullable:"false" list:"admin" update:"admin" create:"admin_optional" default:"shared"`
|
||||
|
||||
RealExternalId string `width:"256" charset:"utf8" get:"admin"`
|
||||
|
||||
// 是否为导入的宿主机
|
||||
IsImport bool `nullable:"true" default:"false" list:"admin" create:"admin_optional"`
|
||||
|
||||
// 是否允许PXE启动
|
||||
EnablePxeBoot tristate.TriState `nullable:"false" default:"true" list:"admin" create:"admin_optional" update:"admin"`
|
||||
|
||||
Uuid string `width:"64" nullable:"true" list:"admin" update:"admin" create:"admin_optional"`
|
||||
// 主机UUID
|
||||
Uuid string `width:"64" nullable:"true" list:"admin" update:"admin" create:"admin_optional"`
|
||||
|
||||
// 主机启动模式, 可能值位PXE和ISO
|
||||
BootMode string `width:"8" nullable:"true" list:"admin" update:"admin" create:"admin_optional"`
|
||||
}
|
||||
|
||||
@@ -348,6 +357,73 @@ func (manager *SHostManager) ListItemFilter(
|
||||
}
|
||||
}
|
||||
|
||||
if len(query.Rack) > 0 {
|
||||
q = q.In("rack", query.Rack)
|
||||
}
|
||||
if len(query.Slots) > 0 {
|
||||
q = q.In("slots", query.Slots)
|
||||
}
|
||||
if len(query.AccessMac) > 0 {
|
||||
q = q.In("access_mac", query.AccessMac)
|
||||
}
|
||||
if len(query.AccessIp) > 0 {
|
||||
q = q.In("access_ip", query.AccessIp)
|
||||
}
|
||||
if len(query.SN) > 0 {
|
||||
q = q.In("sn", query.SN)
|
||||
}
|
||||
if len(query.CpuCount) > 0 {
|
||||
q = q.In("cpu_count", query.CpuCount)
|
||||
}
|
||||
if len(query.MemSize) > 0 {
|
||||
q = q.In("mem_size", query.MemSize)
|
||||
}
|
||||
if len(query.StorageType) > 0 {
|
||||
q = q.In("storage_type", query.StorageType)
|
||||
}
|
||||
if len(query.IpmiIp) > 0 {
|
||||
q = q.In("ipmi_ip", query.IpmiIp)
|
||||
}
|
||||
if len(query.HostStatus) > 0 {
|
||||
q = q.In("host_status", query.HostStatus)
|
||||
}
|
||||
if len(query.HostType) > 0 {
|
||||
q = q.In("host_type", query.HostType)
|
||||
}
|
||||
if len(query.Version) > 0 {
|
||||
q = q.In("version", query.Version)
|
||||
}
|
||||
if len(query.OvnVersion) > 0 {
|
||||
q = q.In("ovn_version", query.OvnVersion)
|
||||
}
|
||||
if query.IsMaintenance != nil {
|
||||
if *query.IsMaintenance {
|
||||
q = q.IsTrue("is_maintenance")
|
||||
} else {
|
||||
q = q.IsFalse("is_maintenance")
|
||||
}
|
||||
}
|
||||
if query.IsImport != nil {
|
||||
if *query.IsImport {
|
||||
q = q.IsTrue("is_import")
|
||||
} else {
|
||||
q = q.IsFalse("is_import")
|
||||
}
|
||||
}
|
||||
if query.EnablePxeBoot != nil {
|
||||
if *query.EnablePxeBoot {
|
||||
q = q.IsTrue("enable_pxe_boot")
|
||||
} else {
|
||||
q = q.IsFalse("enable_pxe_boot")
|
||||
}
|
||||
}
|
||||
if len(query.Uuid) > 0 {
|
||||
q = q.In("uuid", query.Uuid)
|
||||
}
|
||||
if len(query.BootMode) > 0 {
|
||||
q = q.In("boot_mode", query.BootMode)
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"yunion.io/x/pkg/errors"
|
||||
"yunion.io/x/sqlchemy"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
@@ -28,6 +30,7 @@ import (
|
||||
|
||||
type SHostschedtagManager struct {
|
||||
*SSchedtagJointsManager
|
||||
SHostResourceBaseManager
|
||||
}
|
||||
|
||||
var HostschedtagManager *SHostschedtagManager
|
||||
@@ -123,3 +126,43 @@ func (self *SHostschedtag) Delete(ctx context.Context, userCred mcclient.TokenCr
|
||||
func (self *SHostschedtag) Detach(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
return self.SSchedtagJointsBase.detach(self, ctx, userCred)
|
||||
}
|
||||
|
||||
func (manager *SHostschedtagManager) ListItemFilter(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.HostschedtagListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SSchedtagJointsManager.ListItemFilter(ctx, q, userCred, query.SchedtagJointsListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SSchedtagJointsManager.ListItemFilter")
|
||||
}
|
||||
q, err = manager.SHostResourceBaseManager.ListItemFilter(ctx, q, userCred, query.HostFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
func (manager *SHostschedtagManager) OrderByExtraFields(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.HostschedtagListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SSchedtagJointsManager.OrderByExtraFields(ctx, q, userCred, query.SchedtagJointsListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SSchedtagJointsManager.OrderByExtraFields")
|
||||
}
|
||||
q, err = manager.SHostResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.HostFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
@@ -37,6 +37,7 @@ const ErrStorageInUse = errors.Error("StorageInUse")
|
||||
|
||||
type SHoststorageManager struct {
|
||||
SHostJointsManager
|
||||
SStorageResourceBaseManager
|
||||
}
|
||||
|
||||
var HoststorageManager *SHoststorageManager
|
||||
@@ -45,6 +46,7 @@ func init() {
|
||||
db.InitManager(func() {
|
||||
HoststorageManager = &SHoststorageManager{
|
||||
SHostJointsManager: NewHostJointsManager(
|
||||
"host_id",
|
||||
SHoststorage{},
|
||||
"hoststorages_tbl",
|
||||
"hoststorage",
|
||||
@@ -59,14 +61,14 @@ func init() {
|
||||
type SHoststorage struct {
|
||||
SHostJointsBase
|
||||
|
||||
// 挂载点
|
||||
MountPoint string `width:"256" charset:"ascii" nullable:"false" list:"admin" update:"admin" create:"required" json:"mount_point"`
|
||||
|
||||
// 宿主机Id
|
||||
HostId string `width:"36" charset:"ascii" nullable:"false" list:"admin" create:"required" json:"host_id"`
|
||||
// 存储Id
|
||||
StorageId string `width:"36" charset:"ascii" nullable:"false" list:"admin" create:"required" json:"storage_id"`
|
||||
|
||||
// 挂载点
|
||||
MountPoint string `width:"256" charset:"ascii" nullable:"false" list:"admin" update:"admin" create:"required" json:"mount_point"`
|
||||
|
||||
// 配置信息
|
||||
Config *jsonutils.JSONArray `nullable:"true" get:"admin" json:"config"`
|
||||
// 真实容量大小
|
||||
@@ -327,3 +329,43 @@ func (self *SHoststorage) syncWithCloudHostStorage(userCred mcclient.TokenCreden
|
||||
db.OpsLog.LogSyncUpdate(self, diff, userCred)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (manager *SHoststorageManager) ListItemFilter(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.HoststorageListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SHostJointsManager.ListItemFilter(ctx, q, userCred, query.HostJointsListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
q, err = manager.SStorageResourceBaseManager.ListItemFilter(ctx, q, userCred, query.StorageFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SStorageResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
func (manager *SHoststorageManager) OrderByExtraFields(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.HoststorageListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SHostJointsManager.OrderByExtraFields(ctx, q, userCred, query.HostJointsListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
q, err = manager.SStorageResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.StorageFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SStorageResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
@@ -16,6 +16,7 @@ package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"yunion.io/x/pkg/errors"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
@@ -30,6 +31,7 @@ import (
|
||||
|
||||
type SHostwireManager struct {
|
||||
SHostJointsManager
|
||||
SWireResourceBaseManager
|
||||
}
|
||||
|
||||
var HostwireManager *SHostwireManager
|
||||
@@ -38,6 +40,7 @@ func init() {
|
||||
db.InitManager(func() {
|
||||
HostwireManager = &SHostwireManager{
|
||||
SHostJointsManager: NewHostJointsManager(
|
||||
"host_id",
|
||||
SHostwire{},
|
||||
"hostwires_tbl",
|
||||
"hostwire",
|
||||
@@ -194,3 +197,60 @@ func (manager *SHostwireManager) FetchByHostIdAndMac(hostId string, mac string)
|
||||
}
|
||||
return hw.(*SHostwire), nil
|
||||
}
|
||||
|
||||
func (manager *SHostwireManager) ListItemFilter(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.HostwireListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SHostJointsManager.ListItemFilter(ctx, q, userCred, query.HostJointsListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
q, err = manager.SWireResourceBaseManager.ListItemFilter(ctx, q, userCred, query.WireFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SWireResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
|
||||
if len(query.Bridge) > 0 {
|
||||
q = q.In("bridge", query.Bridge)
|
||||
}
|
||||
if len(query.Interface) > 0 {
|
||||
q = q.In("interface", query.Interface)
|
||||
}
|
||||
if query.IsMaster != nil {
|
||||
if *query.IsMaster {
|
||||
q = q.IsTrue("is_master")
|
||||
} else {
|
||||
q = q.IsFalse("is_master")
|
||||
}
|
||||
}
|
||||
if len(query.MacAddr) > 0 {
|
||||
q = q.In("mac_addr", query.MacAddr)
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
func (manager *SHostwireManager) OrderByExtraFields(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.HostwireListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SHostJointsManager.OrderByExtraFields(ctx, q, userCred, query.HostJointsListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
q, err = manager.SWireResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.WireFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SWireResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
@@ -105,6 +105,10 @@ func (manager *SInstanceSnapshotManager) ListItemFilter(
|
||||
q = q.Equals("guest_id", guestObj.GetId())
|
||||
}
|
||||
|
||||
if len(query.OsType) > 0 {
|
||||
q = q.In("os_type", query.OsType)
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -166,6 +166,19 @@ func (manager *SIsolatedDeviceManager) ListItemFilter(
|
||||
q = q.IsEmpty("guest_id")
|
||||
}
|
||||
|
||||
if len(query.DevType) > 0 {
|
||||
q = q.In("dev_type", query.DevType)
|
||||
}
|
||||
if len(query.Model) > 0 {
|
||||
q = q.In("model", query.Model)
|
||||
}
|
||||
if len(query.Addr) > 0 {
|
||||
q = q.In("addr", query.Addr)
|
||||
}
|
||||
if len(query.VendorDeviceId) > 0 {
|
||||
q = q.In("vendor_device_id", query.VendorDeviceId)
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ package models
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"yunion.io/x/pkg/errors"
|
||||
"yunion.io/x/sqlchemy"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
@@ -33,6 +35,7 @@ import (
|
||||
|
||||
type SSchedtagJointsManager struct {
|
||||
db.SJointResourceBaseManager
|
||||
SSchedtagResourceBaseManager
|
||||
}
|
||||
|
||||
func NewSchedtagJointsManager(
|
||||
@@ -217,3 +220,43 @@ func (joint *SSchedtagJointsBase) Detach(ctx context.Context, userCred mcclient.
|
||||
func (joint *SSchedtagJointsBase) detach(obj db.IJointModel, ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
return db.DetachJoint(ctx, userCred, obj)
|
||||
}
|
||||
|
||||
func (manager *SSchedtagJointsManager) ListItemFilter(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.SchedtagJointsListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SJointResourceBaseManager.ListItemFilter(ctx, q, userCred, query.JointResourceBaseListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SJointResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
q, err = manager.SSchedtagResourceBaseManager.ListItemFilter(ctx, q, userCred, query.SchedtagFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SSchedtagResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
func (manager *SSchedtagJointsManager) OrderByExtraFields(
|
||||
ctx context.Context,
|
||||
q *sqlchemy.SQuery,
|
||||
userCred mcclient.TokenCredential,
|
||||
query api.SchedtagJointsListInput,
|
||||
) (*sqlchemy.SQuery, error) {
|
||||
var err error
|
||||
|
||||
q, err = manager.SJointResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.JointResourceBaseListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SJointResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
q, err = manager.SSchedtagResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.SchedtagFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SSchedtagResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
@@ -40,6 +40,7 @@ import (
|
||||
|
||||
type SStoragecacheManager struct {
|
||||
db.SStandaloneResourceBaseManager
|
||||
db.SExternalizedResourceBaseManager
|
||||
SManagedResourceBaseManager
|
||||
}
|
||||
|
||||
@@ -418,11 +419,20 @@ func (manager *SStoragecacheManager) ListItemFilter(
|
||||
return nil, errors.Wrap(err, "SStandaloneResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
|
||||
q, err = manager.SExternalizedResourceBaseManager.ListItemFilter(ctx, q, userCred, query.ExternalizedResourceBaseListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SExternalizedResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
|
||||
q, err = manager.SManagedResourceBaseManager.ListItemFilter(ctx, q, userCred, query.ManagedResourceListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SManagedResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
|
||||
if len(query.Path) > 0 {
|
||||
q = q.In("path", query.Path)
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user