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 }