CloudyScripts 0.0.7 → 0.0.8
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.
- data/Rakefile +1 -1
- data/lib/help/remote_command_handler.rb +55 -34
- metadata +1 -1
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ require 'rake/testtask'
|
|
12
12
|
|
13
13
|
spec = Gem::Specification.new do |s|
|
14
14
|
s.name = 'CloudyScripts'
|
15
|
-
s.version = '0.0.
|
15
|
+
s.version = '0.0.8'
|
16
16
|
s.has_rdoc = true
|
17
17
|
s.extra_rdoc_files = ['README.rdoc', 'LICENSE']
|
18
18
|
s.summary = 'Scripts to facilitate programming for infrastructure clouds.'
|
@@ -106,19 +106,13 @@ class RemoteCommandHandler
|
|
106
106
|
# When #raise_exception is set, an exception will be raised instead of
|
107
107
|
# returning false.
|
108
108
|
def self.remote_execute(ssh_session, logger, exec_string, push_data = nil, raise_exception = false)
|
109
|
-
logger.debug("RemoteCommandHandler: going to execute #{exec_string}")
|
110
|
-
result = true
|
111
109
|
exec_string = "echo #{push_data} >tmp.txt; #{exec_string} <tmp.txt; rm -f tmp.txt" unless push_data == nil
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
end
|
119
|
-
ssh_session.loop
|
120
|
-
logger.info output unless logger == nil
|
121
|
-
raise Exception.new("RemoteCommandHandler: #{exec_string} lead to stderr message: #{output}") unless result == true || raise_exception == false
|
110
|
+
stdout = []
|
111
|
+
stderr = []
|
112
|
+
result = remote_exec_helper(ssh_session, exec_string, stdout, stderr, logger)
|
113
|
+
em = "RemoteCommandHandler: #{exec_string} lead to stderr message: #{stderr.join().strip}"
|
114
|
+
logger.info(em) unless stderr.size == 0
|
115
|
+
raise Exception.new(em) unless result == true || raise_exception == false
|
122
116
|
result
|
123
117
|
end
|
124
118
|
|
@@ -129,21 +123,12 @@ class RemoteCommandHandler
|
|
129
123
|
# in stdout contains the specified #search_string, the method returns true
|
130
124
|
# otherwise false. Output to stderr will be logged.
|
131
125
|
def self.stdout_contains?(ssh_session, logger, exec_string, search_string = "", push_data = nil)
|
132
|
-
|
126
|
+
exec_string = "echo #{push_data} >tmp.txt; #{exec_string} <tmp.txt; rm -f tmp.txt" unless push_data == nil
|
133
127
|
stdout = []
|
134
128
|
stderr = []
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
stdout << data
|
139
|
-
end
|
140
|
-
if stream == :stderr && data != nil
|
141
|
-
stderr << data
|
142
|
-
end
|
143
|
-
end
|
144
|
-
ssh_session.loop
|
145
|
-
logger.info("RemoteCommandHandler: #{exec_string} lead to stderr message: #{stderr.join("\n")}") unless stderr.size == 0
|
146
|
-
stdout.join("\n").include?(search_string)
|
129
|
+
remote_exec_helper(ssh_session, exec_string, stdout, stderr, logger)
|
130
|
+
logger.info("RemoteCommandHandler: #{exec_string} lead to stderr message: #{stderr.join().strip}") unless stderr.size == 0
|
131
|
+
stdout.join().include?(search_string)
|
147
132
|
end
|
148
133
|
|
149
134
|
# Executes the specified #exec_string on a remote session specified as #ssh_session.
|
@@ -153,17 +138,53 @@ class RemoteCommandHandler
|
|
153
138
|
# also written into those arrays.
|
154
139
|
def self.get_output(ssh_session, exec_string, push_data = nil, stdout = [], stderr = [])
|
155
140
|
exec_string = "echo #{push_data} >tmp.txt; #{exec_string} <tmp.txt; rm -f tmp.txt" unless push_data == nil
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
141
|
+
stdout = []
|
142
|
+
stderr = []
|
143
|
+
remote_exec_helper(ssh_session, exec_string, stdout, stderr)
|
144
|
+
stdout.join()
|
145
|
+
end
|
146
|
+
|
147
|
+
private
|
148
|
+
|
149
|
+
# Executes the specified #exec_string on a remote session specified as #ssh_session
|
150
|
+
# and logs the command-output into the specified #logger.
|
151
|
+
# The method will return true if nothing was written into stderr, otherwise false.
|
152
|
+
# All stdout-data is written into #stdout, all stderr-data is written into #stderr
|
153
|
+
def self.remote_exec_helper(ssh_session, exec_string, stdout = [], stderr = [], logger = nil, debug = false)
|
154
|
+
result = true
|
155
|
+
the_channel = ssh_session.open_channel do |channel|
|
156
|
+
channel.exec(exec_string) do |ch, success|
|
157
|
+
if success
|
158
|
+
logger.debug("RemoteCommandHandler: starts executing #{exec_string}") if logger != nil && debug
|
159
|
+
ch.on_data() do |ch, data|
|
160
|
+
stdout << data unless data == nil
|
161
|
+
end
|
162
|
+
ch.on_extended_data do |ch, type, data|
|
163
|
+
stderr << data unless data == nil
|
164
|
+
result = false
|
165
|
+
end
|
166
|
+
ch.on_eof do |ch|
|
167
|
+
logger.debug("RemoteCommandHandler.on_eof:remote end is done sending data") if logger != nil && debug
|
168
|
+
end
|
169
|
+
ch.on_close do |ch|
|
170
|
+
logger.debug("RemoteCommandHandler.on_close:remote end is closing!") if logger != nil && debug
|
171
|
+
end
|
172
|
+
ch.on_open_failed do |ch, code, desc|
|
173
|
+
logger.debug("RemoteCommandHandler.on_open_failed: code=#{code} desc=#{desc}") if logger != nil && debug
|
174
|
+
end
|
175
|
+
ch.on_process do |ch|
|
176
|
+
logger.debug("RemoteCommandHandler.on_process; send line-feed/sleep") if logger != nil && debug
|
177
|
+
sleep(1)
|
178
|
+
ch.send_data("\n")
|
179
|
+
end
|
180
|
+
else
|
181
|
+
stderr << "the remote command could not be invoked!"
|
182
|
+
result = false
|
183
|
+
end
|
162
184
|
end
|
163
185
|
end
|
164
|
-
|
165
|
-
|
186
|
+
the_channel.wait
|
187
|
+
result
|
166
188
|
end
|
167
189
|
|
168
|
-
|
169
190
|
end
|