bin/i2cssh in i2cssh-1.16.0 vs bin/i2cssh in i2cssh-2.0.0

- old
+ new

@@ -1,64 +1,64 @@ #!/usr/bin/env ruby require 'rubygems' require 'optparse' -require 'i2cssh' +require_relative '../lib/i2cssh' require 'yaml' @config_file = File.expand_path "~/.i2csshrc" -@i2_options, ssh_options, @servers, @clusters, @ssh_environment, opts_from_cmdline = [], [], [], {}, [], {} +@i2_options, ssh_options, @servers, @clusters, @ssh_environment, opts_from_cmdline = [], [], [], {}, [], {} def get_hosts(c) - c.each do |clus| + c.each do |clus| - if clus =~ /(.+)@(.+)/ + if clus =~ /(.+)@(.+)/ login_from_cli = $1 clus = $2 end cluster = @clusters[clus] if cluster set_options(cluster, login_from_cli) - if @i2_options.last[:login] + if @i2_options.last[:login] @servers << cluster["hosts"].map{|h| "#{@i2_options.last[:login]}@#{h}"} else @servers << cluster["hosts"] end else puts "ERROR: unknown cluster #{c}. Check your #{@config_file}" exit 1 end end - + end def set_options(config_hash, login_override=nil) - if config_hash["columns"] and config_hash["rows"] + if config_hash["columns"] and config_hash["rows"] puts "CONFIG ERROR: rows and columns can't be used at the same time" exit 1 end - - if @i2_options.size == 0 + + if @i2_options.size == 0 @i2_options << {} - else + else # The first member includes the default options from the conf file @i2_options << @i2_options.first.clone end [:broadcast, :profile, :rank, :iterm2, :login, :columns, :rows, :sleep, :direction, :itermname].each do |p| @i2_options.last[p] = config_hash[p.to_s].nil? ? @i2_options.last[p] : config_hash[p.to_s] end - + @i2_options.last[:login] = login_override if login_override @i2_options.last[:direction] ||= :column @i2_options.last[:direction] = @i2_options.last[:direction].to_sym - if config_hash["environment"] - if @ssh_environment.empty? + if config_hash["environment"] + if @ssh_environment.empty? @ssh_environment << {} - else + else # We have some global env so copy it @ssh_environment << @ssh_environment.first.clone end @ssh_environment.last.merge!(config_hash["environment"].inject({}){|m, v| m.merge(v)}) @@ -66,15 +66,15 @@ @ssh_environment << {} end end -if File.exists?(@config_file) +if File.exists?(@config_file) config_hash = YAML.load File.read @config_file # Read config and set defaults from config - if config_hash["version"] && config_hash["version"].to_i >= 2 + if config_hash["version"] && config_hash["version"].to_i >= 2 set_options(config_hash) @clusters = config_hash["clusters"] else # Convert version 1 format to version 2 @clusters = config_hash["clusters"].inject({}){|m, c| m[c[0]] = {"hosts" => c[1]}; m} @@ -86,20 +86,20 @@ optparse = OptionParser.new do |opts| opts.banner = "Usage: #{File.basename(__FILE__)} [options] [(username@host [username@host] | username@cluster)]" - # Check if we have a cluster. + # Check if we have a cluster. opts.on '-c', '--clusters clus1,clus2', Array, 'Comma-separated list of clusters specified in ~/.i2csshrc' do |c| get_hosts(c) end opts.on '-m', '--machines a,b,c', Array, 'Comma-separated list of hosts' do |h| - + # Add to servers array and get a clone of default options @servers << h @i2_options << @i2_options.first.clone if @ssh_environment.empty? @ssh_environment << {} @@ -119,16 +119,16 @@ @ssh_environment << @ssh_environment.first.clone end end opts.on '-t', '--tab-split', - 'Split servers/clusters into tabs (group arguments)' do + 'Split servers/clusters into tabs (group arguments)' do opts_from_cmdline[:tabs] = true end opts.on '-T', '--tab-split-nogroup', - 'Split servers/clusters into tabs (don\'t group arguments)' do + 'Split servers/clusters into tabs (don\'t group arguments)' do opts_from_cmdline[:tabs] = true opts_from_cmdline[:tabs_nogroup] = true end # Command line options override config file @@ -140,11 +140,11 @@ end opts.on '-l', '--login LOGIN', 'SSH login name' do |u| opts_from_cmdline[:login] = u - + end opts.on '-e', '--environment KEY=VAL', 'Send environment vars (comma-separated list, need to start with LC_)' do |e| #Overwrite global ssh environment from config file @@ -206,11 +206,11 @@ 'Number of seconds to sleep between creating SSH sessions' do |s| opts_from_cmdline[:sleep] = s end opts.on "-d", '--direction DIRECTION', String, 'Direction that new sessions are created (default: column)' do |d| - unless ["row", "column"].include?(d) + unless ["row", "column"].include?(d) puts "ERROR: -d requires 'row' or 'column'" puts optparse.help exit 1 end opts_from_cmdline[:direction] = d.to_sym @@ -226,32 +226,32 @@ opts_from_cmdline[:gateway] = g end end optparse.parse! -if opts_from_cmdline[:tabs] +if opts_from_cmdline[:tabs] puts 'Disabling broadcast for tab split mode...' opts_from_cmdline[:broadcast] = false end # One argument = one cluster -if ARGV.length == 1 +if ARGV.length == 1 c = [ARGV[0]] get_hosts(c) # Otherwise we have a list of hosts -elsif ARGV.length > 1 - if opts_from_cmdline[:tabs_nogroup] +elsif ARGV.length > 1 + if opts_from_cmdline[:tabs_nogroup] ARGV.each do |serv| @servers << [serv] @i2_options << @i2_options.first.clone if @ssh_environment.empty? @ssh_environment << {} else @ssh_environment << @ssh_environment.first.clone end - end + end else @servers << ARGV if @i2_options.size > 1 # We added stuff in with cmdline options @i2_options << @i2_options.first.clone if @ssh_environment.empty? @@ -266,20 +266,20 @@ # Drop default options if @i2_options.size > @servers.size @i2_options.shift end -if @ssh_environment.size > @servers.size +if @ssh_environment.size > @servers.size @ssh_environment.shift end -@i2_options.each do |opt| +@i2_options.each do |opt| opt.merge!(opts_from_cmdline) end -@i2_options.each_with_index do |opt, i| - if opt[:login] +@i2_options.each_with_index do |opt, i| + if opt[:login] @servers[i] = @servers[i].map{|h| "#{opt[:login]}@#{h.gsub(/.+@/,'')}"} end if opt[:gateway] puts opt[:gateway] @servers[i] = @servers[i].map{|h| "#{opt[:gateway]} -t ssh #{h}"}