backup-remote 0.0.16 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6162739675f6b4821155caf28c60e1fec69f9cec
4
- data.tar.gz: 7025b3537b82c39ee76745a901a17cb20ae4efb7
3
+ metadata.gz: 60dcb5cc5bb3e4b58fa3c5ee62da0b1c75eac09e
4
+ data.tar.gz: c4ab9f0eebfd1cb916159ef874159e8ccb6f1bc5
5
5
  SHA512:
6
- metadata.gz: 1e0f6c25f973fecf29c4bc5809a3cab8512bce0dcc51f37f5f0e3a673b17e3dba4478532e1e36f224f8008737e624f74741393ea47823ef7fd550199556fd74e
7
- data.tar.gz: bed9ee7905040dfdc5fc0f3cbf98a78225f64ac8824033a2d1935d1796f15e02f870f5a69c334becf42ca14a45e58dd9f85604819baa9ffd0dd51b045254823a
6
+ metadata.gz: 6ed749efeaded026be7c9eb989ac2c9fa8c9429aee4a852bfc2d0ee5dd77d25f69bd0e92e344ce9d4d6799f9289f4d36c0ea7deb8c27fb65460c6d8bbb870e3e
7
+ data.tar.gz: dfaaab1e3547f58fd5c37204cdc6293cd151870b25ac97556a9c8d40bf68069e640cdc26aa55b0a53944822aafef7c67b214810aa000d953e1e6fef8ecd3d1ed
@@ -15,9 +15,12 @@ module Backup
15
15
 
16
16
  # server options
17
17
  attr_accessor :server_host
18
+ attr_accessor :server_ssh_options
19
+ attr_accessor :server_ssh_port
18
20
  attr_accessor :server_ssh_user
19
21
  attr_accessor :server_ssh_password
20
22
  attr_accessor :server_ssh_key
23
+
21
24
  attr_accessor :server_backup_path
22
25
 
23
26
 
@@ -93,6 +96,8 @@ module Backup
93
96
  def perform!
94
97
  super
95
98
 
99
+ # prepare
100
+ build_server_ssh_options
96
101
 
97
102
  #
98
103
  pipeline = Pipeline.new
@@ -114,17 +119,18 @@ module Backup
114
119
  # generate backup on remote server
115
120
  cmd_remote = pipeline.commands.join(" | ")
116
121
 
122
+
117
123
  remote = Backup::Remote::Command.new
118
- res_generate = remote.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, cmd_remote)
124
+ res_generate = remote.run_ssh_cmd(server_host, server_ssh_options, cmd_remote)
119
125
 
120
126
  if res_generate[:res]==0
121
- raise 'Cannot create backup on server'
127
+ raise "Cannot create backup on server. #{res_generate[:error]}"
122
128
  end
123
129
 
124
130
  # download backup
125
131
  dump_file = File.join(dump_path, dump_filename+"."+dump_ext)
126
132
 
127
- res_download = remote.ssh_download_file(server_host, server_ssh_user, server_ssh_password, dump_remote_file, dump_file)
133
+ res_download = remote.ssh_download_file(server_host, server_ssh_options, dump_remote_file, dump_file)
128
134
 
129
135
  if res_download[:res]==0
130
136
  raise 'Cannot download file from server'
@@ -142,11 +148,30 @@ module Backup
142
148
  #end
143
149
  end
144
150
 
151
+ def build_server_ssh_options
152
+ ssh_options = {}
153
+ v = self.server_ssh_user
154
+ ssh_options[:user] = v if v
155
+
156
+
157
+ v = self.server_ssh_password
158
+ ssh_options[:password] = v if v
159
+
160
+ v = self.server_ssh_key
161
+ ssh_options[:key] = v if v
162
+
163
+ v = self.server_ssh_port
164
+ ssh_options[:port] = v if v
165
+
166
+
167
+ self.server_ssh_options = ssh_options
168
+ end
169
+
145
170
  private
146
171
 
147
172
  def mysqldump
148
173
  #"#{ utility(:mysqldump) } #{ user_options } #{ credential_options } " +
149
- u = utility_remote(:mysqldump, server_host, server_ssh_user, server_ssh_password)
174
+ u = utility_remote(:mysqldump)
150
175
  "#{u} #{ user_options } #{ credential_options } " +
151
176
  "#{ connectivity_options } #{ name_option } " +
152
177
  "#{ tables_to_dump } #{ tables_to_skip }"
@@ -11,12 +11,23 @@ module Backup
11
11
  include SSHKit::DSL
12
12
 
13
13
 
