From 396f997cf4075484aa4d26bac5a6ece8117dffa8 Mon Sep 17 00:00:00 2001 From: Rain Date: Mon, 9 Mar 2020 16:51:49 +0800 Subject: [PATCH] fix(esxi): Add two account with same account name --- pkg/compute/models/cloudaccounts.go | 29 +++++++++++++++++++++++++++++ pkg/multicloud/esxi/manager.go | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/pkg/compute/models/cloudaccounts.go b/pkg/compute/models/cloudaccounts.go index 33e82366c2..351d3b00e0 100644 --- a/pkg/compute/models/cloudaccounts.go +++ b/pkg/compute/models/cloudaccounts.go @@ -1082,6 +1082,35 @@ func (manager *SCloudaccountManager) InitializeData() error { if err != nil { return err } + + // init accountid + q = manager.Query().Equals("provider", api.CLOUD_PROVIDER_VMWARE) + cloudaccounts := make([]SCloudaccount, 0) + err = db.FetchModelObjects(manager, q, &cloudaccounts) + if err != nil { + return errors.Wrap(err, "fetch vmware cloudaccount fail") + } + for i := range cloudaccounts { + account := cloudaccounts[i] + if len(account.AccountId) != 0 && account.Account != account.AccountId { + continue + } + url, err := url.Parse(account.AccessUrl) + if err != nil { + return errors.Wrapf(err, "parse vmware account's accessurl %s", account.AccessUrl) + } + hostPort := url.Host + if i := strings.IndexByte(hostPort, ':'); i < 0 { + hostPort = fmt.Sprintf("%s:%d", hostPort, 443) + } + _, err = db.Update(&account, func() error { + account.AccountId = fmt.Sprintf("%s@%s", account.Account, hostPort) + return nil + }) + if err != nil { + return errors.Wrap(err, "db.Update for account") + } + } return nil } diff --git a/pkg/multicloud/esxi/manager.go b/pkg/multicloud/esxi/manager.go index 271f344a0f..823ead0212 100644 --- a/pkg/multicloud/esxi/manager.go +++ b/pkg/multicloud/esxi/manager.go @@ -187,7 +187,7 @@ func (cli *SESXiClient) GetSubAccounts() ([]cloudprovider.SSubAccount, error) { } func (cli *SESXiClient) GetAccountId() string { - return cli.account + return fmt.Sprintf("%s@%s:%d", cli.account, cli.host, cli.port) } func (cli *SESXiClient) GetVersion() string {