mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 06:09:39 +08:00
Merge pull request #841 from tb365/bugfix/tb-ucloud-fix-0514
ucloud bugfix
This commit is contained in:
@@ -55,6 +55,18 @@ func (self *SUCloudGuestDriver) GetAttachDiskStatus() ([]string, error) {
|
||||
return []string{api.VM_READY, api.VM_RUNNING}, nil
|
||||
}
|
||||
|
||||
func (self *SUCloudGuestDriver) GetChangeConfigStatus() ([]string, error) {
|
||||
return []string{api.VM_READY}, nil
|
||||
}
|
||||
|
||||
func (self *SUCloudGuestDriver) GetRebuildRootStatus() ([]string, error) {
|
||||
return []string{api.VM_READY, api.VM_RUNNING}, nil
|
||||
}
|
||||
|
||||
func (self *SUCloudGuestDriver) GetGuestInitialStateAfterRebuild() string {
|
||||
return api.VM_RUNNING
|
||||
}
|
||||
|
||||
func init() {
|
||||
driver := SUCloudGuestDriver{}
|
||||
models.RegisterGuestDriver(&driver)
|
||||
|
||||
@@ -178,7 +178,7 @@ func jsonRequest(client *SUcloudClient, params SParams) (jsonutils.JSONObject, e
|
||||
|
||||
switch e := err.(type) {
|
||||
case *httputils.JSONClientError:
|
||||
if e.Code >= 500 {
|
||||
if e.Code >= 499 {
|
||||
time.Sleep(3 * time.Second)
|
||||
retry += 1
|
||||
continue
|
||||
|
||||
@@ -178,6 +178,18 @@ func (self *SDisk) GetDiskType() string {
|
||||
return api.DISK_TYPE_DATA
|
||||
}
|
||||
|
||||
func (self *SDisk) GetStorageType() string {
|
||||
if self.storage == nil {
|
||||
if strings.Contains(self.DiskType, "SSD") {
|
||||
return api.STORAGE_UCLOUD_CLOUD_SSD
|
||||
} else {
|
||||
return api.STORAGE_UCLOUD_CLOUD_NORMAL
|
||||
}
|
||||
}
|
||||
|
||||
return self.storage.storageType
|
||||
}
|
||||
|
||||
func (self *SDisk) GetFsFormat() string {
|
||||
return ""
|
||||
}
|
||||
@@ -246,6 +258,20 @@ func (self *SDisk) Resize(ctx context.Context, newSizeMB int64) error {
|
||||
} else {
|
||||
sizeGB = newSizeMB / 1024
|
||||
}
|
||||
|
||||
if self.Status == "InUse" {
|
||||
err := self.storage.zone.region.DetachDisk(self.Zone, self.UHostID, self.UDiskID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer self.storage.zone.region.AttachDisk(self.Zone, self.UHostID, self.UDiskID)
|
||||
err = cloudprovider.WaitStatusWithDelay(self, api.DISK_READY, 10*time.Second, 5*time.Second, 60*time.Second)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
}
|
||||
return self.storage.zone.region.resizeDisk(self.Zone, self.GetId(), sizeGB)
|
||||
}
|
||||
|
||||
|
||||
@@ -349,7 +349,7 @@ func (self *SInstance) StartVM(ctx context.Context) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return cloudprovider.WaitStatus(self, api.VM_RUNNING, 5*time.Second, 180*time.Second)
|
||||
return cloudprovider.WaitStatusWithDelay(self, api.VM_RUNNING, 10*time.Second, 10*time.Second, 600*time.Second)
|
||||
}
|
||||
|
||||
func (self *SInstance) StopVM(ctx context.Context, isForce bool) error {
|
||||
@@ -357,7 +357,7 @@ func (self *SInstance) StopVM(ctx context.Context, isForce bool) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return cloudprovider.WaitStatus(self, api.VM_READY, 5*time.Second, 180*time.Second)
|
||||
return cloudprovider.WaitStatusWithDelay(self, api.VM_READY, 10*time.Second, 10*time.Second, 600*time.Second)
|
||||
}
|
||||
|
||||
func (self *SInstance) DeleteVM(ctx context.Context) error {
|
||||
@@ -400,7 +400,23 @@ func (self *SInstance) RebuildRoot(ctx context.Context, imageId string, passwd s
|
||||
|
||||
}
|
||||
}
|
||||
return self.GetId(), self.host.zone.region.RebuildRoot(self.GetId(), imageId, passwd)
|
||||
|
||||
err := self.host.zone.region.RebuildRoot(self.GetId(), imageId, passwd)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
err = cloudprovider.WaitStatusWithDelay(self, api.VM_RUNNING, 10*time.Second, 15*time.Second, 300*time.Second)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
disks, err := self.GetIDisks()
|
||||
if len(disks) > 0 {
|
||||
return disks[0].GetId(), nil
|
||||
} else {
|
||||
return "", fmt.Errorf("RebuildRoot %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (self *SInstance) DeployVM(ctx context.Context, name string, password string, publicKey string, deleteKeypair bool, description string) error {
|
||||
@@ -416,12 +432,14 @@ func (self *SInstance) DeployVM(ctx context.Context, name string, password strin
|
||||
return fmt.Errorf("DeployVM instance status %s , expected %s.", self.GetStatus(), api.VM_READY)
|
||||
}
|
||||
|
||||
err := self.host.zone.region.ResetVMPasswd(self.GetId(), password)
|
||||
if err != nil {
|
||||
return err
|
||||
if len(password) > 0 {
|
||||
err := self.host.zone.region.ResetVMPasswd(self.GetId(), password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return cloudprovider.WaitStatus(self, api.VM_READY, 10*time.Second, 120*time.Second)
|
||||
return cloudprovider.WaitStatus(self, api.VM_READY, 10*time.Second, 300*time.Second)
|
||||
}
|
||||
|
||||
func (self *SInstance) ChangeConfig(ctx context.Context, ncpu int, vmem int) error {
|
||||
@@ -429,7 +447,12 @@ func (self *SInstance) ChangeConfig(ctx context.Context, ncpu int, vmem int) err
|
||||
}
|
||||
|
||||
func (self *SInstance) ChangeConfig2(ctx context.Context, instanceType string) error {
|
||||
return cloudprovider.ErrNotSupported
|
||||
i, err := ParseInstanceType(instanceType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return self.host.zone.region.ResizeVM(self.GetId(), i.CPU, i.MemoryMB)
|
||||
}
|
||||
|
||||
func (self *SInstance) GetVNCInfo() (jsonutils.JSONObject, error) {
|
||||
@@ -441,7 +464,18 @@ func (self *SInstance) AttachDisk(ctx context.Context, diskId string) error {
|
||||
}
|
||||
|
||||
func (self *SInstance) DetachDisk(ctx context.Context, diskId string) error {
|
||||
return self.host.zone.region.DetachDisk(self.host.zone.GetId(), self.GetId(), diskId)
|
||||
err := self.host.zone.region.DetachDisk(self.host.zone.GetId(), self.GetId(), diskId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
disk, err := self.host.zone.region.GetDisk(diskId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
disk.storage = &SStorage{zone: self.host.zone, storageType: disk.GetStorageType()}
|
||||
return cloudprovider.WaitStatusWithDelay(disk, api.DISK_READY, 10*time.Second, 10*time.Second, 60*time.Second)
|
||||
}
|
||||
|
||||
func (self *SInstance) CreateDisk(ctx context.Context, sizeMb int, uuid string, driver string) error {
|
||||
@@ -564,6 +598,7 @@ func (self *SRegion) RebuildRoot(instanceId, imageId, password string) error {
|
||||
// https://docs.ucloud.cn/api/uhost-api/resize_uhost_instance
|
||||
func (self *SRegion) ResizeVM(instanceId string, cpu, memoryMB int) error {
|
||||
params := NewUcloudParams()
|
||||
params.Set("UHostId", instanceId)
|
||||
params.Set("CPU", cpu)
|
||||
params.Set("Memory", memoryMB)
|
||||
|
||||
|
||||
@@ -162,11 +162,7 @@ func (self *SStoragecache) uploadImage(ctx context.Context, userCred mcclient.To
|
||||
return "", err
|
||||
}
|
||||
log.Debugf("Images meta data %s", meta)
|
||||
_image, err := modules.Images.Get(s, imageId, nil)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
minDiskMB, _ := _image.Int("min_disk")
|
||||
minDiskMB, _ := meta.Int("min_disk")
|
||||
minDiskGB := int64(math.Ceil(float64(minDiskMB) / 1024))
|
||||
// 在使用OBS桶的外部镜像文件制作镜像时生效且为必选字段。取值为40~1024GB。
|
||||
if minDiskGB < 40 {
|
||||
@@ -174,9 +170,9 @@ func (self *SStoragecache) uploadImage(ctx context.Context, userCred mcclient.To
|
||||
} else if minDiskGB > 1024 {
|
||||
minDiskGB = 1024
|
||||
}
|
||||
size, _ := _image.Int("size")
|
||||
md5, _ := _image.GetString("checksum")
|
||||
diskFormat, _ := _image.GetString("disk_format")
|
||||
size, _ := meta.Int("size")
|
||||
md5, _ := meta.GetString("checksum")
|
||||
diskFormat, _ := meta.GetString("disk_format")
|
||||
// upload to ucloud
|
||||
file := SFile{
|
||||
region: self.region,
|
||||
|
||||
Reference in New Issue
Block a user