mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge branch 'hotfix/qx-validate-eip-change-bandwidth' of ssh://git.yunion.io/~quxuan/onecloud into release/2.4.0
This commit is contained in:
@@ -15,6 +15,7 @@ var (
|
||||
type ICloudProviderFactory interface {
|
||||
GetProvider(providerId, providerName, url, account, secret string) (ICloudProvider, error)
|
||||
GetId() string
|
||||
ValidateChangeBandwidth(instanceId string, bandwidth int64) error
|
||||
}
|
||||
|
||||
type ICloudProvider interface {
|
||||
@@ -49,6 +50,15 @@ func RegisterFactory(factory ICloudProviderFactory) {
|
||||
providerTable[factory.GetId()] = factory
|
||||
}
|
||||
|
||||
func GetProviderDriver(provider string) (ICloudProviderFactory, error) {
|
||||
factory, ok := providerTable[provider]
|
||||
if ok {
|
||||
return factory, nil
|
||||
}
|
||||
log.Errorf("Provider %s not registerd", provider)
|
||||
return nil, fmt.Errorf("No such provider %s", provider)
|
||||
}
|
||||
|
||||
func GetProvider(providerId, providerName, accessUrl, account, secret, provider string) (ICloudProvider, error) {
|
||||
factory, ok := providerTable[provider]
|
||||
if ok {
|
||||
|
||||
@@ -403,6 +403,10 @@ func (self *SCloudprovider) MarkStartSync(userCred mcclient.TokenCredential) {
|
||||
self.SetStatus(userCred, CLOUD_PROVIDER_START_SYNC, "")
|
||||
}
|
||||
|
||||
func (self *SCloudprovider) GetProviderDriver() (cloudprovider.ICloudProviderFactory, error) {
|
||||
return cloudprovider.GetProviderDriver(self.Provider)
|
||||
}
|
||||
|
||||
func (self *SCloudprovider) GetDriver() (cloudprovider.ICloudProvider, error) {
|
||||
if !self.Enabled {
|
||||
return nil, fmt.Errorf("Cloud provider is not enabled")
|
||||
|
||||
@@ -735,6 +735,13 @@ func (self *SElasticip) AllowPerformChangeBandwidth(ctx context.Context, userCre
|
||||
return self.IsOwner(userCred) || db.IsAdminAllowPerform(userCred, self, "change-bandwidth")
|
||||
}
|
||||
|
||||
func (self *SElasticip) GetProviderDriver() (cloudprovider.ICloudProviderFactory, error) {
|
||||
if provider := self.GetCloudprovider(); provider != nil {
|
||||
return provider.GetProviderDriver()
|
||||
}
|
||||
return nil, fmt.Errorf("failed to find provider for eip %s", self.Name)
|
||||
}
|
||||
|
||||
func (self *SElasticip) PerformChangeBandwidth(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
|
||||
if self.Status != EIP_STATUS_READY {
|
||||
return nil, httperrors.NewInvalidStatusError("cannot change bandwidth in status %s", self.Status)
|
||||
@@ -744,6 +751,16 @@ func (self *SElasticip) PerformChangeBandwidth(ctx context.Context, userCred mcc
|
||||
if err != nil || bandwidth <= 0 {
|
||||
return nil, httperrors.NewInputParameterError("Invalid bandwidth")
|
||||
}
|
||||
|
||||
dirver, err := self.GetProviderDriver()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := dirver.ValidateChangeBandwidth(self.AssociateId, bandwidth); err != nil {
|
||||
return nil, httperrors.NewInputParameterError(err.Error())
|
||||
}
|
||||
|
||||
err = self.StartEipChangeBandwidthTask(ctx, userCred, bandwidth)
|
||||
if err != nil {
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
|
||||
@@ -15,6 +15,10 @@ func (self *SAliyunProviderFactory) GetId() string {
|
||||
return aliyun.CLOUD_PROVIDER_ALIYUN
|
||||
}
|
||||
|
||||
func (self *SAliyunProviderFactory) ValidateChangeBandwidth(instanceId string, bandwidth int64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SAliyunProviderFactory) GetProvider(providerId, providerName, url, account, secret string) (cloudprovider.ICloudProvider, error) {
|
||||
/* provider, ok := self.providerTable[providerId]
|
||||
if ok {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/onecloud/pkg/cloudprovider"
|
||||
"yunion.io/x/onecloud/pkg/util/azure"
|
||||
@@ -14,6 +16,10 @@ func (self *SAzureProviderFactory) GetId() string {
|
||||
return azure.CLOUD_PROVIDER_AZURE
|
||||
}
|
||||
|
||||
func (self *SAzureProviderFactory) ValidateChangeBandwidth(instanceId string, bandwidth int64) error {
|
||||
return fmt.Errorf("Not support change bandwidth for %s", azure.CLOUD_PROVIDER_AZURE)
|
||||
}
|
||||
|
||||
func (self *SAzureProviderFactory) GetProvider(providerId, providerName, url, account, secret string) (cloudprovider.ICloudProvider, error) {
|
||||
if client, err := azure.NewAzureClient(providerId, providerName, account, secret, url); err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -19,6 +20,10 @@ func (self *SESXiProviderFactory) GetId() string {
|
||||
return esxi.CLOUD_PROVIDER_VMWARE
|
||||
}
|
||||
|
||||
func (self *SESXiProviderFactory) ValidateChangeBandwidth(instanceId string, bandwidth int64) error {
|
||||
return fmt.Errorf("Not support change bandwidth for %s", esxi.CLOUD_PROVIDER_VMWARE)
|
||||
}
|
||||
|
||||
func parseHostPort(host string, defPort int) (string, int, error) {
|
||||
colonPos := strings.IndexByte(host, ':')
|
||||
if colonPos > 0 {
|
||||
|
||||
Reference in New Issue
Block a user