diff --git a/terraform/context.go b/terraform/context.go index 0f2473568..b8fd909f6 100644 --- a/terraform/context.go +++ b/terraform/context.go @@ -1049,6 +1049,16 @@ func (c *walkContext) validateWalkFn() depgraph.WalkFunc { return nil } + // If the resouce name doesn't match the name regular + // expression, show a warning. + if !config.NameRegexp.Match([]byte(rn.Config.Name)) { + l.Lock() + meta.Warns = append(meta.Warns, fmt.Sprintf( + "'%s' warning: name can't contain special characters", + rn.Resource.Id)) + l.Unlock() + } + log.Printf("[INFO] Validating resource: %s", rn.Resource.Id) ws, es := rn.Resource.Provider.ValidateResource( rn.Resource.Info.Type, rn.Resource.Config) diff --git a/terraform/context_test.go b/terraform/context_test.go index 11b0e4e7b..857b923ab 100644 --- a/terraform/context_test.go +++ b/terraform/context_test.go @@ -312,6 +312,25 @@ func TestContextValidate_resourceConfig_good(t *testing.T) { } } +func TestContextValidate_resourceNameSymbol(t *testing.T) { + p := testProvider("aws") + m := testModule(t, "validate-resource-name-symbol") + c := testContext(t, &ContextOpts{ + Module: m, + Providers: map[string]ResourceProviderFactory{ + "aws": testProviderFuncFixed(p), + }, + }) + + w, e := c.Validate() + if len(w) == 0 { + t.Fatalf("bad: %#v", w) + } + if len(e) > 0 { + t.Fatalf("bad: %#v", e) + } +} + func TestContextValidate_requiredVar(t *testing.T) { m := testModule(t, "validate-required-var") c := testContext(t, &ContextOpts{ diff --git a/terraform/test-fixtures/validate-resource-name-symbol/main.tf b/terraform/test-fixtures/validate-resource-name-symbol/main.tf new file mode 100644 index 000000000..e89401f7c --- /dev/null +++ b/terraform/test-fixtures/validate-resource-name-symbol/main.tf @@ -0,0 +1,3 @@ +resource "aws_instance" "foo bar" { + num = "2" +}