If you can afford to embrace immutable infrastructure (you should be) then you can go a long way with docker and shell scripts. A wide variety of situations can be elegantly modelled around the disposable container oriented approach and docker's built in orchestration capabilities are very likely to be adequate for managing your container farm as you scale up.
Integrating docker with your CI workflow is likely to be all you need for building and scaling a cloud based saas service in present era.
If however, that is not the case (you need to manage legacy systems, need to orchestrate stateful applications or windows systems, have systems that require much lower level of control) then I would strongly recommend looking into puppet. Puppet's declarative syntax and unified object oriented view it provides is much more manageable then task oriented imperative solutions or wrappers over shell scripts.
Puppet is interoperable with docker and you can use puppet to manage containers, can run puppet server in docker container as well as manage container farm orchestration with docker.