Fix sensitive TF path injection when list wildcards ([*]) are present #590
+39
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description of your changes
This PR fixes a failure in sensitive parameter injection when the Terraform
field path includes list wildcards (e.g.
options[*].configuration).Issue #589
Root cause
Upjet injects sensitive values into a Terraform-shaped object using
fieldpath.Paved.SetValue. When the TF path contains[*], the segment beforethe wildcard (e.g.
options) is a list ([]any), not an object/map. Writingto a path like
options[*].configuration.<key>therefore fails with errors like:cannot set string as terraform attribute for fieldpath "options[*].configuration.<key>": options is not an objectAt the same time, Upjet already has the concrete list index available after it
expands the corresponding Crossplane JSON path (e.g.
...options[0]...).Fix
Introduce a helper
expandWildcardTFPath(tfPath, expandedJSONPath)that replaceswildcard list segments (e.g.
options[*]) with the concrete index extractedfrom the expanded JSON path (e.g.
options[0]). This enables writing sensitivevalues at the correct Terraform location, for example:
options[0].configuration.<key>.I have:
make reviewableto ensure this PR is ready for review.backport release-x.ylabels to auto-backport this PR if necessary.How has this code been tested
a resource that injects sensitive values into a list field path containing
[*].concrete index (e.g.
options[0]...) without the "options is not an object" error.