From e7db13d99ae592e31230fda0595dfcd8a9b98349 Mon Sep 17 00:00:00 2001 From: TangBin Date: Thu, 25 Apr 2019 11:26:31 +0800 Subject: [PATCH] huawei import keypair & rebuild root & skus filter fix --- pkg/compute/models/skus.go | 12 +++++++----- pkg/util/huawei/instance.go | 6 +++--- pkg/util/huawei/keypair.go | 19 ++++++------------- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/pkg/compute/models/skus.go b/pkg/compute/models/skus.go index baf1bc8981..54872f2628 100644 --- a/pkg/compute/models/skus.go +++ b/pkg/compute/models/skus.go @@ -486,11 +486,13 @@ func providerFilter(q *sqlchemy.SQuery, provider string, public_cloud bool) *sql if public_cloud { providerTable := CloudproviderManager.Query().SubQuery() providerRegionTable := CloudproviderRegionManager.Query().SubQuery() - q = q.Join(providerRegionTable, sqlchemy.Equals(q.Field("cloudregion_id"), providerRegionTable.Field("cloudregion_id"))) - q = q.Join(providerTable, sqlchemy.Equals(providerRegionTable.Field("cloudprovider_id"), providerTable.Field("id"))) - q = q.Filter(sqlchemy.IsTrue(providerTable.Field("enabled"))) - q = q.Filter(sqlchemy.In(providerTable.Field("status"), api.CLOUD_PROVIDER_VALID_STATUS)) - q = q.Filter(sqlchemy.Equals(providerTable.Field("health_status"), api.CLOUD_PROVIDER_HEALTH_NORMAL)) + + subq := providerRegionTable.Query(sqlchemy.DISTINCT("cloudregion_id", providerRegionTable.Field("cloudregion_id"))) + subq = subq.Join(providerTable, sqlchemy.Equals(providerRegionTable.Field("cloudprovider_id"), providerTable.Field("id"))) + subq = subq.Filter(sqlchemy.IsTrue(providerTable.Field("enabled"))) + subq = subq.Filter(sqlchemy.In(providerTable.Field("status"), api.CLOUD_PROVIDER_VALID_STATUS)) + subq = subq.Filter(sqlchemy.Equals(providerTable.Field("health_status"), api.CLOUD_PROVIDER_HEALTH_NORMAL)) + q = q.Filter(sqlchemy.In(q.Field("cloudregion_id"), subq.SubQuery())) } // 过滤出network usable的sku diff --git a/pkg/util/huawei/instance.go b/pkg/util/huawei/instance.go index b882a6b68f..420764e8d6 100644 --- a/pkg/util/huawei/instance.go +++ b/pkg/util/huawei/instance.go @@ -1041,9 +1041,9 @@ func (self *SRegion) DeployVM(instanceId string, name string, password string, k serverObj.Add(jsonutils.NewString(name), "name") } - if len(description) > 0 { - serverObj.Add(jsonutils.NewString(description), "description") - } + // if len(description) > 0 { + // serverObj.Add(jsonutils.NewString(description), "description") + // } if serverObj.Size() > 0 { params := jsonutils.NewDict() diff --git a/pkg/util/huawei/keypair.go b/pkg/util/huawei/keypair.go index 70eb71b680..f0d4db7f14 100644 --- a/pkg/util/huawei/keypair.go +++ b/pkg/util/huawei/keypair.go @@ -72,20 +72,13 @@ func (self *SRegion) lookUpKeypair(publicKey string) (string, error) { // https://support.huaweicloud.com/api-ecs/zh-cn_topic_0020212678.html func (self *SRegion) ImportKeypair(name, publicKey string) (*SKeypair, error) { - fingerprint, err := self.getFingerprint(publicKey) - if err != nil { - return nil, err - } - - keypair := SKeypair{ - Name: name, - PublicKey: publicKey, - Fingerprint: fingerprint, - } - - keypairObj := jsonutils.Marshal(keypair) + keypairObj := jsonutils.NewDict() + keypairObj.Add(jsonutils.NewString(name), "name") + keypairObj.Add(jsonutils.NewString(publicKey), "public_key") + params := jsonutils.NewDict() + params.Set("keypair", keypairObj) ret := SKeypair{} - err = DoCreate(self.ecsClient.Keypairs.Create, keypairObj, &ret) + err := DoCreate(self.ecsClient.Keypairs.Create, params, &ret) return &ret, err }