smart_proxy_remote_execution_ssh 0.10.6 → 0.11.0
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.
- 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
|