From c6647a3bb7aeffd6a276053763a910d68fd8a60d Mon Sep 17 00:00:00 2001 From: Chris Marchesi Date: Tue, 30 May 2017 20:42:37 -0700 Subject: [PATCH] helper/schema: CustomizeDiff -> Review To keep with the current convention of most other schema.Resource functional fields being fairly short, CustomizeDiff has been changed to "Review". It would be "Diff", however it is already used by existing functions in schema.Provider and schema.Resource. --- .../test/resource_with_custom_diff.go | 12 ++++---- helper/schema/resource.go | 21 ++++++------- helper/schema/resource_test.go | 2 +- helper/schema/schema.go | 10 +++---- helper/schema/schema_test.go | 30 +++++++++---------- 5 files changed, 38 insertions(+), 37 deletions(-) diff --git a/builtin/providers/test/resource_with_custom_diff.go b/builtin/providers/test/resource_with_custom_diff.go index 20d3f0ef9..9c7352ce5 100644 --- a/builtin/providers/test/resource_with_custom_diff.go +++ b/builtin/providers/test/resource_with_custom_diff.go @@ -8,11 +8,11 @@ import ( func testResourceCustomDiff() *schema.Resource { return &schema.Resource{ - Create: testResourceCustomDiffCreate, - Read: testResourceCustomDiffRead, - CustomizeDiff: testResourceCustomDiffCustomizeDiff, - Update: testResourceCustomDiffUpdate, - Delete: testResourceCustomDiffDelete, + Create: testResourceCustomDiffCreate, + Read: testResourceCustomDiffRead, + Review: testResourceCustomDiffReview, + Update: testResourceCustomDiffUpdate, + Delete: testResourceCustomDiffDelete, Schema: map[string]*schema.Schema{ "required": { Type: schema.TypeString, @@ -57,7 +57,7 @@ func testResourceCustomDiffRead(d *schema.ResourceData, meta interface{}) error return nil } -func testResourceCustomDiffCustomizeDiff(d *schema.ResourceDiff, meta interface{}) error { +func testResourceCustomDiffReview(d *schema.ResourceDiff, meta interface{}) error { if d.Get("veto").(bool) == true { return fmt.Errorf("veto is true, diff vetoed") } diff --git a/helper/schema/resource.go b/helper/schema/resource.go index 5d8bc3941..f33621a16 100644 --- a/helper/schema/resource.go +++ b/helper/schema/resource.go @@ -85,15 +85,16 @@ type Resource struct { Delete DeleteFunc Exists ExistsFunc - // CustomizeDiff is a custom function for controlling diff logic after the - // initial diff is performed - it can be used to veto particular changes in - // the diff, customize the diff that has been created, or diff values not - // controlled by config. It is passed a *ResourceDiff, a structure similar to - // ResourceData but lacking most write functions, allowing the provider to - // customize the diff only. + // Review is a custom function for "reviewing" the diff that Terraform has + // created for this resource - it can be used to customize the diff that has + // been created, diff values not controlled by configuration, or even veto + // the diff altogether and abort the plan. It is passed a *ResourceDiff, a + // structure similar to ResourceData but lacking most write functions, + // allowing the provider to customize the diff only. // - // Only computed fields can be customized by this function. - CustomizeDiff CustomizeDiffFunc + // For the most part, only computed fields can be customized by this + // function. + Review ReviewFunc // Importer is the ResourceImporter implementation for this resource. // If this is nil, then this resource does not support importing. If @@ -137,7 +138,7 @@ type StateMigrateFunc func( int, *terraform.InstanceState, interface{}) (*terraform.InstanceState, error) // See Resource documentation. -type CustomizeDiffFunc func(*ResourceDiff, interface{}) error +type ReviewFunc func(*ResourceDiff, interface{}) error // Apply creates, updates, and/or deletes a resource. func (r *Resource) Apply( @@ -229,7 +230,7 @@ func (r *Resource) Diff( return nil, fmt.Errorf("[ERR] Error decoding timeout: %s", err) } - instanceDiff, err := schemaMap(r.Schema).Diff(s, c, r.CustomizeDiff, meta) + instanceDiff, err := schemaMap(r.Schema).Diff(s, c, r.Review, meta) if err != nil { return instanceDiff, err } diff --git a/helper/schema/resource_test.go b/helper/schema/resource_test.go index 22bfd1b8c..6670d1d90 100644 --- a/helper/schema/resource_test.go +++ b/helper/schema/resource_test.go @@ -266,7 +266,7 @@ func TestResourceDiff_CustomizeFunc(t *testing.T) { var called bool - r.CustomizeDiff = func(d *ResourceDiff, m interface{}) error { + r.Review = func(d *ResourceDiff, m interface{}) error { called = true return nil } diff --git a/helper/schema/schema.go b/helper/schema/schema.go index b0b9c937b..70aa77ba9 100644 --- a/helper/schema/schema.go +++ b/helper/schema/schema.go @@ -386,7 +386,7 @@ func (m *schemaMap) DeepCopy() schemaMap { func (m schemaMap) Diff( s *terraform.InstanceState, c *terraform.ResourceConfig, - customizeFunc CustomizeDiffFunc, + review ReviewFunc, meta interface{}) (*terraform.InstanceDiff, error) { result := new(terraform.InstanceDiff) result.Attributes = make(map[string]*terraform.ResourceAttrDiff) @@ -411,10 +411,10 @@ func (m schemaMap) Diff( // If this is a non-destroy diff, call any custom diff logic that has been // defined. - if !result.DestroyTainted && customizeFunc != nil { + if !result.DestroyTainted && review != nil { mc := m.DeepCopy() rd := newResourceDiff(mc, c, s, result) - if err := customizeFunc(rd, meta); err != nil { + if err := review(rd, meta); err != nil { return nil, err } for _, k := range rd.UpdatedKeys() { @@ -451,10 +451,10 @@ func (m schemaMap) Diff( } // Re-run customization - if !result2.DestroyTainted && customizeFunc != nil { + if !result2.DestroyTainted && review != nil { mc := m.DeepCopy() rd := newResourceDiff(mc, c, d.state, result2) - if err := customizeFunc(rd, meta); err != nil { + if err := review(rd, meta); err != nil { return nil, err } for _, k := range rd.UpdatedKeys() { diff --git a/helper/schema/schema_test.go b/helper/schema/schema_test.go index 3698fe0f4..f709c0ccc 100644 --- a/helper/schema/schema_test.go +++ b/helper/schema/schema_test.go @@ -139,7 +139,7 @@ func TestSchemaMap_Diff(t *testing.T) { State *terraform.InstanceState Config map[string]interface{} ConfigVariables map[string]ast.Variable - CustomizeDiff CustomizeDiffFunc + Review ReviewFunc Diff *terraform.InstanceDiff Err bool }{ @@ -2827,7 +2827,7 @@ func TestSchemaMap_Diff(t *testing.T) { }, { - Name: "overridden diff with a CustomizeDiff function, ForceNew not in schema", + Name: "overridden diff with a Review function, ForceNew not in schema", Schema: map[string]*Schema{ "availability_zone": &Schema{ Type: TypeString, @@ -2842,7 +2842,7 @@ func TestSchemaMap_Diff(t *testing.T) { "availability_zone": "foo", }, - CustomizeDiff: func(d *ResourceDiff, meta interface{}) error { + Review: func(d *ResourceDiff, meta interface{}) error { if err := d.SetNew("availability_zone", "bar"); err != nil { return err } @@ -2866,7 +2866,7 @@ func TestSchemaMap_Diff(t *testing.T) { }, { - Name: "overridden diff with a CustomizeDiff function, ForceNew in schema", + Name: "overridden diff with a Review function, ForceNew in schema", Schema: map[string]*Schema{ "availability_zone": &Schema{ Type: TypeString, @@ -2882,7 +2882,7 @@ func TestSchemaMap_Diff(t *testing.T) { "availability_zone": "foo", }, - CustomizeDiff: func(d *ResourceDiff, meta interface{}) error { + Review: func(d *ResourceDiff, meta interface{}) error { if err := d.SetNew("availability_zone", "bar"); err != nil { return err } @@ -2903,7 +2903,7 @@ func TestSchemaMap_Diff(t *testing.T) { }, { - Name: "required field with computed diff added with CustomizeDiff function", + Name: "required field with computed diff added with Review function", Schema: map[string]*Schema{ "ami_id": &Schema{ Type: TypeString, @@ -2921,7 +2921,7 @@ func TestSchemaMap_Diff(t *testing.T) { "ami_id": "foo", }, - CustomizeDiff: func(d *ResourceDiff, meta interface{}) error { + Review: func(d *ResourceDiff, meta interface{}) error { if err := d.SetNew("instance_id", "bar"); err != nil { return err } @@ -2945,7 +2945,7 @@ func TestSchemaMap_Diff(t *testing.T) { }, { - Name: "Set ForceNew only marks the changing element as ForceNew - CustomizeDiffFunc edition", + Name: "Set ForceNew only marks the changing element as ForceNew - ReviewFunc edition", Schema: map[string]*Schema{ "ports": &Schema{ Type: TypeSet, @@ -2971,7 +2971,7 @@ func TestSchemaMap_Diff(t *testing.T) { "ports": []interface{}{5, 2, 6}, }, - CustomizeDiff: func(d *ResourceDiff, meta interface{}) error { + Review: func(d *ResourceDiff, meta interface{}) error { if err := d.SetNew("ports", []interface{}{5, 2, 1}); err != nil { return err } @@ -3011,7 +3011,7 @@ func TestSchemaMap_Diff(t *testing.T) { }, { - Name: "tainted resource does not run CustomizeDiffFunc", + Name: "tainted resource does not run ReviewFunc", Schema: map[string]*Schema{}, State: &terraform.InstanceState{ @@ -3023,7 +3023,7 @@ func TestSchemaMap_Diff(t *testing.T) { Config: map[string]interface{}{}, - CustomizeDiff: func(d *ResourceDiff, meta interface{}) error { + Review: func(d *ResourceDiff, meta interface{}) error { return errors.New("diff customization should not have run") }, @@ -3036,7 +3036,7 @@ func TestSchemaMap_Diff(t *testing.T) { }, { - Name: "NewComputed based on a conditional with CustomizeDiffFunc", + Name: "NewComputed based on a conditional with ReviewFunc", Schema: map[string]*Schema{ "etag": &Schema{ Type: TypeString, @@ -3060,7 +3060,7 @@ func TestSchemaMap_Diff(t *testing.T) { "etag": "bar", }, - CustomizeDiff: func(d *ResourceDiff, meta interface{}) error { + Review: func(d *ResourceDiff, meta interface{}) error { if d.HasChange("etag") { d.SetNewComputed("version_id") } @@ -3104,7 +3104,7 @@ func TestSchemaMap_Diff(t *testing.T) { "foo": "baz", }, - CustomizeDiff: func(d *ResourceDiff, meta interface{}) error { + Review: func(d *ResourceDiff, meta interface{}) error { return fmt.Errorf("diff vetoed") }, @@ -3125,7 +3125,7 @@ func TestSchemaMap_Diff(t *testing.T) { } } - d, err := schemaMap(tc.Schema).Diff(tc.State, terraform.NewResourceConfig(c), tc.CustomizeDiff, nil) + d, err := schemaMap(tc.Schema).Diff(tc.State, terraform.NewResourceConfig(c), tc.Review, nil) if err != nil != tc.Err { t.Fatalf("err: %s", err) }