1. A computer program product embodied in a non-transitory computer readable storage medium for dynamically building a set of compute nodes to host a user's workload, the computer program product comprising the programming instructions for: receiving workload definitions comprising types of workloads that are to be run in a cloud group as well as a number of instances of each workload said cloud group should support; using said workload definitions to determine virtual machine demands that said cloud group will place on a cloud computing environment; receiving demand constraints on said cloud group; receiving placement constraints on said cloud group; and identifying said set of compute nodes to host said user's workload based on said virtual machine demands, said demand constraints and said placement constraints.