landrush 1.3.0 → 1.3.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d8b8d3d76cf287d4cd432d2d702842b5efb3b672cd6c25fec249b76d989eb34
4
- data.tar.gz: '09b16732791cb9d9d1112f1695dff95fb317ad35c07c2878c1011fb8918c5c4d'
3
+ metadata.gz: d31f07ae3a474d9a5e399e15ce9bffa3cce616651a999437094d1aece8c617d2
4
+ data.tar.gz: 6e91547880229bdd51b4df747d8dde2fc9d48b167ff0a7acf3e83a56a0df1ce3
5
5
  SHA512:
6
- metadata.gz: f28250855875dff56af42a8a6c0470f94b9d1cc01661ecca63cba5f2ce4f2bb1f2df7895d48ac5df67cf46357b6bdaf06527eb8fe2abd94c86c79b2d9b0a5045
7
- data.tar.gz: 51a1f6a0cc73405ba8913d72fa29ed98180e70eef38b456c8c7d28c025079eb22937984be94ed105e8442f8c355dc8a51fdebbb3272d2b1adb8d2f687f77727e
6
+ metadata.gz: c6c01e67c9d8f55d8f0f4d9a42e959e4005840fce1d6f2d86f6060973a0313158beaa1bdfadec68ba7ef8da18da56824ebee27482a2498688f2f6b21f4bf00c3
7
+ data.tar.gz: dbf7d7cbc7ba989a89408468c567b1036ebaefa634422f93aeba540783fcf0b9851d450300de2dcbcf3b5e8366cbfac4f10a6c7e657363469af23bde19f6a1f8
@@ -1,3 +1,11 @@
1
+ ## [1.3.1] - 2018-12-04
2
+
3
+ - Issue [#11](https://github.com/vagrant-landrush/landrush/issues/11) - Landrush prevents the machine from reaching internet
4
+ - Issue [#165](https://github.com/vagrant-landrush/landrush/issues/165) - Unable to use with CentOS v5 boxes on vmware_fusion
5
+ - Issue [#314](https://github.com/vagrant-landrush/landrush/issues/314) - get_network_name fails on windows 10
6
+ - Issue [#319](https://github.com/vagrant-landrush/landrush/issues/319) - Installation error because can't build eventmachine gem
7
+ - Issue [#321](https://github.com/vagrant-landrush/landrush/issues/321) - iptables rule - move from OUTPUT => PREROUTING
8
+
1
9
  ## [1.3.0] - 2018-09-19
2
10
 
3
11
  - Issue [#177](https://github.com/vagrant-landrush/landrush/issues/177) - Allow multiple TLD kind/feature priority/major
@@ -81,26 +81,6 @@ $ git merge fix-123
81
81
  $ git push origin master
82
82
  -------------------------------------------------------------------------
83
83
 
84
- == Releasing
85
-
86
- * Make sure the HEAD of development builds and passes all tests:
87
- `bundle exec rake clean rubocop test features install`.
88
- * Review https://github.com/vagrant-landrush/landrush/milestones[milestone] for the current release
89
- ** Make sure all issues are resolved
90
- ** Move unresolved issues into an upcoming release
91
- ** Close milestone
92
- * Update the link:CHANGELOG.md[CHANGELOG]
93
- * Update link:lib/landrush/version.rb[version.rb] with the correct
94
- release version. Consider http://semver.org/:[Semantic Versioning] guidelines
95
- when deciding on the release version
96
- * Commit _CHANGELOG_ and _version.rb_ using commit message of the form:
97
- `cut v<version>`
98
- * Push commit to upstream
99
- * Release the gem: `bundle exec rake release`
100
- * Update link:lib/landrush/version.rb[version.rb] with the next anticipated release version, eg _1.4.0.dev_
101
- * Commit with message: `setting dev version <version>.dev`
102
- * Push upstream
103
-
104
84
  == Maintainers
105
85
 
106
86
  * Brian Exelbierd (@bexelbie)
data/Gemfile CHANGED
@@ -16,7 +16,7 @@ group :development do
16
16
  gem 'minitest'
17
17
  gem 'mocha'
18
18
  gem 'rake', '~> 10'
19
- gem 'rubocop'
19
+ gem 'rubocop', '~> 0.59.0'
20
20
  gem 'vagrant',
21
21
  git: 'https://github.com/mitchellh/vagrant.git',
22
22
  ref: 'v2.1.2'
@@ -4,6 +4,7 @@
4
4
 
5
5
  https://travis-ci.org/vagrant-landrush/landrush[image:https://travis-ci.org/vagrant-landrush/landrush.png[Build Status]]
6
6
  https://ci.appveyor.com/project/hferentschik/landrush-3agrx/branch/master[image:https://ci.appveyor.com/api/projects/status/3iv8sv5v73s15mt6/branch/master?svg=true[Build Status]]
7
+ image:https://badge.fury.io/rb/landrush.svg["Gem Version", link="https://badge.fury.io/rb/landrush"]
7
8
 
8
9
  Landrush is a simple cross-platform DNS for Vagrant VMs that is visible
9
10
  on both, the guest and the host.
@@ -21,41 +21,47 @@ The following sections list the most important commands you will need for develo
21
21
 
22
22
  * Install http://bundler.io/[Bundler]:
23
23
  +
24
- ....
24
+ [source,bash]
25
+ ----
25
26
  $ gem install bundler
26
- ....
27
+ ----
27
28
 
28
29
  * Install dependencies:
29
30
  +
30
- ....
31
+ [source,bash]
32
+ ----
31
33
  $ bundle install
32
- ....
34
+ ----
33
35
 
34
36
  * Get a list of all available build tasks:
35
37
  +
36
- ....
38
+ [source,bash]
39
+ ----
37
40
  $ bundle exec rake -T
38
- ....
41
+ ----
39
42
 
40
43
  * Build the Landrush gem:
41
44
  +
42
- ....
45
+ [source,bash]
46
+ ----
43
47
  $ bundle exec rake build
44
- ....
48
+ ----
45
49
 
46
50
  * Clean all generated files:
47
51
  +
48
- ....
52
+ [source,bash]
53
+ ----
49
54
  $ bundle exec rake clean clobber
50
- ....
55
+ ----
51
56
 
52
57
  == Tests
53
58
 
54
59
  * Run the test suite:
55
60
  +
56
- ....
61
+ [source,bash]
62
+ ----
57
63
  $ bundle exec rake test
58
- ....
64
+ ----
59
65
 
60
66
  TIP: The unit tests utilize https://github.com/seattlerb/minitest[minitest] as test harness.
61
67
  Tests are mainly written in Spec style.
@@ -64,15 +70,17 @@ Refer to https://github.com/vagrant-landrush/landrush/blob/master/test/test_help
64
70
 
65
71
  * Run a single test file:
66
72
  +
67
- ....
73
+ [source,bash]
74
+ ----
68
75
  $ bundle exec rake test TEST=<path to test file>
69
- ....
76
+ ----
70
77
 
71
78
  * Run cucumber/aruba acceptance tests:
72
79
  +
73
- ....
80
+ [source,bash]
81
+ ----
74
82
  $ bundle exec rake features
75
- ....
83
+ ----
76
84
 
77
85
  NOTE: The acceptance tests currently work only for OS X, out of the box.
78
86
  On Linux, one has to manually configure the host visibility for the TLD _landrush-acceptance-test_.
@@ -81,9 +89,10 @@ On Windows, the acceptance tests won't work due to a bug in https://github.com/c
81
89
 
82
90
  * Run a single cucumber/aruba acceptance tests:
83
91
  +
84
- ....
92
+ [source,bash]
93
+ ----
85
94
  $ bundle exec rake features FEATURE=features/<feature-filename>.feature
86
- ....
95
+ ----
87
96
 
88
97
  == Documentation
89
98
 
@@ -92,6 +101,7 @@ refer to the http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/[AsciiD
92
101
 
93
102
  To build the documentation you can execute:
94
103
 
104
+ [source,bash]
95
105
  ----
96
106
  $ bundle exec rake html
97
107
  ----
@@ -101,12 +111,44 @@ which will build the HTML documentation into the folder _build/html_.
101
111
  The source code also contains a link:../Guardfile[Guardfile] for the https://github.com/guard/guard[Guard] library.
102
112
  You can execute:
103
113
 
114
+ [source,bash]
104
115
  ----
105
116
  $ bundle exec guard
106
117
  ----
107
118
 
108
119
  and your HTML documentation will be automatically updated on each change to an Asciidoc source file.
109
120
 
121
+ == Releasing
122
+
123
+ [NOTE]
124
+ ====
125
+ In order to publish to RubyGems you need to have an account and you need to have an API key configured on your machine.
126
+ If you have an account you can setup the API key using:
127
+
128
+ [source,bash]
129
+ ----
130
+ curl -u carlos https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials
131
+ ----
132
+ ====
133
+
134
+ * Make sure the HEAD of development builds and passes all tests:
135
+ `bundle exec rake clean rubocop test features install`.
136
+ * Review https://github.com/vagrant-landrush/landrush/milestones[milestone] for the current release
137
+ ** Make sure all issues are resolved
138
+ ** Move unresolved issues into an upcoming release
139
+ ** Close milestone
140
+ * Update the link:CHANGELOG.md[CHANGELOG] (you can use _scripts/changelog.sh to generate the content)
141
+ * Update link:lib/landrush/version.rb[version.rb] with the correct
142
+ release version. Consider http://semver.org/:[Semantic Versioning] guidelines
143
+ when deciding on the release version
144
+ * Commit _CHANGELOG_ and _version.rb_ using commit message of the form:
145
+ `cut v<version>`
146
+ * Push commit to upstream
147
+ * Release the gem: `bundle exec rake release`
148
+ * Update link:lib/landrush/version.rb[version.rb] with the next anticipated release version, eg _1.4.0.dev_
149
+ * Commit with message: `setting dev version <version>.dev`
150
+ * Push upstream
151
+
110
152
  == Misc
111
153
 
112
154
  * Run the vagrant binary with the Landrush plugin loaded from your local
@@ -10,33 +10,41 @@ toc::[]
10
10
 
11
11
  == How to avoid providing sudo password on OS X
12
12
 
13
- When using Landrush on OS X, Landrush will try to create a file in
14
- `/etc/resolver` to make the guest VM visible via DNS on the host. See *OS X* in the *Visibility on the Host* section of the link:Usage.adoc[Usage guide]. To create this file, sudo permissions are needed and Landrush
15
- will ask you for your sudo password. +
13
+ When using Landrush on OS X, Landrush will try to create a file in `/etc/resolver` to make the guest VM visible via DNS on the host.
14
+ See *OS X* in the *Visibility on the Host* section of the link:Usage.adoc[Usage guide].
15
+ To create this file, sudo permissions are needed and Landrush will ask you for your sudo password. +
16
16
  +
17
- This can be avoided by adding the
18
- following entries to the bottom of the sudoer configuration. Make sure
19
- to edit your `/etc/sudoers` configuration via `sudo visudo`:
17
+ This can be avoided by adding the following entries to the bottom of the sudoer configuration.
18
+ Make sure to edit your `/etc/sudoers` configuration via `sudo visudo`:
20
19
 
21
- ....
20
+ [source,bash]
21
+ ----
22
22
  # Begin Landrush config
23
23
  Cmnd_Alias VAGRANT_LANDRUSH_HOST_MKDIR = /bin/mkdir /etc/resolver/*
24
24
  Cmnd_Alias VAGRANT_LANDRUSH_HOST_CP = /bin/cp /*/vagrant_landrush_host_config* /etc/resolver/*
25
25
  Cmnd_Alias VAGRANT_LANDRUSH_HOST_CHMOD = /bin/chmod 644 /etc/resolver/*
26
26
  %admin ALL=(ALL) NOPASSWD: VAGRANT_LANDRUSH_HOST_MKDIR, VAGRANT_LANDRUSH_HOST_CP, VAGRANT_LANDRUSH_HOST_CHMOD
27
27
  # End Landrush config
28
- ....
28
+ ----
29
29
 
30
30
  == Guest is unable to access the Internet
31
31
 
32
- In some network configurations the access to outside DNS servers is
33
- restricted (firewalls, VPN, etc). Since unmatched DNS queries are per
34
- default passed through to Google's DNS servers, this can lead to the
35
- fact that the guest cannot access anything in the outside world. +
36
- +
37
- If you face problem with the guest's DNS, verify that you can access
38
- Google's DNS server under __8.8.8.8__. If it does not work, you will
39
- need to set a custom upstream DNS server. Check your network
40
- configuration on the host or ask your network administrator about the
41
- right DNS server address to use. You can set the custom DNS server via
42
- the `config.landrush.upstream` option, see section on *Unmatched Queries* in the link:Usage.adoc[Usage guide].
32
+ In some network configurations the access to outside DNS servers is restricted (firewalls, VPN, etc).
33
+ Since unmatched DNS queries are per default passed through to Google's DNS servers, this can lead to the fact that the guest cannot access anything in the outside world.
34
+
35
+ If you face problem with the guest's DNS, verify that you can access Google's DNS server under __8.8.8.8__.
36
+ If it does not work, you will need to set a custom upstream DNS server.
37
+ Check your network configuration on the host or ask your network administrator about the right DNS server address to use.
38
+ You can set the custom DNS server via the `config.landrush.upstream` option, see section on _Unmatched Queries_ in the link:Usage.adoc[Usage guide].
39
+
40
+ == ERROR: Failed to build gem native extension
41
+
42
+ Some of the Landrush dependencies use native extensions which get built during the plugin installation.
43
+ For that the required libraries and/or headers for the compilation must be installed on your machine.
44
+ How these required libraries need to be installed depends on the OS.
45
+ On link:https://en.wikipedia.org/wiki/APT_(Debian)[APT] based Linux distributions, it can for example be achieved via:
46
+
47
+ [source,bash]
48
+ ----
49
+ $ sudo apt install build-essential
50
+ ----
@@ -1,5 +1,5 @@
1
- Feature: Landrush reload
2
- Landrush DNS server should restart on a 'vagrant reload'
1
+ Feature: Basic commands
2
+ Basic Landrush commands including reload.
3
3
 
4
4
  Scenario Outline: booting a box and restarting it
5
5
  Given a file named "Vagrantfile" with:
@@ -1,4 +1,4 @@
1
- Feature: dns_resolution
1
+ Feature: DNS resolution
2
2
  Landrush should make a virtual machine's IP address DNS-resolvable.
3
3
 
4
4
  Scenario Outline: booting a box
@@ -33,7 +33,7 @@ Feature: dns_resolution
33
33
  Then Landrush is not running
34
34
 
35
35
  Examples:
36
- | box | provider |
37
- | debian/jessie64 | virtualbox |
38
- #| opensuse/openSUSE-42.1-x86_64 | virtualbox |
39
- #| ubuntu/wily64 | virtualbox |
36
+ | box | provider |
37
+ | debian/jessie64 | virtualbox |
38
+ | ubuntu/xenial64 | virtualbox |
39
+ | ubuntu/bionic64 | virtualbox |
@@ -1,4 +1,4 @@
1
- Feature: Landrush with Docker provider
1
+ Feature: Docker provider
2
2
  Landrush should work with Docker provider
3
3
 
4
4
  Scenario: Booting box with Docker provider
@@ -25,6 +25,9 @@ Feature: landrush-ip
25
25
  When I successfully run `bundle exec vagrant up --provider <provider>`
26
26
  Then the host visible IP address of the guest is the IP of interface "eth3"
27
27
 
28
+ When I successfully run `bundle exec vagrant landrush stop`
29
+ Then Landrush is not running
30
+
28
31
  Examples:
29
32
  | box | provider |
30
33
  | debian/jessie64 | virtualbox |
@@ -52,6 +55,10 @@ Feature: landrush-ip
52
55
  When I successfully run `bundle exec vagrant up --provider <provider>`
53
56
  Then the host visible IP address of the guest is the IP of interface "eth4"
54
57
 
58
+ When I successfully run `bundle exec vagrant landrush stop`
59
+ Then Landrush is not running
60
+
55
61
  Examples:
56
62
  | box | provider |
57
63
  | debian/jessie64 | virtualbox |
64
+
@@ -13,9 +13,7 @@ module Landrush
13
13
  end
14
14
 
15
15
  def redirect_dns
16
- info "setting up machine's DNS to point to our server"
17
16
  machine.guest.capability(:redirect_dns, host: _target_host, port: Server.port)
18
-
19
17
  machine.config.vm.networks.each do |type, options|
20
18
  info "network: #{type.inspect}, #{options.inspect}"
21
19
  end
@@ -50,7 +50,7 @@ module Landrush
50
50
  def add_prerequisite_network_interface
51
51
  return unless virtualbox? && !private_network_exists?
52
52
 
53
- info 'virtualbox requires an additional private network; adding it'
53
+ info 'Virtualbox requires an additional private network; adding it'
54
54
  machine.config.vm.network :private_network, type: :dhcp
55
55
  end
56
56
 
@@ -93,7 +93,7 @@ module Landrush
93
93
  end
94
94
 
95
95
  unless Store.hosts.has?(machine_hostname, ip_address)
96
- info "adding machine entry: #{machine_hostname} => #{ip_address}"
96
+ info "Adding '#{machine_hostname} => #{ip_address}' to #{Store.hosts.backing_file}"
97
97
  Store.hosts.set(machine_hostname, ip_address)
98
98
  Store.hosts.set(IPAddr.new(ip_address).reverse, machine_hostname)
99
99
  end
@@ -25,7 +25,7 @@ module Landrush
25
25
  def teardown_machine_dns
26
26
  return unless Store.hosts.has? machine_hostname
27
27
 
28
- info "removing machine entry: #{machine_hostname}"
28
+ info "Removing machine entry: #{machine_hostname}"
29
29
  Store.hosts.delete(machine_hostname)
30
30
  end
31
31
 
@@ -42,8 +42,7 @@ module Landrush
42
42
  # This allows us to be more accurate, especially with logging what's going on.
43
43
  unless machine.config.landrush.host_interface.nil?
44
44
  addr = addresses.detect { |a| a['name'] == machine.config.landrush.host_interface }
45
-
46
- machine.env.ui.warn "[landrush] Unable to find interface #{machine.config.landrush.host_interface}" if addr.nil?
45
+ log_with_prefix(:warn, "Unable to find interface #{machine.config.landrush.host_interface}", machine) if addr.nil?
47
46
  end
48
47
 
49
48
  if addr.nil?
@@ -64,11 +63,14 @@ module Landrush
64
63
  end
65
64
 
66
65
  ip = IPAddr.new(addr[key])
67
-
68
- machine.env.ui.info "[landrush] Using #{addr['name']} (#{addr[key]})"
69
-
66
+ log_with_prefix(:info, "Using #{addr['name']} (#{addr[key]})", machine)
70
67
  ip.to_s
71
68
  end
69
+
70
+ def self.log_with_prefix(level, msg, machine)
71
+ @prefix_ui = Vagrant::UI::Prefixed.new(machine.env.ui, machine.name) if @prefix_ui.nil?
72
+ @prefix_ui.send level, "[landrush] #{msg}"
73
+ end
72
74
  end
73
75
  end
74
76
  end
@@ -2,20 +2,34 @@ module Landrush
2
2
  module Cap
3
3
  module Linux
4
4
  module RedirectDns
5
- def self.redirect_dns(machine, target = {})
6
- dns_servers = machine.guest.capability(:configured_dns_servers)
7
- %w[tcp udp].each do |proto|
5
+ class << self
6
+ def redirect_dns(machine, target = {})
7
+ prefix_ui = Vagrant::UI::Prefixed.new(machine.env.ui, machine.name)
8
+ dns_servers = machine.guest.capability(:configured_dns_servers)
8
9
  dns_servers.each do |dns_server|
9
- machine.guest.capability(
10
- :add_iptables_rule,
11
- _redirect_dns_rule(proto, dns_server, target.fetch(:host), target.fetch(:port))
12
- )
10
+ prefix_ui.info("[landrush] Setting up iptables rule on guest for DNS server #{dns_server}")
11
+ enable_route_localnet(machine) if dns_server =~ /127\.0\.0\.\d+/
12
+ %w[tcp udp].each do |proto|
13
+ machine.guest.capability(:add_iptables_rule, redirect_dns_rule(proto, dns_server, target.fetch(:host), target.fetch(:port)))
14
+ end
13
15
  end
14
16
  end
15
- end
16
17
 
17
- def self._redirect_dns_rule(protocol, original_server, target_server, target_port)
18
- "OUTPUT -t nat -p #{protocol} -d #{original_server} --dport 53 -j DNAT --to-destination #{target_server}:#{target_port}"
18
+ private
19
+
20
+ def redirect_dns_rule(protocol, original_server, target_server, target_port)
21
+ "OUTPUT -t nat -p #{protocol} -d #{original_server} --dport 53 -j DNAT --to-destination #{target_server}:#{target_port}"
22
+ end
23
+
24
+ def enable_route_localnet(machine)
25
+ command = "sh -c 'echo 1 > /proc/sys/net/ipv4/conf/all/route_localnet'"
26
+ machine.communicate.sudo(command) do |data, type|
27
+ if %i[stderr stdout].include?(type)
28
+ color = type == :stdout ? :green : :red
29
+ machine.env.ui.info(data.chomp, color: color, prefix: false)
30
+ end
31
+ end
32
+ end
19
33
  end
20
34
  end
21
35
  end
@@ -23,6 +23,41 @@ module Landrush
23
23
  (`reg query HKU\\S-1-5-19 2>&1` =~ /ERROR/).nil?
24
24
  end
25
25
 
26
+ # Given an IP determines the network name, if any. Uses netsh which generates output like this:
27
+ #
28
+ # ...
29
+ # \n\n
30
+ # Configuration for interface "Ethernet 2"
31
+ # DHCP enabled: Yes
32
+ # IP Address: 10.10.10.1
33
+ # Subnet Prefix: 10.10.10.0/24 (mask 255.255.255.0)
34
+ # InterfaceMetric: 10
35
+ # DNS servers configured through DHCP: None
36
+ # Register with which suffix: Primary only
37
+ # WINS servers configured through DHCP: None
38
+ # \n\n
39
+ # ...
40
+ def get_network_name(ip)
41
+ cmd_out = `netsh interface ip show config`
42
+ network_details = cmd_out.split(/^$/).reject(&:empty?).select do |settings|
43
+ begin
44
+ lines = settings.split(/\n/).reject(&:empty?)
45
+ subnet = lines[3]
46
+ next false unless subnet =~ /Subnet Prefix/
47
+
48
+ mask = IPAddr.new(subnet.match(%r{.* (\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}/\d{1,3}).*}).captures[0])
49
+ address = IPAddr.new(ip)
50
+
51
+ mask.include?(address)
52
+ rescue StandardError
53
+ false
54
+ end
55
+ end
56
+ return nil if network_details[0].nil? || network_details[0].empty?
57
+
58
+ network_details[0].split(/\n/).reject(&:empty?)[0].match(/Configuration for interface "(.*)"/).captures[0].strip
59
+ end
60
+
26
61
  private
27
62
 
28
63
  # Checks that all required tools are on the PATH and that the Wired AutoConfig service is started
@@ -102,41 +137,6 @@ module Landrush
102
137
  interface_details[0].split(/\n/)[2].match(/.*:(.*)/).captures[0].strip
103
138
  end
104
139
 
105
- # Given an IP determines the network name, if any. Uses netsh which generates output like this:
106
- #
107
- # ...
108
- # \n\n
109
- # Configuration for interface "Ethernet 2"
110
- # DHCP enabled: Yes
111
- # IP Address: 10.10.10.1
112
- # Subnet Prefix: 10.10.10.0/24 (mask 255.255.255.0)
113
- # InterfaceMetric: 10
114
- # DNS servers configured through DHCP: None
115
- # Register with which suffix: Primary only
116
- # WINS servers configured through DHCP: None
117
- # \n\n
118
- # ...
119
- def get_network_name(ip)
120
- cmd_out = `netsh interface ip show config`
121
- network_details = cmd_out.split(/\n\n/).select do |settings|
122
- begin
123
- lines = settings.split(/\n/).reject(&:empty?)
124
- subnet = lines[3]
125
- next false unless subnet =~ /Subnet Prefix/
126
-
127
- mask = IPAddr.new(subnet.match(%r{.* (\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}/\d{1,3}).*}).captures[0])
128
- address = IPAddr.new(ip)
129
-
130
- mask.include?(address)
131
- rescue StandardError
132
- false
133
- end
134
- end
135
- return nil if network_details[0].nil?
136
-
137
- network_details[0].split(/\n/)[0].match(/Configuration for interface "(.*)"/).captures[0].strip
138
- end
139
-
140
140
  # Makes sure that we have admin privileges and if nor starts a new shell with the required
141
141
  # privileges
142
142
  def run_with_admin_privileges(file, *args)
@@ -1,3 +1,3 @@
1
1
  module Landrush
2
- VERSION = '1.3.0'.freeze
2
+ VERSION = '1.3.1'.freeze
3
3
  end
@@ -0,0 +1,59 @@
1
+ #!/bin/bash
2
+
3
+ programname=$0
4
+ function usage()
5
+ {
6
+ echo "usage: $programname -m milestone"
7
+ echo " -m milestone id"
8
+ exit 1
9
+ }
10
+
11
+
12
+
13
+ # Given a milestone id, generates a sorted list of issues for this milestone.
14
+ # Can be used to generate content for CHANGELOG.md
15
+ function milestone_issues()
16
+ {
17
+ # get the raw data
18
+ milestone_data="`curl -s https://api.github.com/repos/vagrant-landrush/landrush/issues?per_page=100\&milestone=$milestone\&state=closed`"
19
+
20
+ issue_list=`echo $milestone_data | jq '.[] | "- Issue [#" + (.number|tostring) + "](" + .url + ") - " + .title'`
21
+
22
+ # sort first on issue type, then issue id
23
+ issue_list=`echo "$issue_list" | sort -k4,4 -k2n`
24
+
25
+ # Remove enclosing quotes on each line
26
+ issue_list=`echo "$issue_list" | tr -d \"`
27
+
28
+ # Replace \ which is left over from above command with "(double quote) and suppress warning
29
+ issue_list=`echo "$issue_list" | tr '\' '"' 2> /dev/null`
30
+
31
+ # Adjust the issue links
32
+ issue_list=`echo "$issue_list" | sed -e s/api.github.com.repos/github.com/g`
33
+
34
+ echo "$issue_list"
35
+ }
36
+
37
+ while getopts ":r:m:" opt; do
38
+ case $opt in
39
+ r)
40
+ repository=$OPTARG
41
+ ;;
42
+ m)
43
+ milestone=$OPTARG
44
+ ;;
45
+ *)
46
+ usage
47
+ exit 1
48
+ ;;
49
+ esac
50
+ done
51
+
52
+ shift $((OPTIND-1))
53
+
54
+ if [ -z "${milestone}" ]; then
55
+ usage
56
+ exit 1
57
+ fi
58
+
59
+ milestone_issues
@@ -1,12 +1,8 @@
1
1
  require_relative '../../../../test_helper'
2
2
 
3
- module Landrush
4
- module Cap
5
- module Windows
6
- describe ConfigureVisibilityOnHost do
7
- TEST_IP = '10.42.42.42'.freeze
3
+ TEST_IP = '10.42.42.42'.freeze
8
4
 
9
- DOT_3_SVC_RUNNING = 'SERVICE_NAME: dot3svc
5
+ DOT_3_SVC_RUNNING = 'SERVICE_NAME: dot3svc
10
6
  TYPE : 30 WIN32
11
7
  STATE : 4 RUNNING
12
8
  (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
@@ -16,7 +12,7 @@ module Landrush
16
12
  WAIT_HINT : 0x0
17
13
  '.freeze
18
14
 
19
- DOT_3_SVC_STOPPED = 'SERVICE_NAME: dot3svc
15
+ DOT_3_SVC_STOPPED = 'SERVICE_NAME: dot3svc
20
16
  TYPE : 30 WIN32
21
17
  STATE : 1 STOPPED
22
18
  WIN32_EXIT_CODE : 0 (0x0)
@@ -25,6 +21,54 @@ module Landrush
25
21
  WAIT_HINT : 0x0
26
22
  '.freeze
27
23
 
24
+ NETSH_EXAMPLE = '
25
+ Configuration for interface "VirtualBox Host-Only Network #1"
26
+ DHCP enabled: No
27
+ IP Address: 192.168.99.1
28
+ Subnet Prefix: 192.168.99.0/24 (mask 255.255.255.0)
29
+ InterfaceMetric: 25
30
+ Statically Configured DNS Servers: None
31
+ Register with which suffix: Primary only
32
+ Statically Configured WINS Servers: None
33
+
34
+ Configuration for interface "Ethernet"
35
+ DHCP enabled: Yes
36
+ IP Address: 192.168.1.193
37
+ Subnet Prefix: 192.168.1.0/24 (mask 255.255.255.0)
38
+ Default Gateway: 192.168.1.1
39
+ Gateway Metric: 0
40
+ InterfaceMetric: 35
41
+ DNS servers configured through DHCP: 192.168.1.1
42
+ Register with which suffix: Primary only
43
+ WINS servers configured through DHCP: None
44
+
45
+ Configuration for interface "Loopback Pseudo-Interface 1"
46
+ DHCP enabled: No
47
+ IP Address: 127.0.0.1
48
+ Subnet Prefix: 127.0.0.0/8 (mask 255.0.0.0)
49
+ InterfaceMetric: 75
50
+ Statically Configured DNS Servers: None
51
+ Register with which suffix: Primary only
52
+ Statically Configured WINS Servers: None
53
+ '.freeze
54
+
55
+ NETSH_EXAMPLE_SINGLE_INTERFACE = '
56
+ Configuration for interface "Ethernet"
57
+ DHCP enabled: Yes
58
+ IP Address: 192.168.1.193
59
+ Subnet Prefix: 192.168.1.0/24 (mask 255.255.255.0)
60
+ Default Gateway: 192.168.1.1
61
+ Gateway Metric: 0
62
+ InterfaceMetric: 35
63
+ DNS servers configured through DHCP: 192.168.1.1
64
+ Register with which suffix: Primary only
65
+ WINS servers configured through DHCP: None
66
+ '.freeze
67
+
68
+ module Landrush
69
+ module Cap
70
+ module Windows
71
+ describe ConfigureVisibilityOnHost do
28
72
  before do
29
73
  @vboxmanage_found = !Vagrant::Util::Which.which('VBoxManage').nil?
30
74
  @has_admin_privileges = Landrush::Cap::Windows::ConfigureVisibilityOnHost.admin_mode?
@@ -63,6 +107,35 @@ module Landrush
63
107
  end
64
108
  end
65
109
 
110
+ describe '#get_network_name' do
111
+ it 'returns network name for matching IP' do
112
+ ConfigureVisibilityOnHost.expects(:`).with('netsh interface ip show config').returns(NETSH_EXAMPLE)
113
+ expect(ConfigureVisibilityOnHost.get_network_name('192.168.1.193')).must_equal('Ethernet')
114
+ end
115
+
116
+ it 'returns nil for non matching IP' do
117
+ ConfigureVisibilityOnHost.expects(:`).with('netsh interface ip show config').returns(NETSH_EXAMPLE)
118
+ expect(ConfigureVisibilityOnHost.get_network_name('42.42.42.42')).must_be_nil
119
+ end
120
+
121
+ it 'returns nil for nil input' do
122
+ ConfigureVisibilityOnHost.expects(:`).with('netsh interface ip show config').returns(NETSH_EXAMPLE)
123
+ expect(ConfigureVisibilityOnHost.get_network_name(nil)).must_be_nil
124
+ end
125
+
126
+ it 'returns nil for empty input' do
127
+ ConfigureVisibilityOnHost.expects(:`).with('netsh interface ip show config').returns(NETSH_EXAMPLE)
128
+ expect(ConfigureVisibilityOnHost.get_network_name('')).must_be_nil
129
+ end
130
+
131
+ describe '#get_network_name' do
132
+ it 'returns network name for single interface' do
133
+ ConfigureVisibilityOnHost.expects(:`).with('netsh interface ip show config').returns(NETSH_EXAMPLE_SINGLE_INTERFACE)
134
+ expect(ConfigureVisibilityOnHost.get_network_name('192.168.1.193')).must_equal('Ethernet')
135
+ end
136
+ end
137
+ end
138
+
66
139
  def network_state
67
140
  `netsh interface ip show config`.split(/\n/).reject(&:empty?)
68
141
  end
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: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Hinze
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-19 00:00:00.000000000 Z
11
+ date: 2018-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: filelock
@@ -162,6 +162,7 @@ files:
162
162
  - lib/landrush/util/process_helper.rb
163
163
  - lib/landrush/util/retry.rb
164
164
  - lib/landrush/version.rb
165
+ - scripts/changelog.sh
165
166
  - test/landrush/action/setup_test.rb
166
167
  - test/landrush/action/teardown_test.rb
167
168
  - test/landrush/cap/guest/all/read_host_visible_ip_address_test.rb