config: error when loading multiple lifecycle blocks

Fixes #8776

This introduces an error when multiple `lifecycle` blocks exist on a
resource in the configuration.
This commit is contained in:
Mitchell Hashimoto 2016-12-10 18:52:05 -05:00
parent 626ad57546
commit 5d684b399c
No known key found for this signature in database
GPG Key ID: 744E147AA52F5B0A
3 changed files with 17 additions and 0 deletions

View File

@ -781,6 +781,12 @@ func loadManagedResourcesHcl(list *ast.ObjectList) ([]*Resource, error) {
// destroying the existing instance
var lifecycle ResourceLifecycle
if o := listVal.Filter("lifecycle"); len(o.Items) > 0 {
if len(o.Items) > 1 {
return nil, fmt.Errorf(
"%s[%s]: Multiple lifecycle blocks found, expected one",
t, k)
}
// Check for invalid keys
valid := []string{"create_before_destroy", "ignore_changes", "prevent_destroy"}
if err := checkHCLKeys(o.Items[0].Val, valid); err != nil {

View File

@ -78,6 +78,13 @@ func TestLoadFile_resourceArityMistake(t *testing.T) {
}
}
func TestLoadFile_resourceMultiLifecycle(t *testing.T) {
_, err := LoadFile(filepath.Join(fixtureDir, "resource-multi-lifecycle.tf"))
if err == nil {
t.Fatal("should have error")
}
}
func TestLoadFile_dataSourceArityMistake(t *testing.T) {
_, err := LoadFile(filepath.Join(fixtureDir, "data-source-arity-mistake.tf"))
if err == nil {

View File

@ -0,0 +1,4 @@
resource "aws_instance" "foo" {
lifecycle {}
lifecycle {}
}