backup-remote 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f34a3a0fa7801434d9451ca9e328afdc09ff3d22
4
- data.tar.gz: d3b35356d2bca06636de49be0eee14ffcb621e73
3
+ metadata.gz: c1856e1f2cc32e862113171f5795fc98bd8bb9b3
4
+ data.tar.gz: 2ebf39b7e07c93277ebbe1d3881feb462d221306
5
5
  SHA512:
6
- metadata.gz: 5ef67d3cf1b5b005269644149ace6be149f4a2cfa3d7a9488fbfa373e49d4517224db6c53d9a8631f3f31e6b0cfe750547f20e48f17e3dae06699bc8a6e8273e
7
- data.tar.gz: fd3763f76c453a57c8164c2f7e2c3eeeeecca815e93c136ebd212b6fc664159e0b1e465967b8dae4515a7f0ebc6641608573242a9080add8f80e481e62dc0cd1
6
+ metadata.gz: 6fb154ae61155636a143ae4cde53a7921d039daaec0ced5326a3ff5ba6f6e6c630682ce8d8acd7f16b57ae508f6ea71a9df294db09ba3b48ffc61beecd53e4fe
7
+ data.tar.gz: 353db081fe46b1792c7f3ccae5eb67a641d835156f470f3f67d041d396410b223ae435c90abea44f99cc6b3309a25a4ba2157bfc2aac7fe627adaa40c29ef743
data/README.md CHANGED
@@ -71,6 +71,7 @@ Options for SSH connection:
71
71
  * server_ssh_user - user name to connect by SSH
72
72
  * server_ssh_password - not used if server_ssh-key is provided
73
73
  * server_ssh_key - (optional) - path to ssh key
74
+ * temp_dir_path - (optional) - specify temporary directory path where backup files will be downloaded. By default, it is '/tmp'
74
75
 
75
76
 
76
77
 
@@ -59,23 +59,43 @@ module Backup
59
59
  end
60
60
 
61
61
 
62
- def ssh_download_file(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
63
- host = SSHKit::Host.new("#{ssh_user}@#{hostname}")
64
- host.password = ssh_pass
65
-
66
- on host do |host|
67
- download! remote_filename, dest_filename
68
- end
69
-
70
- #
71
- return {res: 1, output: ""}
72
-
73
- rescue => e
74
- {
75
- res: 0,
76
- error: e.message
77
- }
78
- end
62
+
63
+ def ssh_download_file(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
64
+ return ssh_download_file_sshkit(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
65
+ #return ssh_download_file_scp(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
66
+ end
67
+
68
+ def ssh_download_file_scp(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
69
+ Net::SCP.download!(hostname, ssh_user, remote_filename, dest_filename, :ssh => { :password => ssh_pass })
70
+
71
+ #
72
+ return {res: 1, output: ""}
73
+
74
+ rescue => e
75
+ {
76
+ res: 0,
77
+ error: e.message
78
+ }
79
+ end
80
+
81
+ # !! NOT work on big files > 4Gb
82
+ def ssh_download_file_sshkit(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
83
+ host = SSHKit::Host.new("#{ssh_user}@#{hostname}")
84
+ host.password = ssh_pass
85
+
86
+ on host do |host|
87
+ download! remote_filename, dest_filename
88
+ end
89
+
90
+ #
91
+ return {res: 1, output: ""}
92
+
93
+ rescue => e
94
+ {
95
+ res: 0,
96
+ error: e.message
97
+ }
98
+ end
79
99
 
80
100
  def ssh_upload_file(hostname, ssh_user, ssh_pass, source_file, dest_file, handler=nil)
81
101
  host = SSHKit::Host.new("#{ssh_user}@#{hostname}")
@@ -24,6 +24,7 @@ module Backup
24
24
  attr_accessor :server_path
25
25
  attr_accessor :server_command
26
26
  attr_accessor :script
27
+ attr_accessor :temp_dir_path
27
28
 
28
29
 
29
30
 
@@ -49,6 +50,7 @@ module Backup
49
50
  self.server_path = @options[:server_path]
50
51
  self.server_command = @options[:server_command]
51
52
  self.script = @options[:script]
53
+ self.temp_dir_path = @options[:temp_dir_path] || '/tmp'
52
54
  end
53
55
 
54
56
  def perform!
@@ -64,99 +66,110 @@ module Backup
64
66
  remote = Backup::Remote::Command.new
65
67
 
66
68
 
67
- Dir.mktmpdir do |temp_dir|
68
- temp_local_file = File.join("#{temp_dir}", File.basename(server_path))
69
+ remote_archive_file = server_path
69
70
 
70
- remote_archive_file = server_path
71
+ # generate backup on remote server
72
+ remote_script = script
71
73
 
72
- # generate backup on remote server
73
- remote_script = script
74
+ if remote_script && remote_script!=""
75
+ # use script
76
+ # upload script
74
77
 
75
- if remote_script && remote_script!=""
76
- # use script
77
- # upload script
78
+ local_script_path = File.join(Config.root_path, remote_script)
78
79
 
79
- puts "config root: #{Config.root_path}"
80
- puts "config: #{Config.inspect}"
80
+ f_remote = Tempfile.new('backup')
81
+ remote_script_path = f_remote.path+"."+File.extname(local_script_path)
81
82
 
82
- local_script_path = File.join(Config.root_path, remote_script)
83
+ Logger.info "upload script #{local_script_path} --> #{remote_script_path}"
83
84
 
84
- f_remote = Tempfile.new('backup')
85
- remote_script_path = f_remote.path+"."+File.extname(local_script_path)
85
+ remote.ssh_upload_file(server_host, server_ssh_user, server_ssh_password, local_script_path, remote_script_path)
86
86
 
87
- #puts "upload script #{local_script_path} --> #{remote_script_path}"
88
- remote.ssh_upload_file(server_host, server_ssh_user, server_ssh_password, local_script_path, remote_script_path)
87
+ cmd_remote = "chmod +x #{remote_script_path} && sh #{remote_script_path}"
88
+ res_generate = remote.run_ssh_cmd(
89
+ server_host, server_ssh_user, server_ssh_password,
90
+ cmd_remote)
89
91
 
90
- cmd_remote = "chmod +x #{remote_script_path} && sh #{remote_script_path}"
91
- res_generate = remote.run_ssh_cmd(
92
- server_host, server_ssh_user, server_ssh_password,
93
- cmd_remote)
92
+ # delete temp script
93
+ cmd_delete = "rm -rf #{remote_script_path}"
94
+ res_delete = remote.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, cmd_delete)
94
95
 
95
- # delete temp script
96
- cmd_delete = "rm -rf #{remote_script_path}"
97
- res_delete = remote.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, cmd_delete)
96
+ else
97
+ # use command
98
+ cmd_remote = server_command
99
+ res_generate = remote.run_ssh_cmd(
100
+ server_host, server_ssh_user, server_ssh_password,
101
+ cmd_remote)
102
+ end
98
103
 
99
- else
100
- # use command
101
- cmd_remote = server_command
102
- res_generate = remote.run_ssh_cmd(
103
- server_host, server_ssh_user, server_ssh_password,
104
- cmd_remote)
105
- end
104
+ if res_generate[:res]==0
105
+ raise 'Cannot create backup on server'
106
+ end
106
107
 
107
- if res_generate[:res]==0
108
- raise 'Cannot create backup on server'
109
- end
110
108
 
111
- # download backup
112
- #puts "download from #{remote_archive_file} to #{temp_local_file}"
113
- res_download = remote.ssh_download_file(
114
- server_host, server_ssh_user, server_ssh_password,
115
- remote_archive_file, temp_local_file)
116
109
 
117
- if res_download[:res]==0
118
- raise 'Cannot download file from server'
119
- end
110
+ #Dir.mktmpdir do |temp_dir|
120
111
 
121
- # delete archive on server
122
- res_delete = remote.run_ssh_cmd(
123
- server_host, server_ssh_user, server_ssh_password,
124
- "rm #{remote_archive_file}")
112
+ #temp_local_file = File.join("#{temp_dir}", File.basename(server_path))
113
+
114
+ temp_local_file = File.join("#{temp_dir_path}/#{Time.now.to_i}#{rand(1000)}/", File.basename(server_path))
115
+
116
+ #path = File.expand_path "#{Dir.tmpdir}/#{Time.now.to_i}#{rand(1000)}/"
117
+ FileUtils.mkdir_p File.dirname(temp_local_file)
118
+
119
+ # download backup
120
+ Logger.info "download from #{remote_archive_file} to #{temp_local_file}"
125
121
 
122
+ res_download = remote.ssh_download_file(
123
+ server_host, server_ssh_user, server_ssh_password,
124
+ remote_archive_file, temp_local_file)
126
125
 
127
- # process archive locally
126
+ if res_download[:res]==0
127
+ raise 'Cannot download file from server'
128
+ end
129
+
130
+ # delete archive on server
131
+ res_delete = remote.run_ssh_cmd(
132
+ server_host, server_ssh_user, server_ssh_password,
133
+ "rm #{remote_archive_file}")
128
134
 
129
- pipeline = Pipeline.new
130
135
 
131
- #temp_tar_root= tar_root
132
- temp_tar_root= temp_dir
133
- pipeline.add(
134
- "#{ tar_command } #{ tar_options } -cPf - -C #{temp_tar_root } #{ File.basename(temp_local_file) }",
135
- tar_success_codes
136
- )
136
+ # process archive locally
137
137
 
138
- extension = 'tar'
139
- @model.compressor.compress_with do |command, ext|
140
- pipeline << command
141
- extension << ext
142
- end if @model.compressor
138
+ pipeline = Pipeline.new
143
139
 
144
- pipeline << "#{ utility(:cat) } > '#{ File.join(path, "#{ name }.#{ extension }") }'"
140
+ #temp_tar_root= tar_root
141
+ temp_tar_root= temp_dir_path
142
+ pipeline.add(
143
+ "#{ tar_command } #{ tar_options } -cPf - -C #{temp_tar_root } #{ File.basename(temp_local_file) }",
144
+ tar_success_codes
145
+ )
145
146
 
146
- #puts "commands: #{pipeline.commands}"
147
- #exit
147
+ extension = 'tar'
148
+ @model.compressor.compress_with do |command, ext|
149
+ pipeline << command
150
+ extension << ext
151
+ end if @model.compressor
148
152
 
149
- pipeline.run
153
+ pipeline << "#{ utility(:cat) } > '#{ File.join(path, "#{ name }.#{ extension }") }'"
150
154
 
155
+ #puts "commands: #{pipeline.commands}"
156
+ #exit
151
157
 
152
- if pipeline.success?
153
- Logger.info "Archive '#{ name }' Complete!"
154
- else
155
- raise Error, "Failed to Create Archive '#{ name }'\n" +
156
- pipeline.error_messages
157
- end
158
+ pipeline.run
158
159
 
160
+
161
+ if pipeline.success?
162
+ Logger.info "Archive '#{ name }' Complete!"
163
+ else
164
+ raise Error, "Failed to Create Archive '#{ name }'\n" +
165
+ pipeline.error_messages
159
166
  end
167
+
168
+ if File.exists?(temp_local_file)
169
+ FileUtils.rm_rf(temp_local_file)
170
+ FileUtils.rm_rf(File.dirname(temp_local_file))
171
+ end
172
+
160
173
  end
161
174
 
162
175
  private
@@ -235,6 +248,10 @@ module Backup
235
248
  @options[:server_path] = val
236
249
  end
237
250
 
251
+ def temp_dir_path=(val = true)
252
+ @options[:temp_dir_path] = val
253
+ end
254
+
238
255
  ###
239
256
  def use_sudo(val = true)
240
257
  @options[:sudo] = val
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Backup
4
- VERSION = '0.0.8'
4
+ VERSION = '0.0.9'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: backup-remote
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Ivak, Michael van Rooijen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-19 00:00:00.000000000 Z
11
+ date: 2016-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: CFPropertyList