awsquery 0.2.0 → 0.3.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 (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: []