From da6c58ed306c51e99694ae80d49dc24397ea9a49 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Tue, 19 Jun 2012 09:41:30 -0700 Subject: [PATCH] VPC: plug guest nic on guest network implement, and unplug on shutdown --- .../element/VpcVirtualRouterElement.java | 64 +++++++++++++------ .../VirtualNetworkApplianceManagerImpl.java | 2 - 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index be5c9e22045..6a6528ace18 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -149,6 +149,17 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc DataCenter.class, network.getDataCenterId()); } + for (VirtualRouter router : routers) { + //Add router to guest network + if (!_networkMgr.isVmPartOfNetwork(router.getId(), network.getId())) { + if (!_vpcRouterMgr.addVpcRouterToGuestNetwork(router, network, false)) { + throw new CloudRuntimeException("Failed to add VPC router " + router + " to guest network " + network); + } else { + s_logger.debug("Successfully added VPC router " + router + " to guest network " + network); + } + } + } + return true; } @@ -169,28 +180,16 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc return false; } - Map params = new HashMap(1); - params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); - - List routers = _vpcRouterMgr.deployVirtualRouterInVpc(vpc, dest, - _accountMgr.getAccount(vpc.getAccountId()), params); - if ((routers == null) || (routers.size() == 0)) { - throw new ResourceUnavailableException("Can't find at least one running router!", - DataCenter.class, network.getDataCenterId()); - } - if (vm.getType() == Type.User) { - for (VirtualRouter router : routers) { - //Add router to guest network - if (!_networkMgr.isVmPartOfNetwork(router.getId(), network.getId())) { - if (!_vpcRouterMgr.addVpcRouterToGuestNetwork(router, network, false)) { - throw new CloudRuntimeException("Failed to add VPC router " + router + " to guest network " + network); - } else { - s_logger.debug("Successfully added VPC router " + router + " to guest network " + network); - } - } + Map params = new HashMap(1); + params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); + List routers = _vpcRouterMgr.deployVirtualRouterInVpc(vpc, dest, + _accountMgr.getAccount(vpc.getAccountId()), params); + if ((routers == null) || (routers.size() == 0)) { + throw new ResourceUnavailableException("Can't find at least one running router!", + DataCenter.class, network.getDataCenterId()); } - } + } return true; } @@ -198,7 +197,30 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc @Override public boolean shutdown(Network network, ReservationContext context, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException { - return true; + boolean success = true; + Long vpcId = network.getVpcId(); + if (vpcId == null) { + s_logger.debug("Network " + network + " doesn't belong to any vpc, so skipping unplug nic part"); + return success; + } + + List routers = _routerDao.listRoutersByVpcId(vpcId); + for (VirtualRouter router : routers) { + //1) Check if router is already a part of the network + if (!_ntwkService.isVmPartOfNetwork(router.getId(), network.getId())) { + s_logger.debug("Router " + router + " is not a part the network " + network); + continue; + } + //2) Call unplugNics in the network service + success = success && _vpcRouterMgr.removeRouterFromGuestNetwork(router, network, false); + if (!success) { + s_logger.warn("Failed to unplug nic in network " + network + " for virtual router " + router); + } else { + s_logger.debug("Successfully unplugged nic in network " + network + " for virtual router " + router); + } + } + + return success; } @Override diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index a7df43d29b8..1293a9b0394 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1254,8 +1254,6 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return null; } - - Long offeringId = _networkOfferingDao.findById(guestNetwork.getNetworkOfferingId()).getServiceOfferingId(); if (offeringId == null) { offeringId = _offering.getId();