xlogin-apiclient 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f3e532530879c3353dcfb7f59479eb4b0f0c1b399f89ee8c65dbf024cee76f5
4
- data.tar.gz: 9ea1381765bf42a205d649f5eaf42b490f9dbfd16de7fde69d4843192f5c2156
3
+ metadata.gz: ba7acd60107439028cb9f8c6a77afd5dfaf6c1cf74c2232b529678b8888b6053
4
+ data.tar.gz: 32b07f46ca25f31ee09cadf2de19c5a0284bd1bb5c0a92b1d9a62b6af8a0b261
5
5
  SHA512:
6
- metadata.gz: cb5e5d6fbcb8fcf18b41d39b71e87f39ae8a63622711668b369a3736185e12c772a3e95c440120302044936127cb1f3bb9136a891bd41cf7cc65b3ce511798b8
7
- data.tar.gz: b877ebf767de4ae72912d31cc802a479e9284aed5515f7430b38ccccd2af2e48b5549c192a7a1c84581d7965f47ebef32ed3cf25d96e9b329d26edf4854cea8d
6
+ metadata.gz: 6f985e16fe2d94d2daee92e2d060aab4007deb0cda7d7aa56338f6e0f57c86907e8ec2299860d3cf2495f1f1c92b2ab35f84b6e24ecf08a7a711ac6c6238f8b3
7
+ data.tar.gz: d8bf59fae7037c02f2488c7b2115a84a40349a5909a31b3e6ea6995fc981ec60ffba990e1575c8c206a6c938799fd6555b674eab3513d7a52a336366f134cdaa
data/bin/xloginapi ADDED
@@ -0,0 +1,6 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'xlogin/apiclient'
4
+ require 'xlogin/apiclient/cli'
5
+
6
+ Xlogin::APIClient::CLI.run
@@ -29,12 +29,13 @@ module Xlogin
29
29
 
30
30
  def cmd(args, &block)
31
31
  params = {driver: @type, target: @args, command: args}
32
- request(**params.transform_keys(&:to_sym), &block)
32
+ request(:cmd, **params.transform_keys(&:to_sym), &block)
33
33
  end
34
34
 
35
35
  private
36
- def request(**params, &block)
36
+ def request(endpoint, **params, &block)
37
37
  uri = @uri.dup
38
+ uri.path = File.join(uri.path, endpoint.to_s)
38
39
  uri.query = "q=#{URI.encode_www_form_component(JSON.generate(params))}"
39
40
 
40
41
  if block
@@ -1,8 +1,38 @@
1
1
  require 'optparse'
2
+ require 'singleton'
3
+ require 'xlogin/apiclient'
2
4
 
3
5
 
6
+ XLOGIN_API_URL = ENV.fetch('XLOGIN_API_URL', 'http://127.0.0.1:8080')
7
+
4
8
  module Xlogin
5
- module APIClient
9
+ class APIClient
10
+
11
+ class Factory
12
+ include Singleton
13
+
14
+ def initialize
15
+ @inventory = Hash.new
16
+ end
17
+
18
+ def set_hostinfo(name, **opts)
19
+ @inventory[name] = (get_hostinfo(name) || {name: name}).merge(opts)
20
+ end
21
+
22
+ def get_hostinfo(name)
23
+ @inventory[name]
24
+ end
25
+
26
+ def method_missing(method_name, *args, **opts, &block)
27
+ super unless args.size == 2 && Addressable::URI::URIREGEX =~ args[1]
28
+
29
+ name = args[0]
30
+ uri = args[1]
31
+ type = method_name.to_s.downcase
32
+ set_hostinfo(name.to_s, type: type, uri: uri, **opts)
33
+ end
34
+ end
35
+
6
36
  class CLI
7
37
 
8
38
  def self.run(args = ARGV)
@@ -10,6 +40,33 @@ module Xlogin
10
40
  end
11
41
 
12
42
  def run(args)
43
+ config = {api: XLOGIN_API_URL}
44
+ parser = OptionParser.new
45
+ parser.banner = "#{File.basename($0)} HOST [Options]"
46
+ parser.version = Xlogin::APIClient::VERSION
47
+
48
+ parser.on('-a API', '--api', String, 'The Xlogin API URL.') { |v| config[:api] = v }
49
+ parser.on('-t TYPE', '--type', String, 'The TYPE of the device.') { |v| config[:type] = v }
50
+ parser.on('-i PATH', '--inventory', String, 'The PATH to the inventory file..') { |v| config[:inventory] = v }
51
+ parser.on('-e COMMAND', '--exec', String, 'Execute commands and quit.') { |v| config[:exec] = v }
52
+
53
+ args = parser.parse!(args)
54
+ host = args.shift
55
+ hostinfo = if config[:inventory]
56
+ factory = Factory.instance
57
+ factory.instance_eval(IO.read(config[:inventory]))
58
+ factory.get_hostinfo(host) || {}
59
+ else
60
+ {type: config[:type], uri: host}
61
+ end
62
+
63
+ raise "Argument error - type='#{hostinfo[:type]}' uri='#{hostinfo[:uri]}'" unless hostinfo[:type] && hostinfo[:uri]
64
+
65
+ APIClient.base_url = config[:api]
66
+ client = APIClient.new(**hostinfo)
67
+ client.cmd(config[:exec]) { |c| $stdout.print c }
68
+ rescue => e
69
+ $stderr.puts e, '', parser
13
70
  end
14
71
 
15
72
  end
@@ -1,5 +1,5 @@
1
1
  module Xlogin
2
- module Apiclient
3
- VERSION = "0.2.5"
2
+ class APIClient
3
+ VERSION = "0.2.6"
4
4
  end
5
5
  end
@@ -5,7 +5,7 @@ require "xlogin/apiclient/version"
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "xlogin-apiclient"
8
- spec.version = Xlogin::Apiclient::VERSION
8
+ spec.version = Xlogin::APIClient::VERSION
9
9
  spec.authors = ["haccht"]
10
10
  spec.email = ["haccht@users.noreply.github.com"]
11
11
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlogin-apiclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - haccht
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-29 00:00:00.000000000 Z
11
+ date: 2021-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -81,6 +81,7 @@ files:
81
81
  - Rakefile
82
82
  - bin/console
83
83
  - bin/setup
84
+ - bin/xloginapi
84
85
  - lib/xlogin/apiclient.rb
85
86
  - lib/xlogin/apiclient/cli.rb
86
87
  - lib/xlogin/apiclient/version.rb