mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
vpcs: add ExternalAccessMode field
This commit is contained in:
@@ -72,6 +72,16 @@ type VpcCreateInput struct {
|
||||
|
||||
// CIDR_BLOCK
|
||||
CidrBlock string `json:"cidr_block"`
|
||||
|
||||
// Vpc外网访问模式
|
||||
ExternalAccessMode string `json:"external_access_mode"`
|
||||
}
|
||||
|
||||
type VpcUpdateInput struct {
|
||||
apis.EnabledStatusInfrasResourceBaseUpdateInput
|
||||
|
||||
// Vpc外网访问模式
|
||||
ExternalAccessMode string `json:"external_access_mode"`
|
||||
}
|
||||
|
||||
type VpcResourceInput struct {
|
||||
@@ -81,6 +91,9 @@ type VpcResourceInput struct {
|
||||
// Deprecated
|
||||
// filter by vpc Id
|
||||
VpcId string `json:"vpc_id" "yunion:deprecated-by":"vpc"`
|
||||
|
||||
// Vpc外网访问模式
|
||||
ExternalAccessMode string `json:"external_access_mode"`
|
||||
}
|
||||
|
||||
type VpcFilterListInputBase struct {
|
||||
|
||||
@@ -4,6 +4,20 @@ import (
|
||||
"yunion.io/x/pkg/util/netutils"
|
||||
)
|
||||
|
||||
const (
|
||||
VPC_EXTERNAL_ACCESS_MODE_DISTGW = "distgw" // distgw only
|
||||
VPC_EXTERNAL_ACCESS_MODE_EIP_DISTGW = "eip-distgw" // eip when available, distgw otherwise
|
||||
VPC_EXTERNAL_ACCESS_MODE_EIP = "eip" // eip only
|
||||
)
|
||||
|
||||
var (
|
||||
VPC_EXTERNAL_ACCESS_MODES = []string{
|
||||
VPC_EXTERNAL_ACCESS_MODE_DISTGW,
|
||||
VPC_EXTERNAL_ACCESS_MODE_EIP_DISTGW,
|
||||
VPC_EXTERNAL_ACCESS_MODE_EIP,
|
||||
}
|
||||
)
|
||||
|
||||
const (
|
||||
sVpcMappedCidr = "100.64.0.0/17"
|
||||
VpcMappedIPMask = 17
|
||||
|
||||
@@ -2071,6 +2071,8 @@ type SVpc struct {
|
||||
// CIDR地址段
|
||||
// example: 192.168.222.0/24
|
||||
CidrBlock string `json:"cidr_block"`
|
||||
// Vpc外网访问模式
|
||||
ExternalAccessMode string `json:"external_access_mode"`
|
||||
}
|
||||
|
||||
// SVpcResourceBase is an autogenerated struct via yunion.io/x/onecloud/pkg/compute/models.SVpcResourceBase.
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
"yunion.io/x/pkg/errors"
|
||||
"yunion.io/x/pkg/util/compare"
|
||||
"yunion.io/x/pkg/util/netutils"
|
||||
"yunion.io/x/pkg/utils"
|
||||
"yunion.io/x/sqlchemy"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/apis"
|
||||
@@ -80,11 +81,8 @@ type SVpc struct {
|
||||
// example: 192.168.222.0/24
|
||||
CidrBlock string `charset:"ascii" nullable:"true" list:"domain" create:"domain_required"`
|
||||
|
||||
// 区域Id
|
||||
// CloudregionId string `width:"36" charset:"ascii" nullable:"false" list:"domain" create:"domain_required" default:"default"`
|
||||
|
||||
// 全局VPC Id
|
||||
// GlobalvpcId string `width:"36" charset:"ascii" list:"user" json:"globalvpc_id"`
|
||||
// Vpc外网访问模式
|
||||
ExternalAccessMode string `width:"16" charset:"ascii" nullable:"true" list:"user" update:"user" create:"optional"`
|
||||
}
|
||||
|
||||
func (manager *SVpcManager) GetContextManagers() [][]db.IModelManager {
|
||||
@@ -127,6 +125,19 @@ func (self *SVpc) GetNatgateways() ([]SNatGateway, error) {
|
||||
return nats, nil
|
||||
}
|
||||
|
||||
func (self *SVpc) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.VpcUpdateInput) (api.VpcUpdateInput, error) {
|
||||
if input.ExternalAccessMode != "" {
|
||||
if !utils.IsInStringArray(input.ExternalAccessMode, api.VPC_EXTERNAL_ACCESS_MODES) {
|
||||
return input, httperrors.NewInputParameterError("invalid external_access_mode %q, want %s",
|
||||
input.ExternalAccessMode, api.VPC_EXTERNAL_ACCESS_MODES)
|
||||
}
|
||||
}
|
||||
if _, err := self.SEnabledStatusInfrasResourceBase.ValidateUpdateData(ctx, userCred, query, input.EnabledStatusInfrasResourceBaseUpdateInput); err != nil {
|
||||
return input, err
|
||||
}
|
||||
return input, nil
|
||||
}
|
||||
|
||||
func (self *SVpc) ValidateDeleteCondition(ctx context.Context) error {
|
||||
cnt, err := self.GetNetworkCount()
|
||||
if err != nil {
|
||||
@@ -561,8 +572,7 @@ func (self *SVpc) markAllNetworksUnknown(userCred mcclient.TokenCredential) erro
|
||||
}
|
||||
|
||||
func (manager *SVpcManager) InitializeData() error {
|
||||
vpcObj, err := manager.FetchById(api.DEFAULT_VPC_ID)
|
||||
if err != nil {
|
||||
if vpcObj, err := manager.FetchById(api.DEFAULT_VPC_ID); err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
defVpc := SVpc{}
|
||||
defVpc.SetModelManager(VpcManager, &defVpc)
|
||||
@@ -594,6 +604,27 @@ func (manager *SVpcManager) InitializeData() error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
{ // initialize default external_access_mode for onecloud vpc
|
||||
var vpcs []SVpc
|
||||
q := manager.Query().
|
||||
IsNullOrEmpty("manager_id").
|
||||
IsNullOrEmpty("external_id").
|
||||
IsNullOrEmpty("external_access_mode")
|
||||
if err := db.FetchModelObjects(manager, q, &vpcs); err != nil {
|
||||
return errors.Wrap(err, "fetch onecloud vpc with external_access_mode not set")
|
||||
}
|
||||
for i := range vpcs {
|
||||
vpc := &vpcs[i]
|
||||
if _, err := db.Update(vpc, func() error {
|
||||
vpc.ExternalAccessMode = api.VPC_EXTERNAL_ACCESS_MODE_EIP_DISTGW
|
||||
return nil
|
||||
}); err != nil {
|
||||
return errors.Wrap(err, "db set default external_access_mode")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -635,8 +666,14 @@ func (manager *SVpcManager) ValidateCreateData(
|
||||
input.Cloudprovider = managerObj.GetId()
|
||||
// data.Add(jsonutils.NewString(managerObj.GetId()), "manager_id")
|
||||
} else {
|
||||
// data.Set("status", jsonutils.NewString(api.VPC_STATUS_AVAILABLE))
|
||||
input.Status = api.VPC_STATUS_AVAILABLE
|
||||
if input.ExternalAccessMode == "" {
|
||||
input.ExternalAccessMode = api.VPC_EXTERNAL_ACCESS_MODE_EIP_DISTGW
|
||||
}
|
||||
if !utils.IsInStringArray(input.ExternalAccessMode, api.VPC_EXTERNAL_ACCESS_MODES) {
|
||||
return input, httperrors.NewInputParameterError("invalid external_access_mode %q, want %s",
|
||||
input.Status, api.VPC_EXTERNAL_ACCESS_MODES)
|
||||
}
|
||||
}
|
||||
|
||||
cidrBlock := input.CidrBlock
|
||||
|
||||
Reference in New Issue
Block a user