mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
Merge pull request #6499 from hashicorp/b-6005
helper/schema: Normalize bools to "true"/"false" in diffs
This commit is contained in:
commit
92f9fab734
@ -21,6 +21,10 @@ func testResource() *schema.Resource {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
},
|
},
|
||||||
|
"optional_bool": &schema.Schema{
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
},
|
||||||
"optional_force_new": &schema.Schema{
|
"optional_force_new": &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
|
@ -124,6 +124,47 @@ resource "test_resource" "foo" {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Covers specific scenario in #6005, handled by normalizing boolean strings in
|
||||||
|
// helper/schema
|
||||||
|
func TestResource_ignoreChangesForceNewBoolean(t *testing.T) {
|
||||||
|
resource.UnitTest(t, resource.TestCase{
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccCheckResourceDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: strings.TrimSpace(`
|
||||||
|
resource "test_resource" "foo" {
|
||||||
|
required = "yep"
|
||||||
|
optional_force_new = "one"
|
||||||
|
optional_bool = true
|
||||||
|
lifecycle {
|
||||||
|
ignore_changes = ["optional_force_new"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`),
|
||||||
|
Check: func(s *terraform.State) error {
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
resource.TestStep{
|
||||||
|
Config: strings.TrimSpace(`
|
||||||
|
resource "test_resource" "foo" {
|
||||||
|
required = "yep"
|
||||||
|
optional_force_new = "two"
|
||||||
|
optional_bool = true
|
||||||
|
lifecycle {
|
||||||
|
ignore_changes = ["optional_force_new"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`),
|
||||||
|
Check: func(s *terraform.State) error {
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestResource_ignoreChangesMap(t *testing.T) {
|
func TestResource_ignoreChangesMap(t *testing.T) {
|
||||||
resource.UnitTest(t, resource.TestCase{
|
resource.UnitTest(t, resource.TestCase{
|
||||||
Providers: testAccProviders,
|
Providers: testAccProviders,
|
||||||
|
@ -243,6 +243,20 @@ func (s *Schema) finalizeDiff(
|
|||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if s.Type == TypeBool {
|
||||||
|
normalizeBoolString := func(s string) string {
|
||||||
|
switch s {
|
||||||
|
case "0":
|
||||||
|
return "false"
|
||||||
|
case "1":
|
||||||
|
return "true"
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
d.Old = normalizeBoolString(d.Old)
|
||||||
|
d.New = normalizeBoolString(d.New)
|
||||||
|
}
|
||||||
|
|
||||||
if d.NewRemoved {
|
if d.NewRemoved {
|
||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
@ -491,7 +491,7 @@ func TestSchemaMap_Diff(t *testing.T) {
|
|||||||
Attributes: map[string]*terraform.ResourceAttrDiff{
|
Attributes: map[string]*terraform.ResourceAttrDiff{
|
||||||
"port": &terraform.ResourceAttrDiff{
|
"port": &terraform.ResourceAttrDiff{
|
||||||
Old: "",
|
Old: "",
|
||||||
New: "0",
|
New: "false",
|
||||||
RequiresNew: true,
|
RequiresNew: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -2344,6 +2344,56 @@ func TestSchemaMap_Diff(t *testing.T) {
|
|||||||
|
|
||||||
Err: false,
|
Err: false,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"Bools can be set with 0/1 in config, still get true/false": {
|
||||||
|
Schema: map[string]*Schema{
|
||||||
|
"one": &Schema{
|
||||||
|
Type: TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
},
|
||||||
|
"two": &Schema{
|
||||||
|
Type: TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
},
|
||||||
|
"three": &Schema{
|
||||||
|
Type: TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
State: &terraform.InstanceState{
|
||||||
|
Attributes: map[string]string{
|
||||||
|
"one": "false",
|
||||||
|
"two": "true",
|
||||||
|
"three": "true",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
Config: map[string]interface{}{
|
||||||
|
"one": "1",
|
||||||
|
"two": "0",
|
||||||
|
},
|
||||||
|
|
||||||
|
Diff: &terraform.InstanceDiff{
|
||||||
|
Attributes: map[string]*terraform.ResourceAttrDiff{
|
||||||
|
"one": &terraform.ResourceAttrDiff{
|
||||||
|
Old: "false",
|
||||||
|
New: "true",
|
||||||
|
},
|
||||||
|
"two": &terraform.ResourceAttrDiff{
|
||||||
|
Old: "true",
|
||||||
|
New: "false",
|
||||||
|
},
|
||||||
|
"three": &terraform.ResourceAttrDiff{
|
||||||
|
Old: "true",
|
||||||
|
New: "false",
|
||||||
|
NewRemoved: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
Err: false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for tn, tc := range cases {
|
for tn, tc := range cases {
|
||||||
|
Loading…
Reference in New Issue
Block a user