awsquery 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +8 -9
- data/bin/awsquery +18 -9
- data/bin/{awsssh → mssh} +17 -14
- metadata +16 -5
data/README.md
CHANGED
@@ -1,20 +1,19 @@
|
|
1
|
-
awsquery
|
1
|
+
awsquery -- query aws metadata for hosts
|
2
2
|
==========================================
|
3
3
|
|
4
|
-
|
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
|
-
|
10
|
+
```bash
|
11
|
+
$ awsquery Name=app1
|
12
|
+
```
|
13
13
|
|
14
14
|
2. Open iTerm with tabs for all appservers
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
```bash
|
17
|
+
$ awsquery Role=app | mssh iterm -u ubuntu
|
18
|
+
```
|
19
19
|
|
20
|
-
Author is Lachlan Donald <lachlan@ljd.cc>
|
data/bin/awsquery
CHANGED
@@ -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
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
|
data/bin/{awsssh → mssh}
RENAMED
@@ -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
|
-
|
22
|
-
servers = []
|
25
|
+
input = STDIN.read
|
23
26
|
|
24
|
-
|
25
|
-
|
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
|
-
|
39
|
-
tell
|
40
|
-
|
41
|
-
set name to "#{server[:
|
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
|
-
|
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.
|
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: &
|
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: *
|
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
|
-
-
|
42
|
+
- mssh
|
32
43
|
extensions: []
|
33
44
|
extra_rdoc_files: []
|
34
45
|
files:
|
35
46
|
- bin/awsquery
|
36
|
-
- bin/
|
47
|
+
- bin/mssh
|
37
48
|
- README.md
|
38
49
|
homepage: http://github.com/lox/awsquery
|
39
50
|
licenses: []
|