From 984dc842397af4dac1ff0ee95affebed55741a07 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Mon, 30 Nov 2020 17:44:13 +0800 Subject: [PATCH] feat(region): options: allow setting default vpc external access mode --- pkg/compute/models/vpcs.go | 13 ++++++++++--- pkg/compute/options/options.go | 2 ++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index 0defdf5daf..9a7d43d2a1 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -37,6 +37,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db/quotas" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/util/rbacutils" @@ -710,7 +711,13 @@ func (manager *SVpcManager) InitializeData() error { } } - { // initialize default external_access_mode for onecloud vpc + if defaultMode := options.Options.DefaultVpcExternalAccessMode; defaultMode == "" { + options.Options.DefaultVpcExternalAccessMode = api.VPC_EXTERNAL_ACCESS_MODE_EIP_DISTGW + } else if !utils.IsInStringArray(defaultMode, api.VPC_EXTERNAL_ACCESS_MODES) { + return errors.Errorf("invalid DefaultVpcExternalAccessMode, got %s, want %s", defaultMode, api.VPC_EXTERNAL_ACCESS_MODES) + } + { + // initialize default external_access_mode for onecloud vpc var vpcs []SVpc q := manager.Query(). IsNullOrEmpty("manager_id"). @@ -722,7 +729,7 @@ func (manager *SVpcManager) InitializeData() error { for i := range vpcs { vpc := &vpcs[i] if _, err := db.Update(vpc, func() error { - vpc.ExternalAccessMode = api.VPC_EXTERNAL_ACCESS_MODE_EIP_DISTGW + vpc.ExternalAccessMode = options.Options.DefaultVpcExternalAccessMode return nil }); err != nil { return errors.Wrap(err, "db set default external_access_mode") @@ -793,7 +800,7 @@ func (manager *SVpcManager) ValidateCreateData( } else { input.Status = api.VPC_STATUS_AVAILABLE if input.ExternalAccessMode == "" { - input.ExternalAccessMode = api.VPC_EXTERNAL_ACCESS_MODE_EIP_DISTGW + input.ExternalAccessMode = options.Options.DefaultVpcExternalAccessMode } if !utils.IsInStringArray(input.ExternalAccessMode, api.VPC_EXTERNAL_ACCESS_MODES) { return input, httperrors.NewInputParameterError("invalid external_access_mode %q, want %s", diff --git a/pkg/compute/options/options.go b/pkg/compute/options/options.go index 2274769964..e082a4c6f7 100644 --- a/pkg/compute/options/options.go +++ b/pkg/compute/options/options.go @@ -160,6 +160,8 @@ type ComputeOptions struct { DefaultNetworkGatewayAddressEsxi uint32 `help:"Default address for network gateway" default:"1"` + DefaultVpcExternalAccessMode string `help:"default external access mode for on-premise vpc"` + NoCheckOsTypeForCachedImage bool `help:"Don't check os type for cached image"` esxi.EsxiOptions