14
- def run_ssh_cmd(hostname, ssh_user, ssh_pass, cmd)
15
- #cmd = "bash -c 'whoami'"
14
+ def self.build_sshkit_host(hostname, ssh_options)
15
+ puts "DEBUG: #{ssh_options}"
16
+ ssh_user = ssh_options[:user]
17
+ ssh_pass = ssh_options[:password]
18
+ ssh_key = ssh_options[:key]
16
19
 
17
- #puts "run ssh cmd: #{hostname}, #{ssh_user}, #{ssh_pass}, #{cmd}"
18
20
  host = SSHKit::Host.new({hostname: hostname, user: ssh_user})
19
- host.password = ssh_pass
21
+ host.port = ssh_options[:port] || 22
22
+ host.key = ssh_key if ssh_key
23
+ host.password = ssh_pass if ssh_pass
24
+
25
+ host
26
+ end
27
+
28
+ def run_ssh_cmd(hostname, ssh_options, cmd)
29
+ #puts "run ssh cmd: #{hostname}, #{ssh_user}, #{ssh_pass}, #{cmd}"
30
+ host = Command.build_sshkit_host(hostname, ssh_options)
20
31
 
21
32
  #srv = ssh_user+'@'+hostname
22
33
  all_servers = [host]
@@ -43,7 +54,7 @@ module Backup
43
54
  return { res: 1, output: output }
44
55
 
45
56
  rescue => e
46
- #puts "ssh error: #{e.message}, #{e.backtrace}"
57
+ puts "ssh error: #{e.message}, #{e.backtrace}"
47
58
 
48
59
  {
49
60
  res: 0,
@@ -82,12 +93,17 @@ module Backup
82
93
 
83
94
 
84
95
 
85
- def ssh_download_file(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
86
- return ssh_download_file_sshkit(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
96
+ def ssh_download_file(hostname, ssh_options, remote_filename, dest_filename)
97
+ return ssh_download_file_sshkit(hostname, ssh_options, remote_filename, dest_filename)
87
98
  #return ssh_download_file_scp(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
88
99
  end
89
100
 
90
- def ssh_download_file_scp(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
101
+ def ssh_download_file_scp(hostname, ssh_options, remote_filename, dest_filename)
102
+ ssh_user = ssh_options[:ssh_user]
103
+ ssh_pass = ssh_options[:ssh_password]
104
+ ssh_key = ssh_options[:ssh_key]
105
+
106
+ # work
91
107
  Net::SCP.download!(hostname, ssh_user, remote_filename, dest_filename, :ssh => { :password => ssh_pass })
92
108
 
93
109
  #
@@ -101,9 +117,8 @@ module Backup
101
117
  end
102
118
 
103
119
  # !! NOT work on big files > 4Gb
104
- def ssh_download_file_sshkit(hostname, ssh_user, ssh_pass, remote_filename, dest_filename)
105
- host = SSHKit::Host.new("#{ssh_user}@#{hostname}")
106
- host.password = ssh_pass
120
+ def ssh_download_file_sshkit(hostname, ssh_options, remote_filename, dest_filename)
121
+ host = Command.build_sshkit_host(hostname, ssh_options)
107
122
 
108
123
  on host do |host|
109
124
  download! remote_filename, dest_filename
@@ -119,9 +134,8 @@ module Backup
119
134
  }
120
135
  end
121
136
 
122
- def ssh_upload_file(hostname, ssh_user, ssh_pass, source_file, dest_file, handler=nil)
123
- host = SSHKit::Host.new("#{ssh_user}@#{hostname}")
124
- host.password = ssh_pass
137
+ def ssh_upload_file(hostname, ssh_options, source_file, dest_file, handler=nil)
138
+ host = Command.build_sshkit_host(hostname, ssh_options)
125
139
 
126
140
  # scp
127
141
  f_temp = "/tmp/#{SecureRandom.uuid}"
@@ -18,9 +18,7 @@ module Backup
18
18
 
19
19
  # server options
20
20
  attr_accessor :server_host
21
- attr_accessor :server_ssh_user
22
- attr_accessor :server_ssh_password
23
- attr_accessor :server_ssh_key
21
+ attr_accessor :server_ssh_options
24
22
  attr_accessor :server_backup_path
25
23
 
26
24
 
@@ -29,7 +27,7 @@ module Backup
29
27
  # Adds a new Archive to a Backup Model.
30
28
  #
31
29
  # Backup::Model.new(:my_backup, 'My Backup') do
32
- # archive :my_archive do |archive|
30
+ # remote_archive :my_archive do |archive|
33
31
  # archive.add 'path/to/archive'
34
32
  # archive.add '/another/path/to/archive'
35
33
  # archive.exclude 'path/to/exclude'
@@ -82,10 +80,23 @@ module Backup
82
80
 
83
81
  DSL.new(@options).instance_eval(&block)
84
82
 
85
- #
83
+ # server options
86
84
  self.server_host = @options[:server_host]
87
- self.server_ssh_user = @options[:server_ssh_user]
88
- self.server_ssh_password = @options[:server_ssh_password]
85
+ ssh_options = {}
86
+ v = @options[:server_ssh_user]
87
+ ssh_options[:user] = v if v
88
+
89
+ v = @options[:server_ssh_password]
90
+ ssh_options[:password] = v if v
91
+
92
+ v = @options[:server_ssh_key]
93
+ ssh_options[:key] = v if v
94
+
95
+ v = @options[:server_ssh_port]
96
+ ssh_options[:port] = v if v
97
+
98
+
99
+ self.server_ssh_options = ssh_options
89
100
  end
90
101
 
91
102
  def perform!
@@ -102,7 +113,7 @@ module Backup
102
113
  pipeline = Pipeline.new
103
114
  with_files_from(paths_to_package) do |files_from|
104
115
  # upload to server
105
- res_upload = remote.ssh_upload_file(server_host, server_ssh_user, server_ssh_password, files_from, files_from)
116
+ res_upload = remote.ssh_upload_file(server_host, server_ssh_options, files_from, files_from)
106
117
 
107
118
  if res_upload[:res]==0
108
119
  raise "Cannot upload file to server - #{files_from}"
@@ -136,14 +147,14 @@ module Backup
136
147
  #exit
137
148
 
138
149
 
139
- res_generate = remote.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, cmd_remote)
150
+ res_generate = remote.run_ssh_cmd(server_host, server_ssh_options, cmd_remote)
140
151
 
141
152
  if res_generate[:res]==0
142
153
  raise 'Cannot create backup on server'
143
154
  end
144
155
 
145
156
  # download backup
146
- res_download = remote.ssh_download_file(server_host, server_ssh_user, server_ssh_password, remote_archive_file, archive_file)
157
+ res_download = remote.ssh_download_file(server_host, server_ssh_options, remote_archive_file, archive_file)
147
158
 
148
159
  #puts "res: #{res_download}"
149
160
 
@@ -152,7 +163,7 @@ module Backup
152
163
  end
153
164
 
154
165
  # delete archive on server
155
- res_delete = remote.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, "rm #{remote_archive_file}")
166
+ res_delete = remote.run_ssh_cmd(server_host, server_ssh_options, "rm #{remote_archive_file}")
156
167
 
157
168
  end
158
169
 
@@ -223,12 +234,19 @@ module Backup
223
234
  @options[:server_host] = val
224
235
  end
225
236
 
237
+ def server_ssh_port=(val = true)
238
+ @options[:server_ssh_port] = val
239
+ end
240
+
226
241
  def server_ssh_user=(val = true)
227
242
  @options[:server_ssh_user] = val
228
243
  end
229
244
  def server_ssh_password=(val = true)
230
245
  @options[:server_ssh_password] = val
231
246
  end
247
+ def server_ssh_key=(val = true)
248
+ @options[:server_ssh_key] = val
249
+ end
232
250
 
233
251
  ###
234
252
  def use_sudo(val = true)
@@ -18,9 +18,8 @@ module Backup
18
18
 
19
19
  # server options
20
20
  attr_accessor :server_host
21
- attr_accessor :server_ssh_user
22
- attr_accessor :server_ssh_password
23
- attr_accessor :server_ssh_key
21
+ attr_accessor :server_ssh_options
22
+
24
23
  attr_accessor :server_path
25
24
  attr_accessor :server_command
26
25
  attr_accessor :script
@@ -43,10 +42,27 @@ module Backup
43
42
 
44
43
  DSL.new(@options).instance_eval(&block)
45
44
 
46
- #
45
+ # ssh options
47
46
  self.server_host = @options[:server_host]
48
- self.server_ssh_user = @options[:server_ssh_user]
49
- self.server_ssh_password = @options[:server_ssh_password]
47
+
48
+ # server options
49
+ ssh_options = {}
50
+ v = @options[:server_ssh_user]
51
+ ssh_options[:user] = v if v
52
+
53
+ v = @options[:server_ssh_password]
54
+ ssh_options[:password] = v if v
55
+
56
+ v = @options[:server_ssh_key]
57
+ ssh_options[:key] = v if v
58
+
59
+ v = @options[:server_ssh_port]
60
+ ssh_options[:port] = v if v
61
+
62
+
63
+ self.server_ssh_options = ssh_options
64
+
65
+ # server options
50
66
  self.server_path = @options[:server_path]
51
67
  self.server_command = @options[:server_command]
52
68
  self.script = @options[:script]
@@ -82,27 +98,23 @@ module Backup
82
98
 
83
99
  Logger.info "upload script #{local_script_path} --> #{remote_script_path}"
84
100
 
85
- remote.ssh_upload_file(server_host, server_ssh_user, server_ssh_password, local_script_path, remote_script_path)
101
+ remote.ssh_upload_file(server_host, server_ssh_options, local_script_path, remote_script_path)
86
102
 
87
103
  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)
104
+ res_generate = remote.run_ssh_cmd(server_host, server_ssh_options, cmd_remote)
91
105
 
92
106
  # delete temp script
93
107
  cmd_delete = "rm -rf #{remote_script_path}"
94
- res_delete = remote.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, cmd_delete)
108
+ res_delete = remote.run_ssh_cmd(server_host, server_ssh_options, cmd_delete)
95
109
 
96
110
  else
97
111
  # use command
98
112
  cmd_remote = server_command
99
- res_generate = remote.run_ssh_cmd(
100
- server_host, server_ssh_user, server_ssh_password,
101
- cmd_remote)
113
+ res_generate = remote.run_ssh_cmd(server_host, server_ssh_options, cmd_remote)
102
114
  end
103
115
 
104
116
  if res_generate[:res]==0
105
- raise 'Cannot create backup on server'
117
+ raise "Cannot create backup on server: #{res_generate[:error]}"
106
118
  end
107
119
 
108
120
 
@@ -119,18 +131,14 @@ module Backup
119
131
  # download backup
120
132
  Logger.info "download from #{remote_archive_file} to #{temp_local_file}"
121
133
 
122
- res_download = remote.ssh_download_file(
123
- server_host, server_ssh_user, server_ssh_password,
124
- remote_archive_file, temp_local_file)
134
+ res_download = remote.ssh_download_file(server_host, server_ssh_options, remote_archive_file, temp_local_file)
125
135
 
126
136
  if res_download[:res]==0
127
137
  raise 'Cannot download file from server'
128
138
  end
129
139
 
130
140
  # 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}")
141
+ res_delete = remote.run_ssh_cmd(server_host, server_ssh_options, "rm #{remote_archive_file}")
134
142
 
135
143
 
136
144
  # process archive locally
@@ -232,12 +240,20 @@ module Backup
232
240
  @options[:server_host] = val
233
241
  end
234
242
 
243
+ def server_ssh_port=(val = true)
244
+ @options[:server_ssh_port] = val
245
+ end
246
+
235
247
  def server_ssh_user=(val = true)
236
248
  @options[:server_ssh_user] = val
237
249
  end
238
250
  def server_ssh_password=(val = true)
239
251
  @options[:server_ssh_password] = val
240
252
  end
253
+ def server_ssh_key=(val = true)
254
+ @options[:server_ssh_key] = val
255
+ end
256
+
241
257
 
242
258
  def server_command=(val = true)
243
259
  @options[:server_command] = val
@@ -226,16 +226,13 @@ module Backup
226
226
  ##
227
227
  # Returns the full path to the specified utility.
228
228
  # Raises an error if utility can not be found in the system's $PATH
229
- def utility_remote(name, hostname, server_ssh_user, server_ssh_password)
229
+ def utility_remote(name)
230
230
  name = name.to_s.strip
231
231
  raise Error, 'Utility Name Empty' if name.empty?
232
232
 
233
233
  req = Backup::Remote::Command.new
234
- #req.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, "whoami")
235
- #req.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, "which ruby")
236
-
237
234
  cmd = %Q(which '#{ name }' 2>/dev/null)
238
- res = req.run_ssh_cmd(server_host, server_ssh_user, server_ssh_password, cmd)
235
+ res = req.run_ssh_cmd(server_host, server_ssh_options, cmd)
239
236
  output = res[:output].chomp
240
237
 
241
238
  raise Error, <<-EOS if res[:res]==0 || output.empty?
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Backup
4
- VERSION = '0.0.16'
4
+ VERSION = '0.0.17'
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.16
4
+ version: 0.0.17
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: 2017-04-10 00:00:00.000000000 Z
11
+ date: 2017-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: CFPropertyList