I really want to give Salt a try. I've worked with Puppet and find the syntax ugly and the logic weird (e.g. all variables are essentially final and can't be changed in cases after having a value).
But it also results in a mess of what-can-override-what. You can't have just #override. You've got "automatic", "default", "override" and later added "force_override" and "force_default", because "override"/"default" were not enough. And I'm still running into situations (especially when working with different teams deploying on the same host) where I want to override something that can't be changed anymore (or doesn't merge the way I need to).