lib/koma/cli.rb in koma-0.3.1 vs lib/koma/cli.rb in koma-0.4.0
- old
+ new
@@ -1,7 +1,8 @@
require 'thor'
require 'json'
+require 'parallel'
include Specinfra::Helper::Set
module Koma
class CLI < Thor
@@ -20,31 +21,33 @@
type: :numeric,
banner: '<port>',
desc: 'port',
aliases: :p
def ssh(host)
- user, host = host.split('@') if host.include?('@')
- set :backend, :ssh
- set :host, host
- set :request_pty, true
- ssh_options = Net::SSH::Config.for(host)
- ssh_options[:user] = user if user
- ssh_options[:keys] = [options[:identity_file]] if options[:identity_file]
- ssh_options[:port] = options[:port] if options[:port]
- set :ssh_options, ssh_options
- puts JSON.pretty_generate out(options[:key])
+ if host.include?(',')
+ list = host.split(',')
+ results = Parallel.map(list, in_thread: 4) do |h|
+ ssh_out(h, options)
+ end
+ arr = [list, results].transpose
+ puts JSON.pretty_generate(Hash[*arr.flatten])
+ else
+ result = ssh_out(host, options)
+ puts JSON.pretty_generate(result)
+ end
end
desc 'exec', 'stdout local host inventory'
option :key,
type: :string,
banner: '<key1,key2,..>',
desc: 'inventory keys',
aliases: :k
def exec
set :backend, :exec
- puts JSON.pretty_generate out(options[:key])
+ result = out(options[:key])
+ puts JSON.pretty_generate(result)
end
desc 'keys', 'host inventory keys'
def keys
inventory_keys.each do |key|
@@ -54,9 +57,22 @@
private
def inventory_keys
Specinfra::HostInventory.inventory_keys
+ end
+
+ def ssh_out(host, options)
+ user, host = host.split('@') if host.include?('@')
+ set :backend, :ssh
+ set :host, host
+ set :request_pty, true
+ ssh_options = Net::SSH::Config.for(host)
+ ssh_options[:user] = user if user
+ ssh_options[:keys] = [options[:identity_file]] if options[:identity_file]
+ ssh_options[:port] = options[:port] if options[:port]
+ set :ssh_options, ssh_options
+ out(options[:key])
end
def out(key = nil)
out = {}
keys = if key.nil?