From 121f7493ab59d349ba0d7579ef9ffad132765e02 Mon Sep 17 00:00:00 2001 From: Samuel Couillard <43917914+scouillard@users.noreply.github.com> Date: Wed, 14 Jun 2023 10:34:40 -0400 Subject: [PATCH] Add Provider to v2 migration tasks (#4908) * Add Provider to migration file * Add Provider to migration file * Add greenlight as default task argument * Remove admin and user from filtered roles for tenants * Add provider * Fix migration file * Add default_enabled to possible rooms configs * Change v2 disable from v3 disable to v3 optional * Change v2 disable back to v3 disable --- lib/tasks/migrations/migrations.rake | 77 ++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 21 deletions(-) mode change 100644 => 100755 lib/tasks/migrations/migrations.rake diff --git a/lib/tasks/migrations/migrations.rake b/lib/tasks/migrations/migrations.rake old mode 100644 new mode 100755 index 3332a283e4..3b96795c0c --- a/lib/tasks/migrations/migrations.rake +++ b/lib/tasks/migrations/migrations.rake @@ -6,19 +6,22 @@ namespace :migrations do COMMON = { headers: { "Content-Type" => "application/json", "Accept" => "application/json" }, batch_size: 500, - filtered_roles: %w[super_admin admin pending denied user], + filtered_roles: %w[admin user super_admin pending denied], filtered_user_roles: %w[super_admin pending denied] }.freeze desc "Migrates v2 resources to v3" - task :roles, [] => :environment do |_task, _args| + task :roles, [:provider] => :environment do |_task, args| + args.with_defaults(provider: "greenlight") has_encountred_issue = 0 Role.unscoped - .select(:id, :name) + .where(provider: args[:provider]) + .select(:id, :name, :provider) .includes(:role_permissions) .where.not(name: COMMON[:filtered_roles]) .find_each(batch_size: COMMON[:batch_size]) do |r| + # RolePermissions role_permissions_hash = r.role_permissions.pluck(:name, :value).to_h @@ -34,19 +37,22 @@ namespace :migrations do } params = { role: { name: r.name.capitalize, + provider: r.provider, role_permissions: role_permissions } } response = Net::HTTP.post(uri('roles'), payload(params), COMMON[:headers]) case response when Net::HTTPCreated - puts green "Succesfully migrated Role:" + puts green "Successfully migrated Role:" puts cyan "ID: #{r.id}" puts cyan "Name: #{params[:role][:name]}" + puts cyan "Provider: #{params[:role][:provider]}" else puts red "Unable to migrate Role:" puts yellow "ID: #{r.id}" puts yellow "Name: #{params[:role][:name]}" + puts yellow "Provider: #{params[:role][:provider]}" puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}" has_encountred_issue = 1 # At least one of the migrations failed. end @@ -58,29 +64,39 @@ namespace :migrations do exit has_encountred_issue end - task :users, [:start, :stop] => :environment do |_task, args| + task :users, [:provider, :start, :stop] => :environment do |_task, args| + args.with_defaults(provider: "greenlight") start, stop = range(args) has_encountred_issue = 0 User.unscoped + .where(provider: args[:provider]) .select(:id, :uid, :name, :email, :social_uid, :language, :role_id) .includes(:role) .where.not(roles: { name: COMMON[:filtered_user_roles] }, deleted: true) .find_each(start: start, finish: stop, batch_size: COMMON[:batch_size]) do |u| role_name = infer_role_name(u.role.name) - params = { user: { name: u.name, email: u.email, external_id: u.social_uid, language: u.language, role: role_name } } + params = { user: + { name: u.name, + email: u.email, + external_id: u.social_uid, + provider: u.provider, + language: u.language, + role: role_name } } response = Net::HTTP.post(uri('users'), payload(params), COMMON[:headers]) case response when Net::HTTPCreated - puts green "Succesfully migrated User:" + puts green "Successfully migrated User:" puts cyan " UID: #{u.uid}" puts cyan " Name: #{params[:user][:name]}" + puts cyan " Provider: #{params[:user][:provider]}" else puts red "Unable to migrate User:" puts yellow "UID: #{u.uid}" puts yellow "Name: #{params[:user][:name]}" + puts yellow "Provider: #{params[:user][:provider]}" puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}" has_encountred_issue = 1 # At least one of the migrations failed. end @@ -97,17 +113,21 @@ namespace :migrations do exit has_encountred_issue end - task :rooms, [:start, :stop] => :environment do |_task, args| + task :rooms, [:provider, :start, :stop] => :environment do |_task, args| + args.with_defaults(provider: "greenlight") start, stop = range(args) has_encountred_issue = 0 filtered_roles_ids = Role.unscoped + .where(provider: args[:provider]) .select(:id, :name) .where(name: COMMON[:filtered_user_roles]) .pluck(:id) - Room.unscoped.select(:id, :uid, :name, :bbb_id, :last_session, :user_id, :room_settings) + Room.unscoped + .select(:id, :uid, :name, :bbb_id, :last_session, :user_id, :room_settings) .includes(:owner) + .where('users.provider': args[:provider]) .where.not(users: { role_id: filtered_roles_ids, deleted: true }, deleted: true) .find_each(start: start, finish: stop, batch_size: COMMON[:batch_size]) do |r| # RoomSettings @@ -132,6 +152,7 @@ namespace :migrations do meeting_id: r.bbb_id, last_session: r.last_session&.to_datetime, owner_email: r.owner.email, + provider: r.owner.provider, room_settings: room_settings, shared_users_emails: shared_users_emails } } @@ -139,13 +160,15 @@ namespace :migrations do case response when Net::HTTPCreated - puts green "Succesfully migrated Room:" + puts green "Successfully migrated Room:" puts cyan "UID: #{r.uid}" - puts cyan "Name: #{r.name}" + puts cyan "Name: #{params[:room][:name]}" + puts cyan "Provider: #{params[:room][:provider]}" else puts red "Unable to migrate Room:" puts yellow "UID: #{r.uid}" - puts yellow "Name: #{r.name}" + puts yellow "Name: #{params[:room][:name]}" + puts yellow "Provider: #{params[:room][:provider]}}" puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}" has_encountred_issue = 1 # At least one of the migrations failed. end @@ -162,10 +185,11 @@ namespace :migrations do exit has_encountred_issue end - task settings: :environment do |_task| + task :settings, [:provider] => :environment do |_task, args| + args.with_defaults(provider: "greenlight") has_encountred_issue = 0 - setting = Setting.includes(:features).find_by(provider: 'greenlight') + setting = Setting.includes(:features).find_by(provider: args[:provider]) # SiteSettings site_settings = { @@ -179,7 +203,7 @@ namespace :migrations do }.compact # RoomConfigurations - room_configurations = { + rooms_configurations = { record: infer_room_config_value(setting.get_value('Room Configuration Recording')), muteOnStart: infer_room_config_value(setting.get_value('Room Configuration Mute On Join')), guestPolicy: infer_room_config_value(setting.get_value('Room Configuration Require Moderator')), @@ -188,15 +212,24 @@ namespace :migrations do glRequireAuthentication: infer_room_config_value(setting.get_value('Room Authentication')) }.compact - params = { settings: { site_settings: site_settings, room_configurations: room_configurations } } + params = { settings: { provider: args[:provider], site_settings: site_settings, rooms_configurations: rooms_configurations } } response = Net::HTTP.post(uri('settings'), payload(params), COMMON[:headers]) case response when Net::HTTPCreated - puts green "Successfully migrated Settings" + puts green "Successfully migrated Site Settings" + puts cyan "Provider: #{args[:provider]}" + site_settings.each do |setting| + puts cyan "#{setting[0]}: #{setting[1]}" + end + puts green "Successfully migrated Rooms Configurations" + rooms_configurations.each do |rooms_config| + puts cyan "#{rooms_config[0]}: #{rooms_config[1]}" + end else puts red "Unable to migrate Settings" + puts red "Provider: #{args[:provider]}" puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}" has_encountred_issue = 1 # At least one of the migrations failed. end @@ -217,7 +250,7 @@ namespace :migrations do end unless ENV["V3_SECRET_KEY_BASE"].size >= 32 - raise red 'Unable to migrate: Provided "V3_SECRET_KEY_BASE" must be at least 32 charchters in length.' + raise red 'Unable to migrate: Provided "V3_SECRET_KEY_BASE" must be at least 32 characters in length.' end key = ENV["V3_SECRET_KEY_BASE"][0..31] @@ -272,12 +305,14 @@ namespace :migrations do case config_val when "enabled" "true" - when "true" - "true" when "disabled" "false" + when "optional" + "default_enabled" + when "true" + "true" else "optional" - end + end end end