Skip to content

Commit 310195c

Browse files
authored
CLOUDSTACK-10052: Simplify dynamic roles enable checking (#2241)
This fixes issue of enabling dynamic roles based on the global setting only. This also fixes application of the default role/permissions mapping on upgrade from 4.8 and previous versions to 4.9+. Previously, it would make additional check to ensure commands.properties is not in the classpath however this creates confusion for admins who may skip/skim through the rn/docs and assume that mere changing the global settings was not enough. Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
1 parent cd2176f commit 310195c

File tree

3 files changed

+41
-51
lines changed

3 files changed

+41
-51
lines changed

engine/schema/src/com/cloud/upgrade/dao/Upgrade481to490.java

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,20 @@
1717

1818
package com.cloud.upgrade.dao;
1919

20-
import com.cloud.utils.PropertiesUtil;
21-
import com.cloud.utils.db.ScriptRunner;
22-
import com.cloud.utils.exception.CloudRuntimeException;
23-
import com.cloud.utils.script.Script;
24-
import org.apache.cloudstack.acl.RoleType;
25-
import org.apache.log4j.Logger;
26-
2720
import java.io.File;
2821
import java.io.FileReader;
2922
import java.io.IOException;
3023
import java.sql.Connection;
3124
import java.sql.PreparedStatement;
3225
import java.sql.ResultSet;
3326
import java.sql.SQLException;
34-
import java.util.Map;
27+
28+
import org.apache.cloudstack.acl.RoleType;
29+
import org.apache.log4j.Logger;
30+
31+
import com.cloud.utils.db.ScriptRunner;
32+
import com.cloud.utils.exception.CloudRuntimeException;
33+
import com.cloud.utils.script.Script;
3534

3635
public class Upgrade481to490 implements DbUpgrade {
3736
final static Logger s_logger = Logger.getLogger(Upgrade481to490.class);
@@ -115,23 +114,19 @@ private void setupRolesAndPermissionsForDynamicChecker(final Connection conn) {
115114

116115
migrateAccountsToDefaultRoles(conn);
117116

118-
final Map<String, String> apiMap = PropertiesUtil.processConfigFile(new String[] { PropertiesUtil.getDefaultApiCommandsFileName() });
119-
if (apiMap == null || apiMap.isEmpty()) {
120-
if (s_logger.isDebugEnabled()) {
121-
s_logger.debug("The commands.properties file and default role permissions were not found. " +
122-
"Assuming new installation, configuring default role-api mappings.");
123-
}
124-
String script = Script.findScript("", "db/create-default-role-api-mappings.sql");
125-
if (script == null) {
126-
s_logger.error("Unable to find default role-api mapping sql file, please configure api per role manually");
127-
return;
128-
}
129-
try(final FileReader reader = new FileReader(new File(script))) {
130-
ScriptRunner runner = new ScriptRunner(conn, false, true);
131-
runner.runScript(reader);
132-
} catch (SQLException | IOException e) {
133-
s_logger.error("Unable to insert default api-role mappings from file: " + script + ". Please configure api per role manually, giving up!", e);
134-
}
117+
if (s_logger.isDebugEnabled()) {
118+
s_logger.debug("Configuring default role-api mappings, use migrate-dynamicroles.py instead if you want to migrate rules from an existing commands.properties file");
119+
}
120+
String script = Script.findScript("", "db/create-default-role-api-mappings.sql");
121+
if (script == null) {
122+
s_logger.error("Unable to find default role-api mapping sql file, please configure api per role manually");
123+
return;
124+
}
125+
try(final FileReader reader = new FileReader(new File(script))) {
126+
ScriptRunner runner = new ScriptRunner(conn, false, true);
127+
runner.runScript(reader);
128+
} catch (SQLException | IOException e) {
129+
s_logger.error("Unable to insert default api-role mappings from file: " + script + ". Please configure api per role manually, giving up!", e);
135130
}
136131
}
137132

server/src/org/apache/cloudstack/acl/RoleManagerImpl.java

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,14 @@
1616
// under the License.
1717
package org.apache.cloudstack.acl;
1818

19-
import com.cloud.event.ActionEvent;
20-
import com.cloud.event.EventTypes;
21-
import com.cloud.exception.PermissionDeniedException;
22-
import com.cloud.user.Account;
23-
import com.cloud.user.dao.AccountDao;
24-
import com.cloud.utils.ListUtils;
25-
import com.cloud.utils.PropertiesUtil;
26-
import com.cloud.utils.component.ManagerBase;
27-
import com.cloud.utils.component.PluggableService;
28-
import com.cloud.utils.db.Transaction;
29-
import com.cloud.utils.db.TransactionCallback;
30-
import com.cloud.utils.db.TransactionStatus;
31-
import com.google.common.base.Strings;
19+
import java.util.ArrayList;
20+
import java.util.Collections;
21+
import java.util.Date;
22+
import java.util.List;
23+
24+
import javax.ejb.Local;
25+
import javax.inject.Inject;
26+
3227
import org.apache.cloudstack.acl.dao.RoleDao;
3328
import org.apache.cloudstack.acl.dao.RolePermissionsDao;
3429
import org.apache.cloudstack.api.ApiErrorCode;
@@ -45,13 +40,18 @@
4540
import org.apache.cloudstack.framework.config.ConfigKey;
4641
import org.apache.cloudstack.framework.config.Configurable;
4742

48-
import javax.ejb.Local;
49-
import javax.inject.Inject;
50-
import java.io.File;
51-
import java.util.ArrayList;
52-
import java.util.Collections;
53-
import java.util.Date;
54-
import java.util.List;
43+
import com.cloud.event.ActionEvent;
44+
import com.cloud.event.EventTypes;
45+
import com.cloud.exception.PermissionDeniedException;
46+
import com.cloud.user.Account;
47+
import com.cloud.user.dao.AccountDao;
48+
import com.cloud.utils.ListUtils;
49+
import com.cloud.utils.component.ManagerBase;
50+
import com.cloud.utils.component.PluggableService;
51+
import com.cloud.utils.db.Transaction;
52+
import com.cloud.utils.db.TransactionCallback;
53+
import com.cloud.utils.db.TransactionStatus;
54+
import com.google.common.base.Strings;
5555

5656
@Local(value = {RoleService.class})
5757
public class RoleManagerImpl extends ManagerBase implements RoleService, Configurable, PluggableService {
@@ -78,8 +78,7 @@ private void checkCallerAccess() {
7878

7979
@Override
8080
public boolean isEnabled() {
81-
File apiCmdFile = PropertiesUtil.findConfigFile(PropertiesUtil.getDefaultApiCommandsFileName());
82-
return RoleService.EnableDynamicApiChecker.value() && (apiCmdFile == null || !apiCmdFile.exists());
81+
return RoleService.EnableDynamicApiChecker.value();
8382
}
8483

8584
@Override

utils/src/main/java/com/cloud/utils/PropertiesUtil.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@
3434
public class PropertiesUtil {
3535
private static final Logger s_logger = Logger.getLogger(PropertiesUtil.class);
3636

37-
public static String getDefaultApiCommandsFileName() {
38-
return "commands.properties";
39-
}
40-
4137
/**
4238
* Searches the class path and local paths to find the config file.
4339
* @param path path to find. if it starts with / then it's absolute path.

0 commit comments

Comments
 (0)