landrush 0.12.0 → 0.13.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.
- checksums.yaml +4 -4
- data/.travis.yml +7 -0
- data/README.md +18 -1
- data/examples/Vagrantfile +0 -4
- data/lib/landrush/action/common.rb +6 -2
- data/lib/landrush/action/redirect_dns.rb +2 -3
- data/lib/landrush/action/setup.rb +2 -1
- data/lib/landrush/cap/linux/read_host_visible_ip_address.rb +4 -1
- data/lib/landrush/config.rb +11 -1
- data/lib/landrush/resolver_config.rb +1 -1
- data/lib/landrush/store.rb +7 -4
- data/lib/landrush/version.rb +1 -1
- data/test/landrush/resolver_config_test.rb +3 -1
- data/test/test_helper.rb +2 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8a036c6758ecfa355d3763dd2df37cc8a699202
|
4
|
+
data.tar.gz: e8778c8cd9924ab4503fc2c3b4a1a8a5d4a7417f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a1dd7d4800f0bced106a1792006d39d223bf57e7e22b363d6e66ca1cb3708adf65528d105963af6df7f95b03ab30c4cd20b3fe66859b3b5623d29f7b3dd95aa
|
7
|
+
data.tar.gz: 99f611d7fb8ac8368f643857b77b6ef283dc848d9b77a6889c4006d07076eae05c0037589b6bf0f9f9ca437797413877e50e55542995f8ca2744fb926f99bf8e
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Landrush: DNS for Vagrant
|
1
|
+
# Landrush: DNS for Vagrant [](https://travis-ci.org/phinze/landrush)
|
2
2
|
|
3
3
|
Simple DNS that's visible on both the guest and the host.
|
4
4
|
|
@@ -30,6 +30,16 @@ And you should be able to get your hostname from your host:
|
|
30
30
|
|
31
31
|
If you shut down your guest, the entries associated with it will be removed.
|
32
32
|
|
33
|
+
### Dynamic entries
|
34
|
+
|
35
|
+
Every time a VM is started, its IP address is automatically detected and a DNS record is created that maps the hostname to its IP.
|
36
|
+
|
37
|
+
If for any reason the auto-detection detects no IP address or the wrong IP address, or you want to override it, you can do like so:
|
38
|
+
|
39
|
+
config.landrush.host_ip_address = '1.2.3.4'
|
40
|
+
|
41
|
+
If you are using a multi-machine `Vagrantfile`, configure this inside each of your `config.vm.define` sections.
|
42
|
+
|
33
43
|
### Static entries
|
34
44
|
|
35
45
|
You can add static host entries to the DNS server in your `Vagrantfile` like so:
|
@@ -64,6 +74,13 @@ If you would like to configure your own upstream servers, add upstream entries t
|
|
64
74
|
|
65
75
|
Linux guests should automatically have their DNS traffic redirected via `iptables` rules to the Landrush DNS server. File an issue if this does not work for you.
|
66
76
|
|
77
|
+
To disable this functionality:
|
78
|
+
|
79
|
+
config.landrush.guest_redirect_dns = false
|
80
|
+
|
81
|
+
You may want to do this if you are already proxying all your DNS requests through your host (e.g. using VirtualBox's natdnshostresolver1 option) and you
|
82
|
+
have DNS servers that you can easily set as upstreams in the daemon (e.g. DNS requests that go through the host's VPN connection).
|
83
|
+
|
67
84
|
### Visibility on the Host
|
68
85
|
|
69
86
|
If you're on an OS X host, we use a nice trick to unobtrusively add a secondary DNS server only for specific domains.
|
data/examples/Vagrantfile
CHANGED
@@ -8,10 +8,6 @@
|
|
8
8
|
# VAGRANT_CWD=examples bundle exce vagrant halt
|
9
9
|
#
|
10
10
|
|
11
|
-
# This line is unnecessary when the plugin is installed normally; it's just
|
12
|
-
# here for the development / testing use case.
|
13
|
-
Vagrant.require_plugin "landrush"
|
14
|
-
|
15
11
|
Vagrant.configure("2") do |config|
|
16
12
|
config.vm.box = "precise64"
|
17
13
|
|
@@ -31,7 +31,7 @@ module Landrush
|
|
31
31
|
def vmware?
|
32
32
|
provider == :vmware_fusion
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def parallels?
|
36
36
|
provider == :parallels
|
37
37
|
end
|
@@ -41,7 +41,7 @@ module Landrush
|
|
41
41
|
raise "The landrush plugin does not support the #{key} provider yet!"
|
42
42
|
}
|
43
43
|
|
44
|
-
if provider_name == :parallels and VagrantPlugins::Parallels::VERSION < "1.0.3"
|
44
|
+
if provider_name == :parallels and Gem::Version.new(VagrantPlugins::Parallels::VERSION) < Gem::Version.new("1.0.3")
|
45
45
|
raise "The landrush plugin supports the Parallels provider v1.0.3 and later. Please, update your 'vagrant-parallels' plugin."
|
46
46
|
end
|
47
47
|
|
@@ -70,6 +70,10 @@ module Landrush
|
|
70
70
|
config.enabled?
|
71
71
|
end
|
72
72
|
|
73
|
+
def guest_redirect_dns?
|
74
|
+
config.guest_redirect_dns?
|
75
|
+
end
|
76
|
+
|
73
77
|
def info(msg)
|
74
78
|
env[:ui].info "[landrush] #{msg}"
|
75
79
|
end
|
@@ -5,13 +5,13 @@ module Landrush
|
|
5
5
|
|
6
6
|
def call(env)
|
7
7
|
handle_action_stack(env) do
|
8
|
-
redirect_dns if enabled?
|
8
|
+
redirect_dns if enabled? and guest_redirect_dns?
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
12
|
def redirect_dns
|
13
13
|
info "setting up machine's DNS to point to our server"
|
14
|
-
machine.guest.capability(:redirect_dns, host: _target_host, port:
|
14
|
+
machine.guest.capability(:redirect_dns, host: _target_host, port: Server.port)
|
15
15
|
|
16
16
|
machine.config.vm.networks.each do |type, options|
|
17
17
|
info "network: #{type.inspect}, #{options.inspect}"
|
@@ -36,4 +36,3 @@ module Landrush
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
39
|
-
|
@@ -58,7 +58,8 @@ module Landrush
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def record_machine_dns_entry
|
61
|
-
ip_address = machine.
|
61
|
+
ip_address = machine.config.landrush.host_ip_address ||
|
62
|
+
machine.guest.capability(:read_host_visible_ip_address)
|
62
63
|
|
63
64
|
info "adding machine entry: #{machine_hostname} => #{ip_address}"
|
64
65
|
|
@@ -22,7 +22,6 @@ module Landrush
|
|
22
22
|
# TODO: Find a better heuristic for this implementation.
|
23
23
|
#
|
24
24
|
def self.read_host_visible_ip_address(machine)
|
25
|
-
command = "ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1 }'"
|
26
25
|
result = ""
|
27
26
|
machine.communicate.execute(command) do |type, data|
|
28
27
|
result << data if type == :stdout
|
@@ -30,6 +29,10 @@ module Landrush
|
|
30
29
|
|
31
30
|
result.chomp.split("\n").last
|
32
31
|
end
|
32
|
+
|
33
|
+
def self.command
|
34
|
+
%Q(hostname -I | awk -F' ' '{print $NF}')
|
35
|
+
end
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|
data/lib/landrush/config.rb
CHANGED
@@ -2,6 +2,7 @@ module Landrush
|
|
2
2
|
class Config < Vagrant.plugin('2', :config)
|
3
3
|
attr_accessor :hosts
|
4
4
|
attr_accessor :upstream_servers
|
5
|
+
attr_accessor :host_ip_address
|
5
6
|
|
6
7
|
def initialize
|
7
8
|
@hosts = {}
|
@@ -9,6 +10,7 @@ module Landrush
|
|
9
10
|
@default_upstream = [[:udp, '8.8.8.8', 53], [:tcp, '8.8.8.8', 53]]
|
10
11
|
@default_tld = 'vagrant.dev'
|
11
12
|
@upstream_servers = @default_upstream
|
13
|
+
@guest_redirect_dns = true
|
12
14
|
end
|
13
15
|
|
14
16
|
def enable(enabled=true)
|
@@ -23,6 +25,14 @@ module Landrush
|
|
23
25
|
@enabled
|
24
26
|
end
|
25
27
|
|
28
|
+
def guest_redirect_dns=(guest_redirect_dns=true)
|
29
|
+
@guest_redirect_dns=guest_redirect_dns
|
30
|
+
end
|
31
|
+
|
32
|
+
def guest_redirect_dns?
|
33
|
+
@guest_redirect_dns
|
34
|
+
end
|
35
|
+
|
26
36
|
def host(hostname, ip_address=nil)
|
27
37
|
@hosts[hostname] = ip_address
|
28
38
|
end
|
@@ -45,7 +55,7 @@ module Landrush
|
|
45
55
|
@upstream_servers.push [:tcp, ip, port]
|
46
56
|
else
|
47
57
|
@upstream_servers.push [protocol, ip, port]
|
48
|
-
end
|
58
|
+
end
|
49
59
|
end
|
50
60
|
|
51
61
|
def merge(other)
|
data/lib/landrush/store.rb
CHANGED
@@ -28,15 +28,18 @@ module Landrush
|
|
28
28
|
|
29
29
|
def find(search)
|
30
30
|
current_config.keys.detect do |key|
|
31
|
-
key ==
|
32
|
-
search =~ /#{key}$/ ||
|
33
|
-
key =~ /^#{search}\./
|
31
|
+
key.casecmp(search) == 0 ||
|
32
|
+
search =~ /#{key}$/i ||
|
33
|
+
key =~ /^#{search}\./i
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
def get(key)
|
38
38
|
value = current_config[key]
|
39
|
-
redirect =
|
39
|
+
redirect = nil
|
40
|
+
if value.is_a? String
|
41
|
+
redirect = find(value)
|
42
|
+
end
|
40
43
|
if value
|
41
44
|
if redirect
|
42
45
|
get(redirect)
|
data/lib/landrush/version.rb
CHANGED
@@ -5,13 +5,15 @@ module Landrush
|
|
5
5
|
describe 'ensure_config_exists' do
|
6
6
|
it 'writes a resolver config on the host if one is not already there' do
|
7
7
|
resolver_config = ResolverConfig.new(fake_environment)
|
8
|
+
skip("Only supported on OSX") unless resolver_config.osx?
|
9
|
+
|
8
10
|
resolver_config.config_file.exist?.must_equal false
|
9
11
|
resolver_config.ensure_config_exists!
|
10
12
|
resolver_config.config_file.exist?.must_equal true
|
11
13
|
resolver_config.config_file.read.must_equal <<-EOF.gsub(/^ +/, '')
|
12
14
|
# Generated by landrush, a vagrant plugin
|
13
15
|
nameserver 127.0.0.1
|
14
|
-
port
|
16
|
+
port #{Server.port}
|
15
17
|
EOF
|
16
18
|
end
|
17
19
|
|
data/test/test_helper.rb
CHANGED
@@ -4,6 +4,7 @@ require 'bundler/setup'
|
|
4
4
|
require 'minitest/spec'
|
5
5
|
|
6
6
|
require 'landrush'
|
7
|
+
require 'landrush/cap/linux/read_host_visible_ip_address'
|
7
8
|
|
8
9
|
require 'minitest/autorun'
|
9
10
|
|
@@ -84,7 +85,7 @@ def fake_machine(options={})
|
|
84
85
|
|
85
86
|
machine.instance_variable_set("@communicator", RecordingCommunicator.new)
|
86
87
|
machine.communicate.stub_command(
|
87
|
-
|
88
|
+
Landrush::Cap::Linux::ReadHostVisibleIpAddress.command,
|
88
89
|
"#{options.fetch(:ip, '1.2.3.4')}\n"
|
89
90
|
)
|
90
91
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: landrush
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Hinze
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubydns
|
@@ -41,6 +41,7 @@ extensions: []
|
|
41
41
|
extra_rdoc_files: []
|
42
42
|
files:
|
43
43
|
- ".gitignore"
|
44
|
+
- ".travis.yml"
|
44
45
|
- Gemfile
|
45
46
|
- LICENSE.txt
|
46
47
|
- README.md
|