mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 14:19:49 +08:00
忽略因镜像问题导致初始化失败
This commit is contained in:
+18
-3
@@ -359,6 +359,10 @@ type AzureError struct {
|
||||
Message string `json:"message,omitempty"`
|
||||
}
|
||||
|
||||
func (e *AzureError) Error() string {
|
||||
return jsonutils.Marshal(e).String()
|
||||
}
|
||||
|
||||
func (self *SAzureClient) getUniqName(cli *autorest.Client, resourceType, name string, body jsonutils.JSONObject) (string, string, error) {
|
||||
url := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/%s/%s", self.subscriptionId, self.ressourceGroups[0].Name, resourceType, name)
|
||||
if _, err := jsonRequest(cli, "GET", self.domain, url, self.subscriptionId, ""); err != nil {
|
||||
@@ -586,9 +590,20 @@ func waitForComplatetion(client *autorest.Client, req *http.Request, resp *http.
|
||||
return nil, nil
|
||||
case "Failed":
|
||||
if asyncData.Contains("error") {
|
||||
msg, _ := asyncData.Get("error")
|
||||
log.Errorf("process %s %s error: %s", req.Method, req.URL.String(), msg.String())
|
||||
return nil, fmt.Errorf(msg.String())
|
||||
azureError := AzureError{}
|
||||
if err := asyncData.Unmarshal(&azureError, "error"); err != nil {
|
||||
log.Errorf("process %s %s error: %s", req.Method, req.URL.String(), asyncData.String())
|
||||
return nil, fmt.Errorf("%s", asyncData.String())
|
||||
}
|
||||
switch azureError.Code {
|
||||
// 忽略创建机器时初始化超时问题
|
||||
case "OSProvisioningTimedOut", "OSProvisioningClientError":
|
||||
log.Debugf("ignore OSProvisioning error: %s", azureError)
|
||||
return nil, nil
|
||||
default:
|
||||
log.Errorf("process %s %s error: %s", req.Method, req.URL.String(), azureError)
|
||||
return nil, &azureError
|
||||
}
|
||||
}
|
||||
default:
|
||||
log.Errorf("Unknow status %s when process %s %s", status, req.Method, req.URL.String())
|
||||
|
||||
@@ -78,7 +78,7 @@ type ClassicDisk struct {
|
||||
|
||||
type ClassicStorageProfile struct {
|
||||
OperatingSystemDisk ClassicDisk `json:"operatingSystemDisk,omitempty"`
|
||||
DataDisks *[]ClassicDisk `json:"aataDisks,omitempty"`
|
||||
DataDisks *[]ClassicDisk `json:"dataDisks,allowempty"`
|
||||
}
|
||||
|
||||
type ClassicHardwareProfile struct {
|
||||
@@ -296,17 +296,19 @@ func (self *SClassicInstance) GetIHost() cloudprovider.ICloudHost {
|
||||
}
|
||||
|
||||
func (self *SClassicInstance) AttachDisk(ctx context.Context, diskId string) error {
|
||||
status := self.GetStatus()
|
||||
if err := self.host.zone.region.AttachDisk(self.ID, diskId); err != nil {
|
||||
return err
|
||||
}
|
||||
return cloudprovider.WaitStatus(self, self.GetStatus(), 10*time.Second, 300*time.Second)
|
||||
return cloudprovider.WaitStatus(self, status, 10*time.Second, 300*time.Second)
|
||||
}
|
||||
|
||||
func (self *SClassicInstance) DetachDisk(ctx context.Context, diskId string) error {
|
||||
status := self.GetStatus()
|
||||
if err := self.host.zone.region.DetachDisk(self.ID, diskId); err != nil {
|
||||
return err
|
||||
}
|
||||
return cloudprovider.WaitStatus(self, self.GetStatus(), 10*time.Second, 300*time.Second)
|
||||
return cloudprovider.WaitStatus(self, status, 10*time.Second, 300*time.Second)
|
||||
}
|
||||
|
||||
func (self *SClassicInstance) ChangeConfig(ctx context.Context, ncpu int, vmem int) error {
|
||||
|
||||
@@ -81,7 +81,7 @@ type DataDisk struct {
|
||||
type StorageProfile struct {
|
||||
ImageReference ImageReference `json:"imageReference,omitempty"`
|
||||
OsDisk OSDisk `json:"osDisk,omitempty"`
|
||||
DataDisks []DataDisk `json:"dataDisks,omitempty"`
|
||||
DataDisks []DataDisk `json:"dataDisks"`
|
||||
}
|
||||
|
||||
type SSHPublicKey struct {
|
||||
@@ -481,10 +481,11 @@ func (self *SInstance) GetIHost() cloudprovider.ICloudHost {
|
||||
}
|
||||
|
||||
func (self *SInstance) AttachDisk(ctx context.Context, diskId string) error {
|
||||
status := self.GetStatus()
|
||||
if err := self.host.zone.region.AttachDisk(self.ID, diskId); err != nil {
|
||||
return err
|
||||
}
|
||||
return cloudprovider.WaitStatus(self, self.GetStatus(), 10*time.Second, 300*time.Second)
|
||||
return cloudprovider.WaitStatus(self, status, 10*time.Second, 300*time.Second)
|
||||
}
|
||||
|
||||
func (region *SRegion) AttachDisk(instanceId, diskId string) error {
|
||||
@@ -523,10 +524,11 @@ func (region *SRegion) AttachDisk(instanceId, diskId string) error {
|
||||
}
|
||||
|
||||
func (self *SInstance) DetachDisk(ctx context.Context, diskId string) error {
|
||||
status := self.GetStatus()
|
||||
if err := self.host.zone.region.DetachDisk(self.ID, diskId); err != nil {
|
||||
return err
|
||||
}
|
||||
return cloudprovider.WaitStatus(self, self.GetStatus(), 10*time.Second, 300*time.Second)
|
||||
return cloudprovider.WaitStatus(self, status, 10*time.Second, 300*time.Second)
|
||||
}
|
||||
|
||||
func (region *SRegion) DetachDisk(instanceId, diskId string) error {
|
||||
@@ -551,6 +553,7 @@ func (region *SRegion) DetachDisk(instanceId, diskId string) error {
|
||||
}
|
||||
|
||||
func (self *SInstance) ChangeConfig(ctx context.Context, ncpu int, vmem int) error {
|
||||
status := self.GetStatus()
|
||||
for _, vmSize := range self.host.zone.region.getHardwareProfile(ncpu, vmem) {
|
||||
self.Properties.HardwareProfile.VMSize = vmSize
|
||||
self.Properties.ProvisioningState = ""
|
||||
@@ -558,7 +561,7 @@ func (self *SInstance) ChangeConfig(ctx context.Context, ncpu int, vmem int) err
|
||||
log.Debugf("Try HardwareProfile : %s", vmSize)
|
||||
err := self.host.zone.region.client.Update(jsonutils.Marshal(self), nil)
|
||||
if err == nil {
|
||||
return cloudprovider.WaitStatus(self, self.GetStatus(), 10*time.Second, 300*time.Second)
|
||||
return cloudprovider.WaitStatus(self, status, 10*time.Second, 300*time.Second)
|
||||
} else {
|
||||
log.Debugf("ChangeConfig %s", err)
|
||||
}
|
||||
@@ -567,13 +570,14 @@ func (self *SInstance) ChangeConfig(ctx context.Context, ncpu int, vmem int) err
|
||||
}
|
||||
|
||||
func (self *SInstance) ChangeConfig2(ctx context.Context, instanceType string) error {
|
||||
status := self.GetStatus()
|
||||
self.Properties.HardwareProfile.VMSize = instanceType
|
||||
self.Properties.ProvisioningState = ""
|
||||
self.Properties.InstanceView = nil
|
||||
log.Debugf("Try HardwareProfile : %s", instanceType)
|
||||
err := self.host.zone.region.client.Update(jsonutils.Marshal(self), nil)
|
||||
if err == nil {
|
||||
return cloudprovider.WaitStatus(self, self.GetStatus(), 10*time.Second, 300*time.Second)
|
||||
return cloudprovider.WaitStatus(self, status, 10*time.Second, 300*time.Second)
|
||||
} else {
|
||||
log.Errorf("ChangeConfig2 %s", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user