Sha256: 2f2a7cde79bdf4cf68f142999b6222faa678afcb232f69bf98d466abb9467027

Contents?: true

Size: 1.85 KB

Versions: 9

Compression:

Stored size: 1.85 KB

Contents

module OdaniaOps
	module Cli
		class Backup < Thor
			desc 'execute <options>', 'Executes a backup'
			option :type, :type => :string, :required => true
			option :host, :type => :string, :required => true
			option :host_user, :type => :string, :required => true
			option :target_host, :type => :string, :required => true
			option :target_type, :type => :string, :required => true
			option :target_user, :type => :string, :required => true
			option :target_password, :type => :string, :required => true
			option :jumpbox, :type => :string

			def execute(opts=nil)
				@type = options[:type]
				$logger.info "Starting backup [#{@type}] #{options[:host]} -> [#{options[:target_type]}] #{options[:target_host]} (Jumpbox: #{options[:jumpbox]})"
				opts = opts.nil? ? {} : JSON.parse(opts)

				# Detect implementation
				backup_script_file = "/tmp/#{Time.now.to_i}_backup.rb"
				clazz = "OdaniaOps::Implementations::Backup::#{@type}".constantize.new options[:host], opts
				clazz.write backup_script_file

				set_jump_host(options[:jumpbox]) unless options[:jumpbox].nil?

				server_host = options[:host_user].nil? ? options[:host] : "#{options[:host_user]}@#{options[:host]}"
				on server_host, in: :sequence do |host|
					within '/tmp' do
						server_backup_file = "/tmp/#{@type}_backup.rb"
						upload! backup_script_file, server_backup_file
						result = capture "sudo #{server_backup_file}"
						$logger.info result
					end
				end

				$logger.info "Finished backup [#{@type}] #{options[:host]} -> [#{options[:target_type]}] #{options[:target_host]} (Jumpbox: #{options[:jumpbox]})"
			end

			private

			def set_jump_host(host)
				SSHKit::Backend::Netssh.configure do |ssh|
					ssh.ssh_options = {
						forward_agent: true,
						auth_methods: %w(publickey),
						proxy: Net::SSH::Proxy::Command.new("ssh #{host} -W %h:%p")
					}
				end
			end
		end
	end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
odania_ops-0.0.14 lib/odania_ops/cli/backup.rb
odania_ops-0.0.13 lib/odania_ops/cli/backup.rb
odania_ops-0.0.12 lib/odania_ops/cli/backup.rb
odania_ops-0.0.11 lib/odania_ops/cli/backup.rb
odania_ops-0.0.10 lib/odania_ops/cli/backup.rb
odania_ops-0.0.9 lib/odania_ops/cli/backup.rb
odania_ops-0.0.8 lib/odania_ops/cli/backup.rb
odania_ops-0.0.7 lib/odania_ops/cli/backup.rb
odania_ops-0.0.6 lib/odania_ops/cli/backup.rb