| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582 |
- // 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 (
- "fmt"
- "time"
- "yunion.io/x/jsonutils"
- "yunion.io/x/pkg/errors"
- "yunion.io/x/onecloud/pkg/apis"
- "yunion.io/x/onecloud/pkg/apis/billing"
- billing_api "yunion.io/x/onecloud/pkg/apis/billing"
- "yunion.io/x/onecloud/pkg/apis/host"
- imageapi "yunion.io/x/onecloud/pkg/apis/image"
- "yunion.io/x/onecloud/pkg/httperrors"
- )
- type ServerListInput struct {
- apis.VirtualResourceListInput
- apis.ExternalizedResourceBaseListInput
- apis.DeletePreventableResourceBaseListInput
- apis.MultiArchResourceBaseListInput
- HostFilterListInput
- NetworkFilterListInput `yunion-ambiguous-prefix:"vpc_"`
- billing.BillingResourceListInput
- GroupFilterListInput
- SecgroupFilterListInput
- //DiskFilterListInput `yunion-ambiguous-prefix:"storage_"`
- ScalingGroupFilterListInput
- // 只列出裸金属主机
- Baremetal *bool `json:"baremetal"`
- // 只列出透传了 GPU 的主机
- Gpu *bool `json:"gpu"`
- // 只列出透传了 USB 的主机
- Usb *bool `json:"usb"`
- // 自定义 PCI 设备类型
- CustomDevType string `json:"custom_dev_type"`
- // 通用虚拟机
- Normal *bool `json:"normal"`
- // 只列出还有备份机的主机
- Backup *bool `json:"bakcup"`
- // 列出指定类型的主机
- // enum: ["normal","gpu","usb","backup"]
- ServerType []string `json:"server_type"`
- // 列出管理安全组为指定安全组的主机
- AdminSecgroup string `json:"admin_security"`
- // 列出Hypervisor为指定值的主机
- // enum: ["kvm","esxi","baremetal","aliyun","azure","aws","huawei","ucloud","zstack","openstack","google","ctyun","cloudpods","ecloud","jdcloud","remotefile"]
- Hypervisor []string `json:"hypervisor"`
- // 列出绑定了弹性IP(EIP)的主机
- WithEip *bool `json:"with_eip"`
- // 列出未绑定弹性IP(EIP)的主机
- WithoutEip *bool `json:"without_eip"`
- // 列出可绑定弹性IP的主机
- EipAssociable *bool `json:"eip_associable"`
- // 列出操作系统为指定值的主机
- // enum: ["linux","windows","vmware"]
- OsType []string `json:"os_type"`
- // 操作系统发行版
- OsDist []string `json:"os_dist"`
- // 对列表结果按照磁盘大小进行排序
- // enum: ["asc","desc"]
- OrderByDisk string `json:"order_by_disk"`
- OrderByIp string `json:"order_by_ip"`
- // 根据ip查找机器
- // swagger:ignore
- IpAddr string `json:"ip_addr" yunion-deprecated-by:"ip_addrs"`
- // 根据多个ip查找机器
- IpAddrs []string `json:"ip_addrs"`
- // 列出可以挂载指定EIP的主机
- UsableServerForEip string `json:"usable_server_for_eip"`
- // 列出可以挂载磁盘的主机
- AttachableServersForDisk string `json:"attachable_servers_for_disk"`
- // Deprecated
- // 列出可以挂载磁盘的主机
- // swagger:ignore
- Disk string `json:"disk" yunion-deprecated-by:"attachable_servers_for_disk"`
- // 按主机资源类型进行排序
- // enum: ["shared","prepaid","dedicated"]
- ResourceType string `json:"resource_type"`
- // 返回该宿主机上的所有虚拟机,包括备份机
- GetAllGuestsOnHost string `json:"get_all_guests_on_host"`
- // 根据宿主机 SN 过滤
- // HostSn string `json:"host_sn"`
- VcpuCount []int `json:"vcpu_count"`
- VmemSize []int `json:"vmem_size"`
- BootOrder []string `json:"boot_order"`
- Vga []string `json:"vga"`
- Vdi []string `json:"vdi"`
- Machine []string `json:"machine"`
- Bios []string `json:"bios"`
- SrcIpCheck *bool `json:"src_ip_check"`
- SrcMacCheck *bool `json:"src_mac_check"`
- InstanceType []string `json:"instance_type"`
- // 根据镜像发行版排序
- OrderByOsDist string `json:"order_by_os_dist"`
- SnapshotpolicyId string `json:"snapshotpolicy_id"`
- // 是否调度到宿主机上
- WithHost *bool `json:"with_host"`
- // 根据是否绑定快照策略过滤
- BindingSnapshotpolicy *bool `json:"binding_snapshotpolicy"`
- // 根据虚机关联的磁盘是否绑定快照策略过滤
- BindingDisksSnapshotpolicy *bool `json:"binding_disks_snapshotpolicy"`
- }
- // 主机快照策略绑定/设置接口入参
- type ServerSnapshotpolicyInput struct {
- // 快照策略ID
- SnapshotpolicyId string `json:"snapshotpolicy_id"`
- }
- func (input *ServerListInput) AfterUnmarshal() {
- if input.Baremetal != nil && *input.Baremetal {
- input.Hypervisor = append(input.Hypervisor, HYPERVISOR_BAREMETAL)
- }
- }
- type ServerRebuildRootInput struct {
- apis.Meta
- // swagger:ignore
- Image string `json:"image" yunion-deprecated-by:"image_id"`
- // 关机且停机不收费情况下不允许重装系统
- // 镜像 id
- // required: true
- ImageId string `json:"image_id"`
- // swagger:ignore
- // Keypair string `json:"keypair" yunion-deprecated-by:"keypair_id"`
- // 秘钥Id
- // KeypairId string `json:"keypair_id"`
- // ResetPassword *bool `json:"reset_password"`
- // Password string `json:"password"`
- AutoStart *bool `json:"auto_start"`
- AllDisks *bool `json:"all_disks"`
- ServerDeployInputBase
- }
- type ServerResumeInput struct {
- apis.Meta
- }
- type ServerDetails struct {
- apis.VirtualResourceDetails
- apis.EncryptedResourceDetails
- SGuest
- HostResourceInfo
- // details
- // 网络概要
- Networks string `json:"networks"`
- // 磁盘概要
- Disks string `json:"disks"`
- // 主机快照策略数量
- SnapshotpolicyCount int `json:"snapshotpolicy_count"`
- // 磁盘快照策略数量
- DisksSnapshotpolicyCount int `json:"disks_snapshotpolicy_count"`
- // 磁盘详情
- DisksInfo []GuestDiskInfo `json:"disks_info"`
- // 虚拟机Ip列表
- VirtualIps string `json:"virtual_ips"`
- // 安全组规则
- SecurityRules string `json:"security_rules"`
- // 操作系统名称
- OsName string `json:"os_name"`
- // 系统管理员可见的安全组规则
- AdminSecurityRules string `json:"admin_security_rules"`
- // common
- IsPrepaidRecycle bool `json:"is_prepaid_recycle"`
- // 主备机信息
- BackupInfo
- // 是否可以回收
- CanRecycle bool `json:"can_recycle"`
- // 自动释放时间
- AutoDeleteAt time.Time `json:"auto_delete_at"`
- // 磁盘数量
- DiskCount int `json:"disk_count"`
- // 是否支持ISO启动
- CdromSupport bool `json:"cdrom_support"`
- //是否支持Floppy启动
- FloppySupport bool `json:"floppy_support"`
- // 磁盘大小
- // example:30720
- DiskSizeMb int64 `json:"disk"`
- // IP地址列表字符串
- // example: 10.165.2.1,172.16.8.1
- IPs string `json:"ips"`
- // VIP
- Vip string `json:"vip"`
- // VIP's eip
- VipEip string `json:"vip_eip"`
- // mac地址信息
- Macs string `json:"macs"`
- // 网卡信息
- Nics []GuestnetworkShortDesc `json:"nics"`
- // 附属IP
- SubIPs []string `json:"sub_ips"`
- // 归属VPC
- Vpc string `json:"vpc"`
- // 归属VPC ID
- VpcId string `json:"vpc_id"`
- // Vpc外网访问模式
- VpcExternalAccessMode string `json:"vpc_external_access_mode"`
- // 关联安全组列表
- Secgroups []apis.StandaloneShortDesc `json:"secgroups"`
- // 关联主安全组
- Secgroup string `json:"secgroup"`
- // 网卡级别安全组
- NetworkSecgroups []GuestnetworkSecgroupShortDesc `json:"network_secgroups"`
- // 浮动IP
- Eip string `json:"eip"`
- // 浮动IP类型
- EipMode string `json:"eip_mode"`
- // 密钥对
- Keypair string `json:"keypair"`
- // 直通设备(GPU)列表
- IsolatedDevices []SIsolatedDevice `json:"isolated_devices"`
- // 是否支持GPU
- IsGpu bool `json:"is_gpu"`
- GpuModel string `json:"gpu_model"`
- GpuCount string `json:"gpu_count"`
- // Cdrom信息
- Cdrom []Cdrom `json:"cdrom"`
- //Floppy信息
- Floppy []Floppy `json:"floppy"`
- // 主机在伸缩组中的状态
- ScalingStatus string `json:"scaling_status"`
- // 伸缩组id
- ScalingGroupId string `json:"scaling_group_id"`
- // 监控上报URL
- MonitorUrl string `json:"monitor_url"`
- // 容器描述信息
- Containers []*PodContainerDesc `json:"containers"`
- }
- type BackupInfo struct {
- // 备份主机所在宿主机名称
- BackupHostName string `json:"backup_host_name"`
- // 备份主机所在宿主机状态
- BackupHostStatus string `json:"backup_host_status"`
- // 主备机同步状态
- BackupGuestSyncStatus string `json:"backup_guest_sync_status"`
- }
- type PodContainerDesc struct {
- Id string `json:"id"`
- Name string `json:"name"`
- Image string `json:"image"`
- Status string `json:"status"`
- }
- type Floppy struct {
- Ordinal int `json:"ordinal"`
- Detail string `json:"detail"`
- }
- type Cdrom struct {
- Ordinal int `json:"ordinal"`
- Detail string `json:"detail"`
- Name string `json:"name"`
- BootIndex int8 `json:"boot_index"`
- }
- type IMetricResource interface {
- GetMetricTags() map[string]string
- }
- func AppendMetricTags(ret map[string]string, res ...IMetricResource) map[string]string {
- if ret == nil {
- ret = map[string]string{}
- }
- for _, r := range res {
- for k, v := range r.GetMetricTags() {
- ret[k] = v
- }
- }
- return ret
- }
- func (self ServerDetails) GetMetricTags() map[string]string {
- ret := map[string]string{
- "id": self.Id,
- "res_type": "guest",
- "is_vm": "true",
- "paltform": self.Hypervisor,
- "host": self.Host,
- "host_id": self.HostId,
- "ips": self.IPs,
- "vm_ip": self.IPs,
- "vm_id": self.Id,
- "vm_name": self.Name,
- "zone": self.Zone,
- "zone_id": self.ZoneId,
- "zone_ext_id": self.ZoneExtId,
- "os_type": self.OsType,
- "status": self.Status,
- "cloudregion": self.Cloudregion,
- "cloudregion_id": self.CloudregionId,
- "region_ext_id": self.RegionExtId,
- "tenant": self.Project,
- "tenant_id": self.ProjectId,
- "brand": self.Brand,
- "vm_scaling_group_id": self.ScalingGroupId,
- "domain_id": self.DomainId,
- "project_domain": self.ProjectDomain,
- "account": self.Account,
- "account_id": self.AccountId,
- "external_id": self.ExternalId,
- }
- if len(self.HostAccessIp) > 0 {
- ret["host_ip"] = self.HostAccessIp
- }
- return AppendMetricTags(ret, self.MetadataResourceInfo, self.ProjectizedResourceInfo)
- }
- func (self ServerDetails) GetMetricPairs() map[string]string {
- ret := map[string]string{
- "vcpu_count": fmt.Sprintf("%d", self.VcpuCount),
- "vmem_size": fmt.Sprintf("%d", self.VmemSize),
- "disk": fmt.Sprintf("%d", self.DiskSizeMb),
- }
- return ret
- }
- // GuestDiskInfo describe the information of disk on the guest.
- type GuestDiskInfo struct {
- Id string `json:"id"`
- Name string `json:"name"`
- FsFormat string `json:"fs,omitempty"`
- DiskType string `json:"disk_type"`
- Index int8 `json:"index"`
- BootIndex int8 `json:"boot_index"`
- SizeMb int `json:"size"`
- DiskFormat string `json:"disk_format"`
- Driver string `json:"driver"`
- CacheMode string `json:"cache_mode"`
- AioMode string `json:"aio_mode"`
- AutoReset bool `json:"auto_reset"`
- MediumType string `json:"medium_type"`
- StorageType string `json:"storage_type"`
- Iops int `json:"iops"`
- Throughput int `json:"throughput"`
- Bps int `json:"bps"`
- ImageId string `json:"image_id,omitempty"`
- Image string `json:"image,omitemtpy"`
- StorageId string `json:"storage_id"`
- Preallocation string `json:"preallocation"`
- }
- func (self GuestDiskInfo) ShortDesc() string {
- fs := ""
- if len(self.ImageId) > 0 {
- fs = "root"
- } else if len(self.FsFormat) > 0 {
- fs = self.FsFormat
- } else {
- fs = "none"
- }
- return fmt.Sprintf("disk%d:%dM/%s/%s/%s/%s/%s", self.Index, self.SizeMb,
- self.DiskFormat, self.Driver, self.CacheMode, self.AioMode, fs)
- }
- type GuestJointResourceDetails struct {
- apis.VirtualJointResourceBaseDetails
- // 云主机名称
- Guest string `json:"guest"`
- // 云主机名称
- Server string `json:"server"`
- }
- type GuestJointsListInput struct {
- apis.VirtualJointResourceBaseListInput
- ServerFilterListInput
- }
- type GuestResourceInfo struct {
- // 虚拟机名称
- Guest string `json:"guest"`
- // 虚拟机状态
- GuestStatus string `json:"guest_status"`
- // 宿主机ID
- HostId string `json:"host_id"`
- HostResourceInfo
- }
- type ServerResourceInput struct {
- // 主机(ID或Name)
- ServerId string `json:"server_id"`
- // swagger:ignore
- // Deprecated
- // Filter by guest Id
- Server string `json:"server" yunion-deprecated-by:"server_id"`
- // swagger:ignore
- // Deprecated
- // Filter by guest Id
- Guest string `json:"guest" yunion-deprecated-by:"server_id"`
- // swagger:ignore
- // Deprecated
- // Filter by guest Id
- GuestId string `json:"guest_id" yunion-deprecated-by:"server_id"`
- }
- type ServerFilterListInput struct {
- HostFilterListInput
- ServerResourceInput
- // 以主机名称排序
- OrderByServer string `json:"order_by_server"`
- }
- type GuestJointBaseUpdateInput struct {
- apis.VirtualJointResourceBaseUpdateInput
- }
- type GuestPublicipToEipInput struct {
- // 转换完成后是否自动启动
- // default: false
- AutoStart bool `json:"auto_start"`
- }
- type GuestAutoRenewInput struct {
- // 设置自动续费
- // default: false
- // 自动续费分为本地和云上两种模式
- // 若公有云本身支持自动续费功能, 则使用云上设置
- // 若公有云本身不支持自动续费, 则在本地周期(默认三小时)检查快过期虚拟机并进行续费,续费周期根据设置,请避免使用特殊的计费周期,避免续费失败
- AutoRenew bool `json:"auto_renew"`
- // 续费周期
- // example: 1Y, 1M, 1W
- // default: 1M
- // 腾讯云仅支持1M
- // 阿里云支持 1, 2, 3Y, 1, 2, 3, 6, 12M, 1, 2, 3, 4W
- Duration string `json:"duration"`
- }
- type ConvertToKvmInput struct {
- apis.Meta
- // target hypervisor
- TargetHypervisor string `json:"target_hypervisor"`
- // 指定转换的宿主机
- PreferHost string `json:"prefer_host"`
- // dest guest network configs
- Networks []*NetworkConfig `json:"networks"`
- // deploy telegraf after convert
- DeployTelegraf bool `json:"deploy_telegraf"`
- }
- type BatchConvertToKvmCheckInput struct {
- GuestIds []string `json:"guest_ids"`
- }
- type GuestSaveToTemplateInput struct {
- // The name of guest template
- Name string `json:"name"`
- // The generate name of guest template
- GenerateName string `json:"generate_name"`
- }
- type GuestSyncFixNicsInput struct {
- // 需要修正的IP地址列表
- Ip []string `json:"ip"`
- }
- type GuestMigrateInput struct {
- // swagger:ignore
- PreferHost string `json:"prefer_host" yunion-deprecated-by:"prefer_host_id"`
- PreferHostId string `json:"prefer_host_id"`
- AutoStart bool `json:"auto_start"`
- IsRescueMode bool `json:"rescue_mode"`
- }
- type GuestLiveMigrateInput struct {
- // swagger:ignore
- PreferHost string `json:"prefer_host" yunion-deprecated-by:"prefer_host_id"`
- // 指定期望的迁移目标宿主机
- PreferHostId string `json:"prefer_host_id"`
- // 是否跳过CPU检查,默认要做CPU检查
- SkipCpuCheck *bool `json:"skip_cpu_check"`
- // 是否跳过kernel检查
- SkipKernelCheck *bool `json:"skip_kernel_check"`
- // 是否启用 tls
- EnableTLS *bool `json:"enable_tls"`
- // 迁移带宽限制
- MaxBandwidthMb *int64 `json:"max_bandwidth_mb"`
- // 快速完成,内存同步一定周期后调整 downtime
- QuicklyFinish *bool `json:"quickly_finish"`
- KeepDestGuestOnFailed *bool `json:"keep_dest_guest_on_failed"`
- }
- type GuestSetSecgroupInput struct {
- // 安全组Id列表
- // 实例必须处于运行,休眠或者关机状态
- //
- //
- // | 平台 | 最多绑定安全组数量 |
- // |-------------|------------------- |
- // | Azure | 1 |
- // | VMware | 不支持安全组 |
- // | Baremetal | 不支持安全组 |
- // | ZStack | 1 |
- // | 其他 | 5 |
- SecgroupIds []string `json:"secgroup_ids"`
- }
- type GuestSetNetworkSecgroupInput struct {
- // 安全组Id列表
- // 实例必须处于运行,休眠或者关机状态
- SecgroupIds []string `json:"secgroup_ids"`
- // 虚机网卡 index 或者 mac 地址
- NetworkIndex *int `json:"network_index"`
- MacAddr string `json:"mac_addr"`
- }
- type GuestRevokeSecgroupInput struct {
- // 安全组Id列表
- // 实例必须处于运行,休眠或者关机状态
- SecgroupIds []string `json:"secgroup_ids"`
- }
- type GuestRevokeNetworkSecgroupInput struct {
- // 安全组Id列表
- // 实例必须处于运行,休眠或者关机状态
- SecgroupIds []string `json:"secgroup_ids"`
- // 虚机网卡 index 或者 mac 地址
- NetworkIndex *int `json:"network_index"`
- MacAddr string `json:"mac_addr"`
- }
- type GuestAssignSecgroupInput struct {
- // 安全组Id
- // 实例必须处于运行,休眠或者关机状态
- SecgroupId string `json:"secgroup_id"`
- // swagger:ignore
- // Deprecated
- Secgrp string `json:"secgrp" yunion-deprecated-by:"secgroup_id"`
- // swagger:ignore
- // Deprecated
- Secgroup string `json:"secgroup" yunion-deprecated-by:"secgroup_id"`
- }
- type GuestAddSecgroupInput struct {
- // 安全组Id列表
- // 实例必须处于运行,休眠或者关机状态
- //
- //
- // | 平台 | 最多绑定安全组数量 |
- // |-------------|------------------- |
- // | Azure | 1 |
- // | VMware | 不支持安全组 |
- // | Baremetal | 不支持安全组 |
- // | ZStack | 1 |
- // | 其他 | 5 |
- SecgroupIds []string `json:"secgroup_ids"`
- }
- type GuestNetworkAddSecgroupInput struct {
- SecgroupIds []string `json:"secgroup_ids"`
- NetworkIndex *int `json:"network_index"`
- }
- type ServerRemoteUpdateInput struct {
- // 是否覆盖替换所有标签
- ReplaceTags *bool `json:"replace_tags" help:"replace all remote tags"`
- }
- type ServerAssociateEipInput struct {
- // swagger:ignore
- // Deprecated
- Eip string `json:"eip" yunion-deprecated-by:"eip_id"`
- // 弹性公网IP的ID
- EipId string `json:"eip_id"`
- // 弹性IP映射的内网IP地址,可选
- IpAddr string `json:"ip_addr"`
- }
- type ServerCreateEipInput struct {
- // 计费方式,traffic or bandwidth
- ChargeType billing_api.TNetChargeType `json:"charge_type"`
- // Bandwidth
- Bandwidth int64 `json:"bandwidth"`
- // bgp_type
- BgpType string `json:"bgp_type"`
- // auto_dellocate
- AutoDellocate *bool `json:"auto_dellocate"`
- // 弹性IP映射的内网IP地址,可选
- IpAddr string `json:"ip_addr"`
- }
- type ServerDissociateEipInput struct {
- // 是否自动释放
- AudoDelete *bool `json:"auto_delete"`
- }
- type ServerResetInput struct {
- InstanceSnapshot string `json:"instance_snapshot"`
- // 自动启动
- AutoStart *bool `json:"auto_start"`
- // 恢复内存
- WithMemory bool `json:"with_memory"`
- }
- type ServerStopInput struct {
- // 是否强制关机
- IsForce bool `json:"is_force"`
- // 关机等待时间,如果是强制关机,则等待时间为0,如果不设置,默认为30秒
- TimeoutSecs int `json:"timeout_secs"`
- // 是否关机停止计费, 若平台不支持停止计费,此参数无作用
- // 若包年包月机器关机设置此参数,则先转换计费模式到按量计费,再关机不收费
- // 目前仅阿里云,腾讯云此参数生效
- StopCharging bool `json:"stop_charging"`
- }
- type ServerSaveImageInput struct {
- // 镜像名称
- Name string `json:"name"`
- GenerateName string `json:"generate_name"`
- Notes string `json:"notes"`
- IsPublic *bool `json:"is_public"`
- // 镜像格式
- Format string `json:"format"`
- // 保存镜像后是否自动启动,若实例状态为运行中,则会先关闭实例
- // 公有云若支持开机保存镜像,此参数则不生效
- // default: false
- AutoStart bool `json:"auto_start"`
- // swagger:ignore
- Restart bool `json:"restart"`
- // swagger:ignore
- OsType string `json:"os_type"`
- // swagger:ignore
- OsArch string `json:"os_arch"`
- // swagger:ignore
- ImageId string `json:"image_id"`
- }
- type ServerSaveGuestImageInput struct {
- imageapi.GuestImageCreateInputBase
- // 保存镜像后是否自动启动
- AutoStart *bool `json:"auto_start"`
- }
- type ServerDeleteInput struct {
- // 是否越过回收站直接删除
- // default: false
- OverridePendingDelete bool `json:"override_pending_delete"`
- // 是否仅删除本地资源
- // default: false
- Purge bool `json:"purge"`
- // 是否删除快照
- // default: false
- DeleteSnapshots bool `json:"delete_snapshots"`
- // 是否删除关联的EIP
- // default: false
- DeleteEip bool `json:"delete_eip"`
- // 是否删除关联的数据盘
- // default: false
- DeleteDisks bool `json:"delete_disks"`
- }
- type ServerDetachnetworkInput struct {
- // 是否保留IP地址(ip地址会进入到预留ip)
- Reserve bool `json:"reserve"`
- // 通过IP子网地址, 优先级最高
- NetId string `json:"net_id"`
- // 通过IP解绑网卡, 优先级高于mac
- IpAddr string `json:"ip_addr"`
- // 通过IP6 addr解绑网卡, 优先级高于mac
- Ip6Addr string `json:"ip6_addr"`
- // 通过Mac解绑网卡, 优先级低于ip_addr
- Mac string `json:"mac"`
- // 解绑后不立即同步配置
- DisableSyncConfig *bool `json:"disable_sync_config"`
- // 强制卸载,无论虚拟机的状态,仅更新数据库
- Force *bool `json:"force"`
- }
- func (input ServerDetachnetworkInput) IsForce() bool {
- return input.Force != nil && *input.Force
- }
- type ServerSetNetworkNumQueuesInput struct {
- // 虚机网卡 mac addr
- MacAddr string `json:"mac_addr"`
- // 网卡队列数
- NumQueues int `json:"num_queues"`
- }
- type ServerMigrateForecastInput struct {
- PreferHostId string `json:"prefer_host_id"`
- // Deprecated
- // swagger:ignore
- PreferHost string `json:"prefer_host" yunion-deprecated-by:"prefer_host_id"`
- LiveMigrate bool `json:"live_migrate"`
- SkipCpuCheck bool `json:"skip_cpu_check"`
- SkipKernelCheck bool `json:"skip_kernel_check"`
- ConvertToKvm bool `json:"convert_to_kvm"`
- IsRescueMode bool `json:"is_rescue_mode"`
- ResetCpuNumaPin bool `json:"reset_cpu_numa_pin"`
- }
- type ServerResizeDiskInput struct {
- // swagger:ignore
- Disk string `json:"disk" yunion-deprecated-by:"disk_id"`
- // 磁盘Id
- DiskId string `json:"disk_id"`
- DiskResizeInput
- }
- type ServerMigrateNetworkInput struct {
- // Source network Id
- Src string `json:"src"`
- // Destination network Id
- Dest string `json:"dest"`
- }
- type ServerDeployInput struct {
- apis.Meta
- ServerDeployInputBase
- // 部署完成后是否自动启动
- // 若虚拟机重置密码后需要重启生效,并且当前虚拟机状态为running, 此参数默认为true
- // 若虚拟机状态为ready, 指定此参数后,部署完成后,虚拟机会自动启动
- AutoStart bool `json:"auto_start"`
- }
- type ServerDeployInputBase struct {
- // swagger:ignore
- Keypair string `json:"keypair" yunion-deprecated-by:"keypair_id"`
- // 秘钥Id
- KeypairId string `json:"keypair_id"`
- // 清理指定公钥
- // 若指定的秘钥Id和虚拟机的秘钥Id不相同, 则清理旧的公钥
- DeletePublicKey string `json:"delete_public_key"`
- // 解绑当前虚拟机秘钥, 并清理公钥信息
- DeleteKeypair bool `json:"__delete_keypair__"`
- // 生成随机密码, 优先级低于password
- ResetPassword bool `json:"reset_password"`
- // 重置指定密码
- Password string `json:"password"`
- // 用户自定义启动脚本
- // 支持 #cloud-config yaml 格式及shell脚本
- // 支持特殊user data平台: Aliyun, Qcloud, Azure, Apsara, Ucloud
- // required: false
- UserData string `json:"user_data"`
- // swagger:ignore
- LoginAccount string `json:"login_account"`
- // swagger:ignore
- Restart bool `json:"restart"`
- // swagger:ignore
- DeployConfigs []*DeployConfig `json:"deploy_configs"`
- // swagger:ignore
- DeployTelegraf bool `json:"deploy_telegraf"`
- }
- type ServerUserDataInput struct {
- UserData string `json:"user_data"`
- }
- type ServerAttachDiskInput struct {
- DiskId string `json:"disk_id"`
- BootIndex *int8 `json:"boot_index"`
- }
- type ServerDetachDiskInput struct {
- // 磁盘Id,若磁盘未挂载在虚拟机上,不返回错误
- DiskId string `json:"disk_id"`
- // 是否保留磁盘
- // default: false
- KeepDisk bool `json:"keep_disk"`
- }
- type ServerChangeConfigInput struct {
- // 关机且停机不收费情况下不允许调整配置
- // 实例类型, 优先级高于vcpu_count和vmem_size
- InstanceType string `json:"instance_type"`
- // swagger:ignore
- Sku string `json:"sku" yunion-deprecated-by:"instance_type"`
- // swagger:ignore
- Flavor string `json:"flavor" yunion-deprecated-by:"instance_type"`
- // cpu卡槽数
- // vmware 若开机调整配置时,需要保证调整前及调整后 vcpu_count / cpu_sockets 保持不变
- // vmware开机调整配置同样需要注意 https://kb.vmware.com/s/article/2008405
- CpuSockets *int `json:"cpu_sockets"`
- // cpu大小
- VcpuCount *int `json:"vcpu_count"`
- // 任务分配CPU大小
- ExtraCpuCount *int `json:"extra_cpu_count"`
- // 内存大小, 1024M, 1G
- VmemSize string `json:"vmem_size"`
- // 调整完配置后是否自动启动
- AutoStart bool `json:"auto_start"`
- // disks start from index 1, i.e. cannot change size of system disk(1st disk)
- Disks []DiskConfig `json:"disks"`
- SetTrafficLimits []ServerNicTrafficLimit `json:"set_traffic_limits"`
- ResetTrafficLimits []ServerNicTrafficLimit `json:"reset_traffic_limits"`
- }
- type ServerUpdateInput struct {
- apis.VirtualResourceBaseUpdateInput
- HostnameInput
- // 删除保护开关
- DisableDelete *bool `json:"disable_delete"`
- // 启动顺序
- BootOrder *string `json:"boot_order"`
- // 关机执行操作
- ShutdownBehavior *string `json:"shutdown_behavior"`
- Vga *string `json:"vga"`
- Vdi *string `json:"vdi"`
- Machine *string `json:"machine"`
- Bios *string `json:"bios"`
- SrcIpCheck *bool `json:"src_ip_check"`
- SrcMacCheck *bool `json:"src_mac_check"`
- SshPort int `json:"ssh_port"`
- // swagger:ignore
- ProgressMbps float32 `json:"progress_mbps"`
- }
- type GuestJsonDesc struct {
- Name string `json:"name"`
- Hostname string `json:"hostname"`
- Description string `json:"description"`
- UUID string `json:"uuid"`
- Mem int `json:"mem"`
- CpuSockets int `json:"cpu_sockets"`
- Cpu int `json:"cpu"`
- Vga string `json:"vga"`
- Vdi string `json:"vdi"`
- Machine string `json:"machine"`
- Bios string `json:"bios"`
- BootOrder string `json:"boot_order"`
- SrcIpCheck bool `json:"src_ip_check"`
- SrcMacCheck bool `json:"src_mac_check"`
- IsMaster *bool `json:"is_master"`
- IsSlave *bool `json:"is_slave"`
- IsVolatileHost bool `json:"is_volatile_host"`
- HostId string `json:"host_id"`
- // 宿主机管理IP
- HostAccessIp string `json:"host_access_ip"`
- // 宿主机公网IP(如果有)
- HostEIP string `json:"host_eip"`
- IsolatedDevices []*IsolatedDeviceJsonDesc `json:"isolated_devices"`
- CpuNumaPin []SCpuNumaPin `json:"cpu_numa_pin"`
- Domain string `json:"domain"`
- Nics []*GuestnetworkJsonDesc `json:"nics"`
- Disks []*GuestdiskJsonDesc `json:"disks"`
- Cdrom *GuestcdromJsonDesc `json:"cdrom"`
- Cdroms []*GuestcdromJsonDesc `json:"cdroms"`
- Floppys []*GuestfloppyJsonDesc `json:"floppys"`
- Tenant string `json:"tenant"`
- TenantId string `json:"tenant_id"`
- DomainId string `json:"domain_id"`
- ProjectDomain string `json:"project_domain"`
- Keypair string `json:"keypair"`
- Pubkey string `json:"pubkey"`
- NetworkRoles []string `json:"network_roles"`
- Secgroups []*SecgroupJsonDesc `json:"secgroups"`
- SecurityRules string `json:"security_rules"`
- AdminSecurityRules string `json:"admin_security_rules"`
- NicSecgroups []*GuestnetworkSecgroupDesc `json:"nic_secgroups"`
- ExtraOptions jsonutils.JSONObject `json:"extra_options"`
- Kvm string `json:"kvm"`
- Zone string `json:"zone"`
- ZoneId string `json:"zone_id"`
- OsName string `json:"os_name"`
- Metadata map[string]string `json:"metadata"`
- UserData string `json:"user_data"`
- PendingDeleted bool `json:"pending_deleted"`
- ScalingGroupId string `json:"scaling_group_id"`
- // baremetal
- DiskConfig jsonutils.JSONObject `json:"disk_config"`
- NicsStandby []*GuestnetworkJsonDesc `json:"nics_standby"`
- // esxi
- InstanceSnapshotInfo struct {
- InstanceSnapshotId string `json:"instance_snapshot_id"`
- InstanceId string `json:"instance_id"`
- } `json:"instance_snapshot_info"`
- EnableEsxiSwap bool `json:"enable_esxi_swap"`
- EncryptKeyId string `json:"encrypt_key_id,omitempty"`
- IsDaemon bool `json:"is_daemon"`
- LightMode bool `json:"light_mode"`
- Hypervisor string `json:"hypervisor"`
- Containers []*host.ContainerDesc `json:"containers"`
- }
- type SVCpuPin struct {
- Vcpu int `json:"vcpu"`
- Pcpu int `json:"pcpu"`
- }
- type SCpuNumaPin struct {
- SizeMB *int `json:"size_mb"`
- NodeId int `json:"node_id"`
- VcpuPin []SVCpuPin `json:"vcpu_pin"`
- ExtraCpuCount int `json:"extra_cpu_count"`
- }
- type ServerSetBootIndexInput struct {
- // key index, value boot_index
- Disks map[string]int8 `json:"disks"`
- // key ordinal, value boot_index
- Cdroms map[string]int8 `json:"cdroms"`
- }
- type ServerSetDiskIoThrottleInput struct {
- // key disk id, value bps
- Bps map[string]int `json:"bps"`
- // key disk id, value iops
- IOPS map[string]int `json:"iops"`
- }
- type ServerChangeStorageInput struct {
- TargetStorageId string `json:"target_storage_id"`
- KeepOriginDisk bool `json:"keep_origin_disk"`
- }
- type ServerChangeStorageInternalInput struct {
- ServerChangeStorageInput
- Disks []string `json:"disks"`
- GuestRunning bool `json:"guest_running"`
- DiskCount int `json:"disk_count"`
- }
- type ServerChangeDiskStorageInput struct {
- DiskId string `json:"disk_id"`
- TargetStorageId string `json:"target_storage_id"`
- KeepOriginDisk bool `json:"keep_origin_disk"`
- }
- type ServerChangeDiskStorageInternalInput struct {
- ServerChangeDiskStorageInput
- StorageId string `json:"storage_id"`
- TargetDiskId string `json:"target_disk_id"`
- DiskFormat string `json:"disk_format"`
- GuestRunning bool `json:"guest_running"`
- TargetDiskDesc *GuestdiskJsonDesc `json:"target_disk_desc"`
- // clone progress
- CompletedDiskCount int `json:"completed_disk_count"`
- CloneDiskCount int `json:"disk_count"`
- }
- type ServerCopyDiskToStorageInput struct {
- KeepOriginDisk bool `json:"keep_origin_disk"`
- GuestRunning bool `json:"guest_running"`
- CompletedDiskCount int `json:"completed_disk_count"`
- CloneDiskCount int `json:"disk_count"`
- }
- type ServerSetExtraOptionInput struct {
- Key string `json:"key"`
- Value string `json:"value"`
- }
- func (o ServerSetExtraOptionInput) Validate() error {
- if len(o.Key) == 0 {
- return errors.Wrap(httperrors.ErrBadRequest, "empty key")
- }
- if len(o.Value) == 0 {
- return errors.Wrap(httperrors.ErrBadRequest, "empty value")
- }
- return nil
- }
- type ServerDelExtraOptionInput struct {
- Key string `json:"key"`
- Value string `json:"value"`
- }
- func (o ServerDelExtraOptionInput) Validate() error {
- if len(o.Key) == 0 {
- return errors.Wrap(httperrors.ErrBadRequest, "empty key")
- }
- return nil
- }
- type ServerSnapshotAndCloneInput struct {
- ServerCreateSnapshotParams
- // number of cloned servers
- // 数量
- Count *int `json:"count"`
- // Whether auto start the cloned server
- // 是否自动启动
- AutoStart *bool `json:"auto_start"`
- // Whether delete instance snapshot automatically
- // 是否自动删除主机快照
- AutoDeleteInstanceSnapshot *bool `json:"auto_delete_instance_snapshot"`
- // ignore
- InstanceSnapshotId string `json:"instance_snapshot_id"`
- // Perfer clone destination host
- // 指定期望的迁移目标宿主机
- PreferHostId string `json:"prefer_host_id"`
- }
- type ServerInstanceSnapshot struct {
- ServerCreateSnapshotParams
- WithMemory bool `json:"with_memory"`
- }
- type ServerCreateSnapshotParams struct {
- Name string `json:"name"`
- GenerateName string `json:"generate_name"`
- }
- type ServerCPUSetInput struct {
- // Specifies the CPUs that tasks in this cgroup are permitted to access.
- CPUS []int `json:"cpus"`
- }
- type ServerCPUSetResp struct{}
- type ServerCPUSetRemoveInput struct{}
- type ServerCPUSetRemoveResp struct {
- Done bool `json:"done"`
- Error string `json:"error"`
- }
- type ServerGetCPUSetCoresInput struct{}
- type ServerGetCPUSetCoresResp struct {
- PinnedCores []int `json:"pinned_cores"`
- HostCores []int `json:"host_cores"`
- HostUsedCores []int `json:"host_used_cores"`
- }
- type ServerGetNumaInfoInput struct{}
- type ServerGetNumaInfoResp struct {
- CpuNumaPin jsonutils.JSONObject `json:"cpu_numa_pin"`
- IsolatedDevicesNumaNode []int8 `json:"isolated_devices_numa_node"`
- }
- type ServerGetHardwareInfoInput struct{}
- type ServerHardwareInfoMotherboard struct {
- Manufacturer string `json:"manufacturer"`
- Model string `json:"model"`
- OemName string `json:"oem_name"`
- SN string `json:"sn"`
- Version string `json:"version"`
- }
- type ServerHardwareInfoCPU struct {
- Model string `json:"model"`
- Count int `json:"count"`
- }
- type ServerHardwareInfoMemory struct {
- SizeMB int `json:"size_mb"`
- }
- type ServerHardwareInfoDisk struct {
- Id string `json:"id"`
- StorageId string `json:"storage_id"`
- Model string `json:"model"`
- SizeMB int `json:"size_mb"`
- // Disk's backend bandwidth. The unit is MB/s
- Bandwidth float64 `json:"bandwidth"`
- }
- type ServerHardwareInfoGPUPCIEInfo struct {
- Throughput string `json:"pcie_throughput"`
- LaneWidth int `json:"pcie_lane_width"`
- }
- type ServerHardwareInfoGPU struct {
- *IsolatedDeviceModelHardwareInfo
- // isolate device id
- Id string `json:"id"`
- // GPU model name
- Model string `json:"model"`
- // PCIE information
- PCIEInfo *IsolatedDevicePCIEInfo `json:"pcie_info"`
- }
- type ServerGetHardwareInfoResp struct {
- Motherboard *ServerHardwareInfoMotherboard `json:"motherboard"`
- CPU *ServerHardwareInfoCPU `json:"cpu"`
- Memory *ServerHardwareInfoMemory `json:"memory"`
- Disks []*ServerHardwareInfoDisk `json:"disk"`
- GPUs []*ServerHardwareInfoGPU `json:"gpu"`
- }
- type ServerMonitorInput struct {
- COMMAND string `json:"command"`
- QMP bool `json:"qmp"`
- }
- type ServerQemuInfo struct {
- Version string `json:"version"`
- Cmdline string `json:"cmdline"`
- }
- type IPAddress struct {
- IPAddress string `json:"ip-address"`
- IPAddressType string `json:"ip-address-type"`
- Prefix int `json:"prefix"`
- }
- type IfnameDetail struct {
- HardwareAddress string `json:"hardware-address"`
- IPAddresses []IPAddress `json:"ip-addresses"`
- Name string `json:"name"`
- Statistics struct {
- RxBytes int `json:"rx-bytes"`
- RxDropped int `json:"rx-dropped"`
- RxErrs int `json:"rx-errs"`
- RxPackets int `json:"rx-packets"`
- TxBytes int `json:"tx-bytes"`
- TxDropped int `json:"tx-dropped"`
- TxErrs int `json:"tx-errs"`
- TxPackets int `json:"tx-packets"`
- } `json:"statistics"`
- }
- type ServerQgaSetPasswordInput struct {
- Username string `json:"username"`
- Password string `json:"password"`
- }
- type ServerQgaGuestInfoTaskInput struct {
- }
- type ServerQgaSetNetworkInput struct {
- ServerQgaTimeoutInput
- Device string `json:"device"`
- Ipmask string `json:"ipmask"`
- Gateway string `json:"gateway"`
- Ip6mask string `json:"ip6mask"`
- Gateway6 string `json:"gateway6"`
- }
- type ServerQgaGetNetworkInput struct {
- }
- type ServerQgaTimeoutInput struct {
- // qga execute timeout second
- Timeout int `json:"timeout"`
- }
- type ServerQgaCommandInput struct {
- ServerQgaTimeoutInput
- Command string `json:"command"`
- }
- type ServerSetPasswordInput struct {
- Username string `json:"username"`
- Password string `json:"password"`
- // deploy params
- ResetPassword bool `json:"reset_password"`
- AutoStart bool `json:"auto_start"`
- }
- type ServerInsertVfdInput struct {
- FloppyOrdinal int64 `json:"floppy_ordinal"`
- ImageId string `json:"image_id"`
- }
- type ServerEjectVfdInput struct {
- FloppyOrdinal int64 `json:"floppy_ordinal"`
- ImageId string `json:"image_id"`
- }
- type ServerSetLiveMigrateParamsInput struct {
- MaxBandwidthMB *int64
- DowntimeLimitMS *int64
- }
- type ServerNicTrafficLimit struct {
- Mac string `json:"mac"`
- RxTrafficLimit *int64 `json:"rx_traffic_limit"`
- TxTrafficLimit *int64 `json:"tx_traffic_limit"`
- BillingType billing_api.TBillingType `json:"billing_type"`
- ChargeType billing_api.TNetChargeType `json:"charge_type"`
- }
- func (input ServerNicTrafficLimit) Validate(billingType billing_api.TBillingType, chargeType billing_api.TNetChargeType, txLimit, rxLimit int64) (ServerNicTrafficLimit, bool, error) {
- var billingChange bool
- if len(input.BillingType) > 0 && input.BillingType != billingType {
- billingChange = true
- billingType = input.BillingType
- }
- if len(input.ChargeType) > 0 && input.ChargeType != chargeType {
- billingChange = true
- chargeType = input.ChargeType
- }
- if billingChange {
- if len(input.BillingType) == 0 {
- input.BillingType = billingType
- }
- if len(input.ChargeType) == 0 {
- input.ChargeType = chargeType
- }
- }
- if billingType == billing_api.BILLING_TYPE_POSTPAID && chargeType == billing_api.NET_CHARGE_TYPE_BY_TRAFFIC {
- if txLimit > 0 {
- txLimit = 0
- input.TxTrafficLimit = &txLimit
- } else {
- input.TxTrafficLimit = nil
- }
- if rxLimit > 0 {
- rxLimit = 0
- input.RxTrafficLimit = &rxLimit
- } else {
- input.RxTrafficLimit = nil
- }
- } else if billingType == billing_api.BILLING_TYPE_POSTPAID && chargeType == billing_api.NET_CHARGE_TYPE_BY_BANDWIDTH {
- return input, billingChange, errors.Wrapf(httperrors.ErrNotImplemented, "billing type %s and charge type %s are not supported", input.BillingType, input.ChargeType)
- } else if billingType == billing_api.BILLING_TYPE_PREPAID && chargeType == billing_api.NET_CHARGE_TYPE_BY_TRAFFIC {
- if txLimit == 0 && input.TxTrafficLimit == nil {
- return input, billingChange, errors.Wrapf(httperrors.ErrBadRequest, "tx traffic limit is required")
- }
- if rxLimit == 0 && input.RxTrafficLimit == nil {
- return input, billingChange, errors.Wrapf(httperrors.ErrBadRequest, "rx traffic limit is required")
- }
- if input.TxTrafficLimit != nil && *input.TxTrafficLimit <= 0 {
- return input, billingChange, errors.Wrapf(httperrors.ErrBadRequest, "tx traffic limit must be greater than 0")
- }
- if input.RxTrafficLimit != nil && *input.RxTrafficLimit <= 0 {
- return input, billingChange, errors.Wrapf(httperrors.ErrBadRequest, "rx traffic limit must be greater than 0")
- }
- } else if billingType == billing_api.BILLING_TYPE_PREPAID && chargeType == billing_api.NET_CHARGE_TYPE_BY_BANDWIDTH {
- if txLimit > 0 {
- txLimit = 0
- input.TxTrafficLimit = &txLimit
- } else {
- input.TxTrafficLimit = nil
- }
- if rxLimit > 0 {
- rxLimit = 0
- input.RxTrafficLimit = &rxLimit
- } else {
- input.RxTrafficLimit = nil
- }
- } else {
- return input, billingChange, errors.Wrapf(httperrors.ErrBadRequest, "invalid billing type %s and charge type %s", input.BillingType, input.ChargeType)
- }
- return input, billingChange, nil
- }
- type GuestAddSubIpsInfo struct {
- Count int `json:"count"`
- SubIps []string `json:"sub_ips"`
- Reserved bool `json:"reserved"`
- AllocDir IPAllocationDirection `json:"alloc_dir"`
- }
- type GuestAddSubIpsInput struct {
- ServerNetworkInfo
- GuestAddSubIpsInfo
- }
- type GuestUpdateSubIpsInput struct {
- GuestAddSubIpsInput
- RemoveSubIps []string `json:"remove_sub_ips"`
- }
- type NetworkAddrConf struct {
- Id string `json:"id"`
- Type string `json:"type"`
- IpAddr string `json:"ip_addr"`
- Masklen int `json:"masklen"`
- Gateway string `json:"gateway"`
- }
- type ServerLoginInfoInput struct {
- PrivateKey string `json:"private_key"`
- }
- type ServerLoginInfoOutput struct {
- Username string `json:"username"`
- Updated string `json:"updated"`
- LoginKey string `json:"login_key"`
- Keypair string `json:"keypair"`
- Password string `json:"password"`
- }
- type GuestPerformStartInput struct {
- // 指定启动虚拟机的Qemu版本,可选值:2.12.1, 4.2.0
- // 仅适用于KVM虚拟机
- QemuVersion string `json:"qemu_version"`
- // 按量机器自动转换为包年包月
- AutoPrepaid bool `json:"auto_prepaid"`
- }
- type ServerSetOSInfoInput struct {
- // OS type, e.g.: Linux, Windows
- Type string `json:"type" help:"OS type, e.g.: Linux, Windows"`
- // OS distribution, e.g.: CentOS, Ubuntu, Windows Server 2016 Datacenter
- Distribution string `json:"distribution" help:"OS distribution, e.g.: CentOS, Ubuntu, Windows Server 2016 Datacenter"`
- // OS version, e.g: 7.9, 22.04, 6.3
- Version string `json:"version" help:"OS version, e.g.: 7.9, 22.04, 6.3"`
- Arch string `json:"arch" help:"OS arch, e.g.: x86_64, aarch64"`
- }
- type ServerNetworkInfo struct {
- Index int `json:"index"`
- Mac string `json:"mac"`
- IpAddr string `json:"ip_addr"`
- Ip6Addr string `json:"ip6_addr"`
- }
- type ServerChangeIpaddrInput struct {
- ServerNetworkInfo
- NetDesc string `json:"net_desc"`
- NetConf *NetworkConfig `json:"net_conf"`
- Reserve *bool `json:"reserve"`
- RestartNetwork *bool `json:"restart_network"`
- }
- type ServerChangeBandwidthInput struct {
- ServerNetworkInfo
- Bandwidth int `json:"bandwidth"`
- NoSync *bool `json:"no_sync"`
- }
- type ServerChangeConfigSpecs struct {
- CpuSockets int `json:"cpu_sockets"`
- VcpuCount int `json:"vcpu_count"`
- ExtraCpuCount int `json:"extra_cpu_count"`
- VmemSize int `json:"vmem_size"`
- InstanceType string `json:"instance_type"`
- }
- type DiskResizeSpec struct {
- DiskId string `json:"disk_id"`
- SizeMb int `json:"size_mb"`
- OldSizeMb int `json:"old_size_mb"`
- }
- type ServerChangeConfigSettings struct {
- Old ServerChangeConfigSpecs `json:"old"`
- ServerChangeConfigSpecs
- InstanceTypeFamily string `json:"instance_type_family"`
- // disks to resize
- Resize []*DiskResizeSpec `json:"resize"`
- // disks to create
- Create []*DiskConfig `json:"create"`
- AutoStart bool `json:"auto_start"`
- GuestOnline bool `json:"guest_online"`
- // 设置虚拟网卡的流量上限
- SetTrafficLimits []ServerNicTrafficLimit `json:"set_traffic_limits"`
- // 重置虚拟网卡的流量上限,并且将网卡的流量归零
- ResetTrafficLimits []ServerNicTrafficLimit `json:"reset_traffic_limits"`
- SchedDesc jsonutils.JSONObject `json:"sched_desc"`
- }
- func (conf ServerChangeConfigSettings) CpuChanged() bool {
- return conf.VcpuCount != conf.Old.VcpuCount
- }
- func (conf ServerChangeConfigSettings) AddedCpu() int {
- addCpu := conf.VcpuCount - conf.Old.VcpuCount
- if addCpu < 0 {
- addCpu = 0
- }
- return addCpu
- }
- func (conf ServerChangeConfigSettings) ExtraCpuChanged() bool {
- return conf.ExtraCpuCount != conf.Old.ExtraCpuCount
- }
- func (conf ServerChangeConfigSettings) AddedExtraCpu() int {
- addCpu := conf.ExtraCpuCount - conf.Old.ExtraCpuCount
- if addCpu < 0 {
- addCpu = 0
- }
- return addCpu
- }
- func (conf ServerChangeConfigSettings) MemChanged() bool {
- return conf.VmemSize != conf.Old.VmemSize
- }
- func (conf ServerChangeConfigSettings) InstanceTypeChanged() bool {
- return len(conf.InstanceType) > 0 && conf.InstanceType != conf.Old.InstanceType
- }
- func (conf ServerChangeConfigSettings) AddedMem() int {
- addMem := conf.VmemSize - conf.Old.VmemSize
- if addMem < 0 {
- addMem = 0
- }
- return addMem
- }
- func (conf ServerChangeConfigSettings) AddedDisk() int {
- var size int
- for _, resize := range conf.Resize {
- size += resize.SizeMb - resize.OldSizeMb
- }
- for _, create := range conf.Create {
- size += create.SizeMb
- }
- return size
- }
- type ServerReleasedIsolatedDevice struct {
- DevType string `json:"dev_type"`
- Model string `json:"model"`
- }
- type ServerChangeBillingTypeInput struct {
- // 仅在虚拟机开机或关机状态下调用
- // enmu: [postpaid, prepaid]
- // required: true
- BillingType billing_api.TBillingType `json:"billing_type"`
- }
- type ServerPerformStatusInput struct {
- apis.PerformStatusInput
- Containers map[string]*ContainerPerformStatusInput `json:"containers"`
- }
- type ServerModificationType struct {
- Name string `json:"name"`
- }
- type ServerModificationTypesOutput struct {
- ModificationTypes []ServerModificationType `json:"modification_types"`
- }
|