Add task for cloud storage migration
This commit is contained in:
parent
71d51ebb59
commit
5324484f3f
3 changed files with 94 additions and 0 deletions
2
Gemfile
2
Gemfile
|
@ -90,6 +90,8 @@ gem 'as_csv'
|
|||
gem 'apipie-rails', '=0.3.1'
|
||||
gem "maruku" # for Markdown support in apipie
|
||||
|
||||
gem 'openstack'
|
||||
|
||||
group :test do
|
||||
gem 'capybara'
|
||||
gem 'factory_girl'
|
||||
|
|
|
@ -391,6 +391,8 @@ GEM
|
|||
validate_email
|
||||
validate_url
|
||||
webfinger (>= 1.0.1)
|
||||
openstack (2.0.2)
|
||||
json
|
||||
orm_adapter (0.5.0)
|
||||
parallel (1.6.1)
|
||||
parallel_tests (1.9.0)
|
||||
|
@ -659,6 +661,7 @@ DEPENDENCIES
|
|||
mina!
|
||||
nyan-cat-formatter
|
||||
openid_connect
|
||||
openstack
|
||||
parallel_tests
|
||||
pg
|
||||
poltergeist
|
||||
|
|
89
lib/tasks/cloud_storage.rb
Normal file
89
lib/tasks/cloud_storage.rb
Normal file
|
@ -0,0 +1,89 @@
|
|||
namespace :cloudstorage do
|
||||
|
||||
task init: :environment do
|
||||
os_config = (YAML.load_file(Fog.credentials_path))['default']
|
||||
@os = OpenStack::Connection.create(
|
||||
{
|
||||
username: os_config['openstack_username'],
|
||||
api_key: os_config['openstack_api_key'],
|
||||
auth_method: "password",
|
||||
auth_url: "https://auth.cloud.ovh.net/v2.0/",
|
||||
authtenant_name: os_config['openstack_tenant'],
|
||||
service_type: "object-store",
|
||||
region: os_config['openstack_region']
|
||||
}
|
||||
)
|
||||
@cont = @os.container(CarrierWave::Uploader::Base.fog_directory)
|
||||
end
|
||||
|
||||
desc 'Move local attestations on cloud storage'
|
||||
task migrate: :environment do
|
||||
puts 'Starting migration'
|
||||
|
||||
Rake::Task['cloudstorage:init'].invoke
|
||||
|
||||
[Cerfa, PieceJustificative, Procedure].each { |c|
|
||||
c.all.each { |entry|
|
||||
content = entry.content
|
||||
content = entry.logo if c == Procedure
|
||||
unless content.current_path.nil? || File.exist?(File.dirname(content.current_path) + '/uploaded')
|
||||
secure_token = SecureRandom.uuid
|
||||
filename = "#{entry.class.to_s.underscore}-#{secure_token}.pdf"
|
||||
puts "Uploading #{content.current_path}"
|
||||
@cont.create_object(filename, { content_type: "application/pdf"}, File.open(content.current_path))
|
||||
File.open(File.dirname(content.current_path) + '/uploaded', "w+"){ |f| f.write(File.basename(content.current_path)) }
|
||||
entry.update_column(c == Procedure ? :logo : :content, filename)
|
||||
end
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
puts 'Enf of migration'
|
||||
end
|
||||
|
||||
desc 'Clear documents in tenant and revert file entries in database'
|
||||
task :revert do
|
||||
Rake::Task['cloudstorage:init'].invoke
|
||||
|
||||
@cont.objects.each { |object|
|
||||
puts "Removing #{object}"
|
||||
@cont.delete_object(object)
|
||||
}
|
||||
|
||||
[Cerfa, PieceJustificative, Procedure].each { |c|
|
||||
c.all.each { |entry|
|
||||
content = entry.content
|
||||
content = entry.logo if c == Procedure
|
||||
unless content.current_path.nil?
|
||||
if File.exist?(File.dirname(content.current_path) + '/uploaded')
|
||||
previous_filename = File.read(File.dirname(content.current_path) + '/uploaded')
|
||||
entry.update_column(c == Procedure ? :logo : :content, filename)
|
||||
puts "restoring #{content.current_path} db data to #{previous_filename}"
|
||||
FileUtils.rm(File.dirname(content.current_path) + '/uploaded')
|
||||
end
|
||||
end
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
desc 'Clear old documents in tenant'
|
||||
task :clear do
|
||||
Rake::Task['cloudstorage:init'].invoke
|
||||
|
||||
@cont.objects.each { |object|
|
||||
puts "Removing #{object}"
|
||||
@cont.delete_object(object)
|
||||
}
|
||||
end
|
||||
|
||||
task :clear_old_objects do
|
||||
Rake::Task['cloudstorage:init'].invoke
|
||||
|
||||
@cont.objects_detail.each { |object, details|
|
||||
last_modified = DateTime.parse(details[:last_modified])
|
||||
@cont.delete_object(object) unless last_modified.utc > (Time.now - 2.year).utc
|
||||
}
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in a new issue