awsquery 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README.md +8 -9
  2. data/bin/awsquery +18 -9
  3. data/bin/{awsssh → mssh} +17 -14
  4. metadata +16 -5
data/README.md CHANGED
@@ -1,20 +1,19 @@
1
- awsquery(1) -- query aws metadata for hosts
1
+ awsquery -- query aws metadata for hosts
2
2
  ==========================================
3
3
 
4
- ## SYNOPSIS
5
-
6
- Allows the lookup and querying of EC2 hosts via the associated metadata.
4
+ A collection of tools for enumerating and manipulating AWS instances based on the tags and metadata.
7
5
 
8
6
  ## EXAMPLES
9
7
 
10
8
  1. Look up hosts based on tags
11
9
 
12
- `$ awsquery Name=app1`
10
+ ```bash
11
+ $ awsquery Name=app1
12
+ ```
13
13
 
14
14
  2. Open iTerm with tabs for all appservers
15
15
 
16
- `$ awsquery Role=app | awsssh iterm`
17
-
18
- ## CONTACT
16
+ ```bash
17
+ $ awsquery Role=app | mssh iterm -u ubuntu
18
+ ```
19
19
 
20
- Author is Lachlan Donald <lachlan@ljd.cc>
@@ -1,13 +1,15 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env ruby
2
2
 
3
3
  require 'rubygems'
4
4
  require 'fog'
5
5
  require 'optparse'
6
+ require 'json/pure'
6
7
 
7
8
  options = {
8
9
  :default_key => 'Name',
9
10
  :state => 'running',
10
11
  :verbose => false,
12
+ :json => false,
11
13
  }
12
14
 
13
15
  OptionParser.new do |opts|
@@ -18,15 +20,18 @@ OptionParser.new do |opts|
18
20
  opts.on("-s", "--state STATE", "Filter by state") do |s|
19
21
  options[:state] = s
20
22
  end
23
+ opts.on("-j", "Output in JSON") do |j|
24
+ options[:json] = j
25
+ end
21
26
  end.parse!
22
27
 
23
28
  compute = Fog::Compute.new(
24
- :provider => 'AWS',
25
- :aws_access_key_id => ENV['ACCESS_KEY_ID'],
29
+ :provider => 'AWS',
30
+ :aws_access_key_id => ENV['ACCESS_KEY_ID'],
26
31
  :aws_secret_access_key => ENV['SECRET_ACCESS_KEY']
27
32
  )
28
33
 
29
- # apply basic filters
34
+ # apply basic filters
30
35
  servers = compute.servers
31
36
  servers.reject! { |s| s.state != options[:state] }
32
37
 
@@ -38,10 +43,14 @@ ARGV.each do |arg|
38
43
  servers.reject! { |s| !s.tags.key? key or s.tags[key] != value }
39
44
  end
40
45
 
41
- # output
42
- servers.each do |server|
43
- print server.dns_name
44
- print " => %s" % server.tags.inspect if options[:verbose]
45
- puts
46
+ # output either json or lines
47
+ if options[:json]
48
+ jj servers
49
+ else
50
+ servers.each do |server|
51
+ print server.dns_name
52
+ print " => %s" % server.tags.inspect if options[:verbose]
53
+ puts
54
+ end
46
55
  end
47
56
 
@@ -1,7 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ # ssh helper, reads hosts from stdin
4
+ # see https://github.com/opscode/chef/blob/master/chef/lib/chef/knife/ssh.rb
5
+
3
6
  require 'rubygems'
4
7
  require 'optparse'
8
+ require 'json'
5
9
 
6
10
  options = {
7
11
  :verbose => false,
@@ -18,14 +22,17 @@ OptionParser.new do |opts|
18
22
  end
19
23
  end.parse!
20
24
 
21
- # parse stdin hosts
22
- servers = []
25
+ input = STDIN.read
23
26
 
24
- STDIN.read.split("\n").each do |a|
25
- servers << { :host => a, :user => options[:user] }
27
+ # detect if stdin is json
28
+ if input.match /^[{\[]/
29
+ servers = JSON.parse(input)
30
+ else
31
+ servers = input.split("\n").collect do |a|
32
+ { 'dns_name' => a, 'tags' => [] }
33
+ end
26
34
  end
27
35
 
28
-
29
36
  def iterm(servers, options)
30
37
  command = '
31
38
  tell application "iTerm"
@@ -35,21 +42,17 @@ def iterm(servers, options)
35
42
  servers.each_with_index do |server, t|
36
43
  command << %Q|
37
44
  tell myterm
38
- launch session "Default"
39
- tell last session
40
- write text "/usr/bin/ssh #{server[:user] ? server[:user]+'@'+server[:host] : server[:host]}"
41
- set name to "#{server[:host]}"
45
+ set mysession to (make new session at the end of sessions)
46
+ tell mysession
47
+ exec command "/usr/bin/ssh #{options[:user] ? options[:user]+'@'+server['dns_name'] : server['dns_name']}"
48
+ set name to "#{server['tags'].key?('Name') ? server['tags']['Name'] : server['dns_name']}"
42
49
  end tell
43
50
  end tell\n|
44
51
  end
45
52
  command << '
46
53
  end tell
47
54
  '
48
- puts command
49
55
  exec "osascript -e '#{command}' > /dev/null"
50
56
  end
51
57
 
52
- case ARGV[0]
53
- when "iterm"
54
- iterm servers, options
55
- end
58
+ iterm servers, options
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awsquery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
16
- requirement: &70183867827920 !ruby/object:Gem::Requirement
16
+ requirement: &70294865862220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,19 +21,30 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70183867827920
24
+ version_requirements: *70294865862220
25
+ - !ruby/object:Gem::Dependency
26
+ name: json
27
+ requirement: &70294865860580 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70294865860580
25
36
  description: A collection of tools for querying AWS hosts based on metadata and manipulating
26
37
  them
27
38
  email:
28
39
  - lachlan@ljd.cc
29
40
  executables:
30
41
  - awsquery
31
- - awsssh
42
+ - mssh
32
43
  extensions: []
33
44
  extra_rdoc_files: []
34
45
  files:
35
46
  - bin/awsquery
36
- - bin/awsssh
47
+ - bin/mssh
37
48
  - README.md
38
49
  homepage: http://github.com/lox/awsquery
39
50
  licenses: []