smart_proxy_remote_execution_ssh 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZmFjY2VkY2YyMTZhNmM4MTQ1ZGI5NTA3ZTRjMDIzYTZiNzFmNzU5Mg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWRkNzJjZDdjNWMyNTI4NTA2NDI0NDAyZWI4ZmY5MjVkM2E5Njk5Yw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Y2IwYTA4OTgwYTcxMjEzODg4NDRjYWQwODE0NWEwM2QxN2ZlZDlkYmI0MDEz
|
10
|
+
OGZkOGM0Y2M2NjZlNjg1ODJkNmFmYmJmMjU2MWE4NjllOWNkZDVkY2U3YWZi
|
11
|
+
NWZkNTBlM2I5ZDgwNDU5YWU2YTVkMGQ0MTM0YzJlYzA5MjE2MWE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
M2IzMGY4ZDI2NjA5ZGEyMTk3YWM5NGEyODNkMjFlYjk2ZWUwOTkwMzAyNTc5
|
14
|
+
YTJlODIyMmM4N2JhODIwY2M5NzE4YzA5NWI2ZWEwZjFlNDAwYTY3NzRkNDli
|
15
|
+
MGU0OTBhMzQ0ZDU4ZDA1MzcwYmI3Y2IxZjA2YzBkN2JlMDNiNTM=
|
@@ -17,13 +17,7 @@ module Proxy::RemoteExecution::Ssh
|
|
17
17
|
when nil
|
18
18
|
init_run
|
19
19
|
when CommandUpdate
|
20
|
-
|
21
|
-
output[:result].concat(update.buffer_to_hash)
|
22
|
-
if update.exit_status
|
23
|
-
finish_run(update)
|
24
|
-
else
|
25
|
-
suspend
|
26
|
-
end
|
20
|
+
process_update(event)
|
27
21
|
when Dynflow::Action::Cancellable::Cancel
|
28
22
|
kill_run
|
29
23
|
when Dynflow::Action::Skip
|
@@ -32,9 +26,8 @@ module Proxy::RemoteExecution::Ssh
|
|
32
26
|
raise "Unexpected event #{event.inspect}"
|
33
27
|
end
|
34
28
|
rescue => e
|
35
|
-
action_logger.error
|
36
|
-
|
37
|
-
output[:exit_status] = "PROXY_ERROR"
|
29
|
+
action_logger.error(e)
|
30
|
+
process_update(CommandUpdate.new(CommandUpdate.encode_exception("Proxy error", e)))
|
38
31
|
end
|
39
32
|
|
40
33
|
def finalize
|
@@ -72,6 +65,15 @@ module Proxy::RemoteExecution::Ssh
|
|
72
65
|
output[:exit_status] = update.exit_status
|
73
66
|
end
|
74
67
|
|
68
|
+
def process_update(update)
|
69
|
+
output[:result].concat(update.buffer_to_hash)
|
70
|
+
if update.exit_status
|
71
|
+
finish_run(update)
|
72
|
+
else
|
73
|
+
suspend
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
75
77
|
def failed_run?
|
76
78
|
output[:exit_status] != 0
|
77
79
|
end
|
@@ -22,9 +22,9 @@ module Proxy::RemoteExecution::Ssh
|
|
22
22
|
def async_run(command)
|
23
23
|
started = false
|
24
24
|
session.open_channel do |channel|
|
25
|
-
channel.on_data { |ch, data| yield CommandUpdate::StdoutData.new(data) }
|
25
|
+
channel.on_data { |ch, data| yield CommandUpdate::StdoutData.new(handle_encoding(data)) }
|
26
26
|
|
27
|
-
channel.on_extended_data { |ch, type, data| yield CommandUpdate::StderrData.new(data) }
|
27
|
+
channel.on_extended_data { |ch, type, data| yield CommandUpdate::StderrData.new(handle_encoding(data)) }
|
28
28
|
|
29
29
|
# standard exit of the command
|
30
30
|
channel.on_request("exit-status") { |ch, data| yield CommandUpdate::StatusData.new(data.read_long) }
|
@@ -120,6 +120,14 @@ module Proxy::RemoteExecution::Ssh
|
|
120
120
|
|
121
121
|
private
|
122
122
|
|
123
|
+
def handle_encoding(data)
|
124
|
+
if data.is_a? String
|
125
|
+
data.force_encoding('UTF-8')
|
126
|
+
else
|
127
|
+
data
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
123
131
|
def session
|
124
132
|
@session ||= begin
|
125
133
|
@logger.debug("opening session to #{@user}@#{@host}")
|
@@ -30,7 +30,14 @@ module Proxy::RemoteExecution::Ssh
|
|
30
30
|
end
|
31
31
|
output_path = File.join(File.dirname(remote_script), 'output')
|
32
32
|
|
33
|
-
|
33
|
+
# pipe the output to tee while capturing the exit code
|
34
|
+
script = <<-SCRIPT
|
35
|
+
exec 4>&1
|
36
|
+
exit_code=`((#{su_prefix}#{remote_script}; echo $?>&3 ) | /usr/bin/tee #{output_path} ) 3>&1 >&4`
|
37
|
+
exec 4>&-
|
38
|
+
exit $exit_code
|
39
|
+
SCRIPT
|
40
|
+
@connector.async_run(script) do |data|
|
34
41
|
@command_buffer << data
|
35
42
|
end
|
36
43
|
rescue => e
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smart_proxy_remote_execution_ssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Nečas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|