Skip to content

Commit 970411f

Browse files
authored
Merge pull request #23 from biondizzle/CLOUD-1876
Fix issues on Rancher versions > v2.x
2 parents 1b02eb6 + 6ecdb33 commit 970411f

File tree

1 file changed

+61
-8
lines changed

1 file changed

+61
-8
lines changed

machine/driver/driver.go

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,12 @@ import (
2121
)
2222

2323
const (
24-
defaultOSID = 352 // Currently only works on debian 10
24+
defaultOSID = 387 // Ubuntu 20.04
2525
defaultRegion = "ewr"
2626
defaultPlan = "vc2-1c-2gb"
2727
defaultDockerPort = 2376
2828
defaultBackups = "disabled"
2929
defaultLabelPrefix = "vultr-rancher-node-"
30-
rancherCatalogPort = 443
31-
k8APIServer = 6443
3230
)
3331

3432
// VultrDriver ... driver struct
@@ -40,8 +38,15 @@ type VultrDriver struct {
4038
ResponsePayloads struct {
4139
Instance *govultr.Instance
4240
}
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"}
4550
}
4651

4752
// GetCreateFlags ... returns the mcnflag.Flag slice representing the flags
@@ -78,7 +83,7 @@ func (d *VultrDriver) GetCreateFlags() []mcnflag.Flag {
7883
mcnflag.IntFlag{
7984
EnvVar: "VULTR_OSID",
8085
Name: "vultr-os-id",
81-
Usage: "Operating system ID (default: [352] Debian 10)",
86+
Usage: "Operating system ID (default: [387] Ubuntu 20.04)",
8287
Value: defaultOSID,
8388
},
8489
mcnflag.StringFlag{
@@ -173,6 +178,17 @@ func (d *VultrDriver) GetCreateFlags() []mcnflag.Flag {
173178
Usage: "Port the docker machine will host on (default: 2376)",
174179
Value: defaultDockerPort,
175180
},
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+
},
176192
}
177193
}
178194

@@ -237,6 +253,8 @@ func (d *VultrDriver) SetConfigFromFlags(opts drivers.DriverOptions) error {
237253
d.RequestPayloads.InstanceCreateReq.ReservedIPv4 = opts.String("vultr-floating-ipv4-id")
238254
d.RequestPayloads.InstanceCreateReq.ActivationEmail = utils.BoolPtr(opts.Bool("vultr-send-activation-email"))
239255
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")
240258

241259
return nil
242260
}
@@ -266,8 +284,8 @@ func (d *VultrDriver) Create() (err error) {
266284
d.addSSHKeyToCloudInitUserData()
267285
}
268286

269-
// Allow docker through the firewall. Every vultr OS uses ufw
270-
d.appendToCloudInitUserDataCloudConfig([]byte("\r\nruncmd:\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()
271289

272290
// Create instance
273291
d.ResponsePayloads.Instance, err = vultrClient.Instance.Create(context.Background(), &d.RequestPayloads.InstanceCreateReq)
@@ -290,6 +308,9 @@ func (d *VultrDriver) Create() (err error) {
290308
break
291309
}
292310

311+
// We need to also set the IP in the base driver
312+
d.IPAddress, _ = d.GetIP()
313+
293314
return nil
294315
}
295316

@@ -522,6 +543,38 @@ func (d *VultrDriver) validatePlan() error {
522543
return notAvailableErr
523544
}
524545

546+
// addUFWCommandsToCloudInitUserDataCloudConfig ...
547+
func (d *VultrDriver) addUFWCommandsToCloudInitUserDataCloudConfig() {
548+
549+
// First add the run command
550+
d.appendToCloudInitUserDataCloudConfig([]byte("\r\nruncmd:"))
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+
525578
// appendToCloudInitUserDataCloudConfig ... appends to the #cloud-config of the userdata
526579
func (d *VultrDriver) appendToCloudInitUserDataCloudConfig(additionalCloudConfig []byte) {
527580
var userData []byte

0 commit comments

Comments
 (0)