Looping in ansible/terraform is exactly the problem. Logic and control flow in YAML/hcl is a nightmare. Plus there's no debugging! You can't set breakpoints in a yaml file or HCL.
Adding more YAML to be parsed by other YAML is just terrible at scale.
I don't think there's a meaningful distinction between configuration and code in a CI pipeline. This is what people try to do, and it's frankly a massive waste.
The problem is the attempt to make a distinction when there cannot be one.
You loop and branch in ansible/terraform
I hate that setup but also I have a hard time thinking of something else