Commit 823771d7 authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

Merge pull request #761 from mitchellh/do-private-networking

builders/digitalocean: private networking
parents 037a744b 00fe97ca
...@@ -90,13 +90,14 @@ func (d DigitalOceanClient) DestroyKey(id uint) error { ...@@ -90,13 +90,14 @@ func (d DigitalOceanClient) DestroyKey(id uint) error {
} }
// Creates a droplet and returns it's id // Creates a droplet and returns it's id
func (d DigitalOceanClient) CreateDroplet(name string, size uint, image uint, region uint, keyId uint) (uint, error) { func (d DigitalOceanClient) CreateDroplet(name string, size uint, image uint, region uint, keyId uint, privateNetworking bool) (uint, error) {
params := url.Values{} params := url.Values{}
params.Set("name", name) params.Set("name", name)
params.Set("size_id", fmt.Sprintf("%v", size)) params.Set("size_id", fmt.Sprintf("%v", size))
params.Set("image_id", fmt.Sprintf("%v", image)) params.Set("image_id", fmt.Sprintf("%v", image))
params.Set("region_id", fmt.Sprintf("%v", region)) params.Set("region_id", fmt.Sprintf("%v", region))
params.Set("ssh_key_ids", fmt.Sprintf("%v", keyId)) params.Set("ssh_key_ids", fmt.Sprintf("%v", keyId))
params.Set("private_networking", fmt.Sprintf("%v", privateNetworking))
body, err := NewRequest(d, "droplets/new", params) body, err := NewRequest(d, "droplets/new", params)
if err != nil { if err != nil {
......
...@@ -30,10 +30,11 @@ type config struct { ...@@ -30,10 +30,11 @@ type config struct {
SizeID uint `mapstructure:"size_id"` SizeID uint `mapstructure:"size_id"`
ImageID uint `mapstructure:"image_id"` ImageID uint `mapstructure:"image_id"`
SnapshotName string `mapstructure:"snapshot_name"` PrivateNetworking bool `mapstructure:"private_networking"`
DropletName string `mapstructure:"droplet_name"` SnapshotName string `mapstructure:"snapshot_name"`
SSHUsername string `mapstructure:"ssh_username"` DropletName string `mapstructure:"droplet_name"`
SSHPort uint `mapstructure:"ssh_port"` SSHUsername string `mapstructure:"ssh_username"`
SSHPort uint `mapstructure:"ssh_port"`
RawSSHTimeout string `mapstructure:"ssh_timeout"` RawSSHTimeout string `mapstructure:"ssh_timeout"`
RawStateTimeout string `mapstructure:"state_timeout"` RawStateTimeout string `mapstructure:"state_timeout"`
......
...@@ -356,6 +356,39 @@ func TestBuilderPrepare_StateTimeout(t *testing.T) { ...@@ -356,6 +356,39 @@ func TestBuilderPrepare_StateTimeout(t *testing.T) {
} }
func TestBuilderPrepare_PrivateNetworking(t *testing.T) {
var b Builder
config := testConfig()
// Test default
warnings, err := b.Prepare(config)
if len(warnings) > 0 {
t.Fatalf("bad: %#v", warnings)
}
if err != nil {
t.Fatalf("should not have error: %s", err)
}
if b.config.PrivateNetworking != false {
t.Errorf("invalid: %s", b.config.PrivateNetworking)
}
// Test set
config["private_networking"] = true
b = Builder{}
warnings, err = b.Prepare(config)
if len(warnings) > 0 {
t.Fatalf("bad: %#v", warnings)
}
if err != nil {
t.Fatalf("should not have error: %s", err)
}
if b.config.PrivateNetworking != true {
t.Errorf("invalid: %s", b.config.PrivateNetworking)
}
}
func TestBuilderPrepare_SnapshotName(t *testing.T) { func TestBuilderPrepare_SnapshotName(t *testing.T) {
var b Builder var b Builder
config := testConfig() config := testConfig()
......
...@@ -19,7 +19,7 @@ func (s *stepCreateDroplet) Run(state multistep.StateBag) multistep.StepAction { ...@@ -19,7 +19,7 @@ func (s *stepCreateDroplet) Run(state multistep.StateBag) multistep.StepAction {
ui.Say("Creating droplet...") ui.Say("Creating droplet...")
// Create the droplet based on configuration // Create the droplet based on configuration
dropletId, err := client.CreateDroplet(c.DropletName, c.SizeID, c.ImageID, c.RegionID, sshKeyId) dropletId, err := client.CreateDroplet(c.DropletName, c.SizeID, c.ImageID, c.RegionID, sshKeyId, c.PrivateNetworking)
if err != nil { if err != nil {
err := fmt.Errorf("Error creating droplet: %s", err) err := fmt.Errorf("Error creating droplet: %s", err)
......
...@@ -46,6 +46,9 @@ Optional: ...@@ -46,6 +46,9 @@ Optional:
* `size_id` (int) - The ID of the droplet size to use. This defaults to "66," * `size_id` (int) - The ID of the droplet size to use. This defaults to "66,"
which is the 512MB droplet. which is the 512MB droplet.
* `private_networking` (bool) - Set to `true` to enable private networking
for the droplet being created. This defaults to `false`, or not enabled.
* `snapshot_name` (string) - The name of the resulting snapshot that will * `snapshot_name` (string) - The name of the resulting snapshot that will
appear in your account. This must be unique. appear in your account. This must be unique.
To help make this unique, use a function like `timestamp` (see To help make this unique, use a function like `timestamp` (see
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment