caterer 0.1.0 → 0.1.1
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.
@@ -1,13 +1,49 @@
|
|
1
|
+
require 'pty'
|
2
|
+
|
1
3
|
module Caterer
|
2
4
|
module Communication
|
3
5
|
class Rsync
|
4
6
|
|
5
7
|
def initialize(server)
|
6
|
-
@server
|
7
|
-
@logger
|
8
|
+
@server = server
|
9
|
+
@logger = Log4r::Logger.new("caterer::communication::ssh")
|
8
10
|
end
|
9
11
|
|
10
|
-
|
12
|
+
def sync(from, to)
|
13
|
+
PTY.spawn(rsync_cmd(from, to)) do |stdout, stdin|
|
14
|
+
eof = false
|
15
|
+
until eof do
|
16
|
+
begin
|
17
|
+
out = stdout.readpartial(4096)
|
18
|
+
if out.match /password:/
|
19
|
+
stdin.puts @server.password
|
20
|
+
else
|
21
|
+
print out if print_worthy out
|
22
|
+
end
|
23
|
+
rescue EOFError
|
24
|
+
eof = true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
|
32
|
+
def print_worthy(data)
|
33
|
+
[
|
34
|
+
/^\r\n$/, # empty lines
|
35
|
+
/^Warning: Permanently added/, # key added nonsense
|
36
|
+
].each do |cruft|
|
37
|
+
if data.match cruft
|
38
|
+
return false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
true
|
42
|
+
end
|
43
|
+
|
44
|
+
def rsync_cmd(from, to)
|
45
|
+
"rsync -zr -e 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p #{@server.port}' --delete #{from} #{@server.username}@#{@server.host}:#{to}"
|
46
|
+
end
|
11
47
|
|
12
48
|
end
|
13
49
|
end
|
@@ -134,24 +134,32 @@ module Caterer
|
|
134
134
|
ch.exec(shell) do |ch2, _|
|
135
135
|
# Setup the channel callbacks so we can get data and exit status
|
136
136
|
ch2.on_data do |ch3, data|
|
137
|
+
|
137
138
|
@logger.debug("stdout: #{data}")
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
139
|
+
|
140
|
+
# Filter out the clear screen command
|
141
|
+
data = remove_ansi_escape_codes(data)
|
142
|
+
# Filter annoying messages
|
143
|
+
data = remove_cruft(data)
|
144
|
+
|
145
|
+
yield :stdout, data if block_given?
|
146
|
+
|
143
147
|
if opts[:stream]
|
144
148
|
@server.ui.info data, {:prefix => false, :new_line => false}
|
145
149
|
end
|
146
150
|
end
|
147
151
|
|
148
152
|
ch2.on_extended_data do |ch3, type, data|
|
153
|
+
|
149
154
|
@logger.debug("stderr: #{data}")
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
+
|
156
|
+
# Filter out the clear screen command
|
157
|
+
data = remove_ansi_escape_codes(data)
|
158
|
+
# Filter annoying messages
|
159
|
+
data = remove_cruft(data)
|
160
|
+
|
161
|
+
yield :stderr, data if block_given?
|
162
|
+
|
155
163
|
if opts[:stream]
|
156
164
|
@server.ui.info data, {:prefix => false, :new_line => false}
|
157
165
|
end
|
@@ -180,6 +188,13 @@ module Caterer
|
|
180
188
|
return exit_status
|
181
189
|
end
|
182
190
|
|
191
|
+
def remove_cruft(string)
|
192
|
+
["stdin: is not a tty\n"].each do |m|
|
193
|
+
string.gsub! m, ''
|
194
|
+
end
|
195
|
+
string
|
196
|
+
end
|
197
|
+
|
183
198
|
end
|
184
199
|
end
|
185
200
|
end
|
@@ -83,17 +83,22 @@ module Caterer
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def cleanup
|
86
|
-
server.ssh.sudo "rm -rf #{base_path}", :stream => true
|
86
|
+
# server.ssh.sudo "rm -rf #{base_path}", :stream => true
|
87
87
|
end
|
88
88
|
|
89
89
|
protected
|
90
90
|
|
91
91
|
def upload_directory(from, to)
|
92
92
|
if File.exists? from
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
93
|
+
if @server.can_rsync?
|
94
|
+
from += "/" if not from.match /\/$/
|
95
|
+
@server.rsync.sync(from, to)
|
96
|
+
else
|
97
|
+
unique = Digest::MD5.hexdigest(from)
|
98
|
+
server.ssh.upload from, "#{to}/#{unique}"
|
99
|
+
server.ssh.sudo "mv #{to}/#{unique}/* #{to}/", :stream => true
|
100
|
+
server.ssh.sudo "rm -rf #{to}/#{unique}", :stream => true
|
101
|
+
end
|
97
102
|
end
|
98
103
|
end
|
99
104
|
|
@@ -114,7 +119,7 @@ module Caterer
|
|
114
119
|
end
|
115
120
|
|
116
121
|
def data_bags_path
|
117
|
-
"#{base_path}/data_bags"
|
122
|
+
"#{base_path}/data_bags"
|
118
123
|
end
|
119
124
|
|
120
125
|
def config_bootstrap
|
data/lib/caterer/server.rb
CHANGED
data/lib/caterer/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caterer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: log4r
|