github.com/sacloud/libsacloud/v2@v2.32.3/helper/service/vpcrouter/apply_request.go (about)

     1  // Copyright 2016-2022 The Libsacloud Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package vpcrouter
    16  
    17  import (
    18  	"github.com/sacloud/libsacloud/v2/helper/builder"
    19  	vpcRouterBuilder "github.com/sacloud/libsacloud/v2/helper/builder/vpcrouter"
    20  	"github.com/sacloud/libsacloud/v2/helper/validate"
    21  	"github.com/sacloud/libsacloud/v2/sacloud"
    22  	"github.com/sacloud/libsacloud/v2/sacloud/types"
    23  )
    24  
    25  // ApplyRequest Applyサービスへのパラメータ
    26  //
    27  // NOTE: helper/builderを統合するまでの経過措置として、実際の処理をここで実装せずにhelper/builder/vpcrouter#Builderへ移譲する
    28  // 利用者がbuilderに依存することをへの対応としてNICSettingHolderなどの型はここで実装する
    29  type ApplyRequest struct {
    30  	Zone string   `request:"-" validate:"required"`
    31  	ID   types.ID `request:"-"`
    32  
    33  	Name        string `validate:"required"`
    34  	Description string `validate:"min=0,max=512"`
    35  	Tags        types.Tags
    36  	IconID      types.ID
    37  
    38  	PlanID                types.ID `validate:"required"`
    39  	Version               int
    40  	NICSetting            NICSettingHolder             // StandardNICSetting または PremiumNICSetting を指定する
    41  	AdditionalNICSettings []AdditionalNICSettingHolder // AdditionalStandardNICSetting または AdditionalPremiumNICSetting を指定する
    42  	RouterSetting         *RouterSetting
    43  	NoWait                bool
    44  	BootAfterCreate       bool
    45  }
    46  
    47  func (req *ApplyRequest) Validate() error {
    48  	return validate.Struct(req)
    49  }
    50  
    51  // RouterSetting VPCルータの設定
    52  type RouterSetting struct {
    53  	VRID                      int
    54  	InternetConnectionEnabled types.StringFlag
    55  	StaticNAT                 []*sacloud.VPCRouterStaticNAT
    56  	PortForwarding            []*sacloud.VPCRouterPortForwarding
    57  	Firewall                  []*sacloud.VPCRouterFirewall
    58  	DHCPServer                []*sacloud.VPCRouterDHCPServer
    59  	DHCPStaticMapping         []*sacloud.VPCRouterDHCPStaticMapping
    60  	DNSForwarding             *sacloud.VPCRouterDNSForwarding
    61  	PPTPServer                *sacloud.VPCRouterPPTPServer
    62  	L2TPIPsecServer           *sacloud.VPCRouterL2TPIPsecServer
    63  	WireGuard                 *sacloud.VPCRouterWireGuard
    64  	RemoteAccessUsers         []*sacloud.VPCRouterRemoteAccessUser
    65  	SiteToSiteIPsecVPN        []*sacloud.VPCRouterSiteToSiteIPsecVPN
    66  	StaticRoute               []*sacloud.VPCRouterStaticRoute
    67  	SyslogHost                string
    68  }
    69  
    70  func (req *ApplyRequest) Builder(caller sacloud.APICaller) *vpcRouterBuilder.Builder {
    71  	return &vpcRouterBuilder.Builder{
    72  		Name:                  req.Name,
    73  		Description:           req.Description,
    74  		Tags:                  req.Tags,
    75  		IconID:                req.IconID,
    76  		PlanID:                req.PlanID,
    77  		Version:               req.Version,
    78  		NICSetting:            req.nicSetting(),
    79  		AdditionalNICSettings: req.additionalNICSetting(),
    80  		RouterSetting:         req.routerSetting(),
    81  		NoWait:                req.NoWait,
    82  		Client:                sacloud.NewVPCRouterOp(caller),
    83  		SetupOptions: &builder.RetryableSetupParameter{
    84  			BootAfterBuild: req.BootAfterCreate,
    85  		},
    86  	}
    87  }
    88  
    89  func (req *ApplyRequest) routerSetting() *vpcRouterBuilder.RouterSetting {
    90  	if req.RouterSetting == nil {
    91  		return nil
    92  	}
    93  
    94  	return &vpcRouterBuilder.RouterSetting{
    95  		VRID:                      req.RouterSetting.VRID,
    96  		InternetConnectionEnabled: req.RouterSetting.InternetConnectionEnabled,
    97  		StaticNAT:                 req.RouterSetting.StaticNAT,
    98  		PortForwarding:            req.RouterSetting.PortForwarding,
    99  		Firewall:                  req.RouterSetting.Firewall,
   100  		DHCPServer:                req.RouterSetting.DHCPServer,
   101  		DHCPStaticMapping:         req.RouterSetting.DHCPStaticMapping,
   102  		DNSForwarding:             req.RouterSetting.DNSForwarding,
   103  		PPTPServer:                req.RouterSetting.PPTPServer,
   104  		L2TPIPsecServer:           req.RouterSetting.L2TPIPsecServer,
   105  		WireGuard:                 req.RouterSetting.WireGuard,
   106  		RemoteAccessUsers:         req.RouterSetting.RemoteAccessUsers,
   107  		SiteToSiteIPsecVPN:        req.RouterSetting.SiteToSiteIPsecVPN,
   108  		StaticRoute:               req.RouterSetting.StaticRoute,
   109  		SyslogHost:                req.RouterSetting.SyslogHost,
   110  	}
   111  }
   112  
   113  func (req *ApplyRequest) nicSetting() vpcRouterBuilder.NICSettingHolder {
   114  	switch v := req.NICSetting.(type) {
   115  	case *StandardNICSetting:
   116  		return &vpcRouterBuilder.StandardNICSetting{}
   117  	case *PremiumNICSetting:
   118  		return &vpcRouterBuilder.PremiumNICSetting{
   119  			SwitchID:         v.SwitchID,
   120  			IPAddresses:      v.IPAddresses,
   121  			VirtualIPAddress: v.VirtualIPAddress,
   122  			IPAliases:        v.IPAliases,
   123  		}
   124  	default:
   125  		return nil
   126  	}
   127  }
   128  
   129  func (req *ApplyRequest) additionalNICSetting() []vpcRouterBuilder.AdditionalNICSettingHolder {
   130  	var settings []vpcRouterBuilder.AdditionalNICSettingHolder
   131  	for _, s := range req.AdditionalNICSettings {
   132  		switch v := s.(type) {
   133  		case *AdditionalStandardNICSetting:
   134  			settings = append(settings, &vpcRouterBuilder.AdditionalStandardNICSetting{
   135  				SwitchID:       v.SwitchID,
   136  				IPAddress:      v.IPAddress,
   137  				NetworkMaskLen: v.NetworkMaskLen,
   138  				Index:          v.Index,
   139  			})
   140  		case *AdditionalPremiumNICSetting:
   141  			settings = append(settings, &vpcRouterBuilder.AdditionalPremiumNICSetting{
   142  				SwitchID:         v.SwitchID,
   143  				IPAddresses:      v.IPAddresses,
   144  				VirtualIPAddress: v.VirtualIPAddress,
   145  				NetworkMaskLen:   v.NetworkMaskLen,
   146  				Index:            v.Index,
   147  			})
   148  		default:
   149  			continue
   150  		}
   151  	}
   152  	return settings
   153  }