@@ -21,14 +21,12 @@ import (
21
21
)
22
22
23
23
const (
24
- defaultOSID = 352 // Currently only works on debian 10
24
+ defaultOSID = 387 // Ubuntu 20.04
25
25
defaultRegion = "ewr"
26
26
defaultPlan = "vc2-1c-2gb"
27
27
defaultDockerPort = 2376
28
28
defaultBackups = "disabled"
29
29
defaultLabelPrefix = "vultr-rancher-node-"
30
- rancherCatalogPort = 443
31
- k8APIServer = 6443
32
30
)
33
31
34
32
// VultrDriver ... driver struct
@@ -40,8 +38,15 @@ type VultrDriver struct {
40
38
ResponsePayloads struct {
41
39
Instance * govultr.Instance
42
40
}
43
- APIKey string
44
- DockerPort int
41
+ APIKey string
42
+ DockerPort int
43
+ UFWPortsToOpen []string
44
+ DisableUFW bool
45
+ }
46
+
47
+ // getDefaultUFWPortsToOpen ...
48
+ func (d * VultrDriver ) getDefaultUFWPortsToOpen () []string {
49
+ return []string {"22" , "80" , "443" , "2376" , "2379" , "2380" , "6443" , "9099" , "9796" , "10250" , "10254" , "30000:32767/tcp" , "8472/udp" , "30000:32767/udp" }
45
50
}
46
51
47
52
// GetCreateFlags ... returns the mcnflag.Flag slice representing the flags
@@ -78,7 +83,7 @@ func (d *VultrDriver) GetCreateFlags() []mcnflag.Flag {
78
83
mcnflag.IntFlag {
79
84
EnvVar : "VULTR_OSID" ,
80
85
Name : "vultr-os-id" ,
81
- Usage : "Operating system ID (default: [352] Debian 10 )" ,
86
+ Usage : "Operating system ID (default: [387] Ubuntu 20.04 )" ,
82
87
Value : defaultOSID ,
83
88
},
84
89
mcnflag.StringFlag {
@@ -173,6 +178,17 @@ func (d *VultrDriver) GetCreateFlags() []mcnflag.Flag {
173
178
Usage : "Port the docker machine will host on (default: 2376)" ,
174
179
Value : defaultDockerPort ,
175
180
},
181
+ mcnflag.BoolFlag {
182
+ EnvVar : "VULTR_DISABLE_OS_FIREWALL" ,
183
+ Name : "vultr-disable-os-firewall" ,
184
+ Usage : "Disable the UFW firewall that comes standard on every Vultr OS (default: false)" ,
185
+ },
186
+ mcnflag.StringSliceFlag {
187
+ EnvVar : "VULTR_PORTS_TO_OPEN_ON_OS_FIREWALL" ,
188
+ Name : "vultr-ports-to-open-on-os-firewall" ,
189
+ Usage : "Comma delimited list of ports to open on the UFW firewall that comes standard on every Vultr OS (default: " + strings .Join (d .getDefaultUFWPortsToOpen ()[:], "," ) + " )" ,
190
+ Value : d .getDefaultUFWPortsToOpen (),
191
+ },
176
192
}
177
193
}
178
194
@@ -237,6 +253,8 @@ func (d *VultrDriver) SetConfigFromFlags(opts drivers.DriverOptions) error {
237
253
d .RequestPayloads .InstanceCreateReq .ReservedIPv4 = opts .String ("vultr-floating-ipv4-id" )
238
254
d .RequestPayloads .InstanceCreateReq .ActivationEmail = utils .BoolPtr (opts .Bool ("vultr-send-activation-email" ))
239
255
d .DockerPort = opts .Int ("vultr-docker-port" )
256
+ d .DisableUFW = opts .Bool ("vultr-disable-os-firewall" )
257
+ d .UFWPortsToOpen = opts .StringSlice ("vultr-ports-to-open-on-os-firewall" )
240
258
241
259
return nil
242
260
}
@@ -266,8 +284,8 @@ func (d *VultrDriver) Create() (err error) {
266
284
d .addSSHKeyToCloudInitUserData ()
267
285
}
268
286
269
- // Allow docker through the firewall. Every vultr OS uses ufw
270
- d .appendToCloudInitUserDataCloudConfig ([] byte ( " \r \n runcmd: \r \n - ufw allow " + cast . ToString ( d . DockerPort ) + " \r \n - ufw allow " + cast . ToString ( rancherCatalogPort ) + " \r \n - ufw allow " + cast . ToString ( rancherCatalogPort )) )
287
+ // Add all the UFW commands to the cloud init user config
288
+ d .addUFWCommandsToCloudInitUserDataCloudConfig ( )
271
289
272
290
// Create instance
273
291
d .ResponsePayloads .Instance , err = vultrClient .Instance .Create (context .Background (), & d .RequestPayloads .InstanceCreateReq )
@@ -290,6 +308,9 @@ func (d *VultrDriver) Create() (err error) {
290
308
break
291
309
}
292
310
311
+ // We need to also set the IP in the base driver
312
+ d .IPAddress , _ = d .GetIP ()
313
+
293
314
return nil
294
315
}
295
316
@@ -522,6 +543,38 @@ func (d *VultrDriver) validatePlan() error {
522
543
return notAvailableErr
523
544
}
524
545
546
+ // addUFWCommandsToCloudInitUserDataCloudConfig ...
547
+ func (d * VultrDriver ) addUFWCommandsToCloudInitUserDataCloudConfig () {
548
+
549
+ // First add the run command
550
+ d .appendToCloudInitUserDataCloudConfig ([]byte ("\r \n runcmd:" ))
551
+
552
+ // Lets keep track of this
553
+ var dockerPortWasOpened bool
554
+ dockerPortAsString := cast .ToString (d .DockerPort )
555
+
556
+ // Now add all the UFW rules
557
+ for _ , _port := range d .UFWPortsToOpen {
558
+ // A little insurance to make sure we opened the docker port
559
+ if _port == dockerPortAsString {
560
+ dockerPortWasOpened = true
561
+ }
562
+
563
+ // Add to the cloud init user data cloud config
564
+ d .appendToCloudInitUserDataCloudConfig ([]byte ("\r \n - ufw allow " + _port ))
565
+ }
566
+
567
+ // Docker port was NOT opened, lets do that
568
+ if ! dockerPortWasOpened {
569
+ d .appendToCloudInitUserDataCloudConfig ([]byte ("\r \n - ufw allow " + dockerPortAsString ))
570
+ }
571
+
572
+ // Disable firewall
573
+ if d .DisableUFW {
574
+ d .appendToCloudInitUserDataCloudConfig ([]byte ("\r \n - ufw disable" ))
575
+ }
576
+ }
577
+
525
578
// appendToCloudInitUserDataCloudConfig ... appends to the #cloud-config of the userdata
526
579
func (d * VultrDriver ) appendToCloudInitUserDataCloudConfig (additionalCloudConfig []byte ) {
527
580
var userData []byte
0 commit comments