boltops-tools / terraspace

Terraspace: The Terraform Framework
https://terraspace.cloud
Apache License 2.0
674 stars 46 forks source link

unable to use UTF-8 char in tfvars #296

Open scauglog opened 1 year ago

scauglog commented 1 year ago

Checklist

My Environment

Software Version
Operating System mac/arm64 and linux/amd64
Terraform 1.4.2
Terraspace 2.2.3
Ruby 3.0.3

Expected Behaviour

we can use string with non ascii character in tfvars

Current Behavior

when we switched from terraspace 2.1.6 to 2.2.3 using string with non ascii character made the plan or apply fail with the following message Exception ArgumentError: invalid byte sequence in US-ASCII

Step-by-step reproduction instructions

create tfvars file and add a non ascii character in a string

test = "héllo"

run terraspace plan

terraspace plan stack
Error stack trace ``` Exception ArgumentError: invalid byte sequence in US-ASCII /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/erb/rewrite.rb:19:in `split' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/erb/rewrite.rb:19:in `replace' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/erb/rewrite.rb:9:in `rewrite' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/erb/render.rb:13:in `build' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/strategy/tfvar/tfvars.rb:4:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/strategy/tfvar.rb:17:in `block in run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/strategy/tfvar.rb:11:in `each' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/strategy/tfvar.rb:11:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/perform.rb:34:in `compile_tfvars' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/dependency/resolver.rb:12:in `block in resolve' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/dirs_concern.rb:18:in `block in with_each_mod' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/dirs_concern.rb:15:in `each' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/dirs_concern.rb:15:in `with_each_mod' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/dependency/resolver.rb:10:in `resolve' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/builder.rb:36:in `resolve_dependencies' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/builder.rb:30:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli/commander.rb:9:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli/plan.rb:43:in `plan_only' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli/plan.rb:17:in `perform' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli/plan.rb:11:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli.rb:161:in `plan' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/command.rb:76:in `dispatch' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli/concern.rb:65:in `start' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/exe/terraspace:7:in `' /root/.rbenv/versions/3.0.3/bin/terraspace:25:in `load' /root/.rbenv/versions/3.0.3/bin/terraspace:25:in `
' root@3f5a6fea82e4:/usr/src/app/terraform/users# terraspace plan people Exception ArgumentError: invalid byte sequence in US-ASCII /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/erb/rewrite.rb:19:in `split' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/erb/rewrite.rb:19:in `replace' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/erb/rewrite.rb:9:in `rewrite' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/erb/render.rb:13:in `build' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/strategy/tfvar/tfvars.rb:4:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/strategy/tfvar.rb:17:in `block in run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/strategy/tfvar.rb:11:in `each' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/strategy/tfvar.rb:11:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/perform.rb:34:in `compile_tfvars' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/dependency/resolver.rb:12:in `block in resolve' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/dirs_concern.rb:18:in `block in with_each_mod' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/dirs_concern.rb:15:in `each' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/compiler/dirs_concern.rb:15:in `with_each_mod' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/dependency/resolver.rb:10:in `resolve' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/builder.rb:36:in `resolve_dependencies' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/builder.rb:30:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli/commander.rb:9:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli/plan.rb:43:in `plan_only' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli/plan.rb:17:in `perform' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli/plan.rb:11:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli.rb:161:in `plan' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/command.rb:76:in `dispatch' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/lib/terraspace/cli/concern.rb:65:in `start' /root/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/terraspace-2.2.3/exe/terraspace:7:in `' /root/.rbenv/versions/3.0.3/bin/terraspace:25:in `load' /root/.rbenv/versions/3.0.3/bin/terraspace:25:in `
' ```

Code Sample

Solution Suggestion

We should be able to set the encoding used in the config section of the app.rb