Class: Backup::RemoteArchive
- Includes:
- Utilities::Helpers, SSHKit::DSL
- Defined in:
- lib/backup/remote_archive.rb
Defined Under Namespace
Instance Attribute Summary collapse
-
#server_backup_path ⇒ Object
Returns the value of attribute server_backup_path.
-
#server_host ⇒ Object
server options.
-
#server_ssh_key ⇒ Object
Returns the value of attribute server_ssh_key.
-
#server_ssh_password ⇒ Object
Returns the value of attribute server_ssh_password.
-
#server_ssh_user ⇒ Object
Returns the value of attribute server_ssh_user.
Attributes inherited from Archive
Instance Method Summary collapse
-
#initialize(model, name, &block) ⇒ RemoteArchive
constructor
Adds a new Archive to a Backup Model.
- #perform! ⇒ Object
Methods included from Utilities::Helpers
Constructor Details
#initialize(model, name, &block) ⇒ RemoteArchive
Adds a new Archive to a Backup Model.
Backup::Model.new(:my_backup, 'My Backup') do
archive :my_archive do |archive|
archive.add 'path/to/archive'
archive.add '/another/path/to/archive'
archive.exclude 'path/to/exclude'
archive.exclude '/another/path/to/exclude'
end
end
All paths added using ‘add` or `exclude` will be expanded to their full paths from the root of the filesystem. Files will be added to the tar archive using these full paths, and their leading `/` will be preserved (using tar’s ‘-P` option).
/path/to/pwd/path/to/archive/...
/another/path/to/archive/...
When a ‘root` path is given, paths to add/exclude are taken as relative to the `root` path, unless given as absolute paths.
Backup::Model.new(:my_backup, 'My Backup') do
archive :my_archive do |archive|
archive.root '~/my_data'
archive.add 'path/to/archive'
archive.add '/another/path/to/archive'
archive.exclude 'path/to/exclude'
archive.exclude '/another/path/to/exclude'
end
end
This directs ‘tar` to change directories to the `root` path to create the archive. Unless paths were given as absolute, the paths within the archive will be relative to the `root` path.
path/to/archive/...
/another/path/to/archive/...
For absolute paths added to this archive, the leading ‘/` will be preserved. Take note that when archives are extracted, leading `/` are stripped by default, so care must be taken when extracting archives with mixed relative/absolute paths.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/backup/remote_archive.rb', line 72 def initialize(model, name, &block) @model = model @name = name.to_s @options = { :sudo => false, :root => false, :paths => [], :excludes => [], :tar_options => '' } DSL.new(@options).instance_eval(&block) # self.server_host = @options[:server_host] self.server_ssh_user = @options[:server_ssh_user] self.server_ssh_password = @options[:server_ssh_password] end |
Instance Attribute Details
#server_backup_path ⇒ Object
Returns the value of attribute server_backup_path.
24 25 26 |
# File 'lib/backup/remote_archive.rb', line 24 def server_backup_path @server_backup_path end |
#server_host ⇒ Object
server options
20 21 22 |
# File 'lib/backup/remote_archive.rb', line 20 def server_host @server_host end |
#server_ssh_key ⇒ Object
Returns the value of attribute server_ssh_key.
23 24 25 |
# File 'lib/backup/remote_archive.rb', line 23 def server_ssh_key @server_ssh_key end |
#server_ssh_password ⇒ Object
Returns the value of attribute server_ssh_password.
22 23 24 |
# File 'lib/backup/remote_archive.rb', line 22 def server_ssh_password @server_ssh_password end |
#server_ssh_user ⇒ Object
Returns the value of attribute server_ssh_user.
21 22 23 |
# File 'lib/backup/remote_archive.rb', line 21 def server_ssh_user @server_ssh_user end |
Instance Method Details
#perform! ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/backup/remote_archive.rb', line 91 def perform! Logger.info "Creating Archive '#{ name }'..." # path = File.join(Config.tmp_path, @model.trigger, 'archives') FileUtils.mkdir_p(path) # remote = Backup::Remote::Command.new pipeline = Pipeline.new with_files_from(paths_to_package) do |files_from| # upload to server res_upload = remote.ssh_upload_file(server_host, server_ssh_user, server_ssh_password, files_from, files_from) if res_upload[:res]==0 raise 'Cannot upload file from server - #{files_from}' end # pipeline.add( "#{ tar_command } #{ } -cPf -#{ tar_root } " + "#{ paths_to_exclude } -T '#{ files_from }'", tar_success_codes ) extension = 'tar' @model.compressor.compress_with do |command, ext| pipeline << command extension << ext end if @model.compressor # archive_file = File.join(path, "#{ name }.#{ extension }") remote_archive_file = File.join('/tmp', "#{ name }.#{ extension }") pipeline << "#{ utility(:cat) } > '#{ remote_archive_file }'" #pipeline.run # generate backup on remote server cmd_remote = pipeline.commands.join(" | ") #puts "remote cmd: #{cmd_remote}" #exit res_generate = remote.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, cmd_remote) if res_generate[:res]==0 raise 'Cannot create backup on server' end # download backup res_download = remote.ssh_download_file(server_host, server_ssh_user, server_ssh_password, remote_archive_file, archive_file) #puts "res: #{res_download}" if res_download[:res]==0 raise 'Cannot download file from server' end # delete archive on server res_delete = remote.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, "rm #{remote_archive_file}") end Logger.info "Archive '#{ name }' Complete!" #if pipeline.success? # Logger.info "Archive '#{ name }' Complete!" #else # raise Error, "Failed to Create Archive '#{ name }'\n" + pipeline.error_messages #end end |