From b2a19f7587fdd86fddc6c32fa8476eeac6269116 Mon Sep 17 00:00:00 2001 From: Nicolas Vazquez Date: Sat, 10 Feb 2018 14:29:41 -0300 Subject: [PATCH] CLOUDSTACK-10247: L2 network not shared on projects (#2420) When trying to deploy a vm providing a project id and a L2 network id, this error is logged. --- .../src/com/cloud/network/NetworkModelImpl.java | 17 +++++++++-------- .../com/cloud/network/NetworkServiceImpl.java | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index e583b717a16..b8e7b53b1fa 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -930,7 +930,7 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi @Override public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { - List virtualNetworks = _networksDao.listByZoneAndGuestType(accountId, dataCenterId, Network.GuestType.Isolated, false); + List virtualNetworks = _networksDao.listByZoneAndGuestType(accountId, dataCenterId, GuestType.Isolated, false); if (virtualNetworks.isEmpty()) { s_logger.trace("Unable to find default Virtual network account id=" + accountId); @@ -950,13 +950,13 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi } @Override - public List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type) { + public List listNetworksForAccount(long accountId, long zoneId, GuestType type) { List accountNetworks = new ArrayList(); List zoneNetworks = _networksDao.listByZone(zoneId); for (NetworkVO network : zoneNetworks) { if (!isNetworkSystem(network)) { - if (network.getGuestType() == Network.GuestType.Shared || !_networksDao.listBy(accountId, network.getId()).isEmpty()) { + if (network.getGuestType() == GuestType.Shared || !_networksDao.listBy(accountId, network.getId()).isEmpty()) { if (type == null || type == network.getGuestType()) { accountNetworks.add(network); } @@ -967,7 +967,7 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi } @Override - public List listAllNetworksInAllZonesByType(Network.GuestType type) { + public List listAllNetworksInAllZonesByType(GuestType type) { List networks = new ArrayList(); for (NetworkVO network : _networksDao.listAll()) { if (!isNetworkSystem(network)) { @@ -1637,7 +1637,8 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi throw new CloudRuntimeException("cannot check permissions on (Network) "); } // Perform account permission check - if (network.getGuestType() != Network.GuestType.Shared || (network.getGuestType() == Network.GuestType.Shared && network.getAclType() == ACLType.Account)) { + if ((network.getGuestType() != GuestType.Shared && network.getGuestType() != GuestType.L2) || + (network.getGuestType() == GuestType.Shared && network.getAclType() == ACLType.Account)) { AccountVO networkOwner = _accountDao.findById(network.getAccountId()); if (networkOwner == null) throw new PermissionDeniedException("Unable to use network with id= " + ((NetworkVO)network).getUuid() + @@ -1802,14 +1803,14 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi public boolean isNetworkAvailableInDomain(long networkId, long domainId) { Long networkDomainId = null; Network network = getNetwork(networkId); - if (network.getGuestType() != Network.GuestType.Shared) { - s_logger.trace("Network id=" + networkId + " is not shared"); + if (network.getGuestType() != GuestType.Shared && network.getGuestType() != GuestType.L2) { + s_logger.trace("Network id=" + networkId + " is not shared or L2"); return false; } NetworkDomainVO networkDomainMap = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); if (networkDomainMap == null) { - s_logger.trace("Network id=" + networkId + " is shared, but not domain specific"); + s_logger.trace("Network id=" + networkId + " is shared or L2, but not domain specific"); return true; } else { networkDomainId = networkDomainMap.getDomainId(); diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index d7ae6276f85..93f73d20a5f 100644 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -1101,8 +1101,8 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { } // Only Admin can create Shared networks - if (ntwkOff.getGuestType() == GuestType.Shared && !_accountMgr.isAdmin(caller.getId())) { - throw new InvalidParameterValueException("Only Admins can create network with guest type " + GuestType.Shared); + if ((ntwkOff.getGuestType() == GuestType.Shared || ntwkOff.getGuestType() == GuestType.L2) && !_accountMgr.isAdmin(caller.getId())) { + throw new InvalidParameterValueException("Only Admins can create network with guest type " + GuestType.Shared + " or " + GuestType.L2); } // Check if the network is domain specific