| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427 |
- // 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 (
- "reflect"
- "time"
- "yunion.io/x/cloudmux/pkg/multicloud/esxi/vcenter"
- "yunion.io/x/jsonutils"
- "yunion.io/x/pkg/gotypes"
- "yunion.io/x/pkg/util/fileutils"
- "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/httperrors"
- )
- func init() {
- gotypes.RegisterSerializable(reflect.TypeOf(new(DiskFsFeatures)), func() gotypes.ISerializable {
- return new(DiskFsFeatures)
- })
- }
- type DiskCreateInput struct {
- apis.VirtualResourceCreateInput
- apis.EncryptedResourceCreateInput
- *DiskConfig
- // 调度使用指定的云账号
- PreferManager string `json:"prefer_manager_id"`
- // 此参数仅适用于未指定storage时进行调度到指定区域创建磁盘
- // required: false
- PreferRegion string `json:"prefer_region_id"`
- // 此参数仅适用于未指定storage时进行调度到指定可用区区创建磁盘
- // required: false
- PreferZone string `json:"prefer_zone_id"`
- // swagger:ignore
- PreferWire string `json:"prefer_wire_id"`
- // 此参数仅适用于未指定storage时进行调度到指定可用区区创建磁盘
- // required: false
- PreferHost string `json:"prefer_host_id"`
- // 此参数仅适用于未指定storage时进行调度到指定平台创建磁盘
- // default: kvm
- // enum: ["kvm", "openstack", "esxi", "aliyun", "aws", "qcloud", "azure", "huawei", "ucloud", "zstack", "google", "ctyun"]
- Hypervisor string `json:"hypervisor"`
- }
- // ToServerCreateInput used by disk schedule
- func (req *DiskCreateInput) ToServerCreateInput() *ServerCreateInput {
- input := ServerCreateInput{
- ServerConfigs: &ServerConfigs{
- PreferManager: req.PreferManager,
- PreferRegion: req.PreferRegion,
- PreferZone: req.PreferZone,
- PreferWire: req.PreferWire,
- PreferHost: req.PreferHost,
- Hypervisor: req.Hypervisor,
- Disks: []*DiskConfig{req.DiskConfig},
- // Project: req.Project,
- // Domain: req.Domain,
- },
- }
- input.Name = req.Name
- input.ProjectId = req.ProjectId
- input.ProjectDomainId = req.ProjectDomainId
- return &input
- }
- func (req *ServerCreateInput) ToDiskCreateInput() *DiskCreateInput {
- input := DiskCreateInput{
- DiskConfig: req.Disks[0],
- PreferRegion: req.PreferRegion,
- PreferHost: req.PreferHost,
- PreferZone: req.PreferZone,
- PreferWire: req.PreferWire,
- Hypervisor: req.Hypervisor,
- }
- input.Name = req.Name
- input.ProjectId = req.ProjectId
- input.ProjectDomainId = req.ProjectDomainId
- return &input
- }
- type SnapshotPolicyResourceInput struct {
- // filter disk by snapshotpolicy
- SnapshotpolicyId string `json:"snapshotpolicy_id"`
- // swagger:ignore
- // Deprecated
- // filter disk by snapshotpolicy_id
- Snapshotpolicy string `json:"snapshotpolicy" yunion-deprecated-by:"snapshotpolicy_id"`
- }
- type SnapshotPolicyFilterListInput struct {
- SnapshotPolicyResourceInput
- // 以快照策略名称排序
- OrderBySnapshotpolicy string `json:"order_by_snapshotpolicy"`
- }
- type DiskListInput struct {
- apis.VirtualResourceListInput
- apis.ExternalizedResourceBaseListInput
- apis.MultiArchResourceBaseListInput
- apis.AutoDeleteResourceBaseListInput
- billing.BillingResourceListInput
- StorageFilterListInput
- SnapshotPolicyFilterListInput
- // 虚拟机(ID或Name)列表
- ServerId []string `json:"server_id"`
- // swagger:ignore
- Server []string `json:"server" yunion-deprecated-by:"server_id"`
- // filter disk by whether it is being used
- Unused *bool `json:"unused"`
- // swagger:ignore
- // Deprecated
- // filter by disk type
- Type string `json:"type" yunion-deprecated-by:"disk_type"`
- // 过滤指定disk_type的磁盘列表,可能的值为:sys, data, swap. volume
- //
- // | disk_type值 | 说明 |
- // |-------------|----------|
- // | sys | 虚拟机系统盘 |
- // | data | 虚拟机数据盘 |
- // | swap | 虚拟机内存交换盘 |
- // | volume | 容器volumn盘 |
- //
- DiskType string `json:"disk_type"`
- DiskFormat string `json:"disk_format"`
- DiskSize int `json:"disk_size"`
- FsFormat string `json:"fs_format"`
- OrderByServer string `json:"order_by_server" choices:"asc|desc"`
- OrderByGuestCount string `json:"order_by_guest_count" choices:"asc|desc"`
- // 镜像
- ImageId string `json:"image_id"`
- // swagger:ignore
- // Deprecated
- Template string `json:"template" yunion-deprecated-by:"image_id"`
- // swagger:ignore
- // Deprecated
- TemplateId string `json:"template_id" yunion-deprecated-by:"image_id"`
- // 快照
- SnapshotId string `json:"snapshot_id"`
- // swagger:ignore
- // Deprecated
- Snapshot string `json:"snapshot" yunion-deprecated-by:"snapshot_id"`
- // 根据虚拟机状态过滤
- GuestStatus string `json:"guest_status"`
- // 根据是否绑定快照策略过滤
- BindingSnapshotpolicy *bool `json:"binding_snapshotpolicy"`
- // 根据是否磁盘所在虚拟机是否绑定主机快照策略
- BindingServerSnapshotpolicy *bool `json:"binding_server_snapshotpolicy"`
- }
- type DiskResourceInput struct {
- // 虚拟磁盘(ID或Name)
- DiskId string `json:"disk_id"`
- // swagger:ignore
- // Deprecated
- // filter by disk_id
- Disk string `json:"disk" yunion-deprecated-by:"disk_id"`
- }
- type DiskFilterListInputBase struct {
- DiskResourceInput
- // 以磁盘名称排序
- // pattern:asc|desc
- OrderByDisk string `json:"order_by_disk"`
- }
- type DiskFilterListInput struct {
- StorageFilterListInput
- DiskFilterListInputBase
- }
- type SimpleGuest struct {
- // 主机名称
- Name string `json:"name"`
- // 主机ID
- Id string `json:"id"`
- // 主机状态
- Status string `json:"status"`
- // 磁盘序号
- Index int `json:"index"`
- // 磁盘驱动
- Driver string `json:"driver"`
- // 缓存模式
- CacheMode string `json:"cache_mode"`
- // 磁盘并发数
- Iops int `json:"iops"`
- // 磁盘吞吐
- Bps int `json:"bps"`
- // 计费类型
- BillingType string `json:"billing_type"`
- // 磁盘绑定的快照策略列表
- Snapshotpolicy []SimpleSnapshotPolicy `json:"snapshotpolicy"`
- }
- type SimpleSnapshotPolicy struct {
- // 快照策略ID
- Id string `json:"id"`
- // 快照策略名称
- Name string `json:"name"`
- // 快照策略类型
- ResourceType string `json:"resource_type"`
- // 快照策略重复周期
- RepeatWeekdays []int `json:"repeat_weekdays"`
- // 快照策略时间点
- TimePoints []int `json:"time_points"`
- }
- type DiskDetails struct {
- apis.VirtualResourceDetails
- StorageResourceInfo
- apis.EncryptedResourceDetails
- SDisk
- // 所挂载的虚拟机
- Guests []SimpleGuest `json:"guests"`
- // 所挂载的虚拟机
- Guest string `json:"guest"`
- // 所挂载虚拟机的数量
- GuestCount int `json:"guest_count"`
- // 所挂载虚拟机状态
- GuestStatus string `json:"guest_status"`
- // 所挂载虚拟机计费类型
- GuestBillingType string `json:"guest_billing_type"`
- // 磁盘所在虚拟机绑定的主机快照策略数量
- GuestSnapshotpolicyCount int `json:"guest_snapshotpolicy_count"`
- // 自动清理时间
- AutoDeleteAt time.Time `json:"auto_delete_at"`
- // 自动快照策略
- Snapshotpolicies []SimpleSnapshotPolicy `json:"snapshotpolicies"`
- }
- type DiskResourceInfoBase struct {
- // 磁盘名称
- Disk string `json:"disk"`
- }
- type DiskResourceInfo struct {
- DiskResourceInfoBase
- // 存储ID
- StorageId string `json:"storage_id"`
- StorageResourceInfo
- }
- type DiskSyncstatusInput struct {
- }
- type DiskUpdateInput struct {
- apis.VirtualResourceBaseUpdateInput
- // 磁盘类型
- DiskType string `json:"disk_type"`
- // 关机自动重置
- AutoReset *bool `json:"auto_reset"`
- // 是否跟随主机删除而自动删除
- // 默认跟随主机创建的磁盘为 true
- // required: false
- AutoDelete *bool `json:"auto_delete,omitempty"`
- }
- type DiskSaveInput struct {
- Name string `json:"name"`
- Format string `json:"format"`
- // swagger:ignore
- ImageId string `json:"image_id"`
- }
- type DiskResizeInput struct {
- // default unit: Mb
- // example: 1024; 40G; 1024M
- Size string `json:"size"`
- }
- func (self DiskResizeInput) SizeMb() (int, error) {
- if len(self.Size) == 0 {
- return 0, httperrors.NewMissingParameterError("size")
- }
- return fileutils.GetSizeMb(self.Size, 'M', 1024)
- }
- type DiskAllocateInput struct {
- Format string `json:"format"`
- DiskSizeMb int `json:"disk_size_mb"`
- ImageId string `json:"image_id"`
- ImageFormat string `json:"image_format"`
- FsFormat string `json:"fs_format"`
- FsFeatures *DiskFsFeatures `json:"fs_features"`
- Rebuild bool `json:"rebuild"`
- BackingDiskId string `json:"backing_disk_id"`
- SnapshotId string `json:"snapshot_id"`
- BackupId string `json:"backup_id"`
- Backup *DiskAllocateFromBackupInput `json:"backup"`
- SnapshotUrl string `json:"snapshot_url"`
- SnapshotOutOfChain bool `json:"snapshot_out_of_chain"`
- Protocol string `json:"protocol"`
- SrcDiskId string `json:"src_disk_id"`
- SrcPool string `json:"src_pool"`
- ExistingPath string `json:"existing_path"`
- // vmware
- HostIp string `json:"host_ip"`
- Datastore vcenter.SVCenterAccessInfo `json:"datastore"`
- // encryption
- Encryption bool `json:"encryption"`
- EncryptInfo apis.SEncryptInfo `json:"encrypt_info"`
- }
- type DiskAllocateFromBackupInput struct {
- BackupId string `json:"backup_id"`
- BackupStorageId string `json:"backup_storage_id"`
- BackupStorageAccessInfo *jsonutils.JSONDict `json:"backup_storage_access_info"`
- DiskConfig *DiskConfig `json:"disk_config"`
- BackupAsTar *DiskBackupAsTarInput `json:"backup_as_tar"`
- }
- type DiskDeleteInput struct {
- SkipRecycle *bool `json:"skip_recycle"`
- EsxiFlatFilePath string `json:"esxi_flat_file_path"`
- CleanSnapshots bool `json:"clean_snapshots"`
- }
- type DiskResetInput struct {
- SnapshotId string `json:"snapshot_id"`
- AutoStart bool `json:"auto_start"`
- }
- type DiskMigrateInput struct {
- TargetStorageId string `json:"target_storage_id"`
- }
- type DiskChagneStorageTypeInput struct {
- // 目标存储类型
- StorageType string `json:"storage_type"`
- }
- type DiskSnapshotpolicyInput struct {
- // 快照策略ID
- SnapshotpolicyId string `json:"snapshotpolicy_id"`
- }
- type DiskRebuildInput struct {
- BackupId *string `json:"backup_id,allowempty"`
- TemplateId *string `json:"template_id,allowempty"`
- Size *string `json:"size,allowempty"`
- Fs *string `json:"fs,allowempty"`
- FsFeatures *DiskFsFeatures `json:"fs_features,allowempty"`
- }
- type DiskFsExt4Features struct {
- CaseInsensitive bool `json:"case_insensitive"`
- ReservedBlocksPercentage int `json:"reserved_blocks_percentage"`
- }
- type DiskFsF2fsFeatures struct {
- CaseInsensitive bool `json:"case_insensitive"`
- OverprovisionRatioPercentage int `json:"overprovision_ratio_percentage"`
- }
- type DiskFsFeatures struct {
- Ext4 *DiskFsExt4Features `json:"ext4"`
- F2fs *DiskFsF2fsFeatures `json:"f2fs"`
- }
- func (d *DiskFsFeatures) String() string {
- return jsonutils.Marshal(d).String()
- }
- func (d *DiskFsFeatures) IsZero() bool {
- if reflect.DeepEqual(*d, DiskFsFeatures{}) {
- return true
- }
- return false
- }
- type DiskChangeBillingTypeInput struct {
- // 仅在磁盘挂载在虚拟机上时调用
- // 目前支持阿里云
- // enmu: [postpaid, prepaid]
- // required: true
- BillingType billing_api.TBillingType `json:"billing_type"`
- }
|