Updated Branches: refs/heads/master 4361418e4 -> 0d7886818
CLOUDSTACK-3064: Able to create an instance from different account of the same domain without using affinity group even if the zone is dedicated to an account. The check to make sure that explicit resources are not picked up for non-explicit deployment was present only at the domain level for zones. Added a check at account level too. Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/0d788681 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/0d788681 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/0d788681 Branch: refs/heads/master Commit: 0d788681809f720f8ad55eb27c995d7f09ed7106 Parents: 4361418 Author: Saksham Srivastava <[email protected]> Authored: Fri Jun 28 00:16:02 2013 +0530 Committer: Devdeep Singh <[email protected]> Committed: Fri Jun 28 00:32:17 2013 +0530 ---------------------------------------------------------------------- .../cloud/deploy/DeploymentPlanningManagerImpl.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0d788681/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java index 4ef2152..142e63f 100644 --- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java +++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java @@ -452,9 +452,22 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy DedicatedResourceVO dedicatedZone = _dedicatedDao.findByZoneId(dc.getId()); if (dedicatedZone != null) { long accountDomainId = vmProfile.getOwner().getDomainId(); + long accountId = vmProfile.getOwner().getAccountId(); if (dedicatedZone.getDomainId() != null && !dedicatedZone.getDomainId().equals(accountDomainId)) { throw new CloudRuntimeException("Failed to deploy VM. Zone " + dc.getName() + " is dedicated."); } + + // If a zone is dedicated to an account then all hosts in this zone will be explicitly dedicated to + // that account. So there won't be any shared hosts in the zone, the only way to deploy vms from that + // account will be to use explicit dedication affinity group. + if (dedicatedZone.getAccountId() != null) { + if (dedicatedZone.getAccountId().equals(accountId)) { + throw new CloudRuntimeException("Failed to deploy VM. There are no shared hosts available in" + + " this dedicated zone."); + } else { + throw new CloudRuntimeException("Failed to deploy VM. Zone " + dc.getName() + " is dedicated."); + } + } } List<HostPodVO> podsInDc = _podDao.listByDataCenterId(dc.getId());
