i2cssh 1.4.4 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.markdown CHANGED
@@ -12,6 +12,7 @@ to all sessions.
12
12
  Usage: i2cssh [options] [(username@host [username@host] | username@cluster)]
13
13
  -A, --forward-agent Enable SSH agent forwarding
14
14
  -l, --login LOGIN SSH login name
15
+ -e, --environment KEY=VAL Send environment vars (comma-separated list, need to start with LC_)
15
16
  -F, --fullscreen Make the window fullscreen
16
17
  -C, --columns COLUMNS Number of columns (rows will be calculated)
17
18
  -R, --rows ROWS Number of rows (columns will be calculated)
@@ -21,6 +22,7 @@ to all sessions.
21
22
  -2, --iterm2 Use iTerm2 instead of iTerm
22
23
  -f, --file FILE Cluster file (one hostname per line)
23
24
  -c, --cluster CLUSTERNAME Name of the cluster specified in ~/.i2csshrc
25
+ -r, --rank Send LC_RANK with the host number as environment variable
24
26
  -m, --machines a,b,c Comma-separated list of hosts
25
27
 
26
28
  i2cssh will assume you want to connect to a cluster when only one host is given.
@@ -57,6 +59,12 @@ Optional parameters can be used globablly or per cluster and include:
57
59
  broadcast: (true/false) # Enable/disable broadcast on start
58
60
  login: <username> # Use this username for login
59
61
  profile: <iTerm2 profile> # Use this iTerm profile
62
+ rank: (true/false) # Enable sending LC_RANK as an environment variable
63
+
64
+ environment: # Send the following enviroment variables
65
+ - LC_FOO: foo
66
+ - LC_BAR: bar
67
+
60
68
  iterm2: true # Use iTerm2.app instead of iTerm.app (only available globally)
61
69
 
62
70
  The following precedence is used:
@@ -65,6 +73,64 @@ global options from config < cluster options from config < command line flags
65
73
 
66
74
  Make sure the config file is valid YAML (e.g. use spaces instead of tabs)
67
75
 
76
+ ## Options
77
+
78
+ ### -A, --forward-agent
79
+
80
+ Enable SSH agent forwarding
81
+
82
+ ### -l, --login LOGIN
83
+
84
+ This option will override all logins passed in to i2cssh. This goes for global config, cluster config or username@host passed on the command line
85
+
86
+ ### -e, --environment KEY=VAL
87
+
88
+ Allows for passing environment varables to the SSH session. This can be a comma-separated list: `-e LC_FOO=foo,LC_BAR=bar`
89
+
90
+ ### -F, --fullscreen
91
+
92
+ Enable fullscreen on startup
93
+
94
+ ### -C, --columns COLUMNS
95
+
96
+ Set the amount of columns. Can't be used in conjunction with -R
97
+
98
+ ### -R, --rows ROWS
99
+
100
+ Set the amount of columns. Can't be used in conjunction with -C
101
+
102
+ ### -b, --broadcast
103
+
104
+ Enable broadcast on startup. i2cssh will send cmd-shift-i to the window and press the OK button.
105
+
106
+ ### -nb, --nobroadcast
107
+
108
+ Disable broadcast. This setting can be used to disable any broadcast that was set in the config.
109
+
110
+ ### -p, --profile PROFILE
111
+
112
+ Use a specific iTerm profile
113
+
114
+ ### -2, --iterm2
115
+
116
+ Use iTerm2.app instead of iTerm.app
117
+
118
+ ### -f, --file
119
+
120
+ Will read nodes from a file. These will be added to any hosts specified on the command line or in the config
121
+
122
+ ### -c, --cluster
123
+
124
+ Connect to a cluster that is specified in the config
125
+
126
+ ### -r, --rank
127
+
128
+ Send a LC_RANK environment variable different for each host
129
+
130
+ ### -m, --machines a,b,c
131
+
132
+ Connect to the machines a, b and c
133
+
68
134
  ## Known issues
69
135
 
