i2cssh 1.4.2 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README.markdown +3 -1
  2. data/VERSION +1 -1
  3. data/bin/i2cssh +59 -53
  4. data/i2cssh.gemspec +2 -2
  5. metadata +4 -4
data/README.markdown CHANGED
@@ -9,7 +9,7 @@ to all sessions.
9
9
  $ gem install i2cssh
10
10
 
11
11
  ## Usage
12
- Usage: i2cssh [options] [username@host [username@host]]
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
15
  -F, --fullscreen Make the window fullscreen
@@ -23,6 +23,8 @@ to all sessions.
23
23
  -c, --cluster CLUSTERNAME Name of the cluster specified in ~/.i2csshrc
24
24
  -m, --machines a,b,c Comma-separated list of hosts
25
25
 
26
+ i2cssh will assume you want to connect to a cluster when only one host is given.
27
+
26
28
  For `-c` and `-m` options, the format `username@cluster` or `username@host` can be used.
27
29
 
28
30
  The following commands are exactly the same, however, they might serve different purposes:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.2
1
+ 1.4.3
data/bin/i2cssh CHANGED
@@ -3,23 +3,51 @@ require 'rubygems'
3
3
  require 'optparse'
4
4
  require 'i2cssh'
5
5
  require 'yaml'
6
+ require 'pp'
6
7
 
7
- config_file = File.expand_path "~/.i2csshrc"
8
+ @config_file = File.expand_path "~/.i2csshrc"
8
9
 
9
- i2_options, ssh_options, servers, clusters, login_from_cli = {}, [], [], {}, false
10
+ @i2_options, ssh_options, @servers, @clusters = {}, [], [], {}
10
11
 
11
- if File.exists?(config_file)
12
- config_hash = YAML.load File.read config_file
12
+ def get_hosts(c)
13
+ if c =~ /(.+)@(.+)/ then
14
+ login_from_cli = $1
15
+ c = $2
16
+ end
17
+
18
+ cluster = @clusters[c]
19
+
20
+ if cluster
21
+ cluster_hosts = cluster["hosts"]
22
+
23
+ @i2_options[:login_override] = cluster["login"] || @i2_options[:login_override]
24
+ @i2_options[:login_override] = login_from_cli if login_from_cli
25
+ @i2_options[:broadcast] = cluster["broadcast"] || @i2_options[:broadcast]
26
+ @i2_options[:profile] = cluster["profile"] || @i2_options[:profile]
27
+
28
+ if @i2_options[:login_override] then
29
+ cluster_hosts = cluster_hosts.map{|h| "#{@i2_options[:login_override]}@#{h}"}
30
+ end
31
+
32
+ @servers += cluster_hosts
33
+ else
34
+ puts "ERROR: unknown cluster #{c}. Check your #{@config_file}"
35
+ exit 1
36
+ end
37
+ end
38
+
39
+ if File.exists?(@config_file)
40
+ config_hash = YAML.load File.read @config_file
13
41
 
14
42
  # Read config and set defaults from config
15
43
  if config_hash["version"] && config_hash["version"].to_i >= 2 then
16
- clusters = config_hash["clusters"]
44
+ @clusters = config_hash["clusters"]
17
45
 
18
46
  # Options from the config file
19
- i2_options[:iterm2] = config_hash["iterm2"]
20
- i2_options[:login_override] = config_hash["login"]
21
- i2_options[:broadcast] = config_hash["broadcast"]
22
- i2_options[:profile] = config_hash["profile"]
47
+ @i2_options[:iterm2] = config_hash["iterm2"]
48
+ @i2_options[:login_override] = config_hash["login"]
49
+ @i2_options[:broadcast] = config_hash["broadcast"]
50
+ @i2_options[:profile] = config_hash["profile"]
23
51
 
24
52
  else
25
53
  # Convert version 1 format to version 2
@@ -29,48 +57,23 @@ if File.exists?(config_file)
29
57
  end
30
58
 
31
59
  optparse = OptionParser.new do |opts|
32
- opts.banner = "Usage: #{File.basename(__FILE__)} [options] [username@host [username@host]]"
60
+ opts.banner = "Usage: #{File.basename(__FILE__)} [options] [(username@host [username@host] | username@cluster)]"
33
61
 
34
62
  # Check if we have a cluster.
35
63
  opts.on '-c', '--cluster CLUSTERNAME',
36
64
  'Name of the cluster specified in ~/.i2csshrc' do |c|
