Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Complex flatten() in Terraform files causing parsing issues #230

@plejd-sebman

Description

@plejd-sebman

Describe the bug

When parsing the code below, the following error/exception is presented. It points to the line containing "${ou_k}:${account_v.name}" : {

ERROR: Unexpected error: Unexpected token Token('DBLQUOTE', '"') at line 478, column 13.
Expected one of: 
	* IN
	* IF
	* FOR_EACH
	* STRING_LIT
	* NL_OR_COMMENT
	* FOR
	* DECIMAL
	* RBRACE
	* NAME
	* NEGATIVE_DECIMAL
	* LPAR

Software:

  • OS: [macOS]
  • Python version (e.g. 3.13.3)
  • python-hcl2 version (e.g. 7.2.0)

Snippet of HCL2 code causing the unexpected behaviour:

  helpers = {
    admin_aws_target_ous_accounts = {
      # Each specified organizational unit (e.g. `Generic`) can have multiple Accounts (e.g. `plejd-dev`, `plejd-stage`, etc.), thus making it two-dimensional.
      # Hence we want to flatten it so it, where each item has a key like `generic:plejd-dev`, `generic:plejd-stage` etc.
      for item in flatten([
        for ou_k, ou_v in local.workspace["admin_enabled"] ? data.aws_organizations_organizational_unit_child_accounts.admin_ous : {} : [
          for _, account_v in ou_v.accounts : {
            "${ou_k}:${account_v.name}" : {
              account_id = account_v.id
            }
          }
        ]
      ]) : keys(item)[0] => values(item)[0]
    }
}

Expected behavior

That code above should not trigger an exception.

Exception traceback (if applicable):

>>> hcl2.load(f)
Traceback (most recent call last):
  File "/Users/sebman/projects/plejd/cloudops/iac/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser_st
    action, arg = states[state][token.type]
                  ~~~~~~~~~~~~~^^^^^^^^^^^^
KeyError: 'DBLQUOTE'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<python-input-5>", line 1, in <module>
    hcl2.load(f)
    ~~~~~~~~~^^^
  File "/Users/sebman/projects/plejd/cloudops/iac/.venv/lib/python3.13/site-packages/hcl2/api.py", line 16, in load
    return loads(file.read(), with_meta=with_meta)
  File "/Users/sebman/projects/plejd/cloudops/iac/.venv/lib/python3.13/site-packages/hcl2/api.py", line 29, in loads
    tree = parser().parse(text + "\n")
  File "/Users/sebman/projects/plejd/cloudops/iac/.venv/lib/python3.13/site-packages/lark/lark.py", line 655, in parse
    return self.parser.parse(text, start=start, on_error=on_error)
           ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sebman/projects/plejd/cloudops/iac/.venv/lib/python3.13/site-packages/lark/parser_frontends.py", line 104, in parse
    return self.parser.parse(stream, chosen_start, **kw)
           ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sebman/projects/plejd/cloudops/iac/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser.py", line 42, in parse
    return self.parser.parse(lexer, start)
           ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/Users/sebman/projects/plejd/cloudops/iac/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser.py", line 88, in parse
    return self.parse_from_state(parser_state)
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/Users/sebman/projects/plejd/cloudops/iac/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser.py", line 111, in parse_from_state
    raise e
  File "/Users/sebman/projects/plejd/cloudops/iac/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser.py", line 102, in parse_from_state
    state.feed_token(token)
    ~~~~~~~~~~~~~~~~^^^^^^^
  File "/Users/sebman/projects/plejd/cloudops/iac/.venv/lib/python3.13/site-packages/lark/parsers/lalr_parser_state.py", line 80, in feed_token
    raise UnexpectedToken(token, expected, state=self, interactive_parser=None)
lark.exceptions.UnexpectedToken: Unexpected token Token('DBLQUOTE', '"') at line 478, column 13.
Expected one of:
        * FOR
        * DECIMAL
        * IF
        * NEGATIVE_DECIMAL
        * RBRACE
        * IN
        * NAME
        * NL_OR_COMMENT
        * LPAR
        * STRING_LIT
        * FOR_EACH

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions