This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch 4.20
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.20 by this push:
     new 890386e9499 Allow custom NTP servers for CPVM (#11210)
890386e9499 is described below

commit 890386e9499f0e8582cb0af15db66ab709731457
Author: Pearl Dsilva <[email protected]>
AuthorDate: Fri Jul 25 09:21:06 2025 -0400

    Allow custom NTP servers for CPVM (#11210)
---
 engine/api/src/main/java/com/cloud/vm/VirtualMachineGuru.java       | 4 ++++
 .../main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java   | 6 +++++-
 .../cloudstack/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, 18 insertions(+), 8 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 f8032bf4b0e..76f0830f369 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.PasswordGenerator;
 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 @@ import java.util.Base64;
  */
 public interface VirtualMachineGuru {
 
+    static final ConfigKey<String> NTPServerConfig = new 
ConfigKey<String>(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 5baed2643c9..22cfe785edf 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 class ConsoleProxyManagerImpl extends ManagerBase 
implements ConsoleProxy
             buf.append(" 
vmpassword=").append(configurationDao.getValue("system.vm.password"));
         }
 
+        if (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) {
@@ -1506,7 +1510,7 @@ public class ConsoleProxyManagerImpl extends ManagerBase 
implements ConsoleProxy
     public Long[] getScannablePools() {
         List<Long> 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);
     }
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 25d43388b65..1c732de6a55 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<String> NTPServerConfig = new 
ConfigKey<String>(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<Integer> MaxNumberOfSsvmsForMigration = new 
ConfigKey<Integer>("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 class SecondaryStorageManagerImpl extends 
ManagerBase implements Secondar
             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 5156d77a6a6..85b78ee16ae 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 596ad50ab50..d35ac260712 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 c60f70c3cef..b8ed7b54311 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
 }

Reply via email to