From b72e677b114c3ad49582ffb0a2a4e7447357b939 Mon Sep 17 00:00:00 2001 From: abhishek Date: Wed, 15 Sep 2010 16:28:57 -0700 Subject: [PATCH] bug 6163: incremental checkin 2.1.x branch --- server/src/com/cloud/vm/UserVmManagerImpl.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 70871cf4add..35cbf0bab8b 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2432,7 +2432,7 @@ public class UserVmManagerImpl implements UserVmManager { try { UserVmVO vm = null; - + boolean forZone = false; final String name = VirtualMachineName.getVmName(vmId, accountId, _instance); final String[] macAddresses = _dcDao.getNextAvailableMacAddressPair(dc.getId()); @@ -2449,11 +2449,25 @@ public class UserVmManagerImpl implements UserVmManager { forAccount = true; guestVlan = vlansForAccount.get(0);//FIXME: iterate over all vlans } + else + { + //list zone wide vlans that are direct attached and tagged + //if exists pick random one + //set forZone = true + + //note the dao method below does a NEQ on vlan id, hence passing untagged + List zoneWideVlans = _vlanDao.searchForZoneWideVlans(dc.getId(),VlanType.DirectAttached.toString(),"untagged"); + + if(zoneWideVlans!=null && zoneWideVlans.size()>0){ + forZone = true; + guestVlan = zoneWideVlans.get(0);//FIXME: iterate over all vlans + } + } while ((pod = _agentMgr.findPod(template, offering, dc, account.getId(), avoids)) != null) { if (s_logger.isDebugEnabled()) { s_logger.debug("Attempting to create direct attached vm in pod " + pod.first().getName()); } - if (!forAccount) { + if (!forAccount && !forZone) { List vlansForPod = _vlanDao.listVlansForPodByType(pod.first().getId(), VlanType.DirectAttached); if (vlansForPod.size() < 1) { avoids.add(pod.first().getId());