This is an automated email from the ASF dual-hosted git repository.
weizhou pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.19 by this push:
new 4ffeec6ba45 vpc: create vpc tiers with dns server of vpc instead of
zone (#8621)
4ffeec6ba45 is described below
commit 4ffeec6ba45530a19058e400673a99072d88692a
Author: Wei Zhou <[email protected]>
AuthorDate: Wed Apr 24 09:10:52 2024 +0200
vpc: create vpc tiers with dns server of vpc instead of zone (#8621)
* vpc: create vpc tiers with dns server of vpc instead of zone
with this change
```
root@r-575-VM:~# cat /etc/dnsmasq.d/cloud.conf
dhcp-hostsfile=/etc/dhcphosts.txt
listen-address=127.0.0.1,172.17.1.1,172.17.2.1,172.17.3.1
dhcp-range=set:interface-eth2-0,172.17.1.1,static
dhcp-option=tag:interface-eth2-0,15,cs2cloud.internal
dhcp-option=tag:interface-eth2-0,6,172.17.1.1,10.0.32.1,8.8.8.8
dhcp-option=tag:interface-eth2-0,3,172.17.1.1
dhcp-option=eth2,26,1500
dhcp-option=tag:interface-eth2-0,1,255.255.255.0
dhcp-range=set:interface-eth3-1,172.17.2.1,static
dhcp-option=tag:interface-eth3-1,15,cs2cloud.internal
dhcp-option=tag:interface-eth3-1,6,172.17.2.1,8.8.8.8,1.1.1.1
dhcp-option=tag:interface-eth3-1,3,172.17.2.1
dhcp-option=eth3,26,1500
dhcp-option=tag:interface-eth3-1,1,255.255.255.0
dhcp-range=set:interface-eth4-2,172.17.3.1,static
dhcp-option=tag:interface-eth4-2,15,cs2cloud.internal
dhcp-option=tag:interface-eth4-2,6,172.17.3.1,8.8.8.8,1.1.1.1
dhcp-option=tag:interface-eth4-2,3,172.17.3.1
dhcp-option=eth4,26,1500
dhcp-option=tag:interface-eth4-2,1,255.255.255.0
root@r-575-VM:~#
```
* Update PR8621 test:ArgumentMatchers instead of Matchers in test
---
.../java/com/cloud/network/NetworkModelImpl.java | 16 +++++
.../com/cloud/network/NetworkModelImplTest.java | 82 +++++++++++++++-------
2 files changed, 72 insertions(+), 26 deletions(-)
diff --git a/server/src/main/java/com/cloud/network/NetworkModelImpl.java
b/server/src/main/java/com/cloud/network/NetworkModelImpl.java
index 86000205bec..f6824c9477e 100644
--- a/server/src/main/java/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkModelImpl.java
@@ -102,8 +102,10 @@ import com.cloud.network.router.VirtualRouter;
import com.cloud.network.rules.FirewallRule.Purpose;
import com.cloud.network.rules.FirewallRuleVO;
import com.cloud.network.rules.dao.PortForwardingRulesDao;
+import com.cloud.network.vpc.Vpc;
import com.cloud.network.vpc.VpcGatewayVO;
import com.cloud.network.vpc.dao.PrivateIpDao;
+import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.network.vpc.dao.VpcGatewayDao;
import com.cloud.offering.NetworkOffering;
import com.cloud.offering.NetworkOffering.Detail;
@@ -180,6 +182,8 @@ public class NetworkModelImpl extends ManagerBase
implements NetworkModel, Confi
ProjectDao projectDao;
@Inject
NetworkPermissionDao _networkPermissionDao;
+ @Inject
+ VpcDao vpcDao;
private List<NetworkElement> networkElements;
@@ -2715,6 +2719,12 @@ public class NetworkModelImpl extends ManagerBase
implements NetworkModel, Confi
if (StringUtils.isNotBlank(network.getDns1())) {
return new Pair<>(network.getDns1(), network.getDns2());
}
+ if (network.getVpcId() != null) {
+ Vpc vpc = vpcDao.findById(network.getVpcId());
+ if (vpc != null && StringUtils.isNotBlank(vpc.getIp4Dns1())) {
+ return new Pair<>(vpc.getIp4Dns1(), vpc.getIp4Dns2());
+ }
+ }
return new Pair<>(zone.getDns1(), zone.getDns2());
}
@@ -2723,6 +2733,12 @@ public class NetworkModelImpl extends ManagerBase
implements NetworkModel, Confi
if (StringUtils.isNotBlank(network.getIp6Dns1())) {
return new Pair<>(network.getIp6Dns1(), network.getIp6Dns2());
}
+ if (network.getVpcId() != null) {
+ Vpc vpc = vpcDao.findById(network.getVpcId());
+ if (vpc != null && StringUtils.isNotBlank(vpc.getIp6Dns1())) {
+ return new Pair<>(vpc.getIp6Dns1(), vpc.getIp6Dns2());
+ }
+ }
return new Pair<>(zone.getIp6Dns1(), zone.getIp6Dns2());
}
diff --git a/server/src/test/java/com/cloud/network/NetworkModelImplTest.java
b/server/src/test/java/com/cloud/network/NetworkModelImplTest.java
index 0bbead6a468..d9baa260c68 100644
--- a/server/src/test/java/com/cloud/network/NetworkModelImplTest.java
+++ b/server/src/test/java/com/cloud/network/NetworkModelImplTest.java
@@ -18,33 +18,48 @@ package com.cloud.network;
import com.cloud.dc.DataCenter;
import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.network.vpc.VpcVO;
+import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.utils.Pair;
import org.junit.Assert;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatchers;
import org.mockito.InjectMocks;
+import org.mockito.Mock;
import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+@RunWith(MockitoJUnitRunner.class)
public class NetworkModelImplTest {
- final String[] ip4Dns1 = {"5.5.5.5", "6.6.6.6"};
- final String[] ip4Dns2 = {"7.7.7.7", "8.8.8.8"};
- final String[] ip6Dns1 = {"2001:4860:4860::5555", "2001:4860:4860::6666"};
- final String[] ip6Dns2 = {"2001:4860:4860::7777", "2001:4860:4860::8888"};
+ final String[] ip4Dns1 = {"5.5.5.5", "6.6.6.6", "9.9.9.9"};
+ final String[] ip4Dns2 = {"7.7.7.7", "8.8.8.8", "10.10.10.10"};
+ final String[] ip6Dns1 = {"2001:4860:4860::5555", "2001:4860:4860::6666",
"2001:4860:4860::9999"};
+ final String[] ip6Dns2 = {"2001:4860:4860::7777", "2001:4860:4860::8888",
"2001:4860:4860::AAAA"};
+
+ @Mock
+ private VpcDao vpcDao;
@InjectMocks
private NetworkModelImpl networkModel = new NetworkModelImpl();
- private void prepareMocks(boolean isIp6, Network network, DataCenter zone,
- String dns1, String dns2, String dns3, String
dns4) {
+ private void prepareMocks(boolean isIp6, Network network, DataCenter zone,
VpcVO vpc,
+ String networkDns1, String zoneDns1, String
networkDns2, String zoneDns2,
+ String vpcDns1, String vpcDns2) {
if (isIp6) {
- Mockito.when(network.getIp6Dns1()).thenReturn(dns1);
- Mockito.when(zone.getIp6Dns1()).thenReturn(dns2);
- Mockito.when(network.getIp6Dns2()).thenReturn(dns3);
- Mockito.when(zone.getIp6Dns2()).thenReturn(dns4);
+ Mockito.when(network.getIp6Dns1()).thenReturn(networkDns1);
+ Mockito.when(zone.getIp6Dns1()).thenReturn(zoneDns1);
+ Mockito.when(network.getIp6Dns2()).thenReturn(networkDns2);
+ Mockito.when(zone.getIp6Dns2()).thenReturn(zoneDns2);
+ Mockito.when(vpc.getIp6Dns1()).thenReturn(vpcDns1);
+ Mockito.when(vpc.getIp6Dns2()).thenReturn(vpcDns2);
} else {
- Mockito.when(network.getDns1()).thenReturn(dns1);
- Mockito.when(zone.getDns1()).thenReturn(dns2);
- Mockito.when(network.getDns2()).thenReturn(dns3);
- Mockito.when(zone.getDns2()).thenReturn(dns4);
+ Mockito.when(network.getDns1()).thenReturn(networkDns1);
+ Mockito.when(zone.getDns1()).thenReturn(zoneDns1);
+ Mockito.when(network.getDns2()).thenReturn(networkDns2);
+ Mockito.when(zone.getDns2()).thenReturn(zoneDns2);
+ Mockito.when(vpc.getIp4Dns1()).thenReturn(vpcDns1);
+ Mockito.when(vpc.getIp4Dns2()).thenReturn(vpcDns2);
}
}
@@ -53,38 +68,53 @@ public class NetworkModelImplTest {
String[] dns2 = isIp6 ? ip6Dns2 : ip4Dns2;
Network network = Mockito.mock(Network.class);
DataCenter zone = Mockito.mock(DataCenter.class);
- // Both network and zone have valid dns
- prepareMocks(isIp6, network, zone, dns1[0], dns1[1], dns2[0], dns1[1]);
+ VpcVO vpc = Mockito.mock(VpcVO.class);
+ Mockito.when(network.getVpcId()).thenReturn(1L);
+
Mockito.doReturn(vpc).when(vpcDao).findById(ArgumentMatchers.anyLong());
+ // network, vpc and zone have valid dns
+ prepareMocks(isIp6, network, zone, vpc, dns1[0], dns1[1], dns2[0],
dns2[1], dns1[2], dns2[2]);
Pair<String, String> result = isIp6 ?
networkModel.getNetworkIp6Dns(network, zone) :
networkModel.getNetworkIp4Dns(network, zone);
Assert.assertEquals(dns1[0], result.first());
Assert.assertEquals(dns2[0], result.second());
- // Network has valid dns and zone don't
- prepareMocks(isIp6, network, zone, dns1[0], null, dns2[0], null);
+ // Network has valid dns and vpc/zone don't
+ prepareMocks(isIp6, network, zone, vpc, dns1[0], null, dns2[0], null,
null, null);
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
networkModel.getNetworkIp4Dns(network, zone);
Assert.assertEquals(dns1[0], result.first());
Assert.assertEquals(dns2[0], result.second());
- // Zone has a valid dns and network don't
- prepareMocks(isIp6, network, zone, null, dns1[1], null, dns2[1]);
+ // Vpc has valid dns and network/zone don't
+ prepareMocks(isIp6, network, zone, vpc, null, null, null, null,
dns1[2], dns2[2]);
+ result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
+ networkModel.getNetworkIp4Dns(network, zone);
+ Assert.assertEquals(dns1[2], result.first());
+ Assert.assertEquals(dns2[2], result.second());
+ // Zone has a valid dns and network/vpc don't
+ prepareMocks(isIp6, network, zone, vpc, null, dns1[1], null, dns2[1],
null, null);
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
networkModel.getNetworkIp4Dns(network, zone);
Assert.assertEquals(dns1[1], result.first());
Assert.assertEquals(dns2[1], result.second());
- // Zone has a valid dns and network has only first dns
- prepareMocks(isIp6, network, zone, dns1[0], dns1[1], null, dns2[1]);
+ // Zone/vpc has a valid dns and network has only first dns
+ prepareMocks(isIp6, network, zone, vpc, dns1[0], dns1[1], null,
dns2[1], dns1[2], dns2[2]);
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
networkModel.getNetworkIp4Dns(network, zone);
Assert.assertEquals(dns1[0], result.first());
Assert.assertNull(result.second());
- // Both network and zone only have the first dns
- prepareMocks(isIp6, network, zone, dns1[0], dns1[1], null, null);
+ // network don't have a valid dns, vpc has only first dns, Zone has a
valid dns
+ prepareMocks(isIp6, network, zone, vpc, null, dns1[1], null, dns2[1],
dns1[2], null);
+ result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
+ networkModel.getNetworkIp4Dns(network, zone);
+ Assert.assertEquals(dns1[2], result.first());
+ Assert.assertNull(result.second());
+ // network/vpc/zone only have the first dns
+ prepareMocks(isIp6, network, zone, vpc, dns1[0], dns1[1], null, null,
dns1[2], null);
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
networkModel.getNetworkIp4Dns(network, zone);
Assert.assertEquals(dns1[0], result.first());
Assert.assertNull(result.second());
- // Both network and zone dns are null
- prepareMocks(isIp6, network, zone, null, null, null, null);
+ // network/vpc and zone dns are null
+ prepareMocks(isIp6, network, zone, vpc, null, null, null, null, null,
null);
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
networkModel.getNetworkIp4Dns(network, zone);
Assert.assertNull(result.first());