mirror of https://github.com/apache/cloudstack.git
server: fix ipv6 network deployment with separate guest nw (#6588)
Fixes #6584 Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
parent
052a34c1fb
commit
010b47f82e
|
|
@ -61,7 +61,7 @@ public interface VlanDao extends GenericDao<VlanVO, Long> {
|
|||
|
||||
List<VlanVO> listDedicatedVlans(long accountId);
|
||||
|
||||
List<VlanVO> listIpv6RangeByPhysicalNetworkIdAndVlanId(long physicalNetworkId, String vlanId);
|
||||
List<VlanVO> listIpv6RangeByZoneIdAndVlanId(long zoneId, String vlanId);
|
||||
|
||||
List<VlanVO> listIpv6SupportingVlansByZone(long zoneId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ public class VlanDaoImpl extends GenericDaoBase<VlanVO, Long> implements VlanDao
|
|||
protected SearchBuilder<VlanVO> ZoneWideNonDedicatedVlanSearch;
|
||||
protected SearchBuilder<VlanVO> VlanGatewaysearch;
|
||||
protected SearchBuilder<VlanVO> DedicatedVlanSearch;
|
||||
protected SearchBuilder<VlanVO> PhysicalNetworkVlanIp6Search;
|
||||
protected SearchBuilder<VlanVO> ZoneVlanIp6Search;
|
||||
protected SearchBuilder<VlanVO> ZoneIp6Search;
|
||||
protected SearchBuilder<VlanVO> ZoneVlansSearch;
|
||||
|
||||
|
|
@ -260,12 +260,12 @@ public class VlanDaoImpl extends GenericDaoBase<VlanVO, Long> implements VlanDao
|
|||
DedicatedVlanSearch.done();
|
||||
AccountVlanMapSearch.done();
|
||||
|
||||
PhysicalNetworkVlanIp6Search = createSearchBuilder();
|
||||
PhysicalNetworkVlanIp6Search.and("physicalNetworkId", PhysicalNetworkVlanIp6Search.entity().getPhysicalNetworkId(), SearchCriteria.Op.EQ);
|
||||
PhysicalNetworkVlanIp6Search.and("vlanId", PhysicalNetworkVlanIp6Search.entity().getVlanTag(), SearchCriteria.Op.EQ);
|
||||
PhysicalNetworkVlanIp6Search.and("ip6Gateway", PhysicalNetworkVlanIp6Search.entity().getIp6Gateway(), SearchCriteria.Op.NNULL);
|
||||
PhysicalNetworkVlanIp6Search.and("ip6Cidr", PhysicalNetworkVlanIp6Search.entity().getIp6Cidr(), SearchCriteria.Op.NNULL);
|
||||
PhysicalNetworkVlanIp6Search.done();
|
||||
ZoneVlanIp6Search = createSearchBuilder();
|
||||
ZoneVlanIp6Search.and("zoneId", ZoneVlanIp6Search.entity().getDataCenterId(), SearchCriteria.Op.EQ);
|
||||
ZoneVlanIp6Search.and("vlanId", ZoneVlanIp6Search.entity().getVlanTag(), SearchCriteria.Op.EQ);
|
||||
ZoneVlanIp6Search.and("ip6Gateway", ZoneVlanIp6Search.entity().getIp6Gateway(), SearchCriteria.Op.NNULL);
|
||||
ZoneVlanIp6Search.and("ip6Cidr", ZoneVlanIp6Search.entity().getIp6Cidr(), SearchCriteria.Op.NNULL);
|
||||
ZoneVlanIp6Search.done();
|
||||
|
||||
ZoneIp6Search = createSearchBuilder();
|
||||
ZoneIp6Search.and("zoneId", ZoneIp6Search.entity().getDataCenterId(), SearchCriteria.Op.EQ);
|
||||
|
|
@ -410,9 +410,9 @@ public class VlanDaoImpl extends GenericDaoBase<VlanVO, Long> implements VlanDao
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<VlanVO> listIpv6RangeByPhysicalNetworkIdAndVlanId(long physicalNetworkId, String vlanId) {
|
||||
SearchCriteria<VlanVO> sc = PhysicalNetworkVlanIp6Search.create();
|
||||
sc.setParameters("physicalNetworkId", physicalNetworkId);
|
||||
public List<VlanVO> listIpv6RangeByZoneIdAndVlanId(long zoneId, String vlanId) {
|
||||
SearchCriteria<VlanVO> sc = ZoneVlanIp6Search.create();
|
||||
sc.setParameters("zoneId", zoneId);
|
||||
if(StringUtils.isNotEmpty(vlanId)) {
|
||||
sc.setParameters("vlanId", vlanId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ public class Ipv6ServiceImpl extends ComponentLifecycleBase implements Ipv6Servi
|
|||
}
|
||||
|
||||
private Pair<String, ? extends Vlan> assignPublicIpv6ToNetworkInternal(Network network, String vlanId, String nicMacAddress) throws InsufficientAddressCapacityException {
|
||||
final List<VlanVO> ranges = vlanDao.listIpv6RangeByPhysicalNetworkIdAndVlanId(network.getPhysicalNetworkId(), vlanId);
|
||||
final List<VlanVO> ranges = vlanDao.listIpv6RangeByZoneIdAndVlanId(network.getDataCenterId(), vlanId);
|
||||
if (CollectionUtils.isEmpty(ranges)) {
|
||||
s_logger.error(String.format("Unable to find IPv6 address for zone ID: %d, physical network ID: %d, VLAN: %s", network.getDataCenterId(), network.getPhysicalNetworkId(), vlanId));
|
||||
InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", DataCenter.class, network.getDataCenterId());
|
||||
|
|
@ -501,7 +501,7 @@ public class Ipv6ServiceImpl extends ComponentLifecycleBase implements Ipv6Servi
|
|||
ipAddressDao.listByAssociatedVpc(network.getVpcId(), true);
|
||||
for (IPAddressVO address : addresses) {
|
||||
VlanVO vlan = vlanDao.findById(address.getVlanId());
|
||||
final List<VlanVO> ranges = vlanDao.listIpv6RangeByPhysicalNetworkIdAndVlanId(network.getPhysicalNetworkId(), vlan.getVlanTag());
|
||||
final List<VlanVO> ranges = vlanDao.listIpv6RangeByZoneIdAndVlanId(network.getPhysicalNetworkId(), vlan.getVlanTag());
|
||||
if (CollectionUtils.isEmpty(ranges)) {
|
||||
s_logger.error(String.format("Unable to find IPv6 address for zone ID: %d, physical network ID: %d, VLAN: %s", network.getDataCenterId(), network.getPhysicalNetworkId(), vlan.getVlanTag()));
|
||||
InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", DataCenter.class, network.getDataCenterId());
|
||||
|
|
|
|||
|
|
@ -397,7 +397,7 @@ public class Ipv6ServiceImplTest {
|
|||
Nic nic = Mockito.mock(Nic.class);
|
||||
Mockito.when(nic.getIPv6Address()).thenReturn(null);
|
||||
Mockito.when(nic.getBroadcastUri()).thenReturn(URI.create(vlan));
|
||||
Mockito.when(vlanDao.listIpv6RangeByPhysicalNetworkIdAndVlanId(1L, "vlan")).thenReturn(new ArrayList<>());
|
||||
Mockito.when(vlanDao.listIpv6RangeByZoneIdAndVlanId(1L, "vlan")).thenReturn(new ArrayList<>());
|
||||
try (TransactionLegacy txn = TransactionLegacy.open("testNewErrorAssignPublicIpv6ToNetwork")) {
|
||||
ipv6Service.assignPublicIpv6ToNetwork(Mockito.mock(Network.class), nic);
|
||||
}
|
||||
|
|
@ -421,7 +421,7 @@ public class Ipv6ServiceImplTest {
|
|||
Mockito.when(vlanVO.getVlanType()).thenReturn(Vlan.VlanType.VirtualNetwork);
|
||||
List<VlanVO> vlans = new ArrayList<>();
|
||||
vlans.add(vlanVO);
|
||||
Mockito.when(vlanDao.listIpv6RangeByPhysicalNetworkIdAndVlanId(Mockito.anyLong(), Mockito.anyString())).thenReturn(vlans);
|
||||
Mockito.when(vlanDao.listIpv6RangeByZoneIdAndVlanId(Mockito.anyLong(), Mockito.anyString())).thenReturn(vlans);
|
||||
List<NicVO> placeholderNics = new ArrayList<>();
|
||||
if (fromPlaceholder) {
|
||||
placeholderNics = mockPlaceholderNics();
|
||||
|
|
@ -601,7 +601,7 @@ public class Ipv6ServiceImplTest {
|
|||
VlanVO vlanVO = Mockito.mock(VlanVO.class);
|
||||
Mockito.when(vlanVO.getVlanTag()).thenReturn(vlan);
|
||||
Mockito.when(vlanDao.findById(Mockito.anyLong())).thenReturn(vlanVO);
|
||||
Mockito.when(vlanDao.listIpv6RangeByPhysicalNetworkIdAndVlanId(Mockito.anyLong(), Mockito.anyString())).thenReturn(new ArrayList<>());
|
||||
Mockito.when(vlanDao.listIpv6RangeByZoneIdAndVlanId(Mockito.anyLong(), Mockito.anyString())).thenReturn(new ArrayList<>());
|
||||
try {
|
||||
ipv6Service.checkNetworkIpv6Upgrade(network);
|
||||
Assert.fail("No InsufficientAddressCapacityException");
|
||||
|
|
@ -619,7 +619,7 @@ public class Ipv6ServiceImplTest {
|
|||
VlanVO vlanVO = Mockito.mock(VlanVO.class);
|
||||
Mockito.when(vlanVO.getVlanTag()).thenReturn(vlan);
|
||||
Mockito.when(vlanDao.findById(Mockito.anyLong())).thenReturn(vlanVO);
|
||||
Mockito.when(vlanDao.listIpv6RangeByPhysicalNetworkIdAndVlanId(physicalNetworkId, vlan)).thenReturn(List.of(vlanVO));
|
||||
Mockito.when(vlanDao.listIpv6RangeByZoneIdAndVlanId(physicalNetworkId, vlan)).thenReturn(List.of(vlanVO));
|
||||
try {
|
||||
ipv6Service.checkNetworkIpv6Upgrade(network);
|
||||
} catch (InsufficientAddressCapacityException | ResourceAllocationException e) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue