From a23b06bef71a7c82f2c043afc8e64e33055f0df4 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Thu, 17 Jul 2025 11:31:31 -0400 Subject: [PATCH 1/2] Allow ntp config on cpvm --- .../api/src/main/java/com/cloud/vm/VirtualMachineGuru.java | 4 ++++ .../com/cloud/consoleproxy/ConsoleProxyManagerImpl.java | 4 ++++ .../secondarystorage/SecondaryStorageManagerImpl.java | 5 +---- systemvm/debian/opt/cloud/bin/setup/common.sh | 6 +++--- systemvm/debian/opt/cloud/bin/setup/consoleproxy.sh | 4 ++++ systemvm/debian/opt/cloud/bin/setup/secstorage.sh | 1 + 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/engine/api/src/main/java/com/cloud/vm/VirtualMachineGuru.java b/engine/api/src/main/java/com/cloud/vm/VirtualMachineGuru.java index f8032bf4b0e7..76f0830f369e 100644 --- a/engine/api/src/main/java/com/cloud/vm/VirtualMachineGuru.java +++ b/engine/api/src/main/java/com/cloud/vm/VirtualMachineGuru.java @@ -24,6 +24,7 @@ import com.cloud.utils.exception.CloudRuntimeException; import org.apache.cloudstack.ca.CAManager; import org.apache.cloudstack.framework.ca.Certificate; +import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.utils.security.CertUtils; import org.apache.cloudstack.utils.security.KeyStoreUtils; @@ -37,6 +38,9 @@ */ public interface VirtualMachineGuru { + static final ConfigKey NTPServerConfig = new ConfigKey(String.class, "ntp.server.list", "Advanced", null, + "Comma separated list of NTP servers to configure in System VMs", true, ConfigKey.Scope.Global, null, null, null, null, null, ConfigKey.Kind.CSV, null); + boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context); /** diff --git a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 5baed2643c93..b6ae11e719f8 100644 --- a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -1276,6 +1276,10 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl buf.append(" vmpassword=").append(configurationDao.getValue("system.vm.password")); } + if (org.apache.commons.lang3.StringUtils.isNotEmpty(NTPServerConfig.value())) { + buf.append(" ntpserverlist=").append(NTPServerConfig.value().replaceAll("\\s+","")); + } + for (NicProfile nic : profile.getNics()) { int deviceId = nic.getDeviceId(); if (nic.getIPv4Address() == null) { diff --git a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java index 25d43388b659..1c732de6a557 100644 --- a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java +++ b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java @@ -268,9 +268,6 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar private final GlobalLock _allocLock = GlobalLock.getInternLock(getAllocLockName()); - static final ConfigKey NTPServerConfig = new ConfigKey(String.class, "ntp.server.list", "Advanced", null, - "Comma separated list of NTP servers to configure in Secondary storage VM", true, ConfigKey.Scope.Global, null, null, null, null, null, ConfigKey.Kind.CSV, null); - static final ConfigKey MaxNumberOfSsvmsForMigration = new ConfigKey("Advanced", Integer.class, "max.ssvm.count", "5", "Number of additional SSVMs to handle migration of data objects concurrently", true, ConfigKey.Scope.Global); @@ -1178,7 +1175,7 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl buf.append(" vmpassword=").append(_configDao.getValue("system.vm.password")); } - if (NTPServerConfig.value() != null) { + if (StringUtils.isNotEmpty(NTPServerConfig.value())) { buf.append(" ntpserverlist=").append(NTPServerConfig.value().replaceAll("\\s+","")); } diff --git a/systemvm/debian/opt/cloud/bin/setup/common.sh b/systemvm/debian/opt/cloud/bin/setup/common.sh index 5156d77a6a62..85b78ee16aee 100755 --- a/systemvm/debian/opt/cloud/bin/setup/common.sh +++ b/systemvm/debian/opt/cloud/bin/setup/common.sh @@ -683,7 +683,7 @@ getPublicIp() { setup_ntp() { log_it "Setting up NTP" - NTP_CONF_FILE="/etc/ntp.conf" + NTP_CONF_FILE="/etc/ntpsec/ntp.conf" if [ -f $NTP_CONF_FILE ] then IFS=',' read -a server_list <<< "$NTP_SERVER_LIST" @@ -692,9 +692,9 @@ setup_ntp() { do server=$(echo ${server_list[iterator]} | tr -d '\r') PATTERN="server $server" - sed -i "0,/^#server/s//$PATTERN\n#server/" $NTP_CONF_FILE + sed -i "0,/^# server/s//$PATTERN\n# server/" $NTP_CONF_FILE done - systemctl enable ntp + systemctl enable --now --no-block ntp else log_it "NTP configuration file not found" fi diff --git a/systemvm/debian/opt/cloud/bin/setup/consoleproxy.sh b/systemvm/debian/opt/cloud/bin/setup/consoleproxy.sh index 596ad50ab500..d35ac260712d 100755 --- a/systemvm/debian/opt/cloud/bin/setup/consoleproxy.sh +++ b/systemvm/debian/opt/cloud/bin/setup/consoleproxy.sh @@ -40,6 +40,10 @@ setup_console_proxy() { disable_rpfilter enable_fwding 0 enable_irqbalance 0 + if [[ -n "$NTP_SERVER_LIST" ]]; then + setup_ntp + systemctl restart ntp + fi rm -f /etc/logrotate.d/cloud } diff --git a/systemvm/debian/opt/cloud/bin/setup/secstorage.sh b/systemvm/debian/opt/cloud/bin/setup/secstorage.sh index c60f70c3cef2..b8ed7b543119 100755 --- a/systemvm/debian/opt/cloud/bin/setup/secstorage.sh +++ b/systemvm/debian/opt/cloud/bin/setup/secstorage.sh @@ -82,6 +82,7 @@ HTTP enable_fwding 0 enable_irqbalance 0 setup_ntp + systemctl restart ntp rm -f /etc/logrotate.d/cloud } From be2c0dd012349c4d36b05b54d4b143e2a73eb9a8 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Wed, 23 Jul 2025 17:15:19 -0400 Subject: [PATCH 2/2] remove ref to org.apache.commons.lang3.StringUtils --- .../java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index b6ae11e719f8..22cfe785edf2 100644 --- a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -1276,7 +1276,7 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl buf.append(" vmpassword=").append(configurationDao.getValue("system.vm.password")); } - if (org.apache.commons.lang3.StringUtils.isNotEmpty(NTPServerConfig.value())) { + if (StringUtils.isNotEmpty(NTPServerConfig.value())) { buf.append(" ntpserverlist=").append(NTPServerConfig.value().replaceAll("\\s+","")); } @@ -1510,7 +1510,7 @@ public boolean canScan() { public Long[] getScannablePools() { List zoneIds = dataCenterDao.listEnabledNonEdgeZoneIds(); if (logger.isDebugEnabled()) { - logger.debug(String.format("Enabled non-edge zones available for scan: %s", org.apache.commons.lang3.StringUtils.join(zoneIds, ","))); + logger.debug(String.format("Enabled non-edge zones available for scan: %s", StringUtils.join(zoneIds, ","))); } return zoneIds.toArray(Long[]::new); }