Declarative languages failure
Approach that in my eyes failed, again and again, is to start with your own declarative language and then with time grow the language. (SQL being among notable exceptions)
Puppet is the best example. map and each, added in Puppet 4.0.0 are, in my opinion, just two in a sea of evidence that the envisioned simple format has failed to handle the needs of the real world.
Ansible’s loop looks bad as the whole idea of making top levels of programs in YAML based syntax (and the rest in Python).
In my opinion, it makes more sense to create a language first and then libraries for it, not a library and then a language around it.
My hope for Terraform
I think Terraform guys are smart. Among other things, it manifests in implementing data sources. Data sources make Terraform much more flexible. I think it’s very clever.
Terraform, which started declarative, are now inventing their own programming language. They are going the way of Puppet and Ansible. I hope they can do better, in this awkward situation: there are quite a lot of constraints on the programming language because of the existing syntax and semantics.
Happy coding, everyone!