smart_proxy_remote_execution_ssh 0.3.2 → 0.5.1
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/{bundler.plugins.d → bundler.d}/remote_execution_ssh.rb +0 -0
- data/lib/smart_proxy_remote_execution_ssh/actions/pull_script.rb +110 -0
- data/lib/smart_proxy_remote_execution_ssh/actions/run_script.rb +34 -0
- data/lib/smart_proxy_remote_execution_ssh/actions.rb +6 -0
- data/lib/smart_proxy_remote_execution_ssh/api.rb +49 -0
- data/lib/smart_proxy_remote_execution_ssh/async_scripts/control.sh +110 -0
- data/lib/smart_proxy_remote_execution_ssh/async_scripts/retrieve.sh +151 -0
- data/lib/smart_proxy_remote_execution_ssh/cockpit.rb +87 -71
- data/lib/smart_proxy_remote_execution_ssh/dispatcher.rb +10 -0
- data/lib/smart_proxy_remote_execution_ssh/job_storage.rb +51 -0
- data/lib/smart_proxy_remote_execution_ssh/log_filter.rb +14 -0
- data/lib/smart_proxy_remote_execution_ssh/net_ssh_compat.rb +228 -0
- data/lib/smart_proxy_remote_execution_ssh/plugin.rb +32 -10
- data/lib/smart_proxy_remote_execution_ssh/runners/fake_script_runner.rb +87 -0
- data/lib/smart_proxy_remote_execution_ssh/runners/polling_script_runner.rb +139 -0
- data/lib/smart_proxy_remote_execution_ssh/runners/script_runner.rb +420 -0
- data/lib/smart_proxy_remote_execution_ssh/runners.rb +7 -0
- data/lib/smart_proxy_remote_execution_ssh/utils.rb +24 -0
- data/lib/smart_proxy_remote_execution_ssh/version.rb +1 -1
- data/lib/smart_proxy_remote_execution_ssh.rb +60 -2
- data/settings.d/remote_execution_ssh.yml.example +12 -3
- metadata +33 -5
@@ -1,7 +1,7 @@
|
|
1
|
-
require 'smart_proxy_remote_execution_ssh/version'
|
2
1
|
require 'smart_proxy_dynflow'
|
3
|
-
require 'smart_proxy_remote_execution_ssh/
|
2
|
+
require 'smart_proxy_remote_execution_ssh/version'
|
4
3
|
require 'smart_proxy_remote_execution_ssh/plugin'
|
4
|
+
require 'smart_proxy_remote_execution_ssh/webrick_ext'
|
5
5
|
|
6
6
|
module Proxy::RemoteExecution
|
7
7
|
module Ssh
|
@@ -19,6 +19,10 @@ module Proxy::RemoteExecution
|
|
19
19
|
unless File.exist?(public_key_file)
|
20
20
|
raise "Ssh public key file #{public_key_file} doesn't exist"
|
21
21
|
end
|
22
|
+
|
23
|
+
validate_mode!
|
24
|
+
validate_ssh_log_level!
|
25
|
+
validate_mqtt_settings!
|
22
26
|
end
|
23
27
|
|
24
28
|
def private_key_file
|
@@ -28,6 +32,60 @@ module Proxy::RemoteExecution
|
|
28
32
|
def public_key_file
|
29
33
|
File.expand_path("#{private_key_file}.pub")
|
30
34
|
end
|
35
|
+
|
36
|
+
def validate_mode!
|
37
|
+
Plugin.settings.mode = Plugin.settings.mode.to_sym
|
38
|
+
|
39
|
+
unless Plugin::MODES.include? Plugin.settings.mode
|
40
|
+
raise "Mode has to be one of #{Plugin::MODES.join(', ')}, given #{Plugin.settings.mode}"
|
41
|
+
end
|
42
|
+
|
43
|
+
if Plugin.settings.async_ssh
|
44
|
+
Plugin.logger.warn('Option async_ssh is deprecated, use ssh-async mode instead.')
|
45
|
+
|
46
|
+
case Plugin.settings.mode
|
47
|
+
when :ssh
|
48
|
+
Plugin.logger.warn('Deprecated option async_ssh used together with ssh mode, switching mode to ssh-async.')
|
49
|
+
Plugin.settings.mode = :'ssh-async'
|
50
|
+
when :'async-ssh'
|
51
|
+
# This is a noop
|
52
|
+
else
|
53
|
+
Plugin.logger.warn('Deprecated option async_ssh used together with incompatible mode, ignoring.')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def validate_mqtt_settings!
|
59
|
+
return unless Plugin.settings.mode == :'pull-mqtt'
|
60
|
+
|
61
|
+
raise 'mqtt_broker has to be set when pull-mqtt mode is used' if Plugin.settings.mqtt_broker.nil?
|
62
|
+
raise 'mqtt_port has to be set when pull-mqtt mode is used' if Plugin.settings.mqtt_port.nil?
|
63
|
+
end
|
64
|
+
|
65
|
+
def validate_ssh_log_level!
|
66
|
+
wanted_level = Plugin.settings.ssh_log_level.to_s
|
67
|
+
levels = Plugin::SSH_LOG_LEVELS
|
68
|
+
unless levels.include? wanted_level
|
69
|
+
raise "Wrong value '#{Plugin.settings.ssh_log_level}' for ssh_log_level, must be one of #{levels.join(', ')}"
|
70
|
+
end
|
71
|
+
|
72
|
+
current = ::Proxy::SETTINGS.log_level.to_s.downcase
|
73
|
+
|
74
|
+
# regular log levels correspond to upcased ssh logger levels
|
75
|
+
ssh, regular = [wanted_level, current].map do |wanted|
|
76
|
+
levels.each_with_index.find { |value, _index| value == wanted }.last
|
77
|
+
end
|
78
|
+
|
79
|
+
if ssh < regular
|
80
|
+
raise 'ssh_log_level cannot be more verbose than regular log level'
|
81
|
+
end
|
82
|
+
|
83
|
+
Plugin.settings.ssh_log_level = Plugin.settings.ssh_log_level.to_sym
|
84
|
+
end
|
85
|
+
|
86
|
+
def job_storage
|
87
|
+
@job_storage ||= Proxy::RemoteExecution::Ssh::JobStorage.new
|
88
|
+
end
|
31
89
|
end
|
32
90
|
end
|
33
91
|
end
|
@@ -4,14 +4,23 @@
|
|
4
4
|
:local_working_dir: '/var/tmp'
|
5
5
|
:remote_working_dir: '/var/tmp'
|
6
6
|
# :kerberos_auth: false
|
7
|
-
|
7
|
+
|
8
|
+
# Mode of operation, one of ssh, ssh-async, pull, pull-mqtt
|
9
|
+
:mode: ssh
|
8
10
|
|
9
11
|
# Defines how often (in seconds) should the runner check
|
10
12
|
# for new data leave empty to use the runner's default
|
11
13
|
# (1 second for regular, 60 seconds with async_ssh enabled)
|
12
14
|
# :runner_refresh_interval:
|
13
15
|
|
14
|
-
# Defines the verbosity of logging coming from
|
15
|
-
# one of :debug, :info, :
|
16
|
+
# Defines the verbosity of logging coming from ssh command
|
17
|
+
# one of :debug, :info, :error, :fatal
|
16
18
|
# must be lower than general log level
|
17
19
|
# :ssh_log_level: fatal
|
20
|
+
|
21
|
+
# Remove working directories on job completion
|
22
|
+
# :cleanup_working_dirs: true
|
23
|
+
|
24
|
+
# MQTT configuration, need to be set if mode is set to pull-mqtt
|
25
|
+
# :mqtt_broker: localhost
|
26
|
+
# :mqtt_port: 1883
|
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.5.1
|
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:
|
11
|
+
date: 2022-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -114,16 +114,30 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0.
|
117
|
+
version: '0.5'
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '0.
|
124
|
+
version: '0.5'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: net-ssh
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 4.2.0
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 4.2.0
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: mqtt
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
143
|
- - ">="
|
@@ -147,12 +161,26 @@ extra_rdoc_files:
|
|
147
161
|
files:
|
148
162
|
- LICENSE
|
149
163
|
- README.md
|
150
|
-
- bundler.
|
164
|
+
- bundler.d/remote_execution_ssh.rb
|
151
165
|
- lib/smart_proxy_remote_execution_ssh.rb
|
166
|
+
- lib/smart_proxy_remote_execution_ssh/actions.rb
|
167
|
+
- lib/smart_proxy_remote_execution_ssh/actions/pull_script.rb
|
168
|
+
- lib/smart_proxy_remote_execution_ssh/actions/run_script.rb
|
152
169
|
- lib/smart_proxy_remote_execution_ssh/api.rb
|
170
|
+
- lib/smart_proxy_remote_execution_ssh/async_scripts/control.sh
|
171
|
+
- lib/smart_proxy_remote_execution_ssh/async_scripts/retrieve.sh
|
153
172
|
- lib/smart_proxy_remote_execution_ssh/cockpit.rb
|
173
|
+
- lib/smart_proxy_remote_execution_ssh/dispatcher.rb
|
154
174
|
- lib/smart_proxy_remote_execution_ssh/http_config.ru
|
175
|
+
- lib/smart_proxy_remote_execution_ssh/job_storage.rb
|
176
|
+
- lib/smart_proxy_remote_execution_ssh/log_filter.rb
|
177
|
+
- lib/smart_proxy_remote_execution_ssh/net_ssh_compat.rb
|
155
178
|
- lib/smart_proxy_remote_execution_ssh/plugin.rb
|
179
|
+
- lib/smart_proxy_remote_execution_ssh/runners.rb
|
180
|
+
- lib/smart_proxy_remote_execution_ssh/runners/fake_script_runner.rb
|
181
|
+
- lib/smart_proxy_remote_execution_ssh/runners/polling_script_runner.rb
|
182
|
+
- lib/smart_proxy_remote_execution_ssh/runners/script_runner.rb
|
183
|
+
- lib/smart_proxy_remote_execution_ssh/utils.rb
|
156
184
|
- lib/smart_proxy_remote_execution_ssh/version.rb
|
157
185
|
- lib/smart_proxy_remote_execution_ssh/webrick_ext.rb
|
158
186
|
- settings.d/remote_execution_ssh.yml.example
|