koma 0.3.1 → 0.4.0

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
  SHA1:
3
- metadata.gz: fe87e3f628aaf7717c0ae51b76a7e56ec23d085f
4
- data.tar.gz: ddf155543824ca36b212cb5e462e433e85f01b68
3
+ metadata.gz: 3eee13c68f078a3f02b2d19e063eff87acd4e0fb
4
+ data.tar.gz: 3f0b322b862a2059da3ee03eb62fdbb8b555b47e
5
5
  SHA512:
6
- metadata.gz: b14e688817e30ab9598c476f386267e712ff19037b05eb04f3cab5752d9445e0bf4e65d31445713bd780f35785f46d9587adad9a6e32037886ea792a1964ac43
7
- data.tar.gz: 646816c3d97bfe9ec25f7baecd3cde9fdce11c86d8073e0f12ff4a66af0ea51f9fbcdced2acd3d810eb3f14b3e39483ced2f4b5d13d91835bbd4b8b444e3acfb
6
+ metadata.gz: 3349038bfe0a67bc48dc05eb1568efd4d5c1b6b8a84fa02eb27ffda0c723f78a395a9a2ae90064c1c52acb7d6bf966dae359c17ff1a3cc9c3cef10af9d5071cc
7
+ data.tar.gz: 5115f5fbd67158edb19ab6ea258fca8447ac14f32d1714b8a179c98512ed10f977dd50271b13e3dc69c94b3fd82b752396f1bf2855d265c20c785bbf1be1cb70
data/README.md CHANGED
@@ -32,6 +32,20 @@ $ koma ssh example.com
32
32
 
33
33
  And get stdout like [this](stdout_sample.json).
34
34
 
35
+ ### Multi host gathering
36
+
37
+ ```sh
38
+ $ koma ssh example.com,example.jp
39
+ {
40
+ "example.com" : {
41
+ ...
42
+ },
43
+ "example.jp" : {
44
+ ...
45
+ }
46
+ }
47
+ ```
48
+
35
49
  ## Host inventory keys
36
50
 
37
51
  ```sh
data/koma.gemspec CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency 'thor'
23
23
  spec.add_runtime_dependency 'highline'
24
24
  spec.add_runtime_dependency 'specinfra', '~> 2.48'
25
+ spec.add_runtime_dependency 'parallel'
25
26
  spec.add_development_dependency 'bundler', '~> 1.9'
26
27
  spec.add_development_dependency 'rake', '~> 10.0'
27
28
  spec.add_development_dependency 'rspec'
data/lib/koma/cli.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'thor'
2
2
  require 'json'
3
+ require 'parallel'
3
4
 
4
5
  include Specinfra::Helper::Set
5
6
 
@@ -22,16 +23,17 @@ module Koma
22
23
  desc: 'port',
23
24
  aliases: :p
24
25
  def ssh(host)
25
- user, host = host.split('@') if host.include?('@')
26
- set :backend, :ssh
27
- set :host, host
28
- set :request_pty, true
29
- ssh_options = Net::SSH::Config.for(host)
30
- ssh_options[:user] = user if user
31
- ssh_options[:keys] = [options[:identity_file]] if options[:identity_file]
32
- ssh_options[:port] = options[:port] if options[:port]
33
- set :ssh_options, ssh_options
34
- puts JSON.pretty_generate out(options[:key])
26
+ if host.include?(',')
27
+ list = host.split(',')
28
+ results = Parallel.map(list, in_thread: 4) do |h|
29
+ ssh_out(h, options)
30
+ end
31
+ arr = [list, results].transpose
32
+ puts JSON.pretty_generate(Hash[*arr.flatten])
33
+ else
34
+ result = ssh_out(host, options)
35
+ puts JSON.pretty_generate(result)
36
+ end
35
37
  end
36
38
 
37
39
  desc 'exec', 'stdout local host inventory'
@@ -42,7 +44,8 @@ module Koma
42
44
  aliases: :k
43
45
  def exec
44
46
  set :backend, :exec
45
- puts JSON.pretty_generate out(options[:key])
47
+ result = out(options[:key])
48
+ puts JSON.pretty_generate(result)
46
49
  end
47
50
 
48
51
  desc 'keys', 'host inventory keys'
@@ -58,6 +61,19 @@ module Koma
58
61
  Specinfra::HostInventory.inventory_keys
59
62
  end
60
63
 
64
+ def ssh_out(host, options)
65
+ user, host = host.split('@') if host.include?('@')
66
+ set :backend, :ssh
67
+ set :host, host
68
+ set :request_pty, true
69
+ ssh_options = Net::SSH::Config.for(host)
70
+ ssh_options[:user] = user if user
71
+ ssh_options[:keys] = [options[:identity_file]] if options[:identity_file]
72
+ ssh_options[:port] = options[:port] if options[:port]
73
+ set :ssh_options, ssh_options
74
+ out(options[:key])
75
+ end
76
+
61
77
  def out(key = nil)
62
78
  out = {}
63
79
  keys = if key.nil?
data/lib/koma/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Koma
2
- VERSION = '0.3.1'
2
+ VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: koma
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - k1LoW
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.48'
55
+ - !ruby/object:Gem::Dependency
56
+ name: parallel
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement