add flags for ipv6, backups and private networking to the DigitalOcean driver

Signed-off-by: Sascha Hanse <shanse@gmail.com>
This commit is contained in:
Sascha Hanse 2015-02-26 16:06:08 +01:00
parent ae57d4d142
commit 24d919bed7
2 changed files with 60 additions and 22 deletions

View File

@ -130,6 +130,9 @@ Options:
- `--digitalocean-image`: The name of the Digital Ocean image to use. Default: `docker` - `--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-region`: The region to create the droplet in. Default: `nyc3`
- `--digitalocean-size`: The size of the Digital Ocean driver. Default: `512mb` - `--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 ### Microsoft Azure

View File

@ -21,22 +21,25 @@ const (
) )
type Driver struct { type Driver struct {
AccessToken string AccessToken string
DropletID int DropletID int
DropletName string DropletName string
Image string Image string
MachineName string MachineName string
IPAddress string IPAddress string
Region string Region string
SSHKeyID int SSHKeyID int
Size string Size string
CaCertPath string IPv6 bool
PrivateKeyPath string Backups bool
DriverKeyPath string PrivateNetworking bool
SwarmMaster bool CaCertPath string
SwarmHost string PrivateKeyPath string
SwarmDiscovery string DriverKeyPath string
storePath string SwarmMaster bool
SwarmHost string
SwarmDiscovery string
storePath string
} }
func init() { func init() {
@ -73,6 +76,21 @@ func GetCreateFlags() []cli.Flag {
Usage: "Digital Ocean size", Usage: "Digital Ocean size",
Value: "512mb", 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.Image = flags.String("digitalocean-image")
d.Region = flags.String("digitalocean-region") d.Region = flags.String("digitalocean-region")
d.Size = flags.String("digitalocean-size") 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.SwarmMaster = flags.Bool("swarm-master")
d.SwarmHost = flags.String("swarm-host") d.SwarmHost = flags.String("swarm-host")
d.SwarmDiscovery = flags.String("swarm-discovery") d.SwarmDiscovery = flags.String("swarm-discovery")
@ -101,7 +122,18 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
} }
func (d *Driver) PreCreateCheck() 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 { func (d *Driver) Create() error {
@ -119,11 +151,14 @@ func (d *Driver) Create() error {
client := d.getClient() client := d.getClient()
createRequest := &godo.DropletCreateRequest{ createRequest := &godo.DropletCreateRequest{
Image: d.Image, Image: d.Image,
Name: d.MachineName, Name: d.MachineName,
Region: d.Region, Region: d.Region,
Size: d.Size, Size: d.Size,
SSHKeys: []interface{}{d.SSHKeyID}, IPv6: d.IPv6,
PrivateNetworking: d.PrivateNetworking,
Backups: d.Backups,
SSHKeys: []interface{}{d.SSHKeyID},
} }
newDroplet, _, err := client.Droplets.Create(createRequest) newDroplet, _, err := client.Droplets.Create(createRequest)