1. A computer-implemented method of allocating computer processing work, the method comprising: identifying, by one or more processors, an input data that is stored in a first computer for processing by a computer program; identifying, by the one or more processors, a virtual machine that is capable of executing the computer program, wherein the virtual machine is stored in a second computer; identifying, by the one or more processors, a first set of constraint rules against moving the input data from the first computer; identifying, by the one or more processors, a second set of constraint rules against moving the virtual machine from the second computer; assigning, by the one or more processors, a weight to each constraint rule within the first set of constraint rules and the second set of constraint rules; identifying, by the one or more processors, which one or more constraint rules within the first set of constraint rules applies to the input data and which one or more constraint rules within the second set of constraint rules applies to the virtual machine; summing, by the one or more processors, the weight of all constraint rules that apply to the input data to generate a first total constraint rule weight; summing, by the one or more processors, the weight of all constraint rules that apply to the virtual machine to generate a second total constraint rule weight; and in response to the first total constraint rule weight exceeding the second total constraint rule weight, prohibiting movement of the input data from the first computer to the second computer and moving, by the one or more processors, the virtual machine from the second computer to the first computer.