From 78e146278b332bf1ac11d3b2324e0e65debc1e18 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 8 Aug 2025 12:36:18 +0200 Subject: [PATCH 01/43] api: fix scale or upgrade systemvm (#11062) --- .../cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java | 2 +- .../api/command/admin/systemvm/UpgradeSystemVMCmd.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java index f694988efa0..264806f0350 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/ScaleSystemVMCmd.java @@ -76,7 +76,7 @@ public class ScaleSystemVMCmd extends BaseAsyncCmd { } public Map getDetails() { - return details; + return convertDetailsToMap(details); } ///////////////////////////////////////////////////// diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java index 12f80f32b06..95d9ab562bf 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java @@ -70,7 +70,7 @@ public class UpgradeSystemVMCmd extends BaseCmd { } public Map getDetails() { - return details; + return convertDetailsToMap(details); } ///////////////////////////////////////////////////// From 26218b093ea0760e6285ac3e83ce597371ec7c43 Mon Sep 17 00:00:00 2001 From: Vishesh Date: Mon, 11 Aug 2025 16:23:59 +0530 Subject: [PATCH 02/43] Fix edit of compute offering in UI (#11417) --- ui/src/config/section/offering.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/config/section/offering.js b/ui/src/config/section/offering.js index 7bdd992039c..e8016cae0df 100644 --- a/ui/src/config/section/offering.js +++ b/ui/src/config/section/offering.js @@ -96,7 +96,7 @@ export default { label: 'label.edit', docHelp: 'adminguide/service_offerings.html#modifying-or-deleting-a-service-offering', dataView: true, - args: ['name', 'displaytext', 'storageatags', 'hosttags', 'externaldetails'], + args: ['name', 'displaytext', 'storagetags', 'hosttags', 'externaldetails'], mapping: { externaldetails: { transformedvalue: (record) => { return getFilteredExternalDetails(record.serviceofferingdetails) } From 53b026487fba94a016387e9a7b6e68e2725663f5 Mon Sep 17 00:00:00 2001 From: Nicolas Vazquez Date: Mon, 11 Aug 2025 08:10:44 -0300 Subject: [PATCH 03/43] UI: Fix duplicate edit zone button on Basic zones (#11427) --- ui/src/config/section/infra/zones.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/src/config/section/infra/zones.js b/ui/src/config/section/infra/zones.js index c957f885469..61aef1706c0 100644 --- a/ui/src/config/section/infra/zones.js +++ b/ui/src/config/section/infra/zones.js @@ -119,6 +119,7 @@ export default { label: 'label.action.edit.zone', dataView: true, popup: true, + show: (record) => { return record.networktype === 'Advanced' }, component: shallowRef(defineAsyncComponent(() => import('@/views/infra/ZoneUpdate.vue'))) }, { From 1994511f0c9de1324d4ca7a9f0a945cd53c808f7 Mon Sep 17 00:00:00 2001 From: Vishesh Date: Mon, 11 Aug 2025 17:59:26 +0530 Subject: [PATCH 04/43] noVNC: Show a dot cursor when the cursor is not visible (#11418) --- .../cloudstack/consoleproxy/ConsoleAccessManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/apache/cloudstack/consoleproxy/ConsoleAccessManagerImpl.java b/server/src/main/java/org/apache/cloudstack/consoleproxy/ConsoleAccessManagerImpl.java index 306023a2263..2edb6bab001 100644 --- a/server/src/main/java/org/apache/cloudstack/consoleproxy/ConsoleAccessManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/consoleproxy/ConsoleAccessManagerImpl.java @@ -516,7 +516,7 @@ public class ConsoleAccessManagerImpl extends ManagerBase implements ConsoleAcce sb.append("/ajax?token=" + token); } else { sb.append("/resource/noVNC/vnc.html") - .append("?autoconnect=true") + .append("?autoconnect=true&show_dot=true") .append("&port=" + vncPort) .append("&token=" + token); if (requiresVncOverWebSocketConnection(vm, hostVo) && details != null && details.getValue() != null) { From e57e8cf4189b60bb0d031e149648452689031bab Mon Sep 17 00:00:00 2001 From: Ruben Bosch <8641284+Rubueno@users.noreply.github.com> Date: Mon, 11 Aug 2025 16:41:36 +0200 Subject: [PATCH 05/43] Network rate must be multiplied by 125 not 128 (#10645) * Network rate must be multiplied by 125 not 128 In a libvirt domain xml when nw_rate=5000 the kilobytes per second configured in the interface is 640000 which is 5.12 Gbit/s. Which is more than the configured network rate of 5Gbit/s. So instead multiply by 125. * Apply suggestions from code review Co-authored-by: Suresh Kumar Anaparti --- .../cloud/hypervisor/kvm/resource/BridgeVifDriver.java | 2 +- .../cloud/hypervisor/kvm/resource/DirectVifDriver.java | 4 ++-- .../com/cloud/hypervisor/kvm/resource/IvsVifDriver.java | 2 +- .../com/cloud/hypervisor/kvm/resource/OvsVifDriver.java | 4 ++-- .../com/cloud/hypervisor/kvm/resource/VifDriverBase.java | 9 +++++++++ 5 files changed, 15 insertions(+), 6 deletions(-) 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 10012fba658..98107c8609e 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 @@ -211,7 +211,7 @@ public class BridgeVifDriver extends VifDriverBase { String trafficLabel = nic.getName(); Integer networkRateKBps = 0; if (libvirtVersion > ((10 * 1000 + 10))) { - networkRateKBps = (nic.getNetworkRateMbps() != null && nic.getNetworkRateMbps().intValue() != -1) ? nic.getNetworkRateMbps().intValue() * 128 : 0; + networkRateKBps = getNetworkRateKbps(nic); } if (nic.getType() == Networks.TrafficType.Guest) { diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java index 71afc940932..580621b39a7 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java @@ -30,7 +30,6 @@ import java.util.Map; public class DirectVifDriver extends VifDriverBase { - /** * Experimental driver to configure direct networking in libvirt. This should only * be used on an LXC cluster that does not run any system VMs. @@ -42,13 +41,14 @@ public class DirectVifDriver extends VifDriverBase { * @throws InternalErrorException * @throws LibvirtException */ + @Override public LibvirtVMDef.InterfaceDef plug(NicTO nic, String guestOsType, String nicAdapter, Map extraConfig) throws InternalErrorException, LibvirtException { LibvirtVMDef.InterfaceDef intf = new LibvirtVMDef.InterfaceDef(); if (Sets.newHashSet(Networks.TrafficType.Guest, Networks.TrafficType.Public).contains(nic.getType())) { - Integer networkRateKBps = (nic.getNetworkRateMbps() != null && nic.getNetworkRateMbps().intValue() != -1) ? nic.getNetworkRateMbps().intValue() * 128 : 0; + Integer networkRateKBps = getNetworkRateKbps(nic); intf.defDirectNet(_libvirtComputingResource.getNetworkDirectDevice(), null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter), _libvirtComputingResource.getNetworkDirectSourceMode(), networkRateKBps); } 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 2386e7d2d59..bbe87aa1373 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 @@ -93,7 +93,7 @@ public class IvsVifDriver extends VifDriverBase { vlanId = NetUtils.getPrimaryPvlanFromUri(nic.getBroadcastUri()); } String trafficLabel = nic.getName(); - Integer networkRateKBps = (nic.getNetworkRateMbps() != null && nic.getNetworkRateMbps().intValue() != -1) ? nic.getNetworkRateMbps().intValue() * 128 : 0; + Integer networkRateKBps = getNetworkRateKbps(nic); if (nic.getType() == Networks.TrafficType.Guest) { if ((nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan || nic.getBroadcastType() == Networks.BroadcastDomainType.Pvlan) && !vlanId.equalsIgnoreCase("untagged")) { 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 e3ce9f4b8a6..4c0482c5384 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 @@ -130,7 +130,7 @@ public class OvsVifDriver extends VifDriverBase { } String trafficLabel = nic.getName(); if (nic.getType() == Networks.TrafficType.Guest) { - Integer networkRateKBps = (nic.getNetworkRateMbps() != null && nic.getNetworkRateMbps().intValue() != -1) ? nic.getNetworkRateMbps().intValue() * 128 : 0; + Integer networkRateKBps = getNetworkRateKbps(nic); if ((nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan || nic.getBroadcastType() == Networks.BroadcastDomainType.Pvlan) && !vlanId.equalsIgnoreCase("untagged")) { if (trafficLabel != null && !trafficLabel.isEmpty()) { @@ -162,7 +162,7 @@ public class OvsVifDriver extends VifDriverBase { createControlNetwork(_bridges.get("linklocal")); intf.defBridgeNet(_bridges.get("linklocal"), null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter)); } else if (nic.getType() == Networks.TrafficType.Public) { - Integer networkRateKBps = (nic.getNetworkRateMbps() != null && nic.getNetworkRateMbps().intValue() != -1) ? nic.getNetworkRateMbps().intValue() * 128 : 0; + Integer networkRateKBps = getNetworkRateKbps(nic); if (nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan && !vlanId.equalsIgnoreCase("untagged")) { if (trafficLabel != null && !trafficLabel.isEmpty()) { logger.debug("creating a vlan dev and bridge for public traffic per traffic label " + trafficLabel); 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 c227ca69453..2ad2b8a6d4c 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 @@ -40,6 +40,8 @@ public abstract class VifDriverBase implements VifDriver { protected Map _pifs; protected Map _bridges; + protected static final int bitsPerMbpsToKbps = 125; + @Override public void configure(Map params) throws ConfigurationException { _libvirtComputingResource = (LibvirtComputingResource)params.get("libvirt.computing.resource"); @@ -78,4 +80,11 @@ public abstract class VifDriverBase implements VifDriver { public boolean isExistingBridge(String bridgeName) { return false; } + + protected static int getNetworkRateKbps(NicTO nic) { + if (nic.getNetworkRateMbps() != null && nic.getNetworkRateMbps().intValue() != -1) { + return nic.getNetworkRateMbps().intValue() * bitsPerMbpsToKbps; + } + return 0; + } } From f5b4858012b41993f97b3a762397b5b7e6e0de3e Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Mon, 11 Aug 2025 20:41:57 +0530 Subject: [PATCH 06/43] ui: make vpc cidr required when not showing cidrsize (#11393) Fixes #11391 Signed-off-by: Abhishek Kumar --- ui/src/views/network/CreateVpc.vue | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/ui/src/views/network/CreateVpc.vue b/ui/src/views/network/CreateVpc.vue index d239d04e143..272d989124e 100644 --- a/ui/src/views/network/CreateVpc.vue +++ b/ui/src/views/network/CreateVpc.vue @@ -72,7 +72,7 @@ :placeholder="apiParams.cidr.description"/>