diff --git a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java index 29d3f88fd902..9dd94a97d642 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java @@ -246,4 +246,9 @@ public String getActualValue(ResourceDetail resourceDetail) { } return resourceDetail.getValue(); } + + public boolean doesKeyValuePairExist(String key, String value) { + List details = findDetails(key, value, null); + return CollectionUtils.isNotEmpty(details); + } } diff --git a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java index 00cf56345c8d..030cf3179adf 100644 --- a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java +++ b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java @@ -277,4 +277,10 @@ protected T valueOf(String value) { } } + public boolean hasValueInScope(String value) { + if (value != null && s_depot != null) { + return s_depot.doesConfigKeyAndValueExistInScope(_name, value, _scope); + } + return false; + } } diff --git a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ScopedConfigStorage.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ScopedConfigStorage.java index 8126b9510a27..d0b722b7df27 100644 --- a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ScopedConfigStorage.java +++ b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ScopedConfigStorage.java @@ -31,4 +31,10 @@ public interface ScopedConfigStorage { default String getConfigValue(long id, ConfigKey key) { return getConfigValue(id, key.key()); } + + boolean doesKeyValuePairExist(String key, String value); + + default boolean doesConfigKeyAndValueExist(String key, String value) { + return doesKeyValuePairExist(key, value); + } } diff --git a/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java index 8b8b63685274..adc7cb9345a4 100644 --- a/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java +++ b/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java @@ -296,6 +296,27 @@ protected String getConfigStringValueInternal(Ternary getConfigCacheKey(String key, ConfigKey.Scope scope, Long scopeId) { return new Ternary<>(key, scope, scopeId); } 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 1e6ef1a7852b..7cba74b6f40f 100644 --- a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java @@ -947,7 +947,7 @@ public boolean configure(String name, Map params) throws Configu } public boolean isDisabled(final Long zoneId) { - return !(BackupFrameworkEnabled.value() && BackupFrameworkEnabled.valueIn(zoneId)); + return !(BackupFrameworkEnabled.valueIn(zoneId)); } private void validateForZone(final Long zoneId) { @@ -980,7 +980,7 @@ public BackupProvider getBackupProvider(final String name) { @Override public List> getCommands() { final List> cmdList = new ArrayList>(); - if (!BackupFrameworkEnabled.value()) { + if (!BackupFrameworkEnabled.value() && !BackupFrameworkEnabled.hasValueInScope(Boolean.TRUE.toString())) { return cmdList; }