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-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

View File

@ -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)