xlogin 0.1.0 → 0.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/lib/xlogin/delegator.rb +41 -8
- data/lib/xlogin/firmware.rb +1 -3
- data/lib/xlogin/firmware_factory.rb +9 -2
- data/lib/xlogin/firmwares/vyos.rb +2 -1
- data/lib/xlogin/gateway.rb +3 -3
- data/lib/xlogin/rake_task.rb +25 -20
- data/lib/xlogin/session.rb +3 -4
- data/lib/xlogin/ssh.rb +1 -1
- data/lib/xlogin/telnet.rb +1 -1
- data/lib/xlogin/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c07f2ff5ac2cd13434e68ad9c2f70354981a3a1
|
4
|
+
data.tar.gz: af17f5d674b0643f823edfb0e9eff31bc13531b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c971df162507902afa1217092ecc92203960d392156daeafea936c3a0bb2faaf1594dcd67b7237abed1b8847ee74ba5a2b3a7a34e2b24ff7737cf981fad58aec
|
7
|
+
data.tar.gz: 57018f0aa2bcad19a8efb85c6865c128f00709328dcd75f09588302cb0f0b3aa06556c269a9a3df8b04a4070b9996c2e3c6ee4e2d64c2c2d466f99622705de0d
|
data/lib/xlogin/delegator.rb
CHANGED
@@ -5,11 +5,14 @@ module Xlogin
|
|
5
5
|
|
6
6
|
module FirmwareDelegator
|
7
7
|
def run(uri, opts = {})
|
8
|
+
uri = URI(uri.to_s)
|
9
|
+
|
8
10
|
if hostname = opts.delete(:delegate)
|
9
|
-
|
10
|
-
|
11
|
+
target = FirmwareFactory.new.get(hostname)
|
12
|
+
target_os = FirmwareFactory[target[:type]]
|
13
|
+
target_uri = URI(target[:uri])
|
11
14
|
|
12
|
-
|
15
|
+
target_os.on_exec do |args|
|
13
16
|
if args['String'].strip =~ /^kill-session(?:\(([\s\w]+)\))?$/
|
14
17
|
puts($1.to_s)
|
15
18
|
close
|
@@ -19,12 +22,15 @@ module Xlogin
|
|
19
22
|
end
|
20
23
|
end
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
+
login = @methods[:login]
|
26
|
+
delegate = @methods[:delegate]
|
27
|
+
|
28
|
+
userinfo = uri.userinfo.dup
|
29
|
+
uri.userinfo = ''
|
25
30
|
|
26
|
-
session =
|
27
|
-
session.
|
31
|
+
session = target_os.run(uri, opts)
|
32
|
+
session.instance_exec(*userinfo.split(':'), &login)
|
33
|
+
session.instance_exec(target_uri, opts, &delegate)
|
28
34
|
session
|
29
35
|
else
|
30
36
|
session = super(uri, opts)
|
@@ -34,5 +40,32 @@ module Xlogin
|
|
34
40
|
|
35
41
|
prepend FirmwareDelegator
|
36
42
|
|
43
|
+
### Usage:
|
44
|
+
## Write xloginrc file
|
45
|
+
#
|
46
|
+
# vyos 'vyos01', 'telnet://user:pass@host:port'
|
47
|
+
# consolesrv 'vyos01::console', 'telnet://console_user:console_pass@console_host:console_port', delegate: 'vyos01'
|
48
|
+
#
|
49
|
+
## Write firmware definition
|
50
|
+
#
|
51
|
+
# require 'timeout'
|
52
|
+
# Xlogin.configure :consolesrv do |os|
|
53
|
+
# os.bind(:login) do |*args|
|
54
|
+
# username, password = *args
|
55
|
+
# waitfor(/login:\s*\z/) && puts(username)
|
56
|
+
# waitfor(/Password:\s*\z/) && puts(password)
|
57
|
+
# end
|
58
|
+
#
|
59
|
+
# os.bind(:delegate) do |uri, opts|
|
60
|
+
# begin
|
61
|
+
# waittime = 3
|
62
|
+
# Timeout.timeout(waittime) do
|
63
|
+
# login(*uri.userinfo.split(':'), opts)
|
64
|
+
# end
|
65
|
+
# rescue Timeout::Error
|
66
|
+
# end
|
67
|
+
# end
|
68
|
+
#end
|
69
|
+
|
37
70
|
end
|
38
71
|
end
|
data/lib/xlogin/firmware.rb
CHANGED
@@ -58,9 +58,8 @@ module Xlogin
|
|
58
58
|
define_method(open) do |arg = password, &block|
|
59
59
|
send("original_#{open}", arg)
|
60
60
|
if block
|
61
|
-
|
61
|
+
block.call
|
62
62
|
cmd(close)
|
63
|
-
resp
|
64
63
|
end
|
65
64
|
end
|
66
65
|
alias_method :enable, open
|
@@ -74,7 +73,6 @@ module Xlogin
|
|
74
73
|
userinfo: uri.userinfo,
|
75
74
|
timeout: @timeout,
|
76
75
|
prompts: @prompts,
|
77
|
-
methods: @methods,
|
78
76
|
}.merge(opts)
|
79
77
|
)
|
80
78
|
end
|
@@ -47,7 +47,11 @@ module Xlogin
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def set(type, name, uri, opts = {})
|
50
|
-
@database[name] = { type: type, uri: uri, opts: opts }
|
50
|
+
@database[name] = { name: name, type: type, uri: uri, opts: opts }
|
51
|
+
end
|
52
|
+
|
53
|
+
def get(name)
|
54
|
+
@database[name]
|
51
55
|
end
|
52
56
|
|
53
57
|
def list
|
@@ -62,7 +66,10 @@ module Xlogin
|
|
62
66
|
|
63
67
|
opts = item[:opts] || {}
|
64
68
|
opts = opts.merge(args).reduce({}) { |a, (k, v)| a.merge(k.to_s.downcase.to_sym => v) }
|
65
|
-
|
69
|
+
|
70
|
+
session = firmware.run(item_uri, opts)
|
71
|
+
session.name = item[:name]
|
72
|
+
session
|
66
73
|
end
|
67
74
|
|
68
75
|
def method_missing(name, *args, &block)
|
data/lib/xlogin/gateway.rb
CHANGED
@@ -4,9 +4,9 @@ require 'net/ssh/gateway'
|
|
4
4
|
module Xlogin
|
5
5
|
module Session
|
6
6
|
|
7
|
-
alias_method :
|
8
|
-
def
|
9
|
-
|
7
|
+
alias_method :original_configure_session, :configure_session
|
8
|
+
def configure_session(**opts)
|
9
|
+
original_configure_session(**opts)
|
10
10
|
|
11
11
|
if uri = opts[:via]
|
12
12
|
gateway = URI(uri)
|
data/lib/xlogin/rake_task.rb
CHANGED
@@ -59,7 +59,7 @@ module Xlogin
|
|
59
59
|
def initialize(name, *args)
|
60
60
|
@name = name
|
61
61
|
@fail_on_error = true
|
62
|
-
@silent =
|
62
|
+
@silent = Rake.application.options.silent
|
63
63
|
@lockfile = nil
|
64
64
|
@logfile = nil
|
65
65
|
@timeout = nil
|
@@ -76,11 +76,13 @@ module Xlogin
|
|
76
76
|
@taskrunner = block
|
77
77
|
end
|
78
78
|
|
79
|
-
def safe_puts(*messages,
|
79
|
+
def safe_puts(*messages, **opts)
|
80
|
+
opts[:io] ||= $stdout
|
81
|
+
return if @silent && !opts[:force]
|
80
82
|
RakeTask.mutex.synchronize do
|
81
83
|
messages.flat_map { |message| message.to_s.lines }.each do |line|
|
82
84
|
line.gsub!("\r", "")
|
83
|
-
io.puts (Rake.application.options.always_multitask)? "#{name}\t#{line}" : line
|
85
|
+
opts[:io].puts (Rake.application.options.always_multitask)? "#{name}\t#{line}" : line
|
84
86
|
end
|
85
87
|
end
|
86
88
|
end
|
@@ -120,7 +122,7 @@ module Xlogin
|
|
120
122
|
|
121
123
|
def run_task
|
122
124
|
loggers = []
|
123
|
-
loggers << $stdout unless silent || Rake.application.options.
|
125
|
+
loggers << $stdout unless silent || Rake.application.options.always_multitask
|
124
126
|
|
125
127
|
if logfile
|
126
128
|
mkdir_p(File.dirname(logfile), verbose: Rake.application.options.trace)
|
@@ -131,32 +133,31 @@ module Xlogin
|
|
131
133
|
xlogin_opts[:log] = loggers unless loggers.empty?
|
132
134
|
xlogin_opts[:timeout] = timeout if timeout
|
133
135
|
|
134
|
-
|
135
|
-
|
136
|
+
begin
|
137
|
+
@session = Xlogin.get(name, xlogin_opts)
|
138
|
+
@session.extend(SessionExt)
|
136
139
|
|
137
|
-
|
138
|
-
|
139
|
-
@session.define_singleton_method(name) { |*args| method_proc.call(*args) }
|
140
|
-
end
|
140
|
+
method_proc = method(:safe_puts)
|
141
|
+
@session.define_singleton_method(:safe_puts) { |*args| method_proc.call(*args) }
|
141
142
|
|
142
|
-
|
143
|
+
@taskrunner.call(@session) if @taskrunner && @session
|
144
|
+
rescue => e
|
145
|
+
raise e if fail_on_error
|
146
|
+
safe_puts(e, io: $stderr, force: true)
|
147
|
+
end
|
143
148
|
end
|
144
149
|
|
145
150
|
module SessionExt
|
146
151
|
def cmd(*args)
|
147
|
-
super(*args)
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
rescue => e
|
152
|
-
raise e if fail_on_error
|
153
|
-
safe_puts("\n#{e}", io: $stderr)
|
154
|
-
cmd('')
|
152
|
+
message = super(*args)
|
153
|
+
safe_puts(message, io: $stdout) if Rake.application.options.always_multitask
|
154
|
+
message = yield(message) if block_given?
|
155
|
+
message
|
155
156
|
end
|
156
157
|
|
157
158
|
def readline(command)
|
158
159
|
prompt = StringIO.new
|
159
|
-
safe_puts(cmd('').lines.last, io: prompt)
|
160
|
+
safe_puts(cmd('').lines.last, io: prompt, force: true)
|
160
161
|
|
161
162
|
my_command = RakeTask.mutex.synchronize do
|
162
163
|
Readline.pre_input_hook = lambda do
|
@@ -178,6 +179,10 @@ module Xlogin
|
|
178
179
|
readline(command)
|
179
180
|
end
|
180
181
|
end
|
182
|
+
|
183
|
+
def sync(&block)
|
184
|
+
RakeTask.mutex.synchronize(&block) if block
|
185
|
+
end
|
181
186
|
end
|
182
187
|
|
183
188
|
end
|
data/lib/xlogin/session.rb
CHANGED
@@ -3,16 +3,15 @@ require 'stringio'
|
|
3
3
|
module Xlogin
|
4
4
|
module Session
|
5
5
|
|
6
|
-
|
6
|
+
attr_accessor :name
|
7
7
|
|
8
|
-
def
|
8
|
+
def configure_session(**opts)
|
9
9
|
@name = opts[:node]
|
10
10
|
@node = opts[:node]
|
11
11
|
@port = opts[:port]
|
12
|
-
@userinfo = opts[:userinfo].split(':')
|
12
|
+
@userinfo = opts[:userinfo].to_s.split(':')
|
13
13
|
raise Xlogin::GeneralError.new('Argument error.') unless @node && @port
|
14
14
|
|
15
|
-
@methods = opts[:methods] || {}
|
16
15
|
@prompts = opts[:prompts] || [[/[$%#>] ?\z/n, nil]]
|
17
16
|
@timeout = opts[:timeout] || 60
|
18
17
|
|
data/lib/xlogin/ssh.rb
CHANGED
data/lib/xlogin/telnet.rb
CHANGED
data/lib/xlogin/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xlogin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- haccht
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|