I'd pick none of them. I'd create a coreos cluster and configure it based on cloudinit files. For more complex projects I'd choose kubernetes or something similar as cloudfoundry.
The point being I'd try to get as far as possible from any server configuration. Just limit it to setting up the platform as a service. So engineers can just push containers to that platform.
I'd also consider serverless architecture.
Long story short, limit server configuration to bare minimum. And for that minimum I'd use terraform and ansible if needed (but kubernetes can be deployed just with terraform and cloudinit files imho).