mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	Merge branch '4.10'
This commit is contained in:
		
						commit
						619da91386
					
				| @ -176,3 +176,7 @@ hypervisor.type=kvm | ||||
| # vm.rng.rate.period=1000 | ||||
| # The number of milliseconds in which the guest is allowed to obtain the bytes | ||||
| # specified above. | ||||
| 
 | ||||
| # router.aggregation.command.each.timeout=600 | ||||
| # timeout value for aggregation commands send to virtual router | ||||
| # | ||||
|  | ||||
| @ -92,10 +92,6 @@ public class UpdateVMAffinityGroupCmd extends BaseAsyncCmd { | ||||
|     } | ||||
| 
 | ||||
|     public List<Long> getAffinityGroupIdList() { | ||||
|         if (affinityGroupNameList != null && affinityGroupIdList != null) { | ||||
|             throw new InvalidParameterValueException("affinitygroupids parameter is mutually exclusive with affinitygroupnames parameter"); | ||||
|         } | ||||
| 
 | ||||
|         // transform group names to ids here | ||||
|         if (affinityGroupNameList != null) { | ||||
|             List<Long> affinityGroupIds = new ArrayList<Long>(); | ||||
| @ -138,6 +134,14 @@ public class UpdateVMAffinityGroupCmd extends BaseAsyncCmd { | ||||
| 
 | ||||
|     @Override | ||||
|     public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException { | ||||
|         if (affinityGroupNameList != null && affinityGroupIdList != null) { | ||||
|             throw new InvalidParameterValueException("affinitygroupids parameter is mutually exclusive with affinitygroupnames parameter"); | ||||
|         } | ||||
| 
 | ||||
|         if (affinityGroupNameList == null && affinityGroupIdList == null) { | ||||
|             throw new InvalidParameterValueException("affinitygroupids parameter or affinitygroupnames parameter must be given"); | ||||
|         } | ||||
| 
 | ||||
|         CallContext.current().setEventDetails("VM ID: " + getId()); | ||||
|         UserVm result = _affinityGroupService.updateVMAffinityGroups(getId(), getAffinityGroupIdList()); | ||||
|         ArrayList<VMDetails> dc = new ArrayList<VMDetails>(); | ||||
|  | ||||
| @ -283,7 +283,10 @@ public class VirtualRoutingResource { | ||||
|         _port = NumbersUtil.parseInt(value, 3922); | ||||
| 
 | ||||
|         value = (String)params.get("router.aggregation.command.each.timeout"); | ||||
|         _eachTimeout = Duration.standardSeconds(NumbersUtil.parseInt(value, 10)); | ||||
|         _eachTimeout = Duration.standardSeconds(NumbersUtil.parseInt(value, (int)VRScripts.VR_SCRIPT_EXEC_TIMEOUT.getStandardSeconds())); | ||||
|         if (s_logger.isDebugEnabled()){ | ||||
|             s_logger.debug("The router.aggregation.command.each.timeout in seconds is set to " + _eachTimeout.getStandardSeconds()); | ||||
|         } | ||||
| 
 | ||||
|         if (_vrDeployer == null) { | ||||
|             throw new ConfigurationException("Unable to find the resource for VirtualRouterDeployer!"); | ||||
| @ -387,8 +390,8 @@ public class VirtualRoutingResource { | ||||
|                 ScriptConfigItem scriptConfigItem = new ScriptConfigItem(VRScripts.VR_CFG, "-c " + VRScripts.CONFIG_CACHE_LOCATION + cfgFileName); | ||||
|                 // 120s is the minimal timeout | ||||
|                 Duration timeout = _eachTimeout.withDurationAdded(_eachTimeout.getStandardSeconds(), answerCounts); | ||||
|                 if (timeout.isShorterThan(VRScripts.VR_SCRIPT_EXEC_TIMEOUT)) { | ||||
|                     timeout = VRScripts.VR_SCRIPT_EXEC_TIMEOUT; | ||||
|                 if (s_logger.isDebugEnabled()){ | ||||
|                     s_logger.debug("Aggregate action timeout in seconds is " + timeout.getStandardSeconds()); | ||||
|                 } | ||||
| 
 | ||||
|                 ExecutionResult result = applyConfigToVR(cmd.getRouterAccessIp(), fileConfigItem, timeout); | ||||
|  | ||||
| @ -25,25 +25,9 @@ import java.util.Set; | ||||
| 
 | ||||
| import javax.inject.Inject; | ||||
| 
 | ||||
| import com.google.common.collect.FluentIterable; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDomain; | ||||
| import net.nuage.vsp.acs.client.api.model.VspNetwork; | ||||
| import net.nuage.vsp.acs.client.api.model.VspNic; | ||||
| import net.nuage.vsp.acs.client.api.model.VspStaticNat; | ||||
| import net.nuage.vsp.acs.client.api.model.VspVm; | ||||
| 
 | ||||
| import org.apache.log4j.Logger; | ||||
| 
 | ||||
| import com.google.common.base.Strings; | ||||
| import com.google.common.collect.Iterables; | ||||
| import com.google.common.collect.LinkedListMultimap; | ||||
| import com.google.common.collect.Lists; | ||||
| import com.google.common.collect.Maps; | ||||
| 
 | ||||
| import org.apache.cloudstack.resourcedetail.VpcDetailVO; | ||||
| import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao; | ||||
| import org.apache.log4j.Logger; | ||||
| 
 | ||||
| import com.cloud.agent.AgentManager; | ||||
| import com.cloud.agent.api.Answer; | ||||
| @ -98,6 +82,20 @@ import com.cloud.vm.VMInstanceVO; | ||||
| import com.cloud.vm.VirtualMachine; | ||||
| import com.cloud.vm.VirtualMachineProfile; | ||||
| import com.cloud.vm.dao.VMInstanceDao; | ||||
| import com.google.common.base.Strings; | ||||
| import com.google.common.collect.FluentIterable; | ||||
| import com.google.common.collect.Iterables; | ||||
| import com.google.common.collect.LinkedListMultimap; | ||||
| import com.google.common.collect.Lists; | ||||
| import com.google.common.collect.Maps; | ||||
| 
 | ||||
| import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDomain; | ||||
| import net.nuage.vsp.acs.client.api.model.VspNetwork; | ||||
| import net.nuage.vsp.acs.client.api.model.VspNic; | ||||
| import net.nuage.vsp.acs.client.api.model.VspStaticNat; | ||||
| import net.nuage.vsp.acs.client.api.model.VspVm; | ||||
| 
 | ||||
| public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { | ||||
|     public static final Logger s_logger = Logger.getLogger(NuageVspGuestNetworkGuru.class); | ||||
| @ -335,7 +333,7 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { | ||||
|             VspStaticNat vspStaticNat = null; | ||||
|             if (staticNatIp != null) { | ||||
|                 VlanVO staticNatVlan = _vlanDao.findById(staticNatIp.getVlanId()); | ||||
|                 vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, null); | ||||
|                 vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, vspNic); | ||||
|             } | ||||
| 
 | ||||
|             boolean defaultHasDns = getDefaultHasDns(networkHasDnsCache, nicFromDb); | ||||
| @ -595,4 +593,4 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -19,6 +19,20 @@ | ||||
| 
 | ||||
| package com.cloud.util; | ||||
| 
 | ||||
| import java.util.HashSet; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
| import java.util.TreeSet; | ||||
| 
 | ||||
| import javax.annotation.Nullable; | ||||
| import javax.inject.Inject; | ||||
| 
 | ||||
| import org.apache.cloudstack.framework.config.dao.ConfigurationDao; | ||||
| import org.apache.commons.lang.StringUtils; | ||||
| import org.apache.log4j.Logger; | ||||
| 
 | ||||
| import com.cloud.dc.Vlan; | ||||
| import com.cloud.dc.VlanVO; | ||||
| import com.cloud.dc.dao.VlanDao; | ||||
| @ -57,9 +71,10 @@ import com.google.common.base.Predicate; | ||||
| import com.google.common.collect.Iterables; | ||||
| import com.google.common.collect.Lists; | ||||
| import com.google.common.collect.Maps; | ||||
| 
 | ||||
| import net.nuage.vsp.acs.client.api.model.VspAclRule; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption; | ||||
| import net.nuage.vsp.acs.client.api.model.VspAddressRange; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDomain; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDomainCleanUp; | ||||
| @ -68,18 +83,6 @@ import net.nuage.vsp.acs.client.api.model.VspNic; | ||||
| import net.nuage.vsp.acs.client.api.model.VspStaticNat; | ||||
| import net.nuage.vsp.acs.client.api.model.VspVm; | ||||
| import net.nuage.vsp.acs.client.common.model.Pair; | ||||
| import org.apache.cloudstack.framework.config.dao.ConfigurationDao; | ||||
| import org.apache.commons.lang.StringUtils; | ||||
| import org.apache.log4j.Logger; | ||||
| 
 | ||||
| import javax.annotation.Nullable; | ||||
| import javax.inject.Inject; | ||||
| import java.util.HashSet; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
| import java.util.TreeSet; | ||||
| 
 | ||||
| public class NuageVspEntityBuilder { | ||||
|     private static final Logger s_logger = Logger.getLogger(NuageVspEntityBuilder.class); | ||||
| @ -380,25 +383,30 @@ public class NuageVspEntityBuilder { | ||||
|         return vspNicBuilder.build(); | ||||
|     } | ||||
| 
 | ||||
|     public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, NicVO nic) { | ||||
|     public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, VspNic vspNic) { | ||||
|         VspStaticNat.Builder vspStaticNatBuilder = new VspStaticNat.Builder() | ||||
|                 .ipUuid(staticNatIp.getUuid()) | ||||
|                 .ipAddress(staticNatIp.getAddress().addr()) | ||||
|                 .revoke(forRevoke) | ||||
|                 .oneToOneNat(staticNatIp.isOneToOneNat()) | ||||
|                 .state(getEnumValue(staticNatIp.getState(), VspStaticNat.State.class)) | ||||
|                 .vlanUuid(staticNatVlan.getUuid()) | ||||
|                 .vlanGateway(staticNatVlan.getVlanGateway()) | ||||
|                 .vlanNetmask(staticNatVlan.getVlanNetmask()) | ||||
|                 .vlanUnderlay(NuageVspUtil.isUnderlayEnabledForVlan(_vlanDetailsDao, staticNatVlan)); | ||||
| 
 | ||||
|         if (nic != null) { | ||||
|             VspNic vspNic = buildVspNic(nic); | ||||
|         if (vspNic != null) { | ||||
|             vspStaticNatBuilder.nic(vspNic); | ||||
|         } | ||||
| 
 | ||||
|         return vspStaticNatBuilder.build(); | ||||
|     } | ||||
| 
 | ||||
|     public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, NicVO nic) { | ||||
|         VspNic vspNic = (nic != null) ?buildVspNic(nic) : null; | ||||
|         return buildVspStaticNat(forRevoke, staticNatIp, staticNatVlan, vspNic); | ||||
|     } | ||||
| 
 | ||||
|     public VspAclRule buildVspAclRule(FirewallRule firewallRule, Network network) { | ||||
|         VspAclRule.Builder vspAclRuleBuilder = new VspAclRule.Builder() | ||||
|                 .uuid(firewallRule.getUuid()) | ||||
| @ -506,4 +514,20 @@ public class NuageVspEntityBuilder { | ||||
| 
 | ||||
|         return vspDhcpDomainBuilder.build(); | ||||
|     } | ||||
| 
 | ||||
|     private <E extends Enum<E>> E getEnumValue(Enum cloudstackValue, Class<E> target) { | ||||
|         try { | ||||
|             return Enum.valueOf(target, cloudstackValue.name()); | ||||
|         } catch (IllegalArgumentException e) { | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private <E extends Enum<E>> E getEnumValue(Enum cloudstackValue, E defaultValue) { | ||||
|         try { | ||||
|             return Enum.valueOf(defaultValue.getDeclaringClass(), cloudstackValue.name()); | ||||
|         } catch (IllegalArgumentException e) { | ||||
|             return defaultValue; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -19,19 +19,17 @@ | ||||
| 
 | ||||
| package com.cloud.util; | ||||
| 
 | ||||
| import net.nuage.vsp.acs.client.api.model.Protocol; | ||||
| import net.nuage.vsp.acs.client.api.model.VspAclRule; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDomain; | ||||
| import net.nuage.vsp.acs.client.api.model.VspNetwork; | ||||
| import net.nuage.vsp.acs.client.api.model.VspNic; | ||||
| import net.nuage.vsp.acs.client.api.model.VspStaticNat; | ||||
| import net.nuage.vsp.acs.client.api.model.VspVm; | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertNotNull; | ||||
| import static org.junit.Assert.assertNull; | ||||
| import static org.mockito.Matchers.anyLong; | ||||
| import static org.mockito.Matchers.anyString; | ||||
| import static org.mockito.Mockito.mock; | ||||
| import static org.mockito.Mockito.when; | ||||
| 
 | ||||
| import org.junit.Before; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import com.google.common.collect.Lists; | ||||
| 
 | ||||
| import com.cloud.NuageTest; | ||||
| import com.cloud.dc.VlanDetailsVO; | ||||
| import com.cloud.dc.VlanVO; | ||||
| @ -39,6 +37,7 @@ import com.cloud.dc.dao.VlanDao; | ||||
| import com.cloud.dc.dao.VlanDetailsDao; | ||||
| import com.cloud.domain.DomainVO; | ||||
| import com.cloud.domain.dao.DomainDao; | ||||
| import com.cloud.network.IpAddress; | ||||
| import com.cloud.network.Network; | ||||
| import com.cloud.network.dao.IPAddressDao; | ||||
| import com.cloud.network.dao.IPAddressVO; | ||||
| @ -58,14 +57,15 @@ import com.cloud.utils.net.Ip; | ||||
| import com.cloud.vm.NicProfile; | ||||
| import com.cloud.vm.NicVO; | ||||
| import com.cloud.vm.VirtualMachine; | ||||
| import com.google.common.collect.Lists; | ||||
| 
 | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertNotNull; | ||||
| import static org.junit.Assert.assertNull; | ||||
| import static org.mockito.Matchers.anyLong; | ||||
| import static org.mockito.Matchers.anyString; | ||||
| import static org.mockito.Mockito.mock; | ||||
| import static org.mockito.Mockito.when; | ||||
| import net.nuage.vsp.acs.client.api.model.Protocol; | ||||
| import net.nuage.vsp.acs.client.api.model.VspAclRule; | ||||
| import net.nuage.vsp.acs.client.api.model.VspDomain; | ||||
| import net.nuage.vsp.acs.client.api.model.VspNetwork; | ||||
| import net.nuage.vsp.acs.client.api.model.VspNic; | ||||
| import net.nuage.vsp.acs.client.api.model.VspStaticNat; | ||||
| import net.nuage.vsp.acs.client.api.model.VspVm; | ||||
| 
 | ||||
| public class NuageVspEntityBuilderTest extends NuageTest { | ||||
| 
 | ||||
| @ -361,6 +361,7 @@ public class NuageVspEntityBuilderTest extends NuageTest { | ||||
|         when(_mockedStaticNatIp.getAddress()).thenReturn(new Ip("10.10.10.2")); | ||||
|         when(_mockedStaticNatIp.isOneToOneNat()).thenReturn(true); | ||||
|         when(_mockedStaticNatIp.getVmIp()).thenReturn("192.168.0.24"); | ||||
|         when(_mockedStaticNatIp.getState()).thenReturn(IpAddress.State.Allocated); | ||||
|     } | ||||
| 
 | ||||
|     private void setUpMockedStaticNatVlan() { | ||||
|  | ||||
| @ -481,7 +481,7 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc | ||||
|         @Override | ||||
|         protected void runInContext() { | ||||
|             try { | ||||
|                 s_logger.debug("HostOutOfBandManagementStatsCollector is running..."); | ||||
|                 s_logger.trace("HostOutOfBandManagementStatsCollector is running..."); | ||||
|                 List<OutOfBandManagementVO> outOfBandManagementHosts = outOfBandManagementDao.findAllByManagementServer(ManagementServerNode.getManagementServerId()); | ||||
|                 if (outOfBandManagementHosts == null) { | ||||
|                     return; | ||||
| @ -511,7 +511,7 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc | ||||
|         @Override | ||||
|         protected void runInContext() { | ||||
|             try { | ||||
|                 s_logger.debug("VmStatsCollector is running..."); | ||||
|                 s_logger.trace("VmStatsCollector is running..."); | ||||
| 
 | ||||
|                 SearchCriteria<HostVO> sc = _hostDao.createSearchCriteria(); | ||||
|                 sc.addAnd("status", SearchCriteria.Op.EQ, Status.Up.toString()); | ||||
|  | ||||
| @ -90,7 +90,7 @@ except-interface=lo | ||||
| # want dnsmasq to really bind only the interfaces it is listening on, | ||||
| # uncomment this option. About the only time you may need this is when | ||||
| # running another nameserver on the same machine. | ||||
| bind-interfaces | ||||
| #bind-interfaces | ||||
| 
 | ||||
| # If you don't want dnsmasq to read /etc/hosts, uncomment the | ||||
| # following line. | ||||
|  | ||||
| @ -1040,7 +1040,6 @@ class TestUpdateVMAffinityGroups(cloudstackTestCase): | ||||
|         for aff_grp in aff_grps: | ||||
|             aff_grp.delete(self.api_client) | ||||
| 
 | ||||
|     @unittest.skip("Skip - Failing - work in progress") | ||||
|     @attr(tags=["simulator", "basic", "advanced", "multihost", "NotRun"]) | ||||
|     def test_04_update_aff_grp_remove_all(self): | ||||
|         """ | ||||
| @ -1087,6 +1086,32 @@ class TestUpdateVMAffinityGroups(cloudstackTestCase): | ||||
|         for aff_grp in aff_grps: | ||||
|             aff_grp.delete(self.api_client) | ||||
| 
 | ||||
|     @attr(tags=["simulator", "basic", "advanced", "multihost", "NotRun"]) | ||||
|     def test_06_update_aff_grp_invalid_args(self): | ||||
|         """ | ||||
|             Update the list of Affinity Groups with either both args or none | ||||
|         """ | ||||
| 
 | ||||
|         self.create_aff_grp(aff_grp=self.services["host_anti_affinity"]) | ||||
|         self.create_aff_grp(aff_grp=self.services["host_anti_affinity"]) | ||||
|         vm1, hostid1 = self.create_vm_in_aff_grps([], account_name=self.account.name, domain_id=self.domain.id) | ||||
| 
 | ||||
|         aff_grps = [self.aff_grp[0], self.aff_grp[1]] | ||||
|         vm1.stop(self.api_client) | ||||
| 
 | ||||
|         with self.assertRaises(Exception): | ||||
|             vm1.update_affinity_group(self.api_client) | ||||
| 
 | ||||
|         with self.assertRaises(Exception): | ||||
|             vm1.update_affinity_group(self.api_client, affinitygroupids=[self.aff_grp[0].id], affinitygroupnames=[self.aff_grp[1].name]) | ||||
| 
 | ||||
|         vm1.update_affinity_group(self.api_client, affinitygroupids=[]) | ||||
| 
 | ||||
|         vm1.delete(self.api_client) | ||||
|         # Can cleanup affinity groups since none are set on the VM | ||||
|         for aff_grp in aff_grps: | ||||
|             aff_grp.delete(self.api_client) | ||||
| 
 | ||||
| class TestDeployVMAffinityGroups(cloudstackTestCase): | ||||
| 
 | ||||
|     @classmethod | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user