lib/fulmar/domain/task/database_sync.rake in fulmar-1.7.3 vs lib/fulmar/domain/task/database_sync.rake in fulmar-1.7.4
- old
+ new
@@ -1,36 +1,58 @@
db_configs = []
configuration.each do |env, target, data|
db_configs << [env, target] if data[:type] == 'maria'
end
-def create_update_task(from_db, to_db)
- namespace to_db.first do
- desc "Update #{to_db.first} database with #{from_db.first} data" unless to_db.first.match(/^(live|prod)/) # hide sync to live
- task "from_#{from_db.first}" do
- configuration.environment = from_db.first
- configuration.target = from_db.last
+# Expects two hashes as parameters each with { :environment, :target, :name } set
+# :name is either environment:target or just the environment, if the is only one target
+def create_update_task(from, to)
+ namespace to[:name] do
+ task "from_#{from[:name]}" do
+ configuration.environment = from[:environment]
+ configuration.target = from[:target]
puts 'Getting dump...'
sql_dump = database.download_dump
if sql_dump == ''
puts 'Cannot create sql dump'
else
- configuration.environment = to_db.first
- configuration.target = to_db.last
+ configuration.environment = to[:environment]
+ configuration.target = to[:target]
puts 'Sending dump...'
remote_sql_dump = upload(sql_dump)
database.load_dump(remote_sql_dump)
end
end
end
end
+def name(env, target, counts)
+ counts[env] > 1 ? "#{env}:#{target}" : env
+end
+
def create_update_tasks(db_configs)
+ counts = {}
+ db_configs.each do |config|
+ counts[config.first] = 0 unless counts[config.first]
+ counts[config.first] += 1
+ end
+
namespace :update do
db_configs.each do |from_db|
db_configs.each do |to_db|
- next if from_db == to_db
- create_update_task(from_db, to_db)
+ next if from_db == to_db # no need to sync a database to itself
+ next if from_db.last != to_db.last # sync only matching target names
+ from = {
+ environment: from_db.first,
+ target: from_db.last,
+ name: name(from_db.first, from_db.last, counts)
+ }
+ to = {
+ environment: to_db.first,
+ target: to_db.last,
+ name: name(to_db.first, to_db.last, counts)
+ }
+ create_update_task(from, to)
end
end
end
end