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

Error converting .tf into .tf.json when there is a variable with a non primitive type #92

Open
rami-foo opened this issue Dec 17, 2024 · 3 comments

Comments

@rami-foo
Copy link

Basically this is a minimal reconstruction of the issue

variables.tf:

variable "efs_tags" {
  description = "Tags for the EFS"
  type        = map(string)
  default = {
    Terraform = "true"
    Project   = "" 
  }
}

python code

import json
from pathlib import Path
import hcl

file_path = Path("./variables.tf")
with open(file_path) as fp:
    json_object = hcl.load(fp)

file_path = file_path.with_suffix('.tf.json')
with open(file_path, 'w') as fp:
    json.dump(json_object, fp, indent=4)

expected output:

{
    "variable": {
         "efs_tags": {
                  "description": "Tags for the EFSr",
                  "type": "map(string)",
                  "default": {
                          "Terraform": "true",
                          "Project": ""
                  }
        }
}

Actual output:

{
    "variable": {
         "efs_tags": {
                  "description": "Tags for the EFSr",
                  "type": "map(\"string\")",
                  "default": {
                          "Terraform": "true",
                          "Project": ""
                  }
        }
}
@rami-foo
Copy link
Author

rami-foo commented Dec 17, 2024

Basically this is a minimal reconstruction of the issue

variables.tf:

variable "efs_tags" {
  description = "Tags for the EFS"
  type        = map(string)
  default = {
    Terraform = "true"
    Project   = "" 
  }
}

python code

import json
from pathlib import Path
import hcl

file_path = Path("./variables.tf")
with open(file_path) as fp:
    json_object = hcl.load(fp)

file_path = file_path.with_suffix('.tf.json')
with open(file_path, 'w') as fp:
    json.dump(json_object, fp, indent=4)

expected output:

{
    "variable": {
         "efs_tags": {
                  "description": "Tags for the EFSr",
                  "type": "map(string)",
                  "default": {
                          "Terraform": "true",
                          "Project": ""
                  }
        }
}

Actual output:

{
    "variable": {
         "efs_tags": {
                  "description": "Tags for the EFS",
                  "type": "map(\"string\")",
                  "default": {
                          "Terraform": "true",
                          "Project": ""
                  }
        }
}

A workaround is to simply remove any line that has a type={complex type}

@virtuald
Copy link
Owner

That syntax doesn't seem familiar to me, this feels like an HCL2 feature?

@rami-foo
Copy link
Author

Weirdly enough I kept switching back and forth between this and python-hcl2 and this library worked better for transforming a .tf file into it's json counterpart so I ended up going with it

The HCL2 had it's own issue which i references here python-hcl2issues/179

Does HCL not support something like key = value1(value2), because if it does support it it shouldn't add the " " right?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants