remotus 1.1.1 → 1.2.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/CHANGELOG.md +3 -0
- data/Gemfile.lock +3 -3
- data/lib/remotus/host_pool.rb +6 -2
- data/lib/remotus/pool.rb +3 -0
- data/lib/remotus/ssh_connection.rb +50 -7
- data/lib/remotus/version.rb +1 -1
- data/lib/remotus/winrm_connection.rb +22 -4
- data/lib/remotus.rb +3 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a1fb83a5d4a7a15d98860a8342f71c5377f5c91ec842883a62cc2b6678baa96
|
4
|
+
data.tar.gz: db221756c55c43a5c0492cf8668c36e07f6e58d323b9a1b83b3688a0a9c8c92c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2a57cbf28230b41b64c6e084511fa45536c8b020c7425b89d504e5ae764b16429911f5a2ff5458b2168b7ae46355e66c14279dad780d8ca38b525da66bd1694
|
7
|
+
data.tar.gz: 0bd543003bde4641d2d9527b88a72a550e700bcc65c73b76c2ef5ff0b2811c1eaae8013bb9bff34c5802b1e8fc2aa754557534908672c25eb814c8a281169788
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
remotus (1.
|
4
|
+
remotus (1.2.0)
|
5
5
|
connection_pool (~> 2.4)
|
6
6
|
net-scp (~> 4.0)
|
7
7
|
net-ssh (~> 7.1)
|
@@ -18,7 +18,7 @@ GEM
|
|
18
18
|
connection_pool (2.4.1)
|
19
19
|
diff-lcs (1.5.0)
|
20
20
|
erubi (1.12.0)
|
21
|
-
ffi (1.
|
21
|
+
ffi (1.16.3)
|
22
22
|
gssapi (1.3.1)
|
23
23
|
ffi (>= 1.0.1)
|
24
24
|
gyoku (1.4.0)
|
@@ -33,7 +33,7 @@ GEM
|
|
33
33
|
multi_json (1.15.0)
|
34
34
|
net-scp (4.0.0)
|
35
35
|
net-ssh (>= 2.6.5, < 8.0.0)
|
36
|
-
net-ssh (7.
|
36
|
+
net-ssh (7.2.0)
|
37
37
|
net-ssh-gateway (2.0.0)
|
38
38
|
net-ssh (>= 4.0.0)
|
39
39
|
nori (2.6.0)
|
data/lib/remotus/host_pool.rb
CHANGED
@@ -42,12 +42,16 @@ module Remotus
|
|
42
42
|
# @param [Hash] metadata metadata for this connection. Useful for providing additional information to various authentication stores
|
43
43
|
# should be specified using snake_case symbol keys. If keys are not snake_case, they will be converted.
|
44
44
|
#
|
45
|
+
# To connect to a host via IP, the following metadata entry can be provided to the host pool:
|
46
|
+
# :ip
|
47
|
+
#
|
45
48
|
# To configure a connection gateway, the following metadata entries can be provided to the host pool:
|
46
|
-
# :gateway_host
|
49
|
+
# :gateway_host (required to use gateway)
|
47
50
|
# :gateway_port
|
48
51
|
# :gateway_metadata
|
52
|
+
# :gateway_ip
|
49
53
|
#
|
50
|
-
# These function similarly to the host, port,
|
54
|
+
# These function similarly to the host, port, host_pool metadata, and ip fields.
|
51
55
|
#
|
52
56
|
def initialize(host, size: DEFAULT_POOL_SIZE, timeout: DEFAULT_EXPIRATION_SECONDS, port: nil, proto: nil, **metadata)
|
53
57
|
Remotus.logger.debug { "Creating host pool for #{host}" }
|
data/lib/remotus/pool.rb
CHANGED
@@ -20,6 +20,9 @@ module Remotus
|
|
20
20
|
# @option options [Integer] :timeout amount of time to wait for a connection from the pool
|
21
21
|
# @option options [Integer] :port port to use for the connection
|
22
22
|
# @option options [Symbol] :proto protocol to use for the connection (:winrm, :ssh), must be specified if port is specified
|
23
|
+
# @option options [String] :ip IP to use for the connection, preferred over the hostname if set.
|
24
|
+
# This should be used if the hostname is required for credential retrieval
|
25
|
+
# but the hostname cannot be resolved by DNS.
|
23
26
|
#
|
24
27
|
# @return [Remotus::HostPool] Host pool for the given host
|
25
28
|
#
|
@@ -74,13 +74,18 @@ module Remotus
|
|
74
74
|
# @param [String] host hostname
|
75
75
|
# @param [Integer] port remote port
|
76
76
|
# @param [Remotus::HostPool] host_pool associated host pool
|
77
|
+
# To connect to a host via IP, the following metadata
|
78
|
+
# entry can be provided to the host pool:
|
79
|
+
# :ip
|
80
|
+
#
|
77
81
|
# To configure the gateway, the following metadata
|
78
82
|
# entries can be provided to the host pool:
|
79
83
|
# :gateway_host
|
80
84
|
# :gateway_port
|
81
85
|
# :gateway_metadata
|
86
|
+
# :gateway_ip
|
82
87
|
#
|
83
|
-
# These function similarly to the host, port,
|
88
|
+
# These function similarly to the host, port, host_pool metadata, and ip fields.
|
84
89
|
#
|
85
90
|
def initialize(host, port = REMOTE_PORT, host_pool: nil)
|
86
91
|
Remotus.logger.debug { "Creating SshConnection #{object_id} for #{host}" }
|
@@ -143,10 +148,10 @@ module Remotus
|
|
143
148
|
|
144
149
|
Remotus.logger.debug { "Initializing SSH gateway connection to #{gateway_cred.user}@#{@gateway.host}:#{gateway_options[:port]}" }
|
145
150
|
|
146
|
-
@gateway.connection = Net::SSH::Gateway.new(
|
147
|
-
@connection = @gateway.connection.ssh(
|
151
|
+
@gateway.connection = Net::SSH::Gateway.new(remote_gateway_host, gateway_cred.user, **gateway_options)
|
152
|
+
@connection = @gateway.connection.ssh(remote_host, target_cred.user, **target_options)
|
148
153
|
else
|
149
|
-
@connection = Net::SSH.start(
|
154
|
+
@connection = Net::SSH.start(remote_host, target_cred.user, **target_options)
|
150
155
|
end
|
151
156
|
end
|
152
157
|
|
@@ -180,7 +185,7 @@ module Remotus
|
|
180
185
|
# @return [Boolean] true if available, false otherwise
|
181
186
|
#
|
182
187
|
def port_open?
|
183
|
-
Remotus.port_open?(
|
188
|
+
Remotus.port_open?(remote_host, @port)
|
184
189
|
end
|
185
190
|
|
186
191
|
#
|
@@ -477,7 +482,7 @@ module Remotus
|
|
477
482
|
def restart_connection?
|
478
483
|
return true unless @connection
|
479
484
|
return true if @connection.closed?
|
480
|
-
return true if
|
485
|
+
return true if remote_host != @connection.host
|
481
486
|
|
482
487
|
target_cred = Remotus::Auth.credential(self)
|
483
488
|
|
@@ -493,7 +498,7 @@ module Remotus
|
|
493
498
|
gateway_session = @gateway.connection.instance_variable_get(:@session)
|
494
499
|
|
495
500
|
return true if gateway_session.closed?
|
496
|
-
return true if
|
501
|
+
return true if remote_gateway_host != gateway_session.host
|
497
502
|
|
498
503
|
gateway_cred = Remotus::Auth.credential(@gateway)
|
499
504
|
|
@@ -584,5 +589,43 @@ module Remotus
|
|
584
589
|
def via_gateway?
|
585
590
|
host_pool && host_pool[:gateway_host]
|
586
591
|
end
|
592
|
+
|
593
|
+
#
|
594
|
+
# Whether connecting via IP instead of hostname
|
595
|
+
#
|
596
|
+
# @return [Boolean] true if using an IP, false otherwise
|
597
|
+
#
|
598
|
+
def via_ip?
|
599
|
+
host_pool && !host_pool[:ip].to_s.empty?
|
600
|
+
end
|
601
|
+
|
602
|
+
#
|
603
|
+
# Remote host used for the connection. Will use the ip if specified, otherwise uses the hostname.
|
604
|
+
#
|
605
|
+
# @return [String] Remote host
|
606
|
+
#
|
607
|
+
def remote_host
|
608
|
+
via_ip? ? host_pool[:ip] : @host
|
609
|
+
end
|
610
|
+
|
611
|
+
#
|
612
|
+
# Whether connecting via gateway IP instead of gateway hostname
|
613
|
+
#
|
614
|
+
# @return [Boolean] true if using an IP, false otherwise
|
615
|
+
#
|
616
|
+
def via_gateway_ip?
|
617
|
+
host_pool && !host_pool[:gateway_ip].to_s.empty?
|
618
|
+
end
|
619
|
+
|
620
|
+
#
|
621
|
+
# Remote gateway host used for the connection. Will use the gateway_ip if specified, otherwise uses the hostname.
|
622
|
+
#
|
623
|
+
# @return [String] Remote gateway host
|
624
|
+
#
|
625
|
+
def remote_gateway_host
|
626
|
+
return nil unless via_gateway?
|
627
|
+
|
628
|
+
via_gateway_ip? ? host_pool[:gateway_ip] : host_pool[:gateway_host]
|
629
|
+
end
|
587
630
|
end
|
588
631
|
end
|
data/lib/remotus/version.rb
CHANGED
@@ -69,7 +69,7 @@ module Remotus
|
|
69
69
|
|
70
70
|
Remotus.logger.debug { "Initializing WinRM connection to #{Remotus::Auth.credential(self).user}@#{@host}:#{@port}" }
|
71
71
|
@base_connection = WinRM::Connection.new(
|
72
|
-
endpoint: "http://#{
|
72
|
+
endpoint: "http://#{remote_host}:#{@port}/wsman",
|
73
73
|
transport: :negotiate,
|
74
74
|
user: Remotus::Auth.credential(self).user,
|
75
75
|
password: Remotus::Auth.credential(self).password
|
@@ -106,7 +106,7 @@ module Remotus
|
|
106
106
|
# @return [Boolean] true if available, false otherwise
|
107
107
|
#
|
108
108
|
def port_open?
|
109
|
-
Remotus.port_open?(
|
109
|
+
Remotus.port_open?(remote_host, @port)
|
110
110
|
end
|
111
111
|
|
112
112
|
#
|
@@ -195,7 +195,7 @@ module Remotus
|
|
195
195
|
def restart_base_connection?
|
196
196
|
return restart_connection?(shell: @shell) if @connection
|
197
197
|
return true unless @base_connection
|
198
|
-
return true if
|
198
|
+
return true if remote_host != @base_connection.instance_values["connection_opts"][:endpoint].scan(%r{//(.*):}).flatten.first
|
199
199
|
return true if Remotus::Auth.credential(self).user != @base_connection.instance_values["connection_opts"][:user]
|
200
200
|
return true if Remotus::Auth.credential(self).password != @base_connection.instance_values["connection_opts"][:password]
|
201
201
|
|
@@ -213,11 +213,29 @@ module Remotus
|
|
213
213
|
def restart_connection?(**options)
|
214
214
|
return true unless @connection
|
215
215
|
return true if shell && !options[:shell].casecmp?(@shell)
|
216
|
-
return true if
|
216
|
+
return true if remote_host != @connection.connection_opts[:endpoint].scan(%r{//(.*):}).flatten.first
|
217
217
|
return true if Remotus::Auth.credential(self).user != @connection.connection_opts[:user]
|
218
218
|
return true if Remotus::Auth.credential(self).password != @connection.connection_opts[:password]
|
219
219
|
|
220
220
|
false
|
221
221
|
end
|
222
|
+
|
223
|
+
#
|
224
|
+
# Whether connecting via IP instead of hostname
|
225
|
+
#
|
226
|
+
# @return [Boolean] true if using an IP, false otherwise
|
227
|
+
#
|
228
|
+
def via_ip?
|
229
|
+
host_pool && !host_pool[:ip].to_s.empty?
|
230
|
+
end
|
231
|
+
|
232
|
+
#
|
233
|
+
# Remote host used for the connection. Will use the ip if specified, otherwise uses the hostname.
|
234
|
+
#
|
235
|
+
# @return [String] Remote host
|
236
|
+
#
|
237
|
+
def remote_host
|
238
|
+
via_ip? ? host_pool[:ip] : @host
|
239
|
+
end
|
222
240
|
end
|
223
241
|
end
|
data/lib/remotus.rb
CHANGED
@@ -18,6 +18,9 @@ module Remotus
|
|
18
18
|
# @option options [Integer] :timeout amount of time to wait for a connection from the pool
|
19
19
|
# @option options [Integer] :port port to use for the connection
|
20
20
|
# @option options [Symbol] :proto protocol to use for the connection (:winrm, :ssh), must be specified if port is specified
|
21
|
+
# @option options [String] :ip IP to use for the connection, preferred over the hostname if set.
|
22
|
+
# This should be used if the hostname is required for credential retrieval
|
23
|
+
# but the hostname cannot be resolved by DNS.
|
21
24
|
#
|
22
25
|
# @return [Remotus::HostPool] Newly created or retrieved host pool
|
23
26
|
#
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remotus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Newell
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: connection_pool
|