From 16320449ec0a01fe9b2206acd070113bb6cb771d Mon Sep 17 00:00:00 2001 From: TangBin Date: Tue, 5 Mar 2019 11:29:44 +0800 Subject: [PATCH 1/3] eip short desc add ip_addr & guest delete fix --- pkg/compute/models/elasticips.go | 1 + pkg/util/huawei/disk.go | 8 +++++++- pkg/util/huawei/host.go | 4 ++-- pkg/util/huawei/utils.go | 9 +++++++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index dd90cf12a0..5ae96192ba 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -178,6 +178,7 @@ func (self *SElasticip) GetShortDesc(ctx context.Context) *jsonutils.JSONDict { desc.Add(jsonutils.NewInt(int64(self.Bandwidth)), "bandwidth") desc.Add(jsonutils.NewString(self.Mode), "mode") + desc.Add(jsonutils.NewString(self.IpAddr), "ip_addr") // region := self.GetRegion() // if len(region.ExternalId) > 0 { diff --git a/pkg/util/huawei/disk.go b/pkg/util/huawei/disk.go index 5e19812ea9..67ded0b6a4 100644 --- a/pkg/util/huawei/disk.go +++ b/pkg/util/huawei/disk.go @@ -296,7 +296,13 @@ func (self *SDisk) Delete(ctx context.Context) error { log.Errorf("Failed to find disk %s when delete", self.GetId()) return nil } - return self.storage.zone.region.DeleteDisk(self.GetId()) + + err := self.storage.zone.region.DeleteDisk(self.GetId()) + if err != nil { + return err + } + + return cloudprovider.WaitDeleted(self, 5*time.Second, 120*time.Second) } func (self *SDisk) CreateISnapshot(ctx context.Context, name string, desc string) (cloudprovider.ICloudSnapshot, error) { diff --git a/pkg/util/huawei/host.go b/pkg/util/huawei/host.go index 663b2d58d0..550573b127 100644 --- a/pkg/util/huawei/host.go +++ b/pkg/util/huawei/host.go @@ -244,7 +244,7 @@ func (self *SHost) _createVM(name string, imgId string, sysDisk cloudprovider.SD vmId, err := self.zone.region.CreateInstance(name, imgId, instanceType, networkId, secgroupId, secgroup.VpcID, self.zone.GetId(), desc, disks, ipAddr, keypair, passwd, userData, bc) if err != nil { log.Errorf("Failed for %s: %s", instanceType, err) - return "", fmt.Errorf("Failed to create specification %s.%s", instanceType, err.Error()) + return "", fmt.Errorf("create %s failed:%s", instanceType, ErrMessage(err)) } else { return vmId, nil } @@ -271,5 +271,5 @@ func (self *SHost) _createVM(name string, imgId string, sysDisk cloudprovider.SD } } - return "", fmt.Errorf("Failed to create, %s", err.Error()) + return "", fmt.Errorf("create failed: %s", ErrMessage(err)) } diff --git a/pkg/util/huawei/utils.go b/pkg/util/huawei/utils.go index 63bdd69af0..f5976797f6 100644 --- a/pkg/util/huawei/utils.go +++ b/pkg/util/huawei/utils.go @@ -181,3 +181,12 @@ func DoDeleteWithSpec(deleteFunc deleteFunc2, ctx manager.IManagerContext, id st _, err := deleteFunc(ctx, id, spec, queries, params, "") return err } + +func ErrMessage(err error) string { + switch v := err.(type) { + case *httputils.JSONClientError: + return fmt.Sprintf("%d(%s):%s", v.Code, v.Class, v.Details) + default: + return err.Error() + } +} From b5a0af72efdbb206ff7422e8218e08d6b0c97b0e Mon Sep 17 00:00:00 2001 From: TangBin Date: Tue, 5 Mar 2019 12:20:18 +0800 Subject: [PATCH 2/3] huawei disk delete bugfix --- pkg/util/huawei/disk.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/util/huawei/disk.go b/pkg/util/huawei/disk.go index 67ded0b6a4..5a84538e50 100644 --- a/pkg/util/huawei/disk.go +++ b/pkg/util/huawei/disk.go @@ -292,17 +292,17 @@ func (self *SDisk) GetAccessPath() string { } func (self *SDisk) Delete(ctx context.Context) error { - if _, err := self.storage.zone.region.GetDisk(self.GetId()); err == cloudprovider.ErrNotFound { + if disk, err := self.storage.zone.region.GetDisk(self.GetId()); err == cloudprovider.ErrNotFound { log.Errorf("Failed to find disk %s when delete", self.GetId()) return nil + } else if disk.Status != "deleting" { + err := self.storage.zone.region.DeleteDisk(self.GetId()) + if err != nil { + return err + } } - err := self.storage.zone.region.DeleteDisk(self.GetId()) - if err != nil { - return err - } - - return cloudprovider.WaitDeleted(self, 5*time.Second, 120*time.Second) + return cloudprovider.WaitDeleted(self, 10*time.Second, 120*time.Second) } func (self *SDisk) CreateISnapshot(ctx context.Context, name string, desc string) (cloudprovider.ICloudSnapshot, error) { From 9772b3584b7f680b6a70ccea8dca02b2a725921d Mon Sep 17 00:00:00 2001 From: TangBin Date: Tue, 5 Mar 2019 17:55:06 +0800 Subject: [PATCH 3/3] huawei add more region location info --- pkg/util/huawei/latitud_and_longitude.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/util/huawei/latitud_and_longitude.go b/pkg/util/huawei/latitud_and_longitude.go index 6ac84b2ad9..7fa78afec5 100644 --- a/pkg/util/huawei/latitud_and_longitude.go +++ b/pkg/util/huawei/latitud_and_longitude.go @@ -8,10 +8,13 @@ import "yunion.io/x/onecloud/pkg/cloudprovider" var LatitudeAndLongitude = map[string]cloudprovider.SGeographicInfo{ "cn-east-2": {Latitude: 31.210344, Longitude: 121.455364, City: "Shanghai", CountryCode: "CN"}, "cn-north-1": {Latitude: 39.997743, Longitude: 116.304542, City: "Beijing", CountryCode: "CN"}, + "cn-north-4": {Latitude: 39.997743, Longitude: 116.304542, City: "Beijing", CountryCode: "CN"}, "cn-south-1": {Latitude: 23.12911, Longitude: 113.264385, City: "Guangzhou", CountryCode: "CN"}, "cn-south-2": {Latitude: 23.12911, Longitude: 113.264385, City: "Guangzhou", CountryCode: "CN"}, "ap-southeast-1": {Latitude: 22.396428, Longitude: 114.109497, City: "Hongkong", CountryCode: "CN"}, "ap-southeast-2": {Latitude: 13.7563309, Longitude: 100.5017651, City: "Bangkok", CountryCode: "TH"}, + "ap-southeast-3": {Latitude: 1.360386, Longitude: 103.821195, City: "Singapore", CountryCode: "SG"}, "eu-west-0": {Latitude: 48.856614, Longitude: 2.3522219, City: "Paris", CountryCode: "FR"}, "cn-northeast-1": {Latitude: 38.91400300000001, Longitude: 121.614682, City: "Shanghai", CountryCode: "CN"}, + "cn-southwest-2": {Latitude: 26.6470035286, Longitude: 106.6302113880, City: "Guiyang", CountryCode: "CN"}, }