network: Send userdata to Virtual Router if IPv6 is enabled (#3100)

There is no reason to not send userdata+password to the VR as all
Instances in CloudStack are Dual-Stacked. They have IPv4 and IPv6
so they can query their metadata over IPv4 at the VR.

Signed-off-by: Wido den Hollander <wido@widodh.nl>
This commit is contained in:
Wido den Hollander 2018-12-24 19:12:57 +01:00 committed by Rohit Yadav
parent cabef5305d
commit 2699586d92
2 changed files with 56 additions and 5 deletions

View File

@ -1022,11 +1022,6 @@ NetworkMigrationResponder, AggregatedCommandExecutor, RedundantResource, DnsServ
return false;
}
if (network.getIp6Gateway() != null) {
s_logger.info("Skip password and userdata service setup for IPv6 VM");
return true;
}
final VirtualMachineProfile uservm = vm;
final List<DomainRouterVO> routers = getRouters(network, dest);

View File

@ -449,4 +449,60 @@ public class VirtualRouterElementTest {
when(_routerDao.persist(any(DomainRouterVO.class))).thenReturn(router);
}
@Test
public void testCanHandle() {
Network network = Mockito.mock(Network.class);
final long networkId = 1;
final long physicalNetworkId = 42;
final long networkOfferingId = 10;
final long dataCenterId = 33;
when(network.getId()).thenReturn(networkId);
when(network.getPhysicalNetworkId()).thenReturn(physicalNetworkId);
when(network.getTrafficType()).thenReturn(TrafficType.Guest);
when(network.getNetworkOfferingId()).thenReturn(networkOfferingId);
when(network.getDataCenterId()).thenReturn(dataCenterId);
when(network.getVpcId()).thenReturn(null);
when(virtualRouterElement._networkMdl.getPhysicalNetworkId(network)).thenReturn(physicalNetworkId);
when(virtualRouterElement._networkMdl.isProviderEnabledInPhysicalNetwork(physicalNetworkId, Network.Provider.VirtualRouter.getName())).thenReturn(true);
when(virtualRouterElement._networkMdl.isProviderForNetwork(Network.Provider.VirtualRouter, networkId)).thenReturn(true);
assertTrue(virtualRouterElement.canHandle(network, null));
}
@Test
public void testAddPasswordAndUserdata() throws Exception {
Network network = Mockito.mock(Network.class);
VirtualMachineProfile vm = Mockito.mock(VirtualMachineProfile.class);
NicProfile nic = Mockito.mock(NicProfile.class);
DeployDestination dest = Mockito.mock(DeployDestination.class);
ReservationContext context = Mockito.mock(ReservationContext.class);
Service service = Service.UserData;
final long networkId = 1;
final long physicalNetworkId = 42;
final long networkOfferingId = 10;
final long dataCenterId = 33;
when(network.getId()).thenReturn(networkId);
when(network.getPhysicalNetworkId()).thenReturn(physicalNetworkId);
when(network.getTrafficType()).thenReturn(TrafficType.Guest);
when(network.getNetworkOfferingId()).thenReturn(networkOfferingId);
when(network.getDataCenterId()).thenReturn(dataCenterId);
when(network.getVpcId()).thenReturn(null);
when(vm.getType()).thenReturn(VirtualMachine.Type.User);
when(virtualRouterElement._networkMdl.getPhysicalNetworkId(network)).thenReturn(physicalNetworkId);
when(virtualRouterElement._networkMdl.isProviderEnabledInPhysicalNetwork(physicalNetworkId, Network.Provider.VirtualRouter.getName())).thenReturn(true);
when(virtualRouterElement._networkMdl.isProviderSupportServiceInNetwork(networkId, service, Network.Provider.VirtualRouter)).thenReturn(true);
when(virtualRouterElement._dcDao.findById(dataCenterId)).thenReturn(Mockito.mock(DataCenterVO.class));
when(virtualRouterElement.canHandle(network, service)).thenReturn(false);
assertTrue(virtualRouterElement.addPasswordAndUserdata(network, nic, vm, dest, context));
}
}