awsquery 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +9 -0
- data/bin/awsdns +58 -0
- metadata +18 -5
data/README.md
CHANGED
@@ -3,6 +3,15 @@ awsquery -- query aws metadata for hosts
|
|
3
3
|
|
4
4
|
A collection of tools for enumerating and manipulating AWS instances based on the tags and metadata.
|
5
5
|
|
6
|
+
## INSTALLATION
|
7
|
+
|
8
|
+
Create an access key (read-only is sensible) via IAM, then export in your shell.
|
9
|
+
|
10
|
+
```bash
|
11
|
+
export ACCESS_KEY_ID='ACCESS KEY HERE'
|
12
|
+
export SECRET_ACCESS_KEY='SECRET GOES HERE'
|
13
|
+
```
|
14
|
+
|
6
15
|
## EXAMPLES
|
7
16
|
|
8
17
|
1. Look up hosts based on tags
|
data/bin/awsdns
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'fog'
|
4
|
+
require 'rubygems'
|
5
|
+
require 'rubydns'
|
6
|
+
require 'optparse'
|
7
|
+
|
8
|
+
options = {
|
9
|
+
:resolver => false,
|
10
|
+
:port => 5300
|
11
|
+
}
|
12
|
+
|
13
|
+
OptionParser.new do |opts|
|
14
|
+
opts.banner = "Usage: awsdns.rb [options]"
|
15
|
+
opts.on("-r", "Writes a local resolver file") do |j|
|
16
|
+
options[:resolver] = true
|
17
|
+
end
|
18
|
+
opts.on("-p", "--port PORT", "Sets the port to listen on") do |p|
|
19
|
+
options[:port] = p
|
20
|
+
end
|
21
|
+
end.parse!
|
22
|
+
|
23
|
+
def lookup_server(host)
|
24
|
+
compute = Fog::Compute.new(
|
25
|
+
:provider => 'AWS',
|
26
|
+
:aws_access_key_id => ENV['ACCESS_KEY_ID'],
|
27
|
+
:aws_secret_access_key => ENV['SECRET_ACCESS_KEY']
|
28
|
+
)
|
29
|
+
|
30
|
+
tokens = host.split '.'
|
31
|
+
servers = compute.servers
|
32
|
+
servers.reject! { |s| s.state != 'running' }
|
33
|
+
|
34
|
+
if tokens.count == 1
|
35
|
+
logger.debug "Filtering AWS instances by Name=%s" % tokens[0]
|
36
|
+
servers.reject! { |s| s.tags['Name'] != tokens[0] }
|
37
|
+
elsif tokens.count == 2
|
38
|
+
logger.debug "Filtering AWS instances by Name=%s and Deployment=%s" % tokens
|
39
|
+
servers.reject! do |s|
|
40
|
+
s.tags['Name'] != tokens[0] and s.tags['Deployment'] != tokens[1]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
servers.first.public_ip_address
|
45
|
+
end
|
46
|
+
|
47
|
+
# write an osx resolver file
|
48
|
+
if options[:resolver]
|
49
|
+
File.open('/etc/resolver/aws', 'w') do |f|
|
50
|
+
f.write "nameserver 127.0.0.1\nport %d\n" % options[:port]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
RubyDNS::run_server(:listen => [[:udp, "0.0.0.0", options[:port]]]) do
|
55
|
+
match(/^(.+?)?.aws$/, :A) do |match_data, transaction|
|
56
|
+
transaction.respond! lookup_server(match_data[1])
|
57
|
+
end
|
58
|
+
end
|
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.3.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: &70154147365860 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70154147365860
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: json
|
27
|
-
requirement: &
|
27
|
+
requirement: &70154147364640 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,18 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70154147364640
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rubydns
|
38
|
+
requirement: &70154147363840 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70154147363840
|
36
47
|
description: A collection of tools for querying AWS hosts based on metadata and manipulating
|
37
48
|
them
|
38
49
|
email:
|
@@ -40,11 +51,13 @@ email:
|
|
40
51
|
executables:
|
41
52
|
- awsquery
|
42
53
|
- mssh
|
54
|
+
- awsdns
|
43
55
|
extensions: []
|
44
56
|
extra_rdoc_files: []
|
45
57
|
files:
|
46
58
|
- bin/awsquery
|
47
59
|
- bin/mssh
|
60
|
+
- bin/awsdns
|
48
61
|
- README.md
|
49
62
|
homepage: http://github.com/lox/awsquery
|
50
63
|
licenses: []
|