foreman_remote_execution_core 1.0.3 → 1.0.4

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: 3216a936b41179b58d8ae81a238d2fbdaff11e56
4
- data.tar.gz: aec1f9700b5a9f7daa4fbe6259dc8e2d64943b30
3
+ metadata.gz: b8c6efad663b97320d18f4e9d571f7f2b9664192
4
+ data.tar.gz: e7e0c57fcb0b404138e550c633890f394a227fbd
5
5
  SHA512:
6
- metadata.gz: 2eadacdd4acfd582061150991734a46ac53909874379c0cf7f4562089aa32342511875773c84134c97f2e2910ae9bd94aeb21c6726c0a7652dc93ccdb808a282
7
- data.tar.gz: 6f6666aedd9474440e52a15f2927e5e279e439e75fb475e8bb9b747b921d83cb003a978b50d80596858845c06d581c51e68d59f1fc75697264a4e062cc8a8490
6
+ metadata.gz: 83be3ce8b355070f9144aad526a570de85c5705a826eb75ebe060802b5f34b62df14cba1f5d98791d6823d04a4668ce32beaa647be46cd4897319c778d9f6b63
7
+ data.tar.gz: 90e397053171e0e3aab5e539e7b6d40fa71cf995812b95956fcf4156b44ee96f639ba83b6f3814ddd813e528cafac35c8a27bc46053f0701a9992758e6ca2a35
@@ -2,7 +2,7 @@ require 'net/ssh'
2
2
 
3
3
  module ForemanRemoteExecutionCore
4
4
  class ScriptRunner < ForemanTasksCore::Runner::Base
5
- EXPECTED_POWER_ACTION_MESSAGES = ["restart host", "shutdown host"]
5
+ EXPECTED_POWER_ACTION_MESSAGES = ['restart host', 'shutdown host'].freeze
6
6
 
7
7
  def initialize(options)
8
8
  super()
@@ -26,16 +26,18 @@ module ForemanRemoteExecutionCore
26
26
  exit_code_path = File.join(File.dirname(remote_script), 'exit_code')
27
27
 
28
28
  # pipe the output to tee while capturing the exit code in a file
