Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow complex values in variables parameter of terraform module #4281

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions changelogs/fragments/4281-terraform-complex-variables.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- terraform - fix ``variable`` handling to allow complex values (https://github.com/ansible-collections/community.general/pull/4281).
2 changes: 1 addition & 1 deletion plugins/modules/cloud/misc/terraform.py
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@ def main():
for k, v in variables.items():
variables_args.extend([
'-var',
'{0}={1}'.format(k, v)
'{0}={1}'.format(k, json.dumps(v))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How does terraform interpret arguments of -var? I'm wondering whether this is a breaking change or not.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please comment on this one?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't believe so, as I haven't hit any issues with this patch in my use cases. That said, I just reread the TF docs on the topic (see Input Variables on the Command Line and Assigning Values to Root Module Variables), and the references all seem to point to TF "native" expressions. However, JSON Configuration Syntax states that "Everything that can be expressed in native syntax can also be expressed in JSON syntax, but some constructs are more complex to represent in JSON due to limitations of the JSON grammar."

I'll run some more tests to see if I can break this, but I would think that if you have really complex variables, you are best served by creating your own variables file and passing that as a reference. The intention of this patch is to allow "simple" complex variables, like list(string), to be declared in the variables parameter.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your explanations and links! Sounds convincing to me. (I'm not using terraform so I can't test myself.)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This has turned out to be a breaking change. See #4367.

])
if variables_files:
for f in variables_files:
Expand Down