37
-
38
- if c =~ /(.+)@(.+)/ then
39
- login_from_cli = $1
40
- c = $2
41
- end
42
-
43
- cluster = clusters[c]
44
-
45
- if clusters
46
- cluster_hosts = cluster["hosts"]
47
-
48
- i2_options[:login_override] = cluster["login"] || i2_options[:login_override]
49
- i2_options[:login_override] = login_from_cli if login_from_cli
50
- i2_options[:broadcast] = cluster["broadcast"] || i2_options[:broadcast]
51
- i2_options[:profile] = cluster["profile"] || i2_options[:profile]
52
-
53
- if i2_options[:login_override] then
54
- cluster_hosts = cluster_hosts.map{|h| "#{i2_options[:login_override]}@#{h}"}
55
- end
56
-
57
- servers += cluster_hosts
58
- else
59
- puts "ERROR: unknown cluster #{c}"
60
- puts optparse.help
61
- exit 1
62
- end
65
+ get_hosts(c)
63
66
  end
64
67
 
65
68
  opts.on '-m', '--machines a,b,c', Array,
66
69
  'Comma-separated list of hosts' do |h|
67
- servers += h
70
+ @servers += h
68
71
  end
69
72
 
70
73
  # Hosts
71
74
  opts.on '-f', '--file FILE',
72
75
  'Cluster file (one hostname per line)' do |f|
73
- servers += File.read(f).split "\n"
76
+ @servers += File.read(f).split "\n"
74
77
  end
75
78
 
76
79
  # Command line options override config file
@@ -82,62 +85,65 @@ optparse = OptionParser.new do |opts|
82
85
  end
83
86
  opts.on '-l', '--login LOGIN',
84
87
  'SSH login name' do |u|
85
- i2_options[:login_override] = u
88
+ @i2_options[:login_override] = u
86
89
 
87
90
  end
88
91
 
89
92
  # iTerm2 options
90
93
  opts.on '-F', '--fullscreen',
91
94
  'Make the window fullscreen' do
92
- i2_options[:fullscreen] = true
95
+ @i2_options[:fullscreen] = true
93
96
  end
94
97
  opts.on '-C', '--columns COLUMNS', Integer,
95
98
  'Number of columns (rows will be calculated)' do |c|
96
- i2_options[:columns] = c
99
+ @i2_options[:columns] = c
97
100
  end
98
101
  opts.on '-R', '--rows ROWS', Integer,
99
102
  'Number of rows (columns will be calculated)' do |r|
100
- if i2_options[:columns]
103
+ if @i2_options[:columns]
101
104
  puts "ERROR: -C and -R can't be used at the same time"
102
105
  puts optparse.help
103
106
  exit
104
107
  else
105
- i2_options[:rows] = r
108
+ @i2_options[:rows] = r
106
109
  end
107
110
  end
108
111
  opts.on '-b', '--broadcast',
109
112
  'Start with broadcast input (DANGEROUS!)' do
110
- i2_options[:broadcast] = true
113
+ @i2_options[:broadcast] = true
111
114
  end
112
115
  opts.on '-nb', '--nobroadcast',
113
116
  'Disable broadcast' do
114
- i2_options[:broadcast] = false
117
+ @i2_options[:broadcast] = false
115
118
  end
116
119
  opts.on '-p', '--profile PROFILE',
117
120
  'Name of the iTerm2 profile (default: Default)' do |p|
118
- i2_options[:profile] = p
121
+ @i2_options[:profile] = p
119
122
  puts p
120
123
  end
121
124
  opts.on "-2", '--iterm2',
122
125
  'Use iTerm2 instead of iTerm' do
123
- i2_options[:iterm2] = true
126
+ @i2_options[:iterm2] = true
124
127
  end
125
128
 
126
129
  end
127
130
  optparse.parse!
128
131
 
129
- if ARGV.length > 0 then
130
- servers = ARGV
132
+ if ARGV.length == 1 then
133
+ c = ARGV[0]
134
+ get_hosts(c)
135
+ elsif ARGV.length > 1 then
136
+ @servers = ARGV
131
137
  end
132
138
 
133
- if i2_options[:login_override] then
134
- servers = servers.map{|h| "#{i2_options[:login_override]}@#{h.gsub(/.+@/,'')}"}
139
+ if @i2_options[:login_override] then
140
+ @servers = @servers.map{|h| "#{@i2_options[:login_override]}@#{h.gsub(/.+@/,'')}"}
135
141
  end
136
142
 
137
- if servers.empty?
143
+ if @servers.empty?
138
144
  puts "ERROR: no servers given"
139
145
  puts optparse.help
140
146
  exit
141
147
  end
142
148
 
143
- I2Cssh.new servers, ssh_options, i2_options
149
+ I2Cssh.new @servers, ssh_options, @i2_options
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.2"
8
+ s.version = "1.4.3"
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-21"
12
+ s.date = "2012-03-22"
13
13
  s.description = "csshX like cluster ssh using iTerm2 panes"
14
14
  s.email = "wouter@evenflow.se"
15
15
  s.executables = ["i2cssh"]
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: 3
4
+ hash: 1
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 4
9
- - 2
10
- version: 1.4.2
9
+ - 3
10
+ version: 1.4.3
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-21 00:00:00 Z
18
+ date: 2012-03-22 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  prerelease: false