diff --git a/builder/googlecompute/config.go b/builder/googlecompute/config.go index eebea011f..317d64ace 100644 --- a/builder/googlecompute/config.go +++ b/builder/googlecompute/config.go @@ -59,6 +59,8 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) { return nil, nil, err } + var errs *packer.MultiError + // Set defaults. if c.Network == "" { c.Network = "default" @@ -73,7 +75,12 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) { } if c.ImageName == "" { - c.ImageName = "packer-{{timestamp}}" + img, err := interpolate.Render("packer-{{timestamp}}", nil) + if err != nil { + errs = packer.MultiErrorAppend(errs, + fmt.Errorf("Unable to parse image name: %s ", err)) + c.ImageName = img + } } if c.InstanceName == "" { @@ -96,7 +103,6 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) { c.Comm.SSHUsername = "root" } - var errs *packer.MultiError if es := c.Comm.Prepare(&c.ctx); len(es) > 0 { errs = packer.MultiErrorAppend(errs, es...) } diff --git a/builder/googlecompute/config_test.go b/builder/googlecompute/config_test.go index 93997912e..581c1425b 100644 --- a/builder/googlecompute/config_test.go +++ b/builder/googlecompute/config_test.go @@ -2,48 +2,10 @@ package googlecompute import ( "io/ioutil" + "strings" "testing" ) -func testConfig(t *testing.T) map[string]interface{} { - return map[string]interface{}{ - "account_file": testAccountFile(t), - "project_id": "hashicorp", - "source_image": "foo", - "zone": "us-east-1a", - } -} - -func testConfigStruct(t *testing.T) *Config { - c, warns, errs := NewConfig(testConfig(t)) - if len(warns) > 0 { - t.Fatalf("bad: %#v", len(warns)) - } - if errs != nil { - t.Fatalf("bad: %#v", errs) - } - - return c -} - -func testConfigErr(t *testing.T, warns []string, err error, extra string) { - if len(warns) > 0 { - t.Fatalf("bad: %#v", warns) - } - if err == nil { - t.Fatalf("should error: %s", extra) - } -} - -func testConfigOk(t *testing.T, warns []string, err error) { - if len(warns) > 0 { - t.Fatalf("bad: %#v", warns) - } - if err != nil { - t.Fatalf("bad: %s", err) - } -} - func TestConfigPrepare(t *testing.T) { cases := []struct { Key string @@ -181,6 +143,54 @@ func TestConfigDefaults(t *testing.T) { } } +func TestImageName(t *testing.T) { + c, _, _ := NewConfig(testConfig(t)) + if strings.Contains(c.ImageName, "{{timestamp}}") { + t.Errorf("ImageName should be interpolated; found %s", c.ImageName) + } +} + +// Helper stuff below + +func testConfig(t *testing.T) map[string]interface{} { + return map[string]interface{}{ + "account_file": testAccountFile(t), + "project_id": "hashicorp", + "source_image": "foo", + "zone": "us-east-1a", + } +} + +func testConfigStruct(t *testing.T) *Config { + c, warns, errs := NewConfig(testConfig(t)) + if len(warns) > 0 { + t.Fatalf("bad: %#v", len(warns)) + } + if errs != nil { + t.Fatalf("bad: %#v", errs) + } + + return c +} + +func testConfigErr(t *testing.T, warns []string, err error, extra string) { + if len(warns) > 0 { + t.Fatalf("bad: %#v", warns) + } + if err == nil { + t.Fatalf("should error: %s", extra) + } +} + +func testConfigOk(t *testing.T, warns []string, err error) { + if len(warns) > 0 { + t.Fatalf("bad: %#v", warns) + } + if err != nil { + t.Fatalf("bad: %s", err) + } +} + func testAccountFile(t *testing.T) string { tf, err := ioutil.TempFile("", "packer") if err != nil {