class RdsDbBackup::Factory::Build
Public Instance Methods
description()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 13 def description "DB Backup '#{name}' completed" end
perform()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 6 def perform pwd(tmp_dir) { execute_commands } rescue exception = $! concat ['Error occured:', exception.class.name, exception.backtrace].join("\n") end
Private Instance Methods
aws_params()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 89 def aws_params { 'AWS_ACCESS_KEY_ID' => aws_access_key_id, 'AWS_SECRET_ACCESS_KEY' => aws_secret_access_key } end
backup_instance_id()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 85 def backup_instance_id "tempdb-#{backup_name}-production" end
backup_name()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 69 def backup_name name.dasherize end
credentials()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 96 def credentials "--region=#{region} --access-key-id=#{aws_access_key_id} --secret-key=#{aws_secret_access_key}" end
db_credentials()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 100 def db_credentials "-u#{db_username} -p#{db_password} -h#{backup_instance_id}.#{db_host_name_domain} -P#{db_port} #{db_name}" end
dump_filename()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 77 def dump_filename @dump_filename ||= "#{db_name}-#{time_i}.tar.gz" end
dump_filename_with_path()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 81 def dump_filename_with_path File.join(tmp_dir, dump_filename) end
execute_commands()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 19 def execute_commands concat "Creating a snapshot of #{db_instance_name}." run_rds('create-db-snapshot', "#{db_instance_name} --db-snapshot-identifier #{snapshot_id} #{credentials}") concat "Waiting until snapshot is available..." wait_until :snapshot_availability? concat "Creating an instance #{backup_instance_id} from #{snapshot_id} snapshot." run_rds('restore-db-instance-from-db-snapshot', "#{backup_instance_id} --db-snapshot-identifier #{snapshot_id} --region #{region} --db-instance-class db.m1.small #{credentials}") concat "Waiting until instance is available..." wait_until :instance_availability? concat "Modifying instance #{backup_instance_id}." run_rds('modify-db-instance', "#{backup_instance_id} --db-parameter-group-name #{db_params_group} --vpc-security-group-ids #{db_security_group} #{credentials}") concat "Waiting until VPC Security Group changes..." wait_until :security_group_changed? concat "Waiting until Parameter Group changes..." wait_until :params_group_changed? concat "Rebooting instance #{backup_instance_id}." run_rds('reboot-db-instance', "#{backup_instance_id} #{credentials}") concat "Waiting until instance is available..." wait_until :instance_availability? concat "Creating a dump from #{backup_instance_id} with filename #{dump_filename}." run "mysqldump #{db_credentials} --verbose | gzip > #{dump_filename_with_path}" concat "Uploading the dump to #{db_bucket}." run_with_clean_env "aws s3 cp #{dump_filename_with_path} s3://#{db_bucket}/#{dump_filename} --region #{region}", aws_params concat "Removing dump #{dump_filename}." run "rm -rf #{dump_filename_with_path}" concat "Deleting instance #{backup_instance_id}." run_rds('delete-db-instance', "#{backup_instance_id} --skip-final-snapshot -f #{credentials}") concat "Deleting snapshot #{snapshot_id}." run_rds('delete-db-snapshot', "#{snapshot_id} -f #{credentials}") concat description end
instance_availability?()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 108 def instance_availability? run_rds('describe-db-instances', "#{credentials} | grep -i #{backup_instance_id} | grep available | wc -l") end
params_group_changed?()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 116 def params_group_changed? run_rds('describe-db-instances', "#{backup_instance_id} #{credentials} | grep PARAMGRP | grep -i #{db_params_group} | grep in-sync | wc -l") end
rds(command)
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 120 def rds(command) "JAVA_HOME=#{config.java_home_path} AWS_RDS_HOME=#{config.aws_rds_home_path} #{config.aws_bin_path}/rds-#{command}" "#{config.aws_bin_path}/rds-#{command}" end
run_rds(command, params)
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 133 def run_rds(command, params) run "#{rds(command)} #{params}" end
security_group_changed?()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 112 def security_group_changed? run_rds('describe-db-instances', "#{backup_instance_id} #{credentials} | grep SECGROUP | grep -i #{db_security_group} | grep active | wc -l") end
snapshot_availability?()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 104 def snapshot_availability? run_rds('describe-db-snapshots', "#{credentials} | grep -i #{snapshot_id} | grep available | wc -l") end
snapshot_id()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 73 def snapshot_id @snapshot_id ||= "#{backup_name}-production-copy-#{time_i}" end
time_i()
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 65 def time_i @time_i ||= time.to_i end
wait_until(method)
click to toggle source
# File lib/rds_db_backup/factory/build.rb, line 125 def wait_until(method) result = send(method).to_i return if result == 1 sleep 10 wait_until method end