70
136
  - i2cssh uses rb-appscript and that only seems to work on ruby 1.8.7 and breaks on 1.9.x
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.4
1
+ 1.5.0
data/bin/i2cssh CHANGED
@@ -3,10 +3,11 @@ require 'rubygems'
3
3
  require 'optparse'
4
4
  require 'i2cssh'
5
5
  require 'yaml'
6
+ require 'pp'
6
7
 
7
8
  @config_file = File.expand_path "~/.i2csshrc"
8
9
 
9
- @i2_options, ssh_options, @servers, @clusters = {}, [], [], {}
10
+ @i2_options, ssh_options, @servers, @clusters, @ssh_environment = {}, [], [], {}, {}
10
11
 
11
12
  def get_hosts(c)
12
13
  if c =~ /(.+)@(.+)/ then
@@ -19,15 +20,18 @@ def get_hosts(c)
19
20
  if cluster
20
21
  cluster_hosts = cluster["hosts"]
21
22
 
22
- @i2_options[:login_override] = cluster["login"] || @i2_options[:login_override]
23
+ @i2_options[:login_override] = !cluster["login"].nil? ? cluster["login"] : @i2_options[:login_override]
23
24
  @i2_options[:login_override] = login_from_cli if login_from_cli
24
- @i2_options[:broadcast] = cluster["broadcast"] || @i2_options[:broadcast]
25
- @i2_options[:profile] = cluster["profile"] || @i2_options[:profile]
25
+ @i2_options[:broadcast] = !cluster["broadcast"].nil? ? cluster["broadcast"] : @i2_options[:broadcast]
26
+ @i2_options[:profile] = !cluster["profile"].nil? ? cluster["profile"] : @i2_options[:profile]
27
+ @i2_options[:rank] = !cluster["rank"].nil? ? cluster["rank"] : @i2_options[:rank]
26
28
 
27
29
  if @i2_options[:login_override] then
28
30
  cluster_hosts = cluster_hosts.map{|h| "#{@i2_options[:login_override]}@#{h}"}
29
31
  end
30
32
 
33
+ @ssh_environment.merge!(cluster["environment"].inject({}){|m, v| m.merge(v)}) if cluster["environment"]
34
+
31
35
  @servers += cluster_hosts
32
36
  else
33
37
  puts "ERROR: unknown cluster #{c}. Check your #{@config_file}"
@@ -47,6 +51,9 @@ if File.exists?(@config_file)
47
51
  @i2_options[:login_override] = config_hash["login"]
48
52
  @i2_options[:broadcast] = config_hash["broadcast"]
49
53
  @i2_options[:profile] = config_hash["profile"]
54
+ @i2_options[:rank] = config_hash["rank"]
55
+
56
+ @ssh_environment.merge!(config_hash["environment"].inject({}){|m, v| m.merge(v)}) if config_hash["environment"]
50
57
 
51
58
  else
52
59
  # Convert version 1 format to version 2
@@ -87,6 +94,14 @@ optparse = OptionParser.new do |opts|
87
94
  @i2_options[:login_override] = u
88
95
 
89
96
  end
97
+ opts.on '-e', '--environment KEY=VAL',
98
+ 'Send environment vars (comma-separated list, need to start with LC_)' do |e|
99
+ @ssh_environment = e.split(",").inject({}) {|m, x| key, val = x.split("="); m[key] = val; m}
100
+ end
101
+ opts.on '-r', '--rank',
102
+ 'Send LC_RANK with the host number as environment variable' do
103
+ @i2_options[:rank] = true
104
+ end
90
105
 
91
106
  # iTerm2 options
92
107
  opts.on '-F', '--fullscreen',
@@ -95,14 +110,20 @@ optparse = OptionParser.new do |opts|
95
110
  end
96
111
  opts.on '-C', '--columns COLUMNS', Integer,
97
112
  'Number of columns (rows will be calculated)' do |c|
