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?