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