From e6d68a947c1ea62a1aea4bc1d436dcf892236514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Thu, 22 Nov 2018 20:56:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E4=BB=8E2.3.0=E9=99=8D?= =?UTF-8?q?=E7=BA=A7=E5=88=B02.2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/cloudaccounts.go | 23 +++++++++++---- pkg/compute/models/cloudproviders.go | 43 +++++++++------------------- pkg/util/azure/azure.go | 3 +- 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/pkg/compute/models/cloudaccounts.go b/pkg/compute/models/cloudaccounts.go index 32b4762ff5..8dea136422 100644 --- a/pkg/compute/models/cloudaccounts.go +++ b/pkg/compute/models/cloudaccounts.go @@ -230,6 +230,9 @@ func (self *SCloudaccount) PerformUpdateCredential(ctx context.Context, userCred changed := false secret, _ := data.GetString("secret") account, _ := data.GetString("account") + if len(account) > 0 && self.Provider == CLOUD_PROVIDER_AZURE { + return nil, httperrors.NewInputParameterError("not allow update azure tenant info") + } accessUrl, _ := data.GetString("access_url") if len(secret) > 0 || len(account) > 0 || len(accessUrl) > 0 { // check duplication @@ -276,6 +279,11 @@ func (self *SCloudaccount) PerformUpdateCredential(ctx context.Context, userCred if err != nil { return nil, err } + + for _, provider := range self.GetCloudproviders() { + provider.savePassword(secret) + } + changed = true } @@ -385,6 +393,7 @@ func (self *SCloudaccount) ImportSubAccount(ctx context.Context, userCred mcclie newCloudprovider.Account = subAccount.Account newCloudprovider.CloudaccountId = self.Id newCloudprovider.Provider = self.Provider + newCloudprovider.AccessUrl = self.AccessUrl newCloudprovider.Enabled = true newCloudprovider.Status = CLOUD_PROVIDER_CONNECTED newCloudprovider.Name = subAccount.Name @@ -400,6 +409,13 @@ func (self *SCloudaccount) ImportSubAccount(ctx context.Context, userCred mcclie return nil, isNew, err } + passwd, err := self.getPassword() + if err != nil { + return nil, isNew, err + } + + newCloudprovider.savePassword(passwd) + if autoCreateProject { err = newCloudprovider.syncProject(ctx) if err != nil { @@ -492,12 +508,12 @@ func (self *SCloudaccount) GetExtraDetails(ctx context.Context, userCred mcclien } func migrateCloudprovider(cloudprovider *SCloudprovider) error { - mainAccount, providerAccount, providerName := cloudprovider.Account, cloudprovider.Account, cloudprovider.Name + mainAccount, providerName := cloudprovider.Account, cloudprovider.Name if cloudprovider.Provider == CLOUD_PROVIDER_AZURE { accountInfo := strings.Split(cloudprovider.Account, "/") if len(accountInfo) == 2 { - mainAccount, providerAccount = accountInfo[0], accountInfo[1] + mainAccount = accountInfo[0] if len(cloudprovider.Description) > 0 { providerName = cloudprovider.Description } @@ -549,9 +565,6 @@ func migrateCloudprovider(cloudprovider *SCloudprovider) error { _, err = CloudproviderManager.TableSpec().Update(cloudprovider, func() error { cloudprovider.CloudaccountId = account.Id - cloudprovider.Account = providerAccount - cloudprovider.Secret = "" - cloudprovider.Name = providerName return nil }) if err != nil { diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index 5b25fb1cbb..c40905d109 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -378,47 +378,30 @@ func (self *SCloudprovider) GetDriver() (cloudprovider.ICloudProvider, error) { return nil, fmt.Errorf("Cloud provider is not enabled") } - account, err := self.getAccount() + passwd, err := self.getPassword() if err != nil { return nil, err } - return cloudprovider.GetProvider(self.Id, self.Name, account.AccessUrl, account.Account, account.Secret, self.Provider) + return cloudprovider.GetProvider(self.Id, self.Name, self.AccessUrl, self.Account, passwd, self.Provider) } -type SAccount struct { - AccessUrl string - Account string - Secret string +func (self *SCloudprovider) savePassword(secret string) error { + sec, err := utils.EncryptAESBase64(self.Id, secret) + if err != nil { + return err + } + + _, err = self.GetModelManager().TableSpec().Update(self, func() error { + self.Secret = sec + return nil + }) + return err } func (self *SCloudprovider) GetCloudaccount() *SCloudaccount { return CloudaccountManager.FetchCloudaccountById(self.CloudaccountId) } -func (self *SCloudprovider) getAccount() (SAccount, error) { - account := SAccount{} - - cloudaccount := self.GetCloudaccount() - if cloudaccount == nil { - return account, fmt.Errorf("fail to find cloudaccount???") - } - - passwd, err := cloudaccount.getPassword() - if err != nil { - return account, err - } - - account.Account = cloudaccount.Account - account.AccessUrl = cloudaccount.AccessUrl - account.Secret = passwd - - if len(self.Account) > 0 && self.Account != account.Account { - account.Account = fmt.Sprintf("%s/%s", account.Account, self.Account) - } - - return account, nil -} - func (self *SCloudprovider) SaveSysInfo(info jsonutils.JSONObject) { self.GetModelManager().TableSpec().Update(self, func() error { self.Sysinfo = info diff --git a/pkg/util/azure/azure.go b/pkg/util/azure/azure.go index ad7268feb6..9d459333a5 100644 --- a/pkg/util/azure/azure.go +++ b/pkg/util/azure/azure.go @@ -626,10 +626,11 @@ func (self *SAzureClient) GetSubAccounts() (subAccounts []cloudprovider.SSubAcco } subAccounts = make([]cloudprovider.SSubAccount, len(subscriptions)) for i, subscription := range subscriptions { - subAccounts[i].Account, err = subscription.GetString("subscriptionId") + subscriptionId, err := subscription.GetString("subscriptionId") if err != nil { return nil, err } + subAccounts[i].Account = fmt.Sprintf("%s/%s", self.tenantId, subscriptionId) subAccounts[i].State, err = subscription.GetString("state") if err != nil { return nil, err