awsquery 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README.md +9 -0
  2. data/bin/awsdns +58 -0
  3. 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.2.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: &70294865862220 !ruby/object:Gem::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: *70294865862220
24
+ version_requirements: *70154147365860
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &70294865860580 !ruby/object:Gem::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: *70294865860580
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: []