|
|
|
|
@ -327,6 +327,62 @@ new line
|
|
|
|
|
~ ami = "ami-BEFORE" -> "ami-AFTER" # forces replacement
|
|
|
|
|
~ id = "i-02ae66f368e8518a9" -> (known after apply)
|
|
|
|
|
}
|
|
|
|
|
`,
|
|
|
|
|
},
|
|
|
|
|
"force replacement with empty before value": {
|
|
|
|
|
Action: plans.DeleteThenCreate,
|
|
|
|
|
Mode: addrs.ManagedResourceMode,
|
|
|
|
|
Before: cty.ObjectVal(map[string]cty.Value{
|
|
|
|
|
"name": cty.StringVal("name"),
|
|
|
|
|
"forced": cty.NullVal(cty.String),
|
|
|
|
|
}),
|
|
|
|
|
After: cty.ObjectVal(map[string]cty.Value{
|
|
|
|
|
"name": cty.StringVal("name"),
|
|
|
|
|
"forced": cty.StringVal("example"),
|
|
|
|
|
}),
|
|
|
|
|
Schema: &configschema.Block{
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"name": {Type: cty.String, Optional: true},
|
|
|
|
|
"forced": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
RequiredReplace: cty.NewPathSet(cty.Path{
|
|
|
|
|
cty.GetAttrStep{Name: "forced"},
|
|
|
|
|
}),
|
|
|
|
|
Tainted: false,
|
|
|
|
|
ExpectedOutput: ` # test_instance.example must be replaced
|
|
|
|
|
-/+ resource "test_instance" "example" {
|
|
|
|
|
+ forced = "example" # forces replacement
|
|
|
|
|
name = "name"
|
|
|
|
|
}
|
|
|
|
|
`,
|
|
|
|
|
},
|
|
|
|
|
"force replacement with empty before value legacy": {
|
|
|
|
|
Action: plans.DeleteThenCreate,
|
|
|
|
|
Mode: addrs.ManagedResourceMode,
|
|
|
|
|
Before: cty.ObjectVal(map[string]cty.Value{
|
|
|
|
|
"name": cty.StringVal("name"),
|
|
|
|
|
"forced": cty.StringVal(""),
|
|
|
|
|
}),
|
|
|
|
|
After: cty.ObjectVal(map[string]cty.Value{
|
|
|
|
|
"name": cty.StringVal("name"),
|
|
|
|
|
"forced": cty.StringVal("example"),
|
|
|
|
|
}),
|
|
|
|
|
Schema: &configschema.Block{
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"name": {Type: cty.String, Optional: true},
|
|
|
|
|
"forced": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
RequiredReplace: cty.NewPathSet(cty.Path{
|
|
|
|
|
cty.GetAttrStep{Name: "forced"},
|
|
|
|
|
}),
|
|
|
|
|
Tainted: false,
|
|
|
|
|
ExpectedOutput: ` # test_instance.example must be replaced
|
|
|
|
|
-/+ resource "test_instance" "example" {
|
|
|
|
|
+ forced = "example" # forces replacement
|
|
|
|
|
name = "name"
|
|
|
|
|
}
|
|
|
|
|
`,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|