From 2752c49fa72a1bfa50b6886c2249d493a0e235a9 Mon Sep 17 00:00:00 2001 From: dahn Date: Fri, 7 Jul 2023 19:27:58 +0200 Subject: [PATCH 1/2] agent: get the right controll cidr (#7580) Fixes: #7574 --- .../java/com/cloud/agent/properties/AgentProperties.java | 7 +++++++ .../com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java | 5 +---- .../com/cloud/hypervisor/kvm/resource/IvsVifDriver.java | 6 +----- .../com/cloud/hypervisor/kvm/resource/OvsVifDriver.java | 5 +---- .../com/cloud/hypervisor/kvm/resource/VifDriverBase.java | 7 +++++++ 5 files changed, 17 insertions(+), 13 deletions(-) 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 9a031e001fa..5c7f4ed4b23 100644 --- a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java +++ b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java @@ -721,6 +721,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/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; From f0cc76a3a824fb4c34ce07230557c2c5107131fa Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 7 Jul 2023 23:00:25 +0530 Subject: [PATCH 2/2] vmware: fix unmanaged instance listing when different name & internal CS name (#7641) Currently, ACS can continue to show an imported instance/VM as an unmanaged instance if the name and internalCSName (custom attribute, cloud.vm.internal.name) is different for the instance/VM on vCenter. This PR while filtering managed instances from the instance list received from ESXi host also checks if the internal name for the instance is not in the managed instance names list. Signed-off-by: Abhishek Kumar --- .../api/GetUnmanagedInstancesCommand.java | 4 +++- .../vmware/resource/VmwareResource.java | 20 +++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) 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/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 aa26f63b3a9..8b833b8221a 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,12 +48,6 @@ import java.util.stream.Collectors; import javax.naming.ConfigurationException; import javax.xml.datatype.XMLGregorianCalendar; -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; @@ -66,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; @@ -137,6 +132,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; @@ -260,6 +257,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; @@ -274,6 +272,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; @@ -286,6 +286,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; @@ -7371,7 +7372,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