VPC: CS-15850 - don't unplug the nic for public network when there are existing ips in the same vlan having network rules

Conflicts:

	server/src/com/cloud/network/vpc/VpcManagerImpl.java
This commit is contained in:
Alena Prokharchyk 2012-08-06 16:25:37 -07:00
parent a83c753354
commit d38e9eebed
8 changed files with 408 additions and 64 deletions

View File

@ -963,6 +963,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
throw new InvalidParameterValueException("Only networks of type " + GuestType.Isolated + " with service " throw new InvalidParameterValueException("Only networks of type " + GuestType.Isolated + " with service "
+ Service.SourceNat + " can be added as a part of VPC"); + Service.SourceNat + " can be added as a part of VPC");
} }
//3) No redundant router support //3) No redundant router support

View File

@ -49,7 +49,6 @@ public class VpcApiUnitTest extends TestCase{
MockComponentLocator _locator; MockComponentLocator _locator;
VpcManager _vpcService; VpcManager _vpcService;
@Override @Override
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
@ -94,53 +93,76 @@ public class VpcApiUnitTest extends TestCase{
try { try {
_vpcService.validateNtkwOffForVpc(1, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1"); _vpcService.validateNtkwOffForVpc(1, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
result = true; result = true;
s_logger.debug("Test1 passed, the offering is valid for vpc creation"); s_logger.debug("Test passed: the offering is valid for vpc creation");
} catch (Exception ex) { } catch (Exception ex) {
s_logger.warn("Test1 failed due to exc ", ex); s_logger.warn("TEST FAILED due to exc ", ex);
} }
//2) invalid offering - source nat is not included //2) invalid offering - source nat is not included
result = false; result = false;
String msg = null;
try { try {
_vpcService.validateNtkwOffForVpc(2, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1"); _vpcService.validateNtkwOffForVpc(2, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
result = true; result = true;
} catch (InvalidParameterValueException ex) { } catch (InvalidParameterValueException ex) {
msg = ex.getMessage();
} finally { } finally {
if (!result) { if (!result) {
s_logger.debug("Test2 passed, can't use network offering without SourceNat service"); s_logger.debug("Test passed: " + msg);
} else { } else {
s_logger.warn("Test2 failed, can't use network offering without SourceNat service"); s_logger.warn("TEST FAILED, can't use network offering without SourceNat service");
} }
} }
//3) invalid offering - conserve mode is off //3) invalid offering - conserve mode is off
result = false; result = false;
msg = null;
try { try {
_vpcService.validateNtkwOffForVpc(3, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1"); _vpcService.validateNtkwOffForVpc(3, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
result = true; result = true;
} catch (InvalidParameterValueException ex) { } catch (InvalidParameterValueException ex) {
msg = ex.getMessage();
} finally { } finally {
if (!result) { if (!result) {
s_logger.debug("Test3 passed, can't use network offering without conserve mode = true"); s_logger.debug("Test passed: " + msg);
} else { } else {
s_logger.warn("Test3 failed, can't use network offering without conserve mode = true"); s_logger.warn("TEST FAILED, can't use network offering without conserve mode = true");
} }
} }
//3) invalid offering - guest type shared //4) invalid offering - guest type shared
result = false; result = false;
try { try {
_vpcService.validateNtkwOffForVpc(4, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1"); _vpcService.validateNtkwOffForVpc(4, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
result = true; result = true;
} catch (InvalidParameterValueException ex) { } catch (InvalidParameterValueException ex) {
msg = ex.getMessage();
} finally { } finally {
if (!result) { if (!result) {
s_logger.debug("Test4 passed, can't use network offering with guest type = Shared"); s_logger.debug("Test passed: " + msg);
} else { } else {
s_logger.warn("Test4 failed, can't use network offering with guest type = Shared"); s_logger.warn("TEST FAILED, can't use network offering with guest type = Shared");
}
} }
} }
//5) Invalid offering - no redundant router supportresult = false;
try {
_vpcService.validateNtkwOffForVpc(5, "0.0.0.0", "111-", new AccountVO(), _vpcService.getVpc(1), 2L, "10.1.1.1");
result = true;
} catch (InvalidParameterValueException ex) {
msg = ex.getMessage();
} finally {
if (!result) {
s_logger.debug("Test passed: " + msg);
} else {
s_logger.warn("TEST FAILED, can't use network offering with guest type = Shared");
}
}
//6) Only one network in the VPC can support LB service - positive scenario
//7) Only one netowrk in the VPC can support LB service - negative scenario
}
} }

View File

@ -0,0 +1,339 @@
// Copyright 2012 Citrix Systems, Inc. Licensed under the
// Apache License, Version 2.0 (the "License"); you may not use this
// file except in compliance with the License. Citrix Systems, Inc.
// reserves all rights not expressly granted by the License.
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Automatically generated by addcopyright.py at 04/03/2012
package com.cloud.vpc.dao;
import java.util.List;
import java.util.Map;
import javax.ejb.Local;
import com.cloud.network.Network.GuestType;
import com.cloud.network.NetworkAccountVO;
import com.cloud.network.NetworkVO;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.dao.NetworkDao;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
@Local(value = NetworkDao.class)
@DB(txn = false)
public class MockNetworkDaoImpl extends GenericDaoBase<NetworkVO, Long> implements NetworkDao{
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listByOwner(long)
*/
@Override
public List<NetworkVO> listByOwner(long ownerId) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listBy(long, long, long)
*/
@Override
public List<NetworkVO> listBy(long accountId, long offeringId, long dataCenterId) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listBy(long, long, java.lang.String, boolean)
*/
@Override
public List<NetworkVO> listBy(long accountId, long dataCenterId, String cidr, boolean skipVpc) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listByZoneAndGuestType(long, long, com.cloud.network.Network.GuestType, java.lang.Boolean)
*/
@Override
public List<NetworkVO> listByZoneAndGuestType(long accountId, long dataCenterId, GuestType type, Boolean isSystem) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#persist(com.cloud.network.NetworkVO, boolean, java.util.Map)
*/
@Override
public NetworkVO persist(NetworkVO network, boolean gc, Map<String, String> serviceProviderMap) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#createSearchBuilderForAccount()
*/
@Override
public SearchBuilder<NetworkAccountVO> createSearchBuilderForAccount() {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#getNetworksForOffering(long, long, long)
*/
@Override
public List<NetworkVO> getNetworksForOffering(long offeringId, long dataCenterId, long accountId) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#getNextAvailableMacAddress(long)
*/
@Override
public String getNextAvailableMacAddress(long networkConfigId) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listBy(long, long)
*/
@Override
public List<NetworkVO> listBy(long accountId, long networkId) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#countByZoneAndUri(long, java.lang.String)
*/
@Override
public long countByZoneAndUri(long zoneId, String broadcastUri) {
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#countByZoneUriAndGuestType(long, java.lang.String, com.cloud.network.Network.GuestType)
*/
@Override
public long countByZoneUriAndGuestType(long zoneId, String broadcastUri, GuestType guestType) {
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listByZone(long)
*/
@Override
public List<NetworkVO> listByZone(long zoneId) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#changeActiveNicsBy(long, int)
*/
@Override
public void changeActiveNicsBy(long networkId, int nicsCount) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#getActiveNicsIn(long)
*/
@Override
public int getActiveNicsIn(long networkId) {
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#findNetworksToGarbageCollect()
*/
@Override
public List<Long> findNetworksToGarbageCollect() {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#clearCheckForGc(long)
*/
@Override
public void clearCheckForGc(long networkId) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listByZoneSecurityGroup(java.lang.Long)
*/
@Override
public List<NetworkVO> listByZoneSecurityGroup(Long zoneId) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#addDomainToNetwork(long, long, java.lang.Boolean)
*/
@Override
public void addDomainToNetwork(long networkId, long domainId, Boolean subdomainAccess) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listByPhysicalNetwork(long)
*/
@Override
public List<NetworkVO> listByPhysicalNetwork(long physicalNetworkId) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listSecurityGroupEnabledNetworks()
*/
@Override
public List<NetworkVO> listSecurityGroupEnabledNetworks() {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listByPhysicalNetworkTrafficType(long, com.cloud.network.Networks.TrafficType)
*/
@Override
public List<NetworkVO> listByPhysicalNetworkTrafficType(long physicalNetworkId, TrafficType trafficType) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listBy(long, long, com.cloud.network.Network.GuestType, com.cloud.network.Networks.TrafficType)
*/
@Override
public List<NetworkVO> listBy(long accountId, long dataCenterId, GuestType type, TrafficType trafficType) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listByPhysicalNetworkAndProvider(long, java.lang.String)
*/
@Override
public List<NetworkVO> listByPhysicalNetworkAndProvider(long physicalNetworkId, String providerName) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#persistNetworkServiceProviders(long, java.util.Map)
*/
@Override
public void persistNetworkServiceProviders(long networkId, Map<String, String> serviceProviderMap) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#update(java.lang.Long, com.cloud.network.NetworkVO, java.util.Map)
*/
@Override
public boolean update(Long networkId, NetworkVO network, Map<String, String> serviceProviderMap) {
// TODO Auto-generated method stub
return false;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType)
*/
@Override
public List<NetworkVO> listByZoneAndTrafficType(long zoneId, TrafficType trafficType) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#setCheckForGc(long)
*/
@Override
public void setCheckForGc(long networkId) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#getNetworkCountByNetworkOffId(long)
*/
@Override
public int getNetworkCountByNetworkOffId(long networkOfferingId) {
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#countNetworksUserCanCreate(long)
*/
@Override
public long countNetworksUserCanCreate(long ownerId) {
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listSourceNATEnabledNetworks(long, long, com.cloud.network.Network.GuestType)
*/
@Override
public List<NetworkVO> listSourceNATEnabledNetworks(long accountId, long dataCenterId, GuestType type) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#getNetworkCountByVpcId(long)
*/
@Override
public int getNetworkCountByVpcId(long vpcId) {
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#listByVpc(long)
*/
@Override
public List<NetworkVO> listByVpc(long vpcId) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#getPrivateNetwork(java.lang.String, java.lang.String, long, long)
*/
@Override
public NetworkVO getPrivateNetwork(String broadcastUri, String cidr, long accountId, long zoneId) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.cloud.network.dao.NetworkDao#countVpcNetworks(long)
*/
@Override
public long countVpcNetworks(long vpcId) {
// TODO Auto-generated method stub
return 0;
}
}

View File

@ -98,19 +98,6 @@ public class MockNetworkOfferingDaoImpl extends GenericDaoBase<NetworkOfferingVO
//network offering valid for vpc //network offering valid for vpc
vo = new NetworkOfferingVO("vpc", "vpc", TrafficType.Guest, false, true, null, null, false, vo = new NetworkOfferingVO("vpc", "vpc", TrafficType.Guest, false, true, null, null, false,
Availability.Optional, null, Network.GuestType.Isolated, false, false); Availability.Optional, null, Network.GuestType.Isolated, false, false);
Class<?> c = vo.getClass();
try {
Field f = c.getDeclaredField("id");
f.setAccessible(true);
f.setLong(vo, 1L);
} catch (NoSuchFieldException ex) {
s_logger.warn(ex);
return null;
} catch (IllegalAccessException ex) {
s_logger.warn(ex);
return null;
}
} else if (id.longValue() == 2) { } else if (id.longValue() == 2) {
//invalid offering - source nat is not included //invalid offering - source nat is not included
vo = new NetworkOfferingVO("vpc", "vpc", TrafficType.Guest, false, true, null, null, false, vo = new NetworkOfferingVO("vpc", "vpc", TrafficType.Guest, false, true, null, null, false,
@ -123,9 +110,36 @@ public class MockNetworkOfferingDaoImpl extends GenericDaoBase<NetworkOfferingVO
//network offering invalid for vpc (Shared) //network offering invalid for vpc (Shared)
vo = new NetworkOfferingVO("non vpc", "non vpc", TrafficType.Guest, false, true, null, null, false, vo = new NetworkOfferingVO("non vpc", "non vpc", TrafficType.Guest, false, true, null, null, false,
Availability.Optional, null, Network.GuestType.Shared, false, false); Availability.Optional, null, Network.GuestType.Shared, false, false);
} else if (id.longValue() == 5) {
//network offering invalid for vpc (Shared)
vo = new NetworkOfferingVO("vpc", "vpc", TrafficType.Guest, false, true, null, null, false,
Availability.Optional, null, Network.GuestType.Isolated, false, false);
vo.setRedundantRouter(true);
}
if (vo != null) {
vo = setId(vo, id);
} }
return vo; return vo;
} }
private NetworkOfferingVO setId(NetworkOfferingVO vo, long id) {
NetworkOfferingVO voToReturn = vo;
Class<?> c = voToReturn.getClass();
try {
Field f = c.getDeclaredField("id");
f.setAccessible(true);
f.setLong(voToReturn, id);
} catch (NoSuchFieldException ex) {
s_logger.warn(ex);
return null;
} catch (IllegalAccessException ex) {
s_logger.warn(ex);
return null;
}
return voToReturn;
}
} }

View File

@ -14,9 +14,7 @@ package com.cloud.vpc.dao;
import javax.ejb.Local; import javax.ejb.Local;
import com.cloud.network.Network.Provider;
import com.cloud.network.Network.Service; import com.cloud.network.Network.Service;
import com.cloud.offerings.NetworkOfferingServiceMapVO;
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
import com.cloud.offerings.dao.NetworkOfferingServiceMapDaoImpl; import com.cloud.offerings.dao.NetworkOfferingServiceMapDaoImpl;
import com.cloud.utils.db.DB; import com.cloud.utils.db.DB;
@ -26,20 +24,12 @@ import com.cloud.utils.db.DB;
public class MockNetworkOfferingServiceMapDaoImpl extends NetworkOfferingServiceMapDaoImpl{ public class MockNetworkOfferingServiceMapDaoImpl extends NetworkOfferingServiceMapDaoImpl{
@Override @Override
public NetworkOfferingServiceMapVO findById(Long id) { public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) {
NetworkOfferingServiceMapVO vo = null; if (services.length > 0 && services[0] == Service.SourceNat && networkOfferingId != 2) {
System.out.println("hello alena"); return true;
if (id.longValue() == 0) { } else if (services.length > 0 && services[0] == Service.Lb && networkOfferingId != 2) {
vo = new NetworkOfferingServiceMapVO(1, Service.SourceNat, Provider.VPCVirtualRouter); return true;
} else if (id.longValue() == 2) {
vo = new NetworkOfferingServiceMapVO(2, Service.Firewall, Provider.VirtualRouter);
} else if (id.longValue() == 3) {
vo = new NetworkOfferingServiceMapVO(3, Service.SourceNat, Provider.VPCVirtualRouter);
} else if (id.longValue() == 4) {
vo = new NetworkOfferingServiceMapVO(4, Service.SourceNat, Provider.VPCVirtualRouter);
} }
return false;
return vo;
} }
} }

View File

@ -89,20 +89,4 @@ public class MockNetworkServiceMapDaoImpl extends GenericDaoBase<NetworkServiceM
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@Override
public NetworkServiceMapVO findById(Long id) {
NetworkServiceMapVO vo = null;
if (id.longValue() == 1) {
vo = new NetworkServiceMapVO(1, Service.SourceNat, Provider.VPCVirtualRouter);
} else if (id.longValue() == 2) {
vo = new NetworkServiceMapVO(2, Service.Firewall, Provider.VirtualRouter);
} else if (id.longValue() == 3) {
vo = new NetworkServiceMapVO(3, Service.SourceNat, Provider.VPCVirtualRouter);
} else if (id.longValue() == 4) {
vo = new NetworkServiceMapVO(4, Service.SourceNat, Provider.VPCVirtualRouter);
}
return vo;
}
} }

View File

@ -12,12 +12,6 @@
// Automatically generated by addcopyright.py at 04/03/2012 // Automatically generated by addcopyright.py at 04/03/2012
package com.cloud.vpc.dao; package com.cloud.vpc.dao;
import com.cloud.offerings.NetworkOfferingVO; public class MockVpcOfferingServiceMapDao {
public class MockNetworkOfferingVO extends NetworkOfferingVO{
private long id;
public void setId(long id) {
this.id = id;
}
} }

View File

@ -84,7 +84,7 @@ under the License.
<!-- ================ --> <!-- ================ -->
<category name="com.cloud"> <category name="com.cloud">
<priority value="TRACE"/> <priority value="DEBUG"/>
</category> </category>
<!-- Limit the org.apache category to INFO as its DEBUG is verbose --> <!-- Limit the org.apache category to INFO as its DEBUG is verbose -->