This question is similar to Can juju add-machine be used to prepare a machine for service deployment?, with some differences; however. I am trying to find the fastest way of deploying juju bundles on target nodes. I suppose the proper way of doing so is to bring the required number of target nodes to "Ready" state, and while they are powered off, deploy the bundle, turn the nodes on and let them eventually get to "allocated" state. To speed up the process, I typically issue a number of "juju add-machine" to upload the desired image to the target nodes that are already in "Ready" state and let them get allocated. To allow for a bundle to provision existing machines, I then select the allocated nodes and stop them, from MAAS drop down menu. This puts the desired nodes in "Ready" state, once again, while powered on. Deploying a bundle will provision the nodes, and puts them in "allocated" state. This generally works well. The only snag is that upon reboot, target node goes through pxe boot again, wiping out all the charms and juju deamon. Is there a better way of doing this?
You can use constraints in a bundle to limit the type of machine that each service (unit) gets deployed to, but options are somewhat limited. Telling Juju to co-locate two or more services on a given machine is definitely doable. I suggest taking a look at Juju Deployer's placement documentation to get an idea of what is possible, and how you can edit the bundle file.