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

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

commit 7324ef45d4611d9362676eeb133efa839bfd1384
Merge: 53c98c33e60 a0f35a186d8
Author: Daan Hoogland <[email protected]>
AuthorDate: Mon Feb 9 13:05:08 2026 +0100

    Merge branch '4.20' into 4.22

 .../apache/cloudstack/backup/BackupManager.java    | 16 +++++++--
 .../framework/config/ValidatedConfigKey.java       | 38 ++++++++++++++++++++++
 .../configuration/ConfigurationManagerImpl.java    |  7 ++++
 .../cloudstack/backup/BackupManagerImpl.java       |  8 ++---
 4 files changed, 63 insertions(+), 6 deletions(-)

diff --cc api/src/main/java/org/apache/cloudstack/backup/BackupManager.java
index db051313d96,0090b4f6b16..29b97343281
--- a/api/src/main/java/org/apache/cloudstack/backup/BackupManager.java
+++ b/api/src/main/java/org/apache/cloudstack/backup/BackupManager.java
@@@ -28,15 -24,11 +28,16 @@@ import org.apache.cloudstack.api.comman
  import org.apache.cloudstack.api.command.user.backup.CreateBackupScheduleCmd;
  import org.apache.cloudstack.api.command.user.backup.DeleteBackupScheduleCmd;
  import org.apache.cloudstack.api.command.user.backup.ListBackupOfferingsCmd;
 +import org.apache.cloudstack.api.command.user.backup.ListBackupScheduleCmd;
  import org.apache.cloudstack.api.command.user.backup.ListBackupsCmd;
 +import org.apache.cloudstack.api.response.BackupResponse;
  import org.apache.cloudstack.framework.config.ConfigKey;
+ import org.apache.cloudstack.framework.config.ValidatedConfigKey;
  import org.apache.cloudstack.framework.config.Configurable;
  
 +import com.cloud.exception.ResourceUnavailableException;
 +import com.cloud.network.Network;
 +import com.cloud.storage.Volume;
  import com.cloud.utils.Pair;
  import com.cloud.utils.component.Manager;
  import com.cloud.utils.component.PluggableService;
@@@ -226,25 -149,15 +228,35 @@@ public interface BackupManager extends 
       */
      boolean deleteBackup(final Long backupId, final Boolean forced);
  
 +    void validateBackupForZone(Long zoneId);
 +
      BackupOffering updateBackupOffering(UpdateBackupOfferingCmd 
updateBackupOfferingCmd);
  
 +    VmDiskInfo getRootDiskInfoFromBackup(Backup backup);
 +
 +    List<VmDiskInfo> getDataDiskInfoListFromBackup(Backup backup);
 +
 +    void checkVmDisksSizeAgainstBackup(List<VmDiskInfo> vmDiskInfoList, 
Backup backup);
 +
 +    Map<String, String> getBackupDetailsFromVM(VirtualMachine vm);
 +
 +    String createVolumeInfoFromVolumes(List<Volume> vmVolumes);
 +
 +    String getBackupNameFromVM(VirtualMachine vm);
 +
 +    BackupResponse createBackupResponse(Backup backup, Boolean listVmDetails);
 +
 +    Capacity getBackupStorageUsedStats(Long zoneId);
 +
 +    void checkAndRemoveBackupOfferingBeforeExpunge(VirtualMachine vm);
++
+     static void validateBackupProviderConfig(String value) {
+         if (value != null && (value.contains(",") || value.trim().contains(" 
"))) {
+             throw new IllegalArgumentException("Multiple backup provider 
plugins are not supported. Please provide a single plugin value.");
+         }
+         List<String> validPlugins = List.of("dummy", "veeam", "networker", 
"nas");
+         if (value != null && !validPlugins.contains(value)) {
+             throw new IllegalArgumentException("Invalid backup provider 
plugin: " + value + ". Valid plugin values are: " + String.join(", ", 
validPlugins));
+         }
+     }
  }

Reply via email to