Merge pull request #4063 from ioito/hotfix/qx-globalvpc-fix

fix: globalnetwork -> globalvpc
This commit is contained in:
yunion-ci-robot
2019-12-12 10:58:38 +08:00
committed by GitHub
44 changed files with 284 additions and 745 deletions
@@ -21,27 +21,27 @@ import (
)
func init() {
type GlobalNetworkListOptions struct {
type GlobalVpcListOptions struct {
options.BaseListOptions
}
R(&GlobalNetworkListOptions{}, "global-network-list", "List global networks", func(s *mcclient.ClientSession, args *GlobalNetworkListOptions) error {
R(&GlobalVpcListOptions{}, "global-vpc-list", "List global vpcs", func(s *mcclient.ClientSession, args *GlobalVpcListOptions) error {
params, err := options.ListStructToParams(args)
if err != nil {
return err
}
result, err := modules.GlobalNetworks.List(s, params)
result, err := modules.GlobalVpcs.List(s, params)
if err != nil {
return err
}
printList(result, modules.GlobalNetworks.GetColumns(s))
printList(result, modules.GlobalVpcs.GetColumns(s))
return nil
})
type GlobalNetworkShowOptions struct {
ID string `help:"ID or Name of globalnetwork"`
type GlobalVpcShowOptions struct {
ID string `help:"ID or Name of globalvpc"`
}
R(&GlobalNetworkShowOptions{}, "global-network-show", "Show details of a global network", func(s *mcclient.ClientSession, args *GlobalNetworkShowOptions) error {
result, err := modules.GlobalNetworks.GetById(s, args.ID, nil)
R(&GlobalVpcShowOptions{}, "global-vpc-show", "Show details of a global vpc", func(s *mcclient.ClientSession, args *GlobalVpcShowOptions) error {
result, err := modules.GlobalVpcs.GetById(s, args.ID, nil)
if err != nil {
return err
}
+3 -2
View File
@@ -27,8 +27,9 @@ func init() {
type VpcListOptions struct {
options.BaseListOptions
Usable *bool `help:"Filter usable vpcs"`
Region string `help:"ID or Name of region" json:"-"`
Usable *bool `help:"Filter usable vpcs"`
Region string `help:"ID or Name of region" json:"-"`
Globalvpc string `help:"Filter by globalvpc"`
}
R(&VpcListOptions{}, "vpc-list", "List VPCs", func(s *mcclient.ClientSession, opts *VpcListOptions) error {
params, err := options.ListStructToParams(opts)
+44
View File
@@ -0,0 +1,44 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package compute
import (
"yunion.io/x/onecloud/pkg/apis"
)
type GlobalVpcCreateInput struct {
apis.Meta
// description: global vpc name
// unique: true
// required: true
// example: test-globalvpc
Name string `json:"name"`
// description: global vpc description
// required: false
// example: test create globalvpc
Description string `json:"description"`
// description: enable or disable global vpc
// required: false
// default: false
Enabled *bool `json:"enabled"`
// description: global vpc status
// required: false
// default: available
Status string `json:"status"`
}
@@ -15,6 +15,6 @@
package compute
const (
GLOBAL_NETWORK_STATUS_AVAILABLE = "available"
GLOBAL_NETWORK_STATUS_UNKNOWN = "unknown"
GLOBAL_VPC_STATUS_AVAILABLE = "available"
GLOBAL_VPC_STATUS_UNKNOWN = "unknown"
)
+3 -12
View File
@@ -469,19 +469,9 @@ type SExternalProject struct {
apis.SExternalizedResourceBase
}
// SGlobalNetwork is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SGlobalNetwork.
type SGlobalNetwork struct {
// SGlobalVpc is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SGlobalVpc.
type SGlobalVpc struct {
apis.SEnabledStatusStandaloneResourceBase
apis.SExternalizedResourceBase
SManagedResourceBase
Provider string `json:"provider"`
}
// SGlobalnetworkVpc is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SGlobalnetworkVpc.
type SGlobalnetworkVpc struct {
apis.SJointResourceBase
GlobalnetworkId string `json:"globalnetwork_id"`
VpcId string `json:"vpc_id"`
}
// SGroup is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SGroup.
@@ -1327,6 +1317,7 @@ type SVpc struct {
IsDefault bool `json:"is_default"`
CidrBlock string `json:"cidr_block"`
CloudregionId string `json:"cloudregion_id"`
GlobalvpcId string `json:"globalvpc_id"`
}
// SWire is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SWire.
-3
View File
@@ -73,9 +73,6 @@ type ICloudProvider interface {
GetIProjects() ([]ICloudProject, error)
GetIRegionById(id string) (ICloudRegion, error)
GetIGlobalnetworks() ([]ICloudGlobalnetwork, error)
GetIGlobalnetworkById(id string) (ICloudGlobalnetwork, error)
GetOnPremiseIRegion() (ICloudRegion, error)
GetBalance() (float64, string, error)
+1 -5
View File
@@ -413,6 +413,7 @@ type ICloudSnapshotPolicy interface {
}
type ICloudVpc interface {
// GetGlobalId() // 若vpc属于globalvpc,此函数返回格式必须是 'region.GetGlobalId()/vpc.GetGlobalId()'
ICloudResource
GetRegion() ICloudRegion
@@ -427,7 +428,6 @@ type ICloudVpc interface {
GetIWireById(wireId string) (ICloudWire, error)
GetINatGateways() ([]ICloudNatGateway, error)
GetIGlobalNetworkId() string
}
type ICloudWire interface {
@@ -931,7 +931,3 @@ type ICloudEvent interface {
GetCreatedAt() time.Time
}
type ICloudGlobalnetwork interface {
ICloudResource
}
-4
View File
@@ -1440,10 +1440,6 @@ func (account *SCloudaccount) syncAccountStatus(ctx context.Context, userCred mc
log.Errorf("syncCloudproviderRegion fail %s", err)
return err
}
err = providers[i].syncCloudproviderGlobalnetworks(ctx, userCred)
if err != nil {
log.Errorf("failed to sync cloudprovider globalnetwork for %s %s error: %v", providers[i].Provider, providers[i].Name, err)
}
}
}
return nil
-20
View File
@@ -1085,25 +1085,6 @@ func (provider *SCloudprovider) markProviderConnected(ctx context.Context, userC
return provider.ClearSchedDescCache()
}
func (provider *SCloudprovider) syncCloudproviderGlobalnetworks(ctx context.Context, userCred mcclient.TokenCredential) error {
driver, err := provider.GetProvider()
if err != nil {
return err
}
if !driver.GetFactory().IsOnPremise() {
globalnetworks, err := driver.GetIGlobalnetworks()
if err != nil {
return errors.Wrap(err, "GetIGlobalnetworks")
}
result := GlobalNetworkManager.SyncGlobalnetworks(ctx, userCred, provider, globalnetworks)
if result.IsError() {
log.Errorf("syncGlobalnetworks fail %s", result.Result())
}
return nil
}
return nil
}
func (provider *SCloudprovider) prepareCloudproviderRegions(ctx context.Context, userCred mcclient.TokenCredential) ([]SCloudproviderregion, error) {
driver, err := provider.GetProvider()
if err != nil {
@@ -1200,7 +1181,6 @@ func (self *SCloudprovider) RealDelete(ctx context.Context, userCred mcclient.To
DBInstanceBackupManager,
ElasticcacheManager,
VpcManager,
GlobalNetworkManager,
ElasticipManager,
NetworkInterfaceManager,
CloudproviderRegionManager,
-233
View File
@@ -1,233 +0,0 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package models
import (
"context"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
"yunion.io/x/pkg/errors"
"yunion.io/x/pkg/util/compare"
"yunion.io/x/sqlchemy"
api "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/cloudcommon/db"
"yunion.io/x/onecloud/pkg/cloudcommon/db/lockman"
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
"yunion.io/x/onecloud/pkg/cloudprovider"
"yunion.io/x/onecloud/pkg/mcclient"
)
type SGlobalNetworkManager struct {
db.SEnabledStatusStandaloneResourceBaseManager
}
var GlobalNetworkManager *SGlobalNetworkManager
func init() {
GlobalNetworkManager = &SGlobalNetworkManager{
SEnabledStatusStandaloneResourceBaseManager: db.NewEnabledStatusStandaloneResourceBaseManager(
SGlobalNetwork{},
"globalnetworks_tbl",
"globalnetwork",
"globalnetworks",
),
}
GlobalNetworkManager.SetVirtualObject(GlobalNetworkManager)
}
type SGlobalNetwork struct {
db.SEnabledStatusStandaloneResourceBase
db.SExternalizedResourceBase
SManagedResourceBase
Provider string `width:"64" charset:"ascii" list:"user"`
}
func (manager *SGlobalNetworkManager) AllowCreateItem(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool {
//current not support create
return false
}
func (self *SGlobalNetwork) ValidateDeleteCondition(ctx context.Context) error {
return self.SEnabledStatusStandaloneResourceBase.ValidateDeleteCondition(ctx)
}
func (self *SGlobalNetwork) GetExtraDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*jsonutils.JSONDict, error) {
return self.SEnabledStatusStandaloneResourceBase.GetExtraDetails(ctx, userCred, query)
}
func (self *SGlobalNetwork) GetCustomizeColumns(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict {
return self.SEnabledStatusStandaloneResourceBase.GetCustomizeColumns(ctx, userCred, query)
}
func (manager *SGlobalNetworkManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
return manager.SEnabledStatusStandaloneResourceBaseManager.ValidateCreateData(ctx, userCred, ownerId, query, data)
}
func (self *SGlobalNetwork) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
return self.SEnabledStatusStandaloneResourceBase.ValidateUpdateData(ctx, userCred, query, data)
}
func (self *SGlobalNetwork) Delete(ctx context.Context, userCred mcclient.TokenCredential) error {
log.Infof("SGlobalNetwork delete do nothing")
self.SetStatus(userCred, api.NETWORK_STATUS_START_DELETE, "")
return nil
}
func (self *SGlobalNetwork) CustomizeDelete(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) error {
if len(self.ExternalId) > 0 {
return self.StartDeleteGlobalNetworkTask(ctx, userCred)
}
return self.RealDelete(ctx, userCred)
}
func (self *SGlobalNetwork) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error {
db.OpsLog.LogEvent(self, db.ACT_DELOCATE, self.GetShortDesc(ctx), userCred)
self.SetStatus(userCred, api.NETWORK_STATUS_DELETED, "real delete")
return self.SEnabledStatusStandaloneResourceBase.Delete(ctx, userCred)
}
func (self *SGlobalNetwork) StartDeleteGlobalNetworkTask(ctx context.Context, userCred mcclient.TokenCredential) error {
task, err := taskman.TaskManager.NewTask(ctx, "GlobalNetworkDeleteTask", self, userCred, nil, "", "", nil)
if err != nil {
return errors.Wrapf(err, "NewTask")
}
task.ScheduleRun(nil)
return nil
}
func (manager *SGlobalNetworkManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*sqlchemy.SQuery, error) {
return manager.SEnabledStatusStandaloneResourceBaseManager.ListItemFilter(ctx, q, userCred, query)
}
func (self *SGlobalNetwork) ValidateUpdateCondition(ctx context.Context) error {
return self.SEnabledStatusStandaloneResourceBase.ValidateUpdateCondition(ctx)
}
func (manager *SGlobalNetworkManager) GetGlobalNetworksByManagerId(id string) ([]SGlobalNetwork, error) {
q := manager.Query().Equals("manager_id", id)
q = q.Filter(sqlchemy.NOT(sqlchemy.IsNullOrEmpty(q.Field("external_id"))))
globalnetworks := []SGlobalNetwork{}
err := db.FetchModelObjects(manager, q, &globalnetworks)
if err != nil {
return nil, err
}
return globalnetworks, nil
}
func (self *SGlobalNetwork) GetGlobalNetworkVpcs() ([]SGlobalnetworkVpc, error) {
gnvs := []SGlobalnetworkVpc{}
q := GlobalnetworkVpcManager.Query().Equals("globalnetwork_id", self.Id)
err := db.FetchModelObjects(GlobalnetworkVpcManager, q, &gnvs)
if err != nil {
return nil, err
}
return gnvs, nil
}
func (manager *SGlobalNetworkManager) SyncGlobalnetworks(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, exts []cloudprovider.ICloudGlobalnetwork) compare.SyncResult {
lockman.LockClass(ctx, manager, db.GetLockClassKey(manager, userCred))
defer lockman.ReleaseClass(ctx, manager, db.GetLockClassKey(manager, userCred))
result := compare.SyncResult{}
dbNetworks, err := manager.GetGlobalNetworksByManagerId(provider.Id)
if err != nil {
result.Error(err)
return result
}
removed := make([]SGlobalNetwork, 0)
commondb := make([]SGlobalNetwork, 0)
commonext := make([]cloudprovider.ICloudGlobalnetwork, 0)
added := make([]cloudprovider.ICloudGlobalnetwork, 0)
err = compare.CompareSets(dbNetworks, exts, &removed, &commondb, &commonext, &added)
if err != nil {
result.Error(errors.Wrap(err, "CompareSets"))
return result
}
for i := 0; i < len(removed); i += 1 {
err = removed[i].syncRemoveGlobalnetwork(ctx, userCred)
if err != nil {
result.DeleteError(err)
continue
}
result.Delete()
}
for i := 0; i < len(commondb); i += 1 {
// update
err = commondb[i].syncWithCloudGlobalnetwork(ctx, userCred, provider, commonext[i])
if err != nil {
result.UpdateError(err)
continue
}
result.Update()
}
for i := 0; i < len(added); i += 1 {
err := manager.newFromCloudGlobalnetwork(ctx, userCred, provider, added[i])
if err != nil {
result.AddError(err)
continue
}
result.Add()
}
return result
}
func (self *SGlobalNetwork) syncWithCloudGlobalnetwork(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, ext cloudprovider.ICloudGlobalnetwork) error {
diff, err := db.UpdateWithLock(ctx, self, func() error {
self.Status = ext.GetStatus()
return nil
})
if err != nil {
return errors.Wrap(err, "UpdateWithLock")
}
db.OpsLog.LogSyncUpdate(self, diff, userCred)
return nil
}
func (self *SGlobalNetwork) syncRemoveGlobalnetwork(ctx context.Context, userCred mcclient.TokenCredential) error {
err := self.ValidateDeleteCondition(ctx)
if err != nil {
return err
}
return self.RealDelete(ctx, userCred)
}
func (manager *SGlobalNetworkManager) newFromCloudGlobalnetwork(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, ext cloudprovider.ICloudGlobalnetwork) error {
network := SGlobalNetwork{}
network.SetModelManager(manager, &network)
newName, err := db.GenerateName(manager, nil, ext.GetName())
if err != nil {
return errors.Wrap(err, "GenerateName")
}
network.ExternalId = ext.GetGlobalId()
network.Name = newName
network.Status = ext.GetStatus()
network.Enabled = true
network.ManagerId = provider.Id
network.Provider = provider.Provider
err = manager.TableSpec().Insert(&network)
if err != nil {
return errors.Wrap(err, "Insert")
}
db.OpsLog.LogEvent(&network, db.ACT_CREATE, network.GetShortDesc(ctx), userCred)
return nil
}
-130
View File
@@ -1,130 +0,0 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package models
import (
"context"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/errors"
"yunion.io/x/sqlchemy"
"yunion.io/x/onecloud/pkg/cloudcommon/db"
"yunion.io/x/onecloud/pkg/mcclient"
)
type SGlobalnetworkVpcManager struct {
db.SJointResourceBaseManager
}
var GlobalnetworkVpcManager *SGlobalnetworkVpcManager
func init() {
db.InitManager(func() {
GlobalnetworkVpcManager = &SGlobalnetworkVpcManager{
SJointResourceBaseManager: db.NewJointResourceBaseManager(
SGlobalnetworkVpc{},
"globalnetworkvpcs_tbl",
"globalnetworkvpc",
"globalnetworkvpcs",
GlobalNetworkManager,
VpcManager,
),
}
GlobalnetworkVpcManager.SetVirtualObject(GlobalnetworkVpcManager)
})
}
type SGlobalnetworkVpc struct {
db.SJointResourceBase
GlobalnetworkId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required" index:"true"`
VpcId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required" index:"true"`
}
func (manager *SGlobalnetworkVpcManager) GetMasterFieldName() string {
return "globalnetwork_id"
}
func (manager *SGlobalnetworkVpcManager) GetSlaveFieldName() string {
return "vpc_id"
}
func (joint *SGlobalnetworkVpc) Master() db.IStandaloneModel {
return db.JointMaster(joint)
}
func (joint *SGlobalnetworkVpc) Slave() db.IStandaloneModel {
return db.JointSlave(joint)
}
func (manager *SGlobalnetworkVpcManager) AllowListItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool {
return db.IsAdminAllowList(userCred, manager)
}
func (manager *SGlobalnetworkVpcManager) AllowCreateItem(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool {
return db.IsAdminAllowCreate(userCred, manager)
}
func (manager *SGlobalnetworkVpcManager) AllowListDescendent(ctx context.Context, userCred mcclient.TokenCredential, model db.IStandaloneModel, query jsonutils.JSONObject) bool {
return db.IsAdminAllowList(userCred, manager)
}
func (manager *SGlobalnetworkVpcManager) AllowAttach(ctx context.Context, userCred mcclient.TokenCredential, master db.IStandaloneModel, slave db.IStandaloneModel) bool {
return db.IsAdminAllowCreate(userCred, manager)
}
func (self *SGlobalnetworkVpc) AllowGetDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool {
return db.IsAdminAllowGet(userCred, self)
}
func (self *SGlobalnetworkVpc) AllowUpdateItem(ctx context.Context, userCred mcclient.TokenCredential) bool {
return db.IsAdminAllowUpdate(userCred, self)
}
func (self *SGlobalnetworkVpc) AllowDeleteItem(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool {
return db.IsAdminAllowDelete(userCred, self)
}
func (self *SGlobalnetworkVpc) Detach(ctx context.Context, userCred mcclient.TokenCredential) error {
return db.DetachJoint(ctx, userCred, self)
}
func (self *SGlobalnetworkVpc) GetCustomizeColumns(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict {
return self.SJointResourceBase.GetCustomizeColumns(ctx, userCred, query)
}
func (self *SGlobalnetworkVpc) GetExtraDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*jsonutils.JSONDict, error) {
return self.SJointResourceBase.GetExtraDetails(ctx, userCred, query)
}
func (manager *SGlobalnetworkVpcManager) NewGlobalnetworkVpc(vpc *SVpc, globalnetwork *SGlobalNetwork) error {
q := manager.Query().Equals("vpc_id", vpc.Id).Equals("globalnetwork_id", globalnetwork.Id)
count, err := q.CountWithError()
if err != nil {
return errors.Wrap(err, "CountWithError")
}
if count > 1 {
return sqlchemy.ErrDuplicateEntry
}
if count == 1 {
return nil
}
gv := &SGlobalnetworkVpc{}
gv.SetModelManager(manager, gv)
gv.VpcId = vpc.Id
gv.GlobalnetworkId = globalnetwork.Id
return manager.TableSpec().Insert(gv)
}
+100
View File
@@ -0,0 +1,100 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package models
import (
"context"
"fmt"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/errors"
"yunion.io/x/sqlchemy"
api "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/cloudcommon/db"
"yunion.io/x/onecloud/pkg/mcclient"
)
type SGlobalVpcManager struct {
db.SEnabledStatusStandaloneResourceBaseManager
}
var GlobalVpcManager *SGlobalVpcManager
func init() {
GlobalVpcManager = &SGlobalVpcManager{
SEnabledStatusStandaloneResourceBaseManager: db.NewEnabledStatusStandaloneResourceBaseManager(
SGlobalVpc{},
"globalvpcs_tbl",
"globalvpc",
"globalvpcs",
),
}
GlobalVpcManager.SetVirtualObject(GlobalVpcManager)
}
type SGlobalVpc struct {
db.SEnabledStatusStandaloneResourceBase
}
func (manager *SGlobalVpcManager) AllowCreateItem(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool {
return db.IsAdminAllowCreate(userCred, manager)
}
func (self *SGlobalVpc) ValidateDeleteCondition(ctx context.Context) error {
vpcs, err := self.GetVpcs()
if err != nil {
return errors.Wrap(err, "self.GetVpcs")
}
if len(vpcs) > 0 {
return fmt.Errorf("not an empty globalvpc")
}
return self.SEnabledStatusStandaloneResourceBase.ValidateDeleteCondition(ctx)
}
func (self *SGlobalVpc) GetVpcs() ([]SVpc, error) {
vpcs := []SVpc{}
q := VpcManager.Query().Equals("globalvpc_id", self.Id)
err := db.FetchModelObjects(VpcManager, q, &vpcs)
if err != nil {
return nil, err
}
return vpcs, nil
}
func (self *SGlobalVpc) GetExtraDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*jsonutils.JSONDict, error) {
return self.SEnabledStatusStandaloneResourceBase.GetExtraDetails(ctx, userCred, query)
}
func (self *SGlobalVpc) GetCustomizeColumns(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict {
return self.SEnabledStatusStandaloneResourceBase.GetCustomizeColumns(ctx, userCred, query)
}
func (manager *SGlobalVpcManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input *api.GlobalVpcCreateInput) (*jsonutils.JSONDict, error) {
input.Status = api.GLOBAL_VPC_STATUS_AVAILABLE
return manager.SEnabledStatusStandaloneResourceBaseManager.ValidateCreateData(ctx, userCred, ownerId, query, input.JSON(input))
}
func (self *SGlobalVpc) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
return self.SEnabledStatusStandaloneResourceBase.ValidateUpdateData(ctx, userCred, query, data)
}
func (manager *SGlobalVpcManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*sqlchemy.SQuery, error) {
return manager.SEnabledStatusStandaloneResourceBaseManager.ListItemFilter(ctx, q, userCred, query)
}
func (self *SGlobalVpc) ValidateUpdateCondition(ctx context.Context) error {
return self.SEnabledStatusStandaloneResourceBase.ValidateUpdateCondition(ctx)
}
-53
View File
@@ -1624,56 +1624,3 @@ func (manager *SSecurityGroupCacheManager) purgeAll(ctx context.Context, userCre
}
return nil
}
func (gnv *SGlobalnetworkVpc) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
lockman.LockObject(ctx, gnv)
defer lockman.ReleaseObject(ctx, gnv)
return gnv.Delete(ctx, userCred)
}
func (gn *SGlobalNetwork) purgeGlobalNetworkVpcs(ctx context.Context, userCred mcclient.TokenCredential) error {
globalnetworkVpcs, err := gn.GetGlobalNetworkVpcs()
if err != nil {
return errors.Wrap(err, "gn.GetGlobalNetworkVpcs")
}
for i := range globalnetworkVpcs {
err = globalnetworkVpcs[i].purge(ctx, userCred)
if err != nil {
return errors.Wrap(err, "globalnetworkVpcs[i].purge")
}
}
return nil
}
func (gn *SGlobalNetwork) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
lockman.LockObject(ctx, gn)
defer lockman.ReleaseObject(ctx, gn)
err := gn.purgeGlobalNetworkVpcs(ctx, userCred)
if err != nil {
return errors.Wrap(err, "gn.purgeGlobalNetworkVpcs")
}
err = gn.ValidateDeleteCondition(ctx)
if err != nil {
return errors.Wrapf(err, "globalnetwork %s(%s)", gn.Name, gn.Id)
}
return gn.RealDelete(ctx, userCred)
}
func (manager *SGlobalNetworkManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
globalnetworks := []SGlobalNetwork{}
err := fetchByManagerId(manager, providerId, &globalnetworks)
if err != nil {
return err
}
for i := range globalnetworks {
err := globalnetworks[i].purge(ctx, userCred)
if err != nil {
return err
}
}
return nil
}
+2 -1
View File
@@ -117,7 +117,8 @@ type IRegionDriver interface {
RequestSyncSecurityGroup(ctx context.Context, userCred mcclient.TokenCredential, vpcId string, vpc *SVpc, secgroup *SSecurityGroup) (string, error)
IsSupportClassicSecurityGroup() bool
IsSecurityGroupBelongVpc() bool
IsSecurityGroupBelongGlobalNetwork() bool //安全组子账号范围内可用
IsVpcBelongGlobalVpc() bool
IsSecurityGroupBelongGlobalVpc() bool //安全组子账号范围内可用
GetDefaultSecurityGroupVpcId() string
GetSecurityGroupVpcId(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion, host *SHost, vpc *SVpc, classic bool) (string, error)
+1 -1
View File
@@ -223,7 +223,7 @@ func (manager *SSecurityGroupCacheManager) SyncSecurityGroupCaches(ctx context.C
}
vpcId := ""
if region.GetDriver().IsSecurityGroupBelongGlobalNetwork() { //globalnetwork没有region属性
if region.GetDriver().IsSecurityGroupBelongGlobalVpc() {
vpcId, err = region.GetDriver().GetSecurityGroupVpcId(ctx, userCred, region, nil, vpc, false)
if err != nil {
syncResult.Error(errors.Wrap(err, "GetSecurityGroupVpcId"))
+93 -51
View File
@@ -65,6 +65,7 @@ type SVpc struct {
CidrBlock string `charset:"ascii" nullable:"true" list:"admin" create:"admin_required"`
CloudregionId string `width:"36" charset:"ascii" nullable:"false" list:"admin" create:"admin_required"`
GlobalvpcId string `width:"36" charset:"ascii" list:"user"`
}
func (manager *SVpcManager) GetContextManagers() [][]db.IModelManager {
@@ -347,36 +348,30 @@ func (manager *SVpcManager) SyncVPCs(ctx context.Context, userCred mcclient.Toke
err = commondb[i].SyncWithCloudVpc(ctx, userCred, commonext[i])
if err != nil {
syncResult.UpdateError(err)
} else {
syncMetadata(ctx, userCred, &commondb[i], commonext[i])
localVPCs = append(localVPCs, commondb[i])
remoteVPCs = append(remoteVPCs, commonext[i])
syncResult.Update()
continue
}
globalnetworkId := commonext[i].GetIGlobalNetworkId()
if len(globalnetworkId) > 0 {
err := commondb[i].checkAndSetGlobalNetwork(globalnetworkId)
if err != nil {
log.Errorf("failed to set globalnetwork for %s error: %v", globalnetworkId, err)
}
syncMetadata(ctx, userCred, &commondb[i], commonext[i])
localVPCs = append(localVPCs, commondb[i])
remoteVPCs = append(remoteVPCs, commonext[i])
syncResult.Update()
err = commondb[i].SyncGlobalVpc(ctx, userCred)
if err != nil {
log.Errorf("%s(%s) sync global vpc error: %v", commondb[i].Name, commondb[i].Id, err)
}
}
for i := 0; i < len(added); i += 1 {
new, err := manager.newFromCloudVpc(ctx, userCred, added[i], provider, region)
newVpc, err := manager.newFromCloudVpc(ctx, userCred, added[i], provider, region)
if err != nil {
syncResult.AddError(err)
} else {
syncMetadata(ctx, userCred, new, added[i])
localVPCs = append(localVPCs, *new)
remoteVPCs = append(remoteVPCs, added[i])
syncResult.Add()
continue
}
globalnetworkId := added[i].GetIGlobalNetworkId()
if len(globalnetworkId) > 0 {
err := new.checkAndSetGlobalNetwork(globalnetworkId)
if err != nil {
log.Errorf("failed to set globalnetwork for %s error: %v", globalnetworkId, err)
}
syncMetadata(ctx, userCred, newVpc, added[i])
localVPCs = append(localVPCs, *newVpc)
remoteVPCs = append(remoteVPCs, added[i])
syncResult.Add()
err = newVpc.SyncGlobalVpc(ctx, userCred)
if err != nil {
log.Errorf("%s(%s) sync global vpc error: %v", newVpc.Name, newVpc.Id, err)
}
}
@@ -400,6 +395,61 @@ func (self *SVpc) syncRemoveCloudVpc(ctx context.Context, userCred mcclient.Toke
return err
}
func (self *SVpc) SyncGlobalVpc(ctx context.Context, userCred mcclient.TokenCredential) error {
if len(self.GlobalvpcId) > 0 {
return nil
}
region, err := self.GetRegion()
if err != nil {
return errors.Wrap(err, "GetRegion")
}
if region.GetDriver().IsVpcBelongGlobalVpc() {
externalId := strings.Replace(self.ExternalId, region.ExternalId+"/", "", -1)
vpcs := []SVpc{}
sq := VpcManager.Query().SubQuery()
q := sq.Query().Filter(
sqlchemy.AND(
sqlchemy.Equals(sq.Field("manager_id"), self.ManagerId),
sqlchemy.NOT(sqlchemy.IsNullOrEmpty(sq.Field("globalvpc_id"))),
sqlchemy.Endswith(sq.Field("external_id"), externalId),
),
)
err := db.FetchModelObjects(VpcManager, q, &vpcs)
if err != nil {
return errors.Wrap(err, "db.FetchModelObjects")
}
globalvpcId := ""
if len(vpcs) > 0 {
globalvpcId = vpcs[0].GlobalvpcId
} else {
gv := &SGlobalVpc{}
gv.Name = self.Name
idx := strings.Index(gv.Name, "(")
if idx > 0 {
gv.Name = gv.Name[:idx]
}
gv.Name, err = db.GenerateName(GlobalVpcManager, userCred, gv.Name)
if err != nil {
return errors.Wrap(err, "db.GenerateName")
}
gv.Enabled = true
gv.Status = api.GLOBAL_VPC_STATUS_AVAILABLE
gv.SetModelManager(GlobalVpcManager, gv)
err = GlobalVpcManager.TableSpec().Insert(gv)
if err != nil {
return errors.Wrap(err, "GlobalVpcManager.Insert")
}
globalvpcId = gv.Id
}
_, err = db.Update(self, func() error {
self.GlobalvpcId = globalvpcId
return nil
})
return err
}
return nil
}
func (self *SVpc) SyncWithCloudVpc(ctx context.Context, userCred mcclient.TokenCredential, extVPC cloudprovider.ICloudVpc) error {
diff, err := db.UpdateWithLock(ctx, self, func() error {
extVPC.Refresh()
@@ -416,18 +466,11 @@ func (self *SVpc) SyncWithCloudVpc(ctx context.Context, userCred mcclient.TokenC
if err != nil {
return err
}
db.OpsLog.LogSyncUpdate(self, diff, userCred)
return nil
}
func (vpc *SVpc) checkAndSetGlobalNetwork(globalnetworkId string) error {
globalnetwork, err := db.FetchByExternalId(GlobalNetworkManager, globalnetworkId)
if err != nil {
return errors.Wrap(err, "FetchByExternalId")
}
return GlobalnetworkVpcManager.NewGlobalnetworkVpc(vpc, globalnetwork.(*SGlobalNetwork))
}
func (manager *SVpcManager) newFromCloudVpc(ctx context.Context, userCred mcclient.TokenCredential, extVPC cloudprovider.ICloudVpc, provider *SCloudprovider, region *SCloudregion) (*SVpc, error) {
vpc := SVpc{}
vpc.SetModelManager(manager, &vpc)
@@ -744,6 +787,18 @@ func (manager *SVpcManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQue
q = q.In("id", sq.SubQuery())
}
globalVpcStr, _ := query.GetString("globalvpc")
if len(globalVpcStr) > 0 {
globalVpc, err := GlobalVpcManager.FetchByIdOrName(userCred, globalVpcStr)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError("globaalvpc %s not found", globalVpcStr)
}
return nil, httperrors.NewGeneralError(err)
}
q = q.Equals("globalvpc_id", globalVpc.GetId())
}
return q, nil
}
@@ -816,26 +871,13 @@ func (vpc *SVpc) StartVpcSyncstatusTask(ctx context.Context, userCred mcclient.T
return nil
}
func (vpc *SVpc) GetGlobalNetwork() (*SGlobalNetwork, error) {
gv := GlobalnetworkVpcManager.Query().SubQuery()
q := GlobalNetworkManager.Query()
q.Join(gv, sqlchemy.Equals(q.Field("id"), gv.Field("globalnetwork_id")))
q = q.Filter(sqlchemy.Equals(gv.Field("vpc_id"), vpc.Id))
count, err := q.CountWithError()
func (vpc *SVpc) GetGlobalVpc() (*SGlobalVpc, error) {
if len(vpc.GlobalvpcId) == 0 {
return nil, fmt.Errorf("vpc does not belong to any globalvpc")
}
gv, err := GlobalVpcManager.FetchById(vpc.GlobalvpcId)
if err != nil {
return nil, errors.Wrap(err, "CountWithError")
return nil, err
}
if count > 1 {
return nil, sqlchemy.ErrDuplicateEntry
}
if count == 0 {
return nil, sql.ErrNoRows
}
globalnetwork := &SGlobalNetwork{}
globalnetwork.SetModelManager(GlobalNetworkManager, globalnetwork)
err = q.First(globalnetwork)
if err != nil {
return nil, errors.Wrap(err, "First")
}
return globalnetwork, nil
return gv.(*SGlobalVpc), nil
}
+5 -1
View File
@@ -215,7 +215,11 @@ func (self *SBaseRegionDriver) IsSecurityGroupBelongVpc() bool {
return false
}
func (self *SBaseRegionDriver) IsSecurityGroupBelongGlobalNetwork() bool {
func (self *SBaseRegionDriver) IsVpcBelongGlobalVpc() bool {
return false
}
func (self *SBaseRegionDriver) IsSecurityGroupBelongGlobalVpc() bool {
return false
}
+5 -1
View File
@@ -32,6 +32,10 @@ func (self *SGoogleRegionDriver) GetProvider() string {
return api.CLOUD_PROVIDER_GOOGLE
}
func (self *SGoogleRegionDriver) IsSecurityGroupBelongGlobalNetwork() bool {
func (self *SGoogleRegionDriver) IsSecurityGroupBelongGlobalVpc() bool {
return true
}
func (self *SGoogleRegionDriver) IsVpcBelongGlobalVpc() bool {
return true
}
+2 -6
View File
@@ -1387,12 +1387,8 @@ func (self *SManagedVirtualizationRegionDriver) BindIPToNatgatewayRollback(ctx c
}
func (self *SManagedVirtualizationRegionDriver) GetSecurityGroupVpcId(ctx context.Context, userCred mcclient.TokenCredential, region *models.SCloudregion, host *models.SHost, vpc *models.SVpc, classic bool) (string, error) {
if region.GetDriver().IsSecurityGroupBelongGlobalNetwork() {
globalnetwork, err := vpc.GetGlobalNetwork()
if err != nil {
return "", errors.Wrap(err, "vpc.GetGlobalNetwork")
}
return globalnetwork.ExternalId, nil
if region.GetDriver().IsSecurityGroupBelongGlobalVpc() {
return strings.TrimPrefix(vpc.ExternalId, region.ExternalId+"/"), nil
} else if region.GetDriver().IsSupportClassicSecurityGroup() && (classic || (host != nil && strings.HasSuffix(host.Name, "-classic"))) {
return "classic", nil
} else if region.GetDriver().IsSecurityGroupBelongVpc() {
+1 -2
View File
@@ -136,7 +136,7 @@ func InitHandlers(app *appsrv.Application) {
models.ElasticcacheParameterManager,
models.ElasticcacheBackupManager,
models.ElasticcacheSkuManager,
models.GlobalNetworkManager,
models.GlobalVpcManager,
models.GuestTemplateManager,
models.ServiceCatalogManager,
@@ -164,7 +164,6 @@ func InitHandlers(app *appsrv.Application) {
models.NetworkinterfacenetworkManager,
models.SnapshotPolicyDiskManager,
models.InstanceSnapshotJointManager,
models.GlobalnetworkVpcManager,
} {
db.RegisterModelManager(manager)
handler := db.NewJointModelHandler(manager)
@@ -1,33 +0,0 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package modules
import "yunion.io/x/onecloud/pkg/mcclient/modulebase"
var (
GlobalnetworkVpcs modulebase.JointResourceManager
)
func init() {
GlobalnetworkVpcs = NewJointComputeManager(
"globalnetworkvpc",
"globalnetworkvpcs",
[]string{"Globalnetwork_Id", "Globalnetwork",
"Vpc_Id", "Vpc"},
[]string{},
&GlobalNetworks,
&Vpcs)
registerCompute(&GlobalnetworkVpcs)
}
@@ -18,18 +18,18 @@ import (
"yunion.io/x/onecloud/pkg/mcclient/modulebase"
)
type GlobalNetworkManager struct {
type GlobalVpcManager struct {
modulebase.ResourceManager
}
var (
GlobalNetworks GlobalNetworkManager
GlobalVpcs GlobalVpcManager
)
func init() {
GlobalNetworks = GlobalNetworkManager{NewComputeManager("globalnetwork", "globalnetworks",
GlobalVpcs = GlobalVpcManager{NewComputeManager("globalvpc", "globalvpcs",
[]string{},
[]string{"ID", "Name", "Description"})}
[]string{"ID", "Name", "Description", "Status", "Enabled"})}
registerCompute(&GlobalNetworks)
registerCompute(&GlobalVpcs)
}
@@ -121,14 +121,6 @@ func (self *SAliyunProvider) GetIRegions() []cloudprovider.ICloudRegion {
return self.client.GetIRegions()
}
func (cli *SAliyunProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (cli *SAliyunProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SAliyunProvider) GetIRegionById(extId string) (cloudprovider.ICloudRegion, error) {
return self.client.GetIRegionById(extId)
}
-8
View File
@@ -114,14 +114,6 @@ func (self *SAwsProvider) GetIRegions() []cloudprovider.ICloudRegion {
return self.client.GetIRegions()
}
func (self *SAwsProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (self *SAwsProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SAwsProvider) GetSysInfo() (jsonutils.JSONObject, error) {
regions := self.client.GetIRegions()
info := jsonutils.NewDict()
@@ -166,14 +166,6 @@ func (self *SAzureProvider) GetIRegions() []cloudprovider.ICloudRegion {
return self.client.GetIRegions()
}
func (cli *SAzureProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (cli *SAzureProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SAzureProvider) GetIRegionById(id string) (cloudprovider.ICloudRegion, error) {
return self.client.GetIRegionById(id)
}
@@ -110,14 +110,6 @@ type SCtyunProvider struct {
client *ctyun.SCtyunClient
}
func (self *SCtyunProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (self *SCtyunProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SCtyunProvider) GetSubAccounts() ([]cloudprovider.SSubAccount, error) {
return self.client.GetSubAccounts()
}
-8
View File
@@ -166,14 +166,6 @@ func (self *SESXiProvider) GetIRegions() []cloudprovider.ICloudRegion {
return nil
}
func (cli *SESXiProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (cli *SESXiProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SESXiProvider) GetIRegionById(id string) (cloudprovider.ICloudRegion, error) {
return nil, cloudprovider.ErrNotSupported
}
-34
View File
@@ -14,12 +14,6 @@
package google
import (
"yunion.io/x/jsonutils"
api "yunion.io/x/onecloud/pkg/apis/compute"
)
type SGlobalNetwork struct {
Id string
//CreationTimestamp time.Time
@@ -43,31 +37,3 @@ func (cli *SGoogleClient) GetGlobalNetworks(maxResults int, pageToken string) ([
resource := "global/networks"
return networks, cli.list(resource, params, maxResults, pageToken, &networks)
}
func (net *SGlobalNetwork) GetId() string {
return net.SelfLink
}
func (net *SGlobalNetwork) GetGlobalId() string {
return getGlobalId(net.SelfLink)
}
func (net *SGlobalNetwork) GetName() string {
return net.Name
}
func (net *SGlobalNetwork) GetMetadata() *jsonutils.JSONDict {
return nil
}
func (net *SGlobalNetwork) GetStatus() string {
return api.GLOBAL_NETWORK_STATUS_AVAILABLE
}
func (net *SGlobalNetwork) IsEmulated() bool {
return false
}
func (net *SGlobalNetwork) Refresh() error {
return nil
}
-20
View File
@@ -267,26 +267,6 @@ func (self *SGoogleClient) fetchGlobalNetwork() ([]SGlobalNetwork, error) {
return globalnetworks, nil
}
func (cli *SGoogleClient) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
networks, err := cli.fetchGlobalNetwork()
if err != nil {
return nil, errors.Wrap(err, "fetchGlobalNetwork")
}
inetworks := []cloudprovider.ICloudGlobalnetwork{}
for i := range networks {
inetworks = append(inetworks, &networks[i])
}
return inetworks, nil
}
func (cli *SGoogleClient) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
network, err := cli.GetGlobalNetwork(id)
if err != nil {
return nil, err
}
return network, nil
}
func (self *SGoogleClient) GetRegions() []SRegion {
regions := make([]SRegion, len(self.iregions))
for i := 0; i < len(regions); i++ {
+1 -1
View File
@@ -56,7 +56,7 @@ func (host *SHost) GetIStorageById(id string) (cloudprovider.ICloudStorage, erro
}
func (host *SHost) IsEmulated() bool {
return false
return true
}
func (host *SHost) GetStatus() string {
+1 -1
View File
@@ -330,7 +330,7 @@ func (instance *SInstance) GetSecurityGroupIds() ([]string, error) {
if len(instance.ServiceAccounts) > 0 && isecgroup.GetName() == instance.ServiceAccounts[0].Email {
secgroupIds = append(secgroupIds, isecgroup.GetGlobalId())
}
if isecgroup.GetName() == globalnetwork.GetName() {
if isecgroup.GetName() == globalnetwork.Name {
secgroupIds = append(secgroupIds, isecgroup.GetGlobalId())
}
}
@@ -164,14 +164,6 @@ func (self *SGoogleProvider) GetIRegions() []cloudprovider.ICloudRegion {
return self.client.GetIRegions()
}
func (self *SGoogleProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return self.client.GetIGlobalnetworks()
}
func (self *SGoogleProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return self.client.GetIGlobalnetworkById(id)
}
func (self *SGoogleProvider) GetIRegionById(extId string) (cloudprovider.ICloudRegion, error) {
return self.client.GetIRegionById(extId)
}
+2 -7
View File
@@ -119,15 +119,10 @@ func (region *SRegion) GetIVpcs() ([]cloudprovider.ICloudVpc, error) {
if err != nil {
return nil, errors.Wrap(err, "fetchGlobalNetwork")
}
substr := fmt.Sprintf("regions/%s/subnetworks", region.Name)
ivpcs := []cloudprovider.ICloudVpc{}
for i := range globalnetworks {
for _, subnet := range globalnetworks[i].Subnetworks {
if strings.Index(subnet, substr) >= 0 {
vpc := SVpc{region: region, globalnetwork: &globalnetworks[i]}
ivpcs = append(ivpcs, &vpc)
}
}
vpc := SVpc{region: region, globalnetwork: &globalnetworks[i]}
ivpcs = append(ivpcs, &vpc)
}
return ivpcs, nil
}
+2 -2
View File
@@ -166,7 +166,7 @@ func (firewall *SFirewall) toRules() ([]secrules.SecurityRule, error) {
}
func (secgroup *SSecurityGroup) GetId() string {
return secgroup.vpc.globalnetwork.GetGlobalId()
return getGlobalId(secgroup.vpc.globalnetwork.SelfLink)
}
func (secgroup *SSecurityGroup) GetGlobalId() string {
@@ -190,7 +190,7 @@ func (secgroup *SSecurityGroup) GetName() string {
if len(secgroup.ServiceAccount) > 0 {
return secgroup.ServiceAccount
}
return secgroup.vpc.globalnetwork.GetName()
return secgroup.vpc.globalnetwork.Name
}
func (secgroup *SSecurityGroup) GetMetadata() *jsonutils.JSONDict {
+1 -5
View File
@@ -41,7 +41,7 @@ func (vpc *SVpc) GetId() string {
}
func (vpc *SVpc) GetGlobalId() string {
return vpc.GetId()
return fmt.Sprintf("%s/%s", vpc.region.GetGlobalId(), vpc.GetId())
}
func (vpc *SVpc) Refresh() error {
@@ -60,10 +60,6 @@ func (vpc *SVpc) GetCidrBlock() string {
return ""
}
func (vpc *SVpc) GetIGlobalNetworkId() string {
return vpc.globalnetwork.GetGlobalId()
}
func (vpc *SVpc) IsEmulated() bool {
return false
}
+1 -1
View File
@@ -88,7 +88,7 @@ func (wire *SWire) GetStatus() string {
}
func (wire *SWire) IsEmulated() bool {
return false
return true
}
func (wire *SWire) Refresh() error {
+1 -1
View File
@@ -110,7 +110,7 @@ func (zone *SZone) GetMetadata() *jsonutils.JSONDict {
}
func (zone *SZone) IsEmulated() bool {
return true
return false
}
func (zone *SZone) Refresh() error {
@@ -145,14 +145,6 @@ func (self *SHuaweiProvider) GetIRegions() []cloudprovider.ICloudRegion {
return self.client.GetIRegions()
}
func (cli *SHuaweiProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (cli *SHuaweiProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SHuaweiProvider) GetIRegionById(extId string) (cloudprovider.ICloudRegion, error) {
return self.client.GetIRegionById(extId)
}
@@ -114,14 +114,6 @@ func (self *SObjectStoreProvider) GetIRegions() []cloudprovider.ICloudRegion {
return nil
}
func (self *SObjectStoreProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (self *SObjectStoreProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SObjectStoreProvider) GetIRegionById(id string) (cloudprovider.ICloudRegion, error) {
return nil, cloudprovider.ErrNotSupported
}
@@ -170,14 +170,6 @@ func (self *SOpenStackProvider) GetIRegions() []cloudprovider.ICloudRegion {
return self.client.GetIRegions()
}
func (self *SOpenStackProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (self *SOpenStackProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SOpenStackProvider) GetIRegionById(extId string) (cloudprovider.ICloudRegion, error) {
return self.client.GetIRegionById(extId)
}
@@ -161,14 +161,6 @@ func (self *SQcloudProvider) GetIRegions() []cloudprovider.ICloudRegion {
return self.client.GetIRegions()
}
func (client *SQcloudProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (client *SQcloudProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SQcloudProvider) GetIRegionById(id string) (cloudprovider.ICloudRegion, error) {
return self.client.GetIRegionById(id)
}
@@ -149,14 +149,6 @@ func (self *SUcloudProvider) GetIRegions() []cloudprovider.ICloudRegion {
return self.client.GetIRegions()
}
func (cli *SUcloudProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (cli *SUcloudProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SUcloudProvider) GetIRegionById(extId string) (cloudprovider.ICloudRegion, error) {
return self.client.GetIRegionById(extId)
}
-4
View File
@@ -27,7 +27,3 @@ type SVpc struct {
func (self *SVpc) GetINatGateways() ([]cloudprovider.ICloudNatGateway, error) {
return nil, fmt.Errorf("Not Implemented GetNatGateways")
}
func (self *SVpc) GetIGlobalNetworkId() string {
return ""
}
@@ -124,14 +124,6 @@ func (self *SZStackProvider) GetIRegions() []cloudprovider.ICloudRegion {
return self.client.GetIRegions()
}
func (cli *SZStackProvider) GetIGlobalnetworks() ([]cloudprovider.ICloudGlobalnetwork, error) {
return []cloudprovider.ICloudGlobalnetwork{}, nil
}
func (cli *SZStackProvider) GetIGlobalnetworkById(id string) (cloudprovider.ICloudGlobalnetwork, error) {
return nil, cloudprovider.ErrNotFound
}
func (self *SZStackProvider) GetIRegionById(extId string) (cloudprovider.ICloudRegion, error) {
return self.client.GetIRegionById(extId)
}