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:
屈轩
2018-12-08 17:28:29 +08:00
6 changed files with 46 additions and 0 deletions
+10
View File
@@ -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 {
+4
View File
@@ -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")
+17
View File
@@ -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)
+4
View File
@@ -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 {
+6
View File
@@ -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
+5
View File
@@ -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 {