From 7b6faac509eb852302e0e42fa01ae713d18cdfbc Mon Sep 17 00:00:00 2001 From: Katy Moe Date: Mon, 14 Feb 2022 14:33:51 +0000 Subject: [PATCH] add traversalToPath func --- .../node_resource_abstract_instance.go | 43 +++++++++++-------- internal/terraform/node_resource_validate.go | 16 +------ 2 files changed, 25 insertions(+), 34 deletions(-) diff --git a/internal/terraform/node_resource_abstract_instance.go b/internal/terraform/node_resource_abstract_instance.go index f362758dc280..fb431df53f34 100644 --- a/internal/terraform/node_resource_abstract_instance.go +++ b/internal/terraform/node_resource_abstract_instance.go @@ -1146,30 +1146,35 @@ func (n *NodeAbstractResource) processIgnoreChanges(prior, config cty.Value) (ct func traversalsToPaths(traversals []hcl.Traversal) []cty.Path { paths := make([]cty.Path, len(traversals)) for i, traversal := range traversals { - path := make(cty.Path, len(traversal)) - for si, step := range traversal { - switch ts := step.(type) { - case hcl.TraverseRoot: - path[si] = cty.GetAttrStep{ - Name: ts.Name, - } - case hcl.TraverseAttr: - path[si] = cty.GetAttrStep{ - Name: ts.Name, - } - case hcl.TraverseIndex: - path[si] = cty.IndexStep{ - Key: ts.Key, - } - default: - panic(fmt.Sprintf("unsupported traversal step %#v", step)) - } - } + path := traversalToPath(traversal) paths[i] = path } return paths } +func traversalToPath(traversal hcl.Traversal) cty.Path { + path := make(cty.Path, len(traversal)) + for si, step := range traversal { + switch ts := step.(type) { + case hcl.TraverseRoot: + path[si] = cty.GetAttrStep{ + Name: ts.Name, + } + case hcl.TraverseAttr: + path[si] = cty.GetAttrStep{ + Name: ts.Name, + } + case hcl.TraverseIndex: + path[si] = cty.IndexStep{ + Key: ts.Key, + } + default: + panic(fmt.Sprintf("unsupported traversal step %#v", step)) + } + } + return path +} + func processIgnoreChangesIndividual(prior, config cty.Value, ignoreChangesPath []cty.Path) (cty.Value, tfdiags.Diagnostics) { type ignoreChange struct { // Path is the full path, minus any trailing map index diff --git a/internal/terraform/node_resource_validate.go b/internal/terraform/node_resource_validate.go index d533a68693b0..66396846d205 100644 --- a/internal/terraform/node_resource_validate.go +++ b/internal/terraform/node_resource_validate.go @@ -388,21 +388,7 @@ func (n *NodeValidatableResource) validateResource(ctx EvalContext) tfdiags.Diag // If the traversal was valid, convert it to a cty.Path and // use that to check whether the Attribute is Computed. if !diags.HasErrors() { - path := make(cty.Path, len(traversal)) - for si, step := range traversal { - switch ts := step.(type) { - case hcl.TraverseAttr: - path[si] = cty.GetAttrStep{ - Name: ts.Name, - } - case hcl.TraverseIndex: - path[si] = cty.IndexStep{ - Key: ts.Key, - } - default: - panic(fmt.Sprintf("unsupported traversal step %#v", step)) - } - } + path := traversalToPath(traversal) attrSchema := schema.AttributeByPath(path)