1. A method of placing a virtual machine (VM) on a computer host or group of computer hosts, comprising: parsing a specification file, the specification file specifying properties whose values are to be determined and placement constraints, each placement constraint defining a condition for VM placement on the host or the group of hosts as a function of one or more of the properties; determining values for the properties based on information autonomously 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, the data collectors operating in accordance with data collection properties specified in the specification file; determining if the placement constraints in the specification file are satisfied using the determined values of the properties; and placing the VM on the host or the group of hosts if the placement constraints in the specification file are satisfied for the placement.