landrush 1.0.0 → 1.1.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +8 -8
- data/.rubocop.yml +1 -0
- data/.travis.yml +3 -0
- data/CHANGELOG.md +4 -4
- data/CONTRIBUTING.md +54 -17
- data/Gemfile +4 -8
- data/README.md +152 -40
- data/features/dns_resolution.feature +9 -0
- data/features/landrush-ip.feature +57 -0
- data/features/step_definitions/ip.rb +13 -0
- data/landrush.gemspec +3 -1
- data/lib/landrush/action/setup.rb +49 -10
- data/lib/landrush/cap/all/read_host_visible_ip_address.rb +49 -0
- data/lib/landrush/config.rb +17 -11
- data/lib/landrush/plugin.rb +2 -2
- data/lib/landrush/resolver_config.rb +3 -7
- data/lib/landrush/server.rb +48 -22
- data/lib/landrush/util/retry.rb +16 -0
- data/lib/landrush/version.rb +1 -1
- data/lib/landrush/win_network_config.rb +185 -0
- data/lib/landrush.rb +6 -1
- data/test/landrush/action/setup_test.rb +44 -1
- data/test/landrush/action/teardown_test.rb +1 -1
- data/test/landrush/cap/all/read_host_visible_ip_address_test.rb +87 -0
- data/test/landrush/cap/linux/configured_dns_servers_test.rb +1 -1
- data/test/landrush/cap/linux/redirect_dns_test.rb +1 -1
- data/test/landrush/config_test.rb +1 -1
- data/test/landrush/dependent_vms_test.rb +1 -1
- data/test/landrush/resolver_config_test.rb +1 -3
- data/test/landrush/server_test.rb +1 -1
- data/test/landrush/store_test.rb +1 -1
- data/test/landrush/util/rety_test.rb +50 -0
- data/test/landrush/win_network_config_test.rb +70 -0
- data/test/support/fake_ui.rb +1 -0
- data/test/test_helper.rb +26 -11
- metadata +46 -12
- data/Gemfile.lock +0 -178
- data/examples/Vagrantfile +0 -20
- data/issues/vbox/Vagrantfile +0 -122
- data/lib/landrush/cap/linux/read_host_visible_ip_address.rb +0 -47
- data/lib/landrush/os.rb +0 -19
- data/test/landrush/cap/linux/read_host_visible_ip_address_test.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6fdf85d7935a91c069c3502b4be6a10c97937e5
|
4
|
+
data.tar.gz: d3ee3e5dc3b09473d3a401225e97ee631d450e39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ef9fea8ed8a474c5eb6ee8e4ee6af181c5321941c8c4a249ed9599a621daf331d4313ae436d0ccffb3d6abb2ec56b312ef0126c029c79ec44d7b2eb4c023a95
|
7
|
+
data.tar.gz: 6b09eba1246096affd1f44a999fb80048c84df0efc8b0f8db0df006dcd07aa5769980ce02992992a4f623a405087198bf910f029e75e35eba11cdf23b80f1237
|
data/.gitignore
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
+
# Bundler
|
2
|
+
Gemfile.lock
|
3
|
+
.bundle
|
4
|
+
|
5
|
+
# Ruby / RVM
|
1
6
|
.ruby-gemset
|
2
7
|
.ruby-version
|
3
|
-
|
4
|
-
|
8
|
+
|
9
|
+
# Rake / Build
|
5
10
|
.yardoc
|
6
|
-
InstalledFiles
|
7
11
|
_yardoc
|
8
12
|
coverage
|
9
13
|
lib/bundler/man
|
10
14
|
pkg
|
11
15
|
rdoc
|
12
16
|
spec/reports
|
13
|
-
test/tmp
|
14
|
-
test/version_tmp
|
15
17
|
build
|
16
18
|
tmp
|
17
|
-
tags
|
18
|
-
|
19
|
-
.vagrant
|
20
19
|
|
20
|
+
# IDE
|
21
21
|
*.iml
|
22
22
|
.idea
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
## [
|
1
|
+
## [1.0.0] - 2016-05-18
|
2
2
|
|
3
3
|
- Added: Acceptance CI tests ([#136](https://github.com/vagrant-landrush/landrush/issues/136))
|
4
|
-
- Fixed: Making sure that the right Vagrant data dir is used ([#
|
5
|
-
- Added: Getting Landrush to work on Windows ([#
|
4
|
+
- Fixed: Making sure that the right Vagrant data dir is used ([#157](https://github.com/vagrant-landrush/landrush/issues/157))
|
5
|
+
- Added: Getting Landrush to work on Windows ([#16](https://github.com/vagrant-landrush/landrush/issues/16))
|
6
6
|
|
7
7
|
## [0.19.0] - 2016-03-10
|
8
8
|
- Added: Support for libvirt provider (#138)
|
@@ -19,7 +19,7 @@
|
|
19
19
|
## [0.16.0] - 2015-01-18
|
20
20
|
- Added: Support for IN::PTR records (#98)
|
21
21
|
|
22
|
-
[
|
22
|
+
[1.0.0]: https://github.com/phinze/landrush/compare/v0.19.0...v1.0.0
|
23
23
|
[0.19.0]: https://github.com/phinze/landrush/compare/v0.18.0...v0.19.0
|
24
24
|
[0.18.0]: https://github.com/phinze/landrush/compare/v0.17.0...v0.18.0
|
25
25
|
[0.17.0]: https://github.com/phinze/landrush/compare/v0.16.0...v0.17.0
|
data/CONTRIBUTING.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# Contributing to Landrush
|
2
2
|
|
3
|
+
<!-- MarkdownTOC -->
|
4
|
+
|
5
|
+
- [Working on an issue](#working-on-an-issue)
|
6
|
+
- [Merging pull requests](#merging-pull-requests)
|
7
|
+
- [Releasing](#releasing)
|
8
|
+
- [Maintainers](#maintainers)
|
9
|
+
|
10
|
+
<!-- /MarkdownTOC -->
|
11
|
+
|
12
|
+
|
3
13
|
The following is a set of guidelines for contributing to Landrush.
|
4
14
|
These are just guidelines, please use your best judgment and feel free
|
5
15
|
to propose changes to this document in a pull request.
|
@@ -7,24 +17,50 @@ to propose changes to this document in a pull request.
|
|
7
17
|
At this point, this document is not complete, but as decisions are made
|
8
18
|
they will be added to this document.
|
9
19
|
|
10
|
-
|
20
|
+
<a name="working-on-an-issue"></a>
|
21
|
+
## Working on an issue
|
11
22
|
|
12
|
-
* All changes should
|
23
|
+
* All changes should have a matching issue in the GitHub [issue tracker](https://github.com/vagrant-landrush/landrush/issues). If there is none, create one.
|
24
|
+
* Prepend each commit of a porposed change with the GitHub issue key, eg `Issue #xyz Fixing foo in bar`
|
25
|
+
* All changes should be applied to master via [pull requests](https://help.github.com/articles/using-pull-requests/) (even from maintainers).
|
13
26
|
* All changes should include documentation updates.
|
14
27
|
* Small changes need only 1 ACK. Larger changes need 2 ACKs from
|
15
|
-
maintainers before they will be merged. If the author of the
|
16
|
-
maintainer, the submission is considered 1 of the 2 ACKs. Therefore
|
28
|
+
maintainers before they will be merged. If the author of the pull request is a
|
29
|
+
maintainer, the submission is considered 1 of the 2 ACKs. Therefore pull requests
|
17
30
|
from maintainers only require one additional ACK. By "2 ACKs" we mean
|
18
31
|
that 2 maintainers must acknowledge that the change is a good one. The
|
19
|
-
2nd person to ACK the
|
20
|
-
their agreement.
|
32
|
+
2nd person to ACK the pull request should merge the pull request with a
|
33
|
+
comment including their agreement. We default to moving forward and using
|
34
|
+
revert if needed.
|
35
|
+
|
36
|
+
<a name="merging-pull-requests"></a>
|
37
|
+
## Merging pull requests
|
38
|
+
|
39
|
+
1. Merging committer should merge the pull request. Avoid using GitHub UI and
|
40
|
+
prefer merges over the the command line to avoid merge commits and to keep
|
41
|
+
a linear commit history:
|
42
|
+
|
43
|
+
```
|
44
|
+
# Create a local branch for the pull request
|
45
|
+
$ git checkout -b <branch-name> master
|
46
|
+
|
47
|
+
# Pull the changes
|
48
|
+
$ git pull <remote> <branch-name>
|
49
|
+
|
50
|
+
# If necessary rebase changes on master to ensure we have a fast forward. Also resolve any conflicts
|
51
|
+
$ git rebase -i master
|
52
|
+
|
53
|
+
# Merge changes into master
|
54
|
+
$ git checkout master
|
55
|
+
$ git merge <branch-name>
|
21
56
|
|
22
|
-
|
57
|
+
# Update changelog in the unreleased section. Commit!
|
23
58
|
|
24
|
-
|
25
|
-
|
26
|
-
|
59
|
+
# Push to origin
|
60
|
+
$ git push origin master
|
61
|
+
```
|
27
62
|
|
63
|
+
<a name="releasing"></a>
|
28
64
|
## Releasing
|
29
65
|
|
30
66
|
Prereqs:
|
@@ -35,14 +71,15 @@ Prereqs:
|
|
35
71
|
Steps:
|
36
72
|
|
37
73
|
1. Update `lib/landrush/version.rb` with version number.
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
74
|
+
1. Update `CHANGELOG.md` header with version number and current date.
|
75
|
+
1. Make release commit: `git add lib/landrush/version.rb CHANGELOG.md; git commit -m 'cut vX.Y.Z'`
|
76
|
+
1. Make release tag: `git tag -m vX.Y.Z vX.Y.Z`
|
77
|
+
1. Push release commit: `git push origin master`
|
78
|
+
1. Build release: `rake build`
|
79
|
+
1. Push released gem: `gem push pkg/landrush-X.Y.Z.gem`
|
80
|
+
1. Update CHANGELOG to add an "Unreleased" section, commit as "clean up after vX.Y.Z".
|
45
81
|
|
82
|
+
<a name="maintainers"></a>
|
46
83
|
## Maintainers
|
47
84
|
|
48
85
|
* Brian Exelbierd (@bexelbie)
|
data/Gemfile
CHANGED
@@ -3,24 +3,20 @@ source 'https://rubygems.org'
|
|
3
3
|
# Can't use `gemspec` to pull in dependencies, because the landrush gem needs
|
4
4
|
# to be in the :plugins group for Vagrant to detect and load it in development
|
5
5
|
|
6
|
-
|
7
|
-
gem 'rake'
|
8
|
-
gem 'json'
|
6
|
+
gemspec
|
9
7
|
|
10
8
|
# Vagrant's special group
|
11
9
|
group :plugins do
|
12
10
|
gem 'landrush', path: '.'
|
13
11
|
end
|
14
12
|
|
15
|
-
group :test do
|
16
|
-
gem 'rubocop', '~> 0.38.0'
|
17
|
-
end
|
18
|
-
|
19
13
|
group :development do
|
20
14
|
gem 'vagrant',
|
21
15
|
:git => 'git://github.com/mitchellh/vagrant.git',
|
22
|
-
:ref => 'v1.8.
|
16
|
+
:ref => 'v1.8.4'
|
23
17
|
|
18
|
+
gem 'rake', '~> 10'
|
19
|
+
gem 'rubocop', '~> 0.38.0'
|
24
20
|
gem 'byebug'
|
25
21
|
gem 'mocha'
|
26
22
|
gem 'minitest'
|
data/README.md
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# Landrush: DNS for Vagrant [![Build Status](https://travis-ci.org/vagrant-landrush/landrush.png)](https://travis-ci.org/vagrant-landrush/landrush)
|
2
2
|
|
3
|
-
|
3
|
+
Landrush is a simple cross-platform DNS for Vagrant VMs that is visible on both,
|
4
|
+
the guest and the host.
|
4
5
|
|
5
|
-
|
6
|
+
It spins up a small DNS server and redirects DNS traffic from your
|
6
7
|
VMs to use it, automatically registering/unregistering IP addresses of guests
|
7
|
-
as they come up and down.
|
8
|
+
as they come up and go down.
|
8
9
|
|
9
10
|
**Note**: Windows support is currently considered experimental. If you having
|
10
11
|
problems using Landrush on Windows please let us know.
|
@@ -13,7 +14,7 @@ problems using Landrush on Windows please let us know.
|
|
13
14
|
|
14
15
|
- [Installation](#installation)
|
15
16
|
- [Usage](#usage)
|
16
|
-
- [
|
17
|
+
- [Getting started](#getting-started)
|
17
18
|
- [Dynamic entries](#dynamic-entries)
|
18
19
|
- [Static entries](#static-entries)
|
19
20
|
- [Wildcard Subdomains](#wildcard-subdomains)
|
@@ -25,6 +26,8 @@ problems using Landrush on Windows please let us know.
|
|
25
26
|
- [Windows](#windows)
|
26
27
|
- [Other Devices \(phone\)](#other-devices-phone)
|
27
28
|
- [Additional CLI commands](#additional-cli-commands)
|
29
|
+
- [Miscellaneous Tricks and Tips](#miscellaneous-tricks-and-tips)
|
30
|
+
- [How to avoid providing sudo password on OS X](#how-to-avoid-providing-sudo-password-on-os-x)
|
28
31
|
- [Development](#development)
|
29
32
|
- [Help Out!](#help-out)
|
30
33
|
|
@@ -40,35 +43,77 @@ Install under Vagrant (1.1 or later):
|
|
40
43
|
<a name="usage"></a>
|
41
44
|
## Usage
|
42
45
|
|
43
|
-
<a name="
|
44
|
-
###
|
46
|
+
<a name="getting-started"></a>
|
47
|
+
### Getting started
|
45
48
|
|
46
|
-
Enable the plugin in your `Vagrantfile`:
|
49
|
+
1. Enable the plugin in your `Vagrantfile`:
|
47
50
|
|
48
|
-
|
51
|
+
config.landrush.enabled = true
|
49
52
|
|
50
|
-
Bring up a machine.
|
53
|
+
1. Bring up a machine.
|
51
54
|
|
52
|
-
|
55
|
+
$ vagrant up
|
53
56
|
|
54
|
-
|
57
|
+
1. You are able to get your VM's hostname resolved on your host:
|
55
58
|
|
56
59
|
$ dig -p 10053 @localhost myhost.vagrant.test
|
57
60
|
|
58
|
-
If you shut down your guest, the entries associated with it will be removed.
|
61
|
+
1. If you shut down your guest, the entries associated with it will be removed.
|
59
62
|
|
60
|
-
Landrush
|
63
|
+
Landrush retrieves your VM's hostname from either the vagrant config
|
64
|
+
or it uses the system's actual hostname by running the `hostname` command.
|
65
|
+
A default of "guest-vm" is assumed if hostname is otherwise not available.
|
66
|
+
|
67
|
+
A Landrush example configuration could look like this:
|
68
|
+
|
69
|
+
Vagrant.configure("2") do |config|
|
70
|
+
config.vm.box = "hashicorp/precise64"
|
71
|
+
|
72
|
+
config.landrush.enabled = true
|
73
|
+
|
74
|
+
config.vm.hostname = "myhost.vagrant.test"
|
75
|
+
|
76
|
+
config.landrush.host 'static1.example.com', '1.2.3.4'
|
77
|
+
config.landrush.host 'static2.example.com', '2.3.4.5'
|
78
|
+
end
|
61
79
|
|
62
80
|
<a name="dynamic-entries"></a>
|
63
81
|
### Dynamic entries
|
64
82
|
|
65
|
-
Every time a VM is started, its IP address is automatically detected and a DNS record is created
|
83
|
+
Every time a VM is started, its IP address is automatically detected and a DNS record is created
|
84
|
+
that maps the hostname to its IP. The detection works by listing all configured interfaces of the
|
85
|
+
guest using [landrush-ip](https://rubygems.org/gems/landrush-ip/versions/0.2.3), picking the last
|
86
|
+
valid IP found, while ignoring any excluded interfaces.
|
87
|
+
|
88
|
+
Excluded interfaces are an array of regular expressions; the value shown here is the default used
|
89
|
+
when no explicit value for `config.landrush.host_interface_excludes` is specified in your
|
90
|
+
`Vagrantfile`:
|
91
|
+
|
92
|
+
config.landrush.host_interface_excludes = [/lo[0-9]*/, /docker[0-9]+/, /tun[0-9]+/]
|
93
|
+
|
94
|
+
If Landrush fails to detect the correct IP address (or none at all), you can extend this exclusion
|
95
|
+
range to exclude more interfaces.
|
66
96
|
|
67
|
-
If
|
97
|
+
If you need or want to select an interface explicitly and you know its name, you can also tell
|
98
|
+
Landrush to grab that interface's IP address explicitly:
|
99
|
+
|
100
|
+
config.landrush.host_interface = 'eth0'
|
101
|
+
|
102
|
+
Do note that, if you specify an interface explicitly, it will have priority over
|
103
|
+
`config.landrush.host_interface_excludes`. In other words, if `config.landrush.host_interface_excludes`
|
104
|
+
is set to `[/eth[0-9]*/]`, but `config.landrush.host_interface` is set to `eth0` and `eth0` exists
|
105
|
+
as an interface, the IP address of `eth0` is returned. The interface setting takes precedence over
|
106
|
+
the exclude setting. If the interface does not exist, the regular heuristics will apply and Landrush
|
107
|
+
will pick the last non-excluded IP found.
|
108
|
+
|
109
|
+
If all else fails, you can override it entirely:
|
68
110
|
|
69
111
|
config.landrush.host_ip_address = '1.2.3.4'
|
70
112
|
|
71
|
-
|
113
|
+
This setting will override both the exclude and interface settings completely.
|
114
|
+
|
115
|
+
If you are using a multi-machine `Vagrantfile`, configure this inside each of your `config.vm.define`
|
116
|
+
sections.
|
72
117
|
|
73
118
|
<a name="static-entries"></a>
|
74
119
|
### Static entries
|
@@ -77,25 +122,35 @@ You can add static host entries to the DNS server in your `Vagrantfile` like so:
|
|
77
122
|
|
78
123
|
config.landrush.host 'myhost.example.com', '1.2.3.4'
|
79
124
|
|
80
|
-
This is great for overriding production services for nodes you might be testing locally. For example,
|
125
|
+
This is great for overriding production services for nodes you might be testing locally. For example,
|
126
|
+
perhaps you might want to override the hostname of your puppetmaster to point to a local vagrant box
|
127
|
+
instead.
|
81
128
|
|
82
129
|
<a name="wildcard-subdomains"></a>
|
83
130
|
### Wildcard Subdomains
|
84
131
|
|
85
|
-
For your convenience, any subdomain of a DNS entry known to landrush will resolve to the same IP
|
132
|
+
For your convenience, any subdomain of a DNS entry known to landrush will resolve to the same IP
|
133
|
+
address as the entry. For example: given `myhost.vagrant.test -> 1.2.3.4`, both
|
134
|
+
`foo.myhost.vagrant.test` and `bar.myhost.vagrant.test` will also resolve to `1.2.3.4`.
|
86
135
|
|
87
|
-
If you would like to configure your guests to be accessible from the host as subdomains of something
|
136
|
+
If you would like to configure your guests to be accessible from the host as subdomains of something
|
137
|
+
other than the default `vagrant.test`, you can use the `config.landrush.tld` option in your
|
138
|
+
Vagrantfile like so:
|
88
139
|
|
89
140
|
config.landrush.tld = 'vm'
|
90
141
|
|
91
|
-
Note that from the __host__, you will only be able to access subdomains of your configured TLD by
|
142
|
+
Note that from the __host__, you will only be able to access subdomains of your configured TLD by
|
143
|
+
default- so wildcard subdomains only apply to that space. For the __guest__, wildcard subdomains
|
144
|
+
work for anything.
|
92
145
|
|
93
146
|
<a name="unmatched-queries"></a>
|
94
147
|
### Unmatched Queries
|
95
148
|
|
96
|
-
Any DNS queries that do not match will be passed through to an upstream DNS server, so this will be
|
149
|
+
Any DNS queries that do not match will be passed through to an upstream DNS server, so this will be
|
150
|
+
able to serve as the one-stop shop for your guests' DNS needs.
|
97
151
|
|
98
|
-
If you would like to configure your own upstream servers, add upstream entries to your
|
152
|
+
If you would like to configure your own upstream servers, add upstream entries to your
|
153
|
+
`Vagrantfile` like so:
|
99
154
|
|
100
155
|
config.landrush.upstream '10.1.1.10'
|
101
156
|
# Set the port to 1001
|
@@ -106,46 +161,59 @@ If you would like to configure your own upstream servers, add upstream entries t
|
|
106
161
|
<a name="visibility-on-the-guest"></a>
|
107
162
|
### Visibility on the Guest
|
108
163
|
|
109
|
-
Linux guests should automatically have their DNS traffic redirected via `iptables` rules to the
|
164
|
+
Linux guests should automatically have their DNS traffic redirected via `iptables` rules to the
|
165
|
+
Landrush DNS server. File an issue if this does not work for you.
|
110
166
|
|
111
167
|
To disable this functionality:
|
112
168
|
|
113
169
|
config.landrush.guest_redirect_dns = false
|
114
170
|
|
115
|
-
You may want to do this if you are already proxying all your DNS requests through your host
|
116
|
-
|
171
|
+
You may want to do this if you are already proxying all your DNS requests through your host
|
172
|
+
(e.g. using VirtualBox's natdnshostresolver1 option) and you
|
173
|
+
have DNS servers that you can easily set as upstreams in the daemon (e.g. DNS requests that go
|
174
|
+
through the host's VPN connection).
|
117
175
|
|
118
176
|
<a name="visibility-on-the-host"></a>
|
119
177
|
### Visibility on the Host
|
120
178
|
|
179
|
+
Visibility on the host means that the hostname of the VMs can be resolved on the host's DNS system.
|
180
|
+
Depending on the OS this might require some manual configuration.
|
181
|
+
|
121
182
|
<a name="os-x"></a>
|
122
183
|
#### OS X
|
123
184
|
|
124
|
-
If you're on an OS X host, we use a nice trick to unobtrusively add a secondary DNS server only for
|
125
|
-
Landrush adds a file into `/etc/resolver`
|
126
|
-
|
127
|
-
|
185
|
+
If you're on an OS X host, we use a nice trick to unobtrusively add a secondary DNS server only for
|
186
|
+
specific domains. Landrush adds automatically during startup a file into `/etc/resolver`
|
187
|
+
that points lookups for hostnames ending in your `config.landrush.tld` domain to its DNS server.
|
188
|
+
(Check out `man 5 resolver` on your Mac OS X host for more information on this file's syntax.)
|
128
189
|
|
129
190
|
<a name="linux"></a>
|
130
191
|
#### Linux
|
131
192
|
|
132
|
-
Though it's not automatically set up by
|
133
|
-
can integrate Landrush with dnsmasq on Ubuntu like so (tested on Ubuntu 13.10):
|
193
|
+
Though it's not automatically set up by Landrush, similar behavior can be achieved on Linux hosts
|
194
|
+
with `dnsmasq`. You can integrate Landrush with `dnsmasq` on Ubuntu like so (tested on Ubuntu 13.10):
|
134
195
|
|
135
196
|
sudo apt-get install -y resolvconf dnsmasq
|
136
197
|
sudo sh -c 'echo "server=/vagrant.test/127.0.0.1#10053" > /etc/dnsmasq.d/vagrant-landrush'
|
137
198
|
sudo service dnsmasq restart
|
138
199
|
|
139
|
-
If you use a TLD other than the default `vagrant.test`, replace the TLD in the above instructions
|
200
|
+
If you use a TLD other than the default `vagrant.test`, replace the TLD in the above instructions
|
201
|
+
accordingly. Please be aware that anything ending in '.local' as TLD will not work because the
|
202
|
+
`avahi` daemon reserves this TLD for its own uses.
|
140
203
|
|
141
204
|
<a name="windows"></a>
|
142
205
|
#### Windows
|
143
206
|
|
144
|
-
|
145
|
-
|
207
|
+
On Windows a secondary DNS server can be configured via the properties of the
|
208
|
+
network adapter used by the VM. Landrush will attempt to configure the adapter automatically
|
209
|
+
during startup. If this fails, please follow the manual setup instructions below.
|
210
|
+
|
211
|
+
It is recommended to use an elevated command prompt (command prompt with full administrator
|
212
|
+
permissions), since admin privileges are needed to make the required changes. Landrush will
|
213
|
+
try to elevate your prompt automatically, but this requires to spawn additional processes which in
|
214
|
+
turn loose some potentially important log messages.
|
146
215
|
|
147
|
-
|
148
|
-
network adapter. This will be illustrated in the following using Windows 10 with
|
216
|
+
In the following section manual network configuration is described using Windows 10 and
|
149
217
|
VirtualBox.
|
150
218
|
|
151
219
|
When running VirtualBox on Windows in combination with Landrush the Network
|
@@ -221,9 +289,44 @@ Please refer to [/doc/proxy-mobile](/doc/proxy-mobile) for instructions.
|
|
221
289
|
Check out `vagrant landrush` for additional commands to monitor the DNS server daemon.
|
222
290
|
|
223
291
|
|
292
|
+
<a name="miscellaneous-tricks-and-tips"></a>
|
293
|
+
## Miscellaneous Tricks and Tips
|
294
|
+
|
295
|
+
<a name="how-to-avoid-providing-sudo-password-on-os-x"></a>
|
296
|
+
### How to avoid providing sudo password on OS X
|
297
|
+
|
298
|
+
When using Landrush on OS X, Landrush will try to create a file in `/etc/resolver` to make the guest
|
299
|
+
VM visible via DNS on the host (see [OS X](#os-x) in the [visibility on host](#visibility-on-the-host)
|
300
|
+
section). To create this file sudo permissions are needed and Landrush will ask you for your sudo
|
301
|
+
password. This can be avoided by adding the following entries to the bottom of the sudoer
|
302
|
+
configuration. Make sure to edit your `/etc/sudoers` configuration via `sudo visudo`:
|
303
|
+
|
304
|
+
# Begin Landrush config
|
305
|
+
Cmnd_Alias VAGRANT_LANDRUSH_HOST_MKDIR = /bin/mkdir /etc/resolver/*
|
306
|
+
Cmnd_Alias VAGRANT_LANDRUSH_HOST_CP = /bin/cp /*/vagrant_landrush_host_config* /etc/resolver/*
|
307
|
+
Cmnd_Alias VAGRANT_LANDRUSH_HOST_CHMOD = /bin/chmod 644 /etc/resolver/*
|
308
|
+
%admin ALL=(ALL) NOPASSWD: VAGRANT_LANDRUSH_HOST_MKDIR, VAGRANT_LANDRUSH_HOST_CP, VAGRANT_LANDRUSH_HOST_CHMOD
|
309
|
+
# End Landrush config
|
310
|
+
|
224
311
|
<a name="development"></a>
|
225
312
|
## Development
|
226
313
|
|
314
|
+
The following should get you started to develop on the Landrush code base. As a prerequisite you
|
315
|
+
will need a Ruby 2.0 environment. We recommend to use [RVM](https://rvm.io/) to create an isolated
|
316
|
+
development environment. On Windows the [RubyInstaller for Windows](http://rubyinstaller.org/) is
|
317
|
+
probably the easiest way to get started. In this case you will need the
|
318
|
+
[DevKit](http://rubyinstaller.org/add-ons/devkit/) as well.
|
319
|
+
|
320
|
+
Once you have a working Ruby environment it is time to
|
321
|
+
[fork](https://help.github.com/articles/fork-a-repo/) the repository
|
322
|
+
(refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide for more info].
|
323
|
+
|
324
|
+
The following are the most important commands you will need for development:
|
325
|
+
|
326
|
+
* Install [Bundler](http://bundler.io/):
|
327
|
+
|
328
|
+
$ gem install bundler
|
329
|
+
|
227
330
|
* Install dependencies:
|
228
331
|
|
229
332
|
$ bundle install
|
@@ -242,13 +345,17 @@ Check out `vagrant landrush` for additional commands to monitor the DNS server d
|
|
242
345
|
|
243
346
|
* Run cucumber/aruba acceptance tests:
|
244
347
|
|
245
|
-
$ bundle exec
|
348
|
+
$ bundle exec rake features
|
246
349
|
|
247
350
|
Note, that the acceptance tests currently only work out of the box on OS X.
|
248
351
|
On Linux one has to manually configure the host visibility for the TLD
|
249
352
|
_landrush-acceptance-test_. See for [Linux](#linux). On Windows the acceptance
|
250
353
|
tests won't work due to a current bug in [Aruba](https://github.com/cucumber/aruba/issues/387).
|
251
354
|
|
355
|
+
* Run a single cucumber/aruba acceptance tests:
|
356
|
+
|
357
|
+
$ bundle exec rake features FEATURE=features/<feature-filename>.feature
|
358
|
+
|
252
359
|
* Build the Landrush gem:
|
253
360
|
|
254
361
|
$ bundle exec rake install
|
@@ -257,14 +364,19 @@ Check out `vagrant landrush` for additional commands to monitor the DNS server d
|
|
257
364
|
|
258
365
|
$ bundle exec rake clean clobber
|
259
366
|
|
260
|
-
*
|
261
|
-
|
367
|
+
* Deploy to RubyGems:
|
368
|
+
|
369
|
+
$ bundle exec rake release
|
370
|
+
|
371
|
+
* Run the vagrant binary with the Landrush plugin loaded from your local source code:
|
262
372
|
|
263
373
|
bundle exec vagrant landrush <command>
|
264
374
|
|
265
375
|
<a name="help-out"></a>
|
266
376
|
## Help Out!
|
267
377
|
|
268
|
-
This project could use your feedback and help! Please don't hesitate to open issues or submit pull
|
378
|
+
This project could use your feedback and help! Please don't hesitate to open issues or submit pull
|
379
|
+
requests. NO HESITATION IS ALLOWED. NONE WHATSOEVER. See [CONTRIBUTING.md](CONTRIBUTING.md) for
|
380
|
+
more details.
|
269
381
|
|
270
382
|
The Maintainers try to meet periodically. [Notes](NOTES.md) are available.
|
@@ -20,6 +20,15 @@ Feature: dns_resolution
|
|
20
20
|
And the hostname "my-host.landrush-acceptance-test" should resolve to "10.10.10.123" on the host
|
21
21
|
And the hostname "my-host.landrush-acceptance-test" should resolve to "10.10.10.123" on the guest
|
22
22
|
|
23
|
+
When I successfully run `bundle exec vagrant landrush set my-static-host.landrush-acceptance-test 42.42.42.42`
|
24
|
+
Then the hostname "my-static-host.landrush-acceptance-test" should resolve to "42.42.42.42" on the internal DNS server
|
25
|
+
And the hostname "my-static-host.landrush-acceptance-test" should resolve to "42.42.42.42" on the host
|
26
|
+
And the hostname "my-static-host.landrush-acceptance-test" should resolve to "42.42.42.42" on the guest
|
27
|
+
|
28
|
+
When I successfully run `bundle exec vagrant landrush set my-static-cname-host.landrush-acceptance-test my-static-host.landrush-acceptance-test`
|
29
|
+
Then the hostname "my-static-cname-host.landrush-acceptance-test" should resolve to "42.42.42.42" on the internal DNS server
|
30
|
+
And the hostname "my-static-cname-host.landrush-acceptance-test" should resolve to "42.42.42.42" on the host
|
31
|
+
|
23
32
|
Examples:
|
24
33
|
| box | provider |
|
25
34
|
| debian/jessie64 | virtualbox |
|
@@ -0,0 +1,57 @@
|
|
1
|
+
Feature: landrush-ip
|
2
|
+
Landrush should pick the desired IP, given multiple network interfaces.
|
3
|
+
|
4
|
+
Scenario Outline: booting a box and picking a specific interface
|
5
|
+
Given a file named "Vagrantfile" with:
|
6
|
+
"""
|
7
|
+
Vagrant.configure('2') do |config|
|
8
|
+
config.vm.box = '<box>'
|
9
|
+
config.vm.hostname = 'my-host.landrush-acceptance-test'
|
10
|
+
|
11
|
+
config.vm.network :private_network, type: 'dhcp'
|
12
|
+
config.vm.network :private_network, type: 'dhcp'
|
13
|
+
config.vm.network :private_network, type: 'dhcp'
|
14
|
+
config.vm.network :private_network, type: 'dhcp'
|
15
|
+
config.vm.network :private_network, type: 'dhcp'
|
16
|
+
|
17
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
18
|
+
|
19
|
+
config.landrush.enabled = true
|
20
|
+
config.landrush.tld = 'landrush-acceptance-test'
|
21
|
+
config.landrush.host_interface = 'eth3'
|
22
|
+
config.landrush.host_interface_excludes = [/eth[0-9]+/]
|
23
|
+
end
|
24
|
+
"""
|
25
|
+
When I successfully run `bundle exec vagrant up --provider <provider>`
|
26
|
+
Then the host visible IP address of the guest is the IP of interface "eth3"
|
27
|
+
|
28
|
+
Examples:
|
29
|
+
| box | provider |
|
30
|
+
| debian/jessie64 | virtualbox |
|
31
|
+
|
32
|
+
Scenario Outline: booting a box and excluding interfaces it should pick the last interface
|
33
|
+
Given a file named "Vagrantfile" with:
|
34
|
+
"""
|
35
|
+
Vagrant.configure('2') do |config|
|
36
|
+
config.vm.box = '<box>'
|
37
|
+
config.vm.hostname = 'my-host.landrush-acceptance-test'
|
38
|
+
|
39
|
+
config.vm.network :private_network, type: 'dhcp'
|
40
|
+
config.vm.network :private_network, type: 'dhcp'
|
41
|
+
config.vm.network :private_network, type: 'dhcp'
|
42
|
+
config.vm.network :private_network, type: 'dhcp'
|
43
|
+
config.vm.network :private_network, type: 'dhcp'
|
44
|
+
|
45
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
46
|
+
|
47
|
+
config.landrush.enabled = true
|
48
|
+
config.landrush.tld = 'landrush-acceptance-test'
|
49
|
+
config.landrush.host_interface_excludes = [/eth1/, /eth2/, /eth5/]
|
50
|
+
end
|
51
|
+
"""
|
52
|
+
When I successfully run `bundle exec vagrant up --provider <provider>`
|
53
|
+
Then the host visible IP address of the guest is the IP of interface "eth4"
|
54
|
+
|
55
|
+
Examples:
|
56
|
+
| box | provider |
|
57
|
+
| debian/jessie64 | virtualbox |
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'landrush/server'
|
2
|
+
|
3
|
+
Then(/^the host visible IP address of the guest is the IP of interface "([^"]+)"/) do |interface|
|
4
|
+
cmd = "vagrant ssh -c \"ip addr list #{interface} | grep 'inet ' | cut -d' ' -f6| cut -d/ -f1\""
|
5
|
+
run(cmd)
|
6
|
+
expect(last_command_started).to have_output(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)
|
7
|
+
|
8
|
+
ip = last_command_started.output.split("\n").last
|
9
|
+
|
10
|
+
run('vagrant landrush list')
|
11
|
+
|
12
|
+
expect(last_command_started).to have_output(/#{ip}$/)
|
13
|
+
end
|
data/landrush.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
server as well. See the README for more documentation.
|
21
21
|
DESCRIP
|
22
22
|
spec.summary = %q{a vagrant plugin providing consistent DNS visible on host and guests}
|
23
|
-
spec.homepage = 'https://github.com/
|
23
|
+
spec.homepage = 'https://github.com/vagrant-landrush/landrush'
|
24
24
|
spec.license = 'MIT'
|
25
25
|
|
26
26
|
spec.files = `git ls-files`.split($/)
|
@@ -29,4 +29,6 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.require_paths = ['lib']
|
30
30
|
|
31
31
|
spec.add_dependency 'rubydns', '0.8.5'
|
32
|
+
spec.add_dependency 'win32-process'
|
33
|
+
spec.add_dependency 'landrush-ip', '~> 0.2.3'
|
32
34
|
end
|