mirror of https://github.com/docker/docs.git
Enhances Digitalocean driver to support creating Droplets with user-data
Signed-off-by: Jan Broer <janeczku@yahoo.de>
This commit is contained in:
parent
98777f6774
commit
59d7c3ca61
|
@ -26,6 +26,7 @@ Options:
|
||||||
- `--digitalocean-ipv6`: Enable IPv6 support for the droplet.
|
- `--digitalocean-ipv6`: Enable IPv6 support for the droplet.
|
||||||
- `--digitalocean-private-networking`: Enable private networking support for the droplet.
|
- `--digitalocean-private-networking`: Enable private networking support for the droplet.
|
||||||
- `--digitalocean-backups`: Enable Digital Oceans backups for the droplet.
|
- `--digitalocean-backups`: Enable Digital Oceans backups for the droplet.
|
||||||
|
- `--digitalocean-userdata`: Path to file containing User Data for the droplet.
|
||||||
|
|
||||||
The DigitalOcean driver will use `ubuntu-14-04-x64` as the default image.
|
The DigitalOcean driver will use `ubuntu-14-04-x64` as the default image.
|
||||||
|
|
||||||
|
@ -40,3 +41,4 @@ Environment variables and default values:
|
||||||
| `--digitalocean-ipv6` | `DIGITALOCEAN_IPV6` | `false` |
|
| `--digitalocean-ipv6` | `DIGITALOCEAN_IPV6` | `false` |
|
||||||
| `--digitalocean-private-networking` | `DIGITALOCEAN_PRIVATE_NETWORKING` | `false` |
|
| `--digitalocean-private-networking` | `DIGITALOCEAN_PRIVATE_NETWORKING` | `false` |
|
||||||
| `--digitalocean-backups` | `DIGITALOCEAN_BACKUPS` | `false` |
|
| `--digitalocean-backups` | `DIGITALOCEAN_BACKUPS` | `false` |
|
||||||
|
| `--digitalocean-userdata` | `DIGITALOCEAN_USERDATA` | - |
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/digitalocean/godo"
|
"github.com/digitalocean/godo"
|
||||||
|
@ -27,6 +28,7 @@ type Driver struct {
|
||||||
IPv6 bool
|
IPv6 bool
|
||||||
Backups bool
|
Backups bool
|
||||||
PrivateNetworking bool
|
PrivateNetworking bool
|
||||||
|
UserDataFile string
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -83,6 +85,11 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
|
||||||
Name: "digitalocean-backups",
|
Name: "digitalocean-backups",
|
||||||
Usage: "enable backups for droplet",
|
Usage: "enable backups for droplet",
|
||||||
},
|
},
|
||||||
|
mcnflag.StringFlag{
|
||||||
|
EnvVar: "DIGITALOCEAN_USERDATA",
|
||||||
|
Name: "digitalocean-userdata",
|
||||||
|
Usage: "path to file with cloud-init user-data",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,6 +122,7 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
|
||||||
d.IPv6 = flags.Bool("digitalocean-ipv6")
|
d.IPv6 = flags.Bool("digitalocean-ipv6")
|
||||||
d.PrivateNetworking = flags.Bool("digitalocean-private-networking")
|
d.PrivateNetworking = flags.Bool("digitalocean-private-networking")
|
||||||
d.Backups = flags.Bool("digitalocean-backups")
|
d.Backups = flags.Bool("digitalocean-backups")
|
||||||
|
d.UserDataFile = flags.String("digitalocean-userdata")
|
||||||
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")
|
||||||
|
@ -129,6 +137,12 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Driver) PreCreateCheck() error {
|
func (d *Driver) PreCreateCheck() error {
|
||||||
|
if d.UserDataFile != "" {
|
||||||
|
if _, err := os.Stat(d.UserDataFile); os.IsNotExist(err) {
|
||||||
|
return fmt.Errorf("user-data file %s could not be found", d.UserDataFile)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
client := d.getClient()
|
client := d.getClient()
|
||||||
regions, _, err := client.Regions.List(nil)
|
regions, _, err := client.Regions.List(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -144,6 +158,15 @@ func (d *Driver) PreCreateCheck() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Driver) Create() error {
|
func (d *Driver) Create() error {
|
||||||
|
var userdata string
|
||||||
|
if d.UserDataFile != "" {
|
||||||
|
buf, err := ioutil.ReadFile(d.UserDataFile)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
userdata = string(buf)
|
||||||
|
}
|
||||||
|
|
||||||
log.Infof("Creating SSH key...")
|
log.Infof("Creating SSH key...")
|
||||||
|
|
||||||
key, err := d.createSSHKey()
|
key, err := d.createSSHKey()
|
||||||
|
@ -165,6 +188,7 @@ func (d *Driver) Create() error {
|
||||||
IPv6: d.IPv6,
|
IPv6: d.IPv6,
|
||||||
PrivateNetworking: d.PrivateNetworking,
|
PrivateNetworking: d.PrivateNetworking,
|
||||||
Backups: d.Backups,
|
Backups: d.Backups,
|
||||||
|
UserData: userdata,
|
||||||
SSHKeys: []godo.DropletCreateSSHKey{{ID: d.SSHKeyID}},
|
SSHKeys: []godo.DropletCreateSSHKey{{ID: d.SSHKeyID}},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue