DontShaveTheYak / cf2tf

Convert Cloudformation templates to Terraform.
GNU General Public License v3.0
486 stars 79 forks source link

ValueError: Fn::Split not allowed to be nested in Fn::If. #208

Closed cheekuru2023 closed 5 months ago

cheekuru2023 commented 1 year ago

Hi Need your help to convert the cft file

ssm-quicksetup % cf2tf target-account-patch-policies.yml // Converting target-account-patch-policies.yml to Terraform! [###---------------------------------] 8% 00:00:56 code has been checked out.erraform_src... warning: versioning has section in /var/folders/63/_zkxd0vn1xjchqzm4_thr23m0000gq/T/terraform_src/website/docs/r/s3_bucket.html.markdown but section was empty. Traceback (most recent call last): File "/usr/local/bin/cf2tf", line 8, in sys.exit(cli()) ^^^^^ File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1157, in call return self.main(args, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1078, in main rv = self.invoke(ctx) ^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1434, in invoke return ctx.invoke(self.callback, ctx.params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/click/core.py", line 783, in invoke return __callback(args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/app.py", line 44, in cli config = TemplateConverter(tmpl_path.stem, cf_template, search_manger).convert() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 92, in convert tf_resources = self.convert_to_tf(self.manifest) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 139, in convert_to_tf tf_resources.extend(converter(resources)) ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 319, in convert_resources resolved_values = self.resolve_values( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 172, in resolve_values data[key] = self.resolve_values( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 180, in resolve_values value = self.resolve_values( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 191, in resolve_values resolved_list_values = [ ^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 192, in self.resolve_values( File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 180, in resolve_values value = self.resolve_values( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 191, in resolve_values resolved_list_values = [ ^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 192, in self.resolve_values( File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 180, in resolve_values value = self.resolve_values( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 191, in resolve_values resolved_list_values = [ ^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 192, in self.resolve_values( File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 180, in resolve_values value = self.resolve_values( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 191, in resolve_values resolved_list_values = [ ^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 192, in self.resolve_values( File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 191, in resolve_values resolved_list_values = [ ^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 192, in self.resolve_values( File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 172, in resolve_values data[key] = self.resolve_values( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/cf2tf/convert.py", line 178, in resolve_values raise ValueError(f"{key} not allowed to be nested in {prev_func}.") ValueError: Fn::Split not allowed to be nested in Fn::If.

shadycuz commented 1 year ago

Where did the template come from? The error is Fn::Split not allowed to be nested in Fn::If. because the current logic doesn't allow this combination of nested functions. But the AWS docs is really bad about what is and isn't allowed. If your template is from a reputable source, I will allow the combination.

ymitsos commented 7 months ago

Hi, @shadycuz

I had also stumbled over this issue. The source comes from a trusted party and relates to the Cloud Intelligence Dashboards Framework. The CF yaml is here: https://aws-managed-cost-intelligence-dashboards.s3.amazonaws.com/cfn/cur-aggregation.yaml

Are there any suggestions how to overcome this?

SimenAsphaug commented 5 months ago

Same issue here, with the same source as @ymitsos. As this is a AWS template, i recon its allowed.

shadycuz commented 5 months ago

This has been fixed in release v0.7.0. You can upgrade with pip install -U cf2tf