Files
cloudpods/pkg/mcclient/options/compute/host.go

246 lines
8.8 KiB
Go

// 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 compute
import (
"yunion.io/x/jsonutils"
"yunion.io/x/onecloud/pkg/apis/baremetal"
"yunion.io/x/onecloud/pkg/mcclient/options"
)
type HostListOptions struct {
Schedtag string `help:"List hosts in schedtag" mcp:"true"`
Zone string `help:"List hosts in zone" mcp:"true"`
Region string `help:"List hosts in region" mcp:"true"`
Wire string `help:"List hosts in wire" mcp:"true"`
Image string `help:"List hosts cached images" json:"cachedimage" mcp:"true"`
Storage string `help:"List hosts attached to storages" mcp:"true"`
Baremetal string `help:"List hosts that is managed by baremetal system" choices:"true|false" mcp:"true"`
Empty bool `help:"show empty host" json:"-"`
Occupied bool `help:"show occupid host" json:"-"`
Enabled bool `help:"Show enabled host only" json:"-"`
Disabled bool `help:"Show disabled host only" json:"-"`
HostType string `help:"Host type filter" choices:"baremetal|hypervisor|esxi|container|hyperv|aliyun|azure|qcloud|aws|huawei|ucloud|google|ctyun" mcp:"true"`
AnyMac string `help:"Mac matches one of the host's interface"`
AnyIp []string `help:"IP matches one of the host's interface" mcp:"true"`
HostStorageType []string `help:"List host in host_storage_type"`
IsBaremetal *bool `help:"filter host list by is_baremetal=true|false" mcp:"true"`
ResourceType string `help:"Resource type" choices:"shared|prepaid|dedicated" mcp:"true"`
Usable *bool `help:"List all zones that is usable" mcp:"true"`
Hypervisor string `help:"filter hosts by hypervisor" mcp:"true"`
StorageNotAttached bool `help:"List hosts not attach specified storage"`
Uuid string `help:"find host with given system uuid"`
CdromBoot *bool `help:"filter hosts list by cdrom_boot=true|false"`
Sn string `help:"find host by sn"`
OrderByServerCount string `help:"Order by server count" choices:"desc|asc"`
OrderByStorage string `help:"Order by host storage" choices:"desc|asc"`
OrderByStorageCommitRate string `help:"Order by host storage commite rate" choices:"desc|asc"`
OrderByCpuCommitRate string `help:"Order by host cpu commit rate" choices:"desc|asc"`
OrderByMemCommitRate string `help:"Order by host meme commit rate" choices:"desc|asc"`
OrderByStorageUsed string `help:"Order by storage used" choices:"desc|asc"`
OrderByCpuCommit string `help:"Order by cpu commit" choices:"desc|asc"`
OrderByMemCommit string `help:"Order by mem commit" choices:"desc|asc"`
OrderByCpuUsage string `help:"Order by cpu usage" choices:"desc|asc"`
OrderByMemUsage string `help:"Order by mem usage" choices:"desc|asc"`
OrderByStorageUsage string `help:"Order by storage usage" choices:"desc|asc"`
OrderByVirtualMemUsage string `help:"Order by virtual mem usage" choices:"desc|asc"`
OrderByVirtualCpuUsage string `help:"Order by virtual cpu usage" choices:"desc|asc"`
OrderByVirtualStorageUsage string `help:"Order by virtual storage usage" choices:"desc|asc"`
HideCpuTopoInfo *bool `help:"Host list will remove cpu_info and topology info from sysinfo and metadata"`
AccessIp []string `help:"Access ip address"`
IpmiIp []string `help:"Ipmi ip address"`
PublicIp []string `help:"Public ip address"`
options.BaseListOptions
}
func (opts *HostListOptions) Params() (jsonutils.JSONObject, error) {
params, err := options.ListStructToParams(opts)
if err != nil {
return nil, err
}
if opts.Empty {
params.Add(jsonutils.JSONTrue, "is_empty")
} else if opts.Occupied {
params.Add(jsonutils.JSONFalse, "is_empty")
}
if opts.Enabled {
params.Add(jsonutils.NewInt(1), "enabled")
} else if opts.Disabled {
params.Add(jsonutils.NewInt(0), "enabled")
}
if len(opts.Uuid) > 0 {
params.Add(jsonutils.NewString(opts.Uuid), "uuid")
}
if len(opts.Sn) > 0 {
params.Add(jsonutils.NewString(opts.Sn), "sn")
}
return params, nil
}
// HostListForMcpOptions 单独包装,避免 HostListOptions 被 host-node-count 等复用时误注册。
type HostListForMcpOptions struct {
_ struct{} `mcp-desc:"列出宿主机。可用 zone/region/host-type/search 过滤;详情用 climc_host_show"`
HostListOptions
}
type HostShowOptions struct {
_ struct{} `mcp-desc:"查询宿主机详情。ID 可用 climc_host_list 返回的 id/name"`
options.BaseShowOptions
ShowMetadata bool `help:"Show host metadata in details" mcp:"true"`
ShowNicInfo bool `help:"Show host nic_info in details" mcp:"true"`
ShowSysInfo bool `help:"Show host sys_info in details" mcp:"true"`
ShowAll bool `help:"Show all of host details" short-token:"a" mcp:"true"`
}
func (o *HostShowOptions) Params() (jsonutils.JSONObject, error) {
// NOTE: host show only request with base options
return jsonutils.Marshal(o.BaseShowOptions), nil
}
type HostReserveCpusOptions struct {
options.BaseIdsOptions
Cpus string
Mems string
DisableSchedLoadBalance bool
ProcessesPrefix []string `help:"Processes prefix bind reserved cpus"`
}
func (o *HostReserveCpusOptions) Params() (jsonutils.JSONObject, error) {
return jsonutils.Marshal(o), nil
}
type HostAutoMigrateOnHostDownOptions struct {
options.BaseIdsOptions
AutoMigrateOnHostDown string `help:"Auto migrate on host down" choices:"enable|disable" default:"disable"`
AutoMigrateOnHostShutdown string `help:"Auto migrate on host shutdown" choices:"enable|disable" default:"disable"`
}
func (o *HostAutoMigrateOnHostDownOptions) Params() (jsonutils.JSONObject, error) {
return options.StructToParams(o)
}
type HostSetCommitBoundOptions struct {
options.BaseIdsOptions
CpuCmtbound *float32 `help:"Cpu commit bound"`
MemCmtbound *float32 `help:"Mem commit bound"`
}
func (o *HostSetCommitBoundOptions) Params() (jsonutils.JSONObject, error) {
return options.StructToParams(o)
}
type HostSetHostFilesOptions struct {
options.BaseIdsOptions
HostFiles []string `help:"Host files"`
}
func (o *HostSetHostFilesOptions) Params() (jsonutils.JSONObject, error) {
return jsonutils.Marshal(o), nil
}
type HostStatusStatisticsOptions struct {
HostListOptions
options.StatusStatisticsOptions
}
type HostValidateIPMI struct {
IP string `json:"ip" help:"IPMI ip address"`
USERNAME string `json:"username" help:"IPMI username"`
PASSWORD string `json:"password" help:"IPMI password"`
}
func (h HostValidateIPMI) Params() (jsonutils.JSONObject, error) {
return jsonutils.Marshal(baremetal.ValidateIPMIRequest{
Ip: h.IP,
Username: h.USERNAME,
Password: h.PASSWORD,
}), nil
}
type HostIsolatedDeviceNumaStatsOptions struct {
options.BaseIdOptions
DevType string `json:"dev_type"`
}
func (o *HostIsolatedDeviceNumaStatsOptions) Params() (jsonutils.JSONObject, error) {
return jsonutils.Marshal(o), nil
}
type HostUpdateOptions struct {
options.BaseIdOptions
Name string `help:"New name of the host"`
Description *string `help:"New Description of the host"`
MemReserved *string `help:"Memory reserved"`
CpuReserved *int64 `help:"CPU reserved"`
HostType *string `help:"Change host type, CAUTION!!!!" choices:"hypervisor|kubelet|esxi|baremetal"`
CpuCount *int
NodeCount *int8
CpuDesc *string
MemSize *int
StorageSize *int64
// AccessIp string `help:"Change access ip, CAUTION!!!!"`
AccessMac *string `help:"Change baremetal access MAC, CAUTION!!!!"`
Uuid *string `help:"Change baremetal UUID, CAUTION!!!!"`
EnableNumaAllocate string `help:"Host enable numa allocate" choices:"True|False"`
IpmiUsername *string `help:"IPMI user"`
IpmiPassword *string `help:"IPMI password"`
IpmiIpAddr *string `help:"IPMI ip_addr"`
Sn *string `help:"serial number"`
Hostname *string `help:"update host name"`
PublicIp *string `help:"public_ip"`
NoPublicIp *bool `help:"clear public ip"`
}
func (opts *HostUpdateOptions) Params() (jsonutils.JSONObject, error) {
v := jsonutils.Marshal(opts).(*jsonutils.JSONDict)
if opts.NoPublicIp != nil && *opts.NoPublicIp {
v.Set("public_ip", jsonutils.NewString(""))
v.Remove("no_public_ip")
}
if len(opts.EnableNumaAllocate) > 0 {
enableNumaAllocate := false
if opts.EnableNumaAllocate == "True" {
enableNumaAllocate = true
}
v.Set("enable_numa_allocate", jsonutils.NewBool(enableNumaAllocate))
}
v.Remove("id")
return v, nil
}