diff --git a/terraform/state.go b/terraform/state.go index a39e34ad3..4c65c16e3 100644 --- a/terraform/state.go +++ b/terraform/state.go @@ -34,10 +34,16 @@ type ResourceState struct { func (s *ResourceState) MergeDiff( d map[string]*ResourceAttrDiff, computedID string) ResourceState { - result := *s + var result ResourceState + if s != nil { + result = *s + } + result.Attributes = make(map[string]string) - for k, v := range s.Attributes { - result.Attributes[k] = v + if s != nil { + for k, v := range s.Attributes { + result.Attributes[k] = v + } } for k, diff := range d { if diff.NewComputed { diff --git a/terraform/state_test.go b/terraform/state_test.go index c26cb80f1..efb4369ca 100644 --- a/terraform/state_test.go +++ b/terraform/state_test.go @@ -41,3 +41,24 @@ func TestResourceState_MergeDiff(t *testing.T) { t.Fatalf("bad: %#v", rs2.Attributes) } } + +func TestResourceState_MergeDiff_nil(t *testing.T) { + var rs *ResourceState = nil + + diff := map[string]*ResourceAttrDiff{ + "foo": &ResourceAttrDiff{ + Old: "", + New: "baz", + }, + } + + rs2 := rs.MergeDiff(diff, "computed") + + expected := map[string]string{ + "foo": "baz", + } + + if !reflect.DeepEqual(expected, rs2.Attributes) { + t.Fatalf("bad: %#v", rs2.Attributes) + } +}