From 5ad3651f272dcc5e959b757ad81a4948993518f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yi=C4=9Fit=20Can=20Ba=C5=9Falma?= Date: Thu, 4 Jun 2026 00:00:03 +0300 Subject: [PATCH] Fix --- .../cloudstack/backup/BackupManager.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 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 07c32a7f8a5d..9b0503dc2ab1 100644 --- a/api/src/main/java/org/apache/cloudstack/backup/BackupManager.java +++ b/api/src/main/java/org/apache/cloudstack/backup/BackupManager.java @@ -19,6 +19,7 @@ import java.util.List; import java.util.Map; +import java.util.Arrays; import com.cloud.capacity.Capacity; import com.cloud.exception.ResourceAllocationException; @@ -57,9 +58,16 @@ public interface BackupManager extends BackupService, Configurable, PluggableSer ConfigKey BackupProviderPlugin = new ValidatedConfigKey<>("Advanced", String.class, "backup.framework.provider.plugin", "dummy", - "The backup and recovery provider plugin. Valid plugin values: dummy, veeam, networker and nas", + "The backup and recovery provider plugin. Default built-in plugins: dummy, veeam, networker, nas. Additional plugins can be allowed via backup.framework.provider.plugin.allowed setting.", true, ConfigKey.Scope.Zone, BackupFrameworkEnabled.key(), value -> validateBackupProviderConfig((String)value)); + ConfigKey AllowedBackupProviderPlugins = new ConfigKey<>( + "Advanced", String.class, + "backup.framework.provider.plugin.allowed", + "dummy,veeam,networker,nas", + "Comma-separated list of allowed backup provider plugins.", + true, ConfigKey.Scope.Zone); + ConfigKey BackupSyncPollingInterval = new ConfigKey<>("Advanced", Long.class, "backup.framework.sync.interval", "300", @@ -254,9 +262,14 @@ 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 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)); + String allowed = AllowedBackupProviderPlugins.value(); + if (allowed != null && value != null) { + List validPlugins = Arrays.asList(allowed.split(",")); + if (!validPlugins.contains(value.trim())) { + throw new IllegalArgumentException("Invalid backup provider plugin: " + value + + ". Valid plugin values are: " + allowed + + ". You can add more plugins via backup.framework.provider.plugin.allowed setting."); + } } } }