Skip to content
Snippets Groups Projects
Unverified Commit 121f7493 authored by Samuel Couillard's avatar Samuel Couillard Committed by GitHub
Browse files

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
parent 3456ff2b
No related branches found
No related tags found
No related merge requests found
...@@ -6,19 +6,22 @@ namespace :migrations do ...@@ -6,19 +6,22 @@ namespace :migrations do
COMMON = { COMMON = {
headers: { "Content-Type" => "application/json", "Accept" => "application/json" }, headers: { "Content-Type" => "application/json", "Accept" => "application/json" },
batch_size: 500, 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] filtered_user_roles: %w[super_admin pending denied]
}.freeze }.freeze
desc "Migrates v2 resources to v3" 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 has_encountred_issue = 0
Role.unscoped Role.unscoped
.select(:id, :name) .where(provider: args[:provider])
.select(:id, :name, :provider)
.includes(:role_permissions) .includes(:role_permissions)
.where.not(name: COMMON[:filtered_roles]) .where.not(name: COMMON[:filtered_roles])
.find_each(batch_size: COMMON[:batch_size]) do |r| .find_each(batch_size: COMMON[:batch_size]) do |r|
# RolePermissions # RolePermissions
role_permissions_hash = r.role_permissions.pluck(:name, :value).to_h role_permissions_hash = r.role_permissions.pluck(:name, :value).to_h
...@@ -34,19 +37,22 @@ namespace :migrations do ...@@ -34,19 +37,22 @@ namespace :migrations do
} }
params = { role: { name: r.name.capitalize, params = { role: { name: r.name.capitalize,
provider: r.provider,
role_permissions: role_permissions } } role_permissions: role_permissions } }
response = Net::HTTP.post(uri('roles'), payload(params), COMMON[:headers]) response = Net::HTTP.post(uri('roles'), payload(params), COMMON[:headers])
case response case response
when Net::HTTPCreated when Net::HTTPCreated
puts green "Succesfully migrated Role:" puts green "Successfully migrated Role:"
puts cyan "ID: #{r.id}" puts cyan "ID: #{r.id}"
puts cyan "Name: #{params[:role][:name]}" puts cyan "Name: #{params[:role][:name]}"
puts cyan "Provider: #{params[:role][:provider]}"
else else
puts red "Unable to migrate Role:" puts red "Unable to migrate Role:"
puts yellow "ID: #{r.id}" puts yellow "ID: #{r.id}"
puts yellow "Name: #{params[:role][:name]}" puts yellow "Name: #{params[:role][:name]}"
puts yellow "Provider: #{params[:role][:provider]}"
puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}" puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}"
has_encountred_issue = 1 # At least one of the migrations failed. has_encountred_issue = 1 # At least one of the migrations failed.
end end
...@@ -58,29 +64,39 @@ namespace :migrations do ...@@ -58,29 +64,39 @@ namespace :migrations do
exit has_encountred_issue exit has_encountred_issue
end 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) start, stop = range(args)
has_encountred_issue = 0 has_encountred_issue = 0
User.unscoped User.unscoped
.where(provider: args[:provider])
.select(:id, :uid, :name, :email, :social_uid, :language, :role_id) .select(:id, :uid, :name, :email, :social_uid, :language, :role_id)
.includes(:role) .includes(:role)
.where.not(roles: { name: COMMON[:filtered_user_roles] }, deleted: true) .where.not(roles: { name: COMMON[:filtered_user_roles] }, deleted: true)
.find_each(start: start, finish: stop, batch_size: COMMON[:batch_size]) do |u| .find_each(start: start, finish: stop, batch_size: COMMON[:batch_size]) do |u|
role_name = infer_role_name(u.role.name) 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]) response = Net::HTTP.post(uri('users'), payload(params), COMMON[:headers])
case response case response
when Net::HTTPCreated when Net::HTTPCreated
puts green "Succesfully migrated User:" puts green "Successfully migrated User:"
puts cyan " UID: #{u.uid}" puts cyan " UID: #{u.uid}"
puts cyan " Name: #{params[:user][:name]}" puts cyan " Name: #{params[:user][:name]}"
puts cyan " Provider: #{params[:user][:provider]}"
else else
puts red "Unable to migrate User:" puts red "Unable to migrate User:"
puts yellow "UID: #{u.uid}" puts yellow "UID: #{u.uid}"
puts yellow "Name: #{params[:user][:name]}" puts yellow "Name: #{params[:user][:name]}"
puts yellow "Provider: #{params[:user][:provider]}"
puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}" puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}"
has_encountred_issue = 1 # At least one of the migrations failed. has_encountred_issue = 1 # At least one of the migrations failed.
end end
...@@ -97,17 +113,21 @@ namespace :migrations do ...@@ -97,17 +113,21 @@ namespace :migrations do
exit has_encountred_issue exit has_encountred_issue
end 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) start, stop = range(args)
has_encountred_issue = 0 has_encountred_issue = 0
filtered_roles_ids = Role.unscoped filtered_roles_ids = Role.unscoped
.where(provider: args[:provider])
.select(:id, :name) .select(:id, :name)
.where(name: COMMON[:filtered_user_roles]) .where(name: COMMON[:filtered_user_roles])
.pluck(:id) .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) .includes(:owner)
.where('users.provider': args[:provider])
.where.not(users: { role_id: filtered_roles_ids, deleted: true }, deleted: true) .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| .find_each(start: start, finish: stop, batch_size: COMMON[:batch_size]) do |r|
# RoomSettings # RoomSettings
...@@ -132,6 +152,7 @@ namespace :migrations do ...@@ -132,6 +152,7 @@ namespace :migrations do
meeting_id: r.bbb_id, meeting_id: r.bbb_id,
last_session: r.last_session&.to_datetime, last_session: r.last_session&.to_datetime,
owner_email: r.owner.email, owner_email: r.owner.email,
provider: r.owner.provider,
room_settings: room_settings, room_settings: room_settings,
shared_users_emails: shared_users_emails } } shared_users_emails: shared_users_emails } }
...@@ -139,13 +160,15 @@ namespace :migrations do ...@@ -139,13 +160,15 @@ namespace :migrations do
case response case response
when Net::HTTPCreated when Net::HTTPCreated
puts green "Succesfully migrated Room:" puts green "Successfully migrated Room:"
puts cyan "UID: #{r.uid}" puts cyan "UID: #{r.uid}"
puts cyan "Name: #{r.name}" puts cyan "Name: #{params[:room][:name]}"
puts cyan "Provider: #{params[:room][:provider]}"
else else
puts red "Unable to migrate Room:" puts red "Unable to migrate Room:"
puts yellow "UID: #{r.uid}" 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']}" puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}"
has_encountred_issue = 1 # At least one of the migrations failed. has_encountred_issue = 1 # At least one of the migrations failed.
end end
...@@ -162,10 +185,11 @@ namespace :migrations do ...@@ -162,10 +185,11 @@ namespace :migrations do
exit has_encountred_issue exit has_encountred_issue
end end
task settings: :environment do |_task| task :settings, [:provider] => :environment do |_task, args|
args.with_defaults(provider: "greenlight")
has_encountred_issue = 0 has_encountred_issue = 0
setting = Setting.includes(:features).find_by(provider: 'greenlight') setting = Setting.includes(:features).find_by(provider: args[:provider])
# SiteSettings # SiteSettings
site_settings = { site_settings = {
...@@ -179,7 +203,7 @@ namespace :migrations do ...@@ -179,7 +203,7 @@ namespace :migrations do
}.compact }.compact
# RoomConfigurations # RoomConfigurations
room_configurations = { rooms_configurations = {
record: infer_room_config_value(setting.get_value('Room Configuration Recording')), record: infer_room_config_value(setting.get_value('Room Configuration Recording')),
muteOnStart: infer_room_config_value(setting.get_value('Room Configuration Mute On Join')), 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')), guestPolicy: infer_room_config_value(setting.get_value('Room Configuration Require Moderator')),
...@@ -188,15 +212,24 @@ namespace :migrations do ...@@ -188,15 +212,24 @@ namespace :migrations do
glRequireAuthentication: infer_room_config_value(setting.get_value('Room Authentication')) glRequireAuthentication: infer_room_config_value(setting.get_value('Room Authentication'))
}.compact }.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]) response = Net::HTTP.post(uri('settings'), payload(params), COMMON[:headers])
case response case response
when Net::HTTPCreated 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 else
puts red "Unable to migrate Settings" puts red "Unable to migrate Settings"
puts red "Provider: #{args[:provider]}"
puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}" puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}"
has_encountred_issue = 1 # At least one of the migrations failed. has_encountred_issue = 1 # At least one of the migrations failed.
end end
...@@ -217,7 +250,7 @@ namespace :migrations do ...@@ -217,7 +250,7 @@ namespace :migrations do
end end
unless ENV["V3_SECRET_KEY_BASE"].size >= 32 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 end
key = ENV["V3_SECRET_KEY_BASE"][0..31] key = ENV["V3_SECRET_KEY_BASE"][0..31]
...@@ -272,10 +305,12 @@ namespace :migrations do ...@@ -272,10 +305,12 @@ namespace :migrations do
case config_val case config_val
when "enabled" when "enabled"
"true" "true"
when "true"
"true"
when "disabled" when "disabled"
"false" "false"
when "optional"
"default_enabled"
when "true"
"true"
else else
"optional" "optional"
end end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment