From 24d919bed7fdebf2e204b0ef07175fd47548d0b1 Mon Sep 17 00:00:00 2001 From: Sascha Hanse Date: Thu, 26 Feb 2015 16:06:08 +0100 Subject: [PATCH] add flags for ipv6, backups and private networking to the DigitalOcean driver Signed-off-by: Sascha Hanse --- README.md | 3 ++ drivers/digitalocean/digitalocean.go | 79 ++++++++++++++++++++-------- 2 files changed, 60 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 07e03bdaee..d54fb60b6c 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,9 @@ Options: - `--digitalocean-image`: The name of the Digital Ocean image to use. Default: `docker` - `--digitalocean-region`: The region to create the droplet in. Default: `nyc3` - `--digitalocean-size`: The size of the Digital Ocean driver. Default: `512mb` + - `--digitalocean-ipv6`: Enable ipv6 for the droplet. Default: `false` + - `--digitalocean-backups`: Enable backups for the droplet. Default: `false` + - `--digitalocean-private-networking`: Enable private networking for the droplet. Default: `false` ### Microsoft Azure diff --git a/drivers/digitalocean/digitalocean.go b/drivers/digitalocean/digitalocean.go index 0cac929515..7c8f9ef7d7 100644 --- a/drivers/digitalocean/digitalocean.go +++ b/drivers/digitalocean/digitalocean.go @@ -21,22 +21,25 @@ const ( ) type Driver struct { - AccessToken string - DropletID int - DropletName string - Image string - MachineName string - IPAddress string - Region string - SSHKeyID int - Size string - CaCertPath string - PrivateKeyPath string - DriverKeyPath string - SwarmMaster bool - SwarmHost string - SwarmDiscovery string - storePath string + AccessToken string + DropletID int + DropletName string + Image string + MachineName string + IPAddress string + Region string + SSHKeyID int + Size string + IPv6 bool + Backups bool + PrivateNetworking bool + CaCertPath string + PrivateKeyPath string + DriverKeyPath string + SwarmMaster bool + SwarmHost string + SwarmDiscovery string + storePath string } func init() { @@ -73,6 +76,21 @@ func GetCreateFlags() []cli.Flag { Usage: "Digital Ocean size", Value: "512mb", }, + cli.BoolFlag{ + EnvVar: "DIGITALOCEAN_IPV6", + Name: "digitalocean-ipv6", + Usage: "enable ipv6 for droplet", + }, + cli.BoolFlag{ + EnvVar: "DIGITALOCEAN_PRIVATE_NETWORKING", + Name: "digitalocean-private-networking", + Usage: "enable private networking for droplet", + }, + cli.BoolFlag{ + EnvVar: "DIGITALOCEAN_BACKUPS", + Name: "digitalocean-backups", + Usage: "enable backups for droplet", + }, } } @@ -89,6 +107,9 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { d.Image = flags.String("digitalocean-image") d.Region = flags.String("digitalocean-region") d.Size = flags.String("digitalocean-size") + d.IPv6 = flags.Bool("digitalocean-ipv6") + d.PrivateNetworking = flags.Bool("digitalocean-private-networking") + d.Backups = flags.Bool("digitalocean-backups") d.SwarmMaster = flags.Bool("swarm-master") d.SwarmHost = flags.String("swarm-host") d.SwarmDiscovery = flags.String("swarm-discovery") @@ -101,7 +122,18 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { } func (d *Driver) PreCreateCheck() error { - return nil + client := d.getClient() + regions, _, err := client.Regions.List(nil) + if err != nil { + return err + } + for _, region := range regions { + if region.Slug == d.Region { + return nil + } + } + + return fmt.Errorf("digitalocean requires a valid region") } func (d *Driver) Create() error { @@ -119,11 +151,14 @@ func (d *Driver) Create() error { client := d.getClient() createRequest := &godo.DropletCreateRequest{ - Image: d.Image, - Name: d.MachineName, - Region: d.Region, - Size: d.Size, - SSHKeys: []interface{}{d.SSHKeyID}, + Image: d.Image, + Name: d.MachineName, + Region: d.Region, + Size: d.Size, + IPv6: d.IPv6, + PrivateNetworking: d.PrivateNetworking, + Backups: d.Backups, + SSHKeys: []interface{}{d.SSHKeyID}, } newDroplet, _, err := client.Droplets.Create(createRequest)