29
- script = <<-SCRIPT
30
- (#{su_prefix}#{remote_script} < /dev/null; echo $?>#{exit_code_path}) | /usr/bin/tee #{output_path}
31
- exit $(< #{exit_code_path})
29
+ script = <<-SCRIPT.gsub(/^\s+\| /, '')
30
+ | sh <<WRAPPER
31
+ | (#{su_prefix}#{remote_script} < /dev/null; echo \\$?>#{exit_code_path}) | /usr/bin/tee #{output_path}
32
+ | exit \\$(cat #{exit_code_path})
33
+ | WRAPPER
32
34
  SCRIPT
33
35
 
34
36
  logger.debug("executing script:\n#{script.lines.map { |line| " | #{line}" }.join}")
35
37
  run_async(script)
36
38
  rescue => e
37
39
  logger.error("error while initalizing command #{e.class} #{e.message}:\n #{e.backtrace.join("\n")}")
38
- publish_exception("Error initializing command", e)
40
+ publish_exception('Error initializing command', e)
39
41
  end
40
42
 
41
43
  def refresh
@@ -53,10 +55,10 @@ module ForemanRemoteExecutionCore
53
55
  if @session
54
56
  run_sync("pkill -f #{remote_command_file('script')}")
55
57
  else
56
- logger.debug("connection closed")
58
+ logger.debug('connection closed')
57
59
  end
58
60
  rescue => e
59
- publish_exception("Unexpected error", e, false)
61
+ publish_exception('Unexpected error', e, false)
60
62
  end
61
63
 
62
64
  def with_retries
@@ -70,7 +72,7 @@ module ForemanRemoteExecutionCore
70
72
  logger.error('Retrying')
71
73
  retry
72
74
  else
73
- publish_exception("Unexpected error", e)
75
+ publish_exception('Unexpected error', e)
74
76
  end
75
77
  end
76
78
  end
@@ -83,7 +85,7 @@ module ForemanRemoteExecutionCore
83
85
  if @expecting_disconnect
84
86
  publish_exit_status(0)
85
87
  else
86
- publish_exception("Unexpected disconnect", e)
88
+ publish_exception('Unexpected disconnect', e)
87
89
  end
88
90
  end
89
91
 
@@ -109,7 +111,7 @@ module ForemanRemoteExecutionCore
109
111
  # if the host public key is contained in the known_hosts_file,
110
112
  # verify it, otherwise, if missing, import it and continue
111
113
  ssh_options[:paranoid] = true
112
- ssh_options[:auth_methods] = ["publickey"]
114
+ ssh_options[:auth_methods] = ['publickey']
113
115
  ssh_options[:user_known_hosts_file] = prepare_known_hosts if @host_public_key
114
116
  return ssh_options
115
117
  end
@@ -122,16 +124,16 @@ module ForemanRemoteExecutionCore
122
124
  # available. The yielding doesn't happen automatically, but as
123
125
  # part of calling the `refresh` method.
124
126
  def run_async(command)
125
- raise "Async command already in progress" if @started
127
+ raise 'Async command already in progress' if @started
126
128
  @started = false
127
129
  session.open_channel do |channel|
128
130
  channel.request_pty
129
131
  channel.on_data { |ch, data| publish_data(data, 'stdout') }
130
132
  channel.on_extended_data { |ch, type, data| publish_data(data, 'stderr') }
131
133
  # standard exit of the command
132
- channel.on_request("exit-status") { |ch, data| publish_exit_status(data.read_long) }
134
+ channel.on_request('exit-status') { |ch, data| publish_exit_status(data.read_long) }
133
135
  # on signal: sending the signal value (such as 'TERM')
134
- channel.on_request("exit-signal") do |ch, data|
136
+ channel.on_request('exit-signal') do |ch, data|
135
137
  publish_exit_status(data.read_string)
136
138
  ch.close
137
139
  # wait for the channel to finish so that we know at the end
@@ -140,7 +142,7 @@ module ForemanRemoteExecutionCore
140
142
  end
141
143
  channel.exec(command) do |ch, success|
142
144
  @started = true
143
- raise("Error initializing command") unless success
145
+ raise('Error initializing command') unless success
144
146
  end
145
147
  end
146
148
  session.process(0) until @started
@@ -148,25 +150,25 @@ module ForemanRemoteExecutionCore
148
150
  end
149
151
 
150
152
  def run_sync(command, stdin = nil)
151
- stdout = ""
152
- stderr = ""
153
+ stdout = ''
154
+ stderr = ''
153
155
  exit_status = nil
154
156
  started = false
155
157
 
156
158
  channel = session.open_channel do |ch|
157
159
  ch.on_data { |_, data| stdout.concat(data) }
158
160
  ch.on_extended_data { |_, _, data| stderr.concat(data) }
159
- ch.on_request("exit-status") { |_, data| exit_status = data.read_long }
161
+ ch.on_request('exit-status') { |_, data| exit_status = data.read_long }
160
162
  # Send data to stdin if we have some
161
163
  ch.send_data(stdin) unless stdin.nil?
162
164
  # on signal: sending the signal value (such as 'TERM')
163
- ch.on_request("exit-signal") do |_, data|
165
+ ch.on_request('exit-signal') do |_, data|
164
166
  exit_status = data.read_string
165
167
  ch.close
166
168
  ch.wait
167
169
  end
168
170
  ch.exec command do |_, success|
169
- raise "could not execute command" unless success
171
+ raise 'could not execute command' unless success
170
172
  started = true
171
173
  end
172
174
  end
@@ -231,7 +233,7 @@ module ForemanRemoteExecutionCore
231
233
  # We use tee here to pipe stdin coming from ssh to a file at $path, while silencing its output
232
234
  # This is used to write to $path with elevated permissions, solutions using cat and output redirection
233
235
  # would not work, because the redirection would happen in the non-elevated shell.
234
- command = "#{su_prefix} tee '#{path}' >/dev/null && #{su_prefix} chmod '#{permissions}' '#{path}'"
236
+ command = "tee '#{path}' >/dev/null && chmod '#{permissions}' '#{path}'"
235
237
 
236
238
  @logger.debug("Sending data to #{path} on remote host:\n#{data}")
237
239
  status, _out, err = run_sync(command, data)
@@ -1,3 +1,3 @@
1
1
  module ForemanRemoteExecutionCore
2
- VERSION = '1.0.3'
2
+ VERSION = '1.0.4'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_remote_execution_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
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: 2017-03-29 00:00:00.000000000 Z
11
+ date: 2017-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: foreman-tasks-core
@@ -52,7 +52,8 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: " Ssh remote execution provider code sharable between Foreman and Foreman-Proxy\n"
55
+ description: |2
56
+ Ssh remote execution provider code sharable between Foreman and Foreman-Proxy
56
57
  email:
57
58
  - inecas@redhat.com
58
59
  executables: []
@@ -85,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
86
  version: '0'
86
87
  requirements: []
87
88
  rubyforge_project:
88
- rubygems_version: 2.5.1
89
+ rubygems_version: 2.4.5
89
90
  signing_key:
90
91
  specification_version: 4
91
92
  summary: Foreman remote execution - core bits