[
https://issues.apache.org/jira/browse/CLOUDSTACK-8562?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15242036#comment-15242036
]
ASF GitHub Bot commented on CLOUDSTACK-8562:
--------------------------------------------
Github user jburwell commented on a diff in the pull request:
https://github.com/apache/cloudstack/pull/1489#discussion_r59801354
--- Diff: engine/schema/src/com/cloud/upgrade/dao/Upgrade481to490.java ---
@@ -53,6 +62,139 @@ public boolean supportsRollingUpgrade() {
@Override
public void performDataMigration(Connection conn) {
+ setupRolesAndPermissionsForDynamicRBAC(conn);
+ }
+
+ private void createDefaultRole(final Connection conn, final Long id,
final String name, final RoleType roleType) {
+ final String insertSql = String.format("INSERT INTO
`cloud`.`roles` (`id`, `uuid`, `name`, `role_type`, `description`) values (%d,
UUID(), '%s', '%s', 'Default %s role');",
+ id, name, roleType.name(), roleType.name().toLowerCase());
+ try ( PreparedStatement updatePstmt =
conn.prepareStatement(insertSql) ) {
+ updatePstmt.executeUpdate();
+ } catch (SQLException e) {
+ throw new CloudRuntimeException("Unable to create default role
with id: " + id + " name: " + name, e);
+ }
+ }
+
+ private void createRoleMapping(final Connection conn, final Long
roleId, final String apiName) {
+ final String insertSql = String.format("INSERT INTO
`cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`) values
(UUID(), %d, '%s', 'ALLOW') ON DUPLICATE KEY UPDATE rule=rule;",
+ roleId, apiName);
+ try ( PreparedStatement updatePstmt =
conn.prepareStatement(insertSql)) {
+ updatePstmt.executeUpdate();
+ } catch (SQLException ignored) {
+ s_logger.debug("Unable to insert mapping for role id:" +
roleId + " apiName: " + apiName);
+ }
+ }
+
+ private void addRoleColumnAndMigrateAccountTable(final Connection
conn, final RoleType[] roleTypes) {
+ final String alterTableSql = "ALTER TABLE `cloud`.`account` ADD
COLUMN `role_id` bigint(20) unsigned COMMENT 'role id for this account' AFTER
`type`, " +
+ "ADD KEY `fk_account__role_id` (`role_id`), " +
+ "ADD CONSTRAINT `fk_account__role_id` FOREIGN KEY
(`role_id`) REFERENCES `roles` (`id`);";
+ try (PreparedStatement pstmt =
conn.prepareStatement(alterTableSql)) {
+ pstmt.executeUpdate();
+ s_logger.info("Altered cloud.account table and added column
role_id");
+ } catch (SQLException e) {
+ if (e.getMessage().contains("role_id")) {
+ s_logger.warn("cloud.account table already has the role_id
column, skipping altering table and migration of accounts");
+ return;
+ } else {
+ throw new CloudRuntimeException("Unable to create column
quota_calculated in table cloud_usage.cloud_usage", e);
+ }
+ }
+ migrateAccountsToDefaultRoles(conn, roleTypes);
+ }
+
+ private void migrateAccountsToDefaultRoles(final Connection conn,
final RoleType[] roleTypes) {
+ try (PreparedStatement selectStatement =
conn.prepareStatement("SELECT `id`, `type` FROM `cloud`.`account`;");
+ ResultSet selectResultSet = selectStatement.executeQuery()) {
--- End diff --
The ``selectResultSet`` is a resource that needs to be closed. Please add
it to enclosing try with resources block.
> User Definable Roles
> --------------------
>
> Key: CLOUDSTACK-8562
> URL: https://issues.apache.org/jira/browse/CLOUDSTACK-8562
> Project: CloudStack
> Issue Type: New Feature
> Security Level: Public(Anyone can view this level - this is the
> default.)
> Components: Management Server
> Reporter: Paul Angus
> Assignee: Rohit Yadav
>
> Static command.properties moved to database and made user definable
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)