98
- @i2_options[:columns] = c
113
+ if @i2_options[:rows]
114
+ puts "ERROR: -C and -R can't be used at the same time"
115
+ puts optparse.help
116
+ exit 1
117
+ else
118
+ @i2_options[:columns] = c
119
+ end
99
120
  end
100
121
  opts.on '-R', '--rows ROWS', Integer,
101
122
  'Number of rows (columns will be calculated)' do |r|
102
123
  if @i2_options[:columns]
103
124
  puts "ERROR: -C and -R can't be used at the same time"
104
125
  puts optparse.help
105
- exit
126
+ exit 1
106
127
  else
107
128
  @i2_options[:rows] = r
108
129
  end
@@ -118,7 +139,6 @@ optparse = OptionParser.new do |opts|
118
139
  opts.on '-p', '--profile PROFILE',
119
140
  'Name of the iTerm2 profile (default: Default)' do |p|
120
141
  @i2_options[:profile] = p
121
- puts p
122
142
  end
123
143
  opts.on "-2", '--iterm2',
124
144
  'Use iTerm2 instead of iTerm' do
@@ -145,4 +165,4 @@ if @servers.empty?
145
165
  exit
146
166
  end
147
167
 
148
- I2Cssh.new @servers, ssh_options, @i2_options
168
+ I2Cssh.new @servers, ssh_options, @i2_options, @ssh_environment
data/i2cssh.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "i2cssh"
8
- s.version = "1.4.4"
8
+ s.version = "1.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Wouter de Bie"]
12
- s.date = "2012-03-22"
12
+ s.date = "2012-03-23"
13
13
  s.description = "csshX like cluster ssh using iTerm2 panes"
14
14
  s.email = "wouter@evenflow.se"
15
15
  s.executables = ["i2cssh"]
data/lib/i2cssh.rb CHANGED
@@ -1,11 +1,12 @@
1
1
  require 'appscript'
2
2
 
3
3
  class I2Cssh
4
- def initialize servers, ssh_options, i2_options
5
- @ssh_prefix = "ssh " + ssh_options.join(' ')
6
- @ssh_options = ssh_options
7
- @i2_options = i2_options
8
- @servers = servers
4
+ def initialize servers, ssh_options, i2_options, ssh_environment
5
+ @ssh_prefix = "ssh " + ssh_options.join(' ')
6
+ @ssh_options = ssh_options
7
+ @i2_options = i2_options
8
+ @servers = servers
9
+ @ssh_environment = ssh_environment
9
10
 
10
11
  app_name = (i2_options[:iterm2]) ? 'iTerm2' : 'iTerm'
11
12
 
@@ -77,7 +78,18 @@ class I2Cssh
77
78
  1.upto(@rows*@columns) do |i|
78
79
  server = @servers[i-1]
79
80
  if server then
80
- @term.sessions[i].write :text => "unset HISTFILE && echo -e \"\\033]50;SetProfile=#{@profile}\\a\" && #{@ssh_prefix} #{server}"
81
+ ssh_env = ""
82
+
83
+ if @i2_options[:rank] then
84
+ @ssh_environment['LC_RANK'] = i-1
85
+ end
86
+
87
+ if !@ssh_environment.empty? then
88
+ send_env = "-o SendEnv=#{@ssh_environment.keys.join(",")}"
89
+ @term.sessions[i].write :text => "#{@ssh_environment.map{|k,v| "export #{k}=#{v}"}.join('; ')}"
90
+ end
91
+
92
+ @term.sessions[i].write :text => "unset HISTFILE && echo -e \"\\033]50;SetProfile=#{@profile}\\a\" && #{@ssh_prefix} #{send_env} #{server}"
81
93
  else
82
94
 
83
95
  @term.sessions[i].write :text => "unset HISTFILE && echo -e \"\\033]50;SetProfile=#{@profile}\\a\""
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i2cssh
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 4
9
- - 4
10
- version: 1.4.4
8
+ - 5
9
+ - 0
10
+ version: 1.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Wouter de Bie
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-03-22 00:00:00 Z
18
+ date: 2012-03-23 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  prerelease: false