Skip to content

Commit 20e9980

Browse files
yigitbasalmaYiğit Can Başalma
andauthored
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>
1 parent ba837fb commit 20e9980

2 files changed

Lines changed: 11 additions & 17 deletions

File tree

api/src/main/java/org/apache/cloudstack/backup/BackupManager.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.apache.cloudstack.api.command.user.backup.ListBackupsCmd;
3434
import org.apache.cloudstack.api.response.BackupResponse;
3535
import org.apache.cloudstack.framework.config.ConfigKey;
36-
import org.apache.cloudstack.framework.config.ValidatedConfigKey;
3736
import org.apache.cloudstack.framework.config.Configurable;
3837

3938
import com.cloud.exception.ResourceUnavailableException;
@@ -55,11 +54,11 @@ public interface BackupManager extends BackupService, Configurable, PluggableSer
5554
"false",
5655
"Is backup and recovery framework enabled.", false, ConfigKey.Scope.Zone);
5756

58-
ConfigKey<String> BackupProviderPlugin = new ValidatedConfigKey<>("Advanced", String.class,
57+
ConfigKey<String> BackupProviderPlugin = new ConfigKey<>("Advanced", String.class,
5958
"backup.framework.provider.plugin",
6059
"dummy",
61-
"The backup and recovery provider plugin. Valid plugin values: dummy, veeam, networker and nas",
62-
true, ConfigKey.Scope.Zone, BackupFrameworkEnabled.key(), value -> validateBackupProviderConfig((String)value));
60+
"The backup and recovery provider plugin.",
61+
true, ConfigKey.Scope.Zone, BackupFrameworkEnabled.key());
6362

6463
ConfigKey<Long> BackupSyncPollingInterval = new ConfigKey<>("Advanced", Long.class,
6564
"backup.framework.sync.interval",
@@ -258,14 +257,4 @@ public interface BackupManager extends BackupService, Configurable, PluggableSer
258257
Capacity getBackupStorageUsedStats(Long zoneId);
259258

260259
void checkAndRemoveBackupOfferingBeforeExpunge(VirtualMachine vm);
261-
262-
static void validateBackupProviderConfig(String value) {
263-
if (value != null && (value.contains(",") || value.trim().contains(" "))) {
264-
throw new IllegalArgumentException("Multiple backup provider plugins are not supported. Please provide a single plugin value.");
265-
}
266-
List<String> validPlugins = List.of("dummy", "veeam", "networker", "nas");
267-
if (value != null && !validPlugins.contains(value)) {
268-
throw new IllegalArgumentException("Invalid backup provider plugin: " + value + ". Valid plugin values are: " + String.join(", ", validPlugins));
269-
}
270-
}
271260
}

server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2507,9 +2507,14 @@ public CapacityVO getBackupStorageUsedStats(Long zoneId) {
25072507
if (isDisabled(zoneId)) {
25082508
return new CapacityVO(null, zoneId, null, null, 0L, 0L, Capacity.CAPACITY_TYPE_BACKUP_STORAGE);
25092509
}
2510-
final BackupProvider backupProvider = getBackupProvider(zoneId);
2511-
Pair<Long, Long> backupUsage = backupProvider.getBackupStorageStats(zoneId);
2512-
return new CapacityVO(null, zoneId, null, null, backupUsage.first(), backupUsage.second(), Capacity.CAPACITY_TYPE_BACKUP_STORAGE);
2510+
try {
2511+
final BackupProvider backupProvider = getBackupProvider(zoneId);
2512+
Pair<Long, Long> backupUsage = backupProvider.getBackupStorageStats(zoneId);
2513+
return new CapacityVO(null, zoneId, null, null, backupUsage.first(), backupUsage.second(), Capacity.CAPACITY_TYPE_BACKUP_STORAGE);
2514+
} catch (CloudRuntimeException e) {
2515+
logger.warn("Backup provider not found for zone {}: {}", zoneId, e.getMessage());
2516+
return new CapacityVO(null, zoneId, null, null, 0L, 0L, Capacity.CAPACITY_TYPE_BACKUP_STORAGE);
2517+
}
25132518
}
25142519

25152520
@Override

0 commit comments

Comments
 (0)