Files
cloudpods/pkg/apis/list.go
2023-06-15 15:51:36 +08:00

397 lines
13 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package apis
import (
"time"
"yunion.io/x/onecloud/pkg/util/tagutils"
)
type ScopedResourceInput struct {
// 指定查询的权限范围可能值为project, domain or system
Scope string `json:"scope"`
}
type DomainizedResourceListInput struct {
// swagger:ignore
// Is an admin call? equivalent to scope=system
// Deprecated
Admin *bool `json:"admin"`
ScopedResourceInput
DomainizedResourceInput
// 对具有域属性的资源严格匹配域ID
ProjectDomainIds []string `json:"project_domain_ids"`
// Deprecated
// swagger:ignore
ProjectDomains []string `json:"project_domains" yunion-deprecated-by:"project_domain_ids"`
// 按domain名称排序可能值为asc|desc
// pattern: asc|desc
OrderByDomain string `json:"order_by_domain"`
// filter by domain tags
DomainTags tagutils.TTagSetList `json:"domain_tags"`
// filter by domain tags
NoDomainTags tagutils.TTagSetList `json:"no_domain_tags"`
// ignore
// domain tags filters imposed by policy
// PolicyDomainTags tagutils.TTagSetList `json:"policy_domain_tags"`
}
type ProjectizedResourceListInput struct {
DomainizedResourceListInput
ProjectizedResourceInput
// 对具有项目属性的资源严格匹配项目ID
ProjectIds []string `json:"project_ids"`
// Deprecated
// swagger:ignore
Projects []string `json:"projects" yunion-deprecated-by:"project_ids"`
// 按project名称排序可能值为asc|desc
// pattern: asc|desc
OrderByProject string `json:"order_by_project"`
// swagger:ignore
// Deprecated
OrderByTenant string `json:"order_by_tenant" yunion-deprecated-by:"order_by_project"`
// filter by project tags
ProjectTags tagutils.TTagSetList `json:"project_tags"`
// filter by no project tags
NoProjectTags tagutils.TTagSetList `json:"no_project_tags"`
// filter by project organizations
ProjectOrganizations []string `json:"project_organizations"`
// ignore
// project tag fitlers imposed by policy
PolicyProjectTags tagutils.TTagSetList `json:"policy_project_tags"`
}
type StatusDomainLevelUserResourceListInput struct {
StatusDomainLevelResourceListInput
// 查询指定的用户ID或名称拥有的资源
UserId string `json:"user_id"`
// swagger:ignore
// Deprecated
// Filter by userId
User string `json:"user" yunion-deprecated-by:"user_id"`
}
type UserResourceListInput struct {
StandaloneResourceListInput
ScopedResourceInput
// swagger:ignore
// Is an admin call? equivalent to scope=system
// Deprecated
Admin *bool `json:"admin"`
// 查询指定的用户ID或名称拥有的资源
UserId string `json:"user_id"`
// swagger:ignore
// Deprecated
// Filter by userId
User string `json:"user" yunion-deprecated-by:"user_id"`
}
type ModelBaseListInput struct {
Meta
// 查询限制量
// default: 20
Limit *int `json:"limit" default:"20" help:"max items per page"`
// 查询偏移量
// default: 0
Offset *int `json:"offset"`
// 列表排序时,用于排序的字段的名称,该字段不提供时,则按默认字段排序。一般时按照资源的新建时间逆序排序。
OrderBy []string `json:"order_by"`
// 列表排序时的顺序desc为从高到低asc为从低到高。默认是按照资源的创建时间desc排序。
// example: desc|asc
Order string `json:"order"`
// 列表返回资源的更多详细信息。默认只显示基本字段该字段为true则返回扩展字段信息。
Details *bool `json:"details"`
// 模糊搜索所有字段
Search string `json:"search"`
// 指定过滤条件,允许指定多个,每个条件的格式为"字段名称.操作符(匹配信息)"例如name字段等于test的过滤器为name.equals('test')
// 支持的操作符如下:
//
// | 操作符 | 参数个数 | 举例 | 说明 |
// |---------------|----------|------------------------------------------------|-----------------------------|
// | in | > 0 | name.in("test", "good") | 在给定数组中 |
// | notin | > 0 | name.notin('test') | 不在给定数组中 |
// | between | 2 | created_at.between('2019-12-10', '2020-01-02') | 在两个值之间 |
// | ge | 1 | created_at.ge('2020-01-01') | 大于或等于给定值 |
// | gt | 1 | created_at.gt('2020-01-01') | 严格大于给定值 |
// | le | 1 | created_at.le('2020-01-01') | 小于或等于给定值 |
// | lt | 1 | sync_seconds.lt(900) | 严格大于给定值 |
// | like | > 0 | name.like('%test%') | sql字符串匹配任意一个字符串 |
// | contains | > 0 | name.contains('test') | 包含任意一个给定字符串 |
// | startswith | > 0 | name.startswith('test') | 以任意一个给定字符串开头 |
// | endswith | > 0 | name.endswith('test') | 以任意一个给定字符串结尾 |
// | equals | > 0 | name.equals('test') | 等于任意一个给定值 |
// | notequals | 1 | name.notequals('test') | 不等于给定值 |
// | isnull | 0 | name.isnull() | 值为SQL的NULL |
// | isnotnull | 0 | name.isnotnull() | 值不为SQL的NULL |
// | isempty | 0 | name.isempty('test') | 值为空字符串 |
// | isnotempty | 0 | name.isnotempty('test') | 值不是空字符串 |
// | isnullorempty | 0 | name.isnullorempty('test') | 值为SQL的NULL或者空字符串 |
//
Filter []string `json:"filter"`
// 指定关联过滤条件允许指定多个后端将根据关联过滤条件和其他表关联查询支持的查询语法和filter相同
// 和其他表关联的语法如下:
// joint_resources.related_key(origin_key).filter_col.filter_ops(values)
// 其中joint_resources为要关联的资源名称related_key为关联表columnorigin_key为当前表column, filter_col为
// 关联表用于查询匹配的field名称field_ops为filter支持的操作values为匹配的值
// 举例:
// guestnetworks.guest_id(id).ip_addr.equals('10.168.21.222')
JointFilter []string `json:"joint_filter"`
// 如果filter_any为true则查询所有filter的并集否则为交集
FilterAny *bool `json:"filter_any"`
// 返回结果只包含指定的字段
Field []string `json:"field"`
// 用于数据导出,指定导出的数据字段
ExportKeys string `json:"export_keys" help:"Export field keys"`
// 返回结果携带delete_fail_reason和update_fail_reason字段
ShowFailReason *bool `json:"show_fail_reason"`
}
func (o ModelBaseListInput) GetExportKeys() string {
return o.ExportKeys
}
type IncrementalListInput struct {
// 用于指定增量加载的标记
PagingMarker string `json:"paging_marker"`
}
type VirtualResourceListInput struct {
StatusStandaloneResourceListInput
ProjectizedResourceListInput
// 列表中包含标记为"系统资源"的资源
System *bool `json:"system"`
// 是否显示回收站内的资源,默认不显示(对实现了回收站的资源有效,例如主机,磁盘,镜像)
PendingDelete *bool `json:"pending_delete"`
// 是否显示所有资源,包括回收站和不再回收站的资源
// TODO: fix this???
PendingDeleteAll *bool `json:"-"`
}
type ResourceBaseListInput struct {
ModelBaseListInput
}
type SharableVirtualResourceListInput struct {
VirtualResourceListInput
SharableResourceBaseListInput
// 根据资源的共享范围过滤列表可能值为system, domain, project
PublicScope string `json:"public_scope"`
}
type AdminSharableVirtualResourceListInput struct {
SharableVirtualResourceListInput
}
type MetadataResourceListInput struct {
// 通过标签过滤(包含这些标签)
Tags tagutils.TTagSet `json:"tags"`
// 通过一组标签过滤还包含这些标签OR的关系
ObjTags tagutils.TTagSetList `json:"obj_tags"`
// 通过标签过滤(不包含这些标签)
NoTags tagutils.TTagSet `json:"no_tags"`
// 通过一组标签过滤还不包含这些标签AND的关系
NoObjTags tagutils.TTagSetList `json:"no_obj_tags"`
// ignore
// 策略规定的标签过滤器
// PolicyObjectTags tagutils.TTagSetList `json:"policy_object_tags"`
// 通过标签排序
OrderByTag string `json:"order_by_tag"`
// deprecated
// 返回资源的标签不包含用户标签
WithoutUserMeta *bool `json:"without_user_meta"`
// 返回包含用户标签的资源
WithUserMeta *bool `json:"with_user_meta"`
// 返回包含外部标签的资源
WithCloudMeta *bool `json:"with_cloud_meta"`
// 返回包含任意标签的资源
WithAnyMeta *bool `json:"with_any_meta"`
// 返回列表数据中包含资源的标签数据Metadata
WithMeta *bool `json:"with_meta"`
}
type StandaloneAnonResourceListInput struct {
ResourceBaseListInput
MetadataResourceListInput
// 显示所有的资源,包括模拟的资源
ShowEmulated *bool `json:"show_emulated" help:"show emulated resources" negative:"do not show emulated resources"`
// 以资源ID过滤列表
Ids []string `json:"id" help:"filter by ids"`
}
type StandaloneResourceListInput struct {
StandaloneAnonResourceListInput
// 以资源名称过滤列表
Names []string `json:"name" help:"filter by names"`
}
type StatusResourceBaseListInput struct {
// 以资源的状态过滤列表
Status []string `json:"status"`
}
type EnabledResourceBaseListInput struct {
// 以资源是否启用/禁用过滤列表
Enabled *bool `json:"enabled"`
}
type SharableResourceBaseListInput struct {
// 以资源是否共享过滤列表
IsPublic *bool `json:"is_public"`
// 根据资源的共享范围过滤列表可能值为system, domain, project
PublicScope string `json:"public_scope"`
}
type DomainLevelResourceListInput struct {
StandaloneResourceListInput
DomainizedResourceListInput
}
type StatusStandaloneResourceListInput struct {
StandaloneResourceListInput
StatusResourceBaseListInput
}
type EnabledStatusStandaloneResourceListInput struct {
StatusStandaloneResourceListInput
EnabledResourceBaseListInput
}
type StatusDomainLevelResourceListInput struct {
DomainLevelResourceListInput
StatusResourceBaseListInput
}
type EnabledStatusDomainLevelResourceListInput struct {
StatusDomainLevelResourceListInput
EnabledResourceBaseListInput
}
type JointResourceBaseListInput struct {
ResourceBaseListInput
}
type VirtualJointResourceBaseListInput struct {
JointResourceBaseListInput
}
type ExternalizedResourceBaseListInput struct {
// 以资源外部ID过滤
ExternalId string `json:"external_id"`
}
type DeletePreventableResourceBaseListInput struct {
// 是否禁止删除
DisableDelete *bool `json:"disable_delete"`
}
type ScopedResourceBaseListInput struct {
ProjectizedResourceListInput
// 指定匹配的范围可能值为project, domain or system
BelongScope string `json:"belong_scope"`
}
type InfrasResourceBaseListInput struct {
DomainLevelResourceListInput
SharableResourceBaseListInput
}
type StatusInfrasResourceBaseListInput struct {
InfrasResourceBaseListInput
StatusResourceBaseListInput
}
type EnabledStatusInfrasResourceBaseListInput struct {
StatusInfrasResourceBaseListInput
EnabledResourceBaseListInput
}
type MultiArchResourceBaseListInput struct {
// 通过操作系统架构过滤
// x86会过滤出os_arch为空或os_arch=i386或以x86开头的资源
// arm会过滤出os_arch=aarch64或os_arch=aarch32或者以arm开头的资源
// 其他的输入会过滤出以输入字符开头的资源
// enmu: x86, arm
OsArch []string `json:"os_arch"`
}
type AutoDeleteResourceBaseListInput struct {
AutoDelete *bool
}
type OpsLogListInput struct {
OwnerProjectIds []string `json:"owner_project_ids"`
OwnerDomainIds []string `json:"owner_domain_ids"`
// filter by obj type
ObjTypes []string `json:"obj_type"`
// filter by obj name or obj id
Objs []string `json:"obj"`
// filter by obj ids
ObjIds []string `json:"obj_id"`
// filter by obj name
ObjNames []string `json:"obj_name"`
// filter by action
Actions []string `json:"action"`
Since time.Time `json:"since"`
Until time.Time `json:"until"`
}
type IdNameDetails struct {
Id string `json:"id"`
Name string `json:"name"`
}
type TotalCountBase struct {
Count int `json:"count"`
}