diff --git a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java index 4af4ebed5e6..75248fb01bf 100644 --- a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java +++ b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java @@ -724,6 +724,13 @@ public class AgentProperties{ */ public static final Property IOTHREADS = new Property<>("iothreads", 1); + /** + * BGP controll CIDR + * Data type: String.
+ * Default value: 169.254.0.0/16 + */ + public static final Property CONTROL_CIDR = new Property<>("control.cidr", "169.254.0.0/16"); + public static class Property { private String name; private T defaultValue; diff --git a/core/src/main/java/com/cloud/agent/api/GetUnmanagedInstancesCommand.java b/core/src/main/java/com/cloud/agent/api/GetUnmanagedInstancesCommand.java index 968c58611bb..2cd80aebea1 100644 --- a/core/src/main/java/com/cloud/agent/api/GetUnmanagedInstancesCommand.java +++ b/core/src/main/java/com/cloud/agent/api/GetUnmanagedInstancesCommand.java @@ -19,6 +19,8 @@ package com.cloud.agent.api; import java.util.List; +import org.apache.commons.collections.CollectionUtils; + /** * Unmanaged instances are those virtual machines which are present at hypervisor end but not available in CloudStack. * Such virtual machines might have been created out of band, directly from hypervisor. @@ -56,7 +58,7 @@ public class GetUnmanagedInstancesCommand extends Command { } public boolean hasManagedInstance(String name) { - if (managedInstancesNames!=null && !managedInstancesNames.isEmpty()) { + if (CollectionUtils.isNotEmpty(managedInstancesNames)) { return managedInstancesNames.contains(name); } return false; diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java index 8d8271a2fbe..39ecc9182f0 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java @@ -65,10 +65,7 @@ public class BridgeVifDriver extends VifDriverBase { String networkScriptsDir = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.NETWORK_SCRIPTS_DIR); - String controlCidr = (String)params.get("control.cidr"); - if (StringUtils.isNotBlank(controlCidr)) { - _controlCidr = controlCidr; - } + _controlCidr = getControlCidr(_controlCidr); String value = (String)params.get("scripts.timeout"); _timeout = NumbersUtil.parseInt(value, 30 * 60) * 1000; diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java index c0dceb3832d..178728b7f96 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/IvsVifDriver.java @@ -26,7 +26,6 @@ import java.util.regex.Pattern; import javax.naming.ConfigurationException; -import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.libvirt.LibvirtException; @@ -71,10 +70,7 @@ public class IvsVifDriver extends VifDriverBase { } _ivsIfUpPath = Script.findScript(utilScriptsDir, "qemu-ivs-ifup"); - String controlCidr = (String)params.get("control.cidr"); - if (StringUtils.isNotBlank(controlCidr)) { - _controlCidr = controlCidr; - } + _controlCidr = getControlCidr(_controlCidr); } @Override diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java index c6867b3c146..3c4c9d48c9d 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java @@ -60,10 +60,7 @@ public class OvsVifDriver extends VifDriverBase { dpdkDriver = new DpdkDriverImpl(); } - String controlCidr = (String)params.get("control.cidr"); - if (StringUtils.isNotBlank(controlCidr)) { - _controlCidr = controlCidr; - } + _controlCidr = getControlCidr(_controlCidr); String value = (String)params.get("scripts.timeout"); _timeout = NumbersUtil.parseInt(value, 30 * 60) * 1000; diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VifDriverBase.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VifDriverBase.java index 77aeec55459..b3ae4c1d704 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VifDriverBase.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/VifDriverBase.java @@ -23,6 +23,8 @@ import java.util.Map; import javax.naming.ConfigurationException; +import com.cloud.agent.properties.AgentProperties; +import com.cloud.agent.properties.AgentPropertiesFileHandler; import org.libvirt.LibvirtException; import com.cloud.agent.api.to.NicTO; @@ -41,6 +43,11 @@ public abstract class VifDriverBase implements VifDriver { _pifs = (Map)params.get("libvirt.host.pifs"); } + protected String getControlCidr(String defaultValue) { + String controlCidr = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.CONTROL_CIDR); + return controlCidr; + } + @Override public abstract LibvirtVMDef.InterfaceDef plug(NicTO nic, String guestOsType, String nicAdapter, Map extraConfig) throws InternalErrorException, LibvirtException; diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 222d3ffb2ee..90bfdd6793c 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -38,6 +38,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Random; import java.util.Set; import java.util.TimeZone; @@ -47,16 +48,6 @@ import java.util.stream.Collectors; import javax.naming.ConfigurationException; import javax.xml.datatype.XMLGregorianCalendar; -import com.cloud.agent.api.CheckGuestOsMappingAnswer; -import com.cloud.agent.api.CheckGuestOsMappingCommand; -import com.cloud.agent.api.GetHypervisorGuestOsNamesAnswer; -import com.cloud.agent.api.GetHypervisorGuestOsNamesCommand; -import com.cloud.agent.api.PatchSystemVmAnswer; -import com.cloud.agent.api.PatchSystemVmCommand; -import com.cloud.resource.ServerResourceBase; -import com.cloud.utils.FileUtil; -import com.cloud.utils.LogUtils; -import com.cloud.utils.validation.ChecksumUtil; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.storage.command.CopyCommand; import org.apache.cloudstack.storage.command.StorageSubSystemCommand; @@ -70,8 +61,8 @@ import org.apache.cloudstack.vm.UnmanagedInstanceTO; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.apache.log4j.NDC; import org.joda.time.Duration; @@ -82,6 +73,8 @@ import com.cloud.agent.api.AttachIsoAnswer; import com.cloud.agent.api.AttachIsoCommand; import com.cloud.agent.api.BackupSnapshotAnswer; import com.cloud.agent.api.BackupSnapshotCommand; +import com.cloud.agent.api.CheckGuestOsMappingAnswer; +import com.cloud.agent.api.CheckGuestOsMappingCommand; import com.cloud.agent.api.CheckHealthAnswer; import com.cloud.agent.api.CheckHealthCommand; import com.cloud.agent.api.CheckNetworkAnswer; @@ -103,6 +96,8 @@ import com.cloud.agent.api.DeleteVMSnapshotAnswer; import com.cloud.agent.api.DeleteVMSnapshotCommand; import com.cloud.agent.api.GetHostStatsAnswer; import com.cloud.agent.api.GetHostStatsCommand; +import com.cloud.agent.api.GetHypervisorGuestOsNamesAnswer; +import com.cloud.agent.api.GetHypervisorGuestOsNamesCommand; import com.cloud.agent.api.GetStoragePoolCapabilitiesAnswer; import com.cloud.agent.api.GetStoragePoolCapabilitiesCommand; import com.cloud.agent.api.GetStorageStatsAnswer; @@ -141,6 +136,8 @@ import com.cloud.agent.api.ModifyTargetsAnswer; import com.cloud.agent.api.ModifyTargetsCommand; import com.cloud.agent.api.NetworkUsageAnswer; import com.cloud.agent.api.NetworkUsageCommand; +import com.cloud.agent.api.PatchSystemVmAnswer; +import com.cloud.agent.api.PatchSystemVmCommand; import com.cloud.agent.api.PingCommand; import com.cloud.agent.api.PingRoutingCommand; import com.cloud.agent.api.PingTestCommand; @@ -264,6 +261,7 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.network.VmwareTrafficLabel; import com.cloud.network.router.VirtualRouterAutoScale; import com.cloud.resource.ServerResource; +import com.cloud.resource.ServerResourceBase; import com.cloud.serializer.GsonHelper; import com.cloud.storage.Storage; import com.cloud.storage.Storage.StoragePoolType; @@ -278,6 +276,8 @@ import com.cloud.storage.template.TemplateProp; import com.cloud.template.TemplateManager; import com.cloud.utils.DateUtil; import com.cloud.utils.ExecutionResult; +import com.cloud.utils.FileUtil; +import com.cloud.utils.LogUtils; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; @@ -290,6 +290,7 @@ import com.cloud.utils.net.NetUtils; import com.cloud.utils.nicira.nvp.plugin.NiciraNvpApiVersion; import com.cloud.utils.script.Script; import com.cloud.utils.ssh.SshHelper; +import com.cloud.utils.validation.ChecksumUtil; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.PowerState; import com.cloud.vm.VirtualMachineName; @@ -7380,7 +7381,10 @@ public class VmwareResource extends ServerResourceBase implements StoragePoolRes continue; } // Filter managed instances - if (cmd.hasManagedInstance(vmMo.getName())) { + if (cmd.hasManagedInstance(vmMo.getName()) || + (StringUtils.isNotEmpty(vmMo.getInternalCSName()) + && Objects.equals(vmMo.getName(), vmMo.getInternalCSName()) + && cmd.hasManagedInstance(vmMo.getInternalCSName()))) { continue; } // Filter instance if answer is requested for a particular instance name