This is an automated email from the ASF dual-hosted git repository. rohit pushed a commit to branch 4.14 in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.14 by this push: new db9f825 server: don't export B&R APIs if feature is not enabled globally (#4202) db9f825 is described below commit db9f8258d7a8eff283ff055fb11bca41d1bfc94e Author: Rohit Yadav <rohit.ya...@shapeblue.com> AuthorDate: Tue Jul 7 18:29:44 2020 +0530 server: don't export B&R APIs if feature is not enabled globally (#4202) This change will ensure that B&R APIs are not exported if the feature is not enabled in any of the zones. Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com> --- .../apache/cloudstack/backup/BackupManager.java | 2 +- developer/developer-prefill.sql | 9 +++++++-- .../cloudstack/backup/BackupManagerImpl.java | 6 +++++- .../smoke/test_backup_recovery_dummy.py | 22 ++++++++++++++-------- 4 files changed, 27 insertions(+), 12 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 7c9d3b6..5751125 100644 --- a/api/src/main/java/org/apache/cloudstack/backup/BackupManager.java +++ b/api/src/main/java/org/apache/cloudstack/backup/BackupManager.java @@ -38,7 +38,7 @@ public interface BackupManager extends BackupService, Configurable, PluggableSer ConfigKey<Boolean> BackupFrameworkEnabled = new ConfigKey<>("Advanced", Boolean.class, "backup.framework.enabled", "false", - "Is backup and recovery framework enabled.", true, ConfigKey.Scope.Zone); + "Is backup and recovery framework enabled.", false, ConfigKey.Scope.Zone); ConfigKey<String> BackupProviderPlugin = new ConfigKey<>("Advanced", String.class, "backup.framework.provider.plugin", diff --git a/developer/developer-prefill.sql b/developer/developer-prefill.sql index c9ab468..0715e07 100644 --- a/developer/developer-prefill.sql +++ b/developer/developer-prefill.sql @@ -114,16 +114,21 @@ INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) VALUES ('Advanced', 'DEFAULT', 'management-server', 'ping.timeout', '2.0'); --- Enable dynamic RBAC by default for fresh deployments +-- Enable dynamic RBAC by default for developers INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) VALUES ('Advanced', 'DEFAULT', 'RoleService', 'dynamic.apichecker.enabled', 'true'); --- Enable RootCA auth strictness for fresh deployments +-- Enable RootCA auth strictness for developers INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) VALUES ('Advanced', 'DEFAULT', 'RootCAProvider', 'ca.plugin.root.auth.strictness', 'true'); +-- Enable B&R feature for developers +INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) + VALUES ('Advanced', 'DEFAULT', 'BackupService', + 'backup.framework.enabled', 'true'); + -- Add developer configuration entry; allows management server to be run as a user other than "cloud" INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) VALUES ('Advanced', 'DEFAULT', 'management-server', 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 f3b0a3c..b11d1bc 100644 --- a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java @@ -736,7 +736,7 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager { } public boolean isDisabled(final Long zoneId) { - return !BackupFrameworkEnabled.valueIn(zoneId); + return !(BackupFrameworkEnabled.value() && BackupFrameworkEnabled.valueIn(zoneId)); } private void validateForZone(final Long zoneId) { @@ -769,6 +769,10 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager { @Override public List<Class<?>> getCommands() { final List<Class<?>> cmdList = new ArrayList<Class<?>>(); + if (!BackupFrameworkEnabled.value()) { + return cmdList; + } + // Offerings cmdList.add(ListBackupProvidersCmd.class); cmdList.add(ListBackupProviderOfferingsCmd.class); diff --git a/test/integration/smoke/test_backup_recovery_dummy.py b/test/integration/smoke/test_backup_recovery_dummy.py index 79f375c..0c7ae64 100644 --- a/test/integration/smoke/test_backup_recovery_dummy.py +++ b/test/integration/smoke/test_backup_recovery_dummy.py @@ -41,15 +41,9 @@ class TestDummyBackupAndRecovery(cloudstackTestCase): assert False, "get_template() failed to return template with description %s" % cls.services["ostype"] cls.services["small"]["zoneid"] = cls.zone.id cls.services["small"]["template"] = cls.template.id - cls.account = Account.create(cls.api_client, cls.services["account"], domainid=cls.domain.id) - cls.offering = ServiceOffering.create(cls.api_client,cls.services["service_offerings"]["small"]) - cls.vm = VirtualMachine.create(cls.api_client, cls.services["small"], accountid=cls.account.name, - domainid=cls.account.domainid, serviceofferingid=cls.offering.id, - mode=cls.services["mode"]) - cls._cleanup = [cls.offering, cls.account] + cls._cleanup = [] # Check backup configuration values, set them to enable the dummy provider - backup_enabled_cfg = Configurations.list(cls.api_client, name='backup.framework.enabled', zoneid=cls.zone.id) backup_provider_cfg = Configurations.list(cls.api_client, name='backup.framework.provider.plugin', zoneid=cls.zone.id) cls.backup_enabled = backup_enabled_cfg[0].value @@ -59,7 +53,17 @@ class TestDummyBackupAndRecovery(cloudstackTestCase): Configurations.update(cls.api_client, 'backup.framework.enabled', value='true', zoneid=cls.zone.id) if cls.backup_provider != "dummy": Configurations.update(cls.api_client, 'backup.framework.provider.plugin', value='dummy', zoneid=cls.zone.id) - + + if cls.hypervisor.lower() != 'simulator': + return + + cls.account = Account.create(cls.api_client, cls.services["account"], domainid=cls.domain.id) + cls.offering = ServiceOffering.create(cls.api_client,cls.services["service_offerings"]["small"]) + cls.vm = VirtualMachine.create(cls.api_client, cls.services["small"], accountid=cls.account.name, + domainid=cls.account.domainid, serviceofferingid=cls.offering.id, + mode=cls.services["mode"]) + cls._cleanup = [cls.offering, cls.account] + # Import a dummy backup offering to use on tests cls.provider_offerings = BackupOffering.listExternal(cls.api_client, cls.zone.id) @@ -85,6 +89,8 @@ class TestDummyBackupAndRecovery(cloudstackTestCase): def setUp(self): self.apiclient = self.testClient.getApiClient() self.dbclient = self.testClient.getDbConnection() + if self.hypervisor.lower() != 'simulator': + raise self.skipTest("Skipping test cases which must only run for Simulator") self.cleanup = [] def tearDown(self):