smart_proxy_remote_execution_ssh 0.10.6 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/smart_proxy_remote_execution_ssh/actions/pull_script.rb +8 -12
- data/lib/smart_proxy_remote_execution_ssh/api.rb +6 -23
- data/lib/smart_proxy_remote_execution_ssh/job_storage.rb +2 -2
- data/lib/smart_proxy_remote_execution_ssh/plugin.rb +1 -2
- data/lib/smart_proxy_remote_execution_ssh/version.rb +1 -1
- data/lib/smart_proxy_remote_execution_ssh.rb +5 -1
- metadata +2 -3
- data/lib/smart_proxy_remote_execution_ssh/log_filter.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db736b4bf0a21a18f335774778041f20480f18b886669d87c9d0f902e749eb14
|
4
|
+
data.tar.gz: 49741c279188b7371c212949d77cb8ebe488eccde6198018c41853bdad673f33
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92b94f0e609c6f5485f1519a6f853f74b75de8e1efec6f93bcf52519af8f585eb6a1189c547ce606434bdccf16764704d06c4d7bf0aa42b83a990a599585cce7
|
7
|
+
data.tar.gz: 4b0bc9999579dda06bcbdee9d0e6e422e67441e8fc82af6ea9064d8aec843a505a8a6505ba267bfdea514f8ba6ceb772ac06db5d4b0b2db27a1268a37033231f
|
@@ -22,7 +22,6 @@ module Proxy::RemoteExecution::Ssh::Actions
|
|
22
22
|
|
23
23
|
def plan(action_input)
|
24
24
|
super(action_input)
|
25
|
-
input[:with_mqtt] = Proxy::RemoteExecution::Ssh::Plugin.settings.mode == :'pull-mqtt'
|
26
25
|
end
|
27
26
|
|
28
27
|
def run(event = nil)
|
@@ -48,10 +47,6 @@ module Proxy::RemoteExecution::Ssh::Actions
|
|
48
47
|
end
|
49
48
|
|
50
49
|
def init_run
|
51
|
-
otp_password = if input[:with_mqtt]
|
52
|
-
::Proxy::Dynflow::OtpManager.generate_otp(execution_plan_id)
|
53
|
-
end
|
54
|
-
|
55
50
|
plan_event(PickupTimeout, input[:time_to_pickup], optional: true) if input[:time_to_pickup]
|
56
51
|
|
57
52
|
input[:job_uuid] =
|
@@ -60,14 +55,13 @@ module Proxy::RemoteExecution::Ssh::Actions
|
|
60
55
|
output[:state] = READY_FOR_PICKUP
|
61
56
|
output[:result] = []
|
62
57
|
|
63
|
-
mqtt_start
|
58
|
+
mqtt_start if with_mqtt?
|
64
59
|
suspend
|
65
60
|
end
|
66
61
|
|
67
62
|
def cleanup(_plan = nil)
|
68
63
|
job_storage.drop_job(execution_plan_id, run_step_id)
|
69
|
-
Proxy::
|
70
|
-
Proxy::RemoteExecution::Ssh::MQTT::Dispatcher.instance.done(input[:job_uuid])
|
64
|
+
Proxy::RemoteExecution::Ssh::MQTT::Dispatcher.instance.done(input[:job_uuid]) if with_mqtt?
|
71
65
|
end
|
72
66
|
|
73
67
|
def process_external_event(event)
|
@@ -131,7 +125,7 @@ module Proxy::RemoteExecution::Ssh::Actions
|
|
131
125
|
# Client was notified or is already running, dealing with this situation
|
132
126
|
# is only supported if mqtt is available
|
133
127
|
# Otherwise we have to wait it out
|
134
|
-
if
|
128
|
+
if with_mqtt?
|
135
129
|
mqtt_cancel
|
136
130
|
fail_msg += ', notifying the host over MQTT'
|
137
131
|
else
|
@@ -144,14 +138,12 @@ module Proxy::RemoteExecution::Ssh::Actions
|
|
144
138
|
suspend unless exit_code
|
145
139
|
end
|
146
140
|
|
147
|
-
def mqtt_start
|
141
|
+
def mqtt_start
|
148
142
|
payload = mqtt_payload_base.merge(
|
149
143
|
content: "#{input[:proxy_url]}/ssh/jobs/#{input[:job_uuid]}",
|
150
144
|
metadata: {
|
151
145
|
'event': 'start',
|
152
146
|
'job_uuid': input[:job_uuid],
|
153
|
-
'username': execution_plan_id,
|
154
|
-
'password': otp_password,
|
155
147
|
'return_url': "#{input[:proxy_url]}/ssh/jobs/#{input[:job_uuid]}/update",
|
156
148
|
'version': 'v1',
|
157
149
|
'effective_user': input[:effective_user]
|
@@ -207,5 +199,9 @@ module Proxy::RemoteExecution::Ssh::Actions
|
|
207
199
|
|
208
200
|
kill_run 'The job was not picked up in time'
|
209
201
|
end
|
202
|
+
|
203
|
+
def with_mqtt?
|
204
|
+
::Proxy::RemoteExecution::Ssh.with_mqtt?
|
205
|
+
end
|
210
206
|
end
|
211
207
|
end
|
@@ -25,26 +25,9 @@ module Proxy::RemoteExecution
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
delete '/known_hosts/:name' do |name|
|
29
|
-
do_authorize_any
|
30
|
-
keys = Net::SSH::KnownHosts.search_for(name)
|
31
|
-
return [204] if keys.empty?
|
32
|
-
ssh_keys = keys.map { |key| Base64.strict_encode64 key.to_blob }
|
33
|
-
Net::SSH::KnownHosts.hostfiles({}, :user)
|
34
|
-
.map { |file| File.expand_path file }
|
35
|
-
.select { |file| File.readable?(file) && File.writable?(file) }
|
36
|
-
.each do |host_file|
|
37
|
-
lines = File.foreach(host_file).reject do |line|
|
38
|
-
ssh_keys.any? { |key| line.end_with? "#{key}\n" }
|
39
|
-
end
|
40
|
-
File.open(host_file, 'w') { |f| f.write lines.join }
|
41
|
-
end
|
42
|
-
204
|
43
|
-
end
|
44
|
-
|
45
28
|
# Payload is a hash where
|
46
29
|
# exit_code: Integer | NilClass
|
47
|
-
# output:
|
30
|
+
# output: any, depends on the action consuming the data
|
48
31
|
post '/jobs/:job_uuid/update' do |job_uuid|
|
49
32
|
do_authorize_with_ssl_client
|
50
33
|
|
@@ -64,9 +47,11 @@ module Proxy::RemoteExecution
|
|
64
47
|
do_authorize_with_ssl_client
|
65
48
|
|
66
49
|
with_authorized_job(job_uuid) do |job_record|
|
67
|
-
Proxy::RemoteExecution::Ssh
|
50
|
+
if Proxy::RemoteExecution::Ssh.with_mqtt?
|
51
|
+
Proxy::RemoteExecution::Ssh::MQTT::Dispatcher.instance.running(job_record[:uuid])
|
52
|
+
end
|
68
53
|
notify_job(job_record, Actions::PullScript::JobDelivered)
|
69
|
-
response.headers['X-Foreman-Effective-User'] = job_record[:effective_user]
|
54
|
+
response.headers['X-Foreman-Effective-User'] = job_record[:effective_user] if job_record[:effective_user]
|
70
55
|
job_record[:job]
|
71
56
|
end
|
72
57
|
end
|
@@ -94,9 +79,7 @@ module Proxy::RemoteExecution
|
|
94
79
|
end
|
95
80
|
|
96
81
|
def authorized_job(uuid)
|
97
|
-
|
98
|
-
return job_record if authorize_with_token(clear: false, task_id: job_record[:execution_plan_uuid]) ||
|
99
|
-
job_record[:hostname] == https_cert_cn
|
82
|
+
Proxy::RemoteExecution::Ssh.job_storage.find_job(uuid, https_cert_cn)
|
100
83
|
end
|
101
84
|
end
|
102
85
|
end
|
@@ -40,7 +40,6 @@ module Proxy::RemoteExecution::Ssh
|
|
40
40
|
require 'smart_proxy_remote_execution_ssh/api'
|
41
41
|
require 'smart_proxy_remote_execution_ssh/actions'
|
42
42
|
require 'smart_proxy_remote_execution_ssh/dispatcher'
|
43
|
-
require 'smart_proxy_remote_execution_ssh/log_filter'
|
44
43
|
require 'smart_proxy_remote_execution_ssh/runners'
|
45
44
|
require 'smart_proxy_remote_execution_ssh/utils'
|
46
45
|
require 'smart_proxy_remote_execution_ssh/job_storage'
|
@@ -48,7 +47,7 @@ module Proxy::RemoteExecution::Ssh
|
|
48
47
|
Proxy::RemoteExecution::Ssh.validate!
|
49
48
|
|
50
49
|
Proxy::Dynflow::TaskLauncherRegistry.register('ssh', Proxy::Dynflow::TaskLauncher::Batch)
|
51
|
-
if
|
50
|
+
if Proxy::RemoteExecution::Ssh.with_mqtt?
|
52
51
|
require 'smart_proxy_remote_execution_ssh/mqtt'
|
53
52
|
# Force initialization
|
54
53
|
Proxy::RemoteExecution::Ssh::MQTT::Dispatcher.instance
|
@@ -44,7 +44,7 @@ module Proxy::RemoteExecution
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def validate_mqtt_settings!
|
47
|
-
return unless
|
47
|
+
return unless with_mqtt?
|
48
48
|
|
49
49
|
raise 'mqtt_broker has to be set when pull-mqtt mode is used' if Plugin.settings.mqtt_broker.nil?
|
50
50
|
raise 'mqtt_port has to be set when pull-mqtt mode is used' if Plugin.settings.mqtt_port.nil?
|
@@ -110,6 +110,10 @@ module Proxy::RemoteExecution
|
|
110
110
|
def job_storage
|
111
111
|
@job_storage ||= Proxy::RemoteExecution::Ssh::JobStorage.new
|
112
112
|
end
|
113
|
+
|
114
|
+
def with_mqtt?
|
115
|
+
Proxy::RemoteExecution::Ssh::Plugin.settings.mode == :'pull-mqtt'
|
116
|
+
end
|
113
117
|
end
|
114
118
|
end
|
115
119
|
end
|
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.
|
4
|
+
version: 0.11.0
|
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: 2024-
|
11
|
+
date: 2024-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -174,7 +174,6 @@ files:
|
|
174
174
|
- lib/smart_proxy_remote_execution_ssh/dispatcher.rb
|
175
175
|
- lib/smart_proxy_remote_execution_ssh/http_config.ru
|
176
176
|
- lib/smart_proxy_remote_execution_ssh/job_storage.rb
|
177
|
-
- lib/smart_proxy_remote_execution_ssh/log_filter.rb
|
178
177
|
- lib/smart_proxy_remote_execution_ssh/mqtt.rb
|
179
178
|
- lib/smart_proxy_remote_execution_ssh/mqtt/dispatcher.rb
|
180
179
|
- lib/smart_proxy_remote_execution_ssh/multiplexed_ssh_connection.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Proxy::RemoteExecution::Ssh
|
2
|
-
class LogFilter < ::Logger
|
3
|
-
def initialize(base_logger)
|
4
|
-
@base_logger = base_logger
|
5
|
-
end
|
6
|
-
|
7
|
-
def add(severity, *args, &block)
|
8
|
-
severity ||= ::Logger::UNKNOWN
|
9
|
-
return true if @base_logger.nil? || severity < @level
|
10
|
-
|
11
|
-
@base_logger.add(severity, *args, &block)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|