1. A method of placing a virtual machine (VM) on a computer host or group of computer hosts, comprising: parsing a specification, the specification including properties and placement constraints, wherein each placement constraint specifies a condition for VM placement on the host or the group of hosts based on one or more of the properties; autonomously collecting information associated with the properties of the specification to determine initial values for the properties, wherein the properties are collected by one or more programmable data collectors from the host or the group of hosts or from a centralized server which manages the host or the group of hosts; and placing the VM on the host or the group of hosts if the placement constraints are satisfied for the placement.