awsquery 0.1.0 → 0.2.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.
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: []