忽略因镜像问题导致初始化失败

This commit is contained in:
屈轩
2019-04-02 21:36:58 +08:00
committed by Yousong Zhou
parent 428d528b5e
commit 328d261163
3 changed files with 32 additions and 11 deletions
+18 -3
View File
@@ -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())
+5 -3
View File
@@ -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 {
+9 -5
View File
@@ -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)
}