landrush 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Simple DNS that's visible on both the guest and the host.
4
4
 
5
- > Because even a Vagrant needs a place to settle down once in a while.
5
+ > Even a Vagrant needs a place to settle down once in a while.
6
6
 
7
7
  Spins up a small DNS server and redirects DNS traffic from your VMs to use it,
8
8
  automatically registers/deregisters IP addresseses of guests as they come up
@@ -14,6 +14,8 @@ Install under Vagrant (1.1 or later):
14
14
 
15
15
  $ vagrant plugin install landrush
16
16
 
17
+ If you're on OS X, see **Visibility on the Host** below.
18
+
17
19
  ## Usage
18
20
 
19
21
  ### Get started
@@ -32,7 +34,6 @@ And you should be able to get your hostname from your host:
32
34
 
33
35
  If you shut down your guest, the entries associated with it will be removed.
34
36
 
35
-
36
37
  ### Static entries
37
38
 
38
39
  You can add static host entries to the DNS server in your `Vagrantfile` like so:
@@ -41,6 +42,10 @@ You can add static host entries to the DNS server in your `Vagrantfile` like so:
41
42
 
42
43
  This is great for overriding production services for nodes you might be testing locally. For example, perhaps you might want to override the hostname of your puppetmaster to point to a local vagrant box instead.
43
44
 
45
+ ### Wildcard Subdomains
46
+
47
+ For your convenience, any subdomain of a DNS entry known to landrush will resolve to the same IP address as the entry. For example: given `myhost.vagrant.dev -> 1.2.3.4`, both `foo.myhost.vagrant.dev` and `bar.myhost.vagrant.dev` will also resolve to `1.2.3.4`.
48
+
44
49
  ### Unmatched Queries
45
50
 
46
51
  Any DNS queries that do not match will be passed through to an upstream DNS server, so this will be able to serve as the one-stop shop for your guests' DNS needs.
@@ -81,16 +86,7 @@ vagrant landrush install
81
86
 
82
87
  Check out `vagrant landrush` for additional commands to monitor the DNS server daemon.
83
88
 
84
- ## Work in Progress - Lots to do!
85
-
86
- * The guest visibility strategy assumes iptables-based firewall.
87
- * Lots of static values that need configurin' - config location, ports, etc.
88
- * Tests tests tests.
89
+ ## Help Out!
89
90
 
90
- ## Contributing
91
+ This project could use your feedback and help! Please don't hesitate to open issues or submit pull requests. NO HESITATION IS ALLOWED. NONE WHATSOEVER.
91
92
 
92
- 1. Fork it
93
- 2. Create your feature branch (`git checkout -b my-new-feature`)
94
- 3. Commit your changes (`git commit -am 'Add some feature'`)
95
- 4. Push to the branch (`git push origin my-new-feature`)
96
- 5. Create new Pull Request
@@ -49,11 +49,11 @@ module Landrush
49
49
  server = self
50
50
  RubyDNS::run_server(:listen => interfaces) do
51
51
  self.logger.level = Logger::INFO
52
-
52
+
53
53
  match(/.*/, IN::A) do |transaction|
54
- ip = Store.hosts.get(transaction.name)
55
- if ip
56
- transaction.respond!(ip)
54
+ host = Store.hosts.find(transaction.name)
55
+ if host
56
+ transaction.respond!(Store.hosts.get(host))
57
57
  else
58
58
  transaction.passthrough!(server.upstream)
59
59
  end
@@ -18,6 +18,12 @@ module Landrush
18
18
  write(current_config.reject { |k, _| k == key })
19
19
  end
20
20
 
