Merge pull request #164 from mitchellh/do-env-vars

builder/digitalocean: use detected env variables for credentials
This commit is contained in:
Mitchell Hashimoto 2013-07-12 01:00:50 -07:00
commit 13182d97b5
3 changed files with 40 additions and 2 deletions

View File

@ -12,6 +12,7 @@ import (
"github.com/mitchellh/packer/builder/common" "github.com/mitchellh/packer/builder/common"
"github.com/mitchellh/packer/packer" "github.com/mitchellh/packer/packer"
"log" "log"
"os"
"strconv" "strconv"
"text/template" "text/template"
"time" "time"
@ -64,6 +65,16 @@ func (b *Builder) Prepare(raws ...interface{}) error {
// Optional configuration with defaults // Optional configuration with defaults
// //
if b.config.APIKey == "" {
// Default to environment variable for api_key, if it exists
b.config.APIKey = os.Getenv("DIGITALOCEAN_API_KEY")
}
if b.config.ClientID == "" {
// Default to environment variable for client_id, if it exists
b.config.ClientID = os.Getenv("DIGITALOCEAN_CLIENT_ID")
}
if b.config.RegionID == 0 { if b.config.RegionID == 0 {
// Default to Region "New York" // Default to Region "New York"
b.config.RegionID = 1 b.config.RegionID = 1

View File

@ -2,10 +2,17 @@ package digitalocean
import ( import (
"github.com/mitchellh/packer/packer" "github.com/mitchellh/packer/packer"
"os"
"strconv" "strconv"
"testing" "testing"
) )
func init() {
// Clear out the credential env vars
os.Setenv("DIGITALOCEAN_API_KEY", "")
os.Setenv("DIGITALOCEAN_CLIENT_ID", "")
}
func testConfig() map[string]interface{} { func testConfig() map[string]interface{} {
return map[string]interface{}{ return map[string]interface{}{
"client_id": "foo", "client_id": "foo",
@ -55,6 +62,15 @@ func TestBuilderPrepare_APIKey(t *testing.T) {
if err == nil { if err == nil {
t.Fatal("should have error") t.Fatal("should have error")
} }
// Test env variable
delete(config, "api_key")
os.Setenv("DIGITALOCEAN_API_KEY", "foo")
defer os.Setenv("DIGITALOCEAN_API_KEY", "")
err = b.Prepare(config)
if err != nil {
t.Fatalf("should not have error: %s", err)
}
} }
func TestBuilderPrepare_ClientID(t *testing.T) { func TestBuilderPrepare_ClientID(t *testing.T) {
@ -79,6 +95,15 @@ func TestBuilderPrepare_ClientID(t *testing.T) {
if err == nil { if err == nil {
t.Fatal("should have error") t.Fatal("should have error")
} }
// Test env variable
delete(config, "client_id")
os.Setenv("DIGITALOCEAN_CLIENT_ID", "foo")
defer os.Setenv("DIGITALOCEAN_CLIENT_ID", "")
err = b.Prepare(config)
if err != nil {
t.Fatalf("should not have error: %s", err)
}
} }
func TestBuilderPrepare_RegionID(t *testing.T) { func TestBuilderPrepare_RegionID(t *testing.T) {

View File

@ -25,11 +25,13 @@ Required:
* `api_key` (string) - The API key to use to access your account. You can * `api_key` (string) - The API key to use to access your account. You can
retrieve this on the "API" page visible after logging into your account retrieve this on the "API" page visible after logging into your account
on DigitalOcean. on DigitalOcean. Alternatively, the builder looks for the environment
variable `DIGITALOCEAN_API_KEY`.
* `client_id` (string) - The client ID to use to access your account. You can * `client_id` (string) - The client ID to use to access your account. You can
find this on the "API" page visible after logging into your account on find this on the "API" page visible after logging into your account on
DigitalOcean. DigitalOcean. Alternatively, the builder looks for the environment
variable `DIGITALOCEAN_CLIENT_ID`.
Optional: Optional: