I am trying to convert an terraform variable written in HCL to a dynamically generated tf.json file containing the variable, but I am running into errors.
HCL version I am trying to convert:
variable "accounts" {
type = map(any)
default = {
acct1 = ["000000000001"]
acct2 = ["000000000002"]
}
}
I have tried the following format:
{
"variable": {
"accounts": {
"type": "map(any)",
"default": [
{ "acct1": "000000000001" },
{ "acct2": "000000000002"}
]
}
}
}
and
{
"variable": {
"accounts": {
"type": "map(any)",
"default": [
{
"acct1": ["000000000001"],
"acct2": ["000000000002"]
}
]
}
}
}
I get the following error:
│ Error: Invalid default value for variable
│
│ on accounts.tf.json line 6, in variable.accounts:
│ 6: "default": [
This default value is not compatible with the variable's type constraint: map of any single type required.
Is there a tool that will convert HCL to valid .tf.json configurations? Or what am I missing on the formatting here?
CodePudding user response:
Your specified type for the variable is a map(any), so your default value for the variable must also be a map(any), and cannot be a list(map(list(string))).
{
"variable": {
"accounts": {
"type": "map(any)",
"default": {
"acct1": ["000000000001"],
"acct2": ["000000000002"]
}
}
}
}
That would assign a default value of type object(list(string)) which matches the same object(list(string)) type structure in your HCL2, and also would be a subset of the specified map(any).
CodePudding user response:
Your default value is a list of maps, but it should be only map:
"default": {
"acct1": "000000000001",
"acct2": "000000000002"
}