21
+ def find(search)
22
+ current_config.keys.detect do |key|
23
+ search == key || search.match(/\.#{key}$/)
24
+ end
25
+ end
26
+
21
27
  def get(key)
22
28
  current_config[key]
23
29
  end
@@ -1,3 +1,3 @@
1
1
  module Landrush
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -2,34 +2,48 @@ require 'test_helper'
2
2
 
3
3
  module Landrush
4
4
  describe Server do
5
- after {
6
- if Server.running?
7
- Server.stop
8
- end
9
- }
5
+ def query(host)
6
+ output = `dig -p #{Server.port} @127.0.0.1 #{host}`
7
+ answer_line = output.split("\n").grep(/^#{Regexp.escape(host)}/).first
8
+ answer_line.split.last
9
+ end
10
+
10
11
  describe 'start/stop' do
11
12
  it 'starts and stops a daemon' do
12
- hush { Server.start }
13
-
13
+ Server.start
14
14
  Server.running?.must_equal true
15
15
 
16
- hush { Server.stop }
17
-
16
+ Server.stop
18
17
  Server.running?.must_equal false
19
18
  end
20
19
 
21
20
  it 'can be queried for upstream entries' do
22
- hush { Server.start }
21
+ Server.start
23
22
 
24
- output = `dig -p #{Server.port} @127.0.0.1 phinze.com`
23
+ query("phinze.com").must_match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)
24
+ end
25
+
26
+ it 'responds properly to configured machine entries' do
27
+ Server.start
28
+
29
+ fake_host = 'boogers.vagrant.dev'
30
+ fake_ip = '99.98.97.96'
31
+
32
+ Store.hosts.set(fake_host, fake_ip)
33
+
34
+ query(fake_host).must_equal fake_ip
35
+ end
25
36
 
26
- answer_line = output.split("\n").grep(/^phinze\.com\./).first
37
+ it 'also resolves wildcard subdomains to a given machine' do
38
+ Server.start
27
39
 
28
- answer_line.wont_equal nil
40
+ fake_host = 'boogers.vagrant.dev'
41
+ fake_ip = '99.98.97.96'
29
42
 
30
- ip_address = answer_line.split.last
43
+ Store.hosts.set(fake_host, fake_ip)
31
44
 
32
- ip_address.must_match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)
45
+ query("green.#{fake_host}").must_match(fake_ip)
46
+ query("blue.#{fake_host}").must_match(fake_ip)
33
47
  end
34
48
  end
35
49
  end
@@ -51,5 +51,21 @@ module Landrush
51
51
  @store.get('now').must_equal nil # you don't!
52
52
  end
53
53
  end
54
+
55
+ describe "find" do
56
+ it "returns the key that matches the end of the search term" do
57
+ @store.set('somehost.vagrant.dev', 'here')
58
+
59
+ @store.find('foo.somehost.vagrant.dev').must_equal 'somehost.vagrant.dev'
60
+ @store.find('bar.somehost.vagrant.dev').must_equal 'somehost.vagrant.dev'
61
+ @store.find('foo.otherhost.vagrant.dev').must_equal nil
62
+ @store.find('host.vagrant.dev').must_equal nil
63
+ end
64
+
65
+ it "returns exact matches too" do
66
+ @store.set('somehost.vagrant.dev', 'here')
67
+ @store.find('somehost.vagrant.dev').must_equal 'somehost.vagrant.dev'
68
+ end
69
+ end
54
70
  end
55
71
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: landrush
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-08 00:00:00.000000000 Z
12
+ date: 2013-10-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubydns
@@ -134,12 +134,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
134
  - - ! '>='
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0'
137
+ segments:
138
+ - 0
139
+ hash: -227825973048311947
137
140
  required_rubygems_version: !ruby/object:Gem::Requirement
138
141
  none: false
139
142
  requirements:
140
143
  - - ! '>='
141
144
  - !ruby/object:Gem::Version
142
145
  version: '0'
146
+ segments:
147
+ - 0
148
+ hash: -227825973048311947
143
149
  requirements: []
144
150
  rubyforge_project:
145
151
  rubygems_version: 1.8.23
@@ -159,4 +165,3 @@ test_files:
159
165
  - test/support/fake_working_dir.rb
160
166
  - test/support/test_server_daemon.rb
161
167
  - test/test_helper.rb
162
- has_rdoc: