yunion.io/x/cloudmux@v0.3.10-0-alpha.1/pkg/multicloud/openstack/nova_disk.go (about) 1 // Copyright 2019 Yunion 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package openstack 16 17 import ( 18 "context" 19 "fmt" 20 "time" 21 22 billing_api "yunion.io/x/cloudmux/pkg/apis/billing" 23 api "yunion.io/x/cloudmux/pkg/apis/compute" 24 "yunion.io/x/cloudmux/pkg/cloudprovider" 25 "yunion.io/x/cloudmux/pkg/multicloud" 26 ) 27 28 type SNovaDisk struct { 29 multicloud.SDisk 30 OpenStackTags 31 storage *SNovaStorage 32 region *SRegion 33 34 instanceId string 35 } 36 37 func (disk *SNovaDisk) GetId() string { 38 return disk.instanceId 39 } 40 41 func (disk *SNovaDisk) Delete(ctx context.Context) error { 42 return cloudprovider.ErrNotSupported 43 } 44 45 func (disk *SNovaDisk) Resize(ctx context.Context, sizeMb int64) error { 46 return cloudprovider.ErrNotSupported 47 } 48 49 func (disk *SNovaDisk) GetName() string { 50 return fmt.Sprintf("Sys disk for instance %s", disk.instanceId) 51 } 52 53 func (disk *SNovaDisk) GetGlobalId() string { 54 return disk.instanceId 55 } 56 57 func (disk *SNovaDisk) IsEmulated() bool { 58 return false 59 } 60 61 func (disk *SNovaDisk) GetIStorage() (cloudprovider.ICloudStorage, error) { 62 return disk.storage, nil 63 } 64 65 func (disk *SNovaDisk) GetStatus() string { 66 return api.DISK_READY 67 } 68 69 func (disk *SNovaDisk) Refresh() error { 70 return nil 71 } 72 73 func (disk *SNovaDisk) GetDiskFormat() string { 74 return "raw" 75 } 76 77 func (disk *SNovaDisk) GetDiskSizeMB() int { 78 instance, err := disk.region.GetInstance(disk.instanceId) 79 if err != nil { 80 return 0 81 } 82 if instance.Flavor.Disk != 0 { 83 return instance.Flavor.Disk * 1024 84 } 85 if len(instance.Flavor.Id) > 0 { 86 flavor, err := disk.region.GetFlavor(instance.Flavor.Id) 87 if err != nil { 88 return 0 89 } 90 return flavor.Disk * 1024 91 } 92 return 0 93 } 94 95 func (disk *SNovaDisk) GetIsAutoDelete() bool { 96 return true 97 } 98 99 func (disk *SNovaDisk) GetTemplateId() string { 100 return "" 101 } 102 103 func (disk *SNovaDisk) GetDiskType() string { 104 return api.DISK_TYPE_SYS 105 } 106 107 func (disk *SNovaDisk) GetFsFormat() string { 108 return "" 109 } 110 111 func (disk *SNovaDisk) GetIsNonPersistent() bool { 112 return false 113 } 114 115 func (disk *SNovaDisk) GetDriver() string { 116 return "scsi" 117 } 118 119 func (disk *SNovaDisk) GetCacheMode() string { 120 return "none" 121 } 122 123 func (disk *SNovaDisk) GetMountpoint() string { 124 return "" 125 } 126 127 func (disk *SNovaDisk) CreateISnapshot(ctx context.Context, name, desc string) (cloudprovider.ICloudSnapshot, error) { 128 return nil, cloudprovider.ErrNotSupported 129 } 130 131 func (disk *SNovaDisk) GetISnapshot(snapshotId string) (cloudprovider.ICloudSnapshot, error) { 132 return nil, cloudprovider.ErrNotFound 133 } 134 135 func (disk *SNovaDisk) GetISnapshots() ([]cloudprovider.ICloudSnapshot, error) { 136 return []cloudprovider.ICloudSnapshot{}, nil 137 } 138 139 func (disk *SNovaDisk) Reset(ctx context.Context, snapshotId string) (string, error) { 140 return "", cloudprovider.ErrNotSupported 141 } 142 143 func (disk *SNovaDisk) GetBillingType() string { 144 return billing_api.BILLING_TYPE_POSTPAID 145 } 146 147 func (disk *SNovaDisk) GetCreatedAt() time.Time { 148 return time.Time{} 149 } 150 151 func (disk *SNovaDisk) GetExpiredAt() time.Time { 152 return time.Time{} 153 } 154 155 func (disk *SNovaDisk) GetAccessPath() string { 156 return "" 157 } 158 159 func (disk *SNovaDisk) Rebuild(ctx context.Context) error { 160 return cloudprovider.ErrNotSupported 161 } 162 163 func (disk *SNovaDisk) GetProjectId() string { 164 instance, err := disk.region.GetInstance(disk.instanceId) 165 if err != nil { 166 return "" 167 } 168 return instance.GetProjectId() 169 }