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.
This commit is contained in:
Saksham Srivastava 2013-06-28 00:16:02 +05:30 committed by Devdeep Singh
parent 0035bbba34
commit fc357e9831
1 changed files with 13 additions and 0 deletions

View File

@ -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());