@@ -39,14 +39,22 @@ func (p *EC2Provisioner) Provision(host BasicHost) (*ProvisionedHost, error) {
3939 if err != nil {
4040 return nil , err
4141 }
42- pro := host .Additional ["pro" ]
42+
43+ proV := host .Additional ["pro" ]
44+
45+ proPorts , _ := strconv .ParseBool (proV )
4346
4447 ports := host .Additional ["ports" ]
4548
49+ extraPorts , err := parsePorts (ports )
50+ if err != nil {
51+ return nil , err
52+ }
53+
4654 var vpcID = host .Additional ["vpc-id" ]
4755 var subnetID = host .Additional ["subnet-id" ]
4856
49- groupID , name , err := p .createEC2SecurityGroup (vpcID , port , pro , ports )
57+ groupID , name , err := p .createEC2SecurityGroup (vpcID , port , proPorts , extraPorts )
5058 if err != nil {
5159 return nil , err
5260 }
@@ -251,19 +259,14 @@ func (p *EC2Provisioner) lookupID(request HostDeleteRequest) (string, error) {
251259}
252260
253261// createEC2SecurityGroup creates a security group for the exit-node
254- func (p * EC2Provisioner ) createEC2SecurityGroup (vpcID string , controlPort int , pro , extraPorts string ) (* string , * string , error ) {
262+ func (p * EC2Provisioner ) createEC2SecurityGroup (vpcID string , controlPort int , openHighPorts bool , extraPorts [] int ) (* string , * string , error ) {
255263 ports := []int {controlPort }
256264
257- proPortRange := []int {1024 , 65535 }
265+ highPortRange := []int {1024 , 65535 }
258266
259267 if len (extraPorts ) > 0 {
260- extraPorts , err := parsePorts (extraPorts )
261- if err != nil {
262- return nil , nil , err
263- }
264- ports = append (ports , extraPorts ... )
265-
266- proPortRange = []int {}
268+ // disable high port range if extra ports are specified
269+ highPortRange = []int {}
267270 }
268271
269272 groupName := "inlets-" + uuid .New ().String ()
@@ -282,14 +285,14 @@ func (p *EC2Provisioner) createEC2SecurityGroup(vpcID string, controlPort int, p
282285 }
283286
284287 for _ , port := range ports {
285- err = p .createEC2SecurityGroupRule (* group .GroupId , port , port )
286- if err != nil {
287- return group .GroupId , & groupName , err
288+ if err = p .createEC2SecurityGroupRule (* group .GroupId , port , port ); err != nil {
289+ return group . GroupId , & groupName ,
290+ fmt . Errorf ( "failed to create security group on %s with port %d: %w" , * group .GroupId , port , err )
288291 }
289292 }
290293
291- if pro == "true" && len (proPortRange ) == 2 {
292- err = p .createEC2SecurityGroupRule (* group .GroupId , proPortRange [0 ], proPortRange [1 ])
294+ if openHighPorts && len (highPortRange ) == 2 {
295+ err = p .createEC2SecurityGroupRule (* group .GroupId , highPortRange [0 ], highPortRange [1 ])
293296 if err != nil {
294297 return group .GroupId , & groupName , err
295298 }
@@ -300,6 +303,7 @@ func (p *EC2Provisioner) createEC2SecurityGroup(vpcID string, controlPort int, p
300303
301304func parsePorts (extraPorts string ) ([]int , error ) {
302305 var ports []int
306+
303307 parts := strings .Split (extraPorts , "," )
304308 for _ , part := range parts {
305309 if trimmed := strings .TrimSpace (part ); len (trimmed ) > 0 {
0 commit comments