Merge pull request #128 in YUNIONIO/onecloud from ~QUXUAN/onecloud:hotfix/qx-guest-disk-meta to release/2.1.0

* commit '23ebca6cfe41f016c2ea309a20a1246622ef7a1d':
  添加interface接口
This commit is contained in:
邱剑
2018-08-27 22:19:26 +08:00
23 changed files with 221 additions and 31 deletions
+2 -1
View File
@@ -18,6 +18,7 @@ type ICloudResource interface {
Refresh() error
IsEmulated() bool
GetMetadata() *jsonutils.JSONDict
}
type ICloudRegion interface {
@@ -156,7 +157,7 @@ type ICloudVM interface {
UpdateVM(name string) error
RebuildRoot(imageId string) error
DeployVM(name string, password string, publicKey string, resetPassword bool, deleteKeypair bool, description string) error
ChangeConfig(instanceId string,ncpu int, vmem int) error
ChangeConfig(instanceId string, ncpu int, vmem int) error
GetVNCInfo() (jsonutils.JSONObject, error)
AttachDisk(diskId string) error
}
+40 -10
View File
@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"time"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
"yunion.io/x/onecloud/pkg/httperrors"
@@ -116,8 +117,9 @@ func (self *SAliyunGuestDriver) GetJsonDescAtHost(ctx context.Context, guest *mo
}
type SDiskInfo struct {
Size int
Uuid string
Size int
Uuid string
Metadata map[string]string
}
func (self *SAliyunGuestDriver) RequestDeployGuestOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error {
@@ -207,12 +209,19 @@ func (self *SAliyunGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gu
dinfo := SDiskInfo{}
dinfo.Uuid = idisks[i].GetGlobalId()
dinfo.Size = idisks[i].GetDiskSizeMB()
if metaData := idisks[i].GetMetadata(); metaData != nil {
dinfo.Metadata = make(map[string]string, 0)
if err := metaData.Unmarshal(dinfo.Metadata); err != nil {
log.Errorf("Get disk %s metadata info error: %v", idisks[i].GetName(), err)
}
}
diskInfo[i] = dinfo
}
data.Add(jsonutils.Marshal(&diskInfo), "disks")
}
data.Add(jsonutils.NewString(iVM.GetGlobalId()), "uuid")
data.Add(iVM.GetMetadata(), "metadata")
return data, nil
})
@@ -236,7 +245,7 @@ func (self *SAliyunGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gu
resetPassword := jsonutils.QueryBoolean(params, "reset_password", false)
deleteKeypair := jsonutils.QueryBoolean(params, "__delete_keypair__", false)
password, _ := params.GetString("password")
if resetPassword && len(password) == 0{
if resetPassword && len(password) == 0 {
password = seclib2.RandomPassword2(12)
}
@@ -245,15 +254,15 @@ func (self *SAliyunGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gu
publicKey = k
}
taskman.LocalTaskRun(task, func () (jsonutils.JSONObject, error) {
taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) {
encpasswd, err := utils.EncryptAESBase64(guest.Id, password)
if err != nil {
log.Errorf("encrypt password failed %s", err)
}
data := jsonutils.NewDict()
data.Add(jsonutils.NewString("root"), "account") // 用户名
data.Add(jsonutils.NewString(encpasswd), "key") // 密码
data.Add(jsonutils.NewString("root"), "account") // 用户名
data.Add(jsonutils.NewString(encpasswd), "key") // 密码
e := iVM.DeployVM(name, password, publicKey, resetPassword, deleteKeypair, description)
return data, e
})
@@ -284,6 +293,13 @@ func (self *SAliyunGuestDriver) OnGuestDeployTaskDataReceived(ctx context.Contex
disk.DiskSize = diskInfo[i].Size
disk.ExternalId = diskInfo[i].Uuid
disk.Status = models.DISK_READY
if len(diskInfo[i].Metadata) > 0 {
for key, value := range diskInfo[i].Metadata {
if err := disk.SetMetadata(ctx, key, value, task.GetUserCred()); err != nil {
log.Errorf("set disk %s mata %s => %s error: %v", disk.Name, key, value, err)
}
}
}
return nil
})
if err != nil {
@@ -299,6 +315,20 @@ func (self *SAliyunGuestDriver) OnGuestDeployTaskDataReceived(ctx context.Contex
if len(uuid) > 0 {
guest.SetExternalId(uuid)
}
if metaData, _ := data.Get("metadata"); metaData != nil {
meta := make(map[string]string, 0)
if err := metaData.Unmarshal(meta); err != nil {
log.Errorf("Get guest %s metadata error: %v", guest.Name, err)
} else {
for key, value := range meta {
if err := guest.SetMetadata(ctx, key, value, task.GetUserCred()); err != nil {
log.Errorf("set guest %s mata %s => %s error: %v", guest.Name, key, value, err)
}
}
}
}
guest.SaveDeployInfo(ctx, task.GetUserCred(), data)
return nil
}
@@ -320,9 +350,9 @@ func (self *SAliyunGuestDriver) RequestSyncConfigOnHost(ctx context.Context, gue
}
type SAliyunVMChangeConfig struct {
InstanceId string
Cpu int
Memory int
InstanceId string
Cpu int
Memory int
}
func (self *SAliyunGuestDriver) DoGuestCreateDisksTask(ctx context.Context, guest *models.SGuest, task taskman.ITask) error {
@@ -432,4 +462,4 @@ func (self *SAliyunGuestDriver) RequestRebuildRootDisk(ctx context.Context, gues
task.ScheduleRun(nil)
return nil
}
}
+15 -1
View File
@@ -48,7 +48,7 @@ func (self *SAliyunHostDriver) CheckAndSetCacheImage(ctx context.Context, host *
return nil
}
func (self *SAliyunHostDriver) RequestAllocateDiskOnStorage(host *models.SHost, storage *models.SStorage, disk *models.SDisk, task taskman.ITask, content *jsonutils.JSONDict) error {
func (self *SAliyunHostDriver) RequestAllocateDiskOnStorage(ctx context.Context, host *models.SHost, storage *models.SStorage, disk *models.SDisk, task taskman.ITask, content *jsonutils.JSONDict) error {
if iCloudStorage, err := storage.GetIStorage(); err != nil {
return err
} else {
@@ -61,6 +61,20 @@ func (self *SAliyunHostDriver) RequestAllocateDiskOnStorage(host *models.SHost,
} else {
if _, err := disk.GetModelManager().TableSpec().Update(disk, func() error {
disk.ExternalId = iDisk.GetGlobalId()
if metaData := iDisk.GetMetadata(); metaData != nil {
meta := make(map[string]string)
if err := metaData.Unmarshal(meta); err != nil {
log.Errorf("Get disk %s Metadata error: %v", disk.Name, err)
} else {
for key, value := range meta {
if err := disk.SetMetadata(ctx, key, value, task.GetUserCred()); err != nil {
log.Errorf("set disk %s mata %s => %s error: %v", disk.Name, key, value, err)
}
}
}
}
return nil
}); err != nil {
log.Errorf("Update disk externalId err: %v", err)
+1 -1
View File
@@ -74,7 +74,7 @@ func (self *SKVMHostDriver) CheckAndSetCacheImage(ctx context.Context, host *mod
return nil
}
func (self *SKVMHostDriver) RequestAllocateDiskOnStorage(host *models.SHost, storage *models.SStorage, disk *models.SDisk, task taskman.ITask, content *jsonutils.JSONDict) error {
func (self *SKVMHostDriver) RequestAllocateDiskOnStorage(ctx context.Context, host *models.SHost, storage *models.SStorage, disk *models.SDisk, task taskman.ITask, content *jsonutils.JSONDict) error {
header := http.Header{}
header.Add("X-Task-Id", task.GetTaskId())
header.Add("X-Region-Version", "v2")
+44 -10
View File
@@ -297,7 +297,7 @@ func (self *SDisk) StartDiskCreateTask(ctx context.Context, userCred mcclient.To
return nil
}
func (self *SDisk) StartAllocate(host *SHost, storage *SStorage, taskId string, userCred mcclient.TokenCredential, rebuild bool, snapshot string, task taskman.ITask) error {
func (self *SDisk) StartAllocate(ctx context.Context, host *SHost, storage *SStorage, taskId string, userCred mcclient.TokenCredential, rebuild bool, snapshot string, task taskman.ITask) error {
log.Infof("Allocating disk on host %s ...", host.GetName())
templateId := self.GetTemplateId()
@@ -326,7 +326,7 @@ func (self *SDisk) StartAllocate(host *SHost, storage *SStorage, taskId string,
if rebuild {
content.Add(jsonutils.JSONTrue, "rebuild")
}
return host.GetHostDriver().RequestAllocateDiskOnStorage(host, storage, self, task, content)
return host.GetHostDriver().RequestAllocateDiskOnStorage(ctx, host, storage, self, task, content)
}
func (self *SDisk) AllowPerformResize(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool {
@@ -433,7 +433,7 @@ func (manager *SDiskManager) getDisksByStorage(storage *SStorage) ([]SDisk, erro
return disks, nil
}
func (manager *SDiskManager) syncCloudDisk(userCred mcclient.TokenCredential, vdisk cloudprovider.ICloudDisk) (*SDisk, error) {
func (manager *SDiskManager) syncCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, vdisk cloudprovider.ICloudDisk) (*SDisk, error) {
diskObj, err := manager.FetchByExternalId(vdisk.GetGlobalId())
if err != nil {
if err == sql.ErrNoRows {
@@ -444,13 +444,13 @@ func (manager *SDiskManager) syncCloudDisk(userCred mcclient.TokenCredential, vd
return nil, err
}
storage := storageObj.(*SStorage)
return manager.newFromCloudDisk(userCred, vdisk, storage)
return manager.newFromCloudDisk(ctx, userCred, vdisk, storage)
} else {
return nil, err
}
} else {
disk := diskObj.(*SDisk)
err = disk.syncWithCloudDisk(userCred, vdisk)
err = disk.syncWithCloudDisk(ctx, userCred, vdisk)
if err != nil {
return nil, err
}
@@ -490,7 +490,7 @@ func (manager *SDiskManager) SyncDisks(ctx context.Context, userCred mcclient.To
}
for i := 0; i < len(commondb); i += 1 {
err = commondb[i].syncWithCloudDisk(userCred, commonext[i])
err = commondb[i].syncWithCloudDisk(ctx, userCred, commonext[i])
if err != nil {
syncResult.UpdateError(err)
} else {
@@ -501,7 +501,7 @@ func (manager *SDiskManager) SyncDisks(ctx context.Context, userCred mcclient.To
}
for i := 0; i < len(added); i += 1 {
new, err := manager.newFromCloudDisk(userCred, added[i], storage)
new, err := manager.newFromCloudDisk(ctx, userCred, added[i], storage)
if err != nil {
syncResult.AddError(err)
} else {
@@ -514,7 +514,7 @@ func (manager *SDiskManager) SyncDisks(ctx context.Context, userCred mcclient.To
return localDisks, remoteDisks, syncResult
}
func (self *SDisk) syncWithCloudDisk(userCred mcclient.TokenCredential, extDisk cloudprovider.ICloudDisk) error {
func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, extDisk cloudprovider.ICloudDisk) error {
_, err := self.GetModelManager().TableSpec().Update(self, func() error {
extDisk.Refresh()
self.Name = extDisk.GetName()
@@ -535,11 +535,26 @@ func (self *SDisk) syncWithCloudDisk(userCred mcclient.TokenCredential, extDisk
})
if err != nil {
log.Errorf("syncWithCloudDisk error %s", err)
return err
}
return err
if metaData := extDisk.GetMetadata(); metaData != nil {
meta := make(map[string]string, 0)
if err := metaData.Unmarshal(meta); err != nil {
log.Errorf("Get VM Metadata error: %v", err)
} else {
for key, value := range meta {
if err := self.SetMetadata(ctx, key, value, userCred); err != nil {
log.Errorf("set disk %s mata %s => %s error: %v", self.Name, key, value, err)
}
}
}
}
return nil
}
func (manager *SDiskManager) newFromCloudDisk(userCred mcclient.TokenCredential, extDisk cloudprovider.ICloudDisk, storage *SStorage) (*SDisk, error) {
func (manager *SDiskManager) newFromCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, extDisk cloudprovider.ICloudDisk, storage *SStorage) (*SDisk, error) {
disk := SDisk{}
disk.SetModelManager(manager)
@@ -562,6 +577,20 @@ func (manager *SDiskManager) newFromCloudDisk(userCred mcclient.TokenCredential,
log.Errorf("newFromCloudZone fail %s", err)
return nil, err
}
if metaData := extDisk.GetMetadata(); metaData != nil {
meta := make(map[string]string)
if err := metaData.Unmarshal(meta); err != nil {
log.Errorf("Get VM Metadata error: %v", err)
} else {
for key, value := range meta {
if err := disk.SetMetadata(ctx, key, value, userCred); err != nil {
log.Errorf("set disk %s mata %s => %s error: %v", disk.Name, key, value, err)
}
}
}
}
return &disk, nil
}
@@ -891,6 +920,11 @@ func (self *SDisk) GetShortDesc() *jsonutils.JSONDict {
storage := self.GetStorage()
desc.Add(jsonutils.NewString(storage.StorageType), "storage_type")
desc.Add(jsonutils.NewString(storage.MediumType), "medium_type")
if priceKey := self.GetMetadata("price_key", nil); len(priceKey) > 0 {
desc.Add(jsonutils.NewString(priceKey), "price_key")
}
fs := self.GetFsFormat()
if len(fs) > 0 {
desc.Add(jsonutils.NewString(fs), "fs_format")
+33 -2
View File
@@ -1249,6 +1249,18 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token
db.OpsLog.LogEvent(self, db.ACT_UPDATE, diffStr, userCred)
}
}
if metaData := extVM.GetMetadata(); metaData != nil {
meta := make(map[string]string, 0)
if metaData.Unmarshal(meta); err != nil {
log.Errorf("Get VM Metadata error: %v", err)
} else {
for key, value := range meta {
if err := self.SetMetadata(ctx, key, value, userCred); err != nil {
log.Errorf("set guest %s mata %s => %s error: %v", self.Name, key, value, err)
}
}
}
}
return nil
}
@@ -1279,6 +1291,20 @@ func (manager *SGuestManager) newCloudVM(ctx context.Context, userCred mcclient.
if err != nil {
log.Errorf("Insert fail %s", err)
}
if metaData := extVM.GetMetadata(); metaData != nil {
meta := make(map[string]string, 0)
if err := metaData.Unmarshal(meta); err != nil {
log.Errorf("Get VM Metadata error: %v", err)
} else {
for key, value := range meta {
if err := guest.SetMetadata(ctx, key, value, userCred); err != nil {
log.Errorf("set guest %s mata %s => %s error: %v", guest.Name, key, value, err)
}
}
}
}
return &guest, nil
}
@@ -1668,7 +1694,7 @@ func (self *SGuest) SyncVMDisks(ctx context.Context, userCred mcclient.TokenCred
if len(vdisks[i].GetGlobalId()) == 0 {
continue
}
disk, err := DiskManager.syncCloudDisk(userCred, vdisks[i])
disk, err := DiskManager.syncCloudDisk(ctx, userCred, vdisks[i])
if err != nil {
result.Error(err)
return result
@@ -3140,6 +3166,11 @@ func (self *SGuest) GetShortDesc() *jsonutils.JSONDict {
if intBw > 0 {
desc.Set("int_bandwidth", jsonutils.NewInt(int64(intBw)))
}
if priceKey := self.GetMetadata("price_key", nil); len(priceKey) > 0 {
desc.Add(jsonutils.NewString(priceKey), "price_key")
}
desc.Set("hypervisor", jsonutils.NewString(self.GetHypervisor()))
spec := self.GetSpec(false)
if self.GetHypervisor() == HYPERVISOR_BAREMETAL {
@@ -3454,4 +3485,4 @@ func (manager *SGuestManager) CleanPendingDeleteServers(ctx context.Context, use
for i := 0; i < len(guests); i += 1 {
guests[i].StartDeleteGuestTask(ctx, userCred, "", false, true)
}
}
}
+1 -1
View File
@@ -12,7 +12,7 @@ import (
type IHostDriver interface {
GetHostType() string
CheckAndSetCacheImage(ctx context.Context, host *SHost, storagecache *SStoragecache, scimg *SStoragecachedimage, task taskman.ITask) error
RequestAllocateDiskOnStorage(host *SHost, storage *SStorage, disk *SDisk, task taskman.ITask, content *jsonutils.JSONDict) error
RequestAllocateDiskOnStorage(ctx context.Context, host *SHost, storage *SStorage, disk *SDisk, task taskman.ITask, content *jsonutils.JSONDict) error
RequestDeallocateDiskOnHost(host *SHost, storage *SStorage, disk *SDisk, task taskman.ITask) error
RequestResizeDiskOnHostOnline(host *SHost, storage *SStorage, disk *SDisk, size int64, task taskman.ITask) error
RequestResizeDiskOnHost(host *SHost, storage *SStorage, disk *SDisk, size int64, task taskman.ITask) error
+2 -2
View File
@@ -40,10 +40,10 @@ func (self *DiskCreateTask) OnStorageCacheImageComplete(ctx context.Context, dis
}
storage := disk.GetStorage()
host := storage.GetMasterHost()
db.OpsLog.LogEvent(disk, db.ACT_ALLOCATE, disk.GetShortDesc(), self.GetUserCred())
db.OpsLog.LogEvent(disk, db.ACT_ALLOCATING, disk.GetShortDesc(), self.GetUserCred())
disk.SetStatus(self.GetUserCred(), models.DISK_STARTALLOC, "")
self.SetStage("on_disk_ready", nil)
if err := disk.StartAllocate(host, storage, self.GetTaskId(), self.GetUserCred(), rebuild, snapshot, self); err != nil {
if err := disk.StartAllocate(ctx, host, storage, self.GetTaskId(), self.GetUserCred(), rebuild, snapshot, self); err != nil {
self.OnStartAllocateFailed(ctx, disk, jsonutils.NewString(err.Error()))
}
}
+10
View File
@@ -54,6 +54,16 @@ type SDisk struct {
ZoneId string
}
func (self *SDisk) GetMetadata() *jsonutils.JSONDict {
data := jsonutils.NewDict()
// The pricingInfo key structure is 'RegionId::DiskCategory::DiskType
priceKey := fmt.Sprintf("%s::%s::%s", self.RegionId, self.Category, self.Type)
data.Add(jsonutils.NewString(priceKey), "price_key")
return data
}
func (self *SRegion) GetDisks(instanceId string, zoneId string, category string, diskIds []string, offset int, limit int) ([]SDisk, int, error) {
if limit > 50 || limit <= 0 {
limit = 50
+4
View File
@@ -19,6 +19,10 @@ type SHost struct {
zone *SZone
}
func (self *SHost) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SHost) GetIWires() ([]cloudprovider.ICloudWire, error) {
return self.zone.GetIWires()
}
+4
View File
@@ -55,6 +55,10 @@ type SImage struct {
Usage string
}
func (self *SImage) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SImage) GetId() string {
return self.ImageId
}
+15
View File
@@ -3,6 +3,7 @@ package aliyun
import (
"fmt"
"time"
"yunion.io/x/onecloud/pkg/util/seclib2"
"yunion.io/x/jsonutils"
@@ -164,6 +165,20 @@ func (self *SRegion) GetInstances(zoneId string, ids []string, offset int, limit
return instances, int(total), nil
}
func (self *SInstance) GetMetadata() *jsonutils.JSONDict {
data := jsonutils.NewDict()
// The pricingInfo key structure is 'RegionId::InstanceType::NetworkType::OSType::IoOptimized'
optimized := "optimized"
if !self.IoOptimized {
optimized = "none"
}
priceKey := fmt.Sprintf("%s::%s::%s::%s::%s", self.RegionId, self.InstanceType, self.InstanceNetworkType, self.OSType, optimized)
data.Add(jsonutils.NewString(priceKey), "price_key")
return data
}
func (self *SInstance) GetCreateTime() time.Time {
return self.CreationTime
}
+4
View File
@@ -36,6 +36,10 @@ func (self *SRegion) GetClient() *SAliyunClient {
return self.client
}
func (self *SRegion) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SRegion) getEcsClient() (*sdk.Client, error) {
if self.ecsClient == nil {
cli, err := sdk.NewClientWithAccessKey(self.RegionId, self.client.accessKey, self.client.secret)
+4
View File
@@ -77,6 +77,10 @@ func (v PermissionSet) Less(i, j int) bool {
return false
}
func (self *SSecurityGroup) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SSecurityGroup) GetId() string {
return self.SecurityGroupId
}
+4
View File
@@ -15,6 +15,10 @@ type SStorage struct {
storageType string
}
func (self *SStorage) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SStorage) GetId() string {
return fmt.Sprintf("%s-%s-%s", self.zone.region.client.providerId, self.zone.GetId(), self.storageType)
}
+5
View File
@@ -5,6 +5,7 @@ import (
"strings"
"time"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
"yunion.io/x/onecloud/pkg/cloudprovider"
"yunion.io/x/onecloud/pkg/compute/options"
@@ -19,6 +20,10 @@ type SStoragecache struct {
iimages []cloudprovider.ICloudImage
}
func (self *SStoragecache) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SStoragecache) GetId() string {
return fmt.Sprintf("%s-%s", self.region.client.providerId, self.region.GetId())
}
+4
View File
@@ -45,6 +45,10 @@ type SVpc struct {
VpcName string
}
func (self *SVpc) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SVpc) GetId() string {
return self.VpcId
}
+4
View File
@@ -34,6 +34,10 @@ type SVSwitch struct {
ZoneId string
}
func (self *SVSwitch) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SVSwitch) GetId() string {
return self.VSwitchId
}
+5
View File
@@ -3,6 +3,7 @@ package aliyun
import (
"fmt"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
"yunion.io/x/onecloud/pkg/cloudprovider"
)
@@ -14,6 +15,10 @@ type SWire struct {
inetworks []cloudprovider.ICloudNetwork
}
func (self *SWire) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SWire) GetId() string {
return fmt.Sprintf("%s-%s", self.vpc.GetId(), self.zone.GetId())
}
+5
View File
@@ -3,6 +3,7 @@ package aliyun
import (
"fmt"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
"yunion.io/x/onecloud/pkg/cloudprovider"
"yunion.io/x/onecloud/pkg/compute/models"
@@ -111,6 +112,10 @@ type SZone struct {
AvailableDedicatedHostTypes SDedicatedHostTypes
}
func (self *SZone) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SZone) GetId() string {
return self.ZoneId
}
+4
View File
@@ -68,6 +68,10 @@ func NewHost(manager *SESXiClient, host *mo.HostSystem, dc *SDatacenter) *SHost
return &SHost{SManagedObject: newManagedObject(manager, host, dc)}
}
func (self *SHost) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SHost) getHostSystem() *mo.HostSystem {
return self.object.(*mo.HostSystem)
}
+5 -1
View File
@@ -18,6 +18,10 @@ func NewDatastore(manager *SESXiClient, ds *mo.Datastore, dc *SDatacenter) *SDat
return &SDatastore{SManagedObject: newManagedObject(manager, ds, dc)}
}
func (self *SDatastore) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SDatastore) getDatastore() *mo.Datastore {
return self.object.(*mo.Datastore)
}
@@ -89,4 +93,4 @@ func (self *SDatastore) GetManagerId() string {
func (self *SDatastore) CreateIDisk(name string, sizeGb int, desc string) (cloudprovider.ICloudDisk, error) {
return nil, cloudprovider.ErrNotImplemented
}
}
+6 -2
View File
@@ -27,6 +27,10 @@ func NewVirtualMachine(manager *SESXiClient, vm *mo.VirtualMachine, dc *SDatacen
return &SVirtualMachine{SManagedObject: newManagedObject(manager, vm, dc), host: host}
}
func (self *SVirtualMachine) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (self *SVirtualMachine) getVirtualMachine() *mo.VirtualMachine {
return self.object.(*mo.VirtualMachine)
}
@@ -226,6 +230,6 @@ func (self *SVirtualMachine) acquireVmrcUrl() (jsonutils.JSONObject, error) {
return ret, nil
}
func (dc *SVirtualMachine) ChangeConfig(instanceId string,ncpu int, vmem int) error {
func (dc *SVirtualMachine) ChangeConfig(instanceId string, ncpu int, vmem int) error {
return cloudprovider.ErrNotImplemented
}
}