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

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


The following commit(s) were added to refs/heads/main by this push:
     new 20e9980b60a backup: allow third-party backup provider plugins in 
configuration (#13332)
20e9980b60a is described below

commit 20e9980b60a5b646a6f73f85d72dd42efe2d82ec
Author: Yiğit can BAŞALMA <[email protected]>
AuthorDate: Fri Jul 10 09:22:35 2026 +0300

    backup: allow third-party backup provider plugins in configuration (#13332)
    
    * Fix
    
    * fix: validate backup provider plugin via Spring bean instead of allowed 
list
    
    * fix: unused import error
    
    * fix: handle missing backup provider gracefully to prevent dashboard 
failure
    
    * fix: handle missing backup provider gracefully in 
getBackupStorageUsedStats
    
    ---------
    
    Co-authored-by: Yiğit Can Başalma <yigit.basalma@local>
---
 .../org/apache/cloudstack/backup/BackupManager.java     | 17 +++--------------
 .../org/apache/cloudstack/backup/BackupManagerImpl.java | 11 ++++++++---
 2 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/api/src/main/java/org/apache/cloudstack/backup/BackupManager.java 
b/api/src/main/java/org/apache/cloudstack/backup/BackupManager.java
index 0da11bbd651..3d520f30626 100644
--- a/api/src/main/java/org/apache/cloudstack/backup/BackupManager.java
+++ b/api/src/main/java/org/apache/cloudstack/backup/BackupManager.java
@@ -33,7 +33,6 @@ 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;
@@ -55,11 +54,11 @@ public interface BackupManager extends BackupService, 
Configurable, PluggableSer
             "false",
             "Is backup and recovery framework enabled.", false, 
ConfigKey.Scope.Zone);
 
-    ConfigKey<String> BackupProviderPlugin = new 
ValidatedConfigKey<>("Advanced", String.class,
+    ConfigKey<String> BackupProviderPlugin = new ConfigKey<>("Advanced", 
String.class,
             "backup.framework.provider.plugin",
             "dummy",
-            "The backup and recovery provider plugin. Valid plugin values: 
dummy, veeam, networker and nas",
-            true, ConfigKey.Scope.Zone, BackupFrameworkEnabled.key(), value -> 
validateBackupProviderConfig((String)value));
+            "The backup and recovery provider plugin.",
+            true, ConfigKey.Scope.Zone, BackupFrameworkEnabled.key());
 
     ConfigKey<Long> BackupSyncPollingInterval = new ConfigKey<>("Advanced", 
Long.class,
             "backup.framework.sync.interval",
@@ -258,14 +257,4 @@ public interface BackupManager extends BackupService, 
Configurable, PluggableSer
     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));
-        }
-    }
 }
diff --git 
a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java 
b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java
index 0636ffdc3c1..ed3d8558cc5 100644
--- a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java
@@ -2507,9 +2507,14 @@ public class BackupManagerImpl extends ManagerBase 
implements BackupManager {
         if (isDisabled(zoneId)) {
             return new CapacityVO(null, zoneId, null, null, 0L, 0L, 
Capacity.CAPACITY_TYPE_BACKUP_STORAGE);
         }
-        final BackupProvider backupProvider = getBackupProvider(zoneId);
-        Pair<Long, Long> backupUsage = 
backupProvider.getBackupStorageStats(zoneId);
-        return new CapacityVO(null, zoneId, null, null, backupUsage.first(), 
backupUsage.second(), Capacity.CAPACITY_TYPE_BACKUP_STORAGE);
+        try {
+            final BackupProvider backupProvider = getBackupProvider(zoneId);
+            Pair<Long, Long> backupUsage = 
backupProvider.getBackupStorageStats(zoneId);
+            return new CapacityVO(null, zoneId, null, null, 
backupUsage.first(), backupUsage.second(), 
Capacity.CAPACITY_TYPE_BACKUP_STORAGE);
+        } catch (CloudRuntimeException e) {
+            logger.warn("Backup provider not found for zone {}: {}", zoneId, 
e.getMessage());
+            return new CapacityVO(null, zoneId, null, null, 0L, 0L, 
Capacity.CAPACITY_TYPE_BACKUP_STORAGE);
+        }
     }
 
     @Override

Reply via email to