private ModuleDeploymentStatus deployModule(ModuleDeployment moduleDeployment,
			ContainerMatcher containerMatcher, Collection<String> exclusions) throws Exception {
		transitionToDeploying(moduleDeployment.deploymentUnit);
		
		Iterable<Container> containers = containerRepository.findAll();
		MatchingPredicate matchingPredicate = new MatchingPredicate(exclusions);
		Collection<Container> matchedContainers = containerMatcher.match(moduleDeployment.moduleDescriptor,
				moduleDeployment.runtimeDeploymentProperties, Iterables.filter(containers, matchingPredicate));
		if (matchedContainers.isEmpty()) {
			throw new NoContainerException();
		}
		return moduleDeploymentWriter.writeDeployment(moduleDeployment.moduleDescriptor,
				moduleDeployment.runtimeDeploymentProperties, matchedContainers.iterator().next());
	}
Issue a module deployment request for the provided module using
the provided container matcher. This also transitions the deployment
unit state to {@link DeploymentUnitStatus.State#deploying}. Once
the deployment attempt completes, the status for the deployment unit
should be updated via {@link #updateDeploymentUnitState} using the
{@link ModuleDeploymentStatus} returned from this method.

@param moduleDeployment   contains module redeployment details such as
                          stream, module descriptor, and deployment properties
@param containerMatcher   matches modules to containers
@param exclusions         containers to exclude from deployment since they are
                          already hosting the module
@return result of module deployment request
@throws Exception
@see #transitionToDeploying
spring-xd-dirt/src/main/java/org/springframework/xd/dirt/server/admin/deployment/zk/ModuleRedeployer.java