ec2-clusterssh 0.0.5 → 0.1.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.md CHANGED
@@ -9,6 +9,15 @@ Use instance tags to launch a ClusterSSH session to multiple EC2 instances.
9
9
  ## Prerequisites
10
10
 
11
11
  - [ClusterSSH](http://sourceforge.net/apps/mediawiki/clusterssh/index.php?title=Main_Page)
12
+ - Set up your AWS credentials (note that these values can be also passed in
13
+ as command line options)
14
+
15
+ > export AWS_ACCESS_KEY_ID='...'
16
+
17
+ > export AWS_SECRET_ACCESS_KEY='...'
18
+
19
+ > export AWS_REGION='us-west-2'
20
+
12
21
  - Edit /etc/csshrc to add the path to your identity file (rsa key).
13
22
 
14
23
  > ssh_args = "-i path/to/identity/file"
@@ -16,10 +25,13 @@ Use instance tags to launch a ClusterSSH session to multiple EC2 instances.
16
25
  ## Usage
17
26
 
18
27
  $cluster -h
19
- Usage: cluster [-t TAG] -v VALUES
28
+ Usage: cluster [-t TAG] [-l USER] [-k KEY -s SECRET] [-r region] -v VALUES
29
+ -l, --login [USER] Log in with this user (default: ec2-user)
20
30
  -t, --tag [TAG] TAG to filter on (default: role)
21
- -v, --values [VALUES] a comma separated (no spaces) of values to match against (i.e. web,database)
22
-
31
+ -v, --values [VALUES] a comma separated (no spaces) list of values to match against (i.e. web,database)
32
+ -k, --access-key [KEY] AWS access key
33
+ -s, --secret-key [SECRET] AWS secret key
34
+ -r, --region [REGION] AWS region
23
35
 
24
36
  $cluster -l ec2-user -t Name -v web,database
25
37
 
data/bin/cluster CHANGED
@@ -1,10 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'optparse'
4
+ require 'rubygems'
5
+ require 'aws-sdk'
4
6
 
5
7
  options = {'tag' => 'role', 'user' => 'ec2-user'}
6
8
  OptionParser.new do |opts|
7
- opts.banner = "Usage: cluster [-t TAG -l USER] -v VALUES"
9
+ opts.banner = "Usage: cluster [-t TAG] [-l USER] [-k KEY -s SECRET] [-r region] -v VALUES"
8
10
 
9
11
  opts.on("-l", "--login [USER]", "Log in with this user (default: #{options['user']}") do |opt|
10
12
  options['user'] = opt
@@ -17,35 +19,31 @@ OptionParser.new do |opts|
17
19
  opts.on("-v", "--values [VALUES]", Array, "a comma separated (no spaces) list of values to match against (i.e. web,database)") do |opt|
18
20
  options['values'] = opt
19
21
  end
20
- end.parse!
21
22
 
22
- instances = {}
23
- tags = {}
24
-
25
- output = %x{ec2-describe-instances}
26
- output.split(/\n/).each do |line|
27
- words = line.split(/\s/)
28
- if words[0] == 'INSTANCE'
29
- instance_id = words[1]
30
- public_dns = words[3]
31
- instances[instance_id] = public_dns
32
- elsif words[0] == 'TAG'
33
- instance_id = words[2]
34
- tag = words[3]
35
- value = words[4]
36
- tags[tag] = {} if tags[tag].nil?
37
- tags[tag][value] = [] if tags[tag][value].nil?
38
- tags[tag][value] << instance_id
23
+ opts.on("-k", "--access-key [KEY]", "AWS access key") do |opt|
24
+ options['aws_access_key'] = opt
39
25
  end
40
- end
41
26
 
42
- dns = []
43
- options['values'].each do |value|
44
- tags[options['tag']][value].each do |instance_id|
45
- dns << instances[instance_id]
27
+ opts.on("-s", "--secret-key [SECRET]", "AWS secret key") do |opt|
28
+ options['aws_secret_key'] = opt
46
29
  end
30
+
31
+ opts.on("-r", "--region [REGION]", "AWS region") do |opt|
32
+ options['region'] = opt
33
+ end
34
+ end.parse!
35
+
36
+ if !options['aws_secret_key'].nil? && !options['aws_access_key'].nil?
37
+ AWS.config(access_key_id: options['aws_access_key'], secret_access_key: options['aws_secret_key'])
38
+ end
39
+
40
+ if !options['region'].nil?
41
+ AWS.config(region: options['region'])
47
42
  end
48
43
 
44
+ ec2 = AWS.ec2
45
+ dns = ec2.instances.tagged(options['tag']).tagged_values(options['values']).map{|instance| instance.dns_name}
46
+
49
47
  cssh = (/darwin/ =~ RUBY_PLATFORM) ? 'csshX' : 'cssh'
50
48
 
51
49
  exec "#{cssh} -l #{options['user']} #{dns.join ' '}"
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
+ spec.add_dependency 'aws-sdk'
23
24
  end
@@ -1,5 +1,5 @@
1
1
  module Ec2
2
2
  module Clusterssh
3
- VERSION = "0.0.5"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ec2-clusterssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-04 00:00:00.000000000 Z
12
+ date: 2013-06-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: aws-sdk
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
46
62
  description: Use instance tags to launch a ClusterSSH session to multiple EC2 instances.
47
63
  email:
48
64
  - gposton1040@gmail.com
@@ -75,7 +91,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
75
91
  version: '0'
76
92
  segments:
77
93
  - 0
78
- hash: 876455048668943885
94
+ hash: -1450336275784820976
79
95
  required_rubygems_version: !ruby/object:Gem::Requirement
80
96
  none: false
81
97
  requirements:
@@ -84,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
100
  version: '0'
85
101
  segments:
86
102
  - 0
87
- hash: 876455048668943885
103
+ hash: -1450336275784820976
88
104
  requirements: []
89
105
  rubyforge_project:
90
106
  rubygems_version: 